1 名前:デフォルトの名無しさん [2008/10/01(水) 07:28:51 BE:151474728-PLT(18888)] あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 前スレ C/C++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/
390 名前:デフォルトの名無しさん [2008/10/16(木) 18:45:15 ] [1] 授業単元: [2] 問題文(含コード&リンク): 以下のようなデータが大量に格納されているファイルがある. [ダウンロード www.vox.tutkie.tut.ac.jp/~katurada/test.list ] このファイルを読み込み,数値(キー)と英単語(データ)をセットにして 1データとして2分木へ格納し、数値(キー)にある値を指定して検索を行えば、 その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。 ふたつめ 上記で使用したtest.list を読み込み,数値(キー)と英単語(データ)をセットにして 1データとしてリストへ格納し、数値(キー)にある値を指定して検索を行えば、 その数値(キー)に対応する英単語(データ)を検索できるプログラムを作成せよ。 そして、上記の木構造による実装との検索時間を比較せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2008年10月19日24:00まで]
391 名前:390 [2008/10/16(木) 18:46:22 ] 5] その他の制限: 1. 格納できるデータ量は(メモリの許す限り)上限はない. 2. 対応する英単語が見付からない場合は、その旨を表示すること。 3. データは,「数値,英単語\n」(\nは改行)で定義されるものとする. 4. データが格納されたファイルは、プログラムの引数で指定できるようにせよ。 5. データは2分木に格納せよ。 6. 数値(キー)に重複はない。 7. 数値(キー)は8桁以内である。もしファイルに9桁以上の数値が入っていた場合はエラーを出力して終了せよ。 8. 数値(キー)に数字以外の文字(アルファベットなど)が含まれていた場合は,エラーを出力して終了せよ. 9. 検索時の入力にも9桁以上の数値や数字以外の文字が入力された場合はエラーを出力して終了せよ. 10. 英単語は25文字以内である。もしファイルに25文字以上の英単語が入っていた場合はエラーを出力して終了せよ。 ふたつめ # リストによる実装において、データの挿入は数値(キー)によるソートは行わず、単純にファイルに出現した順番にリストに追加していって下さい。 # リストによる実装での検索も、単純にリストの先頭から比較していくような単純なアプローチで結構です。 # 1回の検索では検索時間の差がないでしょうから、10000回くらい繰り返して下さい。なお、test.list のデータ数は130万個あります。 よろしくお願いします。
392 名前:374 mailto:sage [2008/10/16(木) 18:46:38 ] >>384 ありがとうございます ヒントにしてもうちょい考えてみます
393 名前:デフォルトの名無しさん [2008/10/16(木) 21:26:24 ] >>373 ありがとうございました。 これを参考に、自分なりにもう少し頑張ってみます
394 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:02:18 ] >>380 bmpのフォーマットは?
395 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:06:39 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): UDPサーバkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7791.txt UDPクライアントkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7792.txt 問題文(2問あります)kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7793.txt [3] 環境 [3.1] OS:WindowsXP [3.2] Visual stdio2005 [3.3] 言語:C [4] 期限:10月17日午後13:00まで [5] その他の制限:特になし よろしくお願いします
396 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 00:43:47 ] [1] 授業単元:プログラミング技術 [2] 問題:30000以下の数字を入力して、「○時間、○分、○秒」と出力するプログラムを作りなさい。 <時間を分にして、分は秒にして、秒は分の答えの余り> [3] 環境 [3.1] OS:Windows XP [3.2] Ultla C [3.3] 言語:C [4] 期限 特にありません よろしくお願いします。
397 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:17:09 ] >>396 #include <stdio.h> int main() { int x; scanf("%d", &x); printf("%2d時間%02d分%02d秒", x / 3600, x % 3600 / 60 , x % 3600 % 60); return 0; }
398 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:28:59 ] [1] 授業単元:C [2] 問題:n=1 4973/n*2で始まり、4973/n*2の計算の答えが1になるまでnを増やしていき 1になったところで今まで出した数字を全部足した答えを出すプログラム。 少数は切り捨て。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限 [10/17/07:00まで] 2 4 8 4096 (4973/n*2)+(4973/n*2)+(4973/n*2)+・・・・(4973/n*2) 2486 + 1243 + 621 +・・・・ 1 =4965 手計算だと最後のnは2048になって答えが4965になったのですが。 プログラムについてはさっぱりなので助けてください。。。
399 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:36:21 ] >>398 あ、n*2じゃなくて、2^nです。
400 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:41:42 ] こんなでいい? #include<stdio.h> int main(){ int sum,ex; for(sum=0,ex=2; 4973/ex >= 1; ex*=2){ sum += 4973/ex; } printf("%d\n",sum); return 0; }
401 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:50:56 ] include <stdio.h> int main() { int n, sum = 0; for (n = 1; 4973 / (1 << (n - 1)) != 1; ++n) { sum += 4973 / (1 << (n - 1)); } sum += 1; printf("%d : %d", n, sum); return 0; }
402 名前:401 mailto:sage [2008/10/17(金) 01:51:44 ] すいません間違えました
403 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:54:33 ] そんなすっきりなプログラムが!! ありがとうございます!!
404 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 01:56:50 ] >>402 ぇ?答えの4956もでましたけど・・・
405 名前:404 mailto:sage [2008/10/17(金) 01:58:31 ] あ、>>400 の方と>>401 の方を読み間違えた自分が恥ずかしい…
406 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 03:26:13 ] >>392 if( tmp * (a * small_x[i] - small_y[i]) <= 0.0 ) ↓ if( (tmp *= (a * small_x[i] - small_y[i])) <= 0.0 ) な気がする
407 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:04:02 ] >>380 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7794.txt 全BMPフォーマット対応は面倒だから、条件付き、 良く読んで理解して使用のこと
408 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 04:51:51 ] >>407 ん〜〜〜
409 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 07:23:29 ] [1]授業 c [2] 問題: 1単語を入力し、その単語のスペルを判定する。その判定を Ctrl-D を入力するまで続ける。判定は、ファイル ``eng.txt'' にその単語が存在する場合に限り、スペルが正しいと判定する。 [3] 環境 [3.1] OS:linux [3.2] gcc [3.3] 言語:C [4] 期限 10/19 16:00 関数は何を使ってもいいです。 何日も考えたのですがぜんぜんわかりませんでした。 どなたかお願いします
410 名前:395 mailto:sage [2008/10/17(金) 07:26:17 ] すみません 問題文2問あるといっておいて4問ありました B1とB2のみで構いません 多少遅れても大丈夫なので引き続きよろしくお願いいたします
411 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 07:40:04 ] >>395 UDPサーバ:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7797.txt UDPクライアント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7798.txt
412 名前:410 mailto:sage [2008/10/17(金) 07:48:20 ] >>410 ちょっと訂正 UDPサーバ:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7799.txt UDPクライアント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7798.txt
413 名前:396 mailto:sage [2008/10/17(金) 07:59:31 ] >>397 ありがとうございました
414 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 08:29:04 ] 400と401の両方とも、条件部とループ内部で同じ計算をしてるのが無駄
415 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 10:31:23 ] >>412 ありがとうございました
416 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:13:35 ] >>411 そんなの最適化されるんじゃないの?
417 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 11:15:12 ] >>411 じゃなくて>>414
418 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:40:59 ] >>409 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7801.c
419 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:51:15 ] [1]C言語実習 [2]問題文 以下のコードは、2つのプログラム(同一動作)のコードを まとめたものです。(各ソースにおいて、行の順番は変えていません) このコードを2つのプログラムに分解して、それぞれコンパイルが 通り、同一の動作をするようにして下さい。 また処理内容についても簡単にコメントして下さい。 コード kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7802.c[3] Linux/Gnu-C4.0/C [4]無制限だそうです。難問だそうです。よろしくお願い致します。
420 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 15:55:13 ] >>416 よく知らないんだが、どのコンパイラでどのオプションつけるとこれが最適化されるの?
421 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 16:14:39 ] >>419 #include <stdio.h> int is_prime(int p){ int i; if(p<=1) return 0; if((p==2)||(p==3)) return 1; if((p%2==0)||(p%3==0)) return 0; for(i=3;i*i<=p;i+=2) if(p % i==0) return 0; return 1; } int main(void){ int i,c=0; for(i=1;i<=1000000;i++){ if(is_prime(i)) c++; if(i%100==0) printf("%d %d\n",i,c); } return 0; } 素数の個数を求めるプログラム 残りはエラトステネスの篩だな
422 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:57:37 ] >>420 僕もよく知らない、ってかよく知らないのに突っ込まないでください>< 基本的に、共通部分式の削除が行われるんじゃないですか?
423 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 18:25:25 ] 418さんありがとうございました 感謝です
424 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:01:06 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): BMI値を判定するプログラムを作成する 入力:身長t(m),体重w(kg) 出力:判定結果{やせ,標準,肥満} 身長をt(m),体重をw(kg)としたとき, BMI=w/tの二乗 BMI値が18.5未満⇒やせ BMI値が18.5以上かつ25.0未満⇒標準 BMI値が25.0以上⇒肥満 #include <stdio.h> int main(void) { float t, w; printf("t = "); scanf("%f", &t); printf("w = "); scanf("%f", &w); ????????????????????????????????←この部分が解りません。 } [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年10月20日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数,条件分岐(if文,if-else文)は習いました。 お願い致します。
425 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:06:21 ] int main(void) { float t, w, bmi; printf("t = "); scanf("%f", &t); printf("w = "); scanf("%f", &w); bmi = w / t / t; if (bmi < 18.5) printf("やせ\n"); else if (bmi < 25.0) printf("標準\n"); else printf("肥満\n"); return 0; }
426 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:55:26 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7788.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 10/18 すいません。なかなかうまくいきませんよろしくお願いします
427 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:03:49 ] いくつかレスをもらっても何も進歩してないことにがっかりした
428 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:29:19 ] >>426 ちゃんとみてないけど、 if(*(s+i)==' '){ の行を if(*(s+i)==' ' || *(s+i)=='?' || *(s+i)=='!' …){ ってやっていけばいいんじゃね
429 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:52:12 ] ということを>>336-337 が。
430 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:13:26 ] >>426 #include<stdio.h> #include<string.h> #define MAX 256 int main(void){ int len=0, max=0, moji; char s[MAX+1], l[MAX+1]=""; while((moji=getchar())!=EOF){ if(strchr(" \t\n?!.,()", moji) || len>=MAX){ if(len>max){ strcpy(l, s); max=len; } len=0; }else{ s[len++]=moji; s[len]='\0'; } } printf("The longest word is \"%s\"\n", l); return 0; }
431 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 23:41:45 ] 個人的にはif elseよりswitchの方が好きだ。
432 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:09:20 ] 個人的にはふさわしい方を使うのが好きだ。
433 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 00:15:54 ] >>390 二分木の方だけやってみた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7805.txt
434 名前:デフォルトの名無しさん [2008/10/18(土) 10:37:12 ] [1] 授業単元:先輩の課題 [2] 問題文(含コード&リンク): 5.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 ・ ・ ・ みたいなtxtファイルがあるとします。 これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。 そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理するプログラムを書け [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual studio 2008 [3.3] 言語: C [4] 期限: 今日 [5] その他の制限: なし
435 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:18:31 ] >>434 意味不明 文章を見直せ
436 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:25:05 ] [1] 授業単元:先輩の課題 [2] 問題文(含コード&リンク): 5.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 ・ ・ ・ みたいなtxtファイルがあるとします。 これを行ごとに呼んで double data[4]に順番にいれて、関数にわたす。 そして次の行をまた同じ配列data[4]にいれて、関数に渡すっていう処理を ファイルの終わりまで繰り返すプログラムを書け [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual studio 2008 [3.3] 言語: C [4] 期限: 今日 [5] その他の制限: なし これでわかりますかね。すいません
437 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:33:08 ] >>436 #include <stdlib.h> #include <stdio.h> void f(double *d) { } int main(int argc, char *argv[]) { FILE *fp; double data[4]; if (argc != 2) return 1; if (!(fp = fopen(argv[1], "r"))) { return 1; } while (fscanf(fp, " %lf %lf %lf %lf", &data[0], &data[1], &data[2], &data[3]) == 4) { f(data); } return 0; }
438 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:34:52 ] >>437 ありがとうございます。 列が100ぐらいあるときは%lfを百個打つのはめんどくさいんですが・・・ なんとかなりませんか?
439 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:44:10 ] >>438 Ctrl+Vを99回押すだけだろ
440 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:44:49 ] >>439 そうなんですが・・・ソースが汚いのかなぁとおもいまして・・・
441 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:45:04 ] 9回コピーして10個まとめたのをあと9回コピー
442 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:51:09 ] >>440 見た目の問題かい ループで回したらいいじゃん while (!feof(fp)) { for (i = 0; i < 100; i++) { if (fscanf(fp, "%lf", &data[i]) != 1) { printf("error"); return 0; } } f(data); }
443 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 12:58:08 ] >>442 どうもありがとうございました
444 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:01:02 ] もうひとつ質問させていただきます。 入力ファイルの途中に 5.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 52.3 121.1 123.0 56.8 45.3 121.1 123.0 56.8 4.6 21.4 9.2 6.7 改行で空いてる行があったとしても正常に動きますか?ためしたところ問題ないようにみえましたが・・・
445 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:02:07 ] >>444 正常の定義は? エラーを出して止まるのが正常なのか 書式を無視するのが正常なのか
446 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 13:07:44 ] >>445 空白の行を無視して次の行から配列に代入する処理というのが正常です
447 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:03:24 ] [1]授業 c言語 [2] 問題:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7807.txt [3] 環境 [3.1] OS:linux [3.2] gcc [3.3] 言語:C [4] 期限 10/20
448 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 19:56:05 ] &s[i].id s[i].name &s[i].score[j]
449 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:10:12 ] [1] 授業単元:プログラミング基礎 [2] 問題文 体重と身長をキーボードから入力し、BMIを計算して出力するプログラムを書け。 BMIの計算はユーザ定義の関数を用いて行い、データの型にはdoubleを用いよ。 ただし、BMIの計算式は以下の通り。 BMI=体重(kg)/身長(m)^2 例:65kg/(1.70m * 1.70m) =22.49 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月21日まで [5] その他の制限: かなり初歩の段階みたいです。 よろしくお願いします。
450 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:27:55 ] >>449 >>424-425
451 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:31:24 ] >>449 #include<stdio.h> double bmi(double weight, double height) { return weight / (height * height); } int main() { double weight, height; printf("体重(kg)?"); scanf("%lf", &weight); printf("身長(m)?"); scanf("%lf", &height); printf("BMI=%g\n", bmi(weight, height)); return 0; }
452 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 22:56:20 ] >>450 >>451 すいません。説明不足でしたがelseやifなんかはまだ習ってないくらい初歩なので >>424-425 はよくわからないんです。 お早いレスで助かりました。ありがとうございます。
453 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 02:08:14 ] >>425 こんなに早くやって下さり、本当に有難う御座いました。 助かりました。
454 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 05:04:55 ] >>453 elseやifについてどう思うかを>>452 に伝えてやってくれまいか
455 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 13:54:08 ] [1] 授業単元:プログラミング [2] 問題文: "A>B"と入力すると"AはBより大きい"のように、不等式を文章に変換するプログラムを作成せよ。また、入力データと実行結果は以下の通りとし、変換された文章をテキストファイルに順番に出力すること。 実行結果 データ1:A>B データ2:B<C データ3:A<C ○○○.txtに出力しました ○○○.txt AはBより大きい BはCより小さい AはCより小さい [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/21 [5] その他の制限:可能な限り初歩的なものでお願いします
456 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 14:38:08 ] #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fpr, *fpw; char s1[1000], s2[1000], c; if (argc != 3) { fprintf(stderr, "引数にこでたのむ\n"); return 1; } if (!(fpr = fopen(argv[1], "r"))) {fprintf(stderr, "ファイルが\n"); return 1; } if (!(fpw = fopen(argv[2], "w"))) {fprintf(stderr, "ファイルが\n"); return 1; } while (fscanf(fpr, " %[^<> ] %c%s", s1, &c, s2) == 3) { switch (c) { case '<': fprintf(fpw,"%sは%sより小さい\n", s1, s2); break; case '>': fprintf(fpw,"%sは%sより大きい\n", s1, s2); break; default: fprintf(stderr, "なかみが\n"); return 1; } } fclose(fpr); fclose(fpw); return 0; }
457 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 15:42:56 ] [1]授業 c言語 [2] 問題: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7807.txt [3] 環境 3.1 OS:linux 3.2 gcc 3.3 言語:C [4] 期限 10/20 すいません、よろしくお願いします。
458 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 15:48:02 ] >>447 >>448
459 名前:デフォルトの名無しさん [2008/10/19(日) 16:04:58 ] >>457 まず、リスト@はmain関数の外で定義な。中でもいいけど、個人的には外の方が分かりやすい。 で、○○○は上から順に &s[i].id s[i].name &s[i].score[j] あんまり偉そうなこといいたくないが、これって構造体の基本問題だろ?? できるだけ自分で解けるようにしないと後々、辛い目にあうぞ。
460 名前:457 mailto:sage [2008/10/19(日) 17:07:53 ] >>459 ウザいです。 偉そうな口を聞いて欲しくないです。
461 名前:デフォルトの名無しさん [2008/10/19(日) 17:20:54 ] >>460 本当のことだろーが 構造体の基礎の基礎も出来てないやつが喚くな餓鬼め
462 名前:457 mailto:sage [2008/10/19(日) 17:23:18 ] >>461 スレ違いです。出て行ってください。
463 名前:457 mailto:sage [2008/10/19(日) 17:25:13 ] そういうのは止めてください >>458 どうもすいませんでした >>459 ありがとうございます
464 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 18:22:51 ] >>457 >>1 > なりすましを防ぐため、トリップを使ってください。
465 名前:デフォルトの名無しさん mailto:sage [2008/10/19(日) 19:44:19 ] ワロタ
466 名前: ◆iTaRIJflUs mailto:sage [2008/10/20(月) 00:09:33 ] [1] 授業単元:C言語プログラミング [2] 問題文 <その1> 以下のようなプログラムを作成しなさい. 2×10の2次元配列を定義し、1行目の配列([0][0〜9])に1から10までの数字を格 納し、2行目の配列([1][0〜9])に2の倍数を2から20まで格納し、配列に格納した 数字を画面出力するプログラム。 <その2> 以下のようなプログラムを作りなさい 10人の学生の成績が以下のようになっている。 int score[]={90,28,35,80,72,55,76,90,96,42} このとき、0から9までの学生の偏差値を計算せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月21日朝9時まで [5] その他の制限: まだまだ初歩の段階です。 どなたかお願いします。
467 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 01:52:12 ] >>466 int num[2][10]; int i, j; for( i = 0; i < 2; i++ ) { for( j = 0; j < 10; j++ ) { num[i][j] = (j + 1) * (i + 1); /* (1〜10) × ( 1 or 2) */ printf( "%2d ", num[i][j]); } printf("\n"); }
468 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 02:14:52 ] >>466 その2 #include <stdio.h> #include <math.h> int main(void) { int score[]={90, 28, 35, 80, 72, 55, 76, 90, 96, 42}; int i, n = sizeof(score) / sizeof(score[0]); double sum = 0., sqsum = 0., mean; for (i = 0; i < n; i++) { sum += score[i]; sqsum += score[i] * score[i]; } mean = sum / n; printf("標準偏差 = %f\n", sqrt(fabs(sqsum / n - mean * mean))); return 0; }
469 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 08:39:37 ] [1] 授業単元:プログラミング [2] 問題文:x=1y=2 が関数swapをもちいてx=2、y=1となる。関数swapを呼び出す前後のx,yのアドレスを表示し、アドレスが渡されていることをしめせ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:visual2005 c [3.3] 言語:C [4] 期限:10/23 お願いします
470 名前:デフォルトの名無しさん [2008/10/20(月) 08:44:26 ] 【質問テンプレ】 [1] 授業単元: C++ [2] 問題文(含コード&リンク): 前もって用意された暗号化された文のテキストファイルと暗号化されていない文のテキストファイルがあります。 暗号化されたテキストファイルの始めの3文字はXXXとなっています。 プログラムは最初の3文字をよんで、XXXだったらそのファイルを解読して新たなファイルに保存、 XXXじゃなかったらそのファイルを暗号化して新たなファイルに保存しなさい。 尚、テキストファイルが1000文字以上だったらexitすること。 (暗号はa→c,b→dのようなshift2です。) [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: Dev-C++ [3.3] 言語: C++ [4] 期限: 今日中 どうやってファイルの最初の3文字を判断するのかがまず分かりません..。 どなたか教えて下さい。
471 名前:デフォルトの名無しさん [2008/10/20(月) 11:33:38 ] [1] 授業単元:プログラミングC++ [2] 問題文:学籍番号、名前、姓、が記入されたリストを入力し、これを名前、姓、学籍番号の順に出力するC++ プログラムを書き、正しく動くことを確かめよ。 動作確認のためには、「実行ファイル < データリスト」のようにデータファイルを作り、コマンドラインでリダイレクションによりデータ入力せよ。 s10000001 Taro Aizu s10000002 Jiro Aizu s10000003 Nuri Aizu s10000004 Taro Kin s10000005 Atami Bandai s10000006 Kogen Bandai s10000007 Choucreme Hirota s10000008 Kitakata Ramen s10000009 Beko Aka s10000010 Jo Tsuruga [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン:g++ [3.3] 言語:C++ [4] 期限: 2008年10月23日00:00まで [5] その他の制限:特になし
472 名前:デフォルトの名無しさん [2008/10/20(月) 12:15:46 ] >>471 の補足ですが、ループを使うのが条件です
473 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 14:10:40 ] >>470 1000文字未満だったらfreadでchar[1000]に読み込んではじめの三文字見ればよくね?
474 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:10:38 ] 授業単元: C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7810.txt 条件は関数 void sort3 の引数は3つの int 型の値であるが,これをポインタ変数を受け取る関数に書き換える.交換の作業はすべて関数内で処理し,main 関数では交換作業を行わないものとする 。 [3] 環境 [3.1] OS: Windows/Linux [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限:2008年10月23日まで
475 名前:デフォルトの名無しさん [2008/10/20(月) 18:33:20 ] [1] 授業単元:プログラミング [2] 問題文: Newton--Raphson法を用いて X*X*X-7X*X+16X-10=0 の解を求めよ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/24 [5] その他の制限:初心者です。なるべく基本的な構造でお願いします。
476 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 18:48:16 ] >>474 void sort3(int *x, int *y, int *z) { int tmp; if (*y < *x) { tmp = *x; *x = *y; *y = tmp; } if (*z < *y) { tmp = *y; *y = *z; *z = tmp; } if (*y < *x) { tmp = *x; *x = *y; *y = tmp; } }
477 名前:デフォルトの名無しさん [2008/10/20(月) 19:07:40 ] #define GOSA 0.00001 #define F(X) (X*X*X-7*X*X+16*X-10) #define dF(X) (3*X*X-14*X+16) int main(){ double x=10,y; while(1){ printf("計算経過 %f\n",x); y=F(x); if(y>-GOSA)if(y<GOSA)break; x -= y/dF(x); } }
478 名前:デフォルトの名無しさん [2008/10/20(月) 19:22:25 ] #define GOSA 0.00001 #define F(X) (X*X*X-7*X*X+16*X-10) #define dF(X) (3*X*X-14*X+16) int main(){ double x=10,y; do{ x -= y/dF(x); printf("計算経過 %f\n",x); y=F(x); }while(y<-GOSA || y>GOSA); }
479 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 23:25:55 ] [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7806.txt [3] 環境 [3.1] OS: Windows) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:無期限 [5] その他の制限:関数・配列は習いましたが、ポインタは知りません。 自分で書いてみたのですが、例えば15を打つと 「素数ではありません」「素数ではありません」「素数です」とでてしまいます。
480 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 23:36:28 ] else{ for(i=3;i<=no;i+=2){ if ((no%i)==0){ puts("素数ではありません"); break; } else{ puts("素数です"); break; } } }
481 名前:デフォルトの名無しさん mailto:sage [2008/10/20(月) 23:57:28 ] >>479 int main(){ unsigned long int i ; unsigned long no = 0; printf("1から%luまで入力可能です\n", ULONG_MAX); do { printf("正の整数:"); scanf("%lu", &no); if (no <= 0) { puts("0以外、正の整数を入力してください") ; } while(no <= 0) ; if (no == 2) { puts("素数です"); } else if (no == 1 || no%2 == 0) { puts("素数ではありません"); } else { for ( i = 3; i * i <= no; i += 2) { if (no % i == 0) { puts("素数ではありません"); return 0; } } puts("素数です"); } return 0; }
482 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 00:06:50 ] >>480 481 ありがとうございます!
483 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 02:39:36 ] >>469 エスパーするとこうかな?関数swapを自分で書いて、呼び出す側とその関数内それぞれでアドレスを表示。 #include <stdio.h> /* aの指すデータとbの指すデータを交換する */ void swap( int *a, int *b) { int temp = *a; printf( "swap() : &a = %p, &b = %p\n", a, b); *a = *b; *b = temp; } int main(void) { int x = 1, y = 2; printf( "main() : x = %d, y = %d, &x = %p, &y = %p\n", x, y, &x, &y); swap( &x, &y); printf( "main() : x = %d, y = %d, &x = %p, &y = %p\n", x, y, &x, &y); return 0; }
484 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 08:16:08 ] >>483 俺は int* temp = a; a = b; b = temp; かと思った
485 名前:デフォルトの名無しさん [2008/10/21(火) 12:43:13 ] >>473 ありがとうございました。調べてみます。
486 名前:デフォルトの名無しさん [2008/10/21(火) 12:53:22 ] >>476 それでコンパイルすると3つ目の整数を入力してから入力した整数が小さい順に出力されるようにしたいんだけどそれだとエラー起きてしまうのですが・・・
487 名前: ◆3VUXqvbfSY mailto:sage [2008/10/21(火) 13:04:05 ] 【質問テンプレ】 [1] 授業単元:計算機プログラミングII [2] 問題文(含コード&リンク): 単精度実数型配列(float)を宣言する。その配列にn個のデータを入力する。その配 列名をポインタとして用いて,入力したn個のデータの最大値と最小値を求め,その 結果とそれら値が何番目に入力されたかを出力するプログラムを作成せよ。 ただし,複数回の異なる場合について実行してみること。データ入力の際,値が昇順 または降順にならないようにすること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc (注) gcc -Wall -ansi -std=c89 -pedantic ファイル名.c のようにしてコンパイル [3.3] 言語:C [4] 期限:2008年10月23日10:30まで [5] その他の制限:ポインタを習い始めたばかり,for文やif文,関数,配列,文字列の基礎は学習済み おねがいします。
488 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:14:37 ] >>486 関数のプロトタイプ宣言 void sort3(int *x, int *y, int *z); 呼び出し sort3(&n1, &n2, &n3);
489 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 17:19:27 ] >>487 どうやって入力するのかわからなかったけど、 とりあえず標準入力から一行ずつ float の値を一つ読み込こんでいくようにしておいた kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7812.txt
490 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:11:11 ] 簡単なゲームを作っているのですが、今まで使っていたアイコンは32×32だったので、それを16×16のサイズにしようと思い、そのサイズの画像を取り込んだら、32×32のサイズに拡大されて表示されてしまうのですがどうしたらよいのでしょう? アイコンファイルってサイズ指定するとこないですよね?