1 名前:デフォルトの名無しさん [2008/02/04(月) 23:32:19 ] あなたが解けない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++の宿題を片付けます 103代目 pc11.2ch.net/test/read.cgi/tech/1200318925/
267 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:14:52 ] >>266 バカがまとめんなよw >>232 で出る答えは間違ってるし、全員100点でも無限ループなんてしない。
268 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:21:10 ] >>266 >>238 も人数が210人未満のときに間違える。
269 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:22:04 ] >>232 の実行結果 合格者数:105人 合格者平均点:77.7723810点 >>238 の実行結果 Success:104 Average:77
270 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:33:34 ] どうして>>232 の答えは間違うんでしょうか?
271 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:34:26 ] >>270 プログラムが間違ってるからだね。
272 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:37:40 ] >>270 ループ終了条件をfeofで判定してるため、最後の数を二重に数えてるから。
273 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:37:52 ] 烏賊じゃないんだ
274 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:40:35 ] まあ>>238 のプログラムも入力部分を関数化しろって条件満たしてないんだけどな。
275 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:50:30 ] >>237 ありがとうございますm(_ _)m
276 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:56:49 ] >>272 ありがとうございます。 while(!feof(fp)) { fscanf(fp, "%d", &temp); data[temp]++; } ↓ while(fscanf(fp, "%d", &temp) != EOF) { data[temp]++; } みたいにしたらいいのかな。
277 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 23:58:10 ] そうだね
278 名前:デフォルトの名無しさん [2008/02/14(木) 00:10:08 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6049.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual C++2005 ExpressEdition [3.3] 言語:C [4] 期限:2月15日 [5] その他の制限:特にないです
279 名前:デフォルトの名無しさん [2008/02/14(木) 00:14:35 ] チョンのあやかり創価学会 偽善者が政治活動、公明党 ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや カルトキチガイ・創価騙されバカ信者 カルト・キチガイ・偽善政治活動・公明党 カルト・キチガイ・偽善政治活動・公明党 カルト・キチガイ・偽善政治活動・公明党
280 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:18:58 ] 条件なのにできるってなんかおかしくね?
281 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:40:44 ] >>276 fscanfを使うなら、 while (fscanf(...) == 1) とするべき。
282 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 00:50:47 ] >>278 「double max(double a,double b)関数をとり、引数aとbの大きいほうを返す関数」は、 double max_caller(double (*f)(double, double), double a, double b){ return (*f)(a, b); } でよろしいか?
283 名前:デフォルトの名無しさん [2008/02/14(木) 07:06:31 ] >282 いいですよ。
284 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 09:53:12 ] >>281 なるほど、それだと読み込みエラーとかでもループを抜けられるんですね。 勉強になりました。ありがとうございました。
285 名前:デフォルトの名無しさん [2008/02/14(木) 11:39:45 ] >>278 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6051.txt チェックあまりしてない。甘いところはご愛嬌。
286 名前:デフォルトの名無しさん [2008/02/14(木) 12:09:39 ] >>278 問題2 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6052.txt これもチェックあまりしてない。甘いところはご愛嬌。
287 名前:デフォルトの名無しさん [2008/02/14(木) 18:04:30 ] 「nステップによるある一回の酔歩における、格子点上の経路を画面に表示するプログラムを作成せよ。」 って課題が出たんですけど、誰か教えてください。
288 名前:デフォルトの名無しさん [2008/02/14(木) 18:19:45 ] >>287 >>1 からやり直し
289 名前:デフォルトの名無しさん [2008/02/15(金) 12:03:39 ] すいません。書き直します。宜しくお願いします。 [1] 授業単元: 一般情報処理C [2] 問題文(含コード&リンク):「nステップによるある一回の酔歩における、格子点上の経路を画面に表示するプログラムを作成せよ。」 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:c [4] 期限:2008/2/19 [5] その他の制限:なし
290 名前:デフォルトの名無しさん [2008/02/15(金) 14:45:36 ] 急ですみませんが、(1)だけでもいいので、出来る方いらっしゃいましたらよろしくお願いします。 [1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 崖から鉛直上向きに投げた石の4秒後の鉛直方向位置を求めたい. (1)オイラー法によりその位置を求めるプログラムを作成し,4秒後の 位置を求めなさい. (2)理論解との位置の誤差を0.1m以下にするには時間きざみΔtを いくらにすればよいか考察しなさい. [3] 環境 [3.1] OS:Vista [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語:C [4] 期限:2008/2/15 15:50まで [5] その他の制限:
291 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:11:20 ] >>290 (1)だけ。 初速に関する条件がなかったけど入力させる形でよかった? #include <stdio.h> #include <stdlib.h> #define GRAVITY (-9.80665) #define DELTA_T (0.1) int main(void) { char temp[32]; double v0, velocity, time, y; printf("初速度を入力してください:"); do{ fgets(temp, sizeof(temp), stdin); v0 = atof(temp); }while(v0 <= 0); for(time = 0; time < 4; time += DELTA_T) { velocity = v0 + time * GRAVITY; y += velocity * DELTA_T; } printf("4秒後の位置は %f(m) です", y); return 0; } >>289 一口に酔歩って言っても定義はいくつもあるんだけど、 何の前提条件も無しでその問題文がだされたわけ?
292 名前:デフォルトの名無しさん [2008/02/15(金) 17:34:59 ] >>291 えっとその前の課題が「二次元格子上での酔歩におけるnステップによる平均移動距離を、m回のシュミレーションによる統計平均から計算せよ。また、その標準偏差を求めよ」 で、その課題の下に「乱数の発生方法について」とあって、1#include<stdlib.h>によって、stdlib.hヘッダーをインクルードする。2#include<time.h>によって、time.hヘッダーをインクルードする。 3srand((unsigned)time(NULL));によって乱数の種の初期値を現時刻から決める。4rand()/(RAND_MAX+1.0);によって0から1における一様乱数を発生させる。 と書いてあって、その下に上記の課題が書いてあります。
293 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:05:59 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6055.zip [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C++ [4] 期限: 2月18日24時まで [5] その他の制限:考察も書かないといけないので 注訳等も入れてもらえると幸いです。 また期限はギリギリの期限ですので出来るだけ 早く対応していただけると非常に助かります。
294 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:59:30 ] >>293 元のプログラムがてんでダメダメだな。
295 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:13:23 ] >>294 あれ、引用のコピペ失敗したかな(´・ω・`)、自分で動かした分には元のプログラムは動いたんだけど
296 名前:293 ◆klsLRI0upQ mailto:sage [2008/02/15(金) 22:19:36 ] >>294 サンプルプログラムの原文HTML化したものはありますけど そちらをうpった方がいいでしょうか?
297 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:26:43 ] >>295 67行目に変な文字が入ってるけど、ダメってのはそういう意味じゃない。 元のプログラムの作り自体にセンスが感じられないってこと。
298 名前:293 ◆klsLRI0upQ mailto:sage [2008/02/15(金) 22:28:41 ] >>297 なるほど、そういう事ですか><
299 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 07:24:05 ] >>293 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6056.cpp
300 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:45:37 ] >299 ありがとうございます
301 名前:_ mailto:sage [2008/02/17(日) 08:34:24 ] |┃三 / ̄\ |┃ | | |┃ \_/ ガラッ. |┃ | |┃ ノ// ./ ̄ ̄ ̄ \ |┃三 / ::\:::/:::: \ |┃ / <●>::::::<●> \ |┃ | (__人__) | |┃三 \ ` ⌒´ / |┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
302 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:03:44 ] 三 |┃┃ 三 |┃┃ |┃┃ ∧∧ ..|┃┃ 三 ( ;). |┃┃ピシャッ! / ⊃.|┃┃
303 名前:_ mailto:sage [2008/02/17(日) 11:52:13 ] .. |┃三 .. / ̄\ .. |┃ | | .. |┃ .. \_/ ガラッ.. |┃ ..| 三 |┃ | 三 |┃ ノ// ./ ̄ ̄ ̄ \ |┃三 / ::\:::/:::: \ ∧∧ ..|┃ / <●>::::::<●> \ 三 ( ;). |┃ | (__人__) | / ⊃.|┃三 \ ` ⌒´ / シュー |┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
304 名前:_ mailto:sage [2008/02/17(日) 11:52:33 ] 三 |┃┃ 三 |┃┃ |┃┃ ∧∧ ..|┃┃ 三 ( ;). |┃┃ピシャッ! / ⊃.|┃┃
305 名前:デフォルトの名無しさん [2008/02/17(日) 12:15:33 ] 【質問テンプレ】 [1] 授業単元: コンピュータ実習 [2] 問題文:(下記のコードに書き加えてファイルに出力しなさい) [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C++) [4] 期限: 今日 [5] その他の制限: なし #include <iostream> #include <string> #include <fstream> class write{ private: string input; public: string input(){ cout<<文字列をファイルに書き込みたい; cin>>input; return input; }}; int main(){ write ob; //書き込み処理 //書き込み処理終了 return 0; }
306 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:57:43 ] //書き込み処理 fstream("ファイル", ios::out) << ob.input(); //書き込み処理終了
307 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:06:25 ] >>306 ofstream使えよ。
308 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 17:48:53 ] [1] 授業単元: Cプログラミング [2] 問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6057.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 明日まで 問題はC言語のシグナルの送信に関するものです。 よろしくお願いします。
309 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:10:27 ] シグナルハンドラとしてSIG_IGNを使う。 あと、シグナルハンドラの中では、非同期シグナルセーフな関数以外は呼び出さない方がいい。
310 名前:デフォルトの名無しさん [2008/02/17(日) 21:55:38 ] [1] 授業単元:C言語II [2] 問題文(含コード&リンク) シェルを実装していますが、分からないのは入出力リダイレクションの処理です。 たとえばプロンプトから $ cat 123 > textout と、入力して 引数の'>'(もしくは'<') で入出力を切り替える処理を考えています。 どうすればいいのでしょうか? [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc 3.4.4 [3.3] 言語:C [4] 期限: 2008年2月29日
311 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 00:26:19 ] >>308 とりあえずsignal.hなるものの存在を初めて知った で、<unistd.h>は「unix standard」。 ここまで来ると、Windowsの人間はまるでついていけない……
312 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 02:30:54 ] >>308 [kill-main.c] #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> pid_t pid; void ctrlc(void){ kill(pid,SIGUSR1); } int main(){ unsigned int c; if((pid = fork()) == 0){ execl("kill-child","kill-child",(char *)0); perror("execl"); exit(EXIT_FAILURE); } if(signal(SIGINT,(void*)ctrlc) == SIG_ERR){ perror("sigint"); exit(EXIT_FAILURE); } do{ printf("Send signal?(C-c/n)\n"); while((c=getchar()) != EOF) if(c != '\n') break; if(c == 'n') exit(0); }while(c != EOF); }
313 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 02:32:35 ] >>308 [kill-child.c] #include <stdio.h> #include <stdlib.h> #include <signal.h> void siguser(void){ static int n = 0; printf("Signal received %d times\n",++n); if(n == 10) exit(EXIT_SUCCESS); } int main(){ signal(SIGINT,SIG_IGN); if(signal(SIGUSR1,(void *)siguser) == SIG_ERR){ perror("signal"); exit(EXIT_FAILURE); } for(;;){} } 子まで書き換えないとならないのがミソだな
314 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 04:08:11 ] >>312-313 御回答ありがとうございます。 SIG_IGNを使いシグナルを無視させることで無効化するんですね。 勉強になりました!ありがとうございます。
315 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 14:14:22 ] [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):Cシェルを作成しなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2008年2月19日まで [5] その他の制限: なし C言語でシェルを作っているのですが、 >310さんと同じく'>'の入力リダイレクションの処理が分からないです。 自力で途中までは書いているのですが、キー入力の分割処理が上手く行きません。 void parseitファンクション内の処理がおかしいと思われます。 助けて頂けると幸いです。 ソースファイル↓ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6060.c
316 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 16:43:12 ] 誰か292頼みます
317 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:15:57 ] >>316 問題が理解できないのでどうしようもない まずnステップっていうのがわからない そもそも、1ステップでどういう動きをするんだ? ランダムで X 方向 or Y 方向に 1つ動くっていうのか、 それとも、X 方向にランダムでいくつ、Y方向にランダムでいくつって言う風に動くのか あと表示のしかたも、各ステップ毎のX,Yの値をただ単に並べればいいのか、 図で見せるのかわからない
318 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 22:56:21 ] >>315 void parseit 内で、 *params++ = command; の後のパラメータ分文字を読み飛ばす処理内で、">"の処理をしているのが不味い a.out > aaa ↑ ここでパラメータ分文字を読み飛ばす処理は終了するので、次のパラメータを探す処理に 移ると、次のパラメータは、">"になる ">" の処理もそのままだと、 ファイル名の前後に空白文字が入る可能性がある(問題ないのかもしれないけど) あと、void parseit 関数の終わりの*params = '\0'; は、 *params = NULL; じゃね
319 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:16:23 ] >>318 なるほど、そう言うのが原因なんですね。 確かにテストをすると空白らしくものがファイル名と'>'の前(おそらく)に入ってると思われます となると、やはり新しいファンクションを増やした方がてっとり早いのでしょうか?
320 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:59:51 ] >>319 横レスになるけど. 先に ">"の前後で文字列を切り分けてからコマンド部分をあらためて切り分ける方法もあるんじゃないかな。 標準関数を使っていいのなら切り分けはこんな感じ↓ char redirect[20]; // リダイレクト先 _Bool test_parse( char *command, char **param ) { _Bool ret = false; char cmd[256]; // コマンド部 int result; // >の前後で文字列を切り分け result = sscanf( command, "%255[^>]%*[>]%19s", cmd, redirect ); if( result > 1 ) { ret = true; } getToken( cmd, param ); // ここでコマンド部をパラメータと切り分ける関数を別に作って呼ぶ return ret; } こうするとローカル変数cmdとredirectにそれぞれ>の前後で切り分けた文字が入るはず。 ついでにretで1以外が入っていた場合はredirectにも代入があったことになるからフラグでそれを知らせてます。
321 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 03:51:32 ] >>320 レス感謝です。 getTokenでparseitと同様の処理をさせれば良いのでしょうか?
322 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 06:43:13 ] >>321 4時か、がんばってるねぇ… とっくに寝てそうだけど、getTokenでparseitのparamsに入れていく部分の処理を入れればいいと思う。 元のソース見る限りだとredirectは特に同じことをしてなさそうに見えるから。
323 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 06:54:35 ] 試しに>>320 の教えてくれたsscanfを使ってみたのですが、 未だに空白が付いて正しい結果を出しません。 もしかしたらメイン内でやったのがいけなかったのかもしれません。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6062.c
324 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 07:09:34 ] あー 空白がつくのって "a.out params > text.txt" みたいなときに " text.txt"がredirectにはいるってこと? VC++でコンパイルしたからGCCでは挙動違うのかな? sscanfの処理を sscanf( command, "%255[^>]%*[> \t]%19s", cmd, redirect ); って修正してもだめ?
325 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 07:13:47 ] すみません>>322 の通りにやると文字化けが生じてしまいます。 もしこれが解決出来れば、test_parseファンクションを使えると思うのですが…。 何か解決方法があったら教えてください。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6064.c
326 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:37:19 ] 無事に解決できました。 どうやら問題やはcmdの最後の部分に空白があったため、問題が起きていたようです。 なので、最後尾にNULLを追加したらリダイレクションが正常に完了しました。 >>318 >>320 >>322 >>324 助言ありがとうございました。
327 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:39:06 ] >>316 適当解釈。 #include <stdio.h> #include <stdlib.h> #define N 10 void suiho(int *x, int *y) { int r=rand()%4; *x+=((r/2)*2-1)*(r%2); *y+=((r/2)*2-1)*(!(r%2)); printf("(%d,%d)\n",*x,*y); } int main(void) { int i,x=0,y=0; srand(time(NULL)); for(i=0;i<N;i++)suiho(&x,&y); return 0; }
328 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 20:29:30 ] >>327 面白い解釈だ 神龍:どんな問題でも一つだけ聞き流してやろう ってのが思い浮かんだ
329 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 21:26:31 ] 誰か終わってないリストチョーライ。
330 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:00:26 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク):2問ありますkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6066.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 明日まで [5] その他の制限: 問題文にそって作る お手数おかけしますが、よろしくお願いします。
331 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:27:31 ] 因数因数って引数だろ、「ひきすう」で変換すればちゃんと出てくるのに・・・ ってもやもやしながら読んでたらばおで噴いたwwwwwww
332 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 22:37:55 ] 構造体変数名がlist_tっていうのが違和感あるんだが,これって変数が list_tって名前なんだよな? xxx_tって普通,型名につける方法じゃないっけ?
333 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 23:18:56 ] ば、ばお・・・ごめんなさいorz >>332 問題文を確認したら構造体変数名はlist_tとありました。 これが誤っているとすると typedef struct list{ 〜 } list_t; って感じですかね?
334 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 00:13:00 ] typedef struct list_t{}list;だろ _tは普通使わないと思うけど
335 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 00:15:26 ] >>334 へぇ 普通はそうなのか 普通って難しいな
336 名前:デフォルトの名無しさん [2008/02/20(水) 00:27:17 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6067.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2/22 [5] その他の制限: よろしくお願いします。
337 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:03:12 ] [1] 情報セキュリティ [2] 問題文(含コード&リンク): C言語プログラムのファイルを読み込んで、バッファオーバーラン の危険性を検出(修正)するサポートツール。 [3] 環境 [3.1]Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2月21 [5] その他の制限: なし
338 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:07:57 ] さらっと書いてるけど>>337 は相当むずかしくないか?
339 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:11:45 ] gets()が検出できればおkだったりしてな
340 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:16:50 ] つ lint
341 名前:337 mailto:sage [2008/02/20(水) 01:25:54 ] * get * sprintf * strcat * strcpy * vsprintf が検出できれば OKです
342 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 01:28:57 ] 先に書けよ
343 名前:337 mailto:sage [2008/02/20(水) 01:33:14 ] すみません。
344 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 04:14:35 ] ・getってなんだよ。 ・scanfはスルーかよ。
345 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 04:23:51 ] >>337 #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFMAX 1024 int main(int argc, char *argv[]) { FILE *fp; char buf[BUFMAX]; int line = 0; if (argc < 2 || (fp = fopen(argv[1], "r")) == NULL) { printf("Usage: a.out [assemble code file]\n"); exit(0); } while (fgets(buf, BUFMAX, fp)) { ++line; if (!strcmp(buf, "\tcall\tscanf\n") || !strcmp(buf, "\tcall\tgets\n") || !strcmp(buf, "\tcall\tsprintf\n") || !strcmp(buf, "\tcall\tstrcat\n") || !strcmp(buf, "\tcall\tstrcpy\n") || !strcmp(buf, "\tcall\tvsprintf\n")) { printf("find at line%d: %s", line, buf); } } fclose(fp); return 0; } こんな感じでいいのかな。アセンブリコードに対して検索した方が楽だよな。
346 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 04:35:42 ] >>345 その発想はなかったわw
347 名前:337 mailto:sage [2008/02/20(水) 07:49:57 ] ありがとうございます
348 名前:デフォルトの名無しさん [2008/02/20(水) 11:53:11 ] >>330 1問目 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6068.txt 構造体変数名はlist_tとする意図が汲み取れないが、それは無視して作った。 構造体のtypedefした名前をlist_tとするの間違いじゃなかろうか・・・
349 名前:デフォルトの名無しさん [2008/02/20(水) 12:13:13 ] >>330 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6069.txt 問題をそのまま書いた方が良いと思うよ・・・
350 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:57:42 ] >>336 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6070.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6071.txt 一応作ってみた 考え方が良く分からんから、まぁたぶん大丈夫だろう的なレベル
351 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:47:15 ] >>348-349 ありがとうございます。
352 名前:デフォルトの名無しさん [2008/02/20(水) 21:23:03 ] >>350 ありがとうございます
353 名前:デフォルトの名無しさん [2008/02/22(金) 00:51:17 ] [1] 授業単元: プログラミング実習 [2] 問題文(含コード&リンク): ・リスト構造 アルファベットの文字列をいくつか読み込み、それを、アルファベット順にソートし、以下のコマンドが入力された場合、それぞれの命令を実行せよ。 条件として、リスト構造が使われていること、サブ関数の呼び出し(単純なものでもよい)が使われていること、malloc関数が使われていること。 p :入力された文字列を表示する。 a :指定された文字列をリストに追加する。(アルファベット順に並ぶように) d :指定された文字列をリストに削除する。(不要になった記憶領域はfree()を使って開放すること。また、指定された文字列がリストに無い場合は、その旨を表示。) q :プログラムを終了する。 ? :使用可能なコマンドの一覧を表示する。 end:データ入力の終了 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2月26日まで [5] その他の制限: こんな感じです。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6072.txt できればなるべく簡単な方法でお願いします。
354 名前:353 [2008/02/22(金) 00:54:56 ] ごめんなさい、訂正です。 × d :指定された文字列をリストに削除する。 ○ d :指定された文字列をリストから削除する。
355 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:55:06 ] >>353 BUFSIZE文字以上の入力があった場合に異常動作を起こす他、色々と問題・手抜きは抱えてるが少なくともその実行例は通る ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6073.c
356 名前:353 [2008/02/22(金) 03:24:27 ] >>355 ありがとうございます。 しかし、まんまコピペでコンパイルが通りませんでした… そしてNode型とかようわからん件…ごめんなさい低級で とりあえず自分なりにいじってみます。ダメだったらまたくるかも。
357 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 03:27:56 ] >>356 あぁ、VC++2008でコンパイルしたから気付かんかったけど C99形式のコメント(//〜)を使ってるからそれかもしれん その部分を全部消してみてくれ
358 名前:353 [2008/02/22(金) 03:50:47 ] >>357 消してみましたが、やはり同じようです。 とりあえずvistaですが、bccでまんまコピペでコンパイルしてみた結果、以下が表示されました。 list.c: 警告 W8060 list.c 24: おそらく不正な代入(関数 insert ) 警告 W8060 list.c 24: おそらく不正な代入(関数 insert ) 警告 W8060 list.c 32: おそらく不正な代入(関数 insert ) 警告 W8060 list.c 32: おそらく不正な代入(関数 insert ) 警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode ) 警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode ) エラー E2468 list.c 100: void 型の値は許されない(関数 appendProc ) 警告 W8019 list.c 100: コードは効果を持たない(関数 appendProc ) エラー E2468 list.c 114: void 型の値は許されない(関数 deleteProc ) 警告 W8019 list.c 114: コードは効果を持たない(関数 deleteProc ) エラー E2468 list.c 136: void 型の値は許されない(関数 main ) 警告 W8019 list.c 136: コードは効果を持たない(関数 main ) *** 3 errors in Compile ***
359 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:01:06 ] >>358 コメントを消した状態ならこっちではANSI C準拠の設定でgcc通る(警告は出る)以上分かりかねる bcc捨ててくれとしか言い様がない 使用したgccは以下 gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
360 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:21:12 ] これはbccのバグっぽい
361 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:24:08 ] 多分三項演算子とfgetsの合わせ技でエラーになってんだろうな bccだとvoid fgetsで定義されてるとかか?
362 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:26:26 ] [1] 授業単元: 基礎プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6074.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:本日正午まで(恐らく本日中であればなんとかなります) [5] その他の制限: なるべく自分でどうやっているプログラムなのか理解した上で提出した方がいいため、 if文やfor文使いまくりでもいいので、簡単なプログラムにしていただけると助かります。
363 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:37:40 ] >fgets(buf, BUFSIZE, stdin) ? 0 : exit(1);
364 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:39:46 ] >>358 fgets(buf, BUFSIZE, stdin) ? (void)0 : exit(1); これで回避できるみたいだが、よくわからんな。 bccの3項演算子の扱いが謎。
365 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 04:46:17 ] voidとそうじゃないものを並べちゃいけないみたいだね。 void同士ならOKらしい。
366 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:53:24 ] >>362 とりあえず適当 (1) #include<stdio.h> void num2roma(int num,const char roma[]){ const int mod = num % 10; const int div = num / 10; const int mod5 = num % 5; int i; if(div)num2roma(div,roma+2); if(mod5==4){ putchar(roma[0]); putchar(roma[mod/4]); }else{ if(mod5!=mod) putchar(roma[1]); for(i=0;i<mod5;++i) putchar(roma[0]); } } int main(void){ int num; while(scanf("%d",&num)==1){ num2roma(num,"IVXLCDM"); putchar('\n'); } return 0; }
367 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:54:59 ] (2) #include<stdio.h> int main(void){ int count[100]; int i,j,h; for(i=0;i<100;++i){ count[i] = 0; } for(i=0;i<30;++i){ if(scanf("%d",&h) != 1){ break; } ++count[h/5]; } for(i=0;i<100;++i){ if(count[i] != 0){ printf("%d...%d%8d : ",i*5,i*5+5,count[i]); for(j=0;j<count[i];++j){ putchar('*'); } putchar('\n'); } } return 0; }