1 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:27:59 ] あなたが解けない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++の宿題片付けます 136代目 pc12.2ch.net/test/read.cgi/tech/1274827528/
552 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:15:17 ] >>545 確かに古いといわれたらそうかもしれません。 func(a, b) int a; char *b; { ... return 0; } と書いていたころもありました。 setq とか car とか cdr とかを乱発していたこともあります。
553 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:17:21 ] >>494 お前がコテハンかトリップつけろ塵
554 名前: ◆QZaw55cn4c mailto:sage [2010/07/06(火) 19:18:17 ] >>544 いえいえ、全然。
555 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:22:15 ] >>553-554 コテハン付けたり、外したり大変だなw
556 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:24:57 ] >>555 専用ブラウザを使っていますから、簡単ですよ。
557 名前:デフォルトの名無しさん [2010/07/06(火) 19:31:06 ] >>547 >setq とか car とか cdr とかを乱発していたこともあります。 横レスだけど、そのネタはww [H|T] -> とか言い出さないようにw>>552 まあ、コード書けない煽りは無視で行きましょう。
558 名前: ◆GmgU93SCyE mailto:sage [2010/07/06(火) 19:34:15 ] >>548 codepad.org/Wng6j1dW
559 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:35:47 ] >>552 その頃は return (0); と書いてたりしないか?
560 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:37:06 ] >>557 処理系をCで書く、という解説本を集めているんです。でも、いまんところ2冊しかみつかっていません。 やっぱり、そんな本は売れないんですかね。おもしろいんですけれどね。
561 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:38:44 ] >>559 しまった!
562 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:39:30 ] >>560 訳されてない本が沢山あるよ
563 名前:デフォルトの名無しさん [2010/07/06(火) 19:51:18 ] >>560 ,562 Cに限らず、技術資料とかサンプルは英語の方が多いよね。 Google codeもよく使ったなあ。
564 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:51:18 ] お爺ちゃんお口くちゃ〜い、クソースなんて書くなよw
565 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:53:06 ] >>562 洋書まではあさる実力がない‥‥‥。でもながめてみたいもの。 著者名でよければ教えてください。
566 名前:デフォルトの名無しさん [2010/07/06(火) 20:06:48 ] >>558 ありがとうございました〜
567 名前:523 mailto:sage [2010/07/06(火) 20:42:03 ] >>526 >>524 回答ありがとうございます。 まさか一日かからずに終わらせてくれるとは思いませんでした。
568 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:09:00 ] C言語と関係無いじゃん。 OSやコンパイラを作るって事だろ。
569 名前:デフォルトの名無しさん [2010/07/06(火) 22:11:38 ] コインの種類(例えば、1円、5円、8円、10円、15円)に対して、金額を入力すると その金額を払うのに最も枚数が少なくて済むコインの出し方を出力してくれる プログラム。 例えば、23円と入力すると、「10円1枚・8円1枚・5円1枚の計3枚」と出力できるプログラムです。 ただし、「10円2枚・1円3枚の計5枚」は「最小」ではないため、上の出力を優先します。 入力された金額が負の場合は、「Error」を出力するようにします。 そこで、下のようなプログラムを書いたのですが、うまく起動しません。 このプログラムを、上の出力例のように出力してくれるように書きなおしてくれませんか?? 下のプログラムでは合計枚数を出力する部分しか書いてません。 ちなみに、再帰を使ってプログラミングお願いします。
570 名前:デフォルトの名無しさん [2010/07/06(火) 22:14:36 ] 569質問者のプログラム(続き) #include<stdio.h> int coinfunc(int *C, int k, int M){ /* *C・・・コインの種類の配列(小さい順にソートされているとする) M・・・支払う金額/ k・・・コインの種類の数 */ if(M == 0){ return(0); } else if(M < 0){ return(Error); } else{ int min = 100000; int i; for(i = 0; i <= k - 1; i++){ int tmp = coinfunc(C, k, M - C[i]); if(tmp < min){ min = tmp; } } return(min + 1); } } int main(){ int C[5] = {1,5,8,10,15}; int k = 5; int M; printf("支払う金額M="); scanf("%d",&M); printf("%d\n",coinfunc(C, k, M)); }
571 名前: ◆QZaw55cn4c mailto:sage [2010/07/06(火) 22:36:25 ] >>506 codepad.org/dYsw25Et 許容範囲云々は考えていません。
572 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:38:55 ] 明日までにある宿題あるんですけど頼めますかね? すぐ貼ります
573 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:40:44 ] 頼めます
574 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:42:55 ] >>572 ここまでは作った #include<stdio.h> int main(void) { return 0; }
575 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:54:22 ] [1] 授業単元:プログラミング演習 [2] 問題文:このプログラムを拡張して、個人ごと平均点と科目ごとの平均点を小数点以下1桁まで 表示できるプログラムを作成せよ。 #include <stdio.h> main() { int score[4][3]: int total[4]: int i , j ; for (i = 0; i < 4; i++) { total[i] = 0 ; printf("No . %d\n" , i + 1); for( j = 0 ; j < 3; j++) { printf("score %d : " , j + 1) ; scanf("%d", &score[i][j]); total[i] += score[i][j]; } } printf("\n"); printf("No . | s1 s2 s3 | total\n"); printf("---+----------+------\n"); for ( i = 0; i < 4; i++) { printf("%2d | " , i + 1) ; for( j = 0; j < 3; j++) { printf("%3d " , score[i][j]); } printf("| %4d\n" , total[i]) ; } }
576 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:56:36 ] 連投すみません [3]環境 Windows、VC6.0、C [4]期限 7月7日 [5]配列まで よろしくお願いします。
577 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:36:32 ] >>570 再帰は駄目だな、100円でいっぱいいっぱいだw #include<stdio.h> #include <limits.h> int coinfunc(int *c, int k, int m) { int i, tmp, min = INT_MAX; if (m == 0) return 0; else if (m < 0) return -1; for (i = 0; i < k; i++) { tmp = coinfunc(c, k, m - c[i]); if (tmp < 0) continue; else if (tmp < min) min = tmp; } return min + 1; } int main(void) { int m, c[] = {1, 5, 8, 10, 15}; while (scanf("%d", &m) != 1) scanf("%*[^\n]"); printf("%d\n", coinfunc(c, sizeof(c)/sizeof(*c), m)); return 0; }
578 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:38:48 ] 低額は計算済みにしておいて、再帰使えば。
579 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:45:42 ] 結局イタチごっこだろ じゃあ非再帰ならいいのかと思って試したら、100000000円くらいが限界だった(メモリ確保できず) 割り算で出来る貨幣制度にしろってこった
580 名前:デフォルトの名無しさん [2010/07/06(火) 23:50:38 ] コインに関する問題への解答ありがとうございます。 >>577 さんありがとうございます。 >>579 さん、非再帰の場合のプログラムをのせてください。お願いします。
581 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:53:49 ] >>580 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10789.c
582 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:56:49 ] 最終的には、低額の計算だけにできるだろ。 基本は、一番高いコインで、埋めていき、最後(低額)だけ考慮する。
583 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 23:59:29 ] 予想では、コインの最小公倍数になるまでは最大値のコインで支払って 最小公倍数を下回る所になったら、組み合わせを考慮する。
584 名前:デフォルトの名無しさん [2010/07/07(水) 00:01:27 ] <<579さん、ありがとうございます。 ここで、第2問↓↓ 今も上で議論されていますが、このプログラム(<<577)の効率の解析をしてください。 「ある重要な演算1つに注目し、その実行回数(最悪の入力時における)を、入力 サイズを表すパラメータの関数として表す。最終的にはT(n,...)=O(n^2×・・・) のような評価式を求めてください。」できれば、その式を求める過程をお願いします。
585 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:06:30 ] >>568 ええ、lisp 用として。
586 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:07:51 ] O(1)だろ。
587 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:08:29 ] >>582 確かにそれで大分削れそうだな
588 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:08:29 ] >>575 分かる人これも頼みます
589 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:26:32 ] >>583 #include<stdio.h> #include<stdlib.h> int gcd(int a, int b){ int c; while((c=a%b)) a=b, b=c; return b; } int lcm(int a, int b){ return a/gcd(a, b)*b; } void coin_func_r(int *result, int c[], int m, int n){ int i; if(m<0 || c[0]<0 || (*result>0 && n>=*result)) return; if(m==0){ if(*result<0 || *result>n) *result=n; return; } for(i=0;c[i]>0;i++) coin_func_r(result, c+i, m-c[i], n+1); } int coin_func(int c[], int amount){ int i, lcm_all=1, result=-1, rest, c_max=1; for(i=0;c[i]>0;i++){ lcm_all=lcm(lcm_all, c[i]); if(c_max<c[i]) c_max=c[i]; } rest=amount%lcm_all; coin_func_r(&result, c, rest, 0); return result+(amount-rest)/c_max; } int main(int argc, char *argv[]){ int c[]={15, 10, 8, 5, 1, -1}, x=100, result=-1; if(argc==2) x=atoi(argv[1]); result=coin_func(c, x); printf("%d\n", result); return 0; }
590 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:36:26 ] >>589 とてもいい感じだが、コインの最小公倍数の大きさに極めて依存 - int c[]={15, 10, 8, 5, 1, -1}, x=100, result=-1; + int c[]={777, 128, 100, 15, 10, 8, 5, 1, -1}, x=100, result=-1; // tekitou として 100000をコマンドライン引数で与えると帰ってこねえ 最小公倍数よりも範囲を狭くする方法はありそうだけどなぁ
591 名前: ◆QZaw55cn4c mailto:sage [2010/07/07(水) 00:37:41 ] >>575 codepad.org/VmHF0iio 表示具合の微調整はお願いいたします。
592 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 00:40:32 ] >>591 ありがとうございます! 本当に助かりました。
593 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 01:07:22 ] >>503 ありがとうございました!
594 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 01:58:42 ] >>551 そこでも述べられているがそれTC2
595 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:06:02 ] [1] 授業単元:プログラミング演習 [2]Q1. 問題文:4つの整数を入力し、それらを要素とする行列を求め、その値を以下のような 形式で表示するプログラムを作成せよ。 例 100 20 30 40と入力すれば | 100 20 | =3400 | 30 40 | と表示される Q.2ディスカウントストアでどの商品でも5個以上買えば1割引、10個以上で2割引、20個以上で 4割引となっていた。キーボードから買う商品の単価と個数を入力し、合計金額を計算するプログラミングを 作成せよ。 [3]環境 Windows、VC6.0、C [4]期限 7月8日 [5]配列よりちょっと前 Q.1に関してはできそうだったのですが、バーが表示されないために却下となってまいました。 皆さんにとっては大変簡単だと思いますがよろしくお願いします。 初心者ですみません。
596 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:10:06 ] >>551 ちがう。そういうことじゃない。ISO、ANSI準拠はプログラムの開始、主体となる関数を mainとし、引数がある時と無い時でどう記述するか、標準スタイルを提唱している。 ただし、それはあくまでも 標準スタイル であり、各自の環境によって準拠しなくても構わない。
597 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:12:37 ] また、main関数の戻り値はint型とする。これは散々既出だから議論する必要なし。 自分はどうこうすると、根拠も無く意味も分からないスタイルを用いると 他者とコードをやり取りする場合は、弊害が起こるかもしれないが。 そもそも、ここでは個人的なやり取り、スタイルが通用するが C言語は何も個人が私用で使うだけでなく、世界に通じて商業用としても 普通に用いられている。それは工業規格も同じ事。だから少しでも 幅広く通用するスタイル、規格というのが必要になる。 ちなみに、CDやDVDなどもISO準拠で世界で通用する方式、規格が使われている。
598 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:25:18 ] さらに、C++では引数が無い場合は int main() としている。 あくまでも ANSI、ISO準拠の標準スタイルの話。個人的なスタイルには言及せず。
599 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 05:44:31 ] >>590 最大のコインを選ぶか選ばないかのときだけやればいい。 777円が最大なら 777*2-1以上までは777円を選んでおいてokのはず。 一枚選べる最大価格は777*2-1円だからこの辺から調べる。
600 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 06:08:18 ] コインが100円と99円としたとき。 297円 = 99*3円で100円を選ぶと失敗するから 599は間違えだな。 やっぱどのコインの倍数でもある最小公倍数がよさげか。
601 名前:デフォルトの名無しさん [2010/07/07(水) 12:20:52 ] >>582 >最終的には、低額の計算だけにできるだろ。 >基本は、一番高いコインで、埋めていき、最後(低額)だけ考慮する。 >>11 を改造させてもらいました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10790.c
602 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 13:24:29 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10791.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: C [4] 期限: ([2010年07月10日22:00まで] [5] その他の制限: よろしくおねがいします!
603 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 15:23:20 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 10人の成績を入力し、その順位を成績と共に表示したい。以下の考えに基づいたプログラムを作成せよ。 1. 2次元配列s[10][2]を用意する。 2. i=0〜9のfor文を用いて、s[i][0]に成績入力する。 3. s[0][0]とs[j][0], j=0〜9を比較し、s[0][0]より大きい数値の個数nを考える。 その個数+1が成績順位になるので、s[0][1]にn+1を代入する。 4. 同様の操作をs[i][0]にi=0〜9に対して行えば、その成績順位がs[i][1]として求められるので、 あとは成績と共に表示すればいい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (VC 6.0) [3.3] 言語: C [4] 期限: ([2010年07月9日15:00まで] [5] その他の制限: 初心者で申し訳ないですが頼みます。
604 名前:デフォルトの名無しさん [2010/07/07(水) 15:25:25 ] >>603 >>421 ,427
605 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 15:28:54 ] >>604 おお同じ人がいたとはw ありがとうございます!
606 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 17:49:16 ] >>604 これC++用だからできなかったorz
607 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:00:51 ] >>606 codepad.org/HReXj7Ky
608 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:15:29 ] >>607 ありがとうございます。 感謝感謝です。
609 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:20:35 ] >>595 暇ならでいいんでこれも頼みます
610 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:35:12 ] >>609 Q2. codepad.org/Nhl8WS7Q
611 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 18:42:57 ] >>610 ありがとうございます。
612 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 19:14:20 ] >>609 Q1 codepad.org/yXo3FhWm
613 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 19:26:52 ] >>550 ありがとうございました。 プログラムをしっかり理解出来るようもっと知識を深めたいと思います!
614 名前:デフォルトの名無しさん [2010/07/07(水) 19:29:25 ] >>612 ありがとうございます! 助かりました。
615 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 20:57:40 ] >>612 重くて開かないですね
616 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 21:24:39 ] 見れました!
617 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 21:58:05 ] 独自のライブラリも悪くは無いが 標準ライブラリ で済むならそれでおk
618 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 22:39:34 ] 【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 円形テンプレートマッチングのプログラムを作成せよ。 白い楕円が複数書いてあるBMP画像を読み込み(適当にペイントで作成)画像左下からラスタ走査し、円形テンプレートマッチングをするプログラムを作成せよ。 円形テンプレートはサイズA〜Bまで変化させ、一致率(円形テンプレートの円周上に一致する白画素と一致している数/円形テンプレート円周のプロット数、円形テンプレート内の黒画素に一致している黒画素数/円形テンプレート内の黒画素数) 上位5つを色を変えて描画せよ。 また、一致率上位5つの半径、一致率、座標(画像の左下をx=0、y=0とする)をdos窓上に標示せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:2010年7月10日まで [5] その他の制限: よろしくお願いします
619 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 23:37:51 ] [1] 授業単元:Cプログラミング演習 [2] 問題文(含コード&リンク): 問題1. 10進数1234を2進数で表示するプログラムを作成せよ。 問題2. 変数の下位16ビット中の1のビット数を数える関数 int bit_count(int x) を作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Stduio 2008 [3.3] 言語:C [4] 期限:2010年7月9日まで [5] その他の制限:無 よろしくお願いします
620 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 23:53:18 ] #include <stdio.h> int main() { int a, b, c, d; scanf( "%d", &a ); scanf( "%d", &b ); scanf( "%d", &c ); scanf( "%d", &d ); int value= a*d - b*c; printf( "| %d %d | =%d\n", a, b); printf( "| %d %d |\n", c, d ); return 0; } エラー z:\プログラミング演習\sample\sample\sample01c.c(12) : error C2143: 構文エラー : ';' が 'type' の前に必要です。 cl.exe の実行エラー どこを直せば良いのですか?
621 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 23:54:42 ] #include <stdio.h> int main() { int unit_price; // 単価 int num; // 個数 printf( "買う商品の単価: " ); scanf( "%d", &unit_price ); printf( "個数: " ); scanf( "%d", &num ); int total_price = unit_price * num; // 小数を使うと誤差がでるので使わない if ( num >= 20 ) total_price = total_price*6/10; else if ( num >= 10 ) total_price = total_price*8/10; else if ( num >= 5 ) total_price = total_price*9/10; printf( "合計金額: %d", total_price ); } エラー Z:\プログラミング演習\sample\ensyu8\ensyu8.c(14) : error C2143: 構文エラー : ';' が 'type' の前に必要です。 Z:\プログラミング演習\sample\ensyu8\ensyu8.c(18) : error C2065: 'total_price' : 定義されていない識別子です。 cl.exe の実行エラー これもお願いします。
622 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 23:58:40 ] >>621 変数の宣言場所をブロックの先頭に移動
623 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 23:59:05 ] #include <stdio.h> const int n = 10; int main() { int i, j; int s[n][2]; for (i = 0; i < n; i++) { printf( "%d: ", i ); scanf( "%d", &s[i][0] ); } for (i = 0; i < n; i++) { s[i][1] = 0; for (j = 0; j < n; j++) { if (s[i][0] < s[j][0]) s[i][1]++; } s[i][1]++; } for (i = 0; i < n; i++) printf( "s[%d]: %d\n", i, s[i][1] ); return 0; } /* end */ Z:\プログラミング演習\sample\sample33\ensyu33.c(7) : error C2057: 定数式が必要です。 Z:\プログラミング演習\sample\sample33\ensyu33.c(7) : error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。 Z:\プログラミング演習\sample\sample33\ensyu33.c(7) : error C2133: 's' : サイズが不明です。 cl.exe の実行エラー すみませんこれも駄目でした。 お願いします。
624 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 00:01:53 ] >>622 ありがとうございます。 しかし警告が出てしまいました。 Z:\プログラミング演習\sample\ensyu8\ensyu8.c(7) : warning C4700: 値が割り当てられていないローカルな変数 'unit_price' に対して参照が行われました。 Z:\プログラミング演習\sample\ensyu8\ensyu8.c(7) : warning C4700: 値が割り当てられていないローカルな変数 'num' に対して参照が行われました。
625 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 00:18:06 ] もしかして↓みたいな感じにしてない? int unit_price; // 単価 int num; // 個数 int total_price = unit_price * num;
626 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 00:19:39 ] >>625 なってます。 初心者ですみません。 正しいやり方教えてください。
627 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 00:27:29 ] int unit_price; // 単価 int num; // 個数 int total_price; printf( "買う商品の単価: " ); scanf( "%d", &unit_price ); printf( "個数: " ); scanf( "%d", &num ); total_price = unit_price * num;
628 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 00:30:08 ] >>627 できました! どうもありがとうございました。
629 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 00:34:44 ] >>620 自己解決できました。
630 名前:デフォルトの名無しさん [2010/07/08(木) 02:22:04 ] [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (visual stadio 2008) [3.3] 言語: (C) [4] 期限: [2010年07月08日13:00まで] [5] その他の制限:ほんの入門級なので、if,for,whileぐらいしか使えません あと配列は禁止 概要:数値を1つ(2〜9の数字)入力し、その個数分の"*"を1辺とする 完成図(*=★、空白=☆): 3を入力した場合 ★★★ ☆☆★ ★★★ 9を入力した場合 ★★★★★★★★★ ☆☆☆☆☆☆☆☆★ ★★★★★★★☆★ ★☆☆☆☆☆★☆★ ★☆★★★☆★☆★ ★☆★☆☆☆★☆★ ★☆★★★★★☆★ ★☆☆☆☆☆☆☆★ ★★★★★★★★★ ーーーーーーーーーーーーーーーー 自分の考え方で進んでみましたが、ifの条件式の部分が分からなくて 助力を求めます
631 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 07:27:39 ] >>630 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10793.c 奇数のみ出力できるモノで良ければ
632 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 10:01:13 ] [1] 授業単元:C・プログラミング [2] 問題文(含コード&リンク): 下記のGPA計算のプログラムを読み込んだ数値を入れる配列を指すポインタを用いて書き換えよ.ただし,配列は1次元配列を用い,また関数を使う必要はない. kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10794.txt [3] 環境 [3.1] Windows 7 [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2010年7月10日迄 よろしくお願いします。
633 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 10:51:09 ] >>632 void input(int sei[][N2], int n); ↓↓↓↓ void input(int (*sei)[N2], int n); for(i=0; i<n; i++){ ↓↓↓↓ int (*p)[N2]; for (p = sei; p < sei + n; p++) { sei[i][2]= 0; ↓↓↓↓ (*p)[2]= 0;
634 名前:デフォルトの名無しさん [2010/07/08(木) 11:18:09 ] C言語プログラミング(再帰)について質問です。 コインの種類(例えば、1円、5円、8円、10円、15円)に対して、金額を入力すると その金額を払うのに最も枚数が少なくて済むコインの出し方を出力してくれる プログラムを書こうと思っています。 例えば、23円と入力すると、「10円1枚・8円1枚・5円1枚の計3枚」と出力できるプログラムです。 ただし、「10円2枚・1円3枚の計5枚」は「最小」ではないため、上の出力を優先します。 そこで、下のようなプログラムを書いたのですが、合計枚数を出すまでしかできませんでした。 これを、それぞれのコインが何枚必要か出力するように書き換えてください!お願いします。 ソースコードは次の書き込みで。
635 名前:デフォルトの名無しさん [2010/07/08(木) 11:19:16 ] #include<stdio.h> #include<limits.h> int coinfunc(int *c, int k, int m) { int i, tmp, min = INT_MAX; if (m == 0) return 0; else if (m < 0) return -1; for (i = 0; i < k; i++) { tmp = coinfunc(c, k, m - c[i]); if (tmp < 0) continue; else if (tmp < min) min = tmp; } return min + 1; } int main(void) { int m, c[] = {1, 5, 8, 10, 15}; printf("m=?\n"); while (scanf("%d", &m) != 1) scanf("%*[^\n]"); printf("%d\n", coinfunc(c, sizeof(c)/sizeof(*c), m)); return 0; }
636 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 11:21:49 ] 23円は15と8じゃダメですか? ><;
637 名前:デフォルトの名無しさん [2010/07/08(木) 11:28:10 ] >>636 すいません!!23円のときは15と8が最小ですね。。
638 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 11:57:17 ] >>634 codepad.org/GanifMOO
639 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 12:01:39 ] 性帝トーマス△
640 名前:デフォルトの名無しさん [2010/07/08(木) 12:17:43 ] >>638 33円 -> 15円1枚、10円1枚、8円1枚 が最小。
641 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 12:26:46 ] 1 #include<stdio.h> 2 #include<string.h> 3 typedef struct K{ 4 char* name; 5 int tensuu; 6 }K; 7 int main(void) 8 { 9 FILE *fp; 10 char str[256]; 11 char *p1,*p2; 12 int i,j,n; 13 double d,e,f; 14 int a[250]; 15 char b[250][250]; 16 int x; 17 18 if((fp=fopen("seiseki.txt","r"))==NULL){ 19 printf("ファイルがありません\n"); 20 return -1; 21 }else{ 22 /*while(fgets(str,256,fp)!=NULL){ 23 p1=strtok(str," "); 24 p2=strtok(NULL," "); 25 a.name=p1; 26 a.tensuu=atoi(p2);*/ 27 i=0; 28 while(fscanf(fp,"%s %d",&b[i],&a[i])!=EOF){ 29 i=i+1;
642 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 12:28:08 ] 30 } 31 n=i; 32 printf("----------入力データ------------\n"); 33 for(i=0;i<n;i++){ 34 printf("%s %d\n",b[i],a[i]); 35 } 36 for( j=0; j<n; j++){ /* 未処理データの先頭 */ 37 for( i=1; i < n-j; i++){ 38 if( a[i-1] < a[i] ){ /* 隣り合うデータの交換*/ 39 x = a[i-1]; 40 a[i-1] = a[i]; 41 a[i] = x; 42 43 strcpy(str,b[i-1]); 44 strcpy(b[i-1],b[i]); 45 strcpy(b[i],str); 49 } 50 } 51 } 52 53 } 54 printf("----------出力データ------------\n"); 55 for(i=0;i<n;i++){ 56 printf("%s %d\n",b[i],a[i]); 57 } 58 fclose(fp); 59 return 1; 60 } 61
643 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 12:29:05 ] ファイル処理の応用 switch 文を使用して 1. データファイルの新規作成 2. データファイルの追加作成 3. データファイルの読み込みと表示 4. 終了 をメニュー形式で処理するプログラムを作成せよ。 ファイル名はキーボードから入力する。 1〜4の処理はユーザ関数として定義すること。 void data_write(void) void data_append(void) void data_read(void) void the_end(void) 1〜4以外の数値が入力されたら再入力させること。 switch 文については教科書 56 ページを参照すること。
644 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 12:31:22 ] 1. 新規作成の実行例 ********** 成績処理 ********* ← メニューの表示 ファイルの新規作成・・・・・1 ファイルの追加作成・・・・・2 ファイルの読み込みと表示・・3 終了・・・・・・・・・・・・4 ← データ入力の誤り 処理番号を入力して下さい(1〜4):9 ********** 成績処理 ********* ファイルの新規作成・・・・・1 ファイルの追加作成・・・・・2 ファイルの読み込みと表示・・3 終了・・・・・・・・・・・・4 処理番号を入力して下さい(1〜4):1 ← ファイル名の入力 Input file name= abc.txt name=?oota tensuu=?10 oota 10 name=?yamada tensuu=?50 yamada 50 name=? ← 入力の終了 Ctrl + D
645 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 12:33:27 ] 2. 追加作成の実行例 ********** 成績処理 ********* ファイルの新規作成・・・・・1 ファイルの追加作成・・・・・2 ファイルの読み込みと表示・・3 終了・・・・・・・・・・・・4 処理番号を入力して下さい(1〜4):2 name=?isida tensuu=?90 isida 90 name=?torii tensuu=?70 torii 70 name=? ← 入力の終了 Ctrl + D 3. 読み込みと表示の実行例 ********** 成績処理 ********* ファイルの新規作成・・・・・1 ファイルの追加作成・・・・・2 ファイルの読み込みと表示・・3 終了・・・・・・・・・・・・4 処理番号を入力して下さい(1〜4):3 Input file name= abc.txt oota 10 yamada 50 isida 90 torii 70
646 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 18:25:35 ] >>633 ありがとうございます。助かりました。
647 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 18:25:53 ] >>641-645 >>1
648 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 18:29:13 ] [1] 授業単元: [2] 問題文(含コード&リンク): 2〜9の数字を入力その数字に応じて図形を表示させる関数を作る 正方形 三角形 六角形 菱形 星 渦巻き 星と渦巻き以外できたからこの2つについて知りたい 例 7を入力したとき 左:渦 右:星 ******* * * * * * * * ***** * *** * * * ******* * *** * *** * * * * * ******* * * * [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: よくわからない 申し訳ないVS2008使ってる [3.3] 言語: C [4] 期限: 2010年7月13日 [5] その他の制限: 配列は禁止
649 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 18:44:06 ] >>648 ほー。配列は禁止。 printf("******* * * * \n"); printf(" * * * * \n"); printf("***** * *** \n"); printf("* * * ******* \n"); printf("* *** * *** \n"); printf("* * * * * \n"); printf("******* * * * \n"); は禁止?
650 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 18:51:34 ] 面白いと思ってやってんの?
651 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 19:11:07 ] >>648 渦巻きの偶数パターンが分かればコードが書けるんだが
652 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 22:56:04 ] >634 ってさ、たとえば 36 のときみたいに解が複数あるときはどうすんの? 15,15,5,1 の4枚と、10,10,8,8 の4枚。