C/C++の宿題片付けま ..
[2ch|▼Menu]
409:デフォルトの名無しさん
10/02/01 19:26:11
[1] C言語演習
[2]
int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10}
int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5}
が与えられている。
値x[0]*y[0]+2*x[1]*y[1]+3*x[2]*y[2]+4*x[3]*y[3]+5*x[4]*y[4]+6*x[5]*y[5]
が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム
[3] Windows XP/Borland C++ 5.0/C言語
[4] 2/18迄
[5] 特に無し

410:デフォルトの名無しさん
10/02/01 20:27:14
>>408
拙作のgetline() のほうでしたら、fgets() が NULL を返すのをみて、一行入力の終わりがきたことを検知できます。特に問題はありません。

411:デフォルトの名無しさん
10/02/01 20:36:37
>>410
EOF入力してみた?

412:デフォルトの名無しさん
10/02/01 20:37:07
>>409
6以降はどうすんの?

413:410
10/02/01 20:41:12
>>411
わざわざ Ctrl-Dを入力しなくとも、一行の終わりは検知できていますが、何か?

414:409
10/02/01 20:43:57
すみません。誤りがありましたので訂正させて下さい。
[1] C言語演習
[2]
int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10}
int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5}
が与えられている。
値x[0]*y[0] - 2*x[1]*y[1]+3*x[2]*y[2]- 4*x[3]*y[3]+5*x[4]*y[4]-6*x[5]*y[5]
+7*x[6]*y[6]-8*x[7}*y[7]+9*x[8]}*y[8]-10*x[9]*x[9]
が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム
最大/最小になる時のx[],y[]とその値を出力すること

[3] Windows XP/Borland C++ 5.0/C言語
[4] 2/18迄
[5] 特に無し

415:デフォルトの名無しさん
10/02/01 20:51:49
>>413
入力してみ。

416:デフォルトの名無しさん
10/02/01 21:05:14
>>415
特になにもおこりません。というか fgets() で一行入力できているのですが。
どんな振る舞いが発生して、どうおかしいのか教えていただけないでしょうか?

417:デフォルトの名無しさん
10/02/01 21:21:57
>>416
> >
cannot found
がずっとでたけど。
EOFになったら綺麗に終了したほうがいいよ。

418:デフォルトの名無しさん
10/02/01 21:34:01
[1] C言語プログラミング演習(大学専門課程選択教科期末課題)
[2]URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]
[3-1] Windows Vista
[3-2] Visual C++ 2005
[3-3] C/C++どちらでも可(なるべくC言語)
[4] 2/11迄
[5]SQLがイマイチ理解できないので、指針だけでも
よろしくお願いします


419:デフォルトの名無しさん
10/02/01 21:36:53
>>417
なるほど、bash でも Ctrl-D できれいに終了しますね。
これは改良の余地がありました。アドバイスありがとうございます。
コード中のgetline() (とmain())を書き直しました。
URLリンク(codepad.org)

420:デフォルトの名無しさん
10/02/02 00:56:53
[1] 授業単元:プログラミング実践
[2] 問題文
アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。
(図)affin.txt
00000
00000
11111
00000
00000

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名: gcc
 [3.3] 言語:C++
[4] 期限:2010年2月4日まで
[5] その他の制限:特にありません

色々試しましたが、うまくいきませんでした。
よろしくお願いします。

421:409
10/02/02 00:59:25
すみません。
>>414の問題なんですがこちらの写し間違いみたいですので
結構です。取り敢えず今回はお願いを取り消させてください。
もういちど確かめてお願いするかもしれません。

422:418
10/02/02 14:40:57
>>418
の宿題のほう一部SQLが間違ったようですので
修正しました。まだ間違いがあるかもしれませんが。
注意事項も入れ忘れてましたので、いれました.
改めて依頼させて頂きます。

[1] C言語プログラミング演習(大学専門課程選択教科期末課題)
[2]URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]
[3-1] Windows Vista
[3-2] Visual C++ 2005
[3-3] C/C++どちらでも可(なるべくC言語)
[4] 2/11迄
[5]SQLがイマイチ理解できてないので、指針だけでも
よろしくお願いします

423:デフォルトの名無しさん
10/02/02 15:56:42
[1] 授業単元:DirectX研究
[2] 問題文(含コード&リンク):
サイコロを転がして目を決める。
 ・テーブルとサイコロを作成する。
 ・キー操作でサイコロを投げ下ろすように振る。
 ・落下してきて,1つの目を上にして止まる。
 ・何度でも遊べる

 ◎テーブルにサイコロの影がある
 ◎回転しながら落下してくる
 ◎自由な方向から見ることができる
 ◎テーブルの上でサイコロは跳ね,転がる。
 ◎サイコロとして正しい

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2008
 [3.3] 言語:C++
[4] 期限: 2月10日まで
[5] よろしくお願いいたします。

424:デフォルトの名無しさん
10/02/02 16:51:53
>>420
どのように試したの?
>>421
素朴だが10!x10!の組み合わせ最適化問題
この手には一般論は無いだろから、奇麗なCプロ
グラム一つに纏めるという発想が頭にあると困難かと.
(いろいろ「補助手段」を開発しているうちに
別の手段で偶然、解けてしまって目的自体が大
きく喪失してしまう危険性がこの手の問題に
はつきまとう)
てか宿題としてC言語限定というのは不適当
>>422
SQLをわかる奴は少ないとオモ

425:デフォルトの名無しさん
10/02/02 16:59:09
SQL文はわかるが、プログラムに組み込めといわれると・・・

