1 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 12:30:56 ] あなたが解けない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++の宿題を片付けます 108代目 pc11.2ch.net/test/read.cgi/tech/1211980711/
357 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:19:55 ] [1] 授業単元:C言語 [2] 問題文kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6888.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限: 6月15日日曜日(早いと助かります) [5] その他の制限:できるだけ簡単に お願いします
358 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:16:39 ] >>278 をおねがいします
359 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:18:43 ] >>352 どれがわかんないの? int main(void) { //文字列入力 //置き換えられる文字入力 //その文字列が最初に入力した文章ないにあるかチェック //無いときの処理 //置き換える文字列入力 //置き換え前文字列表示 //置き換え処理 //置き換え後文字列表示 return(0); }
360 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:21:21 ] [1] 授業単元:C++プログラミング [2] 3つの整数を入力し、入力値を昇順に入れ替える処理を作成する。 ソート処理は関数を使って作成し、処理結果は関数の外で行う。 ソート関数は引数がポインタ、参照の2種類の関数をオーバーロードで作成する 出力イメージ: "整数を3つ入力しなさい" "入力した値は15,1,12" "昇順に並び替えると1,12,15" [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C++ [4] 期限:6月14日 [5] その他の制限:どうぞ宜しくお願いします
361 名前:309 mailto:sage [2008/06/13(金) 01:22:57 ] >>359 ・指定した文字列が含まれているか判定 ・無いときの処理 ・置き換え方 特に置き換える際は、どうやって文字を置き換えているのかさっぱり分からないです。 自分で分からないものを煮詰めても、まったくす進まないので、丸投げで全部作っていただきたく思います。
362 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:26:13 ] >>309 #include <stdio.h> #include <string.h> #define BUFF_SIZE 1024 void ex(char *dest, char *src,char *a,char *b){ while(*src!='\0'){ if(strncmp(src,a,strlen(a))==0){ strncpy(dest,b,strlen(b)); src+=strlen(a); dest+=strlen(b); } else *dest++=*src++; } *dest='\0'; } int main( void ) { char buf[BUFF_SIZE],src[BUFF_SIZE],dest[BUFF_SIZE],a[BUFF_SIZE],b[BUFF_SIZE]; printf("文字列を入力せよ : "); fgets(buf,BUFF_SIZE,stdin); sscanf(buf,"%[^\n]",src); printf("置き換え元を入力せよ : "); fgets(buf,BUFF_SIZE,stdin); sscanf(buf,"%[^\n]",a); printf("置き換え後を入力せよ : "); fgets(buf,BUFF_SIZE,stdin); sscanf(buf,"%[^\n]",b); ex(dest,src,a,b); printf("結果 : %s\n",dest); return 0; }
363 名前:362 mailto:sage [2008/06/13(金) 01:30:54 ] fgetsに引っ付いてくる改行文字除去するのにもっとスマートなやり方があるかもしれんが 優秀な方がつっこんでくれるに期待して 一応>>311 の通りに置きかえ
364 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:36:46 ] \nの置き換えなら if((p=strchar(buf, '\n'))!=NULL) *p = '\0'; ってやるのが一般的か?
365 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:37:45 ] strcharじゃなくてstrchrだな
366 名前:デフォルトの名無しさん [2008/06/13(金) 02:52:16 ] [1] 授業単元:C言語 [2] コマンドラインから数字の文字列を入力して、 unsigned intの範囲外の値が入力された場合は エラー文を返す。それ以外は入力値を標準出力する。 例) 入力 → 出力 例1) "4294967295" → 4294967295 例2) "4294967296" → 入力値が範囲外です。 [3] 環境 [3.1] OS:Ubuntu [3.2] コンパイラ名とバージョン:gcc4 [3.3] 言語:C [4] 期限:6月15日 [5] その他の制限:特にありません。isdigit()は使うと思います。 よろしくお願いいたします。
367 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:05:53 ] [1] 授業単元: プログラミング実験 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 6889 [3] 環境 [3.1] OS windows [3.2] コンパイラ名とバージョン: Visual studio2005 [3.3] 言語: C [4] 期限 本日13時まで [5] その他の制限:特になし よろしくお願いします
368 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:08:52 ] >>358 >>280 をスルーしたからスルーされてるのかなー?
369 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:10:02 ] sum1 += (the[i] - mea1[i]) * (the[i] - mea1[i]); sum2 += (the[i] - mea2[i]) * (the[i] - mea2[i]);
370 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:11:20 ] [1] 授業単元: プログラミング実験 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 6889 [3] 環境 [3.1] OS windows [3.2] コンパイラ名とバージョン: Visual studio2005 [3.3] 言語: C [4] 期限 本日13時まで [5] その他の制限:特になし よろしくお願いします
371 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:12:30 ] >>366 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { unsigned int u = ~0; double d; if(argc!=2) return 0; d = atof(argv[1]); if(d - u > 0) printf("入力値が範囲外です。\n"); else printf("%u", (unsigned int)d); return 0; }
372 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:12:32 ] 2重投稿すみませんorz
373 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:13:47 ] >>361 > 文字列をn文字比較する関数:strncmp(str1,str2,n) を使ってくれといっているのに > ・指定した文字列が含まれているか判定 が分からないとは。 自分が分からないものを他人に作ってもらって分かったふりして 提出する程度の人だからしょうがないけど。
374 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:22:47 ] >>369 解決しました ありがとうございました
375 名前:366 mailto:sage [2008/06/13(金) 03:29:05 ] >>371 早速ありがとうございます。 ただ以下の箇所でSIGSEGVが発生してしまいます。 d = atof(argv[1]);
376 名前:366 mailto:sage [2008/06/13(金) 03:32:44 ] char *argvとしていました。申し訳ありません。
377 名前:366 mailto:sage [2008/06/13(金) 03:38:31 ] >>371 0未満の値を入力すると大きな値が出力されてしまいます。 例) -1 → 4294967295
378 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:49:43 ] >>377 符号無しが範囲だから、0未満は範囲外として良いん?
379 名前:366 mailto:sage [2008/06/13(金) 03:56:17 ] >>378 0〜4294967295以外はエラーという事でお願いします。 こんな感じでしょうか? #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { unsigned int u = ~0; double d; if(argc!=2) return 0; d = atof(argv[1]); if(d - u > 0) printf("入力値が範囲外です。\n"); else if(d < 0) printf("入力値が範囲外です。\n"); else printf("%u", (unsigned int)d); return 0; }
380 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:00:55 ] if(d - u > 0 || d < 0) とすると一つにまとめられるよ
381 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:01:39 ] あと小数点を入れられた時はどうすんの?その辺りも教えて
382 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:09:29 ] っつか、int型って時点で小数点以下は無視かと。 範囲って言うと・・・どうなん?>質問者 まぁ、切り落としちゃえば良い話だろうけど
383 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:14:20 ] >>381 >>382 ここでは小数を想定していないので、 「不正な形式です。」と表示させたいです。 文字列が0〜9の数字で構成されているかチェックする必要が ありそうです。
384 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:17:03 ] エラーの種類は最初に確定しとかないと後出しで条件つけるなって怒られるよ
385 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:34:29 ] ほっほっほ、麻呂がクソースを書くでおじゃるから、待ってたもう
386 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:36:41 ] 入力された文字列が正しい範囲のC言語の意味での符号無し整数を 表しているかどうかは、次の方法を取るべきであろう。 まず、文字に不正な文字が含まれていないか検査する。 これは文字列を先頭からスキャンし、不正な('0'~'9'以外の)文字が 含まれているか否かをチェックし、検出された場合は、エラー出力 して終了する。 4294967295は10桁なので、スキャンが終わった段階で、長さ ??以上あった場合はエラーとしたいが、それは間違いである。 先頭に?が何個継続しているかで、文字列の長さが100あっても 正しく範囲にあるかも知れない。 最初に?ではない文字が出た位置を記憶(これを実質開始位置とする)し、 文字終端の位置と比較して、差を取り、??桁より大きい場合はこの時点 でエラー出力して終了して良い。 以降文字列の開始点が上記実質開始位置であるとして考える。 文字列の長さが?桁未満の場合は、正常終了できる。 ??桁の時が問題であり、先頭の文字が?以下の時は正常数量 ?以上の時はエラー終了とする。 ?桁目を見て、?以下の場合は正常終了、?以上の時はエラー終了する。 ?桁目を見て、?以下の場合は正常終了、?以上の時はエラー終了する。 以降同様の処理を1桁目まで書く。
387 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:41:08 ] >>366 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6890.c 麻呂のクソースを喰らうでおま〜
388 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:43:11 ] しまった、flgの設定が不適切だったでおじゃる、ちと直してくるでおまる
389 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:47:12 ] >>366 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6891.c 今度こそ、喰らうでおじゃる
390 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:50:34 ] >>389 間違ってる
391 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:18:31 ] >>366 strtoulを使い、エラーチェックすれば簡単。 if (先頭が数字でない || *endがNULでない || errnoがERANGE && 結果がULONG_MAX) 不正な形式です。 longがunsigned intの大きさが異なるなら、これにさらにチェックを加えれば良い。 ライブラリ関数を使わないのであれば、 unsigned int r, s; int i; for (r = 0, i = 0; s = r * 10 + argv[1][i] - '0'; i++, r = s) if (r > s || argv[1][i]が数字でない) 不正な形式です。 かな。こちらは自信なし。
392 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:20:14 ] 不等号の向きが逆だお。
393 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:37:32 ] >>390 アッーーー!って、見つけちゃったあなた、罰ゲームとして修正しておまっ
394 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:40:44 ] どこが間違ってるか分からないなら素直に教えてくださいって言えよ。
395 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:59:48 ] >>394 またお前か・・・態度でバレバレ。桁が同じだったときの 各桁の大小の評価のところだろ。面倒だから後はあんたがやっとけw
396 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:05:37 ] 教えてくださいって言えよ。 教えてくださいって 教えてくださいって 言えよ。 言えよ。 これはハマるぜ、この程度のことでここまで偉そうに出来るやつって 日ごろ相当つまらないことで恩着せがましい態度で嫌われてんぞw
397 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:09:10 ] どこが間違っているか分かっているなら素直に答えてやるよっておっしゃってぇ〜
398 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:24:19 ] ミスったら自分で修正しないか?
399 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:24:25 ] アルェー、結果がおかしかったから間違っているとだけ言ったけど 本当はコードのどこが間違っているか分かってなかったのかYO!
400 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:25:04 ] 1時間かけてようやく分かった癖にw
401 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:25:25 ] >>398 > どこが間違ってるか分からないなら素直に教えてくださいって言えよ。 って指摘したら指摘した奴が率先して口先だけじゃないってことを 証明するためにも、修正しないか?ウホッ?
402 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:30:05 ] ミス指摘されて逆ギレってみっともなさすぎるな
403 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:59:32 ] >>400 > 1時間かけてようやく分かった癖にw そもそも、ソースを書いた本人じゃないし、俺はw 指摘した奴が詳細を把握してないのに、何言ってんだお前?w どうせ数日前に現れた蛇足野郎だろ?w あれを蛇足なんて言う程度の低さだから、どうせ口先だけだろ。
404 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:07:05 ] 一体誰と戦ってるんだw
405 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:29:16 ] 漢は黙ってソースうp
406 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:36:14 ] ここで空気読めない俺がミスを指摘 if(argv[1][i] < uim[i]) break; を追加するだけ。
407 名前:デフォルトの名無しさん [2008/06/13(金) 09:12:35 ] >>366 もうこんなのでいいんじゃないか? #include <stdio.h> #include <stdlib.h> #include <string.h> // 0〜9の文字以外の表現だと不正な値になる unsigned int のパーサ unsigned int parse(const char *str){ unsigned int u=0; for(; str!='\0'; str++){ u+=u*10+(*str-'0'); } return u; } int main(int c, char **a){ unsigned int u = parse(a[1]); char us[11]; sprintf(us, "%u", u); if(strcmp(us, a[1])!=0) printf("unsigned int の範囲外です"); else printf("%u", u); }
408 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:24:25 ] なにそのコード、ふざけてるの?
409 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:45:08 ] >>317 まじだあああああああ ありがとうございます(つд⊂)エーン
410 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:55:33 ] (つд・)∩チラッ
411 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:59:29 ] >>407 実行してから貼れよ >for(; str!='\0'; str++){ u+=u*10+(*str-'0'); } いくらなんでもこれはひどすぎだろ
412 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 10:27:07 ] >>368 すいません、見落としてました ピボットのとり方が変わってもソート結果が変わることはないので、 原因はほかにあると思うんですがよろしくお願いします
413 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 12:11:33 ] >>408 ふざけてはないと思う。よく見れば単なるタイプミス *が抜けてて+が余計についてる。 for(;str !='¥0'...→for(;*str !='¥0'... u+=u*10...→u=u*10... 貼る時に、インデント付けようと、コピペじゃなく ブラウザのtextareaに直接タイプしたんじゃなかろうか(想像) ただし実行して確かめてみたコードだとしても、 >>366 の要求をほぼ満たしてるとは言い切れないと思う。 >>366 は、>>407 のコードを修正して実行出来たのかな?
414 名前:55 mailto:sage [2008/06/13(金) 14:51:43 ] [1] 授業単元:グラフ理論2 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6843.txt [3] 環境 [3.1] 言語:C スルーだったので、少しばかり自分でやってみました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6893.txt 初心者の自分にはこの程度が限界です。 ヘルプをお願いいたします。
415 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:55:00 ] >>366 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6894.txt
416 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:03:42 ] >>408 コードを書かないくせに、相変わらず茶化しだけの屑か
417 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:06:44 ] コードを読めるだけましじゃね?
418 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:14:45 ] コードを読めなくても文句は言える コードを書くまで信用するな
419 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:16:10 ] そうそう、結果で判断すりゃそれまで。指摘するなら具体的にどこが? 言わないと、かなり印象が悪いぞ。例え間違っているのがわかっていても 何でお前はそれを指摘したか?逆に言い返されると、お前がわかってないだの 茶化すから余計に悪い。
420 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:18:00 ] >>415 小数点を入力したときがおかしい
421 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:25:23 ] >>415 手持ちのgccでチェックしたが、 [Suma]:~ Asagiri$ ./6894 4199999999 4199999999 [Suma]:~ Asagiri$ ./6894 4200000000 範囲外です。 となった
422 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:42:28 ] >>366 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6896.c クソースを改良したでおまる
423 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:49:33 ] >>421 >415はstrcmp()の戻り値の仕様を誤解しているらしい。
424 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:49:46 ] >>415 strcmp の返り値に注意
425 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:52:52 ] ttp://www.bohyoh.com/CandCPP/C/Library/strcmp.html > 等しければ0、s1がs2より大きければ正の整数値、 > s1がs2より小さければ負の整数値を返す。
426 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:55:23 ] >>423 否strcmpの仕様がおかしい。1,-1,0のいずれかを返すべき
427 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:58:38 ] 標準関数の仕様にケチをつけるか・・・だから駄目なんだよ、お前はw
428 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 15:58:46 ] 文字同士の差を直接返すほうが、差の正負で1と-1にするより単純だから
429 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:12:04 ] >>426 バーカ ISO/IEC 9899:1999を読んでから言え
430 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:12:56 ] >>425 そこの実現例、nはどっから湧いてきたんだ?
431 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:40:42 ] >>430 確かに、実装例はおかしいね・・・サイト管理者に聞いてみw
432 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:43:06 ] >>430 そう思って strncmp のとこも見に行ったw
433 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:50:14 ] 柴田望洋さんって日本人の中ではまともな本を書く人なんだが こういう間違いを犯す事もあるんだな
434 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:57:13 ] しょっちゅうだろ。
435 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 16:58:04 ] 難しいコトする時は誰でも気を付けるけど 簡単なことは気が抜けちゃうんだよ
436 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:02:04 ] 日本語でおkな出版物はどこにでもあるさ。 映像コンテンツに於いても、映画ではあまりそういうことはないが アニメなんて日本語でおk日本語でおkなものも少なくないw
437 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:46:24 ] [1] C [2] 問[1] 1^1+2^2+3^3+4^4+……99^99を1000で割った値を求めよ。 問[2] 1から20までの数すべてで割り切れる最小の正整数を求めよ。 [3] 環境 [3.1] LINUX [3.3] C [4]6月16日 [5]なし 2問も書いて厚かましいかもしれませんが よろしくお願いします
438 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:19:22 ] >>437 とりあえず問1だけ #include <stdio.h> unsigned int f(unsigned int a,unsigned int b,unsigned int m) { /* a^b (mod m) */ unsigned int x=1; while(b!=0){ if(b%2==0){ a=(a*a)%m; b=b/2; } else{ x=(x*a)%m; b=b-1; } } return x; } int main( void ) { int i; int answer=0; for(i=1;i<=99;i++) answer=(answer+f(i,i,1000))%1000; printf("1^1+2^2+3^3+...+99^99≡%d (mod 1000)",answer); return 0; } 実行結果:1^1+2^2+3^3+...+99^99≡920 (mod 1000) a^b ( mod m)の値を返す関数の引数やら色々unsigned int になってるけど 気に入らなかったらこのくらいの計算ならintに変えても大丈夫だろう というか、答えあってるのかな・・・これ
439 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:20:59 ] > 1000で割った値を求めよ。
440 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:22:05 ] うはwつって来るわorz
441 名前:デフォルトの名無しさん [2008/06/13(金) 18:24:08 ] [1] 授業単元: [2] 問題文: 構造体配列で名前と背丈適当に入れて、1番背の高い人表示するプログラムを作成せよ。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6898.txt [3] 環境 OS:WindowsC言語 その他: 関数list srchmaxtall内の maxt.name = (p + i)->name;の行でのエラーが出てしまい困っています。 maxt.name = (p + i)->name;この行を消すとエラーが消え、実行されるのでこの行がどこか間違っていると思うのですが 文字列の格納の仕方がどこか間違ってますか? お願いします、誰か教えて下さい。
442 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:33:56 ] >>441 文字列には代入できない。エラーが出た時は常にエラーメッセージをちゃんと読むこと。 strcpy(maxt.name,(p + i)->name);
443 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 18:34:53 ] >>437 問[2] #include <stdio.h> int gcm(int a, int b) { return a % b ? gcm(b, a%b) : b; } int main(void) { int i, n = 1; for(i=2; i<=20; i++) if(n % i) n *= i / gcm(n, i); printf("%d", n); return 0; }
444 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:00:40 ] >>442 ありがとうございます!助かりました! 大学の講義でstrcpyは習った事がなかったのですが この関数以外で簡単に記述する方法があれば教えて下さい
445 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:03:54 ] >>443 結果のさらに半分でおk
446 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:07:02 ] [Fuga]:~ Miyabi$ ./443 232792560 232792560 % 2=0 232792560 % 3=0 232792560 % 4=0 232792560 % 5=0 232792560 % 6=0 232792560 % 7=0 232792560 % 8=0 232792560 % 9=0 232792560 % 10=0 232792560 % 11=0 232792560 % 12=0 232792560 % 13=0 232792560 % 14=0 232792560 % 15=0 232792560 % 16=0 232792560 % 17=0 232792560 % 18=0 232792560 % 19=0 232792560 % 20=0 検算コード入れてみた。すげー。あってるじゃん。検算コード入りソース↓
447 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:07:51 ] #include <stdio.h> #define int long long int gcm(int a, int b) { return a % b ? gcm(b, a%b) : b; } #undef int int main(void) #define int long long { int i, n = 1; for(i=2; i<=20; i++) if(n % i) n *= i / gcm(n, i); printf("%lld¥n", n); /*チェック*/ for(i=2;i<=20;i++) printf("%lld % %% lld=%lld¥n",n ,i,n %i); return 0; }
448 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:07:52 ] >253です。 >251さん raw形式です。気にかけてくださって有難うございます。
449 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 19:24:14 ] >>445 nを2で割って447のチェック試してみろ
450 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:17:47 ] >>437 問1を適当にといてみたら答えがオーバーフローしたw
451 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:25:42 ] >>55 ,414 とりあえず作ってみた 出力の仕様がよくわからんので適当になおしてくれ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6899.c
452 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:34:32 ] >>437 1^1+2^2+....+99^99=(恐らく) 371115746176445351701210713361941528546861949073514542015172437236580034634746971244943788132460150776779198800002366059871900041784732217539059306483834977865973576751345853385981719448969027641920 だから1000で割った値は、下3桁を000にしたものが答 ソースはC++だから無意味なんで省略 こういった問題はC/C++の問題としては余りにも不適当。検算のしようがないじゃん。 誰だこんな宿題出したの? この結果で見る限り >>438 で使われてる式は合ってるな (ま、当然と言えば当然だが)
453 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:39:12 ] 多分余りで>>438 みたいな答えを期待したんじゃないかと思うんだが
454 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:41:44 ] >>443 ユークリッドの互除法を使ってるのは分かるんですが そのプログラムにより何故目的の数値が出てくるのか分からないんですが… できれば詳しく教えてもらえませんか?本当にすいません
455 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:43:38 ] >>454 数学板の質問箱にでも逝って1,2,3,4,5,6,7,8,9,10,...,20の最小公倍数を求める方法を 聞いてくるのが最善かと
456 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:47:24 ] 1と2の最小公倍数を求める 1と2の最小公倍数と3の最小公倍数を求める 1〜3の最小公倍数と4の最小公倍数を求める ・ ・ 1〜19の最小公倍数と20の最小公倍数を求める
457 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 20:48:22 ] >>438 ありがとうございます >>452 今日の実技試験でこの問題が出されました 問題にはヒントとしてオーバーフーロー起こすからどうとかこうとか書いてました