- 1 名前:デフォルトの名無しさん [2010/05/26(水) 07:45:28 BE:94671825-S★(522522)]
- あなたが解けない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++の宿題片付けます 135代目 pc12.2ch.net/test/read.cgi/tech/1269438098/
- 252 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 21:16:28 ]
- >>250
アホか
- 253 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 21:25:58 ]
- >>252
ごめん。よく見たら>>251の方があってそうだね。
- 254 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 21:26:35 ]
- >>250-251
そのままコピペしたら出力できるんですが、{ で囲むとできなくなります。
- 255 名前:250 mailto:sage [2010/06/04(金) 21:29:38 ]
- あー、そこだったかぁ。。。
for(j=0; j<4; j++) printf("%*d", j==3 ? 10 : 5, array[i][j]); printf("\n"); ? for(j=0; j<4; j++) { printf("%*d", j==3 ? 10 : 5, array[i][j]); printf("\n"); } ○ for(j=0; j<4; j++) { printf("%*d", j==3 ? 10 : 5, array[i][j]); } printf("\n"); エスパーにはなかなかなれないもんだな
- 256 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 21:34:34 ]
- >>255
ありがとうございます。 その通りでした。
- 257 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:13:12 ]
- >>248
で、あなたが回答者になったのはどれですか?恥ずかしがらないで教えてくださいよ。
- 258 名前:デフォルトの名無しさん [2010/06/04(金) 22:35:02 ]
- [1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク): 任意の文字列を二つ入力し、一つ目の文字列から二つ目の文字列を「全て」検索するプログラムを実装しなさい。 検索結果は、一つ目の文字列を0文字目から数えて、何文字目にあるかを答えるようにしなさい。以下に実行例を示す。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10648.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2010年6月7日まで [5] その他の制限:特にありません。 よろしくお願いします。
- 259 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:38:42 ]
- strstr
- 260 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:38:52 ]
- >>256
>>223 にも作ったのあるよ。この辺で言っとかないと。
- 261 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:47:57 ]
- >>223は空白じゃないからお気に召さなかったんじゃないかな
- 262 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:52:31 ]
- >>257
>>141
- 263 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:58:05 ]
- >>258
#include<stdio.h> #include<string.h> int main(void) { char buf[256], keyword[256], *p, *q; int start, end; printf("文字列を入力してください。\n"); fgets(buf, sizeof(buf), stdin); if((p=strchr(buf, '\n'))) *p='\0'; printf("検索文字列を入力してください。\n"); fgets(keyword, sizeof(keyword), stdin); if((p=strchr(keyword, '\n'))) *p='\0'; printf("文字列「%s」は", keyword); for(p=buf;(q=strstr(p, keyword));p=q+1) { start=q-buf; end=start+strlen(keyword)-1; printf("%d文字目から%d文字目に存在します。\n", start, end); } if(p==buf) printf("存在しません。\n"); return 0; }
- 264 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:58:55 ]
- ま、ここの「回答」で期待されるのは
問題文の意味(文法寄りか応用寄りかとかでも区別)を極力 的確に汲み取りその意図に出来るだけ沿った正しいC文を 模範作文として上げること だろなw
- 265 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:59:06 ]
- >>258
codepad.org/g9L9SCFA
- 266 名前:265 mailto:sage [2010/06/04(金) 23:00:56 ]
- ごめん、これ無し。
「全て検索」に対応してない。
- 267 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:03:25 ]
- >>264
つまり、こういうのは期待してない
- 268 名前: ◆QZaw55cn4c mailto:sage [2010/06/04(金) 23:04:09 ]
- >>258
codepad.org/7Eo4s7F6 >>262 がんばって中篇にも挑戦しましょう。
- 269 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:09:32 ]
- >>268
お前が読みそこなったのを一例に挙げただけだぞw
- 270 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:11:33 ]
- >>268
forの条件判断部に関数置くとか、最悪w
- 271 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:12:15 ]
- >>270
へ?なぜ?
- 272 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:14:17 ]
- なぜならループごとに同じ返り値が帰ってくることを分かってるものを呼び出すのは無駄だから。
- 273 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:17:09 ]
- >>272
それもそうですねえ。 strlen() をそのまま書いたほうがよみやすくないですか?
- 274 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:18:38 ]
- こんなバカが他人に
>がんばって中篇にも挑戦しましょう。 こんなこと言ってると思うと笑えない
- 275 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:24:32 ]
- >>274
ま、批判するのは簡単ですから。
- 276 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:28:01 ]
- >>275
素直に 「for文の前に len_p=strlen(p); len_q=strlen(q); とあらかじめ代入しておけばよかった。」と言えばいいじゃないか。
- 277 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:38:13 ]
- >>276
その程度の基礎さえできてないアホが逆ギレするからウザいんだよw
- 278 名前: ◆QZaw55cn4c mailto:sage [2010/06/04(金) 23:39:23 ]
- 指摘された部分を反映しました。また、空文字列(strlen() == 0) の場合にも対応いたしました。
codepad.org/n5bSwqxj >>276 たしかに。大変失礼いたしました。
- 279 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:43:20 ]
- 結局、問題の根本を理解してないから言われたところを直せばいいとしか思わないんだろうなw
- 280 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:46:43 ]
- >>278
いや、それなおさなくていいよ。 他は見てないけど、少なくともそこの部分に関しては修正しなくていい。 心配なら速度を測ればよいよ。もしくはアセンブリを参照。 >>272は基礎はできてるのかもしれないけど、そこから先の知識をまだ持ってないみたい。
- 281 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:47:41 ]
- 最近のコンパイラって最適化でstrlen()が消えるの?
- 282 名前:280 mailto:sage [2010/06/04(金) 23:48:07 ]
- ごめん、誤解を招くレスをした。
修正するかどうかはその後判断すればいいので、今そこを直すべきじゃないということ。
- 283 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:49:23 ]
- >>281
横レスすまん。 strlenは消えないが、ループの外に出すことは十分期待していいんじゃないかな
- 284 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:50:29 ]
- [1] 授業単元:プログラム演習A
[2] 問題文:全30件の成績(0〜100点)をキーボードから 読み込み、0〜9点, 10〜19点,・・・, 90〜99点, 100点 の 11通りの区間にそれぞれ何人が入るかを調べなさい。 ただし、各区間に入る人数を溜めておく入れ物として 配列を利用すること。更に調べた人数に従って、各区間を ヒストグラムで表しなさい。 0点:*** 10点:***** 20点:**** ・ ・ 100点:* [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限:2010年6月7日まで
- 285 名前:デフォルトの名無しさん [2010/06/04(金) 23:57:48 ]
- 訂正
[3.2] コンパイラ名とバージョン: Visual C++
- 286 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:02:48 ]
- >>284
#include <iostream> void main() { int histogram[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int score; for (int i = 0; i < 30; ++i) { score = 0; do { std::cout << "成績を入力しろ(0〜100)" << std::endl; std::cin >> score; } while (score < 0 || 100 < score); ++histogram[score / 10]; } for (int i = 0; i < 11; ++i) { std::cout << i * 10 << "点:"; for (int j = 0; j < histogram[i]; ++j) { std::cout << "*"; } std::cout << std::endl; } }
- 287 名前:デフォルトの名無しさん [2010/06/05(土) 00:11:56 ]
- >>286
void main() (笑)
- 288 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:15:29 ]
- int main() でも return 0; は省略できるのにねえ
- 289 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:16:32 ]
- それなりにC++っぽいコード書いといてそこ落としたら突っ込まれるのしょうがない。
- 290 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:18:52 ]
- >>280, 283
もっといいコンパイラなら strlen() を外にだしてくれるかもしれませんが、私の gcc 3.3.4 や bcc 5.5.1 では -O2 にしても アセンブラリストを見る限りは、strlen() はループの中のままのようです。 そこから先の知識をもっていないのは私も一緒でしょう。 とにかく、しばらくこちらで今までのように鍛えていただくことにしました。 フォローありがとうございました。
- 291 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:22:23 ]
- そう思うんなら>>278の残りのstrlenもなんとかしろよw
- 292 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:24:27 ]
- >>291
strlen くらい残しても問題ないだろうに 余計なことするのが好きなんだな
- 293 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:27:08 ]
- すでにstrlen()で長さを求めて専用の変数に格納してるのに、
その長さをまたstrlen()で求めるのは無意味で無駄。 そんな無駄を許せる人間がプログラムをしてることが驚きだよw
- 294 名前: ◆QZaw55cn4c mailto:sage [2010/06/05(土) 00:35:35 ]
- >>258
codepad.org/IiGMyIU6 指摘を受けた部分を改良いたしました。
- 295 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 01:14:00 ]
- >>284
0点:*** 10点:***** 20点:**** ・ ・ 100点:*
- 296 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 03:05:02 ]
- >>293
なんでメモリリークの可能性は許しちゃうの? 速度よりもそっちの方が大事だろ普通。 メモリリークを許せる人間がプログラムをしてるなんて心配になるよw
- 297 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 03:21:38 ]
- どこでメモリリークするのか◆QZaw55cn4cのために懇切丁寧に説明してあげてくれw
- 298 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 04:43:15 ]
- >>297みたいに自分の意見を言わない人は嫌いだが、メモリリークする箇所あるか?
- 299 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:32:53 ]
- 模範例文として推敲がどの程度行われるべきかは
状況依存としか言いようが無いです 推敲され過ぎてバグも無駄や文書としての矛盾も無い 状態が教育上好ましいかどうかは一概に言い切れま せん ただしその逆が問題になるのは、ネット環境でそれが 容易に複製され大量流布になり得るという観点からの みです。
- 300 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:46:10 ]
- バカの長文ほど邪魔なものはないな
- 301 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 11:55:55 ]
- 短文を書けるのが賢いんだと思い込む人よりかアホやバカかも知れないが
ナルシスティは小さいかもな
- 302 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 12:29:36 ]
- 宿題丸投げするようなバカへの回答なんて何だって良いだろうが
どうせこのスレでいい例を見せたって理解できるはずないだろ
- 303 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 12:46:11 ]
- segmentation fault
core dumped.
- 304 名前: ◆QZaw55cn4c mailto:sage [2010/06/05(土) 17:03:20 ]
- >>298
malloc()/realloc()/free() のラッパを書いて確認してみました。 codepad.org/5lqkATcO ただ、ラッパ自身も malloc() / free() を使っているので、これが正しいかどうかを検証する方法がわからない。 ラッパのラッパを書くしかないのか‥‥‥。
- 305 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:10:54 ]
- >>302
宿題を丸投げする人は、このスレのお客様。 むしろコード書く人、そのコードを読む人が主人公かなあ。 さらしたコードを叩くな、という人がいますが、むしろコードを読んで叩いてくれる人がいるからこそ、書きがいがあるというものです。
- 306 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:19:29 ]
- ただで駄目なところ指摘してくれたり、より効率的な方法教えてくれるんだから
ありがたいもんだよな。 変にプライドの高い人は逆ギレしちゃうけど。
- 307 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:29:51 ]
- >>306
コードさらす人は、意識していないかもしれませんが、そのプライドを自分で潰しに来ている、といっていいわけですから、コードをかかない人よりよっぽどましかと。
- 308 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:42:20 ]
- そうそう。ここでコード晒す側も
所詮、暇つぶしなんで、波風立たない方が嬉しいにこしたことはない。 ここ100レス余りの流れで宿題がこないから、 mixiの宿題コミュまで覗っちゃったじゃないか!
- 309 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:45:23 ]
- >>258
- 310 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:55:13 ]
- >>308
mixiのあのコミュはなにかしら投稿するとsock(ryとかいう人に叩かれるw
- 311 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 18:55:52 ]
- >>307
いいからお前はトリップを全部の発言につけろw
- 312 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:23:23 ]
- >>304
ラッパがバグってるっぽい
- 313 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:25:49 ]
- 最近は嫌がらせ半分のふざけたコードに突っ込む人いなくなったなぁ。
そのまま提出した学生がその後どうなったのか気になるところだが。
- 314 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:28:52 ]
- >>313
他人をむやみに信用することの愚かさを痛感し、 自分で判断できる力を身につけようと努力し、偉人になったとか。
- 315 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:39:53 ]
- >>284ですが、型が違うみたいでエラーがでます。
そこで少し変えたんですが、なんか違うようです。
- 316 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:40:36 ]
- #include<stdio.h>
main(void) { int test[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int i,j; int score; for (i=0;i<30;i++) { score = 0; do { printf("成績を入力しろ"); scanf("%d",&score); } while (score < 0 || 100 < score); test[score / 10]++; }
- 317 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:42:10 ]
- for (i=0; i < 11;i++) {
printf("点:"); for (j=0; j<test[i];j++) { printf("*"); } } return 0; }
- 318 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:57:10 ]
- >>315
#pragma warning(disable:4996) // これを追加する #include<stdio.h> main(void) {
- 319 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:05:19 ]
- 早くお客様こないかなー
- 320 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:07:14 ]
- >>318
ありがとうございます。
- 321 名前:デフォルトの名無しさん [2010/06/05(土) 20:17:04 ]
- すいません>>320です。
問題文に「0〜9点, ・・・, 90〜99点, 100点」と書いてありました。 大変申し訳ないです。 0〜9点:*** ・ ・ ・ 100点:** とするには、どう手を加えればいいのですか?
- 322 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:19:11 ]
- [1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10649.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 無期限
- 323 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:21:51 ]
- >>321
for(i=0; i<11; i++) { if(i==10) printf("100点:"); else printf("%d〜%d点:", i * 10 + i * 10 + 9);
- 324 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:25:11 ]
- >>321
「printf("点:");」→「if (i == 10) { printf("100点:"); } else {printf("%d〜%d", i*10, i*10+9);}」
- 325 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:28:09 ]
- >>322
2-A:char** 2-B:char[][MAXLENGTH] 2-C:char**day 2-D:char day[][MAXLENGTH]
- 326 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:31:07 ]
- >>323-324
ありがとうございます。 何度もすいませんでした。
- 327 名前: ◆QZaw55cn4c mailto:sage [2010/06/05(土) 21:50:30 ]
- >>312
ご指摘感謝。free() のラッパがバグっていました。最後のひとつを開放するときにリンクをはずせていなかった。 codepad.org/91IVlXJH
- 328 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 22:26:34 ]
- >>325
ありがとうございます。
- 329 名前:デフォルトの名無しさん [2010/06/05(土) 22:33:28 ]
- 文字と演算子を入力して四則計算するプログラムってどうやります?
例えば 3←入力 +←入力 4←入力 −←入力 ・←入力 ・ ・ = (計算結果)
- 330 名前:329 [2010/06/05(土) 22:36:29 ]
- #include<stdio.h>
int main(void){ int a,b; char c; while(a != '='){ scanf("%d",&a); scanf("%c",&c); if (c = '+')b += a; else b -= a; } } うまくいきません。
- 331 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 22:56:11 ]
- >>329
ideone.com/PMcBO 逆ポーランド 電卓とかでググってみてくれ
- 332 名前:329 [2010/06/05(土) 22:58:00 ]
- >>331
そんな難しいのじゃなくていいです・・ とりあえずwhileとか使って 数字入力 演算子入力 数字入力・・・・=答え みたいなのが作りたい。
- 333 名前:デフォルトの名無しさん [2010/06/05(土) 23:51:35 ]
- >>258です。ポインタを用いないバージョンもできないでしょうか。
- 334 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 23:55:00 ]
- >>332
こんなんでどう? codepad.org/b68KtrqB
- 335 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 00:04:36 ]
- scanf()はエラーも返すんだよね。
- 336 名前: ◆/91kCCQXBo mailto:sage [2010/06/06(日) 00:14:15 ]
- #include<stdio.h>
int main(void){ int a=0, b=0, plus=1; char buf[80]; while(buf[0] != '='){ // fgets(buf,100,stdin); gets(buf); if(buf[0] == '+'){ plus = 1; b = a; } else if(buf[0] == '-'){ plus = -1; b = a; } else sscanf(buf, "%d", &a); } b = b + plus * a; printf("ans=%d\n", b); } /* 3 - 6 = ans=-3 */
- 337 名前:デフォルトの名無しさん [2010/06/06(日) 01:34:19 ]
- こんなソフト作ってください(お代は払います)ってな感じのスレどっかにあったかなぁ?
アイデアはあるけどオツムがないからどうしようもなく放置したまま早1年。 発注するから誰か受注して って頼みたいんだけど?
- 338 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 01:53:31 ]
- >>337
pc12.2ch.net/test/read.cgi/software/1251624598/l50 なんてどう?
- 339 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 02:09:42 ]
- サンクス
- 340 名前: ◆QZaw55cn4c mailto:sage [2010/06/06(日) 02:37:30 ]
- >>258
>>333 codepad.org/K6MwzaHX
- 341 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:39:09 ]
- >>333
#include <stdio.h> int main(void) { char a[256], b[256]; int i, j, flg = 0; printf("文字列を入力してください。"); scanf("%s", a); printf("検索文字列を入力してください。"); scanf("%s", b); printf("文字列「%s」は", b); for(i=0; a[i]; i++) { for(j=0; b[j]; j++) if(a[i+j]!=b[j]) break; if(b[j]=='\0') { if(flg++) printf(","); printf("%d文字目から%d文字目", i, i + j - 1); }} printf("%s\n", flg ? "に存在します" : "は存在しません"); return 0; }
- 342 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:45:21 ]
- >>333
折角書いたけど>>341の方がスマートでくやしい #include <stdio.h> int main() { char str[256], search[256]; int strIdx = 0, searchIdx = 0, found = 0; printf("文字列を入力してください。\n"); scanf("%s", str); printf("検索文字列を入力してください。\n"); scanf("%s", search); while(str[strIdx]){ if(str[strIdx] == search[searchIdx]){ found = strIdx + 1; while(search[++searchIdx]){ if(str[++strIdx] != search[searchIdx]){ found = 0; break; } } if(found) break; } ++strIdx; } if(found == 0) printf("文字列「%s」は存在しません。\n",search); else printf("文字列「%s」は%d文字目から%d文字目に存在します。\n",search, (found - 2), (found - 2) + (searchIdx-1)); }
- 343 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:47:15 ]
- しかもバグ入りという...
- 344 名前: ◆QZaw55cn4c mailto:sage [2010/06/06(日) 12:03:14 ]
- >>329
ちゃんとつくると難しいです。たとえばこんな感じになります。 codepad.org/ODg132aP
- 345 名前:デフォルトの名無しさん [2010/06/06(日) 16:10:45 ]
- 何故>>330
はダメなのでしょうか? >>344 ちゃんとつくらなくても>>336のプログラムの中身がすでに 理解できないんですが・・・>>336より簡単にできないんですか? どんなプログラムも付け足せば何とかなるんですよね。 buf[]とstdin, fgetsなど全く意味がわかりません。 一応プログラム自体実行したら正しくいきます。 ただ宿題なので、今まで習ったことでやるしかないんです。 一応C言語です。
- 346 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:15:25 ]
- >>345
そういうのは最初に全部テンプレ使って言え
- 347 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:23:51 ]
- >>345
#include<stdio.h> int main(void){ int a,b = 0; char c=' '; while(c != '='){ scanf("%d",&a); scanf("%c",&c); if (c == '+')b += a; else b -= a; } } これでどうだ
- 348 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:25:40 ]
- >>345
ちがった #include<stdio.h> int main(void){ int a,b = 0; char c=' '; while(c != '='){ scanf("%d",&a); scanf("%c",&c); if (c == '+')b += a; else if(c == '-')b -= a; } printf("%d\n", b); } こうかな。
- 349 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:41:12 ]
- >>345なぜダメかという理由を書くと
1.while(a != '=')となっている点。 aは数字だろ?演算子はcに入れたいんだろ?だからwhile(c!='=')が正しい。 2.if(c='-')となっている点。 =は代入。比較なら==を使う。たまに見かけるバグだな。 3.int a,b;となっていて、bを初期化していない点。 bに結果を入れたいのだろうが、最初に0で初期化していない。 初期化しないと値は不定。何が入ってるか分からないというわけ。 つまりコンパイラとしてはbに最初から0xCDCDCDCDを入れておいても仕様違反ではないというわけだ。 vc++のデバッグビルドならそうなる。 そこにプラスマイナスしても正しくならないよな。 4.else b-=a;となっている点。 これだと'='が来たときも引き算してしまう。だからese if(c=='-')にしないといけない。 5.whileに最初に入った時点でcは不定。 だから万が一cが'='だったらすぐ抜けてしまう。ここでは' 'を入れておけば絶対に問題が起きないのでおk。 現実問題として、滅多に起きないが、社会にでたらこれは立派なバグとして扱われるぞ。
- 350 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:42:02 ]
- こいつに理解させるのはまず無理だと思うけどな
- 351 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:53:45 ]
- 俺に聞けスレで諦めた一人ですな
- 352 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:55:49 ]
- >>348
12+12=0…
|

|