1 名前:デフォルトの名無しさん [2007/06/23(土) 23:03:25 BE:255611693-2BP(12)] あなたが解けない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++の宿題を片付けます 90代目 pc11.2ch.net/test/read.cgi/tech/1181802185/
2 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:16:54 ] >>1 乙
3 名前:前スレ978 mailto:sage [2007/06/23(土) 23:26:29 ] 前スレ>>979 、>>981 さんレスどうもです。無事動作しました。 [1] 授業単元:プログラム技術3 [2] 問題文(含コード&リンク): main(int argc char , *argv[]){ int i; printf("%d argument(s).Yn" , argc -1); for(i=0; i<argc; i++){ printf("argv[%d] : \"%s\"\n", i , argv[i]); } } 引数の順序を入れ替えてた後(*argv[] , int argc char)、入力した文字を逆順に出力するようにしたいのですが、変数以外 何処を変更したらいいのでしょうか?for文あたりを弄っても上手くいきませんでした。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 6月26日 [5] その他の制限: (ポインタを習ってるレベルです)
4 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:48:33 ] >>3 文字を逆順の意味がはっきりせん。複数の文字列をそれぞれ入力した順番から逆にするのか それぞれの文字列の文字を逆順にするのか。それから、引数間違っているから ちゃんと覚えてくれ。 int main(int argc , char *argv[]) やで
5 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:55:14 ] c0x.coding-guidelines.com/5.1.2.2.1.html 160 The function called at program startup is named main. 161 The implementation declares no prototype for this function. 162 It shall be defined with a return type of int and with no parameters: int main(void) { /* ... */ } 163 or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char *argv[]) { /* ... */ }
6 名前:デフォルトの名無しさん [2007/06/24(日) 06:08:18 ] [1] 授業単元:プログラム [2] 問題文(含コード&リンク): 図書カードカタログ: 1.入力 2.著者名による検索 3.書名による検索 4.終了 選択項目を入力して下さい: ユーザーが1を選んだら書名、著者名、出版社の順に書名先頭に空白行が入力させるまで繰り返し入力させ続ける。 2,3を選んだ場合は特定の著者か書名を入力させ一致するものがあればその残りの情報も出力させる。 4.で終了 [3] 環境 [3.1] OS: (Windows/Linux/等々)WinXP [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)Borland C++ Compiler 5.5 [3.3] 言語: (C/C++/どちらでも可 のいずれか)cのみ [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)無期 [5] その他の制限:ループ、if、switch、ポインタ、配列、自作関数まで習った、 使用可能なライブラリ stdio.h string.h conio.h stdlib.h ctype.h 自分で書いたコードです ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4365.txt なんかごちゃごちゃしてわかりにくくなってしまいました あと、なんども検索してるとバグっておかしくなってしまいます もっとキレイにうまく改善できませんか?
7 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 07:46:14 ] [1] 授業単元:アルゴリズム [2] 問題文:10リットル、8リットル、3リットルの容器があり、10リットルの容器に水がいっぱい入っている。 この3つの容器を用い、3リットルの容器に1リットルの水を取り出す最小の手順を答えよ。ただし、水を移す時は、移す側が空になるか、移す側がいっぱいになってときとする。 幅優先探索と言うのを用いるそうです。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 5.5.1 [3.3] 言語: C [4] 期限: 6月25日の2400まで [5] その他の制限:バケツの水の入り方を、座標に見立て、その座標に番号をつけ、広がり優先探索を用いる。 どうしたら良いかわからず、焦っています。 似たような問題が89代目のスレッドにありましたが、制限が違っていて対処できませんでした。 急ですがよろしくお願いします
8 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 07:52:31 ] >>7 状態は 8L 容器に入っている水の量 0-8 3L 容器に入っている水の量 0-3 9*4=36 種の状態を取り得るってことで解くのでおk?
9 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 07:52:43 ] これって 10Lから3L汲み出す&捨てる×3回繰り返す、残った1Lを3Lの容器に入れる のが最短?
10 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 08:15:03 ] pc11.2ch.net/test/read.cgi/tech/1181802185/1000 pc11.2ch.net/test/read.cgi/tech/1180856695/151
11 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 08:23:39 ] 前スレ>>983 (2) #include <stdio.h> int foo(int input[5][5], int ii, int jj){ int i, j, total = 0; if(input[ii][jj] == 1) return 0; for(i = ii + 1; i < 5 && input[i][jj] == 0; i++) total++; for(i = ii - 1; i >= 0 && input[i][jj] == 0; i--) total++; for(j = jj + 1; j < 5 && input[ii][j] == 0; j++) total++; for(j = jj - 1; j >= 0 && input[ii][j] == 0; j--) total++; return total; } int main(void){ int input[5][5], i, j; for(i = 0; i < 5; i++) for(j = 0; j < 5; j++) scanf("%1d", &input[i][j]); for(i = 0; i < 5; i++){ for(j = 0; j < 5; j++) printf("%d ", foo(input, i, j)); putchar('\n'); } return 0; }
12 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:15:59 ] >>6 とりあえず制限事項に外れる入力が無ければ大丈夫に見えるけど、 どういう風に入力したら、どうおかしくなったのか、詳しくヨロシク。
13 名前:前スレ978 mailto:sage [2007/06/24(日) 09:16:00 ] >>4 スマソ。複数の文字をそれぞれ入力した順番から逆に出力したいんです。 現状ですと、./a.out a b c と入力すると、[1]a [2]b [3]cと出力されます。 それを、./a.out a b c と入力して、[1]c [2]b [3]aと出力される ようにしたいんです。どうしたら良いでしょうか? それと、mainの前のintって必要なのでしょうか? 授業で習ったサンプルの文にはintは無かったのですが・・・。 main(ここでintの宣言をしてるので必要ないような気がするのですが) お手数ですが、回答よろしくお願いします。
14 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:29:48 ] >>3 >>13 習った習わないはともかく、国際的な標準スタイルってことで それくらい知っておくべきだと講師に言っておきんしゃい。 #include <stdio.h> int main(int argc , char *argv[]) { int i; printf("%d argument(s).\n" , argc -1); for(i=argc-1; i>=1; i--){ printf("argv[%d] : \"%s\"\n", i , argv[i]); } return 0; }
15 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:32:14 ] >>5 にISO準拠におけるC言語の、プログラムの開始の関数と mainが返す値について書かれているから。まさか、この程度の 英語も理解できんとは言わせないよん。
16 名前:前852 [2007/06/24(日) 09:37:38 ] 前992さん (1),(2)です
17 名前:前スレ978 mailto:sage [2007/06/24(日) 10:15:18 ] >>14 レスどうもです。上手く動きました。どうもです。 >>15 あれ、漏れへのレスだったのですね。気付きませんでしたorz それにしてもmain関数手前にintを置くのが正しいスタイルだったんですねorz 授業ノートを見返してみましたが、書かれてるソースには一つもmain手前にintが ありませんでした・・・。 次週の講義の際に講師に質問してみます。
18 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:19:24 ] 2ch の宿題丸投げスレで宿題解いて貰ったんですが、 main の前に int がついています。どういう意味でしょうか? もしこんなことも分からないようなら 勉強不足な講師だな ププッ って言ってました
19 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:29:51 ] 前スレで修正後プログラムがまだでして、再書き込みさせてもらいます。 [1] 授業単元:C++研究 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4218.txt (問題文) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4262.txt (修正前プログラム) 上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文) 値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、 ある値が出た場合のみポイントが復活する機能を追加しなさい (ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。 自分とは男を指します。キーボードから自分1〜20の値を任意に決めれるようにします。 ある値が出た場合、そのある値が15の場合、15がでたときに、その勝負が行われた直後に 1〜20ポイントランダムでポイントが自分の持ちポイントに加算される。 [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:Visual studio.2005 [3.3] 言語: C++ [4] 期限: ([2007年6月26日12:00まで] [5] その他の制限:特になし 内容がややこしいですが、どうかよろしくお願いします
20 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:30:52 ] >>17 くどいようだが、あくまでも 標準スタイル、ANSI、ISO準拠によるものであって そのスタイルを無視しても問題ない環境では本当に問題はないぞな。 あくまでも幅広い環境で通用する標準スタイル。
21 名前:前852 [2007/06/24(日) 10:43:05 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4366.c 表示もうまく出るようになったのですが 出力結果を見るとソートがうまくいっていないような感じです。 (ちゃんと合計点降順になっていません) もともとクイックソートは昇順で作っていたので、 条件分岐を逆にしただけなのですが、 これが原因でしょうか?(コメント行は書き換えてないです。)
22 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:11:26 ] >>7 やってみたが解なしになってしまった。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4368.txt なんか間違ってんのかな。
23 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 12:46:15 ] >>7 幅優先むずいな
24 名前:984 [2007/06/24(日) 13:01:15 ] >>21 quick()の再帰呼出しを、whileブロックの外に出す。 quick_sub()もそうだな。 input()の while(fgets(buf,sizeof(buf),fin) > 0){ を while(fgets(buf,sizeof(buf),fin) != NULL){ に訂正してくれ
25 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 13:22:29 ] [1] 授業単元: [2] 問題文(含コード&リンク): 2次方程式 ax^2 + bx + c = 0 は,判別式 Δ^2 = b^2 - 4ac により,(a)2つの実数解をもつ,(b)1つの実数解(重解)をもつ,(c)2つの虚数解をもつ,の3つの場合に分けられる. 3つの正整数a,b,cを引数とし,実数値sqrt(b2-4ac)を戻り値とし,b2-4acが負の場合はエラーを示す値を戻り値とするユーザ定義関数delta()を作成せよ. 作成したユーザ定義関数を用いて,3つの正整数a,b,cをキーボードから入力し,2つの実数解を表示するプログラムを作成せよ. ただし,重解をもつ場合と虚数解をもつ場合はその旨表示したうえで,再度a,b,cの入力を促すようにし,2つの実数解をもつ方程式が入力されるまで繰り返すようにすること. [実行結果] 3つの係数を入力して: 1 2 1 重解を持つよ!入力し直して。 3つの係数を入力して: 1 1 1 虚数解を持つよ!入力し直して。 3つの係数を入力して: 2 9 3 2x^2 + 9x + 3 = 0 の2つの実数解は x = -0.362541 と x = -4.137459 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC [3.3] 言語: C [4] 期限: 2007年6月29日まで [5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
26 名前:22 mailto:sage [2007/06/24(日) 13:55:53 ] >>7 うーん。条件もう一度確認してみて。 > 移す側がいっぱいになってとき じゃなくて、「移される側がいっぱいになるとき」 と読みかえると、解が出るんだが。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4369.txt canmove() の中の #if 0 を #if 1 に変更すると、>>7 に書いてある通りの動作になるが、 解なしになる。 main() の中の #if を同様に変更すると、探索の途中経過を表示する。
27 名前:デフォルトの名無しさん [2007/06/24(日) 14:48:59 ] [1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある (kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4151.txt ) 次の手順で動作するプログラムheapsort.cを作成し,その動作を確認せよ. まずファイルから保存されているデータ数nを読み込む. データを1つ読み込み,ヒープを構成する. これをn回繰り返し,その度にヒープを構成する. すべてのデータを挿入し終ったらヒープが完成するので,データを木構造がわかるようにディスプレイ上に表示する. 次に,deletemax()関数をn回呼び出し,ソート処理を進める. 最後に,整列されたデータをディスプレイ上に表示しプログラムを終了する. [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005 [3.3] 言語: C [4] 期限: 6月26日 夜まで [5] その他の制限:木構造のディスプレイ表示方法は各自に任せる. 結果がソートされていることをそれぞれのデータについて毎回確認すること. どなたか解る方、解いていただけるとありがたいです。
28 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:49:25 ] >>25 それ前スレに同じ問題あったぞ 回答は954かな
29 名前:前852 [2007/06/24(日) 14:54:02 ] >>24 コンパイルが通らなくなりました。 In file included from /usr/include/stdlib.h:33, from seiseki.c:19: /UNIONFS/usr/bin/../lib/gcc/i486-linux-gnu/4.0.4/include/stddef.h:214: error: syntax error before 'typedef'
30 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 15:10:00 ] >>6 斜め読みしただけだが。 search1() > while(p[i] != ' '){ → while(1) { に。 search2()も同様の変更。
31 名前:前852 [2007/06/24(日) 15:16:17 ] quickの再起をwhileの外にした時点で実行すると 処理中 を表示する前に[SegmentationFault] != NULLにしても同上 です。
32 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 15:33:46 ] >>26 多分>>7 のタイプミスと思われ
33 名前:984 [2007/06/24(日) 15:34:52 ] >>31 >条件分岐を逆にしただけなのですが この修正が怪しい。 quick()内の判定条件を見直せ。 3,4件の小さなデータを使い、 処理を追いかけてみるといい。 これは自力でできると思う。
34 名前:前852 [2007/06/24(日) 15:44:08 ] >>33 > < を逆にして < > にすべきところを <= >= にしていたのが原因だったみたいです。 無事完成しました。 今までご協力してくださったみなさま、 本当にありがとうございます!
35 名前:984 [2007/06/24(日) 15:59:27 ] ソートのロジックは何か変だなと思います。 何かを参考にしたのでしょうか。 一度見直した方が良いようです。
36 名前:前852 [2007/06/24(日) 15:59:48 ] //データを構造体配列に取り込んでいく while(fgets(buf,sizeof(buf),fin)>0){ p = buf; field[0] = buf; j = 1; if(buf[strlen(buf)-1] == '\n'){ buf[strlen(buf)-1] = 0; } while(*p != 0){ if(*p == ','){ *p = 0; field[j++] = p+1; } p++; } ここの流れ(挙動?)がよく分からないのですがどういう感じでよみこんでいってるんでしょうか?
37 名前:前852 [2007/06/24(日) 16:01:01 ] ソートですが、書籍に載っていた物をそのまま使い昇順ソートを作った物を 大小の判別っぽいところを逆にして降順ソートにしました。
38 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:06:14 ] あんた甘えすぎ
39 名前:前852 [2007/06/24(日) 16:08:36 ] >>38 うっせーよ、カス
40 名前:デフォルトの名無しさん [2007/06/24(日) 16:21:08 ] 甘えん坊にカスと言われた>>38 、可哀想っす >>36 きっとね、いい感じに読み込んでると思うよ、テヘ
41 名前:前852 [2007/06/24(日) 16:35:51 ] 39は偽物ですよ
42 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:42:36 ] 以下のプログラムを書いたんですが データ数が多いせいかSystem.StackOverflowException'のハンドルされていない例外 となってしまいます。 解決方法を教えてください。 お願いします。 /*畳み込み和を求めるプログラム*/ #include <stdio.h> #define FMAX 1000000 /*関数f(τ)のデータ数 「100万個」 */ #define GMAX 1000000 main() { int f[FMAX]; /*関数f(τ)*/ int g[GMAX]; /*関数g(τ)*/ int sum[FMAX+GMAX-1] = {0}; /*畳み込みの結果を入れる変数*/ int i,t; /*関数f,gの初期値の代入(全て1)*/ for (i=0;i<FMAX;i++ ) f[i]=1; for (i=0;i<GMAX;i++ ) g[i]=1; /*畳み込み和の計算*/ for (t=0; t< FMAX+GMAX-1; t++){ for( i=0 ; i<GMAX; i++){ if ( t-i >= 0 && t-i < FMAX) sum[t] += f[t-i]*g[i]; } } /*計算結果の表示*/ for (t=0 ; t<FMAX+GMAX-1; t++) printf("%d,",sum[t]); }
43 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:46:33 ] >>42 一気にやろうとしないで小分けにすれば?
44 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:46:55 ] 配列宣言の頭に static をつける
45 名前:ぴっころ [2007/06/24(日) 16:48:52 ] 初めまして。これから度々お世話になるかもしれませんが宜しくお願いします。 今はC言語で0をある数で割るとどうなるのかが分かりません。 ある数を0で割るとエラーになる事は調べて分かったのですが。
46 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:50:57 ] >>45 いや、0だと思うんだが・・・
47 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:52:05 ] c言語に限らず0だろ
48 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:54:17 ] >>45 は0ではなく'0'を割ったんだろ
49 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:00:21 ] >>45 グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ 頭で考えたり、誰かに聞くよりより、実際にやってみた方が身に付く 少数点に','使う奴がいたり、0をある数字で割るとどうなりますかと 聞く奴がいたり、この国の教育はどうなってるんだよ。
50 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:04:21 ] 小数点にカンマを使うのは、ヨーロッパのどこかだったような
51 名前:ぴっころ [2007/06/24(日) 17:05:24 ] >>49 どんなコードを書けば、y = x / 0; のyの値を確認できますか? エラーで終わってしまうんです。すみませんが教えてくださいお願いします。
52 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:08:12 ] 自動配線ツールをCで書こうと思ってるんですけど。 アルゴリズムはmazeをベースで。 書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか? アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。 サンプルなどがあればと思って質問させていただきました。 誘導していただければ幸いです。
53 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:09:53 ] >>51 その処理は未定義。どうしても確認したければ int x = 3; int y; x -= 3; y = 3 / x; printf( "%d", y ); ちなみに、VC++6.0では実行時エラー。
54 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:12:57 ] >>52 スレ違い
55 名前:ぴっころ [2007/06/24(日) 17:14:14 ] 確かに。 次に来た時にはもう少しマシな質問をしたいと思いますので、よろしく お願いします。 ありがとうございました。
56 名前:ぴっころ [2007/06/24(日) 17:19:42 ] >>53 確認有難うございます。やっぱりエラーでますか >>49 の >グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ から、確認する方法がある(少なくとも>>49 サンは知ってる)と思ったのですが..
57 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:26:34 ] もうくんな
58 名前:984 [2007/06/24(日) 17:28:17 ] >>36 fgetsはファイルから1行ずつ読み込む。読めなくなったらNULLを返す。 if...でしていることは、行末の改行コードを取り除く事。 内側のwhileでは、行の先頭から','を見つけ、文字列の分割をしている。 処理を終わると、bufの中はNULLで区切られた複数の文字列となり、 ポインタ配列には各文字列の先頭が格納される。
59 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:28:34 ] >>56 エラーが出るって事で確認した事にはならんのか?
60 名前:42 mailto:sage [2007/06/24(日) 17:33:36 ] >>44 教えていただいたように static int sum[FMAX+GMAX-1] ; としてみたら、動作しました。(よく分かってませんがw) ありがとうございましたー
61 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:36:37 ] >>56 0除算時の動作は未定義。よって、どんな動作をしても規格上問題ない。 プログラムがランタイムエラーになっても、演算結果が0になっても、そこで無限ループに陥ってもOK。 www.st.rim.or.jp/~phinloda/cqa/cqa7.html 宿題スレよりこっちのほうがいいと思う。 C言語なら俺に聞け(入門篇) Part 14 pc11.2ch.net/test/read.cgi/tech/1181735298/ くだすれC言語(初心者用) Part.2 pc11.2ch.net/test/read.cgi/tech/1172099763/
62 名前:前852 [2007/06/24(日) 17:38:03 ] >>58 ということは、fgetsのところで処理をすれば、 1行がどれくらいの文字数あるかとかも判別できると言うことですか?
63 名前:ぴっころ [2007/06/24(日) 17:41:08 ] printf("%d\n",data) でdata=-600の場合に-600と出力されるのでしょうか? 実際にやってみろと言われそうですが、コンパイラのダウンロードの仕方 とかが良く分からないもので
64 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:42:02 ] 帰れ
65 名前:984 [2007/06/24(日) 17:42:47 ] >>62 そういう処理を加えれば出来るでしょうが。 文字数が想定以上に長いときの事も考慮する必要がありますね。
66 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:43:41 ] >>63 コンパイラのダウンロードがわからないならまずはそこから試したほうがいい。 ネットでちょっと検索すれば導入をわかりやすく解説しているサイトなんて山ほどある。 手コーディングが悪いとは言わんが、時代にあってないと思う。 あ、あと質問の答えはそのとおり。-600って表示される。 けどココは宿題スレだからすれ違い。
67 名前:ぴっころ mailto:sage [2007/06/24(日) 17:43:58 ] >>59 エラーだよっていうのは >>45 で聞く前から確認済みです。 >>45 の調べた=>自分でコードを書いて調べてみたということです。 それを踏まえてココで聞いたのでが..そしたら>>49 のレスです
68 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:50:26 ] 手コーディングって、コードの自動生成と比べて、手作業でソースを書いていく作業という意味でOK?
69 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:51:06 ] >>63 ぴっころ ココは宿題回答スレだから C言語については、こっちで聞け! pc11.2ch.net/test/read.cgi/tech/1181735298/l50
70 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:52:29 ] >>68 ごめん、そういうつもりで手コーディングって言ったんじゃないw 紙とペンでコーディング、デバッグとかをするって意味で使った。 わかりづらい上に時代遅れでスマソ
71 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:53:22 ] あえて言うなら、机上コーディングか
72 名前:ぴっころ [2007/06/24(日) 17:55:30 ] スレ住民の方々お騒がせしてすみません。 紹介して貰ったスレに移ります。 応えてくれた方々ありがとうございました。 失礼します。
73 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:58:01 ] 個人的には「ペーパーコーディング」と「机上デバッグ」
74 名前:デフォルトの名無しさん mailto:sageN+が大変なことにw [2007/06/24(日) 18:10:57 ] 手コーディングの“手”が紛らわしいな
75 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:14:23 ] 若い人はハンドアセンブルなんて知らないだろな〜
76 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:32:29 ] 知らないけど、聞くだけでもめんどくさそうだなw
77 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:38:28 ] 簡単だよ、ニモニック表が頭に入っていれば。 多少の暗算も必要になったりはするけどね。
78 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 18:41:52 ] >>27 表示が超手抜きだが(配列をそのままベタで表示するだけ) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4370.txt
79 名前:デフォルトの名無しさん [2007/06/24(日) 18:56:25 ] [1] 授業単元:C言語 [2] 問題文:次の計算を行うプログラムを作成せよ。 C=B/X Bは三行三列の行列 B 5 -2 2 2 3 1 1 2 2 X=3 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 2007年6月24日pm:11:00 です。よろしくおねがいします。
80 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:02:56 ] 初めて1ヶ月少々なのですが自分で数当てゲームを作ってみました 一応動作し、正解の数もランダムで取得できるようにはなっていますが ここはこうしたらよい、とかあったらありがたいな、と思い カキコしてみました。不具合、というか汚い書き方だとは思いますがヨロシクお願いします。 長いので次のレスで書きます
81 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:10:24 ] >>1 を読め。
82 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:10:35 ] >>80 ロダにUp汁
83 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:20:44 ] >>80 次のレスまだ〜〜〜?もしかして、次の スレ ってオチ?w
84 名前:依頼者 [2007/06/24(日) 19:31:12 ] [1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 変数xのyビット目の値を返す関数int bit_test(int x,int y)の作成。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:visual studio.net [3.3] 言語:C++ [4] 期限: 07年6月25日まで [5] その他の制限:特になし 演算子の問題ですがまったくわかりません。どなたかお願いします。
85 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 19:34:22 ] 前スレにも他のスレにもあったな。 >>84 int bit_clear(int x,int y){return x&~(1<<y);} int bit_test(int x,int y){return (x&(1<<y))>>y;}
86 名前:42 mailto:sage [2007/06/24(日) 19:46:42 ] >>44 さんに教えて頂いたとおりで、動いたのですが。 配列宣言の頭にstaticをつける意味が分からなかったので、教えていただきたいです。 そもそも、なんでエラーになってるのかも分からない始末ですorz 少し調べたんですが、malloc というのを使えば領域確保?できるんでしょうか?
87 名前:デフォルトの名無しさん [2007/06/24(日) 19:49:45 ] [1] 授業単元: 2年プログラミング実習 [2] 問題文(含コード&リンク): 電卓計算のための、数式変換プログラムを作成せよ。 逆ポーランド法へと変換し、それを要素ごと配列へと格納せよ。 [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 6.25 [5] その他の制限: 最終的に、配列に文字型で式が格納されていること。 演算子の判別にはswitchを用いて、関数を作成する事。 switchの部分がわからんのだが、多分+なら1、-なら2と返す関数を作れって事だとおも。 最初の数式はargvは使わず、プロンプトメッセージの後にfgetsで読み込んでます。
88 名前:デフォルトの名無しさん [2007/06/24(日) 20:08:35 ] >>79 #include <stdio.h> int main(void) { int i,j,X=3,c[3][3]={0}; int b[3][3]={{5,-2,2}, {2, 3,1}, {1, 2,2}}; for(i=0;i<3;i++){ for(j=0;j<3;j++){ c[i][j]=b[i][j]; } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%3d/%d",c[i][j],X); } printf("\n"); } return 0; } 私も初心者なんですが、書いてみました。 問題の意図にそくして無いかも。 それに配列cは用意する必要は無い気がするんだけどね…。
89 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:18:49 ] [1] 授業単元:プログラミング技術3 [2] 問題文(含コード&リンク): /*(1)date.txtというファイルを用意し、次のプログラムを実行せよ。 (2)このプログラムを書き換え、ファイル名をコマンドラインから指定出来るようにせよ。*/ #include<stdio.h> #include<stdlib.h> int main(void){ char c; char filename[] = "date.txt";//ファイル名 FILE *fp; //ファイルポインタ //ファイル「読み込み」で開く if ((fp == fopen(filename "r")) == NULL){ printf("File dose not exist. \n"); exit(1); } //ここからファイルを読み込んで処理 //例 一文字入力し表示 wile((c=getc(fp))!=EOF){ printf("%d\n" , c); } //開いたファイルを閉じる fclose(fp); } [EOF] ↑ 全くと言って分かりません。完全にお手上げです。 少々の解説も付加してくださると助かります。 よろしくお願いします。
90 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:20:25 ] >>87 switchの部分は↓的なことだと思う。 switch( ope ) { case '+': iAns += iNum; break; case '-': iAns -= iNum; break; (以下略)
91 名前:89 mailto:sage [2007/06/24(日) 20:20:27 ] 続きです。 [3] 環境 [3.1] OS:LINUX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限: 07年6月26日まで [5] その他の制限:ポインタを少々習った程度です。
92 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:20:29 ] >>87 前スレの回答ではお気に召さなかったということかな? それっぽく直したよ。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4373.txt
93 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:25:42 ] >>86 配列は領域を連続で確保できなければいけない。 mallocを使ったところで、確保できる保証は無い。 staticをつけた場合は、確保するために使用する領域が異なるため上手く行っているだけ。 (staticウンヌン部分について自信なし。詳しい人補足plz)
94 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:28:17 ] >>93 取り敢えず間違ってはいないよ。
95 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:29:14 ] >>89 変更部分だけ int main(int argc, char *argv[]) { char c; FILE *fp; if(argc<2) { printf("ファイル名の指定がねぇ〜ぞゴルァ!\n"); return 1; } if((fp=fopen(argv[1],"r"))==NULL){
96 名前:デフォルトの名無しさん [2007/06/24(日) 20:52:01 ] >>97 ・・・?前スレ?重複質問だったのか? とりあえず見てみた。マジ有難い。 提出用に少し変更してみて、不明な所があれば聞くかも知れないが、大丈夫かな。
97 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 20:52:16 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 以下のコマンドを実行可能な名簿管理システムを作成せよ。 1. メンバの追加 2. メンバの削除 3. メンバリストを名前順(アルファベット昇順)で表示 4. メンバリストのファイル出力 5. 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込 メンバ情報としては、最低限、名前と学生番号を持つこと。システムの拡張は自由に行ってよい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限:無期限 [5] その他の制限:構造体、ポインタがつかえるとよい どうかよろしくおねがいします
98 名前:デフォルトの名無しさん [2007/06/24(日) 20:52:40 ] >>96 >>92 で
99 名前:89 mailto:sage [2007/06/24(日) 20:54:06 ] >>95 レスどうもです。 え〜と、main関数内の変更とファイルポインタの下にif(argc<2) { を printfの下にリターン文を、書けって事でいいんですか? また、if((fp=fopen(argv[1],"r"))==NULL){ は return1 exit(1); } if((fp=fopen(argv[1],"r"))==NULL){ のようにすればいいのでしょうか?
100 名前: ◆sJh8mwqDUo [2007/06/24(日) 20:58:03 ] [1] 授業単元: C言語入門(配列・関数) [2] 問題文: 1. 0からN-1の間の擬似乱数整数を返す関数(myrandと名前をつける)を作成しなさい。 2. myrandでm×N個の擬似乱数を発生させて、出現しなかった整数の個数を、N個発生させる毎に求めなさい。 ただし、Nは1000以上に#defineし、mは実行時にキー入力するものとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 6月27日夜 [5] その他の制限: main関数にすべての処理を書くこともできるが、そうしないで関数に分割すること。 乱数発生関数の初期化を忘れないこと。 上記の通りです。どなたかできる方、よろしくお願いします。