426:デフォルトの名無しさん
10/02/02 17:06:40
>>422
RDBMSには何を使うの?
コネクションを張ってSQL文を投げるのには何のライブラリ使うの?自作するの?

427:デフォルトの名無しさん
10/02/02 17:09:14
SQL文を組み込むんじゃなくて、SQLで書かれた
抽象的な処理仕様に基づいて実装しろってことじゃ?
SQL鯖とかが出てなかった昔は結構この手の奴あった
常識的にこの手の奴ではテーブル配列自体は勝手に
ソート出来なかったり項目を拡張してはならなかったり
とか色々とウルサイし、処理速度向上の為に細かい
最適化が要求されてメンドイんで俺はパス

428:デフォルトの名無しさん
10/02/02 17:15:17
>>427
そういう意味か。それは面倒だ。

429:デフォルトの名無しさん
10/02/02 17:21:16
>>427
問題文の URLリンク(kansai2channeler.hp.infoseek.co.jp)
前半: 固定項で項目の拡張無しの配列

後半:
 解釈1) 題中のSQL文を与えたとして得られるであろう結果 と 同じ結果が得られるような関数を実装せよ
   (→ 関数実装時 SQL構文を解釈する必要は全く無い。 同じ結果を求めるコードを直接記述してね)

 解釈2) 題中のSQL文を渡して結果が得られるような 関数を実装せよ
   (→ 関数実装時 SQL構文を解釈する必要が出てくる) ((題中に出てこない SQL文に関してはスルーの方向で))

こう読み取れるっぽいけど… …俺 SQL文わからんのでパス

430:デフォルトの名無しさん
10/02/02 17:40:19
>>429
どこの大学か知らんが、宿題として汎用SQLパーサーを
作れって奴出す教師も、それを真に受ける奴もちょっと
って感じ。
てか市販のRDBMSのSQLパーサーの性能は相当に
高くなってきてるけど、ちょっと大きなデータ+複雑なSQLに
なると手動で作ったCPG+CSVデータにパフォーマンスで
大敗することも多い。
酷いSQLだったり酷い構造のテーブルが多いってことも
多いけど

431:デフォルトの名無しさん
10/02/02 17:57:49
>>429
とても動きそうにないコードだけど、これは 解釈1)の方だね。
スレリンク(tech板:569番)


432:429
10/02/02 18:09:32
>>430
俺はそこらへんの事情を全く知らないんで勘弁して。
問題文の意図が分からなかったんで >>429 と…

433:デフォルトの名無しさん
10/02/02 19:50:16
あんだけgroup byがネストしてたらやる気失う。

434:429
10/02/03 00:28:45
>>431
とりあえずありがとうございます。
がprologではなくあくまでもCの宿題なので、
参考のみにさせて頂きます。
ちなみにそのスレに私は書き込んでいません。
もし誰かが転記したのをやって頂いてここに貼りなおして
下さったというのであれば結果的に相当無駄なお手数を
おかけしたことになります。
構造体をほぼSQLのまま定義しその構造体の配列にデータ
が詰め込まれた状態でlist関数が呼び出されるという前提で、
SQLが記述しているセレクト処理で得られるレコードを
そのままコンソール出力すれば良いと
同輩が言ってたのですがやっぱり皆様が御指摘の
通りめんどうなコードになるんでしょうか?
(ちなみにSQL自体が何をする処理なのか
今ひとつつかめてません。おわかりの方が
いらしゃいましたら教えて頂けると嬉しいです)
DB板というのがあるそうでそちらのほうでも
聞いてみます。

435:デフォルトの名無しさん
10/02/03 00:29:10
どなたか317を作ってもらえませんか?
私の力では手におえません。。。
 

436:418
10/02/03 00:30:16
レス番号のほう間違えました。
>>418=>>422=>>434でした。

437:デフォルトの名無しさん
10/02/03 00:42:08
配列 int out[3]={1,5,3};
の配列の各要素の大小関係を比べるプログラムをfor文で作りたんですけど
どうすればいいですか?


438:デフォルトの名無しさん
10/02/03 00:42:52
質問は「俺に聞け」スレで

439:デフォルトの名無しさん
10/02/03 00:49:00
>>434
>>431じゃないけどSQLは多少わかる
「テーブルSEISEKIHYOUから、
より人数が多いクラスの5科目平均点
以上の5科目成績の生徒で、より人数が
多いクラスの国語平均点の最高よりは
下の国語成績で、数学が最も成績が
高かった生徒について、その担当教師
と氏名、数学成績、国語成績を
リストする。」

440:デフォルトの名無しさん
10/02/03 00:58:45
420のものです。

ファイル読み込みまではいけたのですが、回転はさっぱりでした。

ご教授ねがいます。

441:デフォルトの名無しさん
10/02/03 01:09:31
>>440
公式を当てがうだけのつまらない問題だね
出来ないのは言語によるものじゃなくて
アフィン変換がどういうものか分かってないだけ。

442:デフォルトの名無しさん
10/02/03 01:13:22
00000
00000
11111
00000
00000
を90度

回転させると

00100
00100
00100
00100
00100

これじゃ駄目?

443:デフォルトの名無しさん
10/02/03 01:14:55
>>435
書こうと思ったけどエラー処理がめんどくさいんだよな


444:デフォルトの名無しさん
10/02/03 17:13:38
>>442

まさにその通りなんですが、それをプログラムでかくことができなかったです・・・

445:デフォルトの名無しさん
10/02/03 18:28:27
自分用のメモ
>>317


446:デフォルトの名無しさん
10/02/03 18:47:37
>>420,440,441,442,444
簡単、簡単、
URLリンク(kansai2channeler.hp.infoseek.co.jp)

