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/
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枚。
653 名前:デフォルトの名無しさん [2010/07/08(木) 23:06:15 ] >>630 ありがとうございます 助かりました
654 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 23:20:25 ] >>653 いえいえ
655 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 23:32:53 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 以下の仕様に従って,分数の四則演算を行うプログラムを作成せよ。 [仕様1] 以下のような構造体を定義し,分数のデータ構造に利用すること。 struct fraction{ int parent; /* 分母(denominator) */ int child; /* 分子(numerator) */ }; [仕様2] 以下の実行結果となるようなプログラムを作成せよ。 プログラムの実行結果↓ 1つ目の分数を入力して下さい。 3/4 ←キーボードより入力 2つ目の分数を入力して下さい。 1/4 ←キーボードより入力 演算方法(1.加算,2.減算,3.乗算,4.除算)を入力して下さい。 2 ←キーボードより入力 3/4 - 1/4 = 1/2 計算結果は約分をして表示 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: 7月9日 [5] その他の制限:ポインタ変数、データ構造まで習いました よろしくお願いします
656 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 23:41:48 ] >>651 特に指示はないからこっちに任せただと思う だから左上からスタートで ******** * ****** * * * * * * * * * **** * * * ******** >>649 ifかswitchでそれをつくろうかと思ったがさすがにふざけてると思われそうなのでやめた
657 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 23:51:27 ] >>656 日本語でおk。偶数パターンを出力してからものを言え
658 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 00:02:35 ] >>657 すまなかった 6 4 2の順で ****** * **** * * * * * * ****** **** * * * **** 2は正方形でも右の形でもどっちでもいい ** ** ** *
659 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 00:34:07 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): yonex1.cis.ibaraki.ac.jp/~yonekura/Socket-base/Sock-prog9.html [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.3.4 [3.3] 言語:C [4] 期限:2010年7月11日 [5] その他の制限: よろしくお願いします。
660 名前:デフォルトの名無しさん [2010/07/09(金) 01:28:45 ] 次のプログラムを、分かりやすく疑似コードに直してください!! 分かり易ければOKです! static int coin[] = {1, 5, 8, 10, 15}; int main(void){ int *nr, *hist, money, c, n, new; printf("input money : "); while (scanf("%d", &money) != 1) { scanf("%*[^\n]"); printf("input money again : "); } scanf("%*[^\n]"); nr = (int *)malloc((money + 1)*sizeof(*nr)); if (nr == 0) { perror("calloc"); return 1; } hist = (int *)calloc(money + 1, sizeof(*hist)); if (hist == NULL) { perror("calloc"); goto err; } for (n = 0; n <= money; n++) nr[n] = n; for (c = 0; c < sizeof(coin)/sizeof(*coin); c++) for (n = coin[c]; n <= money; n++) { new = nr[n - coin[c]] + 1; if (new < nr[n]) { nr[n] = new; hist[n] = c;} } printf("total number : %d\n", nr[money]); printf("coins : "); for (n = money; n > 0; n -= coin[hist[n]]) printf("%d ", coin[hist[n]]); printf("\n"); free(nr); free(hist); return 0; err: free(nr); return 1; }
661 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 02:34:47 ] >>648 > 2〜9の数字を入力 2はどうなのよ、2の時は?
662 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 04:46:59 ] >>602 お願いします!!
663 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 07:59:57 ] >>655 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10795.txt
664 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 16:09:48 ] >>661 星は正方形で 渦巻きは>>658 でおねがいします
665 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 20:03:15 ] codepad.org/hm0UfG3p
666 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 20:21:22 ] > codepad.org ↑便利だ。 コンパイルまでしてくれる必要は無いんだけど、 もっと色々な言語(Pascalとかverilogとか)貼り付けて、 整形して表示してくれるアプローダ無いかな?
667 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 20:26:18 ] ideone.comは?整形して表示の意味がよく分からないけど
668 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 20:40:12 ] >>667 ありがとう。これでいいです。 こんなんとかPascal似の言語とか貼り付けたかったのです。 ideone.com/zrjGj
669 名前: ◆QZaw55cn4c mailto:sage [2010/07/09(金) 22:04:40 ] ideone.com は対応している言語が多いけれども、コンパイルエラーの表示に難があるからなあ。 ideone.com/ffzm5 正解は、 transform(radians.begin(), radians.end(), sines.begin(), (double (*)(double))sin);
670 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 22:41:13 ] 整数を入力:18 1 2 3!? (中略) 13!? 14 15!? 16 17 18!? こんなプログラムはどうやって書くんですか?
671 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 22:48:40 ] さぁ、世界のナベアツ先生に聞いてちょっ
672 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 22:49:53 ] 誘導されてきたんだなぁ。ってか宿題だったのか。 次は>>1 を読もう。
673 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 22:57:56 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):3の付く数字と3の倍数の時にアホになりなさい。 [3] 環境 [3.1] OS: (Windows/Linux/等々)windows [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)Borland C++ 5.5.1 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 20日(火)
674 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:19:04 ] >>673 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10796.txt
675 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:27:09 ] >>674 こうすれば文字列操作が不要になるんでは。 int isAho(int n) { if (n % 3 == 0) return 1; while (n) { if (n % 10 == 3) return 1; n /= 10; } }
676 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:28:12 ] >>675 最後にreturn 0;するの忘れてた。
677 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 23:45:55 ] 30台もどうかとは思うが300、3000台にもなるとアホばかりで疲れるわ・・・