1 名前:デフォルトの名無しさん [2008/04/15(火) 23:07:41 ] あなたが解けない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++の宿題を片付けます 104代目 pc11.2ch.net/test/read.cgi/tech/1202135539/
423 名前:422 mailto:sage [2008/04/24(木) 20:57:17 ] >>412 当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。 提示されたソースをもとに、考え直してみました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6328.txt
424 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:59:53 ] >>423 ソースコード見てないけど納期を守るお前がすばらしい うちの会社来ないか?
425 名前:デフォルトの名無しさん [2008/04/24(木) 21:24:38 ] [1] 授業単元:プログラミング実習 [2] 問題文:一覧ファイル(infile.csv)に「グループ名,学籍番号,名前」の順でデータが入っています。学籍番号のみをDATAに格納せよ。 [3] 環境 [3.1] OS: Windows 2000 [3.2] コンパイラ名とバージョン: わかりません [3.3] 言語:C [4] 期限: 本日中(4/24) [5] その他の制限: 特に制限はありません。C初心者で全く分かりません。時間があまりないですがよろしくお願いします。
426 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:31:07 ] >>425 > DATAに格納せよ。 の意味をおしえてください。DATA という名前のファイルに順に記録していけばいいのでしょうか?
427 名前:デフォルトの名無しさん [2008/04/24(木) 21:42:23 ] [1] 授業単元:CプログラミングU [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6329.txt [3] 環境 [3.1] Windows [3.2] Visual C++ 6.0 [3.3] C [4] 期限:2008年4月26日まで [5] その他の制限: 関数と再帰法を使って完成させるそうです,関数辺りが全く分からないので,よろしくお願いします.
428 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:48:11 ] >>427 倫理的によくないと思います。
429 名前:デフォルトの名無しさん [2008/04/24(木) 21:56:58 ] >>428 ・・・・・・課題なので仕方ないんですよ.
430 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:05:19 ] #include <stdio.h> int num_of_pairs(int year) { int y, num; if(year < 1) return 0; else if(year == 1) return 1; else { num = 0; for(y = 1; y < year; y ++) num += num_of_pairs(y); return num; } } int main() { int y, num = 0, num_last; for(y = 1; y <= 10; y ++) { num_last = num; num = num_of_pairs(y); printf("\n%d年目のつがい数は%d", y, num); if(num_last) printf("で、前年の%f倍、", (double)num / num_last); } printf("\nかな?\n"); return 0; }
431 名前:143 mailto:sage [2008/04/24(木) 22:08:28 ] >>144 ありがとうございましたっ・・・と言いたいのですが、またクレームがきてしまいました; >>149 いえいえ、わざわざ作っていただいたので、参考にさせていただきます。 >>150 ,152,155 ありがとうございましたっ、なんとか解決できそうです。
432 名前:デフォルトの名無しさん [2008/04/24(木) 22:15:19 ] >>430 回答ありがとうございました,しかし実行したら 1年目のつがい数は1 2年目のつがい数は1で、前年の1.000000倍、 3年目のつがい数は2で、前年の2.000000倍、 4年目のつがい数は4で、前年の2.000000倍、 5年目のつがい数は8で、前年の2.000000倍、 6年目のつがい数は16で、前年の2.000000倍、 7年目のつがい数は32で、前年の2.000000倍、 8年目のつがい数は64で、前年の2.000000倍、 9年目のつがい数は128で、前年の2.000000倍、 10年目のつがい数は256で、前年の2.000000倍、 かな? と表示されました,10年目のつがいの数は55になるはずなので ちょっと違っているみたいです.つがいの数はフィボナッチ数になる らしく 1,1,2,3,5,8,13・・・と続くみたいなんです,すみません.
433 名前:425 [2008/04/24(木) 22:16:02 ] プログラム機能仕様に、 「一覧ファイル(infile.csv)を開き、char型配のDATAに学籍番号を読み込む。」とありました。 説明不足で申し訳ないです。
434 名前:425 [2008/04/24(木) 22:18:30 ] >>426 アンカーつけ忘れました。すいません
435 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:24:13 ] >>432 そっか、各世代がまた産むからと思って、足しすぎた。 num_of_pairs(year - 2)が生まれる全数だね。 int num_of_pairs(int year) { if(year < 1) return 0; else if(year == 1) return 1; else return num_of_pairs(year - 2) + num_of_pairs(year - 1); }
436 名前:デフォルトの名無しさん [2008/04/24(木) 22:26:45 ] >>435 これで何とか間に合いそうです.完璧な回答ありがとうございました!
437 名前:426 mailto:sage [2008/04/24(木) 22:32:59 ] >>434 今ひとつ、はっきりしません。 問題を全部さらしていただくとありがたいのですが。
438 名前:デフォルトの名無しさん mailto:age [2008/04/24(木) 22:36:17 ] [1] 授業単元:Cプログラミング言語 [2] 問題文(含コード&リンク): @kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6330.txt Akansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6331.txt [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン:CPad for Borland [3.3] 言語: (C) [4] 期限:明日まで [5] その他の制限:txt参照 連投ですいません。前回質問させていただいたのですが、また質問させてもらいます。 @で有効範囲外に数字以外が入ると、エラーを起こしてしまい 数字以外を無視するということができなかったのですが、どうすればいいでしょうか? @プログラムとして見づらいとこのことで、少し修正もできればよろしくお願いします。 そしてAの方なのですが、nを使用してとのことで>>144 さんのやり方をしたのですが、 どうもa自体を使うなとのことだったので、少しいじってみたのですが、 警告 W8008 wa_prc19.c 30: 条件が常に真(関数 main ) 警告 W8008 wa_prc19.c 30: 条件が常に真(関数 main ) 警告 W8066 wa_prc19.c 31: 実行されないコード(関数 main ) と出てしまい、書き方が悪かったせいで、反転作業が常に0に; そして、先ほどの@とは逆に、 例)255asdと書くとそのまま255で処理してしまい、不正入力として扱わない。 256はエラーだが、2550は255の処理をする。 といった感じになってしまってます。 今日中で申し訳ないのですが、よろしければよろしくお願いします。
439 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:13:22 ] >>438 @ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6332.txt
440 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:20:36 ] >>425 当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。 とりあえず、「char 型配列 である DATA に順に格納する」ことにして作成しました。 プログラムの最後で、char DATA[] の中身を画面に出力させています。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6333.txt
441 名前:425 [2008/04/24(木) 23:27:06 ] >>437 えっと、作業をチームで分担していて自分は学籍番号検索処理を任されています。 全体的なプログラム内容は、一覧ファイル(infile.csv)に生徒の情報(グループ名、学籍番号、名前など)を登録していくことです。 その際、学籍番号は入力必須で、検索機能を使うことで重複していないか確認するというものです。 現在、手元にプログラム設計書のプログラム機能仕様書しかないのでとりあえずこれを書き出します。(機能仕様書は講師の方に一応okをもらいました) 概要:学籍番号欄に入力されたデータ(char型配列)が学生の一覧ファイルに入っているかの判定処理。 関数名:int GKS(char *value) //学籍番号のみをMAIN関数から受け取って使う。 戻り値:int error_no //初期値0のエラー判定フラグ 引数:*value //ブラウザから学籍番号欄に入力されたchar型配列データ。 詳細:@MAIN関数からvalueを受け取る。 A一覧ファイル(infile.csv)を開き、char型配列のDATAに読み込む。 A-1 temp.csvを開く。 Binfile.csvの学籍番号とvalueを比較する。 B-1 valueと一致するデータがある場合、該当する全データ(グループ名、学籍番号、名前等)をtemp.csvに書き込む。 B-2 valueと一致するデータがない場合、int型error_noに”1”を格納する。 C一覧ファイル、temp.csvを閉じる。 DMAIN関数に、error_noを渡す。 プログラミング初心者で説明できることもこのくらいしかなく申し訳ないです。 分からなければそれはそれで結構ですので分かった場合のみ解答お願いします。 今日中と書きましたが2時頃まで待ちます。もしくは明日の朝に確認します。
442 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:28:10 ] >>439 横から口出してもうしわけないけど 欲を言えばinputIntの戻り値はenumにするともっとまとまると思うよ。 キレイなコードごちそうさまでした。
443 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:33:31 ] ケツから押し込むようで申し込みたいんだけど 欲を言えばisdigitでも使っておk
444 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:34:42 ] >>438 んー、これの一部は、私が書いたものですね。 @では、cnt が 0〜7 の間のときに数字以外のものが入力されたら err = 1 とすればいいのではないでしょうか。 Aでは cnt は使わなくてもいいと思います。 またまた同じことを言うのはもうしわけありませんが、 同じような処理(二進数を表示する)は、サブの関数にするのがわかりやすいと思うのですが、いかが? 「n を左にシフトさせる -> 表示する -> また右にシフトして元に戻す。」 とするくらいならば、 「n を左にシフトさせた結果をサブの関数に渡す。サブの関数は渡された値を表示する。」と考えるのです。 メインでは n の値自身は変化しないので、「元に戻すためにシフトする」必要がなくなると思います。 全ビットを反転させる演算子は ^ ではなくて ~ です。 当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。 @ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6335.txt A kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6336.txt
445 名前:439 mailto:sage [2008/04/24(木) 23:37:31 ] >>438 A 問題点を挙げるので、それぞれ理解してください。 ・入力処理でunsigned charに入れると、256以上が入らないので、エラーチェックができない。 ・不正文字のチェックがif(cnt<3)の中に入っているので、4文字目以降をチェックしていない。 ・unsigned charの上限は255なので、if(n>255)の条件は絶対に成立しない。(警告の原因) ・nを直接左シフトすると、右シフトしても左端のビットは戻ってこない(必ずビットは0)。 ・n^=n は、n=n^nと等価。n^nは必ず0になる。^は排他的論理和。 ・printfの引数にnは3つもいらない(実害無し) ということで、はいデバッグ済みのソース kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6334.txt >>442 それは思ったが、当人のレベルを考えて控えた・・・。
446 名前:425 [2008/04/24(木) 23:37:32 ] >>440 ありがとうございます!明日これでやってみます。 説明不足でほんとすいませんでした。
447 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 00:00:56 ] >>441 では、GKS() 自体については私はくわからないので、すみませんが考えていただくことにして、 「GKS() を動作させる準備として、配列 DATA[][] に infile.csv の学籍番号データを読み込んでおく」プログラムを up します。 DATA は、DATA[i][1024]にして、 一人目の学籍番号は DATA[1][0]〜DATA[1][学籍番号の桁数 - 1] に記録、 二人目の学籍番号は DATA[2][0]〜DATA[2][学籍番号の桁数 - 1] に記録、 ... i 人目の学籍番号は DATA[i][0]〜DATA[i][学籍番号の桁数 - 1] に記録, としました。 確認した環境は WindowsXP, 処理系は cygwin(3.4.4) です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6337.txt
448 名前:TT mailto:s_040095@hotmail.co.jp [2008/04/25(金) 01:46:08 ] 「Continue文」を使った宿題が出ました 内容が「60点以上を合格とし、合格者の平均点を出力する」です 誰かソースを教えて下さいm(_ _)m
449 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 01:49:20 ] >>1 を読んで書き直し
450 名前:デフォルトの名無しさん [2008/04/25(金) 02:07:32 ] >>436 内部はやっぱり頭悪いなw
451 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 05:00:29 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6339.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年4月25日22:00まで [5] その他の制限:先生が言ってたヒントでは問1は二重ループを、 問2はメモリの動的確保を使えばいいということです。 自分でもかなり考えたのですが結局どうやればいいのか分かりませんでした…。 よろしくお願いします。
452 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 05:41:34 ] >>451 #include <stdio.h> #include <string.h> #include <stdlib.h> int myStrstr(char *strA, char *strB){ int i, j, pos; pos = -1; for(i=0; strA[i] != '\0'; ++i){ if(strA[i] == strB[0]){ for(j=1; strB[j] != '\0' && strA[i+j] == strB[j]; ++j); if(strB[j] == '\0'){ pos = i; break; } } } return pos; } char* strDouble(char *strA){ char *p; int i; p = (char*)malloc(sizeof(char) * (strlen(strA) * 2 + 1)); if(p == NULL) return NULL; for(i=0; strA[i] != '\0'; ++i){ p[i*2] = strA[i]; p[i*2+1] = strA[i]; } p[i*2] = '\0'; return p; }