447:デフォルトの名無しさん
10/02/03 19:25:39
>>420
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(www.geocities.co.jp)

448:434
10/02/03 19:33:42
DB板で相談したところすんなりとコードを
書いて頂けました。
もちろん許可をとってないのでお見せする
わけにはいかないのですが合計250行にも
なる立派なコードでした。

449:デフォルトの名無しさん
10/02/03 19:43:01
>>446
ご回答ありがとうございます。
試してみたんですが、コンパイルはうまくいきましたが何も表示されませんでした。
何か打ち込まなくては、いけないのですか?

質問ばっかですいません。。。

450:デフォルトの名無しさん
10/02/03 19:54:22
>>448
「立派なコード」を「すんなり」ですか

451:yui ◆zuLLaJzEzk
10/02/03 20:26:20
[1] 授業単元:情報処理入門
[2] 問題文(含コード&リンク):
rep1.ppmとrep2.ppmの2つの画像を加算するプログラムを作成せよ.
プログラム中で加算したデータは,コントラスト強調を行った上で
PPM画像ファイル(h12r.ppm)として保存するようにすること.
Cのソースファイルh12r.cおよび実行することにより作成
される画像ファイルを提出すること.rep1.ppmとrep2.ppmの
サイズはいずれも横124×縦124画素である.h12r.ppmのサイズも同じとする.

rep1.ppm
URLリンク(kansai2channeler.hp.infoseek.co.jp)
rep2.ppm
URLリンク(kansai2channeler.hp.infoseek.co.jp)


[3] 環境
[3.1] OS: (Windows/Linux/等々)
Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc 3.4
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
Cでおねがいします。
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
提出期限2010年2月8日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
特にありません。


前回は皆さんに本当にお世話になりました。あらためてお礼を言いたいです。本当にありがとうございました。
今回が最終レポートになるのですがどうか助けていただけないでしょうか?
よろしくお願い致します。

452:デフォルトの名無しさん
10/02/03 21:15:14
>>451
#include <stdio.h>
#define W 124
#define H 124
int main(){
double d,cl = -10.0;
unsigned char data1[H*W*3],data2[H*W*3],data3[H*W*3];
char buff[128];
FILE *fin1,*fin2,*fout;
int i;
if((fin1=fopen("rep1.ppm","rb"))==NULL)goto EXIT;
if((fin2=fopen("rep2.ppm","rb"))==NULL)goto EXIT;
if((fout=fopen("h12r.ppm","wb"))==NULL)goto EXIT;
for(i=0;i<3;i++)fgets(buff,128,fin1);
for(i=0;i<3;i++)fgets(buff,126,fin2);
fread(data1,1,sizeof(data1),fin1);
fread(data2,1,sizeof(data2),fin2);
for(i=0;i<H*W*3;i++){
d=data1[i]+data2[i];
d=d+cl*(d-127.5);
if(d>255)data3[i]=255;
else if(d<0)data3[i]=0;
else data3[i]=(unsigned char)d;
}
fprintf(fout,"P6\n124 124\n255\n");
fwrite(data3,1,H*W*3,fout);
EXIT:
if(fin1)fclose(fin1);
if(fin2)fclose(fin2);
if(fout)fclose(fout);
return 0;
}

453:デフォルトの名無しさん
10/02/03 21:25:30
>>447
ひえーこの場合はこれで正解なのか
偶然だな

454:デフォルトの名無しさん
10/02/03 22:51:55
>>447
ご回答ありがとうございます。

その処理を
00000
00000
11111
00000
00000

でしたいんですが、どうしたらいいですか?

455:デフォルトの名無しさん
10/02/03 23:31:12
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):課題2−2と2−3です。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C
[4] 期限: [2010年02月07日23:59まで]
[5] その他の制限:
よろしくお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

456:デフォルトの名無しさん
10/02/03 23:59:33
[1] 授業単元: データ演習
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: C言語
[4] 期限: [2010年02月08日20:00まで]
[5] その他の制限:
努力はするも此方も断念 何方か宜しくお願い致す。

URLリンク(kansai2channeler.hp.infoseek.co.jp)


457:447
10/02/04 01:19:54
>>454
// 入力
for(i=0; i<MAX; ++i)
  for(j=0; j<MAX; ++j)
    a[i][j] = (i==MAX/2)?1:0;

458:デフォルトの名無しさん
10/02/04 01:28:05
>>457
ありがとうございます。
ちゃんと表示されました。

459:デフォルトの名無しさん
10/02/04 01:35:10
[1] 授業単元:プログラミング実践
[2] 問題文
アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして60°回転した結果を出力せよ。
(図)affin.txt
000000000
000010000
000010000
000010000
011111110
000010000
000010000
000010000
000000000

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名: gcc
 [3.3] 言語:C++
[4] 期限:2010年2月5日まで
[5] その他の制限:特にありません

420のものです。
度々申し訳ありませんが、よろしくお願いします。

460:デフォルトの名無しさん
10/02/04 02:03:01
>>459
・問題文は、出題されたまま全文を書いてください。

もしそのまま出題されているとするなら糞問題です
添削スレで晒しちゃいましょう

461:デフォルトの名無しさん
10/02/04 02:29:39
良問自作テキスト:熱心な先生だ
悪問自作テキスト:着服しただろこいつ

462:447
10/02/04 02:45:18
URLリンク(kansai2channeler.hp.infoseek.co.jp)
数学なら左回転でいいのでした。

463:デフォルトの名無しさん
10/02/04 03:51:41
>459
アンチエイリアシング

