1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)] あなたが解けない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++の宿題を片付けます 116代目 pc11.2ch.net/test/read.cgi/tech/1222813731/
357 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:55:20 ] >>356 使っても大丈夫です。
358 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:02:23 ] >>241 問題文とか一部だけ見せられてもね・・・・
359 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:47:47 ] 自分の才能の無さに絶望した。 >>354 恥ずかしすぎるので実行ファイルのみ(DXライブラリ) ttp://www.dotup.org/uploda/www.dotup.org18202.zip.html
360 名前:デフォルトの名無しさん [2008/11/07(金) 12:59:19 ] [1] 授業単元: プログラミング [2] 問題文 神経衰弱の作成 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio [3.3] 言語: C [5] その他の制限:行と列を入力し表にする、
361 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:08:15 ] >>349 動作確認できました。 ありがとうございます<(_ _)>
362 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:09:35 ] 例えば一回出した乱数をaに入れて固定するのはどうしたらいい? 言語はc++です
363 名前:デフォルトの名無しさん [2008/11/07(金) 14:17:19 ] [1] 授業単元: プログラミング [2] 問題文 # 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0〜9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ. kawasaki@orange ~/lectures/2008/C/5$ ./a.exe a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0) b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6) The value of the inner product of the two vectors = 182 kawasaki@orange ~/lectures/2008/C/5$ ./a.exe a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8) b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0) The value of the inner product of the two vectors = 173 kawasaki@orange ~/lectures/2008/C/5$ ./a.exe a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1) b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8) The value of the inner product of the two vectors = 321 kawasaki@orange ~/lectures/2008/C/5$ # 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0〜9の整数乱数をつくる. [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [5] お願いします・・・できれば1時間以内に・・・
364 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:24:44 ] >>362 変数に代入すれば?
365 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:30:18 ] >>363 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a[10], b[10], i, sum = 0; srand((unsigned int)time(NULL)); for (i = 0; i < 10; ++i) { a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX)); b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX)); } printf("a = ("); for (i = 0; i < 9; ++i) { printf("%d, ", a[i]); } printf("%d)\n", a[i]); printf("b = ("); for (i = 0; i < 9; ++i) { printf("%d, ", b[i]); sum += a[i] * b[i]; } printf("%d)\n", b[i]); sum += a[i] * b[i]; printf("The value of the inner product of the two vectors = %d", sum); return 0; }
366 名前:デフォルトの名無しさん [2008/11/07(金) 14:33:59 ] [1] 授業単元: プログラミング [2] 問題文 神経衰弱の作成 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio [3.3] 言語: C [5] その他の制限:行と列を入力し表にする、 できれば夕方あたりまでにおねがいします><
367 名前:デフォルトの名無しさん [2008/11/07(金) 14:39:12 ] >>365 ありがとうございます!
368 名前:デフォルトの名無しさん [2008/11/07(金) 14:57:06 ] >>365 のはarrayを使うとどういった形になりますか?
369 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:08:25 ] [1] 授業単元: C,C++、データ圧縮LZ78符合 [2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。 データ列:ABCBCBCDEBCDABCD コンソールアプリケーションで作成すること。 画面には最低限以下のものを出力すること。 【1】与えたデータ列 【2】作成した辞書の一覧 【3】符号化したデータ列 [3] 環境 [3.1] OS: WindousXP [3.2] コンパイラ名とバージョン: VisualStudio2005 [3.3] 言語: C,C++どちらでも可 [4] 期限:2008年11月13日まで [5] その他の制限: 標準ライブラリ可
370 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:56:14 ] >>354 struct 座標 { int x, y; }; struct 移動 { 座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する 移動 *next; // 次の移動先へのポインタ }; こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ? 見当違いな事言っていたらごめんね。
371 名前:241 mailto:sage [2008/11/07(金) 17:47:36 ] >>358 すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。 課題1 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7957.zip 課題2 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7958.zip 課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、 課題2がシナプスの結合の重みを決定するものです。 説明と資料の不足どうもすみませんでした…。 他にも情報、説明が足りない所があればお伝え下さい。 あと追記ですが、提出期限が11月9日→11月10日に変更になりました。
372 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:34 ] >>371 これって正解?それとも自力で解いたやつ? >weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/ >weight[j][i]=weight[i][j]; 課題2回答.txtのこの部分、おかしい気がするんだけど。
373 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:18:00 ] >>371 課題2からしてコンパイルどころかインデントのチェックすら通らんな 例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、 全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ
374 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:37:50 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7959.c ↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を 次のように改造せよ。 ・月のカレンダーではなく一年分のカレンダーを表示させる。 ・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。 というのと、 フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。 ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで プログラムを三つ書く。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限: 2008年11月10日まで [5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて 作成したものです。 2つになってしまいましたがどうかよろしくお願いします。
375 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:48:53 ] >>366 一応クリアはできた ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7960.c
376 名前:241 mailto:sage [2008/11/07(金) 18:51:32 ] >>372 >>373 もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、 違う所にここまでの講義内容のpdf全部上げときます。(第2回〜第5回迄) www1.axfc.net/uploader/He/so/155985.zip DLパスは「123」です。馬鹿学校ですいません…。
377 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:57:20 ] >>376 上げてもらった資料まだ目を通してないけど とりあえず対角成分だけ別に設定できるようにしてやってみた 例題と同じ値を入れてみても経過が一致しないww kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7961.txt
378 名前:377 mailto:sage [2008/11/07(金) 18:58:37 ] 例題と同じ値で試してみたい場合は最初のforループ(乱数でpattern生成するところ)を ざっくりコメントアウトすればいい
379 名前:デフォルトの名無しさん [2008/11/07(金) 19:11:46 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。 対角要素に0に近い要素があっても、正しく求められるように工夫せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限: なし お願いします!
380 名前:372 mailto:sage [2008/11/07(金) 20:23:47 ] >>377 俺はお手上げだ。 それ、初期化忘れと、対角成分ってところに代入するのは0じゃね? ってことでこれ。変更箇所に目印を付けてみた。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7962.txt
381 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:37:04 ] >>380 対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。 weight は全要素に値が入るんだから初期化不要では? あと、pattern2 の初期値だが、ランダムに「反転する」ならば if(randv > 0.75) pattern2[i] = -pattern1[i]; else pattern2[i] = pattern1[i] みたいな感じにすれば、この場合 25% の確率で反転する。
382 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:24:20 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい -変数はすべてdouble型を用いること -円周率p=3.14159265358979として計算 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
383 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:38:25 ] >>382 ほんとに問題それであってる? #include <stdio.h> main() { double p = 3.14159265358979, r, h; printf("半径: "); scanf("%lf", &r); printf("高さ: "); scanf("%lf", &h); printf("体積: %f\n", p*r*r*h); }
384 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:46:30 ] >>383 問題文はこれだけなので合っているのですが、どうかされましたか?
385 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:49:00 ] 公式と最低限の入出力関数さえ知ってれば何の苦労もなさそうだから 宿題とする価値がないというか何と言うか…
386 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:54:53 ] >>385 そうなんですか。 一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。 そんな問題が解らないって本当に自分やばいですね。 何はともあれ、宿題をやって下さって有難う御座いました。 本当に助かりました。
387 名前:デフォルトの名無しさん [2008/11/07(金) 23:06:11 ] [1] 授業単元:Linuxプログラミング [2] 問題文(含コード&リンク): 途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか がおかしいと思うのですが、見て下さい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7966.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7964.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7965.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.1.2 [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限: やろうとしていること: 実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt exitを入力するまで繰り返し何度でもコマンドを実行出来る。 質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。 質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ 抜けられなくなってしまいました。 質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。 argv[i]に格納した文字列が途中で切れてしまっているように思われます。 質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。 質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる 場合は教えて下さい。以上、長くなりましたが宜しくお願いします。
388 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:16:10 ] >>386 悪いが383≠385だ。
389 名前:372 mailto:sage [2008/11/07(金) 23:18:14 ] >>381 すまん、恥ずかしさを胸に吊ってくる
390 名前:377 mailto:sage [2008/11/07(金) 23:30:28 ] >>376 資料に目を通した。 >>389 よくみると重み付き総和の計算で j≠i と小さくw書かれてたから w[i][i] = 0 が正解だわ あと資料にいろいろ小出しにされたヒントを全部反映させといた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7967.c >>377 は毎回全部のニューロンをもれなく更新してたたために2ステップで ほとんど収束してたけど、ランダムに更新するニューロンを選択する部分作ったら 収束がほどよい感じになった。 NUM_OF_NEURON がニューロン数 NUM_OF_ERRORS を増やすと初期値の乱れ具合が増す。 ほどほどにしないと収束しなくなるw 結構おもしろかったわ
391 名前:377 mailto:sage [2008/11/07(金) 23:41:34 ] 何度もすまね、1か所間違いみっけた if (tmp[i] > 0) printf("■"); else printf("□"); /* neuron_state を tmp にコピーしてから使う */ tmp[i] = neuron_state[i]; これは、printf する前に、for のすぐあとに書かないと表示が狂う for(i = 0; i < NUM_OF_NEURON; i++) { /* neuron_state を tmp にコピーしてから使う */ tmp[i] = neuron_state[i]; if (tmp[i] > 0) printf("■"); else printf("□");
392 名前:383 mailto:sage [2008/11/07(金) 23:56:36 ] >>386 むかし専門学校で講師やってたんだが、scanf 教えたその日に出して 授業中に作らせた課題で、宿題にすらなってなかったんで確認してみた
393 名前:241 mailto:sage [2008/11/08(土) 00:09:19 ] >>390 動作確認しました!ありがとうございました! 絶望してた課題だったので凄いうれしいです;; 多レスでご迷惑お掛けしてすいませんでした><
394 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:52:00 ] >>387 初回の fork の前後で cmd->args[0] の内容が違って見えるね cmd->args[i] の領域って、自分で malloc してないで、strtok() に任せてるでしょ 自分で malloc した領域をつかって strtok_r 使ってみたら?
395 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:14:04 ] >>354 とりあえず、出題の動きをするものを作った どことなく危険な香りのするプログラムになった www.dotup.org/uploda/www.dotup.org18927.zip.html 出題者の意図がまったくわからないので かなりの手抜きプログラムになっている おそらく出題者の意図とはかけ離れたものであろう気がする というか、何のシステムのないところにいきなりこれをやれって無理があるような 最初にめんどくさい思いをさせて「こうすると楽だよ」的な流れなのか 何か前説があってそれを踏まえた上でやるべき課題なのか・・・・
396 名前:394 mailto:sage [2008/11/08(土) 02:25:45 ] >>387 あー、違うところかもしれん 原因はそこじゃなくて、gets() やってるところだと思う simple_accept_input() のローカル変数 str[] に取り込んでるでしょ strtok(str, " ") とやっているわけだから strtok によって得られるポインタは、 このローカル変数 str[] を参照する。 ローカル変数の寿命はその関数を抜けるまで。 実際 str[] はスタック領域に作られるわけだから、後に関数が実行されたときに 破壊される可能性大。 今回はそれがたまたま fork() 実行時に重なっただけで、fork() 自体によって データロストしてたわけではなさそう(そもそも fork は全データコピーだしね) 普通、ポインタでいろんなとこから参照されるデータを、特定の関数のローカル変数にしまってはいけない。 gets したデータは、main のローカル変数なりグローバル変数なり malloc するなりして不揮発にしておかないと
397 名前:394 mailto:sage [2008/11/08(土) 02:41:38 ] >>387 てなわけで、simple_accept_input() の char str[256] をグローバルにしただけで動くようになった。 (1) str[] をグローバルにすれば解決 (2) 同上 (3) 同上 (4) execvp() の直後に exit(-1); とかやって子プロセスを終了させないと fork_cmd() から返って gets(str) はじめてループになるぞ (5) シグナルで何やりたいかわからんが、signal システムコールでこの関数と シグナル関連付ければ、シグナル発生したときにこの関数に飛んでくる
398 名前:387 mailto:sage [2008/11/08(土) 03:11:24 ] >>397 ありがとうございました。char str[256]とchar *strpをmain関数の前で宣言するようにしました。 初回からきちんと動作するようになりました。それから、子プロセス側ではexecvp後にexit(-1)を 入れるようにしました。(1)、(2)が解決しました。 しかし、これで(3)と(4)も直るはずでしょうか?私の環境ではまだ直りません。。具体的な症状は以下の通りです。 (3)引数の数が前回より減った場合におかしくなる (一回目)test> ls -l -a -s /tmp/temp.txt ---OK (二回目)test> ls -l -a /tmp/temp.txt ---NG ls: p/temp.txt: ファイルかディレクトリが存在しません ※ちなみに引数の数が前回より増える場合は問題ないです。 (一回目)test> ls -l -a /tmp/temp.txt ---OK (二回目)test> ls -l -a -s /tmp/temp.txt ---OK まだどこか修正する箇所がありますでしょうか? (4)存在しないコマンド実行時、コンソールから実行したのと同じようにエラーを表示することは出来ないでしょうか? 例)test> jfodajfoeifji -l -a -l /tmp/temp.txt -bash: jfodajfoeifji: コマンドが見つかりません (5)そうですよね、これだけじゃ何がしたいか不明ですよね。。こちらは、無視して頂いて結構です。
399 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:36:41 ] >>398 (3) 原因は、cmd->args[i] の最後の要素に NULL が入っていないこと 。 simple_accept_cmd() 内で if(strp != NULL){ cmd_a->args[i] = strp; cmd_a->num_args++; } とやって cmd_a->args[i] には NULL が入らないようになってるけど、 cmd_a->args[i] = strp; if(strp != NULL){ cmd_a->num_args++; } と順序変えてやればおk (5) コマンドの status を見てやればエラー処理できるでしょ エラーの詳細知りたかったら、子プロセスでないとわからないから execvp(cmd->args[0], cmd->args); printf("Command error:%s\n", strerror(errno)); とでもすれば、strerror で得られる原因が表示される。ファイルが見つからない場合だけ 対処したいんだったら、execvp 直後の errno の値で場合分けを行う。
400 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:45:19 ] >>395 業務系じゃありえない魔術過ぎてワロタ これがゲームプログラムって奴なのか いくらなんでもお行儀が悪すぎだろう
401 名前:387 mailto:sage [2008/11/08(土) 03:52:59 ] >>399 解決しました!ありがとうございました。
402 名前:デフォルトの名無しさん [2008/11/08(土) 04:09:43 ] [1] 授業単元:ポインタ [2] 問題文(含コード&リンク): 検索対象文字列と検索文字列を入力して、発見位置と個数を出力する。 ※検索対象文字列は50文字を超えないものとする ※標準ライブラリのstrstr関数を利用すること ※実行例のような出力が得られるようにすること <実行例> 検索対象文字列→AAAAAAAAAAA 検索文字列→AAA 検索結果 AAAAAAAAAAA ********* 9個発見しました [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Borland C++ Compiler 5.5 [3.3] C [4] 期限:明日 [5] その他の制限:なし ポインタ難しいです・・・この時間までやってましたができませんでした。 どなたかよろしくおねがいします!!
403 名前:デフォルトの名無しさん [2008/11/08(土) 04:13:21 ] 質問なのですが、ここでは問題文が英語の宿題もやって頂けますか?
404 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:23:06 ] >>403 何度かそういうのあったよ。
405 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:29:47 ] >>402 #include <stdio.h> #include <string.h> int main() { char str[100], needle[50], *p; int i = 0; printf("検索対象文字列を入力:"); scanf("%s", str); printf("検索文字列を入力:"); scanf("%s", needle); printf("検索対象文字列→%s\n", str); printf("検索文字列→%s\n", needle); printf("検索結果\n%s\n", str); p = str; while(strstr(p, needle) != NULL){ if(p == strstr(p, needle)){ i++; printf("*"); } else printf(" "); p++; } printf("\n%d個発見しました\n", i); return 0; }
406 名前:デフォルトの名無しさん [2008/11/08(土) 04:30:45 ] >>403 そうなんですか。それでは英語の問題文のまま載せても大丈夫ですか? それとも和訳したほうが良いですか? あまり自分の英語力に自信ないんで変な和訳になってしまったらと思ってるのですが。
407 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:42:37 ] 構わん、載せろ。 多分俺はできないが。
408 名前:デフォルトの名無しさん [2008/11/08(土) 05:24:42 ] >>407 ありがとうございます。それでは載せさせて頂きます。 [1] 授業単元:C++ [2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7970.txt [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: Visualstudio 2005 [3.3] 言語:C++ [4] 期限:2008年11月10日 [5] xtxの中の図は自分が作って物です。図を載せようとしたのですが載せれなかったので。 わかりにくくてすいません。 英語の問題文ですがよろしくお願いします。
409 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 05:39:34 ] >>408 単なる C のプログラムになっちまったが kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7971.txt
410 名前:409 mailto:sage [2008/11/08(土) 05:41:20 ] ぐは 偶数奇数判定逆だった if(*in_val % 2 == 0) ↓ if(*in_val % 2 != 0)
411 名前:デフォルトの名無しさん [2008/11/08(土) 05:57:20 ] >>408 本当に助かりました。ありがとうございました。
412 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 06:00:05 ] うまいこと図を書くなあ。 ただのCだから今までの授業で習ったものと毛色が随分と異なる場合はばれちゃうね。
413 名前:デフォルトの名無しさん [2008/11/08(土) 07:18:54 ] >>412 図が文字化けしてましたね。すいません。 やはりCとC++とではだいぶ異なるんですか? 最近授業でプログラミング始めたばかりなんでわからないことだらけで。
414 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:41:14 ] すみません。ポインタが苦手なC初心者です。教えて下さい。パイプ相当の機能を つくろうとしているのですが、まずは前段として以下のようなものをつくりたいです。 例えば「./a.out "cat -n test.c" "grep a"」 と引数を与えてプログラムを実行すると、 str1[0]=cat, str1[1]=-n, str1[2]=test.c, str1[3]=NULL, str2[0]=grep, str2[1]=a, str2[2]=NULL, のように格納させたいです。つまり、argv[1]の内容とargv[2]の内容をそれぞれstrtokで空白で 区切って格納させていき、最後にNULLを入れる。思うように出来ません。宜しくお願いします。
415 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:54:07 ] >>413 図はエンコード指定すればだいじょうぶ。 今までの授業で教えてもらったソースコードと雰囲気が似てるならいいよ。 授業でcinとかcoutとか使わなかった?
416 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:55:18 ] >>414 pipe や popen 使わずにどうやってパイプ相当の機能を作るのかわからないけど kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7972.txt
417 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:11:34 ] シェル使えば標準入力に入ってくるからいいんじゃないの
418 名前:414 mailto:sage [2008/11/08(土) 08:11:58 ] >>416 有り難うございます。popenはわからないのですがpipeを使ってやってみようと思います。 ひょっとして全然とんちんかんなことやっているのかも知れませんがもう少しやってみて 駄目だったらまたご質問させて頂きます。
419 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:12:49 ] ってパイプ自体を作ろうとしてるんじゃないよね。 foo | ./a.out ってやりたいだけだよね
420 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:17:00 ] 作ってみた。でおじゃる、とは言わない(というと出てくるかしら) #include <stdio.h> #include <string.h> int main(int argc, char **argv) { char *str1[10]; char *str2[10]; char **p; p = str1; *(p++) = strtok(argv[1], " "); while ((*(p++) = strtok(NULL, " ")) != NULL); for (p=str1; *p!=NULL; p++) { printf("%s\n", *p); } return 0; } インデント確認用アンカー >>420
421 名前:414 mailto:sage [2008/11/08(土) 08:19:53 ] >>417 >>419 パイプ自体を作ろうとしています。シェルだとcat -n test.c | more と打つところを、./a.out "cat -n test.c" "more"と打たせることで、 forkした親子プロセスでファイルディスクリプタなんちゃらというのを 使って(すみません勉強したてです)処理を渡すようなCプログラムを作ろうとしています。 自分の限界は恐らく1時間前後で見えてくると思いますのでしばしお待ち下さい。
422 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:22:39 ] アラヤダ。 そっか。がんばってねー。 またなんかあると聞くといい、、、けど宿題スレはちょと違うかもだ
423 名前:414 mailto:sage [2008/11/08(土) 08:38:11 ] 出来ました!思ったより随分あっけなく。。というか、ウェブでみっけたソースがほとんど そのまま流用出来たので。皆様、有り難うございました。 >>422 すみません。宿題は宿題なのですが、初心者なのに毎週難易度がぐんと上がるので、ある程度は 自分でやってみないと次から全くわからなくなってしまうので。。わからないところだけ小出しに 質問させて頂きました。スレに反していたら申し訳ないです。 あ、でも匿名パイプの次の宿題は名前付きパイプなのですが、こちらはちょっと読んだところ手も足も 出なそうなので、丸投げさせて頂くと思います。またちょっとしたら投稿します。ぐだぐだすみません。
424 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:49:57 ] 名前付きパイプはファイルの読み書きと変わらないからむしろ簡単かも
425 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:51:24 ] >>423 の、「でも匿名パイプの次の宿題は名前付きパイプなのです」 から察するに、pipeを使って2つのプロセスを繋げろという課題、 次の課題はsocketを使ってAF_UNIXのパイプを作って〃とみた。
426 名前:デフォルトの名無しさん [2008/11/08(土) 10:45:59 ] vectorで自分で作ったクラスをタイプとして持たせるにはどうすればいいんですか? たとえばABCとDEFという二つのクラスがあるとします。 DEFというクラスがABCから作られたオブジェクトを無制限に持つようにしたいんです。 この際にDEFのメンバやコンストラクターはどんな感じに作ればいいのでしょうか?
427 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:02:34 ] class DEF { std::vector<ABC> abc; }; メンバとして持たせたいなら、これだけじゃないの?
428 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 11:15:46 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ニュートン法を利用して入力データの平方根を求めるプログラムを作りなさい. -解を求めたい実数aを入力 -解を求めるための初期値x0を入力 ・なんでもよいが普通はaの平方根に近い値を入力 -ニュートン法を用いた計算 ・x1=(x0+a/x0)*0.5を計算 ・x1-x0の絶対値がe以下ならばx1が求める平方根 - eは収束判定に用いる値でここでは1.0E-10を使用する -差が-eからeの範囲に入れば繰り返し終了 -入らなければx1をx0に代入して再度繰り返してx1の計算 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
429 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 11:21:54 ] >>428 のプログラムの実行例 平方根を求めたい数を入力してください: 5.0 ↓ 解を求めるための初期値を入力してください: 2.0 ↓ 5.000000 の平方根は 2.236068 です. 平方根を求めたい数を入力してください: 123.456 ↓ 解を求めるための初期値を入力してください: 10.0 ↓ 123.456000 の平方根は 11.111076 です.
430 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:36:00 ] >>428 そこまで計算式や判定法が分かってるなら、すぐに解けそうなものだけど。。。 #include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { static const double e = 1.0e-10; double x0, x1, a; printf("平方根を求めたい数を入力してください: "); scanf("%lf", &a); printf("解を求めるための初期値を入力してください: "); scanf("%lf", &x0); x1 = (x0 + a/x0)*0.5; while (fabs(x1-x0) > e) { x0 = x1; x1 = (x0 + a/x0)*0.5; } printf("%f の平方根は %f です\n", a, x1); return 0; }
431 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 12:01:33 ] >>430 本当に有難う御座いました。 大変助かりました。
432 名前:354 ◆zeyvxEAaZQ [2008/11/08(土) 15:07:01 ] >>359 >>370 >>395 ありがとうございました! >>370 さんのやり方も試してみます。 >>395 さん 「こうすると楽だよ」的な流れだと思います。他にもやりたい事はあるのですが、teki.hとel.hいうファイルが何なのかよくわかりません。消しても平気でしょうか?
433 名前:354 ◆zeyvxEAaZQ mailto:sage [2008/11/08(土) 15:07:43 ] すみません、sage忘れました。
434 名前:414 mailto:sage [2008/11/08(土) 16:17:14 ] 名前付きパイプの方も自力で一応出来ました!ありがとうございました。 >>425 今週の宿題は完了しました。次回はメッセージキューと共有メモリみたいです。 次次回がソケット関連みたいでした。また困ったら投稿させて頂きます。 疲れた。。寝ます。
435 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:02:52 ] [1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): キーボードから自分の学生番号を半角小文字整数で、氏名を半 角小文字のローマ字で、身長(cm)を実数で、体重(kg)を実数で入力し、 学生番号と氏名・身長・体重・身長(cm)+体重(kg)を表 示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:XP [3.2] VC 6.0等 [3.3] 言語: C [4] 期限: ([2008年mm月11日11まで [5] その他の制限:やってまもないです 少しやってみたんですがここで詰まっています #include<stdio.h> void main(void) { int x,y; printf("学生番号を半角小文字整数で入力;\t"); scanf("%d",&x); printf("10進数表示 ; DEC(x)=%d\n",x); printf("氏名を入力する;\t"); }
436 名前:435 mailto:sage [2008/11/08(土) 17:04:02 ] 訂正 11月11日までです
437 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:11:44 ] >>435 #include<stdio.h> int main(void) { int x; char s[1000]; double h, w; printf("学生番号を半角小文字整数で入力;\t"); scanf("%d",&x); printf("氏名を入力する;\t"); scanf("%s", s); printf("身長を入力する;\t"); scanf("%lf", &h); printf("体重を入力する;\t"); scanf("%lf", &w); printf("学生番号: %d\n", x); printf("氏名: %s\n", s); printf("身長: %f\n", h); printf("体重: %f\n", w); printf("身長 + 体重: %f\n", h + w); return 0; }
438 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:32:54 ] >>435 せめてBMI判定くらいはしてやれwwww
439 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:58:46 ] >>435 単位の違うものを足すの?
440 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:31:03 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7973.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/10 [5] その他の制限:おそらく実行例の関数にさえ対応していれば大丈夫だと思います よく分からない問題だと思いますがよろしくお願いします
441 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 21:58:45 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 文字列str1の中身が半角から全角に切り替わる箇所にはその文字の前に16進数の{0x40}を 全角から半角に切り替わる箇所には16進数の{0x41}を挿入し その結果をテキストtest1.txtに出力をするプログラムを作成しなさい。(結果の確認はバイナリエディタで行うように) なお、文字列str1の文字コードはSJISとする。 ※問題文では触れられておりませんが 文字列の1文字目が全角の場合は最初に{0x40}を 最後の文字が全角の場合は一番最後に{0x41}を付加しなければならないようです。 出力例: 挿入前の文字列str1:スレタイ C/C++の宿題を片付けます117代目 テキストに出力される文字列:{0x40}スレタイ {0x41}C/C++{0x40}の宿題を片付けます{0x41}117{0x40}代目{0x41} リンク:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7974.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/11 [5] その他の制限: 全角文字と半角文字を区別する箇所までは出来たのですが 文字列の中に16進数を挿入する過程で詰まってしまいました。 特に制限は無く、私が作った部分の改変をするのもおkですのでよろしくお願い致します。
442 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:04:34 ] 0x40は@、0x41はAのことか? そもそも宿題なのか?
443 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:25:41 ] >>442 ソースコート上では単純に文字として挿入するのではなく16進で挿入しなければならないようです memcpyの使い方に関する宿題です(;´Д`)
444 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:00:20 ] >>441 挿入してるのは ASCII だからべつにバイナリエディタでなくても確認できるな kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7975.txt あ、test1.txt に出す部分作るの忘れたからそれはご自分で。最後の printf を fprintf に置き換えるだけだね
445 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:12:21 ] >>444 ばっちりです!ありがとうございました あとは自分で改変してみます
446 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 01:02:30 ] >>437 ありがとうございます。 >>439 そういう適当な課題なんです
447 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:20:57 ] 440の問題微妙に難しくない?コンパイラ?
448 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:40:51 ] [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7976.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/12 [5] その他の制限:特になし よろしくお願いします
449 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:52:06 ] [1] 授業単元:C [2] 問題文 初期設定された任意の整数配列内のデータを,大きい順に並べ換えるプログラム をつくりなさい。ただし,並べ換える部分を関数にして,配列とデータ数を引数として 渡しなさい。例として,次の10 個の整数を格納した配列に適用してみなさい。 static int dd[10] = { 27, 89, 45, 18, 55, 64, 92, 73, 34, 88 }; 出力例: ソート後 = 92 89 88 73 64 55 45 34 27 18 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年11月10日 24:00 [5] その他の制限:次のようなプロトタイプ宣言をもつ関数isort を定義しなさい。 void isort(int *, int); できましたら、C言語の基本的な関数のみでお願いします。
450 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:15:08 ] >>447 関数の名称その他の抽出って感じだろう 構造体を誤認識しないようにしつつ
451 名前:450 mailto:sage [2008/11/09(日) 03:16:42 ] ごめんたしかにかなり面倒ですね どのくらいまでやればいいんだろ
452 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:25:55 ] >>449 void isort(int * ary, int nelem) { int i; for ( i = 1; i < nelem; ++i ) { int j; int tmp = *(ary + i); for ( j = i - 1; j >= 0 && *(ary + j) < tmp; --j ) { *(ary + j + 1) = *(ary + j); } *(ary + j + 1) = tmp; } } 適当に作ってみた。
453 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:05:41 ] >>448 シンプレックス法だね。でもコードにするのめんどい・・・
454 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:06:41 ] >>440 途中までやってみた。 ・ 基本的に改行を取り除くため1つの char 配列に読み込む ・ // は行単位の処理が必要なので読み込み時に処理 ・ /* 〜 */ は未対処 ・ void, int, char, float, double のいずれかとマッチするところを探す → データ型を省略した関数定義は取りこぼす ・マッチしたらそれぞれの直後が ' ' か '\t' か '\n' の条件に絞る ・ '(' が来るまでに ',' か ';' か ')' か '{' か '}' が来たら関数ではない ・以上の条件に合致したら、型名と関数名を出力 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7978.txt
455 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:16:44 ] >>452 ありがとうございましt!
456 名前:454 mailto:sage [2008/11/09(日) 05:20:37 ] >>440 short が抜けてたので改良を加えてみた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7980.txt 検索の順序の関係上お手本とは順番は異なるが、いちおう関数は拾えている
457 名前:354 ◆zeyvxEAaZQ mailto:sage [2008/11/09(日) 05:42:14 ] [1] 授業単元: C++ [2] 問題文(含コード&リンク): 敵が一周回ったら再び中央へ移動して、波を描きながら画面外へ消える。これをクラスを使わないで作って欲しいです。 中央へ移動までは、>>395 さんに作っていただきました。www.dotup.org/uploda/www.dotup.org20438.zip.html 最終的にこのような感じの動きです。www.dotup.org/uploda/www.dotup.org20441.bmp.html あと、敵の当たり判定もお願いします。これがサンプルです。www.dotup.org/uploda/www.dotup.org20440.zip.html [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC2005またはVC2008 [3.3] 言語: C++ [4] 期限: ([2008年11月9日22:00まで [5] その他の制限: クラスについてどのようなものかまだ習っていなかったのに、曖昧な返事をしてしまって申し訳ございません。 プログラムに関しては、自機の表示と弾を出すのはできましたが、それ以降ができません。どうかお願いします。