1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)] あなたが解けない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++の宿題を片付けます 116代目 pc11.2ch.net/test/read.cgi/tech/1222813731/
669 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:48:54 ] >>667 調べたい整数をユーザに入力させたい、ってとこか? それならこんなかんじ。 int main(int argc, char *argv[]) { int *a; int n, i, g; printf("調べたい整数の数は?: "); scanf("%d", &n); a = malloc(n * sizeof(int)); for (i = 0; i < n; i++) { printf("%d 個目の整数を入力してください: ", i+1); scanf("%d", &a[i]); } g = a[0]; --- >>613 と同様 -- free(a); return 0; }
670 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:01:12 ] >>612 解答あり >>600 の(2)できる方おねがいします
671 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:10:20 ] >>663 それでお願いできますか?
672 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:14:23 ] >>665 理解できなかったのならなぜ質問しなかったのだろう? その感じだと実際に動作するコードを書くのではなく アルゴリズムや疑似コードをレポートにして提出しろってことなのか?
673 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:19:45 ] >>668 余計なお世話だけど、 time って関数があるから time という変数名は避けたほうがいいかも。 fp = fopen("file.txt", "w"); fprintf(fp, "%s\n", time); while (fgets(data, sizeof(data), stdin) != NULL) { fprintf(fp, "%s", data); } fclose(fp); とすれば、Ctrl-D を入力するまで読み取り続けます
674 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:21:11 ] >>671 よく考えたら、表示のときだけマルチバイト文字使って、内部データは 普通の int とか char とか好きなので行けるわ もう一点確認だけど、どっちからどっちに球が飛んでいけばいいの?
675 名前:デフォルトの名無しさん [2008/11/12(水) 16:22:19 ] 生活安全課のボツボツキモデブ●創価●警官名言集www 「俺の脅迫のおかげで家から出れなくした。俺の手柄だ!」 「昼間は市役所のパトロール隊を使う。夜は消防団を使う。」 「●指導●じゃない、パトロールを●お願い●してるだけだ。人権侵害行為は俺の責任じゃない!」 熊本隆談www
676 名前:デフォルトの名無しさん [2008/11/12(水) 16:23:34 ] >>669 : In function ‘main’: :22: 警告: incompatible implicit declaration of built-in function ‘malloc’ :24:8: 警告: 不明なエスケープシーケンス '\$' だそうです
677 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:29:14 ] >>676 #include <stdlib.h> を追加。 それから a = (int *)malloc(n * sizeof(int)); と、キャストしたほうがいいかも。 下のは知らん。日本語の文字列が正しく読まれてないのかもしれない。 適当に文字列を半角英数字のみにしてみて。
678 名前:デフォルトの名無しさん [2008/11/12(水) 16:36:38 ] テスト中orz 1.から100までの整数で3の倍数の整数の合計を求めるプログラムをFor文を利用して作ってください。 2.1の問題をForの変わりにWhile文で頼みます。 余裕があれば、 3.タクシー料金:最初の2kmまで650円 以後400mごとに90円としたとき、乗車距離(km)を入力し、 料金求める。 おねがいします。
679 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:41:59 ] >>678 テストぐらい自分でやれ!
680 名前:デフォルトの名無しさん [2008/11/12(水) 16:42:11 ] >>816 /*1.*/ #include <stdio.h> int main(void){ int i, sum = 0; for(i = 1; i <= 100; i++){ if (i % 3 == 0) sum += i; } printf("合計は %d\n", sum); } /*2.*/ #include <stdio.h> int main(void){ int i = 1, sum = 0; while(i <= 100){ if (i % 3 == 0) sum += i; i++; } printf("合計は %d\n", sum); } /*3.*/ #include <stdio.h> int main(void){ double kyori; int ryokin; printf("乗車距離(km): "); scanf("%lf", &kyori); if (kyori < 2) ryokin = 650; else ryokin = 650 + (kyori / 400) * 90; printf("料金は %d円です。\n", ryokin); }
681 名前:639 mailto:sage [2008/11/12(水) 16:43:13 ] >>673 ありがとう!ありがとう!改行文字も出来ました。 でもCtrl-Dを入力せずに、貼り付けた文字の最後まで行ったら自動で終了するのは出来ないんでしょうか? >>668 に書いた数値データ、何百行もあるのですが、最後の行まで読み込んだら終了させたいです。
682 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:59:53 ] >>667 出来ました! マジでありがとうございます
683 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:02:22 ] >>681 何をもって読み込みを終了するかが決められないからムリかな。 >>673 のコードでは、EOF (Ctrl-D) をもって終了としてるから、たとえば echo "cputime\ndata1\ndata2" | ./a.out などとすることは可能。 しかし一体何をしたいんだ? その数値データはテキストファイルに保存されてるの? それなら CPUtime だけを入力して、数値データはそのテキストファイルから読み取ればいいわけだけど。
684 名前:デフォルトの名無しさん [2008/11/12(水) 17:09:50 ] >>680 ラスト10min ありがとう。たすかりました。
685 名前:639 mailto:sage [2008/11/12(水) 17:14:19 ] >>683 <<しかし一体何をしたいんだ? これ、大学の数値実験で出た何百行もの値(SPICEっていう電気回路のCADツールを使って出た値)で、この数値をコピーして、gnuplotでグラフを書きたいんだ。 @SPICEからデータ(数値)をコピーして取り出す。 Aテキストファイルに貼り付ける。 B作成したテキストファイルからgnuplotでグラフを描く。 この一連の作業をプログラムで作りたかったんだ…。 一応数値データも要るので、gnuplotに直接書き込んで終了という訳にもいかず、テキストファイルも残したいんです。
686 名前:デフォルトの名無しさん [2008/11/12(水) 17:29:19 ] すみませんがどなたか>>584 をやって頂けないでしょうか頂けないでしょうか。 >>586 さんのいうとおりisalphaとtoupperを使えばいいのはわかっているんですが、 どうやってそれをソースに書きかえればいいのかまったくわからないので困っています。 今日が締切なのでお願いします。
687 名前:デフォルトの名無しさん mailto:587 [2008/11/12(水) 17:44:51 ] >>587 です 亀ですが>>592 の方ありがとうございました 嫌いと言いながらやってくれる優しさに惚れた また明日結果報告させて頂きます
688 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:46:37 ] 宿題でお聞きしたいのですが…問題は以下のようなものです。 「直行座標系X-Yにより定められている平面上で、0 < X,Y < 1の正方領域をX,Y方向にそれぞれ(n1 - 1)個、(n2 - 1)個に等分割して、その座標を出力する。」 自分で、以下のようなプログラムを作ってみました。 #include<stdio.h> #define n1 7 #define n2 7 int main(){ double X[n1], Y[n2]; int i, j; for(i = 0; i < n1; i++){ *(X + i) = ((1 / (n1 - 1)) * (double)i); } for(i = 0; i < n2; i++){ *(Y + i) = ((1 / (n2 - 1)) * (double)j); } for(i = 0; i < n1; i++){ for(j = 0; j < n2; j++){ printf("(%lf, %lf) ", *(X + i), *(Y + j)); } printf("\n"); } } すると、(0.0000000, 0.0000000)の座標で埋め尽くされてしまいました… 玄人の皆様、お助け下さい…
689 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:04 ] >>688 double にキャストする位置がおかしい。 - *(X + i) = ((1 / (n1 - 1)) * (double)i); + *(X + i) = (1.0 / (n1 - 1)) * i; Y も同様。
690 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:53:46 ] >>688 1/(n1 -1) ← 分母分子ともに整数だと、整数の除算が行われるから 1.0/(n1 - 1) とか 1/(n1 - 1.0) とか、どっか double にしないと暗黙の型変換は起こらない あと *(Y + i) = ((1 / (n2 - 1)) * (double)j); ← i でループ回してるんだkら (double)j じゃなくて i だな
691 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 18:08:49 ] >>689 ,>>690 どうもありがとうございます、そういうことなのですか(^^; 皆さんに教わらなければ、多分あと2日くらいは悩んでたと思います。 また質問させて頂く時もあるかと思いますので、その時はまたよろしくお願いします。
692 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 19:05:39 ] [1] 授業単元 プログラミング演習 [2] 問題文: 10個のデータをキーボードから適当に入力し(ランダムなデータ),1次元配列に格納する. バブルソート法により,小さい順に並べ替えるプログラムを作成しなさい. 結果をソートの経過を全てprintfで表示すること. [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年 11月19日 13時 [5] その他の制限: 関数やポインタはまだ習ってないです。よろしくお願いします。
693 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:29:20 ] [1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): 0度から360度までのSin(x)の値を文字コード*を使ってグラフを表示するプログラムをC言語で作成せよ。 実行結果の例をアップローダーに貼り付けました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8012.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 [3.3] 言語: C [4] 期限: 2008年11月13日 [5] その他の制限: ファイルの入出力まで習いました。 よろしくお願いします。
694 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:30:58 ] >>491 まだ間に合うのかな 風向きとか、スキルとかまだ実装してないけど、イメージとしてこんな感じでよいの? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8013.txt
695 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:35:13 ] >>674 特に指定はされていませんので作りやすいもので結構です
696 名前:694 mailto:sage [2008/11/12(水) 20:56:48 ] >>695 ちょっと改造して、いちおう2個のパラメータとるようにしてみたけど、 やっつけのきたねーコードだw kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8014.txt
697 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:24:45 ] >>696 はい、大丈夫です ありがとうございます!
698 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:48:47 ] [1] 応用プログラミング演習 [2] wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意) [3] 環境 [3.1] OS: Windows [3.2] 開発環境:VC++ 6.0 [3.3] 言語:C言語 [4]今月中 [5]制限なし ただの授業なのですが、研究で使うレベルのプログラムなのでかなり難しいです↓ ただ原理としては簡単らしいのですが、wavを扱ったことがないのでチンプンカンプンです。 1週間ずっと考え続けても無理でした(ノД`) どなたか手伝ってくれたら嬉しいです。
699 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:52:42 ] >>698 >wavファイル(音楽ファイル)を読み込んでFFTを施し、バンドパスフィルタをかけてIFFTし、そのwavファイルを出力せよ。(バンドパスの領域は任意) これだけで作れたらすごいわ
700 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:21:42 ] まず、ウインドウ関数を決めないとね。
701 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:00:30 ] >>600 (2)ですけどリスト構造に格納する際に、次数の大きい順にしておいて先頭から順に出力ということはなんとなく分かったのですがそこから進めない・・・
702 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:25:19 ] >>698 どのあたりまでライブラリの使用を認められてるか書け wavファイルの読み取りからやらされるのか?
703 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:38:30 ] [1]情報処理 C [2]組み合わせn Cm を計算する関数を作成しなさい.main関数にてキーボードから2つ?然数n,mを 読み込み後,作成した関数を呼び出しその動作を確認しなさい. 但し,以下の条件を満たすものを作成すること @2つの?然数は1回のscanfで読み込むこと.(データ区切りはスペース) Ascanfはmain関数側に実装すること. B入力はn mの並びにすること. C作成した関数側で「n>=mを満?しない時」,「n,mが?然数ではないとき」は n Cm =0とな るようにしなさい. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年 11月中 [5] その他の制限: Cのいい作り方を思いつきません…
704 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:45:05 ] 4だけ? if (n < m || n < 0 || m < 0) return 0; ってするだけじゃないのか? (自然数に0を含む感じになってます)
705 名前:デフォルトの名無しさん [2008/11/13(木) 00:24:46 ] ∴ ∵ ∴ ∴∵∴ ∴ ∴∵∴∵∴∵∴∵∴∵∴∵∴∴∵ ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∴∵∴∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵/ ⌒ヽ∴∵∴∵∴ ∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| | |∴∵∴∵ ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪ / ノ∴∵∴∵∴∵ .. ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵| ||∵∴∵∴∵ .∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∪∪∴∵∴∵∴∵ .∵∴∵∴∵∴∵∴∵:(・)∴∴.(・)∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∵∴∵∴∵∴∵∴∵∴/ ○\∵∴∵∴∵∴∵∴∵∴∵∴ ..∵∴∵∴∵∴∵∴∵/三 | 三ヽ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ . ∴∵∴∵∴∵∴∵ | __|__ │∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ tanasinn .∵∴∵∴∵∴∵∴∵| === │∵∴∵∴∵∴∵∴∵∴∵∴ .∵∴∵∴∵∴∵∴∵\___/∵∴∵∴∵∴∵∴∵∴∵∴ ..∴∴∵/ ̄.. \∴∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∴∵∴/ ,. i ∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∴∵∴| /.| |.∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∵∴| | :| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ ∴| | |::| |.∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ ∴| | |∵U∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴ | | |∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵ / / / ∵∴∵∴∵∴∵∴∵∴∵ ∵ / / / ∴∵∴∵∴ ∴ .しし’ ∵
706 名前:639 mailto:sage [2008/11/13(木) 01:23:09 ] >>639 + >>668 >>681 >>685 なんだけど、レスが無いので分からないorスルーになっているということだとは思いますが((´;ω;`)) 最後に一つだけ質問お願いします。 >>673 の「Ctrl-Dを入力するまで読み取り続けます」なんですけど、「Ctrl+d(コントロールキー+d)」と入力しても「^d」と画面に出力されるだけで書き込みが終了しません。 「コントロール + D(大文字)」、「コントロール + マイナス + D」などなどあり得なさそうな入力も試しましたが、終了しませんでした。 僕は一体どうすれば? アホな質問だったらごめんよぉ(´・ω・`)
707 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:24:48 ] >>706 ctrl + z にしてみろ
708 名前:さそり [2008/11/13(木) 01:30:20 ] [1] 授業単元:ファイル読み込み [2] ファイルを読み込んで.hファイルに書き込むのが狙いなんですが sample.txtテキストファイルの中身が kina="mikan"+"momo" shika="hidemaru"*100+"keiko" と50行ぐらい続いていて左辺の値とダブルクオートくくりの 文字を抽出してsample.hに一文字取ったら改行して書き込んでいくのですが どうしたらいいでしょうか??困っておりまして皆様のお力をお借り したいと思っています。どうぞよろしくお願いします。 [3] 環境 [3.1] OS:ソラリス [3.2 [3.3] 言語:C [4] 期限:今週中 [5]
709 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:46:00 ] 日本語が謎すぎる!
710 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:47:17 ] 今日はあむちゃんあるんですかね
711 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:18:46 ] >>699 すみません。。 これ以上どう詳しく書いたらいいのかわかりません(ノД`) >>700 窓関数はなんでもいいです。 おそらくハミングが一番いいのかと思ったのですが… >>702 やり方は自由です。 とにかく動いたらいいのでライブラリの制限はありません。 はい。。wavの読み取りからやらないといけません。 まずそこから躓いています。 wavファイルを一次元配列に格納することはできたのですが(たぶん…)、 それをどう処理すべきかがわかりません。 悪戦苦闘して調べまくったのですが、なかなかできず、ここに助けにもらいに来た次第です。
712 名前:デフォルトの名無しさん [2008/11/13(木) 03:15:24 ] [1]情報処理 C [2]ユーザが調べたい整数n個の数の最小公倍数を求めよ 手順は、もし、ユーザが12と8と9と48のLCMを調べたい時 @LCM(12,8)=24 ALCM(LCM(12,8),9)=LCM(24,9)=72 BLCM(LCM(12,8),9),48)=LCM(72,48)=144 といった形である これを調べたい数を自由に変えることができ、尚且、ユーザが調べたい整数の個数でも対応出来るように作れ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日の23時59分 [5] その他の制限: お願いします
713 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 04:36:55 ] >>712 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8015.c
714 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 06:43:21 ] >>708 その入力例に対する出力の例を書け 日本語そのまま取ると sample.h は m i k a n m o n o h i d e m : になるがよいのか?
715 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:40:37 ] 600の(2)の期限せまってるのでどうかお願いします kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8016.txt 似たようなのは見つけたのですが・・・
716 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:50:18 ] >>703 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8017.c 一部余分なコードあり(コメントアウトで無効にしてある) パスカルの三角形を使用しているため、階乗で求めるやり方ではない。
717 名前:716 mailto:sage [2008/11/13(木) 10:51:39 ] > n Cm を計算する関数を作成 もしていないんで、適当にnとmを受け継いだら結果を返す仕様に変更してちょっ。
718 名前:587 [2008/11/13(木) 11:01:08 ] >>592 問題なく読み込めました 助かりました、有難うございます!
719 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 11:03:51 ] >>715 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8018.txt
720 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:01:00 ] [1] 授業単元:C++ [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8020.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C++ [4] 期限:2008年11月20日まで よろしくお願いします。
721 名前:デフォルトの名無しさん [2008/11/13(木) 12:01:07 ] >>713 hhh.c: In function ‘main’: hhh.c:29: 警告: ignoring return value of ‘realloc’, declared with attribute warn_unused_result というエラーがでました……
722 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:11:27 ] >>721 gcc -Wall (チェックが厳しいオプション) でコンパイルしても出て何もこないぞ それにそれはエラーじゃなくて警告
723 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:32:33 ] >>708 たぶん違う気がするけど >>714 の通りに1文字1行で出力させるとこうなる #include <stdio.h> int main() { FILE *fp; char *p, buf[256]; int lhs, in_quote; fp = fopen("sample.txt", "r"); if (fp == NULL) { printf("Cannot open sample.txt\n"); return 1; } while(fgets(buf, 256, fp) != NULL) { lhs = 1; in_quote = 0; for(p = buf; *p != '\0'; p++) if (*p == '=') lhs = 0; else if (*p == '"') if (in_quote) in_quote = 0; else in_quote = 1; else if (lhs || in_quote) printf("%c\n", *p); } }
724 名前:デフォルトの名無しさん [2008/11/13(木) 12:35:53 ] なんどもやってるんですが、この表示がでて、この先に進まないんです……
725 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 12:37:18 ] >>724 は>>722 宛
726 名前:デフォルトの名無しさん [2008/11/13(木) 13:23:00 ] [1] 授業単元:C言語 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual C 2008 [3.3] 言語:C [4] 期限:明日まで 七個の文字列の長さ(文字数)をカウントして、文字列とともに表示せよ。 ただし、ポインタを使用して処理すること カウントの仕方がわかりません・・・ お願いします。 例 #include<stdio.h> int main(){ char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL};
727 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:27:10 ] >>726 #include<stdio.h> int main(){ char *name[] ={"Izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada",NULL}; char *p; int i, n; for(i = 0; i < 7; i++){ n = 0; for(p = name[i]; *p != '\0'; p++) n++; printf("%s:%d\n", name[i], n); } return 0; }
728 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:27:32 ] >>724 >>722 じゃないが 先に進めないってどういうことだよ? ロードモジュールはできているはずだ。
729 名前:639 mailto:sage [2008/11/13(木) 13:43:00 ] >>707 出来たぅおありがとう!
730 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:43:34 ] コンパイルだけして実行してないんじゃないの?
731 名前:デフォルトの名無しさん [2008/11/13(木) 13:49:12 ] >>727 ありがとうございます! *p != '\0'が何を表してるのか教えてくれるとありがたいです!
732 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 13:53:03 ] >>731 文字列の最後=¥0だから それをみている
733 名前:727 mailto:sage [2008/11/13(木) 13:54:39 ] >>731 Cの標準的な約束事で、文字列の配列の最後の文字の次に '\0'(NULL文字)を置くことになっている。 *p != '\0' は、文字の終りに来ていない間繰り返すという意味 *p はポインタ p が指している値(文字)だっていうのはいいんだよね?
734 名前:デフォルトの名無しさん [2008/11/13(木) 14:03:03 ] >>733 丁寧な説明ありがとうございます! '\0'はNULL文字のことなんですね! やっとわかりました。
735 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 14:14:25 ] >>734 それだけかよw
736 名前:デフォルトの名無しさん [2008/11/13(木) 14:26:23 ] >>724 たった今動きました こちらの凡ミスだったようです。申し訳ございません ですが、今度はinput >が限りなく続いて終わらないです…… というより、結果がでてもプログラムが終了しないのです
737 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:23:25 ] [1] 授業単元:数値解析 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8023.txt [3] 環境 [3.1] OS:WindowsXP [3.2] gccなど [3.3] 言語:Cのみ [4] 期限:11月17日まで [5] その他の制限 特に無いですが、角度が45度から増大していく現象の原因が分かれば大丈夫です。 dtの値を小さくすることで誤差は小さくなりますが、ルンゲクッタ法としては おかしい(精度的に)と思うので・・・。よろしくお願いします。
738 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:13:59 ] f1=dt*f(X0,v); g1=dt*q(X0,v); f2=dt*f(X0+f1/2.0,v+g1/2.0); g2=dt*q(X0+f1/2.0,v+g1/2.0); f3=dt*f(X0+f2/2.0,v+g2/2.0); g3=dt*q(X0+f2/2.0,v+g2/2.0); f4=dt*f(X0+f3,v+g3); g4=dt*q(X0+f3,v+g3); X0+=(f1+ 2.0*f2 +2.0*f3+ f4)/6.0; v+=(g1+ 2.0*g2+ 2.0*g3+ g4)/6.0;
739 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 17:14:34 ] double q(double X0, double v){ return -g*sin(X0)/l; } double f(double X0, double v){ return v; }
740 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 18:58:45 ] >>712 >>736 >>722 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8025.c 最初に入力する数値の個数を決める仕様に変更。callocを使用。
741 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:00:03 ] >>712 >>722 >>736 ttp://www.bohyoh.com/CandCPP/C/Library/calloc.html > その領域は、すべてのビットが0で初期化される。
742 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:09:45 ] >>722 もっと厳しくして見やがれ
743 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:26:38 ] >>740 結果だけでよいなら領域確保必要すらないよな main() { int l = 1, n;; while(1){ printf("数値を入力してください:"); scanf("%d", &n); if(n == 0) break; l = lcm(l, n); } printf("最小公倍数は %d です。\n", l); } ↑lcm は >>740 と同じものを利用、'0' 入力で入力終了。
744 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 19:30:27 ] >>703 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8026.c
745 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 21:36:51 ] >>703 もし数字以外、小数を入力した場合など、自然数に該当しないものが入力されたらって言うなら 文字列として厳密に判別する仕組みを取り込んで、条件をクリアしたらatoi()でint型に 代入するとか。
746 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 22:44:18 ] >>566 お礼が遅れてすみません・・・ 早い返答ありがとうございました
747 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 23:52:14 ] 今来た。 未解決問題ってどれ?
748 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 00:17:13 ] >>747 >>720 >>698
749 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 00:46:42 ] >>747 >>692-693
750 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 01:13:30 ] >>692 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8028.c
751 名前:さそり [2008/11/14(金) 01:16:07 ] 708番で質問したさそりです。 >>714 >>723 ご返信ありがとうございます。 テキストファイル読み込みをした後に.hファイルに 書式付で書き込むのですが. たとえば PIKA1="P_1"+"P_3" CILA="L_SAM"*1000"ERIKA" これが100行ぐらい続くファイルがあるとして 左辺の値とダブルクオートでくくられた文字を抽出して .hファイルに書き込むのですが上記の場合だと PIKA1,P_1,P_3 CILA,L_SAM,ERIKAをとりだして P_MAN: PIKA P_MAN: P_1 P_MAN: P_3 P_MAN: CILA P_MAN: L_SAM P_MAN: ERIKA という形で.hファイルに出力させたいのです。 今非常に困っていましてどなたか助けてください。 どうぞよろしくお願いします。 なお左辺と右辺は必ず=で区切られています。 左辺の値はダブルクオートで区切られていない。 基本的に始まりのダブルクオートが見つかって、終わりのダブルクオート が見つかった場合のくくり文字を抽出するようにする。
752 名前:723 mailto:sage [2008/11/14(金) 01:27:48 ] >>751 P_MAN: ていうのがどっから湧いてきたのか不明だから無視したけど、 基本的には >>723 をちょこっと改造すればいける kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8029.txt
753 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 01:41:41 ] >>751 #include<stdio.h> #define ONELINE_MAX 1024 int xxx(FILE *fp_in, FILE *fp_out){ char oneline[ONELINE_MAX+1+1], word[ONELINE_MAX+1], quote[2]; int i, n; while(fgets(oneline, sizeof(oneline), fp_in)){ for(i=0;;){ if(sscanf(&oneline[i], "%*[^\"]%n%1[\"]", &n, quote)==1) i+=n; if(sscanf(&oneline[i], "\"%[^\"]%1[\"]%n", word, quote, &n)==2){ i+=n; fprintf(fp_out, "P_MAN: %s\n", word); }else if(sscanf(&oneline[i], "\"%1[\"]%n", quote, &n)==1){ i+=n; }else{ break; } } } return 0; } int main(void){ xxx(stdin, stdout); return 0; }
754 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 02:09:06 ] >>660 「その」授業でPCに触れてないだけでは。
755 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:01:01 ] ちょっといいですか? ヌル文字(\0)って0と同じ扱いですか? 0=\0っていうことですか?
756 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:05:49 ] ですぅ
757 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:24:43 ] 空文字は文字コードは0x00に割り当てられてますからね、 まぁコードを参照する値は0ですな。
758 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:52:41 ] そもそも\0は八進法で文字コードを指定する書き方。 '\123' == (char)0123とか他の値でも成り立つ。
759 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 04:14:53 ] \0の\は8進数を意味していたのか・・・ふむふむ、なるほど メモメモ
760 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 04:35:39 ] \r とか \n とか \t とかね。
761 名前:デフォルトの名無しさん [2008/11/14(金) 05:41:32 ] 以前>>408 で書き込んだものです。 そのときに作って頂いたプログラミングで数箇所訂正部分を言われたのでその訂正をお願いします。 その指摘箇所とは2行目の(int *, int *, int *);の部分と26行目の*in_val, int *odd_tally, int *even、 そして35行目のint *oddと40行目のint *evenです。 作って頂いた方はCプログラミングと言っていたのでそれが問題なのではないかと思っています。 今自分が受講しているクラスはC++なのでどなたかそれ用に作り変えて頂けないでしょうか。 一応前回の問題なども載せておきます。 [1] 授業単元:C++ [2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7970.txt [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: Visualstudio 2005 [3.3] 言語:C++ [4] 期限:2008年11月14日 何分初心者でわからないことが多いのでお手数ですがお願いします。
762 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 06:49:37 ] >>761 こうかな kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8030.txt
763 名前:デフォルトの名無しさん [2008/11/14(金) 07:17:37 ] >>762 お早い返信助かります。 自分ではいまいち分からないのですがこれで提出させて頂きます。 何度もありがとうございます。
764 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 07:18:59 ] >>763 ポインタ私を参照渡しに変えてるよ 入出力の部分をもうちょっと c++ っぽくするとこうなる kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8031.txt
765 名前:デフォルトの名無しさん [2008/11/14(金) 07:40:00 ] >>764 わざわざありがとうございます。 後者のほうが自分にも分かりやすかったのでそちらを使わせて頂きます。 お忙しい中本当にありがとうございます。
766 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 10:43:47 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): キーボードから整数を入力し,それを配列に順に代入し,その後,和と平均を求めるプログラムを作りなさい -整数の入力は負の数が入力されたとき終了 ・配列は最大100個までの入力に対応できるようにする [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月17日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
767 名前:デフォルトの名無しさん [2008/11/14(金) 10:50:28 ] >>766 #include <stdio.h> int main(void){ int i, n, sum, a[100]; i = 0; do { scanf("%d", &a[i]); } while(a[i++] >= 0 && i < 100); n = i; sum = a[0]; for(i = 1; i < n; i++) sum += a[i]; printf("和: %d, 平均: %lg\n", sum, (double)sum / (double)n); return 0; }
768 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 10:59:48 ] >>766 #include <stdio.h> int main() { int i, sum = 0, num[100], n = 0; double ave; for(i = 0; i < 100; i++){ printf("整数を入力:"); scanf("%d", &num[i]); if(num[i] < 0) break; n++; } for(i = 0; i < n; i++) sum += num[i]; ave = (double) sum / n; printf("合計:%d 平均:%f\n", sum, ave); return 0; }
769 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:06:44 ] >>767 大変助かりました。 本当に有難う御座いました。
770 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:08:40 ] >>767-768 大変助かりました。 本当に有難う御座いました。
771 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:27:13 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・初項a0で公差dの等差数列の一般項anは an = an-1 + d で表すことができる ・a0とdを入力し,a0〜a10までの各項を配列a[0]〜a[10]に求め,それを下の実行結果例のように表示するプログラムを作りなさい 実行結果例 数字は右揃えでお願いします。 a[ 1] = 1 a[ 2] = 1 a[ 3] = 2 a[ 4] = 3 a[ 5] = 5 a[ 6] = 8 a[ 7] = 13 a[ 8] = 21 a[ 9] = 34 a[10] = 55 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月17日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
772 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:36:41 ] >>771 その結果例、等差数列じゃなくてフィボナッチ数列だろw 実際はどっちをやりたいんだ? ↓ は等差数列 #include <stdio.h> int main() { int i, d, a[11]; printf("初項:"); scanf("%d", &a[0]); printf("公差:"); scanf("%d", &d); for(i = 0; i <= 10; i++) a[i + 1] = a[i] + d; for(i = 0; i <= 10; i++) printf("a[%d] = %d\n", i, a[i]); }
773 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:39:45 ] >数字は右揃えでお願いします。 らしいので printf("a[%d] = %d\n", i, a[i]); より printf("a[%2d] = %d\n", i, a[i]); ※ 実例の右辺 左揃えだけど… そっちも右に揃えるのかな?
774 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:42:47 ] >>772 すいません、お手数ですが、フィボナッチ数列の方もお願いします。
775 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:44:26 ] >>773 実例の右辺も右揃えでお願いします。
776 名前:デフォルトの名無しさん [2008/11/14(金) 11:47:50 ] [1] 授業単元: データ構造 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8032.txt [3] 環境 [3.1] WindowsXP [3.2] VC 6.0 [3.3] C [4] 期限: 2008.11.20 よろしくお願いします。
777 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:01:30 ] >>774 右揃えにしたいところは %d → %2d (2桁の場合) や %3d (3桁の場合) にすれ ↓ フィボナッチ #include <stdio.h> int main() { int i, a[11]; a[1] = 1; a[2] = 1; for(i = 3; i <= 10; i++) a[i] = a[i - 1] + a[i - 2]; for(i = 1; i <= 10; i++) printf("a[%2d] = %3d\n", i, a[i]); return 0; }
778 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:05:24 ] >>777 詳しく教えていただき本当に有難う御座いました。 大変助かりました。
779 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 13:14:16 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・10個の整数を入力し,それを配列a[0]〜a[9]に入れ,その後,その中の最大値を求めて表示するプログラムを作りなさい [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月17日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
780 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 15:49:49 ] #include <stdio.h> int main(void) { int a[10], i, max; for(i=0; i<10; i++) scanf("%d", &a[i]); max = a[0]; for(i=1; i<10; i++){ if(max < a[i]) max = a[i]; } printf("max = %d\n", max); return 0; }
781 名前:デフォルトの名無しさん [2008/11/14(金) 16:56:51 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):hpgoda.eng.niigata-u.ac.jp/lecture2008/Cprogramming/6/6.html 一番下 [3] C [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 習ったもの 配列 if [4] 期限:なるべく早くお願いします
782 名前:デフォルトの名無しさん [2008/11/14(金) 17:00:16 ] 失礼します、質問です。 1 2 3 4 5 3 7 5 6 のようなcsvデータの1〜5行目を読み合計を出します。 その後連続で、 2〜6、3〜7、4〜8・・・と 読み込んで合計を計算していくプログラムを教えてください。 よろしくお願いいたします。
783 名前:639 mailto:sage [2008/11/14(金) 17:02:30 ] 6 名前:639[sage] 投稿日:2008/11/13(木) 01:23:09 >>639 + >>668 >>681 >>685 たびたびすいません。本当に最後の質問を。 以下のプログラムwhileの部分、Ctrl-Z を入力するまで読み取り続けるのを、 「Enterキーを入力するまで読み取り続ける」ようにするにはどうすればできますか? #include<stdio.h> #include<iostream> #include<string> using namespace std; int main(){ char time[100], data[10000]; char filename[20]; FILE *fp, *plot; cout<<"filename?"<<endl; gets(filename); cout<<"CPUtime?"<<endl; gets(time); cout<<"data?"<<endl; gets(data); /* fp = fopen(filename,"w"); fprintf(fp,"#%s\n",time); fclose(fp);*/ fp = fopen(filename, "w"); fprintf(fp, "#%s\n", time); fprintf(fp,"#%s",data); while (fgets(data, sizeof(data), stdin) != NULL) { fprintf(fp, "%s", data); } }
784 名前:692 mailto:sage [2008/11/14(金) 17:06:34 ] >>750 ありがとうございます
785 名前:755 mailto:sage [2008/11/14(金) 17:16:13 ] どうもありがとうございましたm(_ _)m 数字の0と塗る文字を比較する部分で変な結果になったのでした。
786 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:12:50 ] >>781 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8033.txt
787 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:18:35 ] >>782 CSVって言ってるけど、1行1個の数値だけならこんな感じか #include <stdio.h> main() { int a[5], n = 0, sum = 0; while(scanf("%d", &a[n % 5]) == 1) { sum += a[n % 5]; if (n >= 4) { printf("sum (%d - %d) = %d\n", n - 4, n, sum); sum -= a[(n - 4) % 5]; } n++; } }
788 名前:デフォルトの名無しさん [2008/11/14(金) 18:56:12 ] >>787 782です。 これを1000万行ほど連続でやりたいんです。
789 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:59:51 ] 1000万行ほど連続で処理できなかったから文句言ってんだよね
790 名前:デフォルトの名無しさん [2008/11/14(金) 19:02:58 ] 782です。 実際は256個のデータの連続計算なんですが、 ファイルサイズが10000行を超えたあたりで エラーが出て計算できなくなってしまいます。 どうしたらいいでしょうか?
791 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:03:56 ] [1] 授業単元: プログラミング [2] 問題文: キーボードから打ち込んだ数字が完全数で あるか調べるプログラムを作る。 [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] 言語:C言語 [4] 期限: 11月15日12時まで [5] その他の制限: 特になし
792 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:10:14 ] >>790 OSはなに? 1000万?
793 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:21:38 ] >>790 OSレベルの問題ってことはないの? >>787 は領域の動的確保とかやってないから、 n が溢れる (21億くらい?) までは原理的に動作変わらないよ $ yes 1 | ./add sum (0 - 4) = 5 : sum (120000000 - 120000004) = 5 : まだ続いてる。
794 名前:デフォルトの名無しさん [2008/11/14(金) 19:23:41 ] [1] 授業単元: [2] 入力された各行の先頭の単語だけを表示するプログラムを作れ。 [3] 環境 [3.1] OS:mac [3.2] gcc [3.3] c [4] 期限: なし [5] なし お願いします
795 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:32:05 ] >>794 「単語」にどういう文字が含まれていてよいかに依存するが、a-zA-Z0-9- に限定すればこんな感じ #include <stdio.h> int main() { char buf[256], str[256]; while(fgets(buf, 256, stdin) != EOF) if(sscanf(buf, "%[a-zA-Z0-9-]", str) == 1) printf("%s\n", str); }
796 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:33:12 ] >>794 区切り文字が不明
797 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:34:53 ] >>790 1行256要素のcsvなの? じゃあプログラムも変わってくるね。 これが仕事の発注なら追加費用だね。
798 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:42:56 ] >>791 #include <stdio.h> int main() { int n, m, sum; while(scanf("%d", &n) == 1) { sum = 0; for(m = n / 2; m > 0; m--) if (n % m == 0) sum += m; if (sum == n) printf("%d は完全数です。\n", n); else printf("%d は完全数でではありません。\n", n); } }
799 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:46:51 ] >>797 テンプレ無視の質問だししょうがない
800 名前:794 [2008/11/14(金) 19:50:34 ] 単語の区切りは空白が来たときでいいそうです
801 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:52:35 ] [1] 授業単元:プログラミング言語 [2] 実行画面で fprintf(plot,"set xlabel\"time[sec]\"\n") と表示される様に以下のプログラムを書き換える。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: 不明…一応MicrosoftからダウンロードしたVisual C++ [3.3] 言語: C++ [4] 期限 無し [5] その他の制限: @関数を使って。AFILE *plotと宣言せずに。7行目の「r =」の右側の文字を全て"文字列"としてaに渡せるように)。 #include<stdio.h> #include<iostream> #include<string> using namespace std; int f(){ char r; r = fprintf(plot,"set xlabel\"time[sec]\"\n"); return r; } int main(){ char a; a = f(); cout<<a<<endl; }
802 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:53:31 ] >>800 ふつうは単語の直後のカンマとかピリオドとか落とすだろ?
803 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:59:21 ] >>801 #include <stdio.h> #include <iostream> #include <string> using namespace std; char * f(){ char *r; r = "fprintf(plot, \"set xlabel\\\"time[sec]\\\"\\n\")"; return r; } int main(){ char *a; a = f(); cout << a << endl; }
804 名前:794 [2008/11/14(金) 20:00:25 ] そう言われるとそうなのですが、始めたばかりなもので・・・・・
805 名前:801 mailto:sage [2008/11/14(金) 20:02:57 ] >>803 早っ! ありがとうございますw
806 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:06:24 ] >>783 Enterキーを入力≒改行を入力 だから、>>668 との両立は基本的に無理。 ただ、termios や ncurses のようなものを使えば可能かもしれない。 ってかいい加減にスレチ。
807 名前:teru [2008/11/14(金) 20:26:13 ] プログラムにゲーム的要素を取り入れてみましょう。 例えば、迷路を抜けるプログラムを作り、 途中にある宝物を見つけなければクリアーできないとか、(これはフラグを使うことになる) または、途中に各種イベントを配置しておき、 そこでの評価を点数化することで最後に総得点を競うといった応用が考えられます。 自由に考えることで、面白いプログラムを作成してみることができるはずだ。 1、プログラミング上の工夫(アルゴリズムが見えやすい、拡張性が高い、など) 2、コンテンツそのものの面白さ 簡単なゲームでいいです。 よろしくお願いします。
808 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:30:46 ] >>807 >>1 の書式を満たしてくれ あとその文面は改造する元のプログラムがあるみたいだが?
809 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:58:57 ] 元なんてなくて、ゲームごと作る課題かと。
810 名前:703 mailto:sage [2008/11/14(金) 21:22:28 ] 無事完成しました。ありがとうございます。 #include<stdio.h> int fact(int n); int fact1(int r); int main(void) { int n,r,m,nCr; printf("n r ->"); scanf("%d %d",&n,&r); m=n-r; if (n < m || n < 0 || m < 0) return printf("nCr=0\n"); nCr=fact(n)/(fact1(r)*fact(m)); printf("nCr=%d\n",nCr); return 0; } int fact(int n) { if(n==0) return 1; else return n*fact(n-1); } int fact1(int r) { if(r==0) return 1; else return r*fact1(r-1); }
811 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:25:44 ] >>810 >>744
812 名前:デフォルトの名無しさん [2008/11/15(土) 00:12:42 ] [1] 授業単元:プログラム [2] 問題文(含コード&リンク):GPで画像を合成して再構成するときに45度ずつ回転して出力しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2008年11月18日 [5] その他の制限:よろしくお願いします。
813 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 00:35:27 ] >>810 階乗、漸化式、再帰、を使ったやり方かい・・・ 余談だが、int型だと符号なしでも、12の階乗が限度。 対策として、分母の階乗を考慮して、乗数を減らすことも出来るが・・・ まぁ、階乗を使う必要がある問題ならそれで良いけど、パスカルの三角形は より値が大きくなっても求められるが、それも限度はあるけど。
814 名前:デフォルトの名無しさん [2008/11/15(土) 01:33:40 ] どなたか>>472 をCで作成お願いします!
815 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 01:55:16 ] >>814 死ね
816 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:33:31 ] >>814 調べりゃソースはある
817 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:35:56 ] >>815 おっと、死ねとはどうかと。あまりにも下衆過ぎやせんか?言葉を慎めよ
818 名前:デフォルトの名無しさん [2008/11/15(土) 02:39:42 ] [1] 授業単元:応用プログラミング [2] 問題文(含コード&リンク): 並列再帰を使ってハノイの塔問題を処理するプログラムを組め. コード上で円盤の数も選択できるようにせよ. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 2008年11月17日 午後5時 [5] その他の制限: Cは一通り習っていますが,ライブラリはなるべく使わずにお願いします. どなたかよろしくお願いします.
819 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:41:50 ] >>815 書き込む内容によってはえらいことになるよ? 気をつけたほうがいいと思う。
820 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:44:14 ] [1] 授業単元: プログラミング [2] 問題文: 入力したISBNコードが正しいか判断するプログラムを 作成せよ。(配列とfor文を使うこと) [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] 言語:C言語 [4] 期限: 11月15日12時まで [5] その他の制限: 特になし
821 名前:820 mailto:sage [2008/11/15(土) 02:51:40 ] 回答まだですか?
822 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:52:23 ] >>820 旧式と新式どっちだよ
823 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:54:37 ] ttp://ja.wikipedia.org/wiki/ISBN ハイフンやその間の数字の数、チェックデジットも?
824 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:56:26 ] >>821 いや俺が280だから。 >>822 新式です。
825 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:58:17 ] >>823 ハイフンを打ち込まず 4-793-2792-8 なら 479327928とそのまま打ち込む感じでお願いします。
826 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:28:25 ] >>820 ですが 自己解決しました。
827 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:30:00 ] してません 勝手に人の振りしないでください
828 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:46:50 ] すみません。ISDNの間違いでした。
829 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:47:03 ] なにをもって「正しい」と判断するんだ? 単にチェックデジットがあってればいいだけ?
830 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:57:00 ] >>826 >>821 通報して良い?本人じゃなくても、第三者にも偽者ってバレてるんだけど?
831 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:59:11 ] 正しいというのは、チェックデジットのこともあるが、それは末尾だし 末尾を算出するのは、その手前の数によるし・・・ 問題は、ハイフンごとに分けられているそれぞれの数値も 範囲が決められているとか、この世に存在するものかどうか 何かデータベースを参照して正しいかを調べるのか?それが問題だ。 考えすぎかもしれんが。
832 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:17:25 ] 最初の3行は978,979の数字3文字,次の1文字は国番号で決まっているから,残りは 4文字(出版者記号),4文字(書名記号),チェックディジットになるんだよな? ちょっとやってみるわ.
833 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 07:20:34 ] テンプレに書いてあるのにトリップ使わないのが悪い
834 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:37:10 ] >>833 やりかたがよくわかりませんし、 今事情があって他人のPCを使っています。 情報漏洩したら面倒なのでやりたくないです。
835 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:47:32 ] 頭悪すぎる
836 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:24:01 ] これがゆとりか。
837 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:25:28 ] それマジでいってんのか?
838 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:54:12 ] >>820 先頭3桁のチェックと末尾のチェックデジットのチェックのみ。 書式は >>825 のような13桁の数字のみを受け付ける。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8034.txt
839 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 11:55:06 ] >>780 大変助かりました。 本当に有難う御座いました。
840 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:13:15 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ・配列を利用し,2008年の指定された月の1日が何曜日か表示するプログラムを作成せよ -日=0,月=1,火=2,...,土=6と数値化して計算 ・その数値によって何曜日かを表示する -2008年1月1日が火曜日(=2)であることを利用する -求める月の前の月前までの日数を加算し7で割った余りを考える -各月の日数を以下のような形で配列に入れておく days[ ]={0,31,29,...,31} [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月17日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)、キャスト演算子 配列の初期化は習いました。 お願いします。
841 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:24:18 ] >>840 #include <stdio.h> int main() { int y, m, q, h; char *s[] = {"土", "日", "月", "火", "水", "木", "金"}; puts("西暦の年、月、日をスペース区切りで入れてください"); scanf("%d %d %d", &y, &m, &q); h = (((q + ((m + 1)*26/10) + (y % 100) + ((y % 100)/4) + ((y / 100)/4) - 2*(y / 100)) % 7) + 7 ) % 7; printf("%d年%d月%d日は%s曜日です\n", y, m, q, s[h]); return 0; }
842 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 12:28:16 ] ごめん全然問題文よんでなかった
843 名前:デフォルトの名無しさん [2008/11/15(土) 13:12:50 ] [1] 授業単元: アルゴリズムデータ構造U [2] 問題文(含コード&リンク): 複素数a,bを標準入力から入力し、それぞれの絶対値を求め、2つの複素数の和、差、積、商を求め 標準出力に出力するプログラムを作りたい。これらを求める関数として、複素数の絶対値を求める関数 および和、差、積、商を求める関数が double cabs(struct mycomplex) struct mycomplex wa(struct mycomplex,struct mycomplex) struct mycomplex sa(struct mycomplex,struct mycomplex) struct mycomplex seki(struct mycomplex,struct mycomplex) struct mycomplex shou(struct mycomplex,struct mycomplex) として作ることにした。これらの絶対値、和、差、積と商を求める関数を解答せよ なおこの構造体は予めCの処理系には用意されているが、それを利用せず独立に考えよ。 [3] 環境 [3.1] OS: Windows [3.2] [3.3] 言語: C [4] 期限: 11月16日まで [5] その他の制限:構造体の問題です 問題文に沿ってお願いします。
844 名前:デフォルトの名無しさん [2008/11/15(土) 13:18:37 ] 843の問題です #include<stdio.h> #include<math.h> struct mycomplex { double re; double im; }; int main() { struct mycomplex a,b; struct mycomplex wa(struct mycomplex,struct mycomplex); struct mycomplex sa(struct mycomplex,struct mycomplex); struct mycomplex seki(struct mycomplex,struct mycomplex); struct mycomplex shou(struct mycomplex,struct mycomplex); double cabs(struct mycomplex); struct mycomplex cinput(void); void cprint(struct mycomplex); a=cinput(); b=cinput(); cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b)); printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b));}
845 名前:デフォルトの名無しさん [2008/11/15(土) 13:20:11 ] 844の問題の続きです struct mycomplex cinput(void) { struct mycomplex z; scanf("%f %f",&z.re,&z.im); return z; } void cprint(struct mycomplex z) { printf("複素数 = %f + i*%f\n",z.re,z.im); } 誰かお願いします
846 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:11:56 ] >>843 struct mycomplex wa(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { a.re+b.re, a.im+b.im }; return z; } struct mycomplex sa(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { a.re-b.re, a.im-b.im }; return z; } struct mycomplex seki(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re }; return z; } struct mycomplex shou(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { (a.re*b.re + a.im*b.im) / (b.re*b.re + b.im*b.im), (a.im*b.re - a.re*b.im) / (b.re*b.re + b.im*b.im) }; return z; } double cabs(struct mycomplex a) { return hypot(a.re, a.im); }
847 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:18:06 ] 全然わかりません。よろしくお願いします。 [1] 授業単元:応用プログラミング論 [2] 問題文(含コード&リンク): ある任意の点X(a,b)、Y(c,d)を乱数で求め、 X,Yからなる線分に1辺が平行であり、四角形の中心とその線分との距離が30pixelになるような四角形を描写せよ。 四角形は20×40のものを使用。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Visual C++ 2008 [3.3] 言語:C++ [4] 期限: 2008年11月18日13時まで [5] その他の制限:とくになし。
848 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:43:41 ] 四角形が20*40なのに中心から線分までの距離が30かあ。
849 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:49:46 ] いいんじゃないか?仮に20の方が平行な辺だとしてもね。
850 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:03:00 ] あ。読み間違えてた。 線分XYを一辺とするのかと思いこんでた。 X ┌─┐│ └─┘│ Y こういうことね。
851 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 18:06:09 ] ┌─┤ └─┤ じゃないんだねww?
852 名前:デフォルトの名無しさん [2008/11/15(土) 18:45:07 ] 846のかた ありがとうございます
853 名前: ◆hXvyVozAPo mailto:sage [2008/11/15(土) 19:11:10 ] [1] 授業単元:プログラミングC [2] 問題文(含コード&リンク): 以下のようなプログラムを作成しなさい. int型変数xを宣言し標準入力で適当な数値を代入する。 その変数xのアドレスを引数として、アドレスと値を表示する関数を作成せよ。 実行例 ./a ? 5 変数xのアドレスは 0x00 です 変数xの値は 5 です [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名 Cygwin [3.3] 言語:C [4] 期限: 11月16日 17時まで [5] その他の制限: 授業はまだまだ初歩レベルみたいです。
854 名前:デフォルトの名無しさん [2008/11/15(土) 19:24:18 ] #include<stdio.h> #include<math.h> struct mycomplex { double re; double im; }; int main() { struct mycomplex a,b; struct mycomplex wa(struct mycomplex,struct mycomplex); struct mycomplex sa(struct mycomplex,struct mycomplex); struct mycomplex seki(struct mycomplex,struct mycomplex); struct mycomplex shou(struct mycomplex,struct mycomplex); double cabs(struct mycomplex); struct mycomplex cinput(void); void cprint(struct mycomplex); a=cinput(); b=cinput(); cprint(wa(a,b)); cprint(sa(a,b)); cprint(seki(a,b)); cprint(shou(a,b)); printf("絶対値 cabs(a)=%f\n",carbs(a)); printf("絶対値 cabs(b)=%f\n",cabs(b)); } struct mycomplex cinput(void) { struct mycomplex z; scanf("%f %f",&z.re,&z.im); return z;
855 名前:デフォルトの名無しさん [2008/11/15(土) 19:29:32 ] } struct mycomplex cinput(void) { struct mycomplex z; scanf("%f %f",&z.re,&z.im); return z; } void cprint(struct mycomplex z) { printf("複素数 = %f + i*%f\n",z.re,z.im); } struct mycomplex wa(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { a.re+b.re, a.im+b.im }; return z; } struct mycomplex sa(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { a.re-b.re, a.im-b.im }; return z; } struct mycomplex seki(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re }; return z; } struct mycomplex shou(struct mycomplex a, struct mycomplex b) { struct mycomplex z = { (a.re*b.re + a.im*b.im) / (b.re*b.re + b.im*b.im), (a.im*b.re - a.re*b.im) / (b.re*b.re + b.im*b.im) }; return z; } double cabs(struct mycomplex a) { return hypot(a.re, a.im); } すいません、動かないんで何処が違うか教えてください 854の続きです
856 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:32:14 ] >>853 #include<stdio.h> void pp(int *x) { printf("変数xのアドレスは 0x%p です\n", x); printf("変数xの値は %d です\n", *x); } int main(void) { int x; fputs("? ", stdout); scanf("%d", &x); pp(&x); return 0; }
857 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:35:21 ] >>855 見づらいし インデントしなおすのもめんどくさいから 素直にろだにあげろカス
858 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:37:24 ] >>855 carbs → acabs
859 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 19:49:51 ] >>854 関数宣言を main の外へ出せ
860 名前:デフォルトの名無しさん [2008/11/15(土) 20:07:38 ] 859の方 わからないので、8036でアップいましたので修正お願いします ほかの方も教えてくれるとありがたいです
861 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:13:17 ] C++です。 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作りたいんです 整数1は37 整数2は28 28〜37までの全整数の和は325 for文は使わずにお願いします。 よろしくお願いしますm(_ _)m
862 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:19:13 ] >>860 関数宣言を main 関数の外へ scanf のフォーマットが違った。 %f -> %lf main 関数の最後に return 0; を追加 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8037.txt
863 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:26:58 ] >>859 別に関数宣言は問題ではないと思うが 標準ライブラリのcabs()と被るのでacabs()に名前変更 main()には、return 0;でもつけてね cinput()内のscanf()は、%fではなくて%lfにする shou()内の(b.re * b.re + b.im * b.im) != 0 を保証すべき acabs()でhypot()呼んでいるので、必要に応じてリンクする