464:デフォルトの名無しさん
10/02/04 05:56:57
>>460
なぜ糞問題と思ったのでしょうか、そこをひとつ。

465:デフォルトの名無しさん
10/02/04 07:29:06
[2] CIP法での1次元の移流計算
[3] 環境
[3.1] OS:Vista
[3.2] コンパイラ名:Microsoft Visual Studio 2008  
[3.3] 言語:C++
自分で以下のプログラムを作ったところ。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

tの値を増やすにつれてf[n][t]のnの初期のほうの値がなぜかでかい数字が出てしまいます。
自分の計算ではtの値を増やせば、f[n][t]のnの初期のほうの値は0になると思うんですが、一体どこが悪いのか、ご教授をお願いいたします。

466:デフォルトの名無しさん
10/02/04 08:26:07
>>459
これでいいのかな?
URLリンク(kansai2channeler.hp.infoseek.co.jp)

467:デフォルトの名無しさん
10/02/04 08:40:53
>>466
オレなら
if(x>=-4 && x<=4 && y>=-4 && y<=4)
mat2[i][j] = mat1[4 + x][4 + y];
こうするな
はみ出たらカット

468:447
10/02/04 12:23:47
>>462 間違い sqrt(3)/2 だった。
x = i - MAX/2;
y = j - MAX/2;
m = x/2.0 - y*SQRT3/2;
n = x*SQRT3/2 + y/2.0;
x = m + MAX/2;
y = n + MAX/2;
if(x<0 || x>=MAX) continue;
if(y<0 || y>=MAX) continue;
// 左回転
if(b[x][y]==0)
  b[x][y] = a[i][j];

469:デフォルトの名無しさん
10/02/04 20:21:37
>>462
>>466

ありがとうございました。
手つかずだったので、ほんと助かりました。。

470:466
10/02/05 16:32:53
要素の計算方法が逆だったのかな?と今考えてるけど。
変換先位置から変換元の要素を求めたんだけど、
画像の変換の問題じゃないんだから、逆の方が良かったかな?

471:デフォルトの名無しさん
10/02/05 19:17:12
>>470
90度回転なら、どちらの方法でも、隙間ができない。
60度回転では、・・・

ってことがポイントになる問題だったのでは?
画像かどうかは関係ないでしょ。


472:デフォルトの名無しさん
10/02/06 15:42:11
>>455
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
どうぞ。

473:デフォルトの名無しさん
10/02/06 16:15:20
どなたか406お願い出来ないでしょうか?

474:っっ
10/02/06 16:26:33
このプログラミングの前まではうまくいっているのですが、この部分がうまくいきません。助けてくださいm(_ _)m

printf("A/Sの式\n");
for(j=1;j<=12;j++){
a[i][j]/s[j];
printf("%3.1f\n",a[i][j]);
}

