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/
331 名前:デフォルトの名無しさん [2007/06/27(水) 00:03:30 ] 綺麗なソースを作ろうと思い、セオリーを守ってる(グローバル変数を極力使わないようにしてる・・・etc)が 実に汚いソースになる。 汚いと分かっていながらどこをどの様に修正すれば良いのか皆目検討つかないから困る。 助けて・・・。
332 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:08:28 ] >>324 ありがとう できればもう少し詳しく説明して欲しいです
333 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:17:42 ] >>331 広域変数は悪じゃない staticで外部モジュールから参照できないようにするとか きっちり管理さえすれば忌み嫌うものではない むしろ広域変数を無理に避けようとして余計マズい設計になることの方が、本来避けるべき >>332 これ以上詳しく説明しろといわれてもな Cで使ってる以上は、constにさえ気をつければ初期化も代入もそんな大層な差はない C++だとまた話が変わってくるんだけど 具体例見るのが一番手っ取り早いから、いろいろ調べてみ
334 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:18:49 ] >>308 1と2をとりあえず先に kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4414.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4415.c
335 名前:332 mailto:sage [2007/06/27(水) 00:26:28 ] >>333 わかりました 色々ありがとうございました!
336 名前:331 [2007/06/27(水) 00:28:34 ] >>333 うん。 今日、指摘された。 staticのスコープは定義された箇所のみが有効範囲だよね? でもアドレス渡ししたらスコープ外の場所でも値を書き換えたり出来る? 多分、出来たとしてもやっちゃ駄目なんだろうけど・・・。
337 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:38:00 ] どうでもよいが>>331 よ。それは宿題の話なのか。 C言語に関する一般的な相談事ならスレ違いだぞよ。
338 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:41:11 ] >>336 そう、staticは参照の範囲を同一のファイル内だけに限定できる。 そして、指摘の通り int g_data = 0; // 広域変数 int *getGlobal(void) { return &g_data; } みたいなのも、手法としてはある。 利点は、広域変数をモジュールの中に置ける事で、Cでオブジェクト指向もどきな設計ができること。 反面、C++のgetterと違ってポインタを取得できてしまうから、それを通じて外から値を書き換えてしまうこともできる。 でもgotoと一緒で使いどころさえ間違えなければ大丈夫。
339 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:52:26 ] >>320 再帰で(3) int arr_max_pos(int arr[], int n){return n?arr[n-1]>arr[arr_max_pos(arr,n-1)]?n-1:arr_max_pos(arr,n-1):0;}
340 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:57:16 ] >>320 (1) int div_pow(int n,int p){return n%p?0:div_pow(n/p,p)+1;} int div_quo(int n,int p){return n%p?n:div_quo(n/p,p);}
341 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:59:12 ] >>308 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4414.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4415.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4416.c
342 名前:デフォルトの名無しさん [2007/06/27(水) 06:44:44 ] 関数内で宣言したstatic変数(下の例ではa__)を自在にいじりたいなら… 下品だけどねw static int a; int hoge(){ static int a__ = 123; a = a__; return(0); } int getglobal(){ a+=10; return(a); } int main(){ hoge(); printf("%d", getglobal()); return(0); }
343 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 06:50:26 ] 意味分らん
344 名前:デフォルトの名無しさん [2007/06/27(水) 07:25:54 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): 以下の式のおいて、刻み幅が0.2のときの解析解をオイラー法で求めよ。 y(0)=0 y'(0)=0 y'=z z'=-z-2y+cosx [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc-2.95 [3.3] 言語: C、C++どちらでも良い [4] 期限:6/27 [5] その他の制限: お手上げ状態です。よろしくお願いします。
345 名前:デフォルトの名無しさん [2007/06/27(水) 08:43:25 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 多次元配列 次の表は今年の全日本大学野球選手権における 早稲田大学の試合結果である。 2回戦 1 2 3 4 5 6 7 8 9 早稲田大 0 0 1 0 1 0 0 0 0 九州国際大 0 0 0 0 0 0 0 0 1 準々決勝 早稲田大 0 5 4 0 0 0 0 0 7 関西国際大 0 0 0 0 3 0 0 0 0 準決勝 創価大 1 0 0 0 0 0 0 0 0 早稲田大 6 0 0 1 0 1 0 2 0 決勝 早稲田大 1 0 0 2 0 0 1 0 0 東海大 0 0 0 0 0 1 0 0 0 それぞれの試合について各回の得点と失点(表裏ではないので注意)を 2×9の2次元配列に格納するものとする。 試合分のデータがあるので、4×2×9の3次元配列scoreを用意して、得失点を配列の宣言と同時に初期値として格納しなさい。 また以下の内容を計算して出力しなさい。 4試合の平均得点と平均失点 各回ごと(1から9回)の4試合の平均得点と平均失点 多次元配列の要素を参照するには‥多重ループを使う [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: visual studio 2005 [3.3] 言語: C [4] 期限:来週まで [5] その他の制限: 特になし お願いします
346 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:11:52 ] クソ簡単やないか なめとんか
347 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:15:34 ] >>344 y' = z とう条件は不要なんじゃないかと思うが #include <stdio.h> #include <math.h> #define N 100 double f(double y, double z) { return -z - 2.0 * y + cos(y); } int main(void) { double y[N], z[N], dx = 0.2; int i; y[0] = z[0] = 0.0; for (i = 0; i < N; i++) { y[i] = y[0] + i * dx; z[i + 1] = z[i] + dx * f(y[i], z[i]); printf("y = %f, z = %f\n", y[i], z[i]); } return 0; }
348 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:20:12 ] >>347 師匠。
349 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:23:34 ] やべえ double y[N], z[N], dx = 0.2; を double y[N + 1], z[N + 1], dx = 0.2; に直しておいてくれ。 あとf()のcos(y)は題意ではcos(x)になっているが間違いだよな?
350 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:24:42 ] 問題には cosx ってあるが cos y で宜しいんかな?
351 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 09:27:55 ] cos x だったとしたら解けん。
352 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 10:40:57 ] >>319 #include <stdio.h> int mycmp(char *m1 ,char *m2) { while (*m1 != '\0') if(*m1++ != *m2++) return 0; if(*m1 == *m2) return 1; } int main(int argc, char *argv[]) { char m1[256], m2[256]; FILE *fp; fp = fopen(argv[1], "r"); fgets(m1,256,fp); fgets(m2,256,fp); fclose(fp); if(mycmp(m1, m2)) puts("yes"); else puts("no"); return 0; } エラー処理はしてないにょ。動かしてもいないけど、これ以上は自分で。 ちゃんと授業を受けるか、さもなくばIT関連の就職先はあきらめろ。
353 名前:デフォルトの名無しさん [2007/06/27(水) 11:36:26 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 「在庫問題」 ある倉庫を考える。この倉庫は営業開始時において、毎日Sトンの初期在庫量を有する。1日の注文量rが確率的に発生するとき、営業終了時間の最終在庫量(S>rの場合)、不足量(S<rの場合)とする。 注文量rが正規分布N(100,20^2);すなわち平均100、標準偏差20の正規分布に従う乱数と仮定する。 平均100、標準偏差20の正規分布に従う乱数は以下で求められる。 0以上、1以下の一様実数乱数をUiとする。それを次式に代入することによって、標準正規乱数Xとなる。 X=U1+U2+……U12-6 Xを次式に代入することによってY(標準偏差20の正規分布に従う乱数)となる。 Y=20X+100 維持費:1トンにつき120円(最終在庫量に対して) 品切損失:1トンにつき180円(不足量に対して) 補充経費:1回につき15000円(補充量に依存せず) 総経費:維持費+品切損失+補充経費 (1)補充発注に関して、自分の採用した決定方法を述べよ。 これは、 2日目以降の初期在庫量が毎回200トンになるようにする。 例えば、第一日目の初期在庫量が125トンだから、その日の注文量が100だとすると125−100=25で最終在庫量25トンだから、その日の 補充量は200−25=175で175トン発注するというふうにする。 (2)そのような補充を行い、1000日間の、初期在庫量、最終在庫量、補充量、総経費について、1日あたりの平均値を求めよ。 なお、第一日目の初期在庫量を125トンとする。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: borland [3.3] 言語: どちらでも可 [4] 期限: 2007年06月28日12:00まで [5] その他の制限: なし 度々すいませんm(__)m
354 名前:デフォルトの名無しさん [2007/06/27(水) 13:07:42 ] [1] 授業単元:プロC [2] 問題文(含コード&リンク): 1.まず、 pwd を実行し、成功すれば、 ls を実行する。 ただし、コマンドライン引数はすべてls にそのまま渡すものとする。 2.オプション -c があれば、 date を実行し、その後、 cal を実行する。 オプションを指定しなければ、 date だけを実行する。 ただし、オプション -z timezone があれば、 環境変数TZの値をtimezoneに設定して、各コマンドを実行する。 3.findコマンドを呼び出して、指定されたディレクトリ (複数可。指定がない場合は、カレントディレクトリ) 以下にあるディレクトリ(指定されたディレクトリ自身も含む)を表示する。 ↓サンプルプログラム pwdを実行し、成功すれば、その後、ls -lを実行するプログラム kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4420.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4421.c [3] 環境 [3.1] OS:Vine Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:来週まで [5] その他の制限:なし よろしくお願いします。
355 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 13:35:02 ] [1] 授業単元:アルゴリズム論 [2] 問題文(含コード&リンク): インサートソートに関する問題 左からつめる方式の昇順アルゴリズムである次のソートプログラムを、右からつめる 降順に書き直せ。 ソートプログラム kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4422.txt inp1.datというファイルには、20個の2桁の整数が入っているものとする。 [3] 環境 [3.1] OS:Windows XP [3.3] 言語:C言語 [4] 期限:6月28日(木)まで お願いします
356 名前:バケツ mailto:age [2007/06/27(水) 13:50:59 ] [1] 授業単元:C言語演習2 [2] 問題文(含コード&リンク): バケツ法-並び替え(詳細は後述) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ:gcc [3.3] 言語:C [4] 期限: できれば早いほうがいいです。 [5] その他の制限: 特にありません
357 名前:バケツ mailto:age [2007/06/27(水) 13:53:03 ] aka ao kuro これら三つのデータをアルファベット順に並び替える。 この場合、akaの後ろには半角スペースが1つあり、 aoの場合は2つあると考えて並び替える。 1 2 3 4 ao ao aka ao aka aka ao aka kuro kuro kuro kuro 優先順位としては スペース>アルファベットです。
358 名前:バケツ mailto:age [2007/06/27(水) 13:55:07 ] 1は語尾の文字列に焦点を合わせ、 2は前から三番目、3は前から二番目、4は頭文字に焦点を合わせて並び替える。 説明すると、1ではaoはスペース、akaはスペース、kuroはoなので 上記のような順になる。 このようにして最終結果(頭文字の並び替え)がでるまでこの作業を繰り返し、 出力する。 説明不足かもしれませんが、よろしくおねがいします katori nakata murata hanada sakata tanaka を配列の要素として作成してください。 scanfを用いて作成してもらってもかまいません。
359 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 14:00:26 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 次のプログラムをユーザー関数を用いて、階層化せよ。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4423.txt [3] 環境 [3.1] OS:WindowsXP [3.3] 言語:c言語 [4] 期限:6月28日(木) リンク先のプログラムは一つ前の問題を自分で書いたものですが、 コンパイルできることを確認しています。 よろしくお願いします。
360 名前:TKO48 [2007/06/27(水) 14:20:23 ] ゲーミング 今回からあつかう問題は営業時間から翌日の営業時間の間の補充量を 可変とし、補充量決定方法をけんとうする。 もっとも単純な考え方として@営業終了時の最終在庫量A経費の合計 から翌日の初期在庫量(補充量)を決定 ただし、今回は補充発注1回ごと(補充量によらない)に一定の経費を 支払うものとする 発注する経費は以下のとうりである 維持費:1tにつき120円(最終在庫量にたいして) 品切れ損失:1tにつき180円(不足量にたいして) 補充量:1回につき15.000円(補充量によらない) 課題 注文量が正規分布N(100,20^2);すなわち平均100,標準偏差20 の正規分布に従う乱数と仮定し、毎の補充量を入力することで1000日間 の経過を調べる。 (1)補充発注に関して自分の採用した決定方法を述べよ。 (2)そのような補充を行い、初期在庫量、最終在庫量、補 充量、総経費について、1日あたりの平均値を求めよ。なお、第1日の 初期在庫を125tとする。 お願いします。。。(´・ω・`)
361 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 15:03:15 ] >>353 #include <stdio.h> #include <stdlib.h> #include <time.h> int xrand() { double i, x = 0; for (i = 1; i <= 12; i++) x += (double)rand() / RAND_MAX; return 20 * (x - 6) + 100; } int main(void) { double fstock_sum = 0, estock_sum = 0, supply_sum = 0, cost_sum = 0; int i, stock = 125, supply; srand(time(0)); for (i = 0; i < 1000; i++) { fstock_sum += stock; stock -= xrand(); cost_sum += (stock > 0 ? 120 : 180) * abs(stock) + 15000; if (stock < 0) stock = 0; estock_sum += stock; supply = (stock > 200 ? 0 : 200 - stock); supply_sum += supply; stock += supply; } printf("平均初期在庫: %g\n", fstock_sum / 1000); printf("平均最終在庫: %g\n", estock_sum / 1000); printf("平均補充量 : %g\n", supply_sum / 1000); printf("平均総経費 : %g\n", cost_sum / 1000); return 0; }
362 名前:308 mailto:sage [2007/06/27(水) 16:00:14 ] >>341 ありがとうございます。危うく最後の動画のコメントの奴そのままで出しそうでした。
363 名前:デフォルトの名無しさん [2007/06/27(水) 16:05:52 ] >>353 >>361 ありがとうございます!m(__)m 本当に悪いんですが、補充発注を1日置きごとすることは出来ませんか? すいません… 1日目にしたら、次は3日目、次は5日目というふうに
364 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 16:07:05 ] >>360 >>353 と同じ問題だな。 >>353 は(1)について、補充方法を自分で書いている。その場合の解が>>361 ね。 君はどうしたいのかな。それも回答者に決めて欲しいの?
365 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 16:13:15 ] >>363 - int i, stock = 125, supply; + int i, stock = 125, supply, f = 0; ----------------------------------------- estock_sum += stock; + if (!f) { supply = (stock > 200 ? 0 : 200 - stock); supply_sum += supply; stock += supply; + } + f = !f; }
366 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 16:25:30 ] これの戦略を無駄に考えてみたけど、 一切補充しないという、 ずっと品切れ作戦が実装の楽さの割りに結構いい感じという結論が出た。
367 名前:デフォルトの名無しさん [2007/06/27(水) 16:43:31 ] >>365 早速ありがとうございます! 助かりました
368 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 17:03:56 ] >>367 すまん。補充しない日も補充費を計上してたので修正。 >>366 のレスで気づいたw kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4426.txt
369 名前:デフォルトの名無しさん [2007/06/27(水) 17:12:05 ] >>368 ありがとうございます! こちらこそスイマセンでした
370 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 17:12:47 ] さらにすまん。 - cost_sum += 15000; + if (supply > 0) cost_sum += 15000; 吊ってくる。
371 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 17:20:38 ] 二分木を表示するプログラムについて教えてください。 なんらかの木を作ったあと、その木へのポインタを引数にして 木を表示したいと思っています。単純にデータだけを、行きがけ順などで 表示するのではなくぱっと見で木とわかるようなものがいいです。 よろしくお願いいたします。
372 名前:デフォルトの名無しさん [2007/06/27(水) 17:31:29 ] >>370 いえいえ、とんでもないです! 頼んでいるのは私の方なんですから
373 名前:デフォルトの名無しさん [2007/06/27(水) 18:45:07 ] fmod()を使って10進数を2進数に変えたいんです。C++ なかなかうまくいかなくて
374 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 18:58:52 ] >>371 graphviz用の入力ファイル(ただのテキスト)を作るのが楽かも ↓みたいな感じで でも、宿題だとそれじゃ不可かな #include <stdio.h> typedef struct node { char *label; struct node *left, *right; } node; void tprint(node *n) { if (!n) return; if (n->left) printf("%s -> %s;\n", n->label, n->left->label); if (n->right) printf("%s -> %s;\n", n->label, n->right->label); tprint(n->left); tprint(n->right); } int main() { struct node tree[] = { { "a", &tree[1], &tree[2] }, { "b", &tree[3], &tree[4] }, { "c", &tree[5], &tree[6] }, { "d", &tree[7], 0 }, { "e", 0, &tree[8] }, { "f", 0, 0 }, { "g", 0, 0 }, { "h", 0, 0 }, { "i", 0, 0 } }; printf("digraph test {\n"); tprint(&tree[0]); printf("}\n"); }
375 名前:デフォルトの名無しさん [2007/06/27(水) 19:01:31 ] あの・・・ >>354 をお願いできますか?
376 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 19:05:51 ] ヾヽ'::::::::::::::::::::::::::'', / 時 .あ ま ヽ ヾゝ:::::::::::::::::::::::::::::{ | 間 .わ だ | ヽ::r----―‐;:::::| | じ て | ィ:f_、 、_,..,ヽrリ .| ゃ る | L|` "' ' " ´bノ | な よ | ', 、,.. ,イ ヽ い う / _ト, ‐;:- / トr-、_ \ な / , __. ィイ´ |:|: ヽ-- '.: 〃 `i,r-- 、_  ̄ ̄ 〃/ '" !:! |:| :、 . .: 〃 i // ` ヽヾ / / |:| ヾ,、` ´// ヽ !:! '、` ! |:| // ヾ==' ' i i' |:| ', | ...:// l / __ , |:|::.. | とニとヾ_-‐' ∨ i l ' l |< 天 ヾ,-、_: : : .ヽ と二ヽ` ヽ、_::{:! l l ! |' 夂__ -'_,ド ヽ、_}-、_:ヽ
377 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 19:08:37 ] >>373 なんでfmod()使わないといけないの?
378 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 20:04:00 ] >>359 中途半端になってしまった kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4428.txt
379 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 20:07:46 ] >>362 >>308 >>341 の3つめのreturn 0; の前に free(mvt); を忘れとった・・・もう見てへんよな・・・まぁ良いっか・・・ 知〜らねっ ^^;
380 名前:デフォルトの名無しさん [2007/06/27(水) 20:51:20 ] fmod()を使うよう指定されました(泣)
381 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:13:32 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 下記のプログラムで a[3][3] = {{2.4, -3, 6.1}, {-1.1, 2, 3.5}, {0.5, 0, 3.2}} b[3][3] = {{1.9, -4.7, 2.5}, {2, 0.9, 5.4}, {2.7, 0.6, 3.5}} c[3][3] = {{-2, -3.5, 0}, {1.4, 7.3, -1}, {2.1, 0.4, 6.2}} に置き換えたとき、この要素で与えられる行列を求め出力するプログラムを作成せよ。 #include <stdio.h> int main(void) { int i, j, n; double b[3][3] = {{3.2, -1.5, 3.9}, {3.8, 4, -1.8}, {1.9, -3, 0}}; double c[3] = {-5, 2.7, 1.5}; double a[3] = {1, 5.1, 6.2}; n = 3; for (i=0; i<n; i++) { for (j=0; j<n; j++) { a[i] +=b[i][j] * c[j]; } printf("y[%d]=%f\n", i, a[i]); } return 0; } [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland [3.3] 言語: C [4] 期限: 6月30日16:30まで すみません、よろしくお願いします。
382 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 22:50:20 ] >>371 どっかの木構造を解説してるサイトにあったのをパクったやつ typedef struct tagTree{ int no; struct tagTree *left, *right; }Tree; void PrintTree(Bin *root, int depth) { depth++; if (root != NULL) { int i; PrintTree(root->left, depth); for (i = 0; i < depth; i++) printf(" "); printf("%3d\n", root->no); PrintTree(root->right, depth); } } mainで呼ぶときはdepthを0にすればおk
383 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 22:53:56 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): getchar関数を使用し、コマンドラインからの数字を10回入力し、 入力の中でもっとも大きな数字を表示しなさい。 ※入力桁数のエラーについて対処する事 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: CPAD、LSI C-86 Ver 3.30 [3.3] 言語: C [4] 期限: できれば今週中 すみません、どなたか分かる方、よろしくお願いします。
384 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 22:57:07 ] >>383 実行例くらい書いてくれ。
385 名前:382 mailto:sage [2007/06/27(水) 23:00:19 ] >>382 しまった…… typedef struct tagBin{ int no; struct tagBin *left, *right; }Bin; に修正plz
386 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:22:21 ] >>384 すいません。恥ずかしくてのせてませんでした。 初心者のため、おかしい点等をびしびしあげていただければと思います。 #include <stdio.h> #include <stdlib.h> void hikaku(int *pX,int *pY); int main(void){ int x= 0; int y,i,j; char str[100]; printf("数字を入力してください。\n"); for(i=1 ; i < 11; i++){ for(j=0; str[j-1] != '\n'; j++){ str[j] = getchar();} if(j-1 >= 5){ printf("5桁以上は入力桁数エラーです。0にします。\n");} else{y = atoi(str); if(y == 0 && str[0] != '0'){ printf("数字以外は入力できません。0にします。\n");} else {hikaku(&x ,&y);}}} printf("最大値は%dです。\n",x); return 0;} void hikaku(int *pX,int *pY){ if(*pY > *pX){ *pX = *pY;}}
387 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:25:02 ] >>386 それは実行例じゃないだろ
388 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 23:26:12 ] >>386 それができていてなぜ質問したん?w
389 名前:デフォルトの名無しさん [2007/06/28(木) 00:19:51 ] 簡単やん
390 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 00:22:52 ] >>355 をお願いしたいのですが
391 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 00:40:33 ] >>390 while(j>=0 && x[j]>t) { を while(j>=0 && x[j]<t) { に変更するだけじゃ駄目かな? inp1.datとか用意するのだるいからまともに見てないけど
392 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 00:50:17 ] >>387 すいません、実行例とは何でしょうか? >>388 自分でここまでは作ったのですが、最初にアルファベットを打ったときなど 特殊な対応が出来ません。また、全く自信がないためです。
393 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 00:54:23 ] 今、コンパイルが出来ない環境なので確認できないのですが、いまいち右からつめる 降順の解釈の仕方がわからないんです。 左を右に、昇順を降順にしなくてはいけないので、while(j>=0 && x[j]<t) {の変更 だけでは出来ないと思うのですが。
394 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 00:56:53 ] >>392 実行例は例えばこのプログラムを実行するとこういう出力になって欲しいんですよ、的な内容。 入力に関しては、一回charに入れた時点で数字かどうか判定すれば? どの程度のレベルかわからんが、学校授業で4月開始なら上等なレベルかと。
395 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:00:55 ] >>392 こんなのはどうかな。 #include <stdio.h> #include <ctype.h> int main(void) { int c, max = -1, m, n, nc = 0, f, sign = 1; while ((c = getchar()) != EOF) { if (isdigit(c)) { n = f = 0; do { if ((m = n * 10 + c - '0') < n) f = 1; n = m; } while ((c = getchar()) != EOF && isdigit(c)); ungetc(c, stdin); if (f) puts("桁あふれしますた"); else { n *= sign; printf("%d\n", n); if (n > max) max = n; if (++nc == 10) break; } } else if (c == '-') { sign = -1; } else sign = 1; } if (max != -1) printf("最大値: %d\n", max); return 0; }
396 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:10:04 ] >>393 ああ、右からつめるってそういうことか 単に降順にすればいいだけかと思ってた めんどくさいからパス。せめてdatファイルがあればなぁ
397 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:16:17 ] datファイルでなくても、テキストファイルに整数を入れてinp.txtとしても大丈夫だと思うのですが。
398 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:18:19 ] >>392 ありがとうございます。 10回数字を入力して(ただし、アルファベット、空欄など数字でないやつははじく。また、小数点にも対応する) 桁数は自分で設定し(私のやつは適当に5桁)、最大値を出力する。 >>入力に関しては、一回charに入れた時点で数字かどうか判定すれば? ずばり、バッファリングの理解が甘く、そこのプログラムが打てず悩んでいます。 分かる方、どうかやり方をご教授願います。 >>392 すいません。書き忘れてしまったのですが、入力の終了はEOFではなく改行でといわれています。
399 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:19:44 ] >>398 アンカーのつけかたを覚えなさい。全部自分へのレスになってるよ
400 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:21:49 ] >>398 全て自分に安価する君に惚れたwww atoi関数に渡す前に if ( '0' <= str[ j ] && str[ j ] <= '9' ) { とかでいいんじゃない? ソースあんま読んでないから、的外れだったらスマソ。
401 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:22:13 ] >>397 それを用意するのがだるいんだ まぁやる気が無いだけなんだけどさ
402 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:22:23 ] >>399 あせってコピペしてしまいました。大変申し訳ありませんでした。
403 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:23:45 ] >>378 元のプログラムをあまり書き換えないでお願い出来ますか。 注文ばかりですいません。
404 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:28:23 ] >>400 atoiの前にif ( '0' <= str[ j ] && str[ j ] <= '9' ) { ?????? すいません意味が分かりません。どういうプログラムになるのでしょうか?
405 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:29:31 ] >>401 無理を言って申し訳ありません。 では、左からつめるを右からに書き換えるにはどうすればいいでしょうか。
406 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:39:11 ] >>405 左端が0 右端がn-1 今はj=0とかi=1からだんだん加算されていってn-1までループしているのを n-1から減算していって0までループさせればいい
407 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:47:17 ] >>355 >>405 for(i=n-2;i>=0;i--) { t=x[i]; j=i+1; while(j<=n-1 && x[j]>t) { x[j-1]=x[j]; j++; } x[j-1]=t; } てきとー まさかどこと差し替えればいいかなんか聞くなよ?
408 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:49:57 ] ttp://www.infonet.co.jp/ueyama/ip/glossary/ebcdic.html EBCDICでも0〜9は連続したコードに登録されているからおkだお ^ω^
409 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 01:59:50 ] >>404 ちょっと無理矢理だけど例えば、str[j] = getchar();に下に次の1文を入れてみる。 if ( (str[j] < '0' || '9' < str[j]) && str[j] != '\n' ) j--; 今回getchar関数によって入力された文字が数字じゃなければ、読み込まなかったことにする。 ただ、改行コードもはじかれちゃうのでそれはOKにしておく。 極力、今のソースに手を加えないで変更しようとしたらこんなのになってゴメン・・・orz
410 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 02:01:29 ] >>406 >>407 ありがとうございます。参考にさせていただきます。 もうひとつ>>359 についてお願いできますか? >>378 さんが答えて下さっているのですが、元のプログラムの値をあまり 書き換えないで欲しいのですが。
411 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 06:01:56 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4430.txt [3] 環境 [3.1] OS:WindowsXP [3.3] 言語:c言語 [4] 期限:6月30日(木)
412 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 08:34:40 ] >411 (1) #include <stdio.h> #include <stdlib.h> void putchar_n(char c1, char c2, int num){ if(num <= 0){ return; } putchar(c1); putchar_n(c1,c2,num-1); putchar(c2); } int main(int argc, char* argv[]){ if(argc != 4){ return 1; } putchar_n(argv[1][0],argv[2][0],atoi(argv[3])); printf("\n"); return 0; }
413 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 08:44:04 ] >>411 (2) #include <stdio.h> int main(){ int i = 0; for(i = 0 ; i+31 < 126+1 ; i++){ printf("%c %d %o %x\n",i+31,i+31,i+31,i+31); if(i%8 == 7){ printf("--------------------\n"); } } return 0; }
414 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:10:46 ] >>409 ありがとうございます。 ただやってみたのですが、例えば「fsa256」や「256faj」などを入れるとそれも256として 反映されてしまいます。 何とかはじく方法があればと思うのですが・・・。
415 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:14:22 ] >>410 ですが、>>378 さんの書いてくださったプログラムをコンパイルしてみたところ、 35以上でかつ95未満の要素の数の処理は出来たのですが、countの要素の合計の処理が 0となり、うまく処理出来ませんでした。
416 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:39:07 ] getcharじゃなきゃだめなの?
417 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:46:53 ] まあそれはいいとして atoi使わずに www.bohyoh.com/CandCPP/C/Library/strtol.html 使えば済む話だと思う
418 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:55:29 ] >>415 main()だけ修正 int main(void) { int i, *x, n, size, count[11] = { 0 }, sum; setp(&x, array(&size)); for (set(&i,0); less(i,size); inc(&i)) { set(&n,div(at(x,i),10)); if (less(10,n)) set(&n,10); inc(&count[n]); } for (set(&i,0); less(i,10); inc(&i)) printf("%3d台: %d\n", mul(i,10), at(count,i)); set(&sum,0); for (set(&i,0); less(i,11); inc(&i)) set(&sum,pls(sum,at(count,i))); printf("countの要素の合計は%d\n",sum); if (eq(sum,size)) printf("総和は正しいです\n"); else printf("総和が違います\n"); for (set(&n,0),set(&i,0); less(i,size); inc(&i)) if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n); printf("35以上でかつ95未満の要素の数は%d\n", n); return 0; }
419 名前:418 mailto:sage [2007/06/28(木) 10:57:07 ] すまん、化けたか? int main(void) { int i, *x, n, size, count[11] = { 0 }, sum; setp(&x, array(&size)); for (set(&i,0); less(i,size); inc(&i)) { set(&n,div(at(x,i),10)); if (less(10,n)) set(&n,10); inc(&count[n]); } for (set(&i,0); less(i,10); inc(&i)) printf("%3d台: %d\n", mul(i,10), at(count,i)); set(&sum,0); for (set(&i,0); less(i,11); inc(&i)) set(&sum,pls(sum,at(count,i))); printf("countの要素の合計は%d\n",sum); if (eq(sum,size)) printf("総和は正しいです\n"); else printf("総和が違います\n"); for (set(&n,0),set(&i,0); less(i,size); inc(&i)) if (and(less(34,at(x,i)),less(at(x,i),95))) inc(&n); printf("35以上でかつ95未満の要素の数は%d\n", n); return 0; }
420 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 11:02:03 ] >>414 後から細々と注文をつけるんなら、「正しい入力」を正確に定義汁。 最初に正確に仕様を述べないから、>>1 で言う >・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。 の状況に結果的にはなっている。 正規表現で言うと、 ^-?[0-9]{0,5}$ 以外はエラーと思っていいのかな。 負値はどうする?マイナスの場合の桁数の処理は?スペースも許さない? 00004 は正常?
421 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 11:30:41 ] -0や00や-000はどうか?という問題もある。 ^(0|[1-9][0-9]{0,4}|-[1-9][0-9]{0,3})$ こうか?
422 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 12:01:40 ] >>374 >>382 早速のレスありがとうございます。ためしにやってみたのですが、うまくいきませんでした。 できれば、 1 /\ / \ 2 3 /\ /\ 4 5 6 7 このように表示できたらいいです。表示するデータは3桁の整数です。 おねがいいたします。
423 名前:デフォルトの名無しさん [2007/06/28(木) 12:36:11 ] [1] 授業単元:プロC [2] 問題文(含コード&リンク): コマンドライン引数から十進整数値として解釈できる文字列のみを選び、 値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。 ただし、十進整数値として解釈できる文字列とは、正規表現 ^[-+]?[0-9]+$ に マッチするものとする。 ヒント:小さい順に並べ替えるには、 qsort()が便利です。 こちらも、使い方は、manコマンドで調べることができます。 コマンドライン引数すべてについて、 含まれるアルファベットすべてを対応する大文字に置き換えて、 一行にコマンドライン引数一つずつ標準出力に出力するプログラム。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4431.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4432.c [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:今週中 [5] その他の制限: 特になしです どうかよろしくお願いします。
424 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 12:44:31 ] >>419 さん、>>378 さんのプログラムと変更が無いようなのですが。 コンパイルしても変わりませんでした。
425 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 12:48:03 ] >>423 #include <stdio.h> int main(int argc, char **argv) { FILE *fp = popen("egrep '^[-+]?[0-9]+$' | sort -n", "w"); while (*++argv) fprintf(fp, "%s\n", *argv); pclose(fp); return 0; }
426 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 12:50:09 ] >>424 もう一度確認してみろ。
427 名前:デフォルトの名無しさん [2007/06/28(木) 13:53:21 ] [1]単元:プログラミング技術 [2]問題文:ローダーのNo.4433にアップしました。 [3]環境 OS:リナックス コンパイラ:cc 言語:C [4]期限:できれば本日14時30分ごろまでにお願いします。 どうぞよろしくお願いします。
428 名前:デフォルトの名無しさん [2007/06/28(木) 13:54:15 ] 授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:文字配列の操作 問題1 文字型の配列変数mojiに設定されている文字数を答えなさい char moji[] = "ABCDEFG"; 実行画面 文字数:7
429 名前:デフォルトの名無しさん [2007/06/28(木) 13:55:39 ] 授業単元:C言語 環境:if文・for文・while文・do〜while文・switch〜case文・ OS:Windows コンパイラ名とバージョン:borland 言語:C テーマ:文字配列の操作 問題1 文字列を入力して偶数番目の要素数と奇数番目の要素を別の配列に格納し、文字列として表示しなさい 実行画面 文字列入力==>ABC123def 偶数要素:AC2df 奇数要素:B13e
430 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 14:40:31 ] >>427 #include <stdio.h> #include <string.h> void search(char *s1, char *s2) { int i; char *p = s1; while((p = strstr(p, s2)) != NULL){ *p++ = '#'; for(i = 0; i < strlen(s1) - 1; i++) *(p + i) = *(p + i + strlen(s2) - 1); } } int main(void) { char text[1024], word[1024]; printf("Please input text : "); gets(text); printf("text = %s\n", text); printf("Please input search word : "); gets(word); search(text, word); printf("text = %s\n", text); return 0; }
431 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 14:44:40 ] このスレでgets()使うと袋叩きにあうよ。