475:っっ
10/02/06 16:32:18
                          _. - ._             _
                      /. -−- \             l `i   __
                         //      ヽ          } ´ ̄ ´ '´ う
                     |{      /\  ____  j     /
      ( ヽ              '.l.   ___/    ヽ´  ー-=ニ.¨`7     r '
   r─’ `ヽ            .ゞ ' ´         '.       `丶、  /
 (´_ ̄       ヽ         /             |       \  \/
 ‘ー⊂.         \      /  ,    l  |    |、        ヽ‐-,ヽ
      ̄ ̄\     \.     /  /     !  ∧   ||ヽ__|     ∨ `
          \     \  /  /     | / '   ||'´ヽ l      l. ',     オワタ
            \     \l  '    |  ,ィ´′ ∨ ハ. |   Nヽ.   |、 i
              \     \l.    |  /|/     / /       ',   |、ヽ!
                \     ヽ、.  | i       ∨    三三 ハ.  ! \
                  \.   /\ | | xィ彡        ・{ l. ∧ /
                /\ /   }'ヽ! "´       ,、_,   l |∨ ∨
                  / /   /   \     ‘7´  )   .ノ |     l
               {      /    ',\    、__,. ' ,/  |    /
                 \   /      ', ヽ----r ' ´ |   |  ./
                 | ー ´         ',  ',   ヽ    |   |  /

提出期限過ぎてしまった

476:デフォルトの名無しさん
10/02/06 19:00:28
>474
s/\//\/=/

477:デフォルトの名無しさん
10/02/06 20:55:03
>>406

478:デフォルトの名無しさん
10/02/06 20:56:51
>>474
a[i][j]/s[j];
の結果をどうしたいのですか?どこに保存するのですか?

479:デフォルトの名無しさん
10/02/06 23:49:03
>>475
小学校の国語から始めるべきです
C言語はその後で良いでしょう

480:デフォルトの名無しさん
10/02/07 01:25:57
[2] プログラム
環境
[3.1] OS:Linux
[3.2] コンパイラ名:gcc  
[3.3] 言語:C++
以下の実行結果はどうなるか


#include<stdio.h>
#define N10
int main(){
int i,wa=0;
for(i=1;i<N;i++){
if((i%2) == 0) continue;
wa+=i;}
printf("%d\n",wa);
return 0;}


よろしくお願いします。

481:デフォルトの名無しさん
10/02/07 01:31:24
>>480
Nが未定義という類のエラーが出るでしょう

482:デフォルトの名無しさん
10/02/07 01:40:50
>>480
URLリンク(codepad.org)

483:デフォルトの名無しさん
10/02/07 03:45:18
[1] C言語プログラミング初歩(専門学校)
[2] int型の配列変数A[64][32]をB[32][64]に代入する.
次の対応があるようにすること
A[0][0] -> A[0][1] -> A[0][31] ->A[1][0] ->....->A[63][31]
B[0][0] -> B[0][1]-> B[0][31] -> B[0][32]->....->B[31][63]
(上の段と下の段が一致)
A[m][n]には値 (m+n) % 31が入っているものとする。
[3] Windows Vista /Visual studio 2008/C言語
[4] 2/15迄
[5] 1月開講です。ポインタはまだ習ってません

484:デフォルトの名無しさん
10/02/07 05:03:38
>>483
こんな感じ?

#include<stdio.h>
int main()
{
  static int A[64][32], B[32][64];
  int m,n;

  for(m=0;m<64;m++)
    for(n=0;n<32;n++)
      A[m][n]=(m+n)%31;

  for(m=0;m<32;m++)
    for(n=0;n<64;n++)
      B[m][n]=A[2*m+n/32][n%32];

  return(0);
}

485:冷やかしです
10/02/07 05:41:31
return(0)はかっこ良すぎ(カッコ付け過ぎ)
return 0;で十分w
てか関数呼び出しと見間違えやすいので付けないほうが吉

486:温めます
10/02/07 09:35:40
int *a = &A[0][0], *b = &B[0][0];

for(m=0;m<32;m++)
  for(n=0;n<64;n++)
    *b++ = *a++;

487:前スレ639
10/02/07 11:46:40
宿題でなく質問させてもらいます。
スレリンク(tech板:652番)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上のプログラムについて聞きたいのですが

このプログラムはfor文を2回まわしているので数列の長さをLとしたとき計算量は2LなのでO(L)と言えるのでしょうか?
それと、ソースの下の方にある ? はifの省略記法なのでしょうか?

初心者でよくわからなかったのでお教えください

488:デフォルトの名無しさん
10/02/07 12:08:15
>>487
O(n^2) 実際に適当な値入れて何回実行されるか考えたらいいと思う。

そういう捉え方もできなくもないが別物。
三項演算子とかでググったらいいと思う。

489:前スレ639
10/02/07 12:22:19
>>488
このプログラムを作ったくれた作者さんのレスを載せると

>数列のn[i]について毎回「n[i]の前後にn[i]よりも大きい数と小さい数があるか」を調べる場合、
>計算量は数列の長さをLとして O(L^2)かかる。
>一方、>>646のように、n[i]までの最大値と最小値を先に計算してしまうと計算量はO(L)で済む。

と書いてあり、
自分で考えてみてもl-1回計算するfor文が2個あるので2l-2なので、やはりO(L)といえる気もしますが・・・よくわかりません。


?は条件演算子ですね。分かりました。ありがとうございました。

490:デフォルトの名無しさん
10/02/07 12:23:36
>>487
>計算量は2LなのでO(L)と言えるのでしょうか?
YES。入れ子になってれば積になってO(L^2)だけど、
別々になっているので全体の計算量は多い方(今回は同じ)になる。

?は "c ? a : b" という三項演算子の一部。詳細はぐぐれば分かる。
基本的にはifとは別物だが、非常に限定された場面では代わりに使うこともできる。

491:488
10/02/07 12:30:26
最初の奴はよく見てなかった。

492:デフォルトの名無しさん
10/02/07 12:31:17
しかも、今度は途中送信スマン

493:前スレ639
10/02/07 12:38:12
それでは計算量は作者のとおりO(L)ということで正しいのですね?
ありがとうございます!勉強になりました!

494:デフォルトの名無しさん
10/02/07 13:14:34
【質問テンプレ】
[1] 授業単元:C言語入門
[2] 問題文:
キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する。ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c)
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2月8日
[5] その他の制限:特にありません。

よろしくお願いします。

495:デフォルトの名無しさん
10/02/07 14:55:13
>>494
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こんな感じでしょうか。

496:デフォルトの名無しさん
10/02/07 15:55:53
>>495
ありがとうございます!
ですがコンパイル出来ませんでした;
制御構造の単元なのですが、While文などを使ってもう少し簡単にしていただくことはできるでしょうか?;

497:495
10/02/07 16:46:58
>>496
エラーメッセージを全部コピペしてもらえます?

498:デフォルトの名無しさん
10/02/07 17:18:05
>>497
vowel.c:
エラー E2140 vowel.c 31: ここでは宣言はできない(関数 countVowel )
エラー E2141 vowel.c 32: 宣言の構文エラー(関数 countVowel )
エラー E2139 vowel.c 70: 宣言に ; がない(関数 countVowel )
エラー E2134 vowel.c 70: 複合文に } がない(関数 countVowel )
*** 4 errors in Compile ***
です。


499:デフォルトの名無しさん
10/02/07 17:24:13
>>497
すみません。
こちら側のミスでエラではなく警告のみでした。
vowel.c:
警告 W8057 vowel.c 68: パラメータ 'argc' は一度も使用されない(関数 main )
警告 W8057 vowel.c 68: パラメータ 'argv' は一度も使用されない(関数 main )

500:デフォルトの名無しさん
10/02/07 17:35:10
>>499
int main (int argc, char* argv[])



int main ()

もしくは

int main(void)

に書き換えてみてください。

501:デフォルトの名無しさん
10/02/07 17:58:32
>>500
int main()に書き換えたらコンパイル出来ました!
for文苦手なので本当に助かりました。
ありがとうございました!!

502:デフォルトの名無しさん
10/02/07 18:16:02
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
  入力された2つの文字列str1,str2を比較し、str1にstr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す関数、strcmpを作成せよ。
int strcmp( char *str1, char *str2);
ex. str1=”abaabab” , str2=”aab” 1
ex. str1=”abaabab” , str2=”abb” -1
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 出来れば今日中に。急ぎで申し訳ありません。
#include<stdio.h>
#include<string.h>
#define LENGTH 10

int strcmp(char *sp1,char *sp2);
int main(){
char str1[LENGTH+1];
char str2[LENGTH+1];

printf("aとbを使って10文字入力してください。\n");
scanf("%s",str1);
printf("aとbを使って2文字入力してください。\n");
scanf("%s",str2);

printf(結果)

strcmp(&str1[0],&str2[0]);

ここまで作ったのですが(中途半端ですみません)関数に行き詰まり、ネットで調べたところ本来のstrcmpの使い方とこの課題で求められているstrcmpの使い方が異なることが分かりどうすればいいのか混乱してしまいました。
この後、関数strcmpを使い、str1とstr2を比較して・・・をどうのようにすれば良いでしょうか?


503:デフォルトの名無しさん
10/02/07 19:23:30
>>502
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これでいいかな。
「strcmp」という名前で関数を定義できなかたので、別名をつけています。

> ネットで調べたところ本来のstrcmpの使い方とこの課題で求められている
> strcmpの使い方が異なることが分かりどうすればいいのか混乱してしまいました。

その通り。
標準関数のstrcmpは、二つの文字列が一致しているか判定する関数。
課題の出し方が悪いと思う。
(あるいは学生をあえて混乱させようとしているのか・・・)

504:デフォルトの名無しさん
10/02/07 19:47:32
strstrだよね

505:デフォルトの名無しさん
10/02/07 20:54:35
strstrでググったら実装がすぐ見つかっちゃうからじゃないの
strcmpと被せたのは<string.h>使わせないためとか

506:デフォルトの名無しさん
10/02/07 21:00:09
それ以前に今日中という期限設定は常識を疑いたいもの

507:デフォルトの名無しさん
10/02/07 21:02:59
#include<string.h>をはずして関数名strcmpにしてなんとか形になりました。
>>503さん、本当にありがとうございました。
またこのスレにお世話になってしまうかもしれませんが宜しくお願いします。

508:デフォルトの名無しさん
10/02/07 21:20:25
1] 授業単元:プログラミング演習
[2] 問題文:次のプログラムを改造し、定積分の面積を求めるプログラムにせよ
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:無期限
URLリンク(kansai2channeler.hp.infoseek.co.jp)

お願いします

509: ◆QZaw55cn4c
10/02/07 21:49:54
>>456
ちょっと皆さんにご意見をお聞きしたいところです。
二分木で番兵(sentinel) をおく意義がわからない、どんなsentinel をおけばいいかわからないのですが、
どうすればいいのでしょうか。
sentinel をおくことで if 文が減らなければならない、と考えているのですが。

510:デフォルトの名無しさん
10/02/07 21:50:58
URLリンク(ameblo.jp)
ここで解説出てるよ

511:デフォルトの名無しさん
10/02/07 22:02:39
>>510
真に受けた俺が悪うございました。

512:デフォルトの名無しさん
10/02/07 23:32:58
>>509
[1] 授業単元:プログラミングコミュニケーション演習
[2] 問題文:>>456の正解を皆さんに”必ず”知らせてください。
[3] 環境
 [3.1] OS:2ch
 [3.2] コンパイラ名とバージョン:jd等
 [3.3] 言語:無制限
[4] 期限:無期限

513:デフォルトの名無しさん
10/02/08 01:34:32
>>508
単純な台形則による定積分で、関数F(X)のXY座標を、X座標の小さい順に
V[][0], v[][1] に入力と解釈するなら

#include <stdio.h>
double daikei(double xa, double ya, double xb, double yb){
return(ya+yb)*(xb-xa)/2;
}

int main(void){
 int n;
 int i;
 double V[1000][2];
 double S,D;

 scanf("%d",&n);
 for(i=0;i<n;i++){
  scanf("%lf",&V[i][0]);
  scanf("%lf",&V[i][1]);
 }

 S=0.0;
 for(i=0;i<n-1;i++)
  S+=daikei(V[i][0],V[i][1],V[i+1][0],V[i+1][1]);

 printf("\n面積:%f\n",S);
 return 0;
}

とか?

514:デフォルトの名無しさん
10/02/08 03:11:53
>>509
NODE sentinel;
NODE *root = &sentinel;
以降、全ての NULL を &sentinel に置き換える。
(malloc の戻り値チェックの NULL はそのまま)

元々 NULL が番兵の役割を果たしていたので、簡単な変更で済む。
NULL が番兵ではないと誤認識させる糞問題でした。


515:デフォルトの名無しさん
10/02/08 04:49:23
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文:
input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい.
input.ppm のサイズは 410x307 である.
[3] 環境
 [3.1] OS:Windows Vista
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2/8

よろしくお願いします。

516:デフォルトの名無しさん
10/02/08 07:56:54
>515
URLリンク(kansai2channeler.hp.infoseek.co.jp)

517:デフォルトの名無しさん
10/02/08 09:07:12
>>516
丁寧にありがとうございます
ですが難しくてよく分からないです
たぶんもっとシンプルで(いい加減で)良い課題なので、それを参考にもう少し頑張ります

518:デフォルトの名無しさん
10/02/08 12:09:37
>517
論理ミスしていた
diff main.c main.c.bk
75,76c75,76
< rl.x = (x == 0 ? 1 : x*2);
< rl.y = (y == 0 ? 1 : y*2);
---
> rl.x = x*2;
> rl.y = y*2;

縦横1/2の間引きだから、単純に縮小先の画素から見た縮小元の2x2の画素の平均値を新しい画素値にすればいいけど、
1/2の線形補間はになるためあまりきれいに縮小できない
以下疑似コード
x, yは、整数, imageは元画像, new_imageは縮小画像を表す
array(u, v)は、imageの縦u, 横vの値を表す
height, widthは、それぞれ元画像の縦幅と横幅を表す
for y in 0 <= y < height/2
 for x in 0 <= x < width/2
  new_value <- image(y*2, x*2) + image(y*2, x*2+1) + image(y*2+1, x*2) + image(y*2+1, x*2+1)
  new_value <- new_value / 4
  new_image(y, x) <- new_value
 end
end
実際のコードでは、RGBの値をそれぞれ計算しないといけないけど

519:デフォルトの名無しさん
10/02/08 12:15:31
>518
diff恥ずかしいなぁ、寝不足はいかんね

520:デフォルトの名無しさん
10/02/08 14:01:32
>>515-517
mkr_allocate_3d_array()で行のポインタがheightを一つ越えて
初期化されてしまってますね。バグバグバグ。

521:デフォルトの名無しさん
10/02/08 17:59:07
>>513
台形規則のプログラムではなくて
画像の関数の始点Aから終点Bで囲まれた赤色の面積を求めるような
プログラムが欲しいです・・・
URLリンク(www1.axfc.net)

文章の記述不足すみません

522:デフォルトの名無しさん
10/02/08 18:02:02
台形近似でも面積を求めることに変わりはないと思うんだが・・・

523:デフォルトの名無しさん
10/02/08 18:25:02
>>521
それを求める公式の一つが台形則。
希望があるならそれを明記しないと伝わらんぞ。

524:デフォルトの名無しさん
10/02/08 18:45:13
すみません;;
教科書読んだら台刑則のプログラムで面積を求めることが出来ると書いてありました…

あとプログラムについて質問なのですが
S+=daikei(V[i][0],V[i][1],V[i+1][0],V[i+1][1]);
の部分の+=という演算子はどのような働きがあるのかと
コンパイルしたあとは始点(xa,ya)終点(xb,yb)だけを打ち込めばいいのかわかりません
そこについてもよろしくお願いします

525:デフォルトの名無しさん
10/02/08 18:50:14
a+=bはa=a+bと同義

526:デフォルトの名無しさん
10/02/08 19:43:34
>>524
(1)最初に関数F(x)上の点の数nを入力
(2)F(x)上の点(x,y)を、x座標の小さい順にn回入力。

下図を良〜く見れば、そのうち分かってくるはず
URLリンク(upload.wikimedia.org)

527:デフォルトの名無しさん
10/02/08 23:35:10
>520
ありがとうございます
潜在的なバグの原因になり兼ねますね

有効なアドレスを参照しているからメモリチェッカでは検出できていませんでした
修正は簡単だけど、エレガントなコードが浮かばない
もう、ppm.c自体の完成度が低すぎて笑える、即席の使いまわしの接ぎ木

528:至急お願いします。
10/02/09 03:50:53
[1] 授業単元:C言語
[2] 問題文: ガウス分布における数値積分 I=∫f(x)dx,←xmin〜xmax f(x)=1/√(2*π*σ)*exp(a)  a=-(x-μ)*(x-μ)/(2*σ*σ)
積分区間は[xmin,xmax]=[myuu-2siguma,myuu+2siguma]として計算すること。なおμ=0,σ=1とした場合、I=0.95449と
  なるので確認すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2/9 正午まで 出来ればすぐにお願いします。


529:デフォルトの名無しさん
10/02/09 03:59:06
>>528
確認しました。

で提出すりゃいいよ。

530:至急お願いします。
10/02/09 04:09:11
追記 528>>関数を使ってください。

531:至急お願いします。
10/02/09 04:10:07
529>>どういうことですか?


532:デフォルトの名無しさん
10/02/09 04:26:05
計算すること
確認すること

参考書のページ数稼ぎによくあるパターンだな

533:デフォルトの名無しさん
10/02/09 05:39:00
>>528
多少誤差があるけど

#include <stdio.h>
#include <math.h>

double f(double sigma, double mu, double x)
{
return 1/sqrt(2*M_PI*sigma) * exp(-(x-mu)*(x-mu)/(2*sigma*sigma));
}

int main(int argc, char *argv[])
{
int i, n = 10000000;
double sigma=1, mu=0;
double xmin = mu-2*sigma, xmax=mu+2*sigma;
double a = f(sigma, mu, xmin), b;
double sum = 0.0;

for(i = 0; i < n; i++){
b = f(sigma, mu, xmin+(xmax-xmin)/n*i);
sum += (a+b)*(xmax-xmin)/n/2;
a = b;
}

printf("%f\n", sum);

return 0;
}


534:デフォルトの名無しさん
10/02/09 07:18:38
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
配列に
Institute of Technology
という文字列を代入し、ポインタを利用して
・各文字が格納されているアドレス
・そのアドレスに格納されている文字
を表示するプログラムを作成せよ。

[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月9日まで]
[5] その他の制限:
お願いします。

535:デフォルトの名無しさん
10/02/09 07:33:03
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
まず次の内容のテキストファイルを準備せよ。
(メモ帳で作成し、test02.txtという名前で保存すること)

abc
123
def
456
ghi
789
jkl
000

次に、作成したテキストファイルから内容を読み出し、
各行の先頭に 01 02 03 というように番号を付加して
画面に出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:windows XP
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


536:デフォルトの名無しさん
10/02/09 09:23:35
>>534
#include <stdio.h>

int main(void)
{
char *pstr,str[30]="Institute of Technology";
pstr = str;
for(;*pstr!='\0';++pstr)
printf("%08x: %c\n",&*pstr,*pstr);
}


537:デフォルトの名無しさん
10/02/09 09:26:13
>>535
#include <stdio.h>

int main(void){
int i=0;
char text[200];
FILE *ifp;
ifp = fopen("test02.txt", "r");
if(!ifp) return 1;
while(fgets(text,200,ifp) != NULL)
printf("%02d %s", ++i, text);
fclose(ifp);
}

538:デフォルトの名無しさん
10/02/09 11:34:00
>>535
#include <stdio.h>
int main(void){
FILE *f;
f=fopen("test02.txt","r");
if(f==NULL) return 0;
fclose(f);
printf("01abc¥n02123¥n03def¥n04456¥n05ghi¥n06789¥n07jkl¥n08000¥n");
return 0;
}
センセーが期待した解答とは異なるだろうがよ

539:至急お願いします。
10/02/09 14:07:26
534>>ありがとうございます。argvの後はなんてかいてあるのですか?

540:デフォルトの名無しさん
10/02/09 14:37:13
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(codepad.org)
上のコードが正しく動かないんです・・・
input.txtとして
1
2
3
4
5
の内容を保存して実行ファイルから読み込ませる
./a input.txt
[3] 環境
 [3.1] OS:ubuntu
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:[出来れば今日中で]
[5] その他の制限:

541:デフォルトの名無しさん
10/02/09 15:17:43
>>540
自分が作ったプログラムを理解出来ていないようだ。(笑)
input.txtとして↓を与える。
5
1
2
3
4
5

542:デフォルトの名無しさん
10/02/09 15:32:17
うわ、そんな安易な間違いでしたか・・・
ずっとプログラム睨んでました。
ありがとうございます。

543:デフォルトの名無しさん
10/02/09 16:07:04
バカもん。
> ずっとプログラム睨んでました。

プログラム睨んでたら普通気が付くだろ。

544:デフォルトの名無しさん
10/02/09 16:32:55
コードは鏡、自分自身が見えます。

545:デフォルトの名無しさん
10/02/09 16:36:53
自分で書いてないのがバレバレだなw

546:デフォルトの名無しさん
10/02/09 20:17:21
>>538
死ね

547:デフォルトの名無しさん
10/02/09 22:17:58
[1] 情報処理応用
[2] Fortranで,


階乗 n! を計算する関数を作成し,

順列
n個の異なるものからr個取り出して並べる。
このときの順列の総数をnPrとあらわす。
nPr=n(n-1)(n-2)・・・(n-r+1)
を計算する関数を作成し,

組み合わせ
異なるn個からr個取り出して組を作る。
このときの組合せの総数をnCrとあらわす。
nCr = nPr/r!
を計算するプログラムを作成してください
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:fortran
[4] 期限: 明日まで。急ぎですみません。
[5] その他の制限: 特にないですが、板を間違えていたらすみません。


548:デフォルトの名無しさん
10/02/09 22:18:01
[1]C言語課題
[2] コマンドラインに与えられた文字列が単数で自然数を表しているとい
下の例ように出力されるプログラムを作れ
入力==>3
132
231
入力==>5
1304
2552
4031
入力==>10
136107
259084
480952
710631
入力==>20
13610150016
25914201711
48131918127
71218191384
11172014952
16001510631
[3] [3-1]Linux [3-2]GNU C++ [3-3]C言語
[4] 2/22日正午迄 それ以降は不可
[5]stdio.h string.h stdlib.hを使用可能

549:デフォルトの名無しさん
10/02/09 22:39:57
[1] 授業単元:プログラミング 1
[2] 問題文(含コード&リンク):
球の体積をもとめよ。またこの問題は間違っているのでそれを書き換えよ
#include<stdio.h>

int main(void)
{
double r,v;


printf("直径を入力して下さい\n");

scanf("%1f",&r);
v=4.0/3.0*3.14159*(r/2.0)*(r/2.0)*(r/2.0);
printf("直径%fの球の体積は%fです。\n",r, v);


}
[3] 環境
 [3.1] OS:windows vista
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


550:デフォルトの名無しさん
10/02/09 22:40:50
>>547
とりあえずスレタイをn!回声に出して読んでみようか

551:デフォルトの名無しさん
10/02/09 22:47:32
[1] 授業単元:プログラミング 1
[2] 問題文(含コード&リンク):
二つの数列の和を表示したい。またこの問題は間違っているのでそれを書き換えよ
#include<stdio.h>
main()
{
int suretu1[]={2,4,6,8,10,12,14,16,18,20};
int suretu2[]={1,2,4,8,16,32,64,128,258,512};
int kotae;
int count;

for (count = 0; count <=10; count++ )
printf("%d,", suretu1[count]+suretu2[count]);
{
suretu1[count] = 2 * count +2;
suretu2[count] = count* count;
kotae= suretu1[count] + suretu2[count];
printf("二つのの整列の和によってできる数列は,\n");
printf("%d\t",kotae);
}
}
[3] 環境
 [3.1] OS:windows vista
 [3.2] コンパイラ名とバージョン:visual studio2008
 [3.3] 言語:C
[4] 期限:[2010年2月10日まで]
[5] その他の制限:


552:デフォルトの名無しさん
10/02/09 23:00:56
[1] プログラミング基礎
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限:2月10日 18時まで
[5] その他の制限: 説明は詳しく書いてくれるととてもありがたいです。

現在とても困っています。皆さんよろしくお願いします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4948日前に更新/264 KB
担当:undef