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/
2 名前:デフォルトの名無しさん [2008/10/30(木) 09:38:19 ] 2
3 名前:775 ◆00BY157eo6 mailto:sage [2008/10/30(木) 19:42:33 ] さっぱりわからないので少しだけでもお願いします [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイル(内容は下のtxtにまとめました) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt を参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_aux(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt に含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
4 名前:911 [2008/10/30(木) 20:52:37 ] すいません 回答してくれたプログラムを立ち上げてみたんですが、エラーがかえってきて困ってます。 #include<stdio.h> int gcd3(x, y, z){ return gcd( gcd(x,y), z); } でいいんですか?
5 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 21:19:41 ] [1] 授業単元:配列 [2] 問題文(含コード&リンク): 複数の整数値を入力して、それらを配列data に格納し、一番小さい値と一番大きい値がそ れぞれ格納されている配列の添え字と、その値を出力するプロググラムを作成しなさい。 <プログラム実行例> 何個の整数値を入力しますか: 5 1 4 3 5 2 一番大きい値は配列data[3]に格納されている5 です。 一番小さい値は配列data[0]に格納されている1 です。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] VC 6.0等 [3.3] C [4] 期限:明日 [5] 関数とかはまだ習ってないです
6 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 21:20:02 ] >>4 立ち上げるって、コンパイル通らんだろ?
7 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 21:20:12 ] [1] 授業単元:配列 [2] 問題文(含コード&リンク): 複数の整数値を入力して、それらを配列に格納し、小さい順に並びかえるプログラムを作成しなさ い。 <プログラム実行例> ※赤字の部分をキーボードから入力します 何個の整数値を入力しますか: 5 1 4 3 5 2 これらを小さい順に並びかえると 1 2 3 4 5 です。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] VC 6.0等 [3.3] C [4] 期限:明日 [5] 関数とかはまだ習ってないです
8 名前:911 [2008/10/30(木) 21:51:02 ] 通りませんね・・・
9 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:05:59 ] >>5 #include <stdio.h> int main() { int data[100]; int i, n; int max, min; printf("何個の整数値を入力しますか:"); scanf("%d", &n); max = 0; min = 0; for (i = 0; i < n; i++) { scanf("%d", &data[i]); if (data[i] > data[max]) { max = i; } if (data[i] < data[min]) { min = i; } } printf("一番大きい値は配列data[%d]に格納されている%dです。\n", max, data[max]); printf("一番小さい値は配列data[%d]に格納されている%dです。\n", min, data[min]); return 0; }
10 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:14:25 ] >>9 ありがとうございます!助かりました
11 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:25:21 ] >>7 #include <stdio.h> int main() { int data[100]; int i, j, n; int temp; printf("何個の整数値を入力しますか:"); scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &data[i]); for (j = i; (data[j] < data[j - 1]) && (j > 0); j--) { temp = data[j]; data[j] = data[j - 1]; data[j - 1] = temp; } } printf("これらを小さい順に並びかえると\n"); for (i = 0; i < n; i++) { printf("%d ", data[i]); } printf("です。\n"); return 0; }
12 名前:5 mailto:sage [2008/10/30(木) 22:30:23 ] >>11 ありがとうございます
13 名前:911 [2008/10/30(木) 22:41:06 ] 結局、あの問題の答えってなんなんですか?
14 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:06:29 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7897.txt 連結リストのセルの先頭をdelete_firstで削除して 5 1 1 4 4 → 2 2 3 3 と表示されるのですがメモリの35と23行目の解放がされていないと表示されます。 どこにfree()を入れればいいんでしょうか?
15 名前:911 [2008/10/30(木) 23:26:48 ] やっぱり、C言語の知識がある程度ないと無理みたいですね。。。 出直してきます
16 名前:デフォルトの名無しさん [2008/10/31(金) 00:06:10 ] >>14 /*連結リストの先頭のセルを削除*/ struct cell *delete_first(struct cell *head) { struct cell * next; if(head == NULL){ return NULL; } next = head->next; free(head); return next; } こんなことがしたかったんだろうと妄想
17 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:39:22 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 参考プログラム kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7898.txt 問題文 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7899.txt [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン: Visual stdio2005 [3.3] 言語:C言語 [4] 期限:10月31日 13:00まで [5] その他の制限:特になし よろしくお願いします
18 名前:17 mailto:sage [2008/10/31(金) 00:41:33 ] 問題はA1のみです
19 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:53:39 ] [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): pc11.2ch.net/test/read.cgi/tech/1222813731/832 の問題の続き @ 前回完成させたのプログラムを変更させなさい。 プログラム→kissho6.xii.jp/14/src/1yon14691.c.html DLKey:foo data[cnt] < ave以下のとき 関数powを使って、分散の計算をして標準偏差を求めるように変更させなさい。 ※補足 出力したファイルはこのような感じになっていること peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月31日午後1時 [5] その他の制限: 特になし よろしくお願いします。
20 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 02:46:46 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 2008年のある月のカレンダー 2008年の任意の月のカレンダー1ヶ月分を表示するプログラムを作成する。 入力:月、出力:該当月のカレンダー ステップ0・月を入力する、次のプログラムを元にします: #include <stdio.h> int main (void) { int year = 2008; int month; printf("表示させる月を入力してください:\n"); scanf ("%d", &month); return 0; } ステップ1・入力された月を元にして、表示する年月を表示する処理を追加してください。 ステップ2・2008年がうるう年であるかどうかの判定を追加し、表示する月の日数を求め、その日数を表示してください。 ステップ3・"Sun~Sat"を表示した後、ステップ2で求めた日数を表示させてください。 注意:曜日はずれていても構いません。 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月3日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)は習いました。 お願いします。
21 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 03:34:49 ] >>20 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7902.c
22 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 10:16:06 ] 課題4-1 無限級数 以下の無限級数は0 < |x| < 1 の時に収束することが知られている. f(x) = ∞Σ i=0 xi (1) = 1 1 − x (2) 式(1) において,第N 項までの部分和で打ち切ることによって,級数の近似式が得られる.第 N 部分和により級数f(x) を近似するプログラムを作成し,適当なx (0 < |x| < 1) に対して,項 数N の増加につれて,部分和が真値1 1−x に収束していく過程を観察せよ. 誰か助けてください。
23 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 11:06:36 ] printf(" Sun Mon Tue Wed Thu Fri Sat\n"); (笑)
24 名前:22 mailto:sage [2008/10/31(金) 11:11:43 ] #include <stdio.h> int main (void) { double x, i, n, sum ,prod; sum=0; prod=1; printf("代入するxの値を入力してください。"); scanf("%lf",&x); printf("第何項までの和を求めますか?"); scanf("%lf",&n); for (i=1;i<=n;i++) {prod = prod * x ; sum=sum + prod; printf( "n= %d %d\n ",i ,sum); } return 0; } これでできない理由を誰か教えてください。
25 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 14:59:36 ] >>21 本当に有難う御座いました。 大変助かりました。
26 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 15:16:33 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 以下の実行結果になるプログラムの作成 条件1:"*"で三角形を描く。 条件2:底辺が10個の"*"となるようにする。 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月3日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)は習いました。 お願いします。
27 名前:775 ◆00BY157eo6 mailto:sage [2008/10/31(金) 15:27:04 ] さっぱりわからないので少しだけでもお願いします [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイル(内容は下のtxtにまとめました) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt を参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_aux(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt に含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
28 名前:デフォルトの名無しさん [2008/10/31(金) 15:39:32 ] 授業で言っていることはおぼろげにわかる気がするんですが、どんなプログラムを書けばいいのかまったくわかりません。。。 おねがいします! [1] 授業単元:JPEGの読み込み等 [2] 問題文(含コード&リンク): JPEGファイルを読んで ブロック(マーカ単位)で表示するプログラム(16進) (JPEGでないときエラーが出るとなおよい) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 11月3日まで
29 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 15:48:09 ] #include <stdio.h> int main(void) { int i, j; for(i=1; i<=10; i++){ for(j=0; j<i; j++){ printf("*"); } printf("\n"); } return 0; }
30 名前:29 mailto:sage [2008/10/31(金) 15:49:26 ] >>26
31 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 15:56:56 ] >>27 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7903.c
32 名前:775 ◆00BY157eo6 mailto:sage [2008/10/31(金) 16:03:39 ] >>31 ありがとうございました。
33 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 19:26:22 ] ここCASLの宿題はやってもらえませんかね?
34 名前:デフォルトの名無しさん [2008/10/31(金) 19:52:09 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ★下記の仕様を満たすプログラムをC言語で作成しなさい 【仕様】 表計算ソフト簡易プログラム ▽ Excelのように2次元配列で10人分の3教科の素点表示する。なお、素点は100点満点でランダムに作るものとする。 ▽ その右の列に個人別の3教科の合計・平均・順位(合計点の高い学生から順に)を表示する。なお平均は少数第1位までの表示とする。 ▽ 10人分の得点データの下の行に、合計・平均・最高点・最低点の行を作り、各行についてそれぞれ求めて表示する。 (表示例:空欄にはそれぞれ計算結果が入ることになる) 番号| 国語 数学 英語 |合計 |平均 |順位 1 | 75 35 40 | | | 2 | 69 75 82 | | | (中 略) 10 | 57 48 36 | | | --------------------------------------------------- 合計 | 平均 | 最高 | 最低 | [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: 分かりません [3.3] 言語: C言語 [4] 期限: 来週中ぐらい [5] その他の制限: 繰り返し、条件処理、配列を勉強しました。これらを使って、一次元配列でお願いします。 初心者なので初心者でも分かるようなプログラムをお願いします。
35 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 20:37:26 ] >>34 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7906.c
36 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 20:44:59 ] >>34 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7907.txt
37 名前:デフォルトの名無しさん [2008/10/31(金) 21:28:33 ] >>35 >>36 ありがとうございます。
38 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 00:20:57 ] >>24 #include <stdio.h> int main (void) { double x, sum, prod; int i, n; sum = 0; prod = 1; printf("代入するxの値を入力してください。"); scanf("%lf",&x); printf("第何項までの和を求めますか?"); scanf("%d",&n); for (i = 1; i <= n; i++) { prod *= x; sum += prod; printf( "n = %d %lf\n ",i ,sum); } return 0; }
39 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 03:54:17 ] このスレで回答してる人って何者なの? 学生? 何気にこのスレで出た宿題をこなしてけばそれなりに実力がつきそうだな
40 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 10:20:49 ] こんなんじゃ実力つかないよ。 もっと難しい問題プリーズ。
41 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 11:51:17 ] >>29-30 本当に有難う御座いました。 大変助かりました。
42 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 11:56:48 ] >>39 ・演習のための明らかに簡単なプログラム こんなんじゃ実力は付かない ・プログラムのためのプログラミング ・実用的な計算 とかじゃないとダメだろ
43 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:15:54 ] 実力がつくかどうかはわからないが、こなしていけば学生の勉強くらいにはなると思う
44 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 13:05:56 ] そもそも学生の宿題なんだからな。 できる奴は自力でできるわけだし。
45 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 13:46:19 ] これくらいのことができなきゃ、プログラムのためのプログラミング、実用的な計算? なんて無理。というか、プログラミングと数値計算は多少分野が異なる。
46 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 13:52:06 ] つってもある程度難しかったり、面倒だとだれもやらないくせにwwwwww
47 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 14:14:16 ] 計算に関しては、計算式を把握していれば、あとは標準ライブラリを用いるなり 多少拡張するなら、変数の扱い方をしっかりしていれば良い。
48 名前:デフォルトの名無しさん [2008/11/01(土) 16:44:27 ] [1] 授業単元:プログラムC [2] 問題文(含コード&リンク): gnuplotを呼び出し、 y=sin(x**2)のグラフを描くプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC2005 [3.3] 言語:C [4] 期限: 11/5 よろしくお願いします。
49 名前:48 [2008/11/01(土) 16:59:46 ] 自己解決しました。
50 名前:48 mailto:sage [2008/11/01(土) 17:01:44 ] 止めてください どなたかお願いします
51 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 17:09:25 ] 奇数と偶数の和を求めます。関数を使わなかったら答えは出たのですが・・・。 どこが変なのか、お願いします。 #include<stdio.h> void calc(int x[],int num) { int kisu=0,gusu=0; int i; for(i=0;i<num;i++);{ if(x[i]%2==1) kisu+=x[i]; else gusu+=x[i]; } printf("奇数%d\n",kisu); printf("偶数%d\n",gusu); } int main(void) { int hai[10]={1,2,3,4,5,6,7,8,9,10}; //偶数30 奇数25 calc(hai,10); return 0; }
52 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 17:13:31 ] ((x[i]%2)==1)
53 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 17:15:03 ] for(i=0;i<num;i++);{ for(i=0;i<num;i++){
54 名前:51 mailto:sage [2008/11/01(土) 17:18:40 ] これは恥ずかしい・・・。ありがとうごさいます!
55 名前:デフォルトの名無しさん [2008/11/01(土) 19:00:21 ] 【質問テンプレ】 [1] 授業単元:計算機プログラミングII 「ポインタと文字列」 [2] 問題文(含コード&リンク):課題1 2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し, pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し,その 結果を出力するプログラムを作成せよ.ただし,ヘッダファイル string.hで定義されている関数およびsprintfを使用してはいけない. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月6日10:30まで [5] その他の制限:ポインタの基礎を習い始めたところだと思います。 配列や文字列、for文、if文、関数ぐらいは簡単に習っています。
56 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:16:55 ] >>55 #include <stdio.h> #include <stdlib.h> int string_length(char *s) { int i = 0; while(*s++) i++; return i; } int main(int argc, char *argv[]) { char *px = argv[1]; char *py = argv[2]; int len_x = string_length(px); int len_y = string_length(py); int len = len_x + len_y; char *pz = malloc(len + 1); memcpy(pz, px, len_x); memcpy(pz + len_x, py, len_y); pz[len] = '\0'; puts(pz); free(pz); return 0; }
57 名前:お願いします [2008/11/01(土) 20:32:50 ] [1] 授業単元: アルゴリズムデータ構造2 [2] 問題文(含コード&リンク): 課題 (乱数とシミュレーション、分布に従った乱数) 設問1 0から100までの一様乱数を1000回発生させ、 その頻度分布を求めよ。 設問2 いわゆる成績(偏差値)の分布の例として平均 50、標準偏差10の正規分布乱数を1000回発生させ、その頻度分布を求めよ。 なお、頻度分布は次の10種類とする。 0点から10点まで、10点から20点まで、30点から40点まで、 50点から60点まで、70点から80点まで、80点から90点まで、 90点から100点まで、 設問3、設問1で求めたデータの平均と標準偏差を求めよ。 設問4、設問2で求めたデータの平均と標準偏差を求めよ。 設問5、設問1および設問2の頻度分布をヒストグラムとして表として 見やすく作成せよ。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: すいません、コマンドプロンプトとしか・・ [3.3] 言語: (C言語) [4] 期限: 11月3日までで お願いします [5] その他の制限: (できるとこまででいいのでお願いします、制限は、乱数表記で) 問題は下に張ります
58 名前:お願いします [2008/11/01(土) 20:37:05 ] /* distran.c */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> float nrand(void) { return(float)rand()/RAND_MAX; /* 0.0 --- 1.0に正規化された乱数 */} float urand(float a,float b) { /*区間[a,b]の一様乱数*/ return a+(b-a)*nrand();} float nmrand(float mu,float sigma) { /*正規分布乱数*/ int i; float a; for(a=0,i=0;i<12;i++) a+=nrand(); return mu+sigma*(a-6.0);} float nmrand_n(float mu,float sigma,int n) { /*観測数nをもつ正規分布乱数No.2*/ int i; float a; for(a=0,i=0;i<n;i++) a+=nrand(); return mu+sigma*sqrt(12.0/n)*(a-n/2.0);} void main(void) /*観測数nを変化させたときの正規分布の乱数の分布の推移*/ { int i,j,k,f[10]; float mu=5.0,sigma=1.0; srand(time(NULL)); for(k=1;k<=32;k*=2) { for(i=0;i<10;i++) f[i]=0; for(i=0;i<1000;i++) f[(int)(nmrand_n(mu,sigma,k))]++; for(i=0;i<10;i++) { printf("\n %2d=%6.3f ",i+1,f[i]/1000.0); for(j=0;j<f[i]/20;j++)printf("*");} printf("\n");}} >57 この文の書き換えでよろしくお願いします^^
59 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 22:34:10 ] >>57 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7909.c 1と3のみ。 > 頻度分布は次の10種類とする。 分からんので0〜9、10〜19、20〜29・・・区切りで。 発生させた乱数と、0〜100までそれぞれ出た回数を 最初に表示しているので、不要なら削除。
60 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 10:16:13 ] [1] 授業単元:プログラミング入門 [2] 問題文:ポインタと構造体を使って,各要素が文字列を保持するリスト構造を実装しなさい. ただし,保持している文字列がアルファベット順になるものとする.(例えば"America"→"Japan"→"UK"など) また,機能として,「保持している文字列を先頭から表示する」「新しい要素の挿入(挿入後に新しい要素もアルファベット順に並ぶ)」「指定した文字列を保持する要素の削除」を実装せよ. [3] 環境 [3.1] OS: Mac OS 10.5.5 [3.2] コンパイラ名とバージョン:分かりません [3.3] 言語: C [4] 期限: 11月3日まで [5] その他の制限:ポインタと構造体まで習いました。 お願いします。アルファベット順に並び替える、というのがどうすれば良いのか・・・
61 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 13:42:54 ] アルファベット順になる場所に挿入をすれば、結果的にソートされた状態になる。 挿入するデータと要素のデータを先頭から順番に比較していき、 挿入するデータの方が小さくなるような要素の前に、新しく要素を追加すればよい。 挿入するデータよりも大きいデータが無かったら末尾に追加。
62 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 14:01:17 ] >>60 空気を読まず、Windowsで作ったプログラムを登校してみる kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7912.txt [OS]Win Vista [コンパイラ]gcc 3.4.2(Mingw) 役に立たなかったらごめんなさい
63 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 16:59:16 ] [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7914.txt の問題の続き @ 前回完成させたのプログラム以下のように変更させなさい。 プログラム→kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7915.c 変更箇所 data[cnt] < ave以下のとき 関数powを使って、分散の計算をして標準偏差を求めるように変更させなさい。 ※補足 出力したファイルはこのような感じになっていること peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年11月4日午前8時まで [5] その他の制限: 特になし 何回やっても出力がうまくいきません。 それとdata.txtはDLするときDLKeyが必要になりますが お手数かけて申し訳ありません。 よろしくお願いします。
64 名前:help me [2008/11/02(日) 17:44:54 ] 授業単元:C言語 問題文(含コード&リンク):1から10までの任意の整数値を複数個(20〜30個)程度入力し、 入力した数値がそれぞれ何個ずつだったかを表示するプログラムを作成せよ。 ただし、入力は0を入力しない限り永遠に続くものとする。 なんか*を数字の横に出力 するみたいに表示するようです。 OS: (Linux) 言語:C 期限: ([2008年11月5日23:59まで] [5] その他の制限: あまりないようです。 なんか授業が難しくてついていけません。助けてください。
65 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 18:22:27 ] #include <stdio.h> int main() { char buf[1024]; int i,j, count[11] = {0}; while(fgets(buf, sizeof(buf), stdin)){ int n = atoi(buf); if(n == 0) break; if(n < 1 || n > 10) continue; count[n]++; } for(i=1; i<=10; i++){ printf("%02d ", i); for(j=0; j<count[i]; j++) putchar('*'); putchar('\n'); } return 0; }
66 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:29:49 ] >>63 問題文が意味不明すぎて答えが出ない。この際、仕様に間違いがあるのはスルー。 1.とりあえず、出力は、ソースから想像すると、 ・縦に全部ならべる(最大1024個)。横は1列。 ・各行は、入力データ(data[i])がave未満の時だけ出力する ・出力の各行は、[i]に続いて、data[i]の標準偏差 が1セットで、これをファイル終端まで繰り返すで、OK? +出力を横に並べるなら、横1列に並んでいる出力を、横方向にいくつか並べたいのだと推測されるが、いくつ並べるかが不明。 2.十分なメモリを確保のところ 読込先が2次元の配列になっているが、ソースは1次元。−> 2次元のほうはスルーでOK? +ファイル丸ごとメモリに展開する(らしい)仕様は、スルーでOK? それとも、配列サイズを最初に固定で取らずに何かしようとしてる? (の前に、入力データの範囲が規定されてないので、配列すら確保できない仕様だが・・・) mallocでメモリを確保したい、までは読めた。ただ、何に使うメモリを確保したいのかが書かれていないので、追記が必要です。 3.5行209921列のデータなら、1024で割り切れないのは明らかだが、 最後の1024個に満たないデータは、他と同じ処理でよい? データ自体も、データの個数が2で割り切れない+209920行しかないのだが・・ 行と列が違うのは、華麗にスルーできなかった。残念。 データ自体の不良でなければ、ここの処理の改造も必要です。 頭の中を整理するために書いたが、ここまで来て、やっと前回の@の部分の意味が分かった ・平均値は計算するだけ。ファイルには出力はしない。 ・データが(平均値+5*ρ)以上の場合だけ、計算した最大値をファイルに出力する ->元の問題文だと、どうみても、全データの最大値と変わらなかった気が・・ って、こんな事書いてる間に、プログラム何本か書けるんだが。。
67 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 20:58:47 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7918.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11月4日 [5] その他の制限:特になし 関数内でのポインタの使い方がさっぱりです、お願いします
68 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:03:05 ] mul(&n1, &n2); void mul(int *x,int *y){ int temp; temp = *x; *x = *x * *y; *y = temp/*y; }
69 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:03:29 ] >>67 #include<stdio.h> void mul(int *x,int *y); void main(){ int n1=10; int n2=5; printf("変数n1の値は%dです。\n",n1); printf("変数n2の値は%dです。\n",n2); printf("変数n1と変数n2の積をn1に、商をn2に入れます。\n"); mul(&n1,&n2); printf("変数n1の値は%dです。\n",n1); printf("変数n2の値は%dです。\n",n2); } void mul(int *x,int *y){ int temp; temp = *x; *x *= *y; *y = temp/(*y); }
70 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 21:30:10 ] >>68 >>69 助かりました、ありがとうございます
71 名前:60 mailto:sage [2008/11/02(日) 23:33:35 ] >>61 ,62さん ありがとうございます。strcmpで比較して正負が変わる位置に挿入すれば良い、 というのは分かったので、テキストのサンプルをコピペしつつ自分で書いてみたのですが、実行するとBus errorになってしまいます。ちょっと見ていただけないでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7919.txt InsertFruitsの中でprevを挿入したい要素の一つ前を指すポインタに、ptrを一つ後を指すポインタにして、そこからポインタをつなぎ変えて挿入をさせようとしてるのですが・・・ また 1.c:67: error: incompatible type for argument 1 of ‘InitList’ 1.c:69: error: incompatible type for argument 1 of ‘InsertFruits’ 1.c:70: error: incompatible type for argument 1 of ‘InsertFruits’ 1.c:71: error: incompatible type for argument 1 of ‘InsertFruits’ 1.c:74: error: incompatible type for argument 1 of ‘PrintList’ とも出てしまいます。これはどういうことなのでしょうか? 長くなってしまいましたが、よろしくお願いします・・・
72 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 23:46:15 ] >>71 newて変数名は使えないよ。 67からのエラーは引数の渡し方が間違ってるって事。もちっとポインタ渡しについて復習してみそ。
73 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:00:01 ] c だから使えるだろう
74 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:05:31 ] ぐはそうだっけ?すまん。。。
75 名前:デフォルトの名無しさん [2008/11/03(月) 00:09:20 ] [1] 授業単元:ループ [2] 問題文(含コード&リンク):y=x*xの座標を*でプロットするプログラムを作ります。 縦をy軸とみなし、範囲は-5<=x<=5とします。使うのはループとputcharで、計算していいのは、 x*xだけ(y=x*xを変形してはいけない)です。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:11月3日 [5] その他の制限:使うのはループとputchar よろしくお願いします。
76 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:27:23 ] >>71 ポインタが欲しいところに中身を渡してる。 くだものよりも、67行目〜74行目の*が、いらない子。 あ、くだものは一覧だったw といっても、InitList()に渡す前に、listの初期化必要でない? どこも指してないのに、そこのアドレスを使って何かを入れようとしても、 だめだと思います。 あ、配列の使い方だ。これを覚えようw
77 名前:60=71 mailto:sage [2008/11/03(月) 00:44:50 ] すみません、main関数の中身が間違ってました。 int main(void) { List list; InitList(&list); InsertFruits(&list, "orange"); InsertFruits(&list, "grape"); InsertFruits(&list, "apple"); puts("くだものいちらん"); PrintList(&list); return(0); } こうでした。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7920.txt エラーは出なくなったのですが、Bus errorはやはり出ます。 InsertFruitsの中身がおかしいのだと思うのですが、どなたか助言をお願いします。。
78 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:52:12 ] >>75 #include <stdio.h> int main(void){ int x,y; for(y=25;y>=0;y--){ for(x=-5;x<=5;x++){ if(y==(x*x)) {putchar('*');} else {putchar(' ');} } putchar('\n'); } return 0; } x,yともにintだけどこれでいーの?
79 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:05:20 ] >>77 callocのあたりじゃないかと予言をして俺は寝る。限界だ
80 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:08:55 ] >>77 InitList()で、list->headまたはlist->tailのnextメンバをNULLにしておくなどあるべきだと思う。 InsertFruits()のFruits型へのポインタ変数newが明らかに無効なポインタだと思う。 while(strcmp()) {}で、ptr = ptr->nextとかあるが、ptrが例えばNULLのときどうするのか。 List型のtailメンバは使わないのか。
81 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:13:20 ] >>77 InsertFruits()でataraにallocしてないのでは? Fruits *atara; atara = (Fruits*)calloc( 1, sizeof(Fruits) );
82 名前:デフォルトの名無しさん [2008/11/03(月) 01:27:34 ] <<78 ちなみにifを使わないとしたら、どうなるでしょうか。
83 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:34:45 ] >>82 三項演算子使うぐらいしか思いつかん if(y==(x*x)) {putchar('*');} else {putchar(' ');} のとこを y==(x*x) ? putchar('*') : putchar(' '); にするとか。意味が感じられんが つーかなんでそんな偏屈じみた制約がついてるんだ
84 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:52:33 ] ふふふ、switchがあるぜよ?
85 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 01:55:04 ] >>77 さん kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7921.txt 試してみてください。 修正箇所はソースにコメントで記載してあります。
86 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:10:56 ] >>85 です コメント忘れましたが、PrintList()のwhileの中身の順番を入れ替えてました
87 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 02:12:34 ] >>77 =76 でおくれた! とりあえず途中まで書いた。直してるうちに、原型がなくなったとかは内緒。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7922.txt 登録、表示まで実装。 ごめん、76で配列っていうのは、ただの勘違いw 制約条件のリスト構造忘れてたorz
88 名前:76=87=88 mailto:sage [2008/11/03(月) 02:25:58 ] >>77 もう一個。元のソースをいじるなら。 メモリの実体を確保せずにポインタを渡しても・・・ が、どこかでおきています。 【対策する所】 List list; //ここに何か。 InitList(&list); 【原因】、 /*headとtail初期化*/ void InitList (List *list) { list->head = list->tail = AllocFruits(); } で、listがどこもポイントしていないのに、 list->head、list->tailに値を代入していること。
89 名前:76=87=88=89 mailto:sage [2008/11/03(月) 02:29:16 ] うあ、いかん。読み違えた。 おとといから寝てないの、ひびいとるな・・・ 88は忘れて下さいorz
90 名前:デフォルトの名無しさん [2008/11/03(月) 03:27:32 ] [1] 授業単元:グラフの利用、データの可視化 [2] 問題文: @: 電気双極子の作る静電ポテンシャルは φ=(q/4πε){1/(x^2+y^2+(z-d/2)^2)^(1/2)-1/(x^2+y^2+(z+d/2)^2)^(1/2)} で与えられる。ここで、正負の電荷は、(0,0,5),(0,0,-5)に存在するとしたとき、つまりd=10のときのポテンシャルの概形を描け。ただし、q/4πε=1とせよ。 また、y=0として、x-z平面におけるポテンシャルのみを書けば良い。 図示する範囲は、xは-20と20の間、zは-40と40の間とし、その範囲を各々20等分、40等分して、21×41のデータとして入力せよ。 A: @と同様に+qの電荷が(0,0,5)、(0,0,-5)に、-2qの電荷が(0,0,0)に存在するとしたときのポテンシャルの概形を描け。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月4日16:00まで [5] その他の制限: 問題@だけでもいいのでお願いします。
91 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 03:43:36 ] gccでグラフ書くってgnuplotとかかな
92 名前:87=92 mailto:sage [2008/11/03(月) 04:23:40 ] >>77 削除部分も実装。参考程度に。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7923.txt >>91 なにかちがうきがする・・
93 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 04:33:39 ] グラフィカルにプッロトするのもあるけど、単に * で表すとか。
94 名前:=92 mailto:sage [2008/11/03(月) 05:27:07 ] >>90 環境の情報が足りないかと。 授業単元からして、、グラフの作成ソフトが別にありそう。 あとX-Windowは立ち上がってる? それと、使うライブラリ、何か指定は? これはどうみても、Cというより物理の問題になってる気がw 91の補足。 gnuplotを使うなら、Cから標準出力に、gnuplotのコマンドを吐いて、 パイプでつなぐ。 = Cの宿題ではなさそう とりあえず時間がないので、早めに情報出したほうが良いと思われ。 もう一個。 Cで書く前に、グラフ作成ソフトである程度結果をつかんでから始めたほうが早いです。
95 名前:=92 mailto:sage [2008/11/03(月) 05:36:14 ] >>90 う" 問題よく見たら、ただのトラップかw この式、グラフを書く時はほとんど定数扱いで、 変数はφとxとzだけ・・・ 2次元の平面(x-z)で、21x41のマスをつくって、そこの値を計算。 って、表計算と同じw ただ、マス目の中のデータ(数値)を可視化する要素が足りない。 とりあえずExcelでも立ち上げて、各マス目のデータ計算してくるか。。 問題はExcelが手元にない事だが。
96 名前: ◆NiyDyBDWQM mailto:sage [2008/11/03(月) 05:46:19 ] [1] 授業単元:プログラミングC [2] 問題文(含コード&リンク): <関数 配列渡し> 以下のようなプログラムを作成しなさい. 2つの整数配列(要素数は任意)、配列Aと配列Bを受け取り,配列AとBの要素の値 の平均値(実数)をそれぞれ計算し、平均値が大きい方の配列の内容(整数)と平均 値(小数点第1位まで)を表示する関数を作る。また、この関数を使って以下の2つ の配列の平均値を比較するプログラム. 配列A{1,2,3,4,5} 配列B{2,3,4,5,6} ※関数に配列を渡す時は、関数内では配列の大きさがわからないので、以下の例 のように配列と配列サイズを渡す必要がある。 void func(int vector_a[], int vector_a_size); int vec[3] = {1,2,3}; func(vec, 3); // func(vec, sizeof(vec)/sizeof(int)); [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名 Cygwin [3.3] 言語:C [4] 期限: 11月3日 10時まで [5] その他の制限: まだまだ序の口のほうです。 期限まで時間があまり無いですが、どうか宜しくお願いします。
97 名前:=92 mailto:sage [2008/11/03(月) 06:23:45 ] >>96 期限なさすぎw というか、この時間に誰か起きてることを期待しちゃいけません。 ま、一瞬で終わる問題だが・・
98 名前:=92 mailto:sage [2008/11/03(月) 06:49:10 ] >>96 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7924.txt 釣りかと思ったけど、アップしとく。 ・doubleはどうせあふれないと想定されてるっぽいので、オーバーフローのチェック省略。 必要なら改造しましょう。まだ時間は十分あるw
99 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 07:01:46 ] >>98 ありがとうございました。 非常に助かりました。
100 名前: ◆7777.bQf6c mailto:sage [2008/11/03(月) 08:29:18 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7925.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual stdio 2005 [3.3] 言語: C [4] 期限: 11/3 24:00 [5] その他の制限:2次元配列とfor文を使ったものでお願いします
101 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 08:42:44 ] >>99 関数が題意満たしてないように見えるんだけどw
102 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:50:03 ] >>100 うpろだtxtの結果表示(AB)は正しいのでしょうか? どこを計算して先頭の"52"を導き出すのかがイマイチ・・・
103 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 09:58:47 ] >>102 52だと思うが。
104 名前:100 ◆7777.bQf6c mailto:sage [2008/11/03(月) 10:05:27 ] >>102 先頭の52の求め方は (5*9)+(-2*-1)+(1*5)=52 となります 行列の積の計算方法については、こちらを参照して下さい 【3行3列の行列の和と積の計算方法を教えて下さい。 -OKWave】 ttp://okwave.jp/qa87490.html
105 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:11:39 ] >>100 int AB[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { AB[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + A[i][2]*B[2][j]; } } printf("== AB ==\n"); for(i=0;i<3;i++){ for(j=0; j<3; j++){ printf("%3d",AB[i][j]); }printf("\n"); }
106 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:20:48 ] すまん、俺が寝ぼけているのかもしれんが、>>100 の結果、やっぱおかしくないか?
107 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:25:32 ] #include <stdio.h> #define N 3 int main(){ int i,j,ii; int a[N][N]={{5,-2,1},{9,2,9},{-3,7,4}}; int b[N][N]={{9,6,3},{-1,-2,-3},{5,3,1}}; int ab[N][N]; for(j=0;j<N;j++){ for(i=0;i<N;i++){ ab[j][i] = 0; for(ii=0;ii<N;ii++){ ab[j][i] = ab[j][i] + a[j][ii] * b[ii][i]; } } } printf("== AB ==\n"); for(i=0;i<N;i++){ for(j=0; j<N; j++){ printf("%3d",ab[i][j]); }printf("\n"); } return 0; }
108 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:27:42 ] 実行結果でのAの(2, 3)成分とコード中でのそれが食い違ってる。 たぶん、実行結果のAが正しい
109 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:31:08 ] わざとこういうミスをして、悩む学生を見ながらニヤニヤする変な教官とかいそう。
110 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 10:49:24 ] そういう言い訳をする教官もいそう。
111 名前:60=71=77 mailto:sage [2008/11/03(月) 11:25:53 ] 皆様、ありがとうございます・・・! >>85 さんのソースに、>>92 さんの削除関数をアレンジして加えたのですが、 リストの一番後ろの要素を削除してそれをPrintListすると無限ループしてしまいます。listのtail部分がおかしくなっているからだと思うのですが、どう直せばよいか教えていただけないでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7926.txt 削除関数のアレンジした部分はコメントの※印部分です。お願いします。。
112 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:28:45 ] [1] 授業単元:計算機システム [2] 問題文(含コード&リンク): 浮動小数点数のビットパターンを表示するプログラムを作成せよ。 そして、1.0 および、0.1, NAN, マイナス無限大, プラス無限大, その他適当な小数がどのようなビット列で表現されているか確認せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 11月5日 [5] その他の制限:なし おねがいします。
113 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 11:38:58 ] なんか漠然とした問題だな
114 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 12:40:22 ] >>112 #include <stdio.h> #include <limits.h> int is_little_endian(){ int x = 1; return *(char*)&x; } typedef unsigned char byte_t; void print_bytebits_(byte_t value){ byte_t mask = 1 << (sizeof(byte_t) * CHAR_BIT - 1); for(;mask; mask >>=1) putchar(mask & value ? '1' : '0'); } void print_bits(void *p, int bytesize){ byte_t *p_byte = (byte_t*)p; int i; if(is_little_endian()){ for(i=bytesize-1; i>=0; i--) print_bytebits_(p_byte[i]); }else{ for(i=0; i<bytesize; i++) print_bytebits_(p_byte[i]); } } int main(){ double values[] = {1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14}; int i; for(i=0; i<sizeof(values)/sizeof(*values); i++){ print_bits(&values[i], sizeof(double)); printf("(%.02f)\n", values[i]); } return 0; }
115 名前:デフォルトの名無しさん [2008/11/03(月) 12:46:05 ] [1] 授業単元:C [2] 問題文(含コード&リンク): カレントディレクトリの".txt"という拡張子を持つすべてのファイルを 読み込み、ファイルに記載されているデータを二倍して".TXT"というファイルに出力しなさい。 ".txt"の拡張子前のファイル名はランダムな数字列であり(例:029340.txt)、 ファイルの中身は以下の5行1列からなる数値ファイルである。 .txt 3 5 2 4 5 .TXT 6 10 4 8 10 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:borland C++ [3.3] 言語: C [4] 期限: 11月4日 [5] その他の制限:なし
116 名前:115 [2008/11/03(月) 12:47:39 ] >>115 すいません間違えました。 .TXTではなくて.Tです。
117 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 12:52:06 ] 半角を全角にするのもやればいいのか?
118 名前:デフォルトの名無しさん [2008/11/03(月) 12:55:34 ] >>117 すいません。 数値は半角です。
119 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 13:13:29 ] >>113 さん 遅くなってごめんなさい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7927.txt 修正箇所は申し訳ないのですがDIFFツールなどで調べてください。
120 名前:119 mailto:sage [2008/11/03(月) 13:15:53 ] アンカーミス >>111 さんでした 釣ってきます
121 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 15:28:51 ] >>115 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7928.c ファイル名が 数字のみ.txt であるかのチェックはあり、 中身が数字のみか、5行1列かのチェックはないんで そうなっているファイルを用意しておくこと。
122 名前:help me [2008/11/03(月) 15:37:36 ] >>65 お礼遅れましたすみません。 とても助かりました! ありがとうございました。(^0^)
123 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:11:32 ] [1] 授業単元:C++ [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7929.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C++ [4] 期限:[2008年11月08日まで] よろしくお願いします。
124 名前:デフォルトの名無しさん [2008/11/03(月) 16:20:08 ] [1] 授業単元: 画像処理プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7930.txt [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 11月4日 よろしくお願いします。 期限が近いのにまったく手が出ません。
125 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:28:13 ] >>124 久々にめんどくさそうなの来たなwwww
126 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:30:47 ] 何をwwwwで笑っているのか知らんが、面倒臭いと思うのも個人の主観。 ぜんぜん面倒臭くない、単なるバイナリーデータの操作だろ、そんなの。 むしろ、オラッ、強敵が現れてなんだかwktkしてきた、ってゴクウみたいな 奴もいるかもしれんぞ?
127 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:35:43 ] >>126 もちろん>>124 を明日までに一から作れる暇とスキルがあっての書き込みだよな?
128 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:44:45 ] >>126 多分おれのこと言ってるんだと思うけど今回はお前に宿題ゆずってやるよ
129 名前:100 ◆7777.bQf6c mailto:sage [2008/11/03(月) 16:45:49 ] 返信遅れてすいません txtに書かれたプログラムは私の打ち間違いです、失礼しました それと>>105 さん>>107 さん、ありがとうございました
130 名前:60=71=77=111 mailto:sage [2008/11/03(月) 16:56:46 ] >>119 さん ありがとうございます。正常に動きました。 その他助けてくださった方々、本当にありがとうございました!
131 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 16:58:01 ] >>126 さんが明日までにコンバータ作ってくれるそうです。良かったですね>>124 とりあえず両手を空に挙げてやるから元気玉でも集めて作ってみろよ。面倒じゃないんだろ?>>126
132 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:05:49 ] >>1 読める?読めない?聖徳太子(ry 要するに、個人を指定、特定して答えてもらうスレじゃないんだよ、ここ? やってくれるよ、良かったね?お前がやれよw
133 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:13:25 ] >>124 はスルーする流れなのか?
134 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:26:35 ] >>66 レス遅れてすみません>< 1.出力は ・縦ではなく、横にならべる。つまり行。縦は1024列(絶対)。 ・各行は、data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する しかし、[0][0],[0][1],[0][2],・・・,[205][3]をひとつの区切りとする。 この1024個中の標準偏差(ave) + 5*(sd)以上の値を出力する。 次に[206][0],[206],[1],・・・,[411][2],[411][3]の1024個中の標準偏差以上の 値を出力する。このとき、peak.txtに改行して出力する。 このようにdata.txtの値を1024個で区切る。 2.十分なメモリを確保のところ ソースは1次元に見えるけど、出力ファイルには2次元で!! mallocでメモリを確保したいのは、data.txtが約16Mもあるから!! 3.文章に間違えありました!!!! 5行209921列のデータではなく、209921行5列のデータです。 なので [0][0],[0][1],[0][2],・・・,[205][3] [206][0],[206][1],・・・,[211][3] [211][0],[211][1],・・・,[216][3] [217][0],[217][1],・・・,[222][3] ・ ・ ・ と1024個で区切れる。 どうでしょうか? プログラムよろしくお願いします。
135 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:27:45 ] >>132 必死なのは分かるが、とりあえず聖徳太子(ryのテンプレ教えてくれ。 あと>>124 は最近傍法での拡大くらいまでは、と思ってるが、さすがに(4)はなんとかいうフォーマットから調べないかんなあ。
136 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:40:44 ] フォーマットはぐぐれば一発だよ だからさっさと作っておくれー
137 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:57:05 ] >>124 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7931.txt こんな感じか? コンパイルすらしてないコードなんで動かなかったら適宜修正してくれ。
138 名前:137 mailto:sage [2008/11/03(月) 18:04:34 ] flee... orz
139 名前:デフォルトの名無しさん [2008/11/03(月) 18:16:38 ] >>135 > 必死なのは 誰とも分からない見えない人に答えさせようとしているお前。
140 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:42:00 ] 日本語かc/c++でおk。
141 名前:デフォルトの名無しさん [2008/11/03(月) 18:50:01 ] C言語で数字を小数第一位まで表示させるにはどうすればようでしょうか。
142 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:51:23 ] %.1f
143 名前:=92 mailto:sage [2008/11/03(月) 19:43:57 ] 久しぶりに夕方まで寝てしまった。。。 >>101 問題読み違ってた? ま、あとはがんばれw
144 名前:=92 mailto:sage [2008/11/03(月) 20:02:13 ] >>90 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7934.txt 計算する所までは実装。計算結果は@:dataout1.csv、A:dataout1.csvに出力。 グラフ化の部分は、環境がわからんのでパス。3次元のグラフを*で書く気にならなかった。 csv内のデータは、横方向:x(-20〜20)、縦方向:z(-40〜40)、値:φ(x,z) 電荷ごとに、0除算のオーバーフローをdoubleの最大値として処理しているので、 Aの結果が上下対象になっていません(斜めにdoubleの最大値が入る)。 計算結果の検算とAの式のチェックは、がんばれ。 Aの処理はコメントアウトしてあります。 Aを使う時は@の処理をコメントアウトしてから、 Aの処理のコメントアウトを解除します。 Aは、せめて式とdの値を書かないと。 ここは電磁気学の板じゃないので。 適当に調べてかいといたけど・・
145 名前:=92 mailto:sage [2008/11/03(月) 20:11:49 ] >>134 っ計算機 5も209921も奇数。よって、5x209921も奇数。 1024は偶数。 従って割り切れることはありません。 +[0]〜[3]なら、要素数は4。 問題を解く前に、概算するくせをつけましょう。
146 名前:=92 mailto:sage [2008/11/03(月) 20:22:21 ] >>134 連投すまん。 1024個単位なら、256x4。 従って、 [0][0]〜[0][3] ・・・ [255][0]〜[255][3] [256][0]〜[256][3] ・・・ [511][0]〜[511][3] という感じになるはず。 あと、メモリのところ。 [0][0]〜[0][3] ・・・ [255][0]〜[255][3] だけ確保して、1024個分を順次読み込み、1024個単位で処理すれば、 17.2MB分をmallocする必要はないと思うのだが、なぜ確保するのか? (全体をメモリに格納しないと処理できない計算が発生するのか?) これが知りたい。
147 名前:デフォルトの名無しさん [2008/11/03(月) 20:28:02 ] y=cos(x)の座標を表示させようとしているんですけど、次のプログラムって何が変なんですか。 int main(){ double x, y, pai=3.14, cos; for(y=1; y>=-1; y++){ for(x=1; x<=4*pai; x++){ if(y==cos(pai/x)){ putchar('*'); } else{ putchar(' '); } putchar('\n'); } } return 0; }
148 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:47:07 ] 1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 無限級数 (1)Σx^(i-1)の極限が1/(x-1)になる過程を示す。 (2)f(x)=0の解を数値的に求めるアルゴリズム。 プリントにこんだけしか書いてないけど大学のパソコンからじゃないとhpが開けないのですいません。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: GNU C Compiler(独習cにふぞくしてるやつ) [3.3] 言語: C [4] 期限: 明日の五時迄 [5] その他の制限:scanf関数でxとnに入力する形でfor文を使ったものでdouble型でお願いします 。
149 名前:148 mailto:sage [2008/11/03(月) 20:48:27 ] 一応自分で作ったんですけどコンパイルできなくて何がなんだか・・・ #include <stdio.h> int main (void) { int n, i, f ,x; printf ("xに代入する値を入力してください。\n"); scanf ("%lf",&x); printf ("nに代入する値を入力してください。\n"); scanf ("%ld",&n); for (1=0;i<=n;i++) {x*=(i-1); f+=x;} printf("求める値は %dです。\n",f); return 0; }
150 名前:=92 mailto:sage [2008/11/03(月) 20:53:50 ] >>147 ・x, yはintにする必要がある。(詳細は、forを調べましょう) ・cos(pai/x)としているが、pai/xの部分を考え直しましょう
151 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:58:37 ] >>149 ・fが初期化されていない ・1=0ってなに? ・intなのに%lf
152 名前:=92 mailto:sage [2008/11/03(月) 20:59:42 ] >>149 エラーの出る場所: for (1=0;i<=n;i++) 1=0(定数に定数を代入しています): iと1の打ち間違い
153 名前:148 mailto:sage [2008/11/03(月) 21:06:21 ] >>151 >>149 double型にするのをわすれてました これを実行すると何を代入しても答えが0になるんですけど どこを直せばいいでしょうか? #include <stdio.h> int main (void) { double n, i, f ,x; f=0; printf ("xに代入する値を入力してください。\n"); scanf ("%lf",&x); printf ("nに代入する値を入力してください。\n"); scanf ("%ld",&n); for (i=0;i<=n;i++) {x*=(i-1); f+=x;} printf("求める値は %dです。\n",f); return 0; }
154 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:07:06 ] >>149 #include <stdio.h> #include <math.h> int main(void) { int n, i; double x, f = 0.0; printf ("xに代入する値を入力してください。\n"); scanf("%lf", &x); printf ("nに代入する値を入力してください。\n"); scanf("%d", &n); for (i = 1; i <= n; i++) { f += pow(x, i-1); } printf("求める値は %f です。\n", f); return 0; } それと極限は 1/(1-x) な
155 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:09:37 ] nについて良く見直せ。
156 名前:=92 mailto:sage [2008/11/03(月) 21:10:48 ] >>149 うは、かぶった><; ついでに、doubleの値がどこかに必要だと思うのだが・・ あと、問題文に、i->nの時の極限と書かないと分からない。
157 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:16:07 ] [1] 配列: [2] 問題文: 10個のデータがランダムに格納されている一次元配列を用意して、その中から偶数のみを表示させるプログラムを作る
158 名前:148 mailto:sage [2008/11/03(月) 21:17:12 ] 直して少し改変したらめちゃくちゃな結果がでました #include <stdio.h> int main (void) { double n, i, f ,x; f=0; printf ("xに代入する値を入力してください。\n"); scanf ("%lf",&x); printf ("nに代入する値を入力してください。\n"); scanf ("%lf",&n); for (i=0;i<=n;i++) {x*=(i-1); f+=x; printf("n= %d の時、求める値は %d です。\n",i,f); } return 0; }
159 名前:=92 mailto:sage [2008/11/03(月) 21:22:14 ] >>158 結果表示のfは%d? あと、極限と1/(x-1)の差も表示しないと、どれくらい近づいたかわからない。 ただし、もとのxが保存されていないことに注意。
160 名前:=92 mailto:sage [2008/11/03(月) 21:24:56 ] 食事してくる。あとはまかせた!
161 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:27:03 ] >>158 i, n は int でいい。 それにあわせて n の入力時も scanf("%d", &n) それから for 文の中がおかしい。 x のベキ乗を求めるなら f += pow(x, i-1) >>154
162 名前:148 mailto:sage [2008/11/03(月) 21:30:56 ] >>160 ありがとうございました。 >>161 mathはまだ習ってないのでできればstdioのみでやれるようにしたいのですがどうすればいいのやら・・・
163 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:42:19 ] >>162 ちゃんと確認してないからミスがあればすまん。 for (i = 1;i < n; i++){ temp = x; for (j = 0;j < i-1; j++) { temp *= x; } f += temp; }
164 名前:148 mailto:sage [2008/11/03(月) 22:12:59 ] >>163 ありがとうございます。
165 名前:=92 mailto:sage [2008/11/03(月) 22:19:32 ] >>148 ふと思った事。 lim Σx^(i-1) -> 無限大。収束しない。 極限とか1 / (x-1) とでてきたあたりで、log(x)の微分が1/xとか思い出すのだが・・
166 名前:デフォルトの名無しさん [2008/11/03(月) 22:22:02 ] この条件分は可能ですか。 if(4<=x<=10)
167 名前:=92 mailto:sage [2008/11/03(月) 22:29:15 ] >>166 if ((4 <= x) && (x <= 10))
168 名前:148 mailto:sage [2008/11/03(月) 22:29:54 ] まだ格闘してます >>165 すいません1/(1-x)でさらに0<x<1って条件付でした
169 名前:デフォルトの名無しさん [2008/11/03(月) 22:33:03 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。 範囲は[0, 4π]です。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [5] その他の制限:ループと条件分岐、putcharを使う
170 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:35:28 ] >>164 >>163 だが x^0のことを忘れてた。 for (i = 1;i < n; i++){ temp = 1; for (j = 0;j < i-1; j++) { temp *= x; } f += temp; }
171 名前:112 mailto:sage [2008/11/03(月) 22:38:23 ] >>114 ありがとうございます。ただ、どんな原理で動いているのかサッパリなので、 もしよろしければ解説していただけないでしょうか・・・?
172 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:45:02 ] いうまでも無かろう、汎用電子計算機の基本的な仕組み 0と1の組み合わせで、実装されている仕様に応じて 動作しているのさ、フフンッ
173 名前:=92 mailto:sage [2008/11/03(月) 22:53:47 ] >>112 ヒント。 外ループが回るごとのfの値: f=1 (jは0から-1まで。内ループの実行回数は、0) f=1 + 1*x (jは0から0まで。内ループの実行回数は、1) f=1 + 1*x + 1*x*x (jは0から1まで。内ループの実行回数は、2) f=1 + 1*x + 1*x*x + 1*x*x*x (jは0から2まで。内ループの実行回数は、3) ・・・ f=1 + 1*x + ・・・ + 1*x^(n - 1) (jは0からn-2まで。内ループの実行回数は、n-1)
174 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:58:42 ] 単純に、double型の変数を1バイトごとに分けて さらに1ビットずつチェキしていると。
175 名前:=92 mailto:sage [2008/11/03(月) 23:01:28 ] >>112 問題文(1)は、 lim (i = 0 -> n-1) Σx^i = 1/(x-1) に書き直すと分かりやすかったかも。 元が、lim (i = 1 -> n) Σx^(i - 1) になってると、ちょっと混乱w 連投ごめんなさい。
176 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:06:12 ] >>174 double型って、 符号(1bit) | 指数(11bit) | 仮数(52bit) の64ビットで構成される数の事言ってる?
177 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:11:28 ] >>165 ベキ級数ですから、収束条件は |x| < 1 ですしね。どうなんでしょうね。
178 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:14:45 ] >>112 くらいのプログラムなら初心者にとっては勉強になるモンなんだろな 規格が出来る前は浮動小数点型が>>176 の構成だとは限らなくて 機種依存だったわけだし。 これからも128bit機とかがでたらdoubleの構成が変わるかも?しれん
179 名前:クソースでおじゃっ mailto:sage [2008/11/03(月) 23:20:18 ] >>112 #include <stdio.h> #define BPB 8 // 1byte / 8bit void hoge(double x) { int i,j; char *p; for(i=sizeof(x)-1,p=(char*)&x; i>=0; i--) { for(j=BPB-1; j>=0; j--) { printf("%d",(p[i]>>j)&1); } printf(" "); } } int main(void) { double a[]={1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14}; int i; for(i=0; i<sizeof(a)/sizeof(a[0]); i++) { printf("a = %lf \n",a[i]); hoge(a[i]); puts(""); } return 0; }
180 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:20:21 ] double のデータ構造がどうこうよりビット操作やビットマスクの 勉強としての意義のほうが大きいと思う。
181 名前:デフォルトの名無しさん [2008/11/04(火) 00:14:43 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。 範囲は[0, 4π]です。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] できるだけ早く [5] その他の制限:ループと条件分岐、putcharを使う よろしくお願いします。
182 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:19:07 ] >>146 う〜〜〜ん・・・・伝わらないよ>< 205×5−1で1024個になるって意味なんですけど。。。 つまり205行5列で1024個ってことなんですけど。 どうでしょうか? 伝われば幸いです。 malloc
183 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:33:06 ] >>178 double(MSDNだとreal*8で引くと良い?)よりもlong doubleが変わりそう。 real*10はFPUが80bitで・・とかのあたりだろうし。 というか、>>172 、>>174 もとの質問番号書いといてくれ。 間に割り込み多すぎて、どれに対する反応かわからんw >>180 だね。 printf("%s", (MSDNの浮動小数点のページの内容)); してもしかたないしw >>182 君の気持ちを受信した。 [204][4]をどうするかの問題は残るが、適当に処理しよう。
184 名前:183 mailto:sage [2008/11/04(火) 00:57:50 ] data.txtを確認しなおしました。 整理すると、 1行目〜205行目 -> [0][0]〜[204][4] (ただし[204][4] にあたる部分はデータなし) 206行目〜410行目 -> [205][0]〜[409][4] (ただし[409][4] にあたる部分はデータなし) ・・・ という感じですね。 で、最後が、 〜209920行目 -> [209715][0]〜[209919][4] (ただし[204][4] にあたる部分はデータなし) で、209920 / 205 = 1024と。 (最後の209921行目はEOFしか入っていないので、データの最後はその前の行) で、mallocは、[0][0]〜[204][4]と同じサイズx1024を確保したいと。 (2次元配列の1箇所だけ空けるわけにいかないので、確保するのは1025 x 1024) だいぶ見えてきたね。
185 名前:183 mailto:sage [2008/11/04(火) 03:38:21 ] >>182 途中経過。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7936.txt 平均、標準偏差などの計算周りを実装。ファイルへの出力部が未実装。 ごめん、原型はなくなった。
186 名前:183 mailto:sage [2008/11/04(火) 04:16:29 ] >>182 あ、一個忘れてた。問題どれが正しいのかわからん。 出力は、 (>>134 によると) ・出力は、縦方向は1024行。横はデータ次第。 ・data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する(画面に?ファイルか?) ・[206][0],[206],[1],・・・,[411][2],[411][3]だけ、 標準偏差(== sd)以上の値をpeak.txtに出力する。 (->とりあえず、[206][0],[206],[1],・・・,[411][2],[411][3]だけでなく、 1024個全部出力しとく。標準偏差1個だけ出力したいわけではなさそうなので。) (>>63 によると) ・data.txtのデータ(data[cnt]) < ave(== 平均値)以下のとき、 標準偏差をpeek.txtに出力する。(分散も?ファイル名あってる?) (もとの問題文(7914.txt)によると) Bが最終的に欲しいものとして、 ・データ1024個ごとのブロック内の最大値と、周波数(そのブロック内の何番目のデータか)を、 peek.txtに出力。 ->これはどうがんばっても、各ブロックごとに1個しか最大値がないので、 縦1列になる。これを横5個とかに並べなおして出力?(横にいくつ並べるかは書いてないが) あと、@の ・各ブロックの、平均値と、最大値と、(ave + 5*sd)以上のデータを、それぞれ 計算する(画面に表示する??)、最大値だけはBでpeek.txtに出力する (かなりがんばって解釈したが、これで良いのか?) @は今回は関係なし?
187 名前:183 mailto:sage [2008/11/04(火) 04:17:42 ] >>182 続き。 とりあえず、(63の条件の) powを使って分散を計算、そこから標準偏差の計算までは実装済み。 以下、すべて予定。 こんな時間に見てなさそうだから、出力は全部画面に向けとく。 ファイルへの出力は、134を信じて、peek.txtに標準偏差が出るようにしておく。 あとは、好きなのをファイル出力に向けなおして。 途中で寝てなければ、そのうちアップする。
188 名前:183 mailto:sage [2008/11/04(火) 05:56:00 ] >>182 いかん、ぼけとった。 >>186 の内容を一部修正。 (>>134 によると) のところ。3個目。 ・出力するのは、標準偏差でなく、個別データだった。(最終行で間違った。) ということは、[206][0],[206],[1],・・・,[411][2],[411][3]だけで良いのか? (今書きかけのプログラムのは、全部出してるが。) ・標準偏差(== sd)以上の値 -> これは、平均値+標準偏差だと思うので、ave + sdにしておいた。 あと、>>185 で貼ったソース。 分散を求めるところでj=0でクリアしているが、ループの他のところでも使っているので、アウト。 分散の計算は、ループから分離した。 そろそろ時間が近いな。。
189 名前:183 mailto:sage [2008/11/04(火) 06:07:37 ] >>182 もう一個発見。 >>183 の (>>63 によると) のところ。 (data[cnt]) < ave(== 平均値)以下のとき標準偏差を出力、 は意味を成さない。 (data[cnt]) < ave(== 平均値)以下のdata[cnt]を出力、が正しそうだ。 それから、不明点。 ・各ブロック([0][0]〜[204][4])とかの何番目にあるか == 周波数 ・何ブロック目か == 周波数 // ([0][0]〜[204][4])が1、([205][0]〜)が2 これのどちらが正しい? 問題文で1024個のそれぞれが周波数に対応としているが、 どっちの1024個かわからんとです。 とりあえず、各ブロック([0][0]〜[204][4])とかの何番目にあるか == 周波数 としたが。。 。。。書いてるうちに、もう一個発見。 [206][0],[206],[1],・・・,[411][2],[411][3]は、区切りがずれとるな。。
190 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 06:09:01 ] 落ち着け
191 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 06:20:04 ] 無駄に複雑化した気が。 てかはじめのままで何でだめなの
192 名前:183 mailto:sage [2008/11/04(火) 07:29:45 ] >>182 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7937.txt とりあえずこんな感じか? 出力の条件がいろいろあったので、それぞれ出しておいた。 出力条件ごとに別ループにしてあるので、 いらないのは、コメントアウトする事。 あと、ファイルに出力したのは、 [205][0],[205],[1],・・・,[409][2],[409][3]の中で、 data > aveを満たすデータ。 横5個で改行。
193 名前:183 [2008/11/04(火) 07:31:43 ] >>191 答え:出力条件が違う。出力フォーマットが違う。出力するものが違う。
194 名前:183 mailto:sage [2008/11/04(火) 07:35:31 ] >>191 その前に、問題文がちがう・・・のが大きかった あと、もう一個理由追加。 無駄にmallocしてるから。(問題の条件にあるから)
195 名前:183 mailto:sage [2008/11/04(火) 07:45:24 ] 入力ファイルは2次元(205x5)でも、 1次元(1024)の配列で処理すれば、本来はいける。 (というか、その方が処理が格段に楽。) 205x5が1024にならない、という突っ込みは、どこか上の方を参照。 最後の1個が欠けたデータなんだ。 今回の問題は、 ・入力データ(17.2MB)を丸ごと配列に押し込む、 ・配列は、double[205 * 1024][5] の制約付き。 これも、どこか参照。 簡単な版作る?
196 名前:183 mailto:sage [2008/11/04(火) 08:10:37 ] 始めの方を元に作り直そうと思ったけど、strtokの使い方があやしいのと、 varの計算が間違ってるのと・・を直さないといけないんだった。 分散を(1/n) * sum(val)^2 - ave^2で求めようとしてるところ。(実際は違う値を求めてるが・・) 今回のプログラムでは、これを本来の(1/n) * sum((val - ave)^2)に 戻した分、ループがかさんで見えるはず。 誤差を気にしないのであれば元の式でもOKらしいが・・ 元の式のままで行くなら、式を置く位置を変更かな。
197 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 08:13:08 ] r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ . 〃 ヽル1'´ ∠:::::::::::::::::i i′ ___, - ,. = -一  ̄l:::::::::::::::l . ! , -==、´r' l::::::/,ニ.ヽ l _,, -‐''二ゝ l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ チラシの裏にでも書いてろ :ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ ::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ ::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な! :::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::/// :::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ / ::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
198 名前:183 mailto:sage [2008/11/04(火) 09:38:51 ] >>197 チラシ探してくる・・・ の前に、varの計算あってた、ごめん。 何年間かどこかで修行してくるわ。
199 名前:デフォルトの名無しさん [2008/11/04(火) 13:46:53 ] [1] 授業単元:配列 [2] 問題文(含コード&リンク):ファイルを文字単位で読み出し,アルファベット('a' -> 'z')が二回連続して出現する全ての箇所から,アルファベット2文字を単位とした出現回数を int 型二次元配列 count[][] に格納せよ。 ファイルの先頭から最後まで文字単位で捜査し,2回連続してアルファベット('a' -> 'z')が出現した箇所を対象にせよ。 this is a pen であれば,th, hi, is, is, pe, en がカウントの対象となる。 "be" という二文字が出現した回数は count[1][4] (count['b'-'a']['e'-'a'])に格納されるようにせよ。 [3] 環境 [3.1] OS: Mac OS [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年11月5日11:59まで お願いします
200 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 14:31:08 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7938.txt [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月5日 [5] その他の制限:特になし よろしくお願いします。
201 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 14:54:26 ] >>199 下の方は確認用ね。 #include<stdio.h> #define isUpper(a) ('A' <= (a) && (a) <= 'Z') #define isLower(a) ('a' <= (a) && (a) <= 'z') #define isAlpha(a) (isUpper(a) || isLower(a)) #define position(a) ( isUpper(a) ? (a) - 'A' : (a) -'a') int count[26][26]; int main(){ char ch,prev='\0'; int i,j; FILE* fp; if((fp = fopen("in.txt","r")) == NULL) return 1; while((ch = fgetc(fp)) != EOF){ if(isAlpha(prev) && isAlpha(ch)) count[position(prev)][position(ch)]++; prev=ch; } fclose(fp); printf(" "); for(i=0;i<26;i++) printf(" %c",'a'+i); printf("\n"); for(i=0;i<26;i++){ printf("%c",'a'+i); for(j=0;j<26;j++) printf("%2d",count[i][j]); printf("\n"); } }
202 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 15:17:01 ] >>200 意外と簡単だった♪ void move(int n, int s, int d){ int tmp,i,j; printf("%d:%c --> %c\n",n,'a'+s,'a'+d); tmp=st[sp[s]][s]; st[sp[s]][s]=0; //スタックsからpop st[sp[d]+1][d]=tmp; //スタックdにpush //スタックポインタの操作 sp[s]--; sp[d]++; for(i=0;i<M;i++){ printf("%c ",'a'+i); for(j=0;j<=sp[i];j++){ printf("%2d",st[j][i]); } printf("\n"); } }
203 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 15:29:33 ] >>202 ありがとうございます! 問1と2の複合って感じですかね?
204 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 15:40:19 ] そうそう。 1の部分が sp[s]--; sp[d]++; これで棒に刺さってる枚数をカウントして、 for(i=0;i<M;i++){ printf("%c ",'a'+i); for(j=0;j<=sp[i];j++){ printf("%2d",st[j][i]); } printf("\n"); } で棒の名前と刺さってる板の大きさを列挙する。
205 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:08:58 ] 九九を計算して,以下のように表示するプログラムを作成せよ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 for文、while文を使えとかいってたと思います。 よろしくお願いします。
206 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:16:48 ] >>205 int i, j; for( i = 1; i < 10; i++ ) { for( j = 1; j < 10; j++ ) { printf( "%d ", i * j); } printf( "\n"); }
207 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:36:34 ] >>206 ありがとうございます。
208 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:45:56 ] >>206 実行してみたんですけど、ただ計算するだけでなく 表みたいにしないといけないんです。どうしたらいいですか?
209 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:47:57 ] >>208 int i, j; for( i = 1; i < 10; i++ ) { for( j = 1; j < 10; j++ ) { printf( "%2d ", i * j); } printf( "\n"); }
210 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:11:47 ] >>209 できました。ありがとうございます。
211 名前:デフォルトの名無しさん [2008/11/04(火) 20:30:10 ] 1/x![X=1から10まで]を求めるにはどうしたらいいでしょうか?
212 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:30:17 ] [1] 授業単元: 配列 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7939.txt (↓途中までですが、考えてみたものです) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7940.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C [4] 期限: 2008年11月5日14:00まで [5] 多次元配列を用いて
213 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:35:31 ] [1] 授業単元:プログラミング [2] 2つの3×3行列の入力に対して積を計算し、結果を出力せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2008 [3.3] 言語:C++ [4] 期限: 明後日 [5] その他の制限: 繰り返しfor、2次元配列を使うこと。3重ループになるそうです。 しかし、どのように3重ループを使えばいいのかわかりません。
214 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 20:52:33 ] for(i=0; i<3; i++) for(j=0; j<3; j++) for(k=0; k=3; k++) c[i][j] += a[i][k] * b[k][j];
215 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 22:23:38 ] >>211 #include <stdio.h> int main (void) { int i, j; int kai; double sum = 0; for (i = 1;i <= 10; i++) { kai = 1; for (j = i;j > 0; j--) { kai *= j; } sum += (double)1.0 / kai; } printf("{Σ1/(x!) |1 <= x <= 10} = %f\n", sum); return 0; }
216 名前:デフォルトの名無しさん [2008/11/04(火) 22:34:19 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。 範囲は[0, 4π]です。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] できるだけ早く [5] その他の制限:ループと条件分岐、putcharを使う よろしくお願いします。
217 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 22:50:06 ] >>216 >[4] できるだけ早く が非常に心証が悪いのですが、お気づきですか?気づかれたほうがいいですよ。
218 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:05:47 ] どうでもいい
219 名前:216 [2008/11/04(火) 23:38:43 ] >>217 不愉快な思いをさせてしまい申し訳ありませんでした。 これからは気をつけます。
220 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:50:29 ] >>192 レス遅くなりました。 プログラムありがとうございました。 出力の方は自分でなんとか、変えてみます。 助かりました。
221 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:09:10 ] >>212 その1のほう。原形とどめてないかも。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7941.txt ttp://www.mashimo.com/2c6.html を使ってテストした。多分大丈夫。
222 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:34:20 ] >>217 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7942.txt
223 名前:デフォルトの名無しさん [2008/11/05(水) 00:43:12 ] >>137 レス遅れてしまい申し訳ありません。 プログラムありがとうございました。 これからプログラムの内容を理解していきたいと思います。
224 名前:デフォルトの名無しさん [2008/11/05(水) 00:56:29 ] >>222 ありがとうございました。 とても助かりました。
225 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:00:03 ] xy.yu.to/ 始終荒れまくりの海外サーバ絵チャだ 一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。 荒しプログラマーは全員退散!! 誰か倒してくれwwwwww 荒らしても荒らしても線が消されてしまう 一体どうやっているのか?!
226 名前:デフォルトの名無しさん [2008/11/05(水) 01:23:50 ] 誰か助けてください。次のプログラムは関数の座標をプロットするプログラムなのですが、 y軸の数字はそのままで、もっと細かくプロットするにはどうすればよいでしょうか。 たとえば、(0.5, 0.25)をプロットするといった具合にです。お願いします。 int main(){ double x,y; y=100.0; while(y>=0){ printf("%.1f", y); x=-10; while(x<=10){ if(y==(x*x)){ putchar('*'); } else { putchar(' '); } x=x++; } putchar('\n'); y=y-5.0; } return 0; }
227 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:33:17 ] >x=x++; 関係ないがこれはやめろ
228 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:50:19 ] [1] コンピュータの基礎的なもの: [2] 1!+2!+....k!を求めよ: [3] 環境 [3.1] 一応Win: (Windows/Linux/等々) [3.2] VC6.0: (gcc 3.4 VC 6.0等) [3.3] C: (C/C++/どちらでも可 のいずれか) [4] 今晩中です: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) #include<stdio.h> main(){ int i,k; float n,m; printf("k="); scanf("□□",□□); n=0.0; m=1.0; for(i=1;i<=□;i□□){ n□□(m□□i); } printf("1!+2!+...+%□=%□\n",□,□); } forの内部以外のところは埋まりました。 forの内側のnから始まる分が分かりません。
229 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 01:57:32 ] n += (m *= i);
230 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 02:16:29 ] #include<stdio.h> main(){ int i,k; float n,m; printf("k="); scanf("%d",&k); n=0.0; m=1.0; for(i=0;i<=k;i++){ n+=(m*=i); } printf("1!+2!+.....+%d!=%f\n",k,n); } ありがとうございます。 こんなかんじでやって答えが0にしかならないのですが...
231 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 02:21:37 ] m=1.0; for(i=0;i<=k;i++){ n+=(m*=i); } これでは常にm = 0.0になってしまうのだが、for ( i = 1; ...)なだろうな
232 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 02:23:37 ] ありがとうございます。いけました
233 名前:デフォルトの名無しさん [2008/11/05(水) 02:27:39 ] どなたか226をお願いします。夜が明けるまでにお願いします。
234 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 03:01:49 ] >>233 cとyの刻み幅を変えるだけでいいと思う #include<stdio.h> int main(){ double x,y; y=100.0; while(y>=0){ printf("%.2f", y); x=-10; while(x<=10){ if(y==(x*x)){ putchar('*'); } else { putchar(' '); } x+=0.5; } putchar('\n'); y-=0.25; } return 0; }
235 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 03:20:02 ] ×c ○x
236 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 03:25:41 ] 1024がどうしたのやつ、まだ引きずってたのか。 前スレで205*5にするのは別に必須でなくて、1024個単位で処理できればいいんでしょ? って確認しておkが出てたはずなんだけどなー 何が分からないかを伝える練習の場となったか。それもまたよかろ。
237 名前:デフォルトの名無しさん [2008/11/05(水) 05:53:10 ] [1] 授業単元:計算機プログラミングII 「ポインタと文字列」 [2] 問題文(含コード&リンク):課題1 2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し, pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し,その 結果を出力するプログラムを作成せよ.ただし,ヘッダファイル string.hで定義されている関数およびsprintfを使用してはいけない. その他,未習のもの(memcpyなど)は使えない. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月6日10:30まで [5] その他の制限:ポインタの基礎を習い始めたところだと思います。 配列や文字列、for文、if文、関数ぐらいは簡単に習っています。 [6]出されたヒント:px,pyの長さを数える。たとえば,pxがn個の文字列ならば, 新たなポインタにまずこのn個の文字列が順に入り,その次のところからは, pyの1番目,2番目の文字が入っていく。 という方針であると説明を受けました。
238 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 06:27:37 ] >>237 長さ数えなくてもいける! ただsscanfは微妙によくない気がする!w #include<stdio.h> void concatenate(const char* px, const char* py, char* pz){ while(*px) *pz++ = *px++; while(*py) *pz++ = *py++; *pz = '\0'; } int main(){ char x[256]; char y[256]; char z[256]; printf("x:"); fscanf(stdin,"%s",x); printf("y:"); fscanf(stdin,"%s",y); concatenate(x,y,z); printf("z:%s\n",z); }
239 名前:デフォルトの名無しさん [2008/11/05(水) 09:26:58 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 下位バイト側を,バイナリで出力するプロ グラムです。 [3] 環境 [3.1] OS: WINDOWS [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 無期限 [5] その他の制限:main()の引数として,argc, argvを使わなくてはいけません。 下のプログラムを元につくります。 よろしくお願いいたします。 #include <stdio.h> union UNION { int i; char ch[4]; }; int main() { union UNION obj; obj.i = 320; printf("%x %x %x %x",obj.ch[0],obj.ch[1],obj.ch[2],obj.ch[3]); return 0; }
240 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 10:29:58 ] [1] 授業単元:プログラミング [2] 問題文: 構造体を用いて配列の和、積を求めるプログラムを作成せよ。 ただし、配列のデータは2つのファイルから開いて使用すること。 配列のデータ例 3 4 1.1 2.2 3.3 4.4 1.0 2.0 3.0 4.0 2.0 3.5 6.2 2.5 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名:gcc [4]11月6日 12:00まで [5]その他: 構造体のメンバーは 行のサイズ unsigned int 列のサイズ unsigned int 行列のデータへのポインタ double ** よろしくお願いします。
241 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:14:23 ] [1] 授業単元: ニューラルネットワーク [2] 問題文 ニューラルネットワークの初期状態が記憶パターン1とよく似ているが少しだけ異なっていたとする。 ニューロンが非同期的に状態更新し、記憶パターン1に近づいていく様子をシュミレーションするプログラムを c++で作成せよ。 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: わかりませんが、最初から付いていたやつかと…。 [3.3] 言語: C++ [4] 期限: 2008年11月9日 [5] その他の制限: 序盤まではできたのですが後半からさっぱり・・・。下にできた(と思う)所までと、 与えられた問題のヒント、完成例など置いておきますのでどなたか御願いします>< 何か不明な点があったら言って下さい。 ↓ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7913.zip
242 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 12:13:43 ] [1] 授業単元:C言語 [2] 問題文 指数関数ex の近似値を返す関数expon(x, n)をつくります。第1引数は浮 動小数点数x で,第2引数はex をTaylor 展開で展開する際の最大次数n になります。 n次項までのTaylor 展開の式は下に示す通りです。 さらに,浮動小数点数y と正の整数m を引数とし,y の小数点m 桁より下を切り捨てて出 力する関数trunc(y, m)をつくりなさい。 次に,これらの2つの関数を用いて,ex の近似値を小数点以下の桁数を指定して出力する プログラムをつくりなさい。 ex ? 1 + x + x2/2! + x3/3! + … + xn/n! △出力例: 指数関数exp(x)の近似値を計算します! x を入力してください:2.5? Taylor 展開の最大次数n は:100? 小数点以下の桁数m は:3? exp(x)の近似値 = 12.182 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008/11/7 24:00まで [5] その他の制限:printf("%.*f", m, y); は用いないで定義すること。 よろしくお願いします。
243 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 12:33:39 ] >>241 vistaにはコンパイラついてませんよ?
244 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 13:22:14 ] >>221 一つ目の問題、ありがとうございます。 2つ目の問題の、 3×3行列の余因子の二次元配列を使った書き方がわかりません。 全て書けばプログラムがかなり長くなってしまいますし、それでは配列を使わなくても書けるのでは、と思い考えています。
245 名前:デフォルトの名無しさん [2008/11/05(水) 13:49:36 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。 対角要素に0に近い要素があっても、正しく求められるように工夫せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: なし お願いします
246 名前:デフォルトの名無しさん [2008/11/05(水) 14:03:52 ] このプログラムで*をもっと表示させるにはどうすればよいですか。 今日中にお願いいたします。 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<=4*pai; x++){ if(y==cos(x)){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
247 名前:デフォルトの名無しさん [2008/11/05(水) 14:11:58 ] >>246 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<=4*pai; x++){ if(y==cos(x)){ putchar('************************************'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
248 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 14:11:59 ] もっとってどういう風に?
249 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:44:48 ] >>243 う〜ん、でもコンパイルは最初から普通に出来るんですが… Visual Studio 2008 Express Editionsのページから無料でインストールしたやつを 使用してるんですが、Webインストールした時に一緒に付いて来たとかなのかな… そうだとしたら落としたのはついこないだなのでvarは最新のはずですが…。
250 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:52:19 ] そういうときはVS2008と書けばおk
251 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:03:16 ] >>250 あ、なるほど。 お手数おかけしました><
252 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:03:57 ] >>242 n = 14 くらいまでにしておかないと、とんでもない結果になるよ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7945.txt
253 名前: ◆591LS1rcWk mailto:sage [2008/11/05(水) 16:04:49 ] [1] 授業単元:プログラミング実習 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7944.txt [3] 環境 [3.1] OS: Win vista [3.2] borland C++ 2.31 [3.3] 言語: C [4] 期限: 11月06日14:00まで Rxh(k)=1/n * Σ(n-1,n=0)x[n]*y[n+k]を計算しRxhを1−7出力するプログラムなのですが 完成し、動作を確認した後途中式に用意しておいた二重forループ無いの17行目 printf("%d---%d\n",sum1,sum2); を消すと正常に稼働しなくなります。 原因解決策などお願いします。
254 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:07:35 ] >printf(x[8]={1,2,3,4,5,6,7,8}n); 何これ?
255 名前:246 [2008/11/05(水) 16:28:39 ] >>248 自分もなんといっていいかわからないのですが、246のままのプログラムでは、cosの値が整数のときしか*が表示されません。 でもpaiの値が小数を含んでいるので、cosの値が小数第何位かになってしまうわけです。 かといって、yの刻み幅をかなり小さくしてしまうと大変なことになってしまいます。 cosの値を四捨五入とかできればいいのですが・・・ そういう場合はどのようにすればよいのでしょうか。
256 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:30:21 ] >>254 一番最初に配列の内容を出力しておくこと という条件でした。 情報足りなくてすいません。
257 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:33:07 ] printf("x[8]={1,2,3,4,5,6,7,8}\n");かな?
258 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:55:22 ] #include <stdio.h> int main (void) { float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; int x[8]={1,2,3,4,5,6,7,8}, h[8]={8,7,6,5,4,3,2,1}; int sum1=0,sum2=0,n=8,k,y,z; printf("x[8]={1,2,3,4,5,6,7,8}\n"); printf("h[8]={8,7,6,5,4,3,2,1}\n"); k=0; y=n-1; z=n-k; for(k=0;k<y;k++,z--){ for(n=0;n<z;n++){ sum1 = x[n] * h[n+k]; sum2 += sum1; //printf("%d---%d\n",sum1,sum2); } rxh[k] = (float)sum2/8.0; printf("Rxh[%d]=%2.3f\n",k+1,rxh[k]); sum2=0; } return(0); }
259 名前: ◆591LS1rcWk mailto:sage [2008/11/05(水) 16:58:51 ] リンク先の方を見ると何故か色々欠けているみたいなのでこっちに張り直します。 #include <stdio.h> int main (void) { float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; int x[8]={1,2,3,4,5,6,7,8}, h[8]={8,7,6,5,4,3,2,1}; int sum1=0,sum2=0,n=8,k,y,z; printf("x[8]=[1,2,3,4,5,6,7,8]\n"); printf("h[8]=[8,7,6,5,4,3,2,1]\n"); y=n-1; z=n-k; for(k=0;k<y;k++,z--){ for(n=0;n<z;n++){ sum1 = x[n] * h[n+k]; sum2 += sum1; printf("%d---%d\n",sum1,sum2); } rxh[k] = (float)sum2/8; printf("Rxh[%d]=%2.3f \n",k+1,rxh[k]); sum2=0; } return(0); }
260 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:16:18 ] >>258 気づきませんでした。ありがとうございます。 修正して下さった点は k=0;の初期化とrxh[k] = (float)sum2/8.0;の8だった部分を8.0にで合っていますか?
261 名前:213 mailto:sage [2008/11/05(水) 17:53:35 ] >>214 返すのが遅れてすいません。どうもありがとうございます。 一晩考えたのですが… #include <stdio.h> int main() { int a[3][3]; int b[3][3]; int c[3][3]; int i, j, k; scanf_s("%d %d %d %d %d %d %d %d %d", &a[0][0],&a[0][1],&a[0][2],&a[1][0],&a[1][1],&a[1][2],&a[2][0],&a[2][1],&a[2][2]); scanf_s("%d %d %d %d %d %d %d %d %d", &b[0][0],&b[0][1],&b[0][2],&b[1][0],&b[1][1],&b[1][2],&b[2][0],&b[2][1],&b[2][2]); for(i=0; i<3; i++) { for(j=0; j<3; j++) { for(k=0; k<3; k++) { c[i][j] += a[i][k] * b[k][j]; } printf("%d, " ,c[i][j]); } printf("\n"); } } とするととんでもない数字が表示されます。
262 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:03:04 ] int c[3][3] = {0};
263 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:26:59 ] cを全部0で初期化しないとね。
264 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:44:48 ] [1] 授業単元:プログラミング演習 [2] @12個のデータを入力できる1次元配列(int型)を準備し、 キーボードから各自 適当な数字(int型の範囲)を12個入力する. 入力したデータは,準備した配列に格納される. 12個のデータの最大値と最小値を表示するプログラムを作成しなさい. A12個のデータを入力できる2次元配列(int型 3行4列)を準備し, キーボードから各自 適当な数字(int型の範囲)を12個入力する 入力したデータは,準備した配列に格納される. 12個のデータの最大値と最小値を表示するプログラムを作成しなさい. [3] 環境 [3.1] OS windows Vista [3.2] コンパイラ名:gcc [3.3] 言語: C [4]11月12日 13:00まで [5]その他制限:if文、for文、配列などは習いましたが、それ以上はまだ習っていません。よろしくお願いします。
265 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:36:54 ] >>262 ,263 できました。どうもありがとうございます。
266 名前:デフォルトの名無しさん [2008/11/05(水) 19:49:16 ] 239をどなたかお願いします。
267 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:00:44 ] >>239 の言ってる意味が分からないんだけど。 argc, argv をどうしたいの? 何の下位バイトを出力するの?
268 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:12:49 ] [1] 授業単元: C言語入門 文字処理の簡単な演習課題 [2] 問題文(含コード&リンク): 適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。 例を以下に示します。作成するプログラムも同じような出力形式にしてください。 [ 例 ] 入力文字 = x 暗号化された文字 = b 復号化された文字 = x 何文字ずらすか?については、各自で適当に設定して構いません。 ただし、暗号化された文字も、英字小文字でなければなりません。例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。 この点を工夫して下さい。 [3] 環境 [3.1] OS:Windows XP [3.2] Visual C++ 2005 [3.3] C++ [4] 期限:11月6日23時まで [5] その他の制限: Char型変数を使うのはわかるのですがそれからがよくわからなくて・・・。 初歩的なことですみませんが、よろしくお願いします。
269 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 20:15:06 ] >>239 #include <stdio.h> #include <limits.h> #include <stdlib.h> union UNION { int i; unsigned char ch[8]; }; void f(unsigned char c) { unsigned char i; for (i = (1 << (CHAR_BIT - 1)); i != 0; i >>= 1) { if ((c & i) != 0) putchar('1'); else putchar('0'); } } int main(int argc, char *argv[]) { union UNION obj; obj.i = 0; if (argc > 1) obj.i = atoi(argv[1]); printf("%d\n", obj.i); f(obj.ch[1]); putchar(' '); f(obj.ch[0]); return 0; } よくわからないとこは適当に判断させてもらった
270 名前:デフォルトの名無しさん [2008/11/05(水) 21:00:23 ] [1] 授業単元: C言語応用 [2] 問題文(含コード&リンク): テキストファイル CD_DATA|45 DVD_DATA|601 MD_DATA|24 メイン関数と読み込み関数で、テキストファイルの'|'より後ろを構造体に書き込み エラー処理でテキストファイルに'|'が無い時エラーメッセージをだす。 テキストファイルの中の行数が違った時エラーメッセージをだす。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月6日15時まで
271 名前:デフォルトの名無しさん [2008/11/05(水) 21:00:39 ] >>269 さん どうもありがとうございます。
272 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 21:44:12 ] >>268 offsset は -26 〜 26、入力文字 in の範囲チェックはどっかでやっておく int offset = 3; char in, en, de; in = getchar(); /* 暗号化 */ en = (in - 'a' + offset + 26) % 26 + 'a'; /* 復号 */ de = (en - 'a' - offset + 26) % 26 + 'a'; printf("入力文字 = %c\n暗号化された文字 = %c\n復号された文字 = %c\n", in, en, de);
273 名前:デフォルトの名無しさん [2008/11/05(水) 22:14:22 ] 宿題への助言をお願いします。 内容は、入力された整数列を文字型配列で読み込み、その整数を以下のような変換規則に従い出力するというものです。 0→D、1→f、2→k、3→E、4→y、5→Q、6→R、7→e、8→B、9→t 以下は作ってみたものとなります。出力結果が文字化けしてしまいます… #include<stdio.h> #include<string.h> #define N 50 int main(){ int i, j; char num[N], txt[N]; printf("%d個までの整数列を入力して下さい : ", N); scanf("%s", &num); for(i = 0; i < strlen(num); i++){ for(j = 0; j < 10; j++){ if(num[i] == 'j') txt[i] = "DfkEyQReBt"[j]; } } printf("\n整数列を変換した文字列は「"); for(i = 0; i < strlen(num); i++){ putchar(txt[i]); } printf("」です。\n"); return 0; }
274 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:24:23 ] >>273 scanf("%s", &num); --> scanf("%s", num); & をトル if(num[i] == 'j') --> if(num[i] = j + '0') 'j' という文字と比べてどうすんの 以上。
275 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:30:26 ] >>274 どうもです。コンパイル通りました(^^ とっても初心者なので、「j + '0'」とするのがどうも理解しにくいところですが…(^^; あと、sage忘れスマソ
276 名前:14 mailto:sage [2008/11/05(水) 22:34:32 ] >>16 ありがとうございます。先頭のセルの削除と解放ができました。 すべてのセルを削除すると同時に連結リストの先頭と2つ目に追加したセルの領域を解放する関数って どう書けばいいんですか? void *delete_all(struct cell *head) { struct cell * next; if(head == NULL){ return NULL; } while(next !=NULL){ next = head->next; } free(head); } whileでnextをセルの終わりまで飛ばして、削除しようと考えたのですが領域の解放の部分が分かりません。
277 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:51:42 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7947.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月8日 よろしくおねがいします。
278 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:52:31 ] >>275 '0' は ASCII コードで 48 という整数値に対応する。 '1' は ASCII コードで 49 だから '0' + 1 と表せる。 同様に、'2', '3', ..., '9' は '0' + 2. '0' + 3, ... , '0' + 9 となる。
279 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:04:20 ] >>272 できました。 本当に助かります。ありがとうございました
280 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:12:41 ] 『2つの文字列をポインタ変数pxとpyを使って入力し、 pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、 その結果を出力するプログラム』 を作れという課題なのですが、うまく動作してくれません。 誤ってる部分等、目につきましたら助言お願いします。 #include<stdio.h> #define N 10 int main(){ char *px,*py,*pz,x[N+1],y[N+1],z[N+(N+1)]; /*最大N文字まで入力可としたいので、N+1個分の配列を用意*/ px=x; py=y; pz=z; printf("2つの文字列を入力してください。(ただし、各々最大%d文字まで)\n",N); printf("1つ目の文字列 >"); scanf("%s",px); printf("2つ目の文字列 >"); scanf("%s",py); /* pxとpyの文字列をpzに記憶させる部分 */ while(*pz++ = *px++) ; pz--; while(*pz++ = *py++) ; printf("%s\n",pz); return(0); } /*以下、出力結果 2つの文字列を入力してください。(ただし、各々最大10文字まで) 1つ目の文字列 >yamada 2つ目の文字列 >tarou フフフフフフフフフフフフフフフフフフフフtarou */
281 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:15:38 ] >>280 printf("%s\n",pz); ↓ printf("%s\n",z);
282 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:18:01 ] printf()の時点でpzがどこを指してるか考えてみよう
283 名前:280 mailto:sage [2008/11/05(水) 23:18:50 ] >>281 出来ました。ありがとうございます。こんなにあっさり・・・。 すみません、どうして、pzではまずいんでしょうか?
284 名前:281 mailto:sage [2008/11/05(水) 23:20:21 ] >>283 >>282 の通りだけど、 pz--; これをできているんだからもう少し考えればいけるさ。
285 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:21:53 ] 文字列操作関数使えば瞬殺だったりして
286 名前:280 mailto:sage [2008/11/05(水) 23:30:55 ] >>283 >>284 解決しました。ありがとうございました。
287 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:35:15 ] >>264 1問目あがり。 全角スペースは適当に置き換えてちょ。 #include<stdio.h> #define N 12 int main() { int i, array[N]; int max, min; for( i = 0; i < N; i++ ) scanf( "%d", &array[i]); /* とりあえず0番目の要素を最大値,最小値として設定し, それ以降の要素と比べる */ max = min = array[0]; for( i = 1; i < N; i++ ) { if(max < array[i]) max = array[i]; if(min > array[i]) min = array[i]; } printf( "Max: %d\nMin: %d\n", max, min); return 0; }
288 名前:デフォルトの名無しさん [2008/11/05(水) 23:45:19 ] exeファイルの中身、C++でプログラミングした文章は、 exeファイルから知ることはできないのでしょうか?
289 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 23:55:03 ] >>288 なんとなくはできるよ 逆アセンブルすりゃいいじゃん したらばニモニックが登場して そこからアセンブリを割り出せばいい さらにそのあと好きな高級言語に翻訳
290 名前:デフォルトの名無しさん [2008/11/05(水) 23:58:49 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7948.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月6日 朝7時 [5] その他の制限:出来るだけ簡単に! よろしくおねがいします!!!
291 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:17:02 ] >>278 ありがとうございます、すっきりしました(^^
292 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:24:37 ] 245をお願いします
293 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 00:27:32 ] >>288 ソースコードを知るのか、例えばアドベンチャーゲームのような、実行ファイルに含まれる 文章を知るのかによってかわるかな。
294 名前:デフォルトの名無しさん [2008/11/06(木) 01:08:14 ] [1] 授業単元: ループと条件分岐 [2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。xの範囲は[0, 4π]です。 縦をy軸と見立てます。使うのは条件分岐のif、ループ、putcharです。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 夜が明けるまで [5] その他の制限: 今はループと条件分岐のifまで習っています。使うのは条件分岐とループ、putcharです。 初めて書き込みします。特に難しいことは必要としないとは言っていましたが、自分には難しすぎます。 どうかよろしくお願いします。
295 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:14:05 ] >>276 , >>14 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7950.txt
296 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:28:06 ] >>294 横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。 #define WIDTH 80 #define HEIGHT 20 #define PI 3.14159265358979 int x, y; int c[WIDTH]; for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2; for(y = 0; y <= HEIGHT; y++){ for(x = 0; x < WIDTH; x++) if(c[x] == HEIGHT - y) putchar('*'); else putchar(' '); putchar('\n'); }
297 名前:296 mailto:sage [2008/11/06(木) 01:30:01 ] >>296 配列習ってないんだったら if(c[x] == の部分の c[x] を cos(4*PI/WIDTH * x) + 1)*HEIGHT/2 に置き換える。すると最初の for(x = 0; は不要。
298 名前:296 mailto:sage [2008/11/06(木) 01:33:10 ] と思ったけど、暗黙のキャスト使ってるから一度 int の配列に入れておくのが吉かも。
299 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:38:35 ] >>295 全然トリッキーじゃなかった。 struct cell *next, *curr; for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) { free(curr); } せめてこうだったわ。半日修行してくる。
300 名前:294 [2008/11/06(木) 01:48:40 ] >>296 配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。 どうすればよいでしょうか。 あと「横80文字縦20行とする」ってどういうことですか。
301 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:08 ] >>290 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7952.txt
302 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:49:11 ] >>264 2問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。 #include <stdio.h> #define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */ #define Y 3 int main(void) { int i, j, max, min, array[X][Y]; for( i = 0; i < X; i++ ) for( j = 0; j < Y; j++ ) scanf( "%d", &array[i][j]); max = min = array[0][0]; for( i = 0; i < X; i++ ) { for( j = 0; j < Y; j++ ) { if(max < array[i][j]) max = array[i][j]; if(min > array[i][j]) min = array[i][j]; } } printf( "Max: %d\nMin: %d\n", max, min); return 0; }
303 名前:301 mailto:sage [2008/11/06(木) 01:51:23 ] 問2の3行目は#include <string.h>だorz
304 名前:294 [2008/11/06(木) 02:08:21 ] 自分でもプログラムを組んでみたんですが、これから何とかなりませんか。 自分の組んだのだと、一つしか表示されません。 #include<stdio.h> #include<math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=0; y=y-0.1){ for(x=0; x<=pai/2; x=x+0.1){ if(y==cos(x)){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; }
305 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:19:51 ] y==cos(x) 幅を持たせろ、なんで一致するとおもったんだ?
306 名前:294 [2008/11/06(木) 02:22:03 ] 幅を持たせるって、どういうことですか?
307 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:23:47 ] yが0.1刻みなのにぴったり一致するわけないだろ?
308 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:27:23 ] #include <stdio.h> #include <math.h> int main(){ double x, y, pai=3.14; for(y=1; y>=-1; y=y-0.1){ for(x=0; x<= 4 *pai; x=x+0.1){ if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){ putchar('*'); } else{ putchar(' '); } } putchar('\n'); } return 0; } 答えわたしとけばいいんじゃね?
309 名前:294 [2008/11/06(木) 02:28:13 ] でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・ そういう場合はどうすればよいでしょうか。
310 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:32:01 ] >>301 おお! あざーっす!!
311 名前:294 [2008/11/06(木) 02:32:57 ] 本当にありがとうございました。 自分の知識が足りず、申し訳ありませんでした。
312 名前:301 mailto:sage [2008/11/06(木) 02:39:00 ] >>277 #include <math.h>を足して 関数のプロトタイプ宣言して #define next(x) (((x)+1% (Q_SIZE+1)) ↓ #define next(x) ((x+1) % (Q_SIZE+1)) 関数enqueue内の return 0; の前に rear = next(rear); 足して ○○○1つ目 enqueue(n) == -1 ○○○2つ目 (n=dequeue()) == -1 viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));
313 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:39:31 ] 名前消すの忘れた(´・ω・`)
314 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 02:54:41 ] Cで以下のような関数を作りたいのですが、可能でしょうか? 可能ならば、どのように実装すればよいのか教えてください。 int myrand(int Max, int N, int prob) 0からMaxまでのランダムな整数を返しますが、 probの確率でNを返してくれるような関数です。 例えば、myrand(100, 10, 50)は50%で10を返しますが、 それ以外は1〜100までランダム、という具合です。
315 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:03:44 ] >>314 それ以外は1〜100までランダム 10は含むのか?
316 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 03:12:50 ] if( (double)rand()/RAND_MAX < prob ) return N; else return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));
317 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 04:12:38 ] >>316 probを100で割るか左辺を100倍しないと
318 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 09:54:40 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 10進数⇔16進数の変換プログラムを作成せよ -10進⇒16進か16進⇒10進かを最初に選択 -変数はint型で 実行例 10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓ 10進数を入力してください: 1000 ↓ 入力した数は16進数で 3e8 です. 10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓ 16進数を入力してください: f86a ↓ 入力した数は10進数で 63594 です. [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。 お願いします。
319 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:02:27 ] >>318 strltolは使っちゃだめな課題っぽいけどそうなんだよね?
320 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:21:18 ] >>318 そうですね。 strltolは使わないでお願いします。
321 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:22:38 ] >>319 そうですね。 strltolは使わないでお願いします。
322 名前:デフォルトの名無しさん [2008/11/06(木) 10:46:05 ] >>318 #include <stdio.h> int main(void) { int i, n; printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: "); scanf("%d", &i); switch(i) { case 1: printf("10進数を入力してください: "); scanf("%d", &n); printf("入力した数は16進数で %x です\n", n); break; case 2: printf("16進数を入力してください: "); scanf("%x", &n); printf("入力した数は10進数で %d です\n", n); break; } return 0; }
323 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 11:47:27 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7953.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:c [4] 期限:11/10 [5] その他の制限:とくになし よろしくおねがいします
324 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:07:30 ] >>323 int kaibun(char str[]){ { int i, n; /* 終端文字 \0 または \n までの文字数を数える */ for(n = 0; str[n] != '\0' && str[n] != '\n'; n++); /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */ for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0; /* 最後まで return 0 されなかったら 1 を return */ return 1; }
325 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:11:06 ] for(i = 0; i < n; i++) は for(i = 0; i < n/2; i++) で十分だったな
326 名前:738 [2008/11/06(木) 12:23:09 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。 ”終わり”と入力すればプログラム終了。 [3] [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: 2008年11月8日までお願いします。 [5] その他の制限: scanfを使うのではなくgetcharを使用
327 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:23:19 ] >>326 マルチバイト文字の処理を要求しているのか
328 名前:324 mailto:sage [2008/11/06(木) 13:28:33 ] >>323 例文よく見てなかった。大文字小文字は区別しないのな 制限なしってことだから、ctype.h の tolower 使って書き換える if(str[i] != str[n - i - 1]) ↓ if(tolower(str[i]) != tolower(str[n - i - 1]))
329 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 13:33:00 ] >>252 ありがとうございました!
330 名前:324 mailto:sage [2008/11/06(木) 14:35:12 ] 何度もすまん。空白も無視しないとダメなんだな int kaibun(char str[]) { int i, n; char buf[MAX_SIZE]; /* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */ for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i]; /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */ for(i = 0; i < n; i++) if (tolower(buf[i]) != tolower(buf[n - i - 1])) return 0; /* 最後まで return 0 されなかったら 1 を return */ return 1; }
331 名前:123 mailto:sage [2008/11/06(木) 16:34:15 ] >>123 をお願いできないでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:49:14 ] >>324 なんども申し訳ありません ありがとうございます!
333 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 18:58:02 ] >>322 本当に有難う御座いました。 大変助かりました。
334 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:40:49 ] お願いします [1] 配列 [2] 下に示す行列の積を求めて表示するプログラムを作りなさい。 int x[2][3]={{1,2,3},{4,5,6}} int y[3][2]={{1,5},{5,3},{8,1}} 実行結果 35 14 77 41 問 [3] 環境 [3.1] XP [3.2] VC 6.0 [3.3] 言語:C [4] 期限:明日まで
335 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 19:59:36 ] >>331 #include <string> #include <iostream> class Fish {}; class Wakana : public Fish{ protected: std::string name; public: Wakana() : name("ワカナ") { }; void show() { std::cout << name << std::endl; }}; class Tsubasu : public Wakana { protected: std::string name; public: Tsubasu() : name("ツバス") { } void show() { std::cout << Wakana::name << "→" << name << std::endl; }}; class Inada : public Tsubasu { protected: std::string name; public: Inada() : name("イナダ") { } void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };}; class Hamachi : public Inada { protected: std::string name; public: Hamachi() : name("ハマチ") { }; void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}}; class Buri : public Hamachi { protected: std::string name; public: Buri() : name("ブリ") { }; void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}}; int main(){Buri().show(); return 0;}
336 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 20:08:41 ] 入出力関数は?
337 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:02:39 ] 題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7954.cpp クラス名がinabaになっちゃった.
338 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:05:41 ] >>334 上の方に行列の課題なかったか? int ans[2][2] = {0}; int i, j, k; for(i = 0; i < 2; i++) for(j = 0; j < 2; j++) for(k = 0; k < 3; k++) ans[i][j] += x[i][k]*y[k][j]; for(i = 0; i < 2; i++){ for(j = 0; j < 2; j++) printf("%d ", ans[i][j]); printf("\n"); }
339 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:12:34 ] [1] 授業単元: 配列を用いた計算 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7955.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:11月10日12:00まで [5] その他の制限: 構造体を利用することになっています。 構造体のメンバーは 行のサイズ unsigned int 列のサイズ unsigned int 行列のデータへのポインタ double ** で構成するものとする。 と指定されています。 よろしくお願いします。
340 名前:334 mailto:sage [2008/11/06(木) 21:31:54 ] >>338 ありがとうございます
341 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 23:13:24 ] >>316 , 317 ありがとうございます。 >>315 Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、 316さんの実装で十分です。
342 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:17:42 ] [1] 授業単元: ポインタ配列 [2] 問題文(含コード&リンク): #include <stdio.h> int main(void) { char ??? = { "1.振り込み", "2.預け入れ", "3.残高照会", "4.通帳記録", "5.終了", ??? }; char ???p; p = menu; while(*p){ printf("???\n",???); } 上記の???の場所を適切に埋め、動作を確認する。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C++ [4] 期限: [2008年11月07日10:00まで] [5] その他の制限: よろしくお願いします。
343 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:34:56 ] #include <stdio.h> int main(void) { char *menu[] = { "1.振り込み", "2.預け入れ", "3.残高照会", "4.通帳記録", "5.終了", NULL, }; char **p; p = menu; while(*p){ printf("%s\n", *(p++)); } return 0; }
344 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:37:17 ] >>343 動作確認しました。 ありがとうございます! 助かりました。
345 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:05:48 ] [1] 授業単元: C [2] 問題文: (1)自然数nの正の約数が6個あり(1及びn自身を含めて) それらの総数の和が532である時のnの値を求めるプログラム。 (2) nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [11月7日8:00まで] [5] その他の制限: 特になし (2)については答えが76と分かっているのですが (1)についてはさっぱりなんです…
346 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:20 ] >>345 (1) #include<stdio.h> int main() { int n, c, a, s; for (n = 1; ; n ++) { c = s = 0; for (a = 1; a <= n; a ++) { if (n % a == 0) { c ++; s += a; } } if (c == 6 && s == 532) { printf("%d\n", n); break; } } return 0; }
347 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:55:57 ] >>345 すごい力まかせ、最適化の余地あり void main(){ int count ; int buff[6] ; for ( int i = 1 ; i < 532 ; i++ ){ count = 0 ; for ( int j= 1 ; j <= i ; j++ ){ if(i%j==0){ buff[count] = j ; count++ ; if ( count >= 6 ){ break ; } } } if ( count == 6 && buff[5]==i){ if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){ printf ( "%d\n", i ) ; break ; } } } }
348 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:07:12 ] (2) #include <stdio.h> int main(void) { int n, tmp; for(n=10; n<100; n+=2){ if(n == n*n%100) break; } printf("%d\n", n); return 0; }
349 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:36:24 ] >>339 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7956.c 動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。
350 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 04:51:50 ] >>339 同じ学校だね。
351 名前:デフォルトの名無しさん [2008/11/07(金) 06:11:38 ] 突然すみません。getsで何も入力しなかった場合に特定の処理をしたいのですが、 下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。 int main(){ char a[256]; gets(a); if(a==NULL){ printf("何か入力して下さい"); } puts(a); } 宜しくお願いします。
352 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 06:41:13 ] a[0]=='\0'
353 名前:351 [2008/11/07(金) 06:57:08 ] >>352 ありがとうございました。
354 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 07:17:14 ] [1] 授業単元: C++ [2] 問題文(含コード&リンク): 上下の画面外から敵を2つ出現させて、中央へ移動。左斜め上、右斜め下へそれぞれ移動し、矢印の方向へ一周回る。 一周回ったら再び、中央へ移動する。こんな感じの動きですwww.dotup.org/uploda/www.dotup.org18140.bmp.html 敵を表示させるところまでいったのですが、どうかお願いします。www.dotup.org/uploda/www.dotup.org18139.zip.html [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC2005又はVC2008 [3.3] 言語: C++ [4] 期限: 2008年11月8日18:00まで [5] その他の制限: 構造体でお願いします。説明不足な点など、何かあれば言って下さい。
355 名前:241 mailto:sage [2008/11/07(金) 08:35:49 ] どなたか>>241 を御願いできないでしょうか?
356 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:21:50 ] >>354 クラスは使っていいの?
357 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 10:55:20 ] >>356 使っても大丈夫です。
358 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:02:23 ] >>241 問題文とか一部だけ見せられてもね・・・・
359 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:47:47 ] 自分の才能の無さに絶望した。 >>354 恥ずかしすぎるので実行ファイルのみ(DXライブラリ) ttp://www.dotup.org/uploda/www.dotup.org18202.zip.html
360 名前:デフォルトの名無しさん [2008/11/07(金) 12:59:19 ] [1] 授業単元: プログラミング [2] 問題文 神経衰弱の作成 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio [3.3] 言語: C [5] その他の制限:行と列を入力し表にする、
361 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:08:15 ] >>349 動作確認できました。 ありがとうございます<(_ _)>
362 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:09:35 ] 例えば一回出した乱数をaに入れて固定するのはどうしたらいい? 言語はc++です
363 名前:デフォルトの名無しさん [2008/11/07(金) 14:17:19 ] [1] 授業単元: プログラミング [2] 問題文 # 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0〜9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ. kawasaki@orange ~/lectures/2008/C/5$ ./a.exe a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0) b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6) The value of the inner product of the two vectors = 182 kawasaki@orange ~/lectures/2008/C/5$ ./a.exe a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8) b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0) The value of the inner product of the two vectors = 173 kawasaki@orange ~/lectures/2008/C/5$ ./a.exe a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1) b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8) The value of the inner product of the two vectors = 321 kawasaki@orange ~/lectures/2008/C/5$ # 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0〜9の整数乱数をつくる. [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: [3.3] 言語: C [5] お願いします・・・できれば1時間以内に・・・
364 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:24:44 ] >>362 変数に代入すれば?
365 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:30:18 ] >>363 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a[10], b[10], i, sum = 0; srand((unsigned int)time(NULL)); for (i = 0; i < 10; ++i) { a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX)); b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX)); } printf("a = ("); for (i = 0; i < 9; ++i) { printf("%d, ", a[i]); } printf("%d)\n", a[i]); printf("b = ("); for (i = 0; i < 9; ++i) { printf("%d, ", b[i]); sum += a[i] * b[i]; } printf("%d)\n", b[i]); sum += a[i] * b[i]; printf("The value of the inner product of the two vectors = %d", sum); return 0; }
366 名前:デフォルトの名無しさん [2008/11/07(金) 14:33:59 ] [1] 授業単元: プログラミング [2] 問題文 神経衰弱の作成 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio [3.3] 言語: C [5] その他の制限:行と列を入力し表にする、 できれば夕方あたりまでにおねがいします><
367 名前:デフォルトの名無しさん [2008/11/07(金) 14:39:12 ] >>365 ありがとうございます!
368 名前:デフォルトの名無しさん [2008/11/07(金) 14:57:06 ] >>365 のはarrayを使うとどういった形になりますか?
369 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:08:25 ] [1] 授業単元: C,C++、データ圧縮LZ78符合 [2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。 データ列:ABCBCBCDEBCDABCD コンソールアプリケーションで作成すること。 画面には最低限以下のものを出力すること。 【1】与えたデータ列 【2】作成した辞書の一覧 【3】符号化したデータ列 [3] 環境 [3.1] OS: WindousXP [3.2] コンパイラ名とバージョン: VisualStudio2005 [3.3] 言語: C,C++どちらでも可 [4] 期限:2008年11月13日まで [5] その他の制限: 標準ライブラリ可
370 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:56:14 ] >>354 struct 座標 { int x, y; }; struct 移動 { 座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する 移動 *next; // 次の移動先へのポインタ }; こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ? 見当違いな事言っていたらごめんね。
371 名前:241 mailto:sage [2008/11/07(金) 17:47:36 ] >>358 すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。 課題1 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7957.zip 課題2 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7958.zip 課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、 課題2がシナプスの結合の重みを決定するものです。 説明と資料の不足どうもすみませんでした…。 他にも情報、説明が足りない所があればお伝え下さい。 あと追記ですが、提出期限が11月9日→11月10日に変更になりました。
372 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:04:34 ] >>371 これって正解?それとも自力で解いたやつ? >weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/ >weight[j][i]=weight[i][j]; 課題2回答.txtのこの部分、おかしい気がするんだけど。
373 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:18:00 ] >>371 課題2からしてコンパイルどころかインデントのチェックすら通らんな 例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、 全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ
374 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:37:50 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7959.c ↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を 次のように改造せよ。 ・月のカレンダーではなく一年分のカレンダーを表示させる。 ・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。 というのと、 フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。 ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで プログラムを三つ書く。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限: 2008年11月10日まで [5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて 作成したものです。 2つになってしまいましたがどうかよろしくお願いします。
375 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:48:53 ] >>366 一応クリアはできた ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7960.c
376 名前:241 mailto:sage [2008/11/07(金) 18:51:32 ] >>372 >>373 もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、 違う所にここまでの講義内容のpdf全部上げときます。(第2回〜第5回迄) www1.axfc.net/uploader/He/so/155985.zip DLパスは「123」です。馬鹿学校ですいません…。
377 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 18:57:20 ] >>376 上げてもらった資料まだ目を通してないけど とりあえず対角成分だけ別に設定できるようにしてやってみた 例題と同じ値を入れてみても経過が一致しないww kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7961.txt
378 名前:377 mailto:sage [2008/11/07(金) 18:58:37 ] 例題と同じ値で試してみたい場合は最初のforループ(乱数でpattern生成するところ)を ざっくりコメントアウトすればいい
379 名前:デフォルトの名無しさん [2008/11/07(金) 19:11:46 ] [1] 授業単元:数値計算 [2] 問題文(含コード&リンク): data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。 対角要素に0に近い要素があっても、正しく求められるように工夫せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限: なし お願いします!
380 名前:372 mailto:sage [2008/11/07(金) 20:23:47 ] >>377 俺はお手上げだ。 それ、初期化忘れと、対角成分ってところに代入するのは0じゃね? ってことでこれ。変更箇所に目印を付けてみた。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7962.txt
381 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:37:04 ] >>380 対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。 weight は全要素に値が入るんだから初期化不要では? あと、pattern2 の初期値だが、ランダムに「反転する」ならば if(randv > 0.75) pattern2[i] = -pattern1[i]; else pattern2[i] = pattern1[i] みたいな感じにすれば、この場合 25% の確率で反転する。
382 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:24:20 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): 円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい -変数はすべてdouble型を用いること -円周率p=3.14159265358979として計算 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
383 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:38:25 ] >>382 ほんとに問題それであってる? #include <stdio.h> main() { double p = 3.14159265358979, r, h; printf("半径: "); scanf("%lf", &r); printf("高さ: "); scanf("%lf", &h); printf("体積: %f\n", p*r*r*h); }
384 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:46:30 ] >>383 問題文はこれだけなので合っているのですが、どうかされましたか?
385 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:49:00 ] 公式と最低限の入出力関数さえ知ってれば何の苦労もなさそうだから 宿題とする価値がないというか何と言うか…
386 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:54:53 ] >>385 そうなんですか。 一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。 そんな問題が解らないって本当に自分やばいですね。 何はともあれ、宿題をやって下さって有難う御座いました。 本当に助かりました。
387 名前:デフォルトの名無しさん [2008/11/07(金) 23:06:11 ] [1] 授業単元:Linuxプログラミング [2] 問題文(含コード&リンク): 途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか がおかしいと思うのですが、見て下さい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7966.c kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7964.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7965.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.1.2 [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限: やろうとしていること: 実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt exitを入力するまで繰り返し何度でもコマンドを実行出来る。 質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。 質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ 抜けられなくなってしまいました。 質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。 argv[i]に格納した文字列が途中で切れてしまっているように思われます。 質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。 質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる 場合は教えて下さい。以上、長くなりましたが宜しくお願いします。
388 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:16:10 ] >>386 悪いが383≠385だ。
389 名前:372 mailto:sage [2008/11/07(金) 23:18:14 ] >>381 すまん、恥ずかしさを胸に吊ってくる
390 名前:377 mailto:sage [2008/11/07(金) 23:30:28 ] >>376 資料に目を通した。 >>389 よくみると重み付き総和の計算で j≠i と小さくw書かれてたから w[i][i] = 0 が正解だわ あと資料にいろいろ小出しにされたヒントを全部反映させといた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7967.c >>377 は毎回全部のニューロンをもれなく更新してたたために2ステップで ほとんど収束してたけど、ランダムに更新するニューロンを選択する部分作ったら 収束がほどよい感じになった。 NUM_OF_NEURON がニューロン数 NUM_OF_ERRORS を増やすと初期値の乱れ具合が増す。 ほどほどにしないと収束しなくなるw 結構おもしろかったわ
391 名前:377 mailto:sage [2008/11/07(金) 23:41:34 ] 何度もすまね、1か所間違いみっけた if (tmp[i] > 0) printf("■"); else printf("□"); /* neuron_state を tmp にコピーしてから使う */ tmp[i] = neuron_state[i]; これは、printf する前に、for のすぐあとに書かないと表示が狂う for(i = 0; i < NUM_OF_NEURON; i++) { /* neuron_state を tmp にコピーしてから使う */ tmp[i] = neuron_state[i]; if (tmp[i] > 0) printf("■"); else printf("□");
392 名前:383 mailto:sage [2008/11/07(金) 23:56:36 ] >>386 むかし専門学校で講師やってたんだが、scanf 教えたその日に出して 授業中に作らせた課題で、宿題にすらなってなかったんで確認してみた
393 名前:241 mailto:sage [2008/11/08(土) 00:09:19 ] >>390 動作確認しました!ありがとうございました! 絶望してた課題だったので凄いうれしいです;; 多レスでご迷惑お掛けしてすいませんでした><
394 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:52:00 ] >>387 初回の fork の前後で cmd->args[0] の内容が違って見えるね cmd->args[i] の領域って、自分で malloc してないで、strtok() に任せてるでしょ 自分で malloc した領域をつかって strtok_r 使ってみたら?
395 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:14:04 ] >>354 とりあえず、出題の動きをするものを作った どことなく危険な香りのするプログラムになった www.dotup.org/uploda/www.dotup.org18927.zip.html 出題者の意図がまったくわからないので かなりの手抜きプログラムになっている おそらく出題者の意図とはかけ離れたものであろう気がする というか、何のシステムのないところにいきなりこれをやれって無理があるような 最初にめんどくさい思いをさせて「こうすると楽だよ」的な流れなのか 何か前説があってそれを踏まえた上でやるべき課題なのか・・・・
396 名前:394 mailto:sage [2008/11/08(土) 02:25:45 ] >>387 あー、違うところかもしれん 原因はそこじゃなくて、gets() やってるところだと思う simple_accept_input() のローカル変数 str[] に取り込んでるでしょ strtok(str, " ") とやっているわけだから strtok によって得られるポインタは、 このローカル変数 str[] を参照する。 ローカル変数の寿命はその関数を抜けるまで。 実際 str[] はスタック領域に作られるわけだから、後に関数が実行されたときに 破壊される可能性大。 今回はそれがたまたま fork() 実行時に重なっただけで、fork() 自体によって データロストしてたわけではなさそう(そもそも fork は全データコピーだしね) 普通、ポインタでいろんなとこから参照されるデータを、特定の関数のローカル変数にしまってはいけない。 gets したデータは、main のローカル変数なりグローバル変数なり malloc するなりして不揮発にしておかないと
397 名前:394 mailto:sage [2008/11/08(土) 02:41:38 ] >>387 てなわけで、simple_accept_input() の char str[256] をグローバルにしただけで動くようになった。 (1) str[] をグローバルにすれば解決 (2) 同上 (3) 同上 (4) execvp() の直後に exit(-1); とかやって子プロセスを終了させないと fork_cmd() から返って gets(str) はじめてループになるぞ (5) シグナルで何やりたいかわからんが、signal システムコールでこの関数と シグナル関連付ければ、シグナル発生したときにこの関数に飛んでくる
398 名前:387 mailto:sage [2008/11/08(土) 03:11:24 ] >>397 ありがとうございました。char str[256]とchar *strpをmain関数の前で宣言するようにしました。 初回からきちんと動作するようになりました。それから、子プロセス側ではexecvp後にexit(-1)を 入れるようにしました。(1)、(2)が解決しました。 しかし、これで(3)と(4)も直るはずでしょうか?私の環境ではまだ直りません。。具体的な症状は以下の通りです。 (3)引数の数が前回より減った場合におかしくなる (一回目)test> ls -l -a -s /tmp/temp.txt ---OK (二回目)test> ls -l -a /tmp/temp.txt ---NG ls: p/temp.txt: ファイルかディレクトリが存在しません ※ちなみに引数の数が前回より増える場合は問題ないです。 (一回目)test> ls -l -a /tmp/temp.txt ---OK (二回目)test> ls -l -a -s /tmp/temp.txt ---OK まだどこか修正する箇所がありますでしょうか? (4)存在しないコマンド実行時、コンソールから実行したのと同じようにエラーを表示することは出来ないでしょうか? 例)test> jfodajfoeifji -l -a -l /tmp/temp.txt -bash: jfodajfoeifji: コマンドが見つかりません (5)そうですよね、これだけじゃ何がしたいか不明ですよね。。こちらは、無視して頂いて結構です。
399 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:36:41 ] >>398 (3) 原因は、cmd->args[i] の最後の要素に NULL が入っていないこと 。 simple_accept_cmd() 内で if(strp != NULL){ cmd_a->args[i] = strp; cmd_a->num_args++; } とやって cmd_a->args[i] には NULL が入らないようになってるけど、 cmd_a->args[i] = strp; if(strp != NULL){ cmd_a->num_args++; } と順序変えてやればおk (5) コマンドの status を見てやればエラー処理できるでしょ エラーの詳細知りたかったら、子プロセスでないとわからないから execvp(cmd->args[0], cmd->args); printf("Command error:%s\n", strerror(errno)); とでもすれば、strerror で得られる原因が表示される。ファイルが見つからない場合だけ 対処したいんだったら、execvp 直後の errno の値で場合分けを行う。
400 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 03:45:19 ] >>395 業務系じゃありえない魔術過ぎてワロタ これがゲームプログラムって奴なのか いくらなんでもお行儀が悪すぎだろう
401 名前:387 mailto:sage [2008/11/08(土) 03:52:59 ] >>399 解決しました!ありがとうございました。
402 名前:デフォルトの名無しさん [2008/11/08(土) 04:09:43 ] [1] 授業単元:ポインタ [2] 問題文(含コード&リンク): 検索対象文字列と検索文字列を入力して、発見位置と個数を出力する。 ※検索対象文字列は50文字を超えないものとする ※標準ライブラリのstrstr関数を利用すること ※実行例のような出力が得られるようにすること <実行例> 検索対象文字列→AAAAAAAAAAA 検索文字列→AAA 検索結果 AAAAAAAAAAA ********* 9個発見しました [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Borland C++ Compiler 5.5 [3.3] C [4] 期限:明日 [5] その他の制限:なし ポインタ難しいです・・・この時間までやってましたができませんでした。 どなたかよろしくおねがいします!!
403 名前:デフォルトの名無しさん [2008/11/08(土) 04:13:21 ] 質問なのですが、ここでは問題文が英語の宿題もやって頂けますか?
404 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:23:06 ] >>403 何度かそういうのあったよ。
405 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:29:47 ] >>402 #include <stdio.h> #include <string.h> int main() { char str[100], needle[50], *p; int i = 0; printf("検索対象文字列を入力:"); scanf("%s", str); printf("検索文字列を入力:"); scanf("%s", needle); printf("検索対象文字列→%s\n", str); printf("検索文字列→%s\n", needle); printf("検索結果\n%s\n", str); p = str; while(strstr(p, needle) != NULL){ if(p == strstr(p, needle)){ i++; printf("*"); } else printf(" "); p++; } printf("\n%d個発見しました\n", i); return 0; }
406 名前:デフォルトの名無しさん [2008/11/08(土) 04:30:45 ] >>403 そうなんですか。それでは英語の問題文のまま載せても大丈夫ですか? それとも和訳したほうが良いですか? あまり自分の英語力に自信ないんで変な和訳になってしまったらと思ってるのですが。
407 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:42:37 ] 構わん、載せろ。 多分俺はできないが。
408 名前:デフォルトの名無しさん [2008/11/08(土) 05:24:42 ] >>407 ありがとうございます。それでは載せさせて頂きます。 [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月10日 [5] xtxの中の図は自分が作って物です。図を載せようとしたのですが載せれなかったので。 わかりにくくてすいません。 英語の問題文ですがよろしくお願いします。
409 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 05:39:34 ] >>408 単なる C のプログラムになっちまったが kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7971.txt
410 名前:409 mailto:sage [2008/11/08(土) 05:41:20 ] ぐは 偶数奇数判定逆だった if(*in_val % 2 == 0) ↓ if(*in_val % 2 != 0)
411 名前:デフォルトの名無しさん [2008/11/08(土) 05:57:20 ] >>408 本当に助かりました。ありがとうございました。
412 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 06:00:05 ] うまいこと図を書くなあ。 ただのCだから今までの授業で習ったものと毛色が随分と異なる場合はばれちゃうね。
413 名前:デフォルトの名無しさん [2008/11/08(土) 07:18:54 ] >>412 図が文字化けしてましたね。すいません。 やはりCとC++とではだいぶ異なるんですか? 最近授業でプログラミング始めたばかりなんでわからないことだらけで。
414 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:41:14 ] すみません。ポインタが苦手なC初心者です。教えて下さい。パイプ相当の機能を つくろうとしているのですが、まずは前段として以下のようなものをつくりたいです。 例えば「./a.out "cat -n test.c" "grep a"」 と引数を与えてプログラムを実行すると、 str1[0]=cat, str1[1]=-n, str1[2]=test.c, str1[3]=NULL, str2[0]=grep, str2[1]=a, str2[2]=NULL, のように格納させたいです。つまり、argv[1]の内容とargv[2]の内容をそれぞれstrtokで空白で 区切って格納させていき、最後にNULLを入れる。思うように出来ません。宜しくお願いします。
415 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:54:07 ] >>413 図はエンコード指定すればだいじょうぶ。 今までの授業で教えてもらったソースコードと雰囲気が似てるならいいよ。 授業でcinとかcoutとか使わなかった?
416 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 07:55:18 ] >>414 pipe や popen 使わずにどうやってパイプ相当の機能を作るのかわからないけど kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7972.txt
417 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:11:34 ] シェル使えば標準入力に入ってくるからいいんじゃないの
418 名前:414 mailto:sage [2008/11/08(土) 08:11:58 ] >>416 有り難うございます。popenはわからないのですがpipeを使ってやってみようと思います。 ひょっとして全然とんちんかんなことやっているのかも知れませんがもう少しやってみて 駄目だったらまたご質問させて頂きます。
419 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:12:49 ] ってパイプ自体を作ろうとしてるんじゃないよね。 foo | ./a.out ってやりたいだけだよね
420 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:17:00 ] 作ってみた。でおじゃる、とは言わない(というと出てくるかしら) #include <stdio.h> #include <string.h> int main(int argc, char **argv) { char *str1[10]; char *str2[10]; char **p; p = str1; *(p++) = strtok(argv[1], " "); while ((*(p++) = strtok(NULL, " ")) != NULL); for (p=str1; *p!=NULL; p++) { printf("%s\n", *p); } return 0; } インデント確認用アンカー >>420
421 名前:414 mailto:sage [2008/11/08(土) 08:19:53 ] >>417 >>419 パイプ自体を作ろうとしています。シェルだとcat -n test.c | more と打つところを、./a.out "cat -n test.c" "more"と打たせることで、 forkした親子プロセスでファイルディスクリプタなんちゃらというのを 使って(すみません勉強したてです)処理を渡すようなCプログラムを作ろうとしています。 自分の限界は恐らく1時間前後で見えてくると思いますのでしばしお待ち下さい。
422 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:22:39 ] アラヤダ。 そっか。がんばってねー。 またなんかあると聞くといい、、、けど宿題スレはちょと違うかもだ
423 名前:414 mailto:sage [2008/11/08(土) 08:38:11 ] 出来ました!思ったより随分あっけなく。。というか、ウェブでみっけたソースがほとんど そのまま流用出来たので。皆様、有り難うございました。 >>422 すみません。宿題は宿題なのですが、初心者なのに毎週難易度がぐんと上がるので、ある程度は 自分でやってみないと次から全くわからなくなってしまうので。。わからないところだけ小出しに 質問させて頂きました。スレに反していたら申し訳ないです。 あ、でも匿名パイプの次の宿題は名前付きパイプなのですが、こちらはちょっと読んだところ手も足も 出なそうなので、丸投げさせて頂くと思います。またちょっとしたら投稿します。ぐだぐだすみません。
424 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:49:57 ] 名前付きパイプはファイルの読み書きと変わらないからむしろ簡単かも
425 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:51:24 ] >>423 の、「でも匿名パイプの次の宿題は名前付きパイプなのです」 から察するに、pipeを使って2つのプロセスを繋げろという課題、 次の課題はsocketを使ってAF_UNIXのパイプを作って〃とみた。
426 名前:デフォルトの名無しさん [2008/11/08(土) 10:45:59 ] vectorで自分で作ったクラスをタイプとして持たせるにはどうすればいいんですか? たとえばABCとDEFという二つのクラスがあるとします。 DEFというクラスがABCから作られたオブジェクトを無制限に持つようにしたいんです。 この際にDEFのメンバやコンストラクターはどんな感じに作ればいいのでしょうか?
427 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:02:34 ] class DEF { std::vector<ABC> abc; }; メンバとして持たせたいなら、これだけじゃないの?
428 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 11:15:46 ] [1] 授業単元: プログラミング実習2 [2] 問題文(含コード&リンク): ニュートン法を利用して入力データの平方根を求めるプログラムを作りなさい. -解を求めたい実数aを入力 -解を求めるための初期値x0を入力 ・なんでもよいが普通はaの平方根に近い値を入力 -ニュートン法を用いた計算 ・x1=(x0+a/x0)*0.5を計算 ・x1-x0の絶対値がe以下ならばx1が求める平方根 - eは収束判定に用いる値でここでは1.0E-10を使用する -差が-eからeの範囲に入れば繰り返し終了 -入らなければx1をx0に代入して再度繰り返してx1の計算 [3] 環境 Visual C++ [3.1] OS:Windows [3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ [3.3] 言語: C言語 [4] 期限: 2008年11月10日(月)までお願いします。 [5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数 逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、 繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=) インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。 お願いします。
429 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 11:21:54 ] >>428 のプログラムの実行例 平方根を求めたい数を入力してください: 5.0 ↓ 解を求めるための初期値を入力してください: 2.0 ↓ 5.000000 の平方根は 2.236068 です. 平方根を求めたい数を入力してください: 123.456 ↓ 解を求めるための初期値を入力してください: 10.0 ↓ 123.456000 の平方根は 11.111076 です.
430 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:36:00 ] >>428 そこまで計算式や判定法が分かってるなら、すぐに解けそうなものだけど。。。 #include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { static const double e = 1.0e-10; double x0, x1, a; printf("平方根を求めたい数を入力してください: "); scanf("%lf", &a); printf("解を求めるための初期値を入力してください: "); scanf("%lf", &x0); x1 = (x0 + a/x0)*0.5; while (fabs(x1-x0) > e) { x0 = x1; x1 = (x0 + a/x0)*0.5; } printf("%f の平方根は %f です\n", a, x1); return 0; }
431 名前: ◆Mn9bS1g7Ng mailto:sage [2008/11/08(土) 12:01:33 ] >>430 本当に有難う御座いました。 大変助かりました。
432 名前:354 ◆zeyvxEAaZQ [2008/11/08(土) 15:07:01 ] >>359 >>370 >>395 ありがとうございました! >>370 さんのやり方も試してみます。 >>395 さん 「こうすると楽だよ」的な流れだと思います。他にもやりたい事はあるのですが、teki.hとel.hいうファイルが何なのかよくわかりません。消しても平気でしょうか?
433 名前:354 ◆zeyvxEAaZQ mailto:sage [2008/11/08(土) 15:07:43 ] すみません、sage忘れました。
434 名前:414 mailto:sage [2008/11/08(土) 16:17:14 ] 名前付きパイプの方も自力で一応出来ました!ありがとうございました。 >>425 今週の宿題は完了しました。次回はメッセージキューと共有メモリみたいです。 次次回がソケット関連みたいでした。また困ったら投稿させて頂きます。 疲れた。。寝ます。
435 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:02:52 ] [1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): キーボードから自分の学生番号を半角小文字整数で、氏名を半 角小文字のローマ字で、身長(cm)を実数で、体重(kg)を実数で入力し、 学生番号と氏名・身長・体重・身長(cm)+体重(kg)を表 示するプログラムを作成しなさい。 [3] 環境 [3.1] OS:XP [3.2] VC 6.0等 [3.3] 言語: C [4] 期限: ([2008年mm月11日11まで [5] その他の制限:やってまもないです 少しやってみたんですがここで詰まっています #include<stdio.h> void main(void) { int x,y; printf("学生番号を半角小文字整数で入力;\t"); scanf("%d",&x); printf("10進数表示 ; DEC(x)=%d\n",x); printf("氏名を入力する;\t"); }
436 名前:435 mailto:sage [2008/11/08(土) 17:04:02 ] 訂正 11月11日までです
437 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:11:44 ] >>435 #include<stdio.h> int main(void) { int x; char s[1000]; double h, w; printf("学生番号を半角小文字整数で入力;\t"); scanf("%d",&x); printf("氏名を入力する;\t"); scanf("%s", s); printf("身長を入力する;\t"); scanf("%lf", &h); printf("体重を入力する;\t"); scanf("%lf", &w); printf("学生番号: %d\n", x); printf("氏名: %s\n", s); printf("身長: %f\n", h); printf("体重: %f\n", w); printf("身長 + 体重: %f\n", h + w); return 0; }
438 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:32:54 ] >>435 せめてBMI判定くらいはしてやれwwww
439 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 17:58:46 ] >>435 単位の違うものを足すの?
440 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:31:03 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7973.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/10 [5] その他の制限:おそらく実行例の関数にさえ対応していれば大丈夫だと思います よく分からない問題だと思いますがよろしくお願いします
441 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 21:58:45 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 文字列str1の中身が半角から全角に切り替わる箇所にはその文字の前に16進数の{0x40}を 全角から半角に切り替わる箇所には16進数の{0x41}を挿入し その結果をテキストtest1.txtに出力をするプログラムを作成しなさい。(結果の確認はバイナリエディタで行うように) なお、文字列str1の文字コードはSJISとする。 ※問題文では触れられておりませんが 文字列の1文字目が全角の場合は最初に{0x40}を 最後の文字が全角の場合は一番最後に{0x41}を付加しなければならないようです。 出力例: 挿入前の文字列str1:スレタイ C/C++の宿題を片付けます117代目 テキストに出力される文字列:{0x40}スレタイ {0x41}C/C++{0x40}の宿題を片付けます{0x41}117{0x40}代目{0x41} リンク:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7974.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/11 [5] その他の制限: 全角文字と半角文字を区別する箇所までは出来たのですが 文字列の中に16進数を挿入する過程で詰まってしまいました。 特に制限は無く、私が作った部分の改変をするのもおkですのでよろしくお願い致します。
442 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:04:34 ] 0x40は@、0x41はAのことか? そもそも宿題なのか?
443 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:25:41 ] >>442 ソースコート上では単純に文字として挿入するのではなく16進で挿入しなければならないようです memcpyの使い方に関する宿題です(;´Д`)
444 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:00:20 ] >>441 挿入してるのは ASCII だからべつにバイナリエディタでなくても確認できるな kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7975.txt あ、test1.txt に出す部分作るの忘れたからそれはご自分で。最後の printf を fprintf に置き換えるだけだね
445 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 23:12:21 ] >>444 ばっちりです!ありがとうございました あとは自分で改変してみます
446 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 01:02:30 ] >>437 ありがとうございます。 >>439 そういう適当な課題なんです
447 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:20:57 ] 440の問題微妙に難しくない?コンパイラ?
448 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:40:51 ] [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7976.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/12 [5] その他の制限:特になし よろしくお願いします
449 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 02:52:06 ] [1] 授業単元:C [2] 問題文 初期設定された任意の整数配列内のデータを,大きい順に並べ換えるプログラム をつくりなさい。ただし,並べ換える部分を関数にして,配列とデータ数を引数として 渡しなさい。例として,次の10 個の整数を格納した配列に適用してみなさい。 static int dd[10] = { 27, 89, 45, 18, 55, 64, 92, 73, 34, 88 }; 出力例: ソート後 = 92 89 88 73 64 55 45 34 27 18 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年11月10日 24:00 [5] その他の制限:次のようなプロトタイプ宣言をもつ関数isort を定義しなさい。 void isort(int *, int); できましたら、C言語の基本的な関数のみでお願いします。
450 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:15:08 ] >>447 関数の名称その他の抽出って感じだろう 構造体を誤認識しないようにしつつ
451 名前:450 mailto:sage [2008/11/09(日) 03:16:42 ] ごめんたしかにかなり面倒ですね どのくらいまでやればいいんだろ
452 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 03:25:55 ] >>449 void isort(int * ary, int nelem) { int i; for ( i = 1; i < nelem; ++i ) { int j; int tmp = *(ary + i); for ( j = i - 1; j >= 0 && *(ary + j) < tmp; --j ) { *(ary + j + 1) = *(ary + j); } *(ary + j + 1) = tmp; } } 適当に作ってみた。
453 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:05:41 ] >>448 シンプレックス法だね。でもコードにするのめんどい・・・
454 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:06:41 ] >>440 途中までやってみた。 ・ 基本的に改行を取り除くため1つの char 配列に読み込む ・ // は行単位の処理が必要なので読み込み時に処理 ・ /* 〜 */ は未対処 ・ void, int, char, float, double のいずれかとマッチするところを探す → データ型を省略した関数定義は取りこぼす ・マッチしたらそれぞれの直後が ' ' か '\t' か '\n' の条件に絞る ・ '(' が来るまでに ',' か ';' か ')' か '{' か '}' が来たら関数ではない ・以上の条件に合致したら、型名と関数名を出力 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7978.txt
455 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 04:16:44 ] >>452 ありがとうございましt!
456 名前:454 mailto:sage [2008/11/09(日) 05:20:37 ] >>440 short が抜けてたので改良を加えてみた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7980.txt 検索の順序の関係上お手本とは順番は異なるが、いちおう関数は拾えている
457 名前:354 ◆zeyvxEAaZQ mailto:sage [2008/11/09(日) 05:42:14 ] [1] 授業単元: C++ [2] 問題文(含コード&リンク): 敵が一周回ったら再び中央へ移動して、波を描きながら画面外へ消える。これをクラスを使わないで作って欲しいです。 中央へ移動までは、>>395 さんに作っていただきました。www.dotup.org/uploda/www.dotup.org20438.zip.html 最終的にこのような感じの動きです。www.dotup.org/uploda/www.dotup.org20441.bmp.html あと、敵の当たり判定もお願いします。これがサンプルです。www.dotup.org/uploda/www.dotup.org20440.zip.html [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC2005またはVC2008 [3.3] 言語: C++ [4] 期限: ([2008年11月9日22:00まで [5] その他の制限: クラスについてどのようなものかまだ習っていなかったのに、曖昧な返事をしてしまって申し訳ございません。 プログラムに関しては、自機の表示と弾を出すのはできましたが、それ以降ができません。どうかお願いします。
458 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 05:43:08 ] >>457 構造体はつかってもいいですか?
459 名前:デフォルトの名無しさん [2008/11/09(日) 06:16:06 ] [1] 授業単元: C++ [2] 問題文(含コード&リンク):数個のポイントを含むクラスポリゴンを定義しなさい。 (a) デストラクター・コピーコンストラクター・アサインメントオペレーターを作成し、クラスを定義しなさい。ディフォルトコンストラクターは空のポリゴンを作成すると仮定しなさい。 (b)Pointクラスがプライベートメンバー、また、(x,y)を返すコンストラクタPoint(int, int)を持つように変更しなさい。そうすることによってポリゴンクラスがコンパイルしなくなります。問題点を発見し、修正しなさい。 (一応骨組みは作ってみました。) class Point { public: float x; float y;} class Polygon { Point * points; //the points int size; //number of points public: Polygon() {...}; Polygon(const Point * pts, int n) {...}; Point getPoint(int n)const { //n番目のポイントを返す} void setPoint(const Point& p, int n) { //sets the nth point} int getSize()const { return size;}}; [3.1] OS: linux redhat [3.2] コンパイラ名とバージョン: VC2005またはVC2008 [3.3] 言語: C++ [4] 期限: ([2008年11月11日22:00まで [5] その他の制限:ポリゴンを作成するプログラムを作る課題を出されました。 日本の皆さまのお力をお借りしたく、投稿させて頂きます。 上の骨組みで作成することが、条件として出されました。 よろしくお願いいたします。
460 名前:デフォルトの名無しさん [2008/11/09(日) 07:49:14 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): void Wa(int a,int b); …2つの引数の和を計算し、結果を表示する(xとyの和) int abs_Sa(int a, int b); …2つの引数の差を計算し、その絶対値を返す(xとyの差の絶対値) double Heikin(int a,int b, int c, int d int e); …5つの引数の平均値を返す(num[5]の平均値) このような演算を行う関数をそれぞれ定義し、下記のプログラムに処理を追加せよ #include<stdio.h> void Wa(int a,int b); int abs_Sa(int a, int b); double Heikin(int a,int b, int c, int d int e); int main(void){ int k,x,y,num[5]={19,51,100,32,6}; double z; printf("xを入力してください:") scanf("%d",&x); printf("yを入力してください:") scanf("%d",&y); /* これ以降に処理を追加する */ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual stdio 2005 [3.3] 言語: C [4] 期限: 11/11 18:00 [5] その他の制限: 関数習いたてです。よろしくお願いします
461 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 08:35:36 ] >>460 main 残り printf("x + y = "); Wa(x, y); printf("\n"); k = abs_Sa(x, y); printf("|x - y| = %d\n", k); z = Heikin(num[0], num[1], num[2], num[3], num[4]); printf("average of %d, %d, %d, %d, and %d = %f\n", num[0], num[1], num[2], num[3], num[4], z); return 0; 関数 void Wa(int a, int b) { printf("%d", a + b); } int abs_Sa(int a, int b) { if (a >= b) return a - b; else return b - a; } double Heikin(int a, int b, int c, int d, int e) { return (a + b + c + d + e) / 5.0; }
462 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 09:35:58 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 長くなったので↓にアップします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7981.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: VC2005またはVC2008 [3.3] 言語: c++ [4] 期限: 11月12日 [5] その他の制限: for文、if文、配列等まで習いました。よろしく御願いします。
463 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 10:09:10 ] [1] 授業単元:演習 [2] 問題文: 数値が何(バラバラ)行2列でかかれた複数のファイルがあり それぞれのファイルを読み込み、表示させるプログラムを書きなさい。 何行かはファイルを開かないとわからないのでプログラムで行数をはかる。 [3] 環境 [3.1] OS:LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:2008年11月9日
464 名前:460 [2008/11/09(日) 10:10:41 ] >>461 ありがとうございます、助かりました
465 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 10:58:28 ] >>462 メインのループの部分だけ int pos = 0; for(i = 0; i < 20; i++) { x = rnd(); if (x < 0.3) { pos--; printf("左に進みました。"); } else { pos++; printf("右に進みました。"); } printf("現在位置 "); if(pos > 0) printf("右に %d ", pos); else if(pos < 0) printf("左に %d ", pos); else if(pos > 0) printf("原点"); printf("です。\n"); }
466 名前:465 mailto:sage [2008/11/09(日) 11:04:45 ] ちょっと読み違えてたので訂正 double x; int i, pos = 2; char *place[] = {"盗賊", "湖", "入り口", "森", "宝"}; srand((unsigned int)time(NULL)); for(i = 0; i < 20; i++) { x = rnd(); if (x < 0.3) { pos--; printf("左に進みました。"); } else { pos++; printf("右に進みました。"); } if(pos >= 4){ printf("宝を見つけました。"); pos = 2; } else if (pos <= 0){ printf("盗賊に会いました。"); pos = 2; } printf("現在位置 %s です。\n", place[pos]); }
467 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:53:26 ] >>466 ありがとうございました!
468 名前:デフォルトの名無しさん [2008/11/09(日) 13:16:10 ] [1] 授業単元:数値計算法1 [2] 問題文(含コード&リンク): gyoretu[n][n]に格納された、n次の行列の逆行列を求め、出力するプログラムを作成せよ。 対角要素に0や0に近い要素があっても、正しく答えが求められるように工夫せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C [4] 期限:明日 [5] その他の制限: なし お願いいたします!!
469 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:18:27 ] >>463 ファイル読んでその場で表示するだけなら行数とか考える必要ないんだけど いったん全部読み込んだあとにまとめて表示するようにした方が良い? #include <stdio.h> #define MAX 256 int main(int argc, char **argv) { FILE *fp; double a, b; while(argc-- > 1){ fp = fopen(argv[argc], "r"); if(fp == NULL){ fprintf(stderr, "Cannot open %s\n", argv[argc]); continue; } while(fscanf(fp, "%lf %lf", &a, &b) != EOF) printf("%f %f\n", a, b); fclose(fp); } return 0; }
470 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:18:52 ] ライブラリ使ったほうが正確
471 名前:デフォルトの名無しさん [2008/11/09(日) 14:43:22 ] >>415 返信遅れてすいません。 cinとcoutはやりました。 でも授業が難しいのでなかなか理解できないんですよね。。。
472 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:00:33 ] [1] 授業単元: C,C++、データ圧縮LZ78符合 [2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。 データ列:ABCBCBCDEBCDABCD コンソールアプリケーションで作成すること。 画面には最低限以下のものを出力すること。 【1】与えたデータ列 【2】作成した辞書の一覧 【3】符号化したデータ列 [3] 環境 [3.1] OS: WindousXP [3.2] コンパイラ名とバージョン: VisualStudio2005 [3.3] 言語: C,C++どちらでも可 [4] 期限:2008年11月13日まで [5] その他の制限: 標準ライブラリ可 よろしくお願いします。
473 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 15:13:53 ] >>458 構造体は使っても大丈夫です。
474 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:17:50 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 入力した値までの素数を列挙させるプログラムを作成せよ。 例)整数を入力:5 2は素数です 3は素数です 5は素数です [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VisualStudio2005 [3.3] 言語:C/C++/どちらでも可 [4] 期限: 2008年11月12日まで [5] その他の制限:for文まで。できるだけ簡潔に。 よろしくお願いします。
475 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:32:24 ] >>474 なにも考えないDQNメソッドだけど #include <stdio.h> int main() { int i, j, n; printf("整数を入力:"); scanf("%d", &n); for(i = 2; i <= n; i++) { for(j = 2; j < i; j++){ if (i % j == 0) break; } if (j >= i) printf("%d は素数です\n", i); } return 0; }
476 名前:学生 [2008/11/09(日) 16:46:51 ] 1から1000までの正の整数において、13の倍数の個数を出力するプログラム よろしくお願いします
477 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:47:53 ] >>456 ありがとうございます! 面倒だったようで申しわけないです
478 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:48:32 ] >>476 #include <stdio.h> main(){ printf("%d\n", 1000/13); }
479 名前:学生 [2008/11/09(日) 16:48:35 ] 訂正 マイクロソフトビジュアルベーシックC++で作成
480 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:50:17 ] >>479 >>476 #include <stdio.h> int main(){ printf("%d\n", 1000/13); return 0; }
481 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:01:36 ] >>472 C++です。VS2008で確認。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7982.txt
482 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:51:28 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983xt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月10 [5] その他の制限:出来るだけ簡単に よろしくおねがいします!!!
483 名前:482 mailto:sage [2008/11/09(日) 18:52:44 ] URL訂正します kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983.txt
484 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 19:11:25 ] >>483 #include <stdio.h> int main(int argc, char *argv[]) { unsigned int i, n; char str[21]; puts("符号なし32ビット整数を入力してください。"); scanf("%u", &n); printf("%u が格納されている先頭アドレスは 0x%p です。\n", n, &n); puts("20文字以内の文字列を入力してください。"); scanf("%s", str); printf("%s が格納されている先頭アドレスは 0x%p です。\n", str, str); for (i = 0; str[i] != '\0'; i++) { printf("%c が格納されているアドレスは 0x%p です。\n", str[i], &str[i]); } return 0; }
485 名前:457 ◆zeyvxEAaZQ mailto:sage [2008/11/09(日) 21:08:03 ] 期限を11月9日23:30までにするので>>457 をどうかお願いします。
486 名前:デフォルトの名無しさん [2008/11/09(日) 22:53:54 ] 1] 授業単元:プログラム [2] 問題文(含コード&リンク):遺伝的プログラムで木構造に新しいノードを追加しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月11日まで [5] その他の制限: お願いします。
487 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:59:03 ] >>486 遺伝的プログラムってだけ言われても困るぞwwwwwwww 他になんか情報はないのか
488 名前:デフォルトの名無しさん [2008/11/09(日) 23:17:23 ] >>487 例えばどういう情報があればいいですか?
489 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:22:37 ] >>485 cで書けと?
490 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:23:59 ] >>475 ありがとうございました。助かりました。
491 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:34:44 ] [1] 授業単元:C [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7984.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/11 [5] その他の制限:特になし よろしくお願いします
492 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:43:01 ] 宿題丸投げするつもりはないんだが質問させてくれないか bccコンパイラを使っているんだ。 プログラムの実行時間測定に #include <sys/time.h> を参照したいんだがtime.hがどうも入ってないみたいなんだ。 標準搭載されてる関数で少数点以下まで実行時間を計れるものってないかな?
493 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:52:26 ] #include <time.h> じゃねーの?
494 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:59:37 ] #include <sys/timeb.h> だと思うが、Linux使いなので詳しくはしらないが struct timeb now; int millisec; ftime(&now); millisec = now.millitm; /* これがミリ秒らしい */ こんな感じだと思う。 詳しくは、ググるかヘッダファイル読め。
495 名前:493 mailto:sage [2008/11/10(月) 01:01:04 ] 俺がいってたのは #include <time.h> のclock()ね
496 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:02:14 ] >>493 俺の探し方がアホなだけかもしれんが、#include <time.h>だと少数点以下まで測れる方法が見つからなかったんだorz >>494 ありがとう 参考にする
497 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:04:32 ] >>495 ΣΣclock!! 見落してた マジサンキュ やってみる
498 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:26:15 ] >>489 C++でお願いします。 10日の18:00まででいいのでどうかお願いします!
499 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:27:58 ] >>498 クラスを使うなと書いてあるが? そこだけ関数?
500 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:33:51 ] [1] 授業単元:C言語 [2] 問題文 初期設定された任意の文字列の順序を,逆に並べ換えるプログラムをつくりなさ い。ただし,並べ換える部分を関数にして,関数には文字列を引数として渡しなさい。 文字列の例としては, char str[] = "My name is Tarou Tanaka"; のように自分の名前を用いてみなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年11月12日 24:00 [5] その他の制限: ・次のようなプロトタイプ宣言をもつ関数reverse を定義すること。 void reverse(char *); ・引数で渡された文字列自身が逆順になること。 C言語の基本関数のみでよろしくお願いします。
501 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:37:34 ] >>499 構造体はつかっていいらしいかららクラスと差し替えちゃえばいいんじゃね
502 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:57:40 ] >>499 クラスは使わず、構造体でお願いします。
503 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:10:50 ] >>502 ほんとうにいいんだな 構造体にコンストラクタとデストラクタとメンバ関数つけられるぞ?
504 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:11:50 ] >>500 void reverse(char * s) { size_t len = strlen(s); /* 文字列の長さ */ size_t half_len = len / 2; /* 文字列の半分の長さ */ size_t i; for ( i = 0; i < half_len; ++i ) { char tmp = *((s + len - 1) - i); *((s + len - 1) - i) = *(s + i); *(s + i) = tmp; } } こんなのでいいかな。
505 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:21:28 ] [1] 授業単元:Cプログラミング [2] 問題文: #include <stdio.h> #define SIZE 10 int main(void) { FILE *infile; int i, data[SIZE]; infile = fopen("sample61a.txt", "r"); if(infile == NULL) { printf("入力ファイルを開くことができません\n"); return 0; } for(i = 0; i < SIZE; i ++ ) { fscanf(infile, "%d", &data[i]); } for(i = 0; i < SIZE; i ++ ) { printf(" %3d", data[i]); } printf("\n"); return 0; }
506 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:21:58 ] 505の続きです。 このプログラムを改造し、データの値を奇数と偶数に分けそれぞれ合計値・個数・平均値を出力せよ。 その際奇数データの数、偶数データの数がそれぞれゼロの場合は平均値を求めないようにせよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Microsoft Visual C++ 6.0 [3.3] 言語:C [4] 期限:11月11日 締め切りが急ですみません。 さっぱりわからなくなってしまったので、良ければよろしくお願いします。
507 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:39:50 ] >>504 ありがとう!
508 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:45:05 ] >>505 #include <stdio.h> #define SIZE 10 int main(void) { FILE *infile; int i, data[SIZE], sum[2]={0}, num[2]={0}; char *str[2] = {"奇数", "偶数"}; infile = fopen("sample61a.txt", "r"); if(infile == NULL) { printf("入力ファイルを開くことができません\n"); return 0; } for(i = 0; i < SIZE; i ++ ) { fscanf(infile, "%d", &data[i]); sum[data[i]%2] += data[i]; num[data[i]%2]++; } for(i = 0; i < SIZE; i ++ ) { printf(" %3d", data[i]); } printf("\n"); for(i=1; i>=0; i--){ printf("%s:合計値%d, 個数%d個", str[i], sum[i], num[i]); if(num[i] > 0) printf(", 平均値:%f", (float)sum[i] / (float)num[i]); printf("\n"); } return 0; }
509 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:46:41 ] あ、奇数と偶数の表示が逆
510 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:52:08 ] [1] 授業単元: OS [2] 問題文(含コード&リンク): ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF タイマーを用いて、プロセスのプロセッサ利用状況を測定するソフトウェアを実装する。 出力には、実行の経過時間、プロセッサ時間、ユーザ空間時間、カーネル空間時間が含むこと。 詳細 (1)すべての時間はミリ秒の分解精度を持つこと (2)1秒毎にsignalを発生させ、経過した秒数をカウントする (3)再帰を用いたFibbonacci数を計算するプログラムを子プロセスとした実行結果をしめすこと [3] 環境 [3.1] OS: Linux Kernel 2.6.x [3.2] コンパイラ名とバージョン: gcc4.x [3.3] 言語: C言語 [4] 期限: 2008年11月12日12:00 [5] その他の制限: sigactionやitimervalを用いて実装するのが今回の目的です。時間を計るものはできたのですが、ミリ秒単位の分解精度をどうやって出すのかがわかりません。よろしくお願いします。
511 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:54:37 ] 510です。 稚拙ながらもソースコードを示します。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <signal.h> #include <unistd.h> #include <sys/time.h> #include <sys/types.h> #include <sys/wait.h> int realSec = 0; int profSec = 0; int virtualSec = 0; static void myHandler(int s) { int errSave; if (s == SIGALRM) realSec++; else if (s == SIGVTALRM) virtualSec++; else if (s == SIGPROF) profSec++; } static int setupInterrupt(void) { struct sigaction act; act.sa_handler = myHandler; act.sa_flags = 0; return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0; } static int setupitimer(void) { struct itimerval value; value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0; value.it_value = value.it_interval; return (setitimer(ITIMER_PROF,&value, NULL) == setitimer(ITIMER_VIRTUAL,&value, NULL) == setitimer(ITIMER_REAL,&value, NULL) == 0)? 0: -1 ; }
512 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:56:23 ] 510です。続きです。 int main(int argc, char** argv) { pid_t child, retVal; struct itimerval real, virtual, profile; int status; if (setupInterrupt()) { perror("Failed to set up handler for SIGPROF"); return 1; } if (setupitimer() == -1) { perror("Failed to set up the ITIMER_PROF intervaltimer");return 1; } if (argc < 2){ fprintf (stderr, "Usage:%s command\n", argv[0]);return 1; } if ((child = fork()) == -1) { perror("Failed to fork"); return 1; } if (child == 0) { // child code execvp(argv[1], &argv[1]); perror("Child failed to execvp the command"); return 1; } else { // parent code while((retVal = waitpid(-1, &status, WNOHANG)) != child); getitimer(ITIMER_REAL, &real);getitimer(ITIMER_PROF, &profile);getitimer(ITIMER_VIRTUAL, &virtual); //ここも要修正 printf("real = %d.%ld", realSec, 1000000 - real.it_value.tv_usec); printf(" virtual = %d.%ld", virtualSec, 1000000 - virtual.it_value.tv_usec); printf(" profile = %d.%ld\n", profSec, 1000000 - profile.it_value.tv_usec); } } よろしくお願いします。
513 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 03:19:23 ] [1]授業単元:C言語 [2] 問題文:次のことを行うプログラムを,for文を用いて作成しなさい。 10個の要素をもつ整数配列dataを初期化して宣言する。 配列要素の中の最大値と最小値を出力しなさい。 なお,配列要素の値として,すべて負のものがあるデータも試してみること。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語:C言語 [4]期限:なし 初歩的な問題で申し訳ないですが、よろしくお願いします。
514 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 03:30:10 ] >>513 #include <stdio.h> #define SIZE 10 int main() { //int data[SIZE] = {83,28,35,84,43,21,8,51,2,12}; int data[SIZE] = {-83,-28,-35,-84,-43,-21,-8,-51,-2,-12}; int min, max; int i; min = max = data[0]; for (i = 1; i < SIZE; i++) { if (data[i] > max) { max = data[i]; } else if (data[i] < min) { min = data[i]; } } printf("min = %d, max = %d\n", min, max); }
515 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:45:39 ] >>503 はい、お願いします。
516 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:47:28 ] 追記 >>503 クラス使わないで、構造体で作って動けば問題ないのでお願いします。
517 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 08:36:06 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7985.txt [3] 環境: [3.1] WindowsVista [3.2] Borland C++Compiler [3.3] C言語 [4] 期限: 2008年11月10日23:59まで
518 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:02:31 ] >>514 ありがとうございます!
519 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:12:11 ] >>517 #include <stdio.h> void main(void){ int i,t;t=0; for(i=1; i<=100; i++){if(i %3 == 0){printf("%d \n" ,i);t++;}} printf("\n total %d\n",t);}
520 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:43:48 ] >>511 どうでもいいところかもしれんが return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0; これ、意図したとおりに動くの? A == B は A と B が等しかったら 1 を返すよ 一つでも 0 以外のを返したら、とやりたいんだったら && とか使うべし
521 名前:デフォルトの名無しさん [2008/11/10(月) 13:44:10 ] [1] 授業単元:データ構造とアルゴリズム [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7986.txt [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月12日 [5] その他の制限: 特になし よろしくお願いします。
522 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:06:25 ] >>521 該当箇所だけ。push, pop はもうできてるんでしょ? while(!isempty()) { y = pop(); x = pop(); if (map[y][x] == ' ') { map[y][x] = '*'; /*ここを適切に埋める(3) */ // up push(x); push(y - 1); // down push(x); push(y + 1); // left push(x - 1); push(y); // right push(x + 1); push(y); /*塗るたびにマップを表示する */ for(y = 0; y < 7; y++) printf("%s\n", map[y]); printf("\n"); } }
523 名前:374 mailto:sage [2008/11/10(月) 14:22:12 ] すいません誰か>>374 をお願いします。もう締め切りも近いのでどうか頼みます
524 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:28:40 ] >>508 ありがとうございます!助かりました!
525 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:37:57 ] >>523 1年分ってのは、入力した年の1月から12月を表示すればよいのか 入力した月から翌年の同月-1 を表示すればよいのか 入力した月を含む前後6か月を表示すればよいのか
526 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:02:16 ] >>523 カレンダーは >> 525 の返答次第 フィボナッチその1 #include <stdio.h> int main() { int i, f0 = 0, f1 = 1, f2 = 1, num; printf("num:"); scanf("%d", &num); for(i = 0; i < num; i++){ printf("f[%d]:%d\n", i, f0); f2 = f1 + f0; f0 = f1; f1 = f2; } return 0; }
527 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:02:58 ] >>523 フィボナッチその2 #include <stdio.h> int main() { int i, f0 = 0, f1 = 1, f2 = 1, num; printf("num:"); scanf("%d", &num); i = 0; while(i < num){ printf("f[%d]:%d\n", i, f0); f2 = f1 + f0; f0 = f1; f1 = f2; i++; } return 0; }
528 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:03:33 ] >>523 フィボナッチその3 #include <stdio.h> int main() { int i, f0 = 0, f1 = 1, f2 = 1, num; printf("num:"); scanf("%d", &num); i = 0; do{ printf("f[%d]:%d\n", i, f0); f2 = f1 + f0; f0 = f1; f1 = f2; i++; } while(i < num); return 0; }
529 名前:初心者 [2008/11/10(月) 15:59:23 ] [1] 授業単元: [2] 問題文(含コード&リンク): ★下記の仕様を満たすプログラムをC言語で作成しなさい. 【仕様】日数計算プログラム ▼今日の日付と生年月日を入力すると,今日が生年月日から数えて何日目にあたるかを表示する.西暦・月・日をスペースで区切って入力する. ▼この場合,「うるう年」を考慮しなければならない.「うるう年」の条件は, @西暦が4で割り切れる. Aただし,西暦が100で割り切れる年は除く. Bただし,西暦が400で割り切れる年は含める. ▼「今日は、あなたが生まれた日から数えて〜日目です。」と表示する. ▼計算式は,(西暦1年1月1日から今日までの日数)−(西暦1年1月1日から生年月日までの日数)を使えばよい. ▼生年月日が今日の日付より後になっているときは,「生年月日が今日の日付より後になっています!」とエラーメッセージを表示する. ▼最低限,次の関数を使うこと. @main関数(これは当たり前ですが) A入力された値が計算に適切な値かをチェックする関数(4月31日などありえない日付を入れると,「年月日が正しい範囲にありません」と表示する) B日付を計算する関数 ▼日付の入力やメッセージの表示はmain関数で行うこと(ポインタに関する課題なので参照渡しを使うこと). [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: 分からないです。 [3.3] 言語: C言語 [4] 期限: 今週中ぐらい [5] その他の制限: 繰り返し文、条件判断文、ポインタを使ってお願いします。 初心者なので、初心者にも分かるようなプログラムをお願いします。
530 名前:デフォルトの名無しさん [2008/11/10(月) 16:09:07 ] 課題が出たんですが、まったく手に負えません、、、、、 ぜひ、教えてください! 今、XPでvisualを使ってます。 『課題』 円周率πの値を近似式 π≒4Σ(←n=0から100で)(ー1)^n×(2n+1)^(−1)×{(0.5)^(2n+1)+(3)^(ー2nー1)} を用いて、小数第8位まで正しい値(3.14159265)を出力し、 そのπの値を用いて入力された数値εに大して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。 |(π^2/6)-Σ(←k=1からN)k^(-2)|<ε
531 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:32:39 ] viの正式名称なんて久しぶりに見たな
532 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:45:16 ] >>530 こんなんでいい? #include <stdio.h> #include <math.h> int main (void) { int i; double pi, sum, eps; sum = 0.0; for(i=0; i<=100; i++){ pi = 4.0 * (sum += pow(-1, i) / (2*i + 1) * (pow(0.5, 2*i+1) + pow(3, -2*i-1))); } printf("π≒%.8f\n", pi); printf("ε:"); scanf("%lf", &eps); i = 1; sum = 0.0; while(fabs(pi*pi/6 - (sum += pow(i, -2))) >= eps) i++; printf("N = %d\n", i); return(0); }
533 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:06:14 ] 誰か>>457 をお願いします。 期限は今日中で良いのでお願いします!
534 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:48:20 ] printf("ε:"); かわいいな
535 名前: ◆25LbU5YSxg mailto:sage [2008/11/10(月) 18:09:49 ] [1] 授業単元:プログラミング演習 [2] 問題文: プログラム1を改良し、データをファイルから読み込みつつ小さい順にソートして格納するプログラムを作成せよ、。 手順を以下に示す。 1.cell構造体へのポインタとして、struct cell *new、*start、*p1、*p2;の4つを準備し、それぞれNULLで初期化する。 2.データファイルからデータ数を読み込む。 3.データを1つ読み込み、cell構造体を作成してnewにセットした後、その構造体に格納。 ・はじめてのデータであれば、ポインタstartとp1をnewにセット。 ・2つ目のデータであれば、p2をnewにセットし、p1が示すリスト要素(構造体)の次に追加接続する。 ただし、2つ目のデータが1つ目のデータよりも小さい場合には、p1とp2の指す構造体内のデータを入れ替える。 もしくはリスト要素(構造体)自体の位置を入れ替えポインタをセットし直す必要があることに注意。 ・3つ目以降のデータであればリスト先頭から順に走査を行う。この際、p1、及びp2をそれぞれ1つずつリスト内の次の要素に進めてゆく。 。読み込まれたデータが、リスト先頭要素(構造体)の持つ値より小さい場合には、新規作成された構造体newをリスト先頭に追加し、ポインタstartをnewにセットする。 。リスト途中で、p1には読み込まれたデータより小さい値、p2には読み込まれたデータより大きい値となる場所が見つかれば、この間に新規作成された構造体newを挿入する。 。リスト最後尾まで読み込まれたデータより大きい値が見つからなければ、新規作成された構造体newを最後尾に追加する。 4.3をデータ入力数だけ繰り返す。 5.全てのデータを読み込み終えたら、リスト先頭から順にデータを出力する。 num-data.txt 5 23 43 67 14 9
536 名前: ◆25LbU5YSxg mailto:sage [2008/11/10(月) 18:15:43 ] プログラム1 #include<stdio.h> struct cell{ int data; struct cell *next; }; int main(void){ int num; struct cell *new, *start, *ptr; new = NULL; start = NULL; ptr = NULL; while(1){ scanf("%d",&num); if(num == -1){ break; } new= (struct cell *)malloc(sizeof(start)); if(new == NULL){ fprintf(stderr,"Error!:malloc short(struct cell).\n"); } new->data = num; new->next = NULL; if(ptr == NULL){ start = new; ptr = new; }else{ ptr->next=new; ptr = new; } } ptr = start; while(ptr != NULL){ printf("%d\n",ptr->data); ptr=ptr->next; } return 0;} [3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:2008年11月21日17:00まで
537 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 18:18:32 ] >>529 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7988.txt 参照渡しをする合理的理由がみあたらないので抜きで作った。 どっか適当に変えてくれ
538 名前:374 mailto:sage [2008/11/10(月) 19:36:44 ] >>525 >>526 カレンダーは入力した年の1月から12月を表示するものでよかったです。 >>526-528 助かります。本当にありがとうございます
539 名前:525 mailto:sage [2008/11/10(月) 20:03:17 ] >>538 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7989.txt
540 名前:374 mailto:sage [2008/11/10(月) 20:27:03 ] >>539 もうなんとお礼を言えばよいのかわかりません。本当にありがとうございました。
541 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 21:12:16 ] >>535 #include<stdio.h> #include<stdlib.h> struct cell { int data; struct cell *next; }; int main(void){ int num; struct cell *new, *start, *p1, *p2; new = start = p1 = p2 = NULL; while (1) { scanf("%d", &num); if (num == -1) break; new = (struct cell *) malloc(sizeof(start)); if (new == NULL) { return 1; } new->data = num; new->next = NULL; for(p1=start,p2=NULL; (p1) && new->data > p1->data; p2=p1, p1=p1->next); if(p2){ p2->next = new; new->next = p1; }else{ new->next = start; start = new; } } for (p1=start; (p1); p1=p1->next) { printf("%d\n", p1->data); } return 0; }
542 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 22:01:28 ] [1] 授業単元:プログラミングC演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7991.txt [3] 環境 [3.1] OS: Unix [3.2] コンパイラ名とバージョン: gcc(versionは不明 [3.3] 言語: C [4] 期限: 2008年11月13日(木曜日)12:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ・ポインタをメインに使用してください よろしくお願いします
543 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:11:51 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7992.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年11月12日 [5] その他の制限: よろしくお願いいたします。
544 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:14:37 ] >>542 malloc は ok なの? 最大長とか単語数は別プログラムで調べるんだったらいいけど、 一度にやるんだったら必ず必要だよ
545 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:22:34 ] >>543 printf("学籍番号:%d 氏名:%s\n", p->id, p->name); ○○○ //pに次の構造体のポインタを代入 ↑↑↑ ここを p = p->next とやるだけでとりあえず動くものはできるけど・・・ List3 は点数を取り込んでないよね。点数を取り込むようにしたいの? 読み込むデータのサンプルはないの?
546 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:25:53 ] >>542 ツッコミどころが多すぎるんだが・・・ とりあえず - char *dict[999], *input[50] + char dict[999][100], input[50][100] として、適当に文字列を格納する領域を確保しておくこと。 勘違いだと思うけど - for(i = 0; scanf("%s",input[i]) != '\n'; i++); + for(i = 0; scanf("%s",input[i]) == 1; i++); 添字が逆 - judge = compare( dict[j], input[k]); + judge = compare( dict[k], input[j]); それから、そもそも input[j] に入っているのは標準入力から得た一行だから、単語ごとに分割する処理が必要
547 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:36:49 ] [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): 10 個の要素をもつ整数配列data を初期化して宣言する。 配列の隣り合った添え字のデータ同士の差(data[i] – data[i-1])を調べる。 その値が,最も大きなものを探し,データの差がい くつなのか,添え字の何番と何番との間の差なのか出力しなさい。 最大のものが複数あったときには,添え字の最も大きなものを出力すること。 例えば,data[10]={-6,4,7,-3,-1,9,5,-5,4,6} で初期化したときには,4 と5 の間の10 が最大となる。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語:C言語 [4] 期限:11/14 [5] その他の制限:特になし よろしくお願い致します。
548 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:45:02 ] >>547 6,7番目の間の10が最大値になる?
549 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:46:40 ] >>547 素直に書いてみた 差の絶対値じゃなくて差の比較だけでいいんだよね? #include<stdio.h> #define N 10 int main(){ int data[N]={-6,4,7,-3,-1,9,5,-5,4,6}; int*max_diff = data; int*it; for(it=data+1;it!=data+N-1;++it) if(1[max_diff]-0[max_diff] <= 1[it]-0[it]) max_diff = it; printf("%dと%dの間の差%dが最大\n", max_diff-data,max_diff-data+1,1[max_diff]-0[max_diff]); return 0; }
550 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:50:44 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 一次元配列を用いて5人分の得点を100点満点で入力し、平均値を画面およびファイルに書き出すプログラムを作成しなさい。 書き出し用ファイル名はave.txtとする。 [3] 環境: [3.1] Windows Vista [3.2] Borland C++ [3.3] C言語 [4] 期限: 11月11日12:00 昼すぎ提出なので時間があまりないですが、どなたかお願いします。
551 名前: ◆8w4FYxc7TQ [2008/11/11(火) 00:52:24 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 三つの数字a,b,cを入力したとき、大きい順に出力するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++ 9.0 [3.3] 言語:C++ [4] 期限:11/12 [5] その他の制限: この問題で使えそうなものは、if、もしくはswitchしか習っていないので、それでお願いします。 自分でif文を使って組み立てると、どうしても思い通りに並べてくれません… どうかよろしくお願いします。
552 名前:デフォルトの名無しさん [2008/11/11(火) 01:11:20 ] [1] 授業単元: C言語演習 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7993.txt [3] 環境 [3.1] OS: (Windows vista) [3.2] コンパイラ VisualStudio2005 [3.3] 言語: C言語 [4] 期限: 2008年11月13日15:00まで [5] その他の制限: (C言語検定2級程度の途中まで習ってます) すいません、お願いします
553 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:17:33 ] >>491 お願いできませんか?
554 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:25:42 ] >>549 はい、差の比較のみです。 言葉が足りなくてすみません。 ありがとうございました!
555 名前:521 [2008/11/11(火) 01:34:59 ] >>522 ありがとうございます。 誰か、もう一つの課題のほうもお願いいたします。
556 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:46:23 ] >>550 #include <stdio.h> int main(void) { int i, score, sum=0; FILE *fp; for(i=1; i<=5; i++){ printf("%d人目:", i); scanf("%d", &score); sum += score; } printf("平均値:%f\n", (double)sum / 5.0); if((fp = fopen("ave.txt", "w")) == NULL){ printf("ファイルが開けません\n"); return 1; } fprintf(fp, "平均値:%f\n", (double)sum / 5.0); fclose(fp); return 0; }
557 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:48:54 ] ああ、配列使うのか #include <stdio.h> int main(void) { int i, score[5], sum=0; FILE *fp; for(i=0; i<5; i++){ printf("%d人目:", i+1); scanf("%d", &score[i]); sum += score[i]; } printf("平均値:%f\n", (double)sum / 5.0); if((fp = fopen("ave.txt", "w")) == NULL){ printf("ファイルが開けません\n"); return 1; } fprintf(fp, "平均値:%f\n", (double)sum / 5.0); fclose(fp); return 0; }
558 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:57:47 ] >>551 if(a < b){ tmp = a; a = b; b = tmp; } if(a < c){ tmp = a; a = c; c = tmp; } if(b < c){ tmp = b; b = c; c = tmp; }
559 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:18:50 ] >>481 お礼おくれて申し訳ありません。 助かりました。ありがとうございます。
560 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:33:03 ] >>556-557 ありがとうございます助かりました! 一次元配列使うんです、まぎらわしくてすいません。 二度もありがとうございました。
561 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:39:30 ] >>552 2番はちょっと余計なこともしてるけど ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7994.c
562 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:37:42 ] >>561 rewind(stdin)なんて標準以外の使い方すんなカス
563 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:49:35 ] [1] 授業単元: [2] 問題文 0〜9の数字のみからなる文字列を引数として受け取り、 同じ数字並びの整数を返す関数ascii2int()を作り、動作を 確認せよ。ただし、非負の整数のみ考える。 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: c [4] 期限: 11月15日
564 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:56:49 ] [1] 授業単元:スタック [2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7996.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:2008/11/12 [5] その他の制限:なし すいませんが、よろしくお願いします!
565 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 06:51:39 ] >>562 これで許してくださいorz scanf("%*[^\n]\n");
566 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 06:59:11 ] >>563 #include<stdio.h> int ascii2int(const char* str){ int r=0; while(*str){ r*=10; r+=*str-'0'; str++; } return r; } int main(){ char* a = "12345"; printf("%d\n",ascii2int(a)); }
567 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:36:20 ] >>564 なんかへたくそでごめん。。 #include<stdio.h> #define N 100 int n,cnt=0,c[N],b[N]; void solve(int a_top,int b_top,int c_top){ if(a_top>n && b_top==0){ int i; for(i=0;i<n;i++)printf("%d",c[i]); printf("\n"); cnt++; } if(a_top<=n){ b[b_top++] = a_top++;//a->b solve(a_top,b_top,c_top); b[--b_top] = --a_top;//b->a } if(b_top>0){ c[c_top++]=b[--b_top];//b->c solve(a_top,b_top,c_top); b[b_top++]=c[--c_top];//c->b } } int main(){ printf("n:"); scanf("%d",&n); if(n>0) solve(1,0,0); printf("%d\n",cnt); }
568 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:40:51 ] >>558 ありがとうございます! やってみます!
569 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:52:57 ] >>555 2回に分けて。 #include<stdio.h> #define STACKSIZE 100 typedef struct _Point{ int x,y; }point; static int sp = 0; static point stack[STACKSIZE]; void push(point p){ [sp++] = p; } point pop(void){ return stack[--sp]; } int isempty(void){ return sp == 0; }
570 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:54:32 ] //上の[sp++] = p;はstack[sp++] = p;のミス!! int main(void){ char map[7][11] = { "**********", "* * *", "* *****", "* ** * *", "* * *", "* * * *", "**********", }; point p; int x,y; p.x=2; p.y=1; push(p); while(!isempty()){ p=pop(); x=p.x; y=p.y; if (map[y][x] == ' '){ map[y][x] = '*'; p.x=x; p.y=y-1; push(p); // up p.x=x; p.y=y+1; push(p); // down p.x=x-1; p.y=y; push(p); // left p.x=x+1; p.y=y; push(p); // right for(y = 0; y < 7; y++) printf("%s\n", map[y]); printf("\n"); } } return 0; }
571 名前:564 mailto:sage [2008/11/11(火) 09:00:54 ] >>567 こんなに早く対応していただけて助かります。 ありがとうございます!
572 名前:デフォルトの名無しさん mailto:age [2008/11/11(火) 10:08:37 ] [2] 1. define文を使ってN以下の素数を全て求めよ 2. 関数 f(t)=t^5-t の区間 [0,2] での値を 0.1 刻みで表示するプログラムを作れ [3] [3.1] OS : Linux [3.2] ? [3.3] 言語 : C [4] 期限: 11/12 [5] その他の制限:初歩の初歩です。難しすぎるのはよく分かりません どなたかよろしくお願いします
573 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:06:09 ] 1こめ #include<stdio.h> #define N 100 int main(){ int s[N],i,j; for(i=0;i<N;i++) s[i]=1; s[0] = s[1] = 0; for(i=2;i<N;i++){ if(!s[i]) continue; for(j=i+i;j<N;j+=i){ s[j]=0; } } for(i=0;i<N;i++){ if(s[i]) printf("%d\n",i); } }
574 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:14:17 ] >>573 define文を使うって、#define N 100 ← これだけでいいのかww
575 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:15:35 ] えっ?だめ??勘違い?(´・ω・`)
576 名前:デフォルトの名無しさん [2008/11/11(火) 11:58:52 ] >>521 じゃないけど分からないので質問。>>522 の通りにやっても何も表示されないので たぶん確実に違うisemptyのどこが駄目でしょうか?あとpush,popもおかしかったら教えてください。 void push(int x){ if(sp == 100){ printf("stack is fill.\n"); } else{ stack[sp]=x; sp++; } } int pop(void){ if(sp == 0){ printf("stack is empty.\n"); } else{ sp--; return(stack[sp]); } } int isempty(void) { if(sp ==100) printf("1"); if(sp ==0) printf ("0"); }
577 名前:522 mailto:sage [2008/11/11(火) 12:03:42 ] >>576 void push(int val) { stack[sp++] = val; } int pop(void) { return stack[sp-- - 1]; } int isempty(void) { /*スタックが空なら1、空でないなら0を返す関数 */ return sp == 0 ? 1 : 0; }
578 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:08:04 ] stack[sp++] = val; は普通だけど、 return stack[sp-- - 1]; って書き方がすごくきもく見えるw
579 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:13:05 ] return stack[--sp]; だよなぁ常考
580 名前:522 mailto:sage [2008/11/11(火) 12:37:34 ] >>578 >>579 貼ってから自分でもそうオモタ
581 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:59:00 ] 個人的に 論理式?1:0;とかif(論理式!=0)とかif(論理式==0) って書き方が好きじゃない。冗長な感じがして。
582 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:01:58 ] 真の時に1を返すと保障されている処理系ならば return sp == 0; でもいいんだけどね
583 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:03:56 ] C言語は保証されてる
584 名前:デフォルトの名無しさん [2008/11/11(火) 14:01:00 ] [1] 授業単元:C言語 [2] 問題文(含コード&リンク): 以下のプログラムを英文清書プログラムに書き換えよ。 元のプログラム kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7997.c 条件 ・文の先頭は大文字、それ以外は小文字。 ・アルファベット以外の文字は変換しなくてよい。 ・改行、スペース、タブにより単語の区切りとする。また文末は改行コードではなくピリオド"."で判定する。 ・\endまたは\ENDを挿入するとそのプログラムを終わるようにする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008/11/12 23:59まで [5] その他の制限: 特にないです。 すみませんが、よろしくお願いします。
585 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 14:34:13 ] INExp.hって??
586 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 15:28:24 ] isalphaとtoupper使えればいいのかな ピリオド検索はstrstrで ポインタアドレスの差を文字列長にもしてげへへへ
587 名前:デフォルトの名無しさん [2008/11/11(火) 16:00:13 ] [1] 授業単元:単方向線形 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8000.c [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 11/18 [5] その他の制限: 特になし 全く分かりません。宜しくお願いします
588 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 16:12:52 ] >>587 うそつけw 考える気がないだろw
589 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:34:32 ] それを言ったらこのスレの存在意義がなくなるわけだが
590 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:36:25 ] どこのスレにだって黙ってればいいのに野暮ったい突っ込みする奴居るじゃん。
591 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:18:38 ] >>573 ありがとうございます
592 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:19:28 ] >>587 超めんどくさい!cの単方向リスト嫌い! kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8001.txt
593 名前:576 mailto:sage [2008/11/11(火) 18:22:40 ] >>577 ありがとうございます。>>522 と合わせてプログラムにしてみたんだが何もマップされないんです。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8002.txt 自宅のubuntuのgcc(おそらくでやってるんですが環境のせいですか?変なところあったら指摘お願いします。
594 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:24:58 ] printf("%s\n", map[y]);
595 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:25:43 ] ごめんかんちがい
596 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:28:38 ] あ!コピペミスってるだけじゃん〜
597 名前:デフォルトの名無しさん [2008/11/11(火) 18:49:43 ] a
598 名前: ◆25LbU5YSxg mailto:sage [2008/11/11(火) 18:52:30 ] >>541 遅れましたが、解答ありがとうございました。
599 名前:577 mailto:sage [2008/11/11(火) 19:21:30 ] >>593 map データがなんだかやせ細ってるよ
600 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:20:46 ] 1] 授業単元: C言語 [2] 問題文(含コード&リンク): (1) 単項式を入力された順に出力されるように変更する (2)入力した単項式を次数の大きい順にするに出力されるように変更する ソースは以下を参考にしてください、たらない変数は任意で増やしてけっこうです kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8003.txt (1)と(2)は別解答 [3] 環境 [3.1] OS: Win [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: C [4] 期限: 2008年11月14日13:30まで 期限が迫ってるのでお願いします
601 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:28:18 ] この問題昔見たなw
602 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:32:57 ] すいません 前スレあたりで載せたんですがスルーだったようで自力でやろうとしたけど無理だったので再度^^; 最終期限がすぐであせってます
603 名前:576 mailto:sage [2008/11/11(火) 20:35:35 ] なんというミス(^o^) みなさまありがとうございました。明日も生きていけそうです。
604 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:37:29 ] [1] 授業単元: 文字列操作 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8004.txt [3] 環境 [3.1] OS:Linux [3.2] cc [3.3] C [4] 期限:2008年11月12日15:00まで [5] その他の制限:問題文中に出てくる、frequency.c を利用せよ、とありますので、 なるべくそれを基盤にするようにお願いします。 ↓途中まで考えてみたものです。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8005.txt
605 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:45:38 ] >>604 1問目 freqency.c の出力部分を以下のように修正 for(i = 0; i < 26; i++) { /* 結果出力 */ while(alpha[i]-- > 0) printf("*"); printf("\n"); }
606 名前:605 mailto:sage [2008/11/11(火) 20:54:39 ] >>604 2問目 main の中身だけ char c; int i, j, alpha[26], max = 0; for(i = 0; i < 26; i++) /* 配列のクリア */ alpha[i] = 0; c = getchar(); while(c != '\n') { if (c >= 'a' && c <= 'z') { /* 英小文字の処理 */ alpha[c - 'a'] += 1; if (alpha[c - 'a'] > max) max = alpha[c - 'a']; } else { if (c >= 'A' && c <= 'Z') { /* 英大文字の処理 */ alpha[c - 'A'] += 1; if (alpha[c - 'A'] > max) max = alpha[c - 'A']; } } c = getchar(); } for(i = 0; i < max; i++) { for(j = 0; j < 26; j++) { /* 結果出力 */ if (alpha[j] >= max - i) printf("* "); else printf(" "); } printf("\n"); } for(j = 0; j < 26; j++) /* 結果出力 */ printf("%c ", j + 'a'); printf("\n");
607 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:59:53 ] すいません・・>>491 をお願いします・・
608 名前:デフォルトの名無しさん [2008/11/11(火) 21:09:56 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問1、ユークリッドの法則を使ってn(n≦100)個の正整数の最大公約数を求めるプログラムを作れ なお、最終的にはgcd(最大公約数を求める整数の羅列)=結果と画面上に表示するようにすること 問2、n個(n≦100以下)の正整数の最小公倍数を求めよ。 表示方法は先ほどの問いと一緒 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11/13 [5] その他の制限: int gcd(int x, int y)の関数を使用してください あと、なるべく2つずつ比べるようにして、必ず大きい正数が変数xに入るようにしてください
609 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:15:18 ] >>607 ボールの初速とか角度は風の影響が全く無いときに当たるようにすればいいの? それとも投げたら絶対当たるように作るの?
610 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:18:17 ] [1] 授業単元:C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8006.txt @2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい. 以下のプログラムを基にして完成せよ. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,原点からの距離を求める関数 length_vector_pを作成する. ただし,「構造体ポインタ変数」を利用すること. 構造体 Point型を使用して,平面の点を表示する関数 print_v_pを作成する. ただし,「構造体ポインタ変数」を利用すること. A2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい. 以下のプログラムを基にして完成せよ. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,平面の点を表示する関数 print_v_p2を作成する. ただし,「構造体ポインタ変数」を利用すること. 構造体 Point型を使用して,平面の点を代入する関数 input_point_pを作成する. ただし,「構造体ポインタ変数」を利用すること. 構造体ポインタ変数に対して,動的にメモリ領域を確保する. malloc を利用する. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual stadio2008 [3.3] 言語: C [4] 期限: 2008年11月13日
611 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:21:25 ] >>607 前者でお願いします
612 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:25:52 ] >>600 とりあえず(1) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8007.txt
613 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:52:31 ] >>608 n 個の正数は a[] に入力されているとして。 #include <stdio.h> int gcd(int x, int y) { int r; if (x < y) { int t = x; x = y; y = t; } do { r = x % y; x = y; y = r; } while (r != 0); return x; } int main(int argc, char *argv[]) { int a[] = { 121, 11, 14641, 1331}; int n = 4; int i, g; g = a[0]; printf("gcd(%d", a[0]); for (i = 1; i < n; i++) { printf(", %d", a[i]); g = gcd(g, a[i]); } printf(") = %d\n", g); return 0; }
614 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:57:28 ] [1] 授業単元: 自作関数 [2] 問題文(含コード&リンク): 5つの数値を入力し(繰り返し入力)し、最大値を表示する。 [3] 環境 [3.1] OS: Windowsvista [3.2] VC 6.0等 [3.3] 言語: C [4] 期限: 今日までなのでよろしくお願いします [5] その他の制限:繰り返し文しかならってないです。
615 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:59:13 ] >>614 >>614 #include<stdio.h> int sori(int x, int y) { if( x>=y ) return(x); return(y); } int main(void) { int a,b,c,d,e,max; while ( scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)==5) { max=a; max=sori(max,b); max=b; max=sori(max,c); max=c; max=sori(max,d); max=d; max=sori(max,e); printf("%d %d %d %d %d",a,b,c,d,e); printf("max=%d\n",max); } return (0); }
616 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:00:00 ] >>614 >>615 エラーメッセージ エラー E2209 kadai6-1.cpp 1: インクルードファイル 'stdio.h' をオープンできない エラー E2268 kadai6-1.cpp 9: 未定義の関数 'scanf' を呼び出した(関数 main() ) エラー E2268 kadai6-1.cpp 18: 未定義の関数 'printf' を呼び出した(関数 main() 上記のようなプログラムを自分で作ったのですが、 上に記したようなエラーメッセージが表示されてしまいました。 これ以上わかりません。どうかよろしくお願いします。
617 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:09:48 ] >>616 Linux だとちゃんとコンパイルできるから、ワークスペース作ってないとかの問題じゃないの? 以下の行を削除すれば、一応目的は達成できるぞ max=b; max=c; max=d;
618 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:17:17 ] >>617 試してみます。どうもありがとうございました。
619 名前:デフォルトの名無しさん [2008/11/11(火) 22:23:31 ] コンパイルしたら 「配列または、ポインタでない変数に添字が使われました」って怒られたんですが どう直せばいいでしょうか?
620 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:24:07 ] あきらめてください
621 名前:デフォルトの名無しさん [2008/11/11(火) 22:25:41 ] 配列またはポインタでない変数に、添え字を使わないようにすればいい
622 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:28:28 ] まずcppじゃなくてcにするとか
623 名前:619 [2008/11/11(火) 22:29:25 ] >>621 ありがとう!
624 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:30:24 ] てかsoriって関数名なんて意味?ソリ?サンタが乗ってるヤツ?
625 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:33:02 ] 飲み過ぎ食べ過ぎに、ソリマックス。
626 名前:604 mailto:sage [2008/11/11(火) 22:36:08 ] >>604 ,605 素早い対応ありがとうございます。 すいません、問題文のとおりプログラムは1つだけなんです。 つまり、freqency.cを拡張して、横に伸びるグラフと縦に伸びるグラフを 同時に表示したいのです・・・。 605の方を別に作って試してみましたが、縦のグラフは表示できました。 (上の方で1つずつ空白分がずれるのは仕様でしょうか?) 604は、元のプログラムの出力部の変更のみで表示できました。 が、605と一緒にしなければならないので、どうにか605の大文字と小文字の処理を604と 同じくしてできないかと困っています。 よろしければ検討をお願いしたいです。
627 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:38:57 ] >>626 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8008.txt 違う人だけど。
628 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:42:40 ] >>626 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8009.txt
629 名前:デフォルトの名無しさん [2008/11/11(火) 22:51:20 ] soriなんて名前付けてsorry・・・。
630 名前:お願いします [2008/11/11(火) 23:23:42 ] [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] その他の制限:構造体の問題です 問題文に沿ってお願いします。
631 名前:604,626 mailto:sage [2008/11/11(火) 23:23:58 ] >>627 一部重複箇所(横グラフが2つ出ました)がありましたので、それを修正した上で 実行したところ、結果が得られました。 >>628 こちらも正しい結果が得られました。 627さんのプログラムは使われた文字のみの出力、 628さんのプログラムは全てのアルファベットについての出力が確認できました。 もう一度しっかり目を通した上で使わせていただきたいと思います。 レスからわずか10分足らずでの迅速な対応、本当にありがとうございます。
632 名前:お願いします [2008/11/11(火) 23:25:43 ] >>630 #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;} void cprint(struct mycomplex z) { printf("複素数 = %f + i*%f\n",z.re,z.im);}
633 名前:大輔 [2008/11/12(水) 00:18:51 ] [1] 授業単元:繰り返し処理(for文・while文) [2] 問題文(含コード&リンク):下に示すような九九の表を表示するプログラムを作成しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C++ [4] 期限:2008年11月14日15:00まで [5] その他の制限:printf,scanf,if,switch,程度の関数しか習っていません。for文の入れ子(二重のforループ)を使う。フォーマットをそろえるには、書式指定文字列(変換仕様)を利用。 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 4 4 8 12 16 20 24 28 32 36 5 5 10 15 20 25 30 35 40 45 6 6 12 18 24 30 36 42 48 54 7 7 14 21 28 35 42 49 56 63 8 8 16 24 32 40 48 56 64 72 9 9 18 27 36 45 54 63 72 81
634 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:26:39 ] >>633 #include <stdio.h> main() { int i, j; for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) if (i == 0) if (j == 0) printf(" "); else printf("%2d ", j); else if (j == 0) printf("%d ", i); else printf("%2d ", i * j); printf("\n"); } }
635 名前:デフォルトの名無しさん [2008/11/12(水) 00:35:49 ] #include <stdio.h> void main(){ printf(" "); for(i=0; i<10; i++){ printf(" %2d", i); } printf("\n"); for(i=1; i<10; i++){ printf("%d", i); for(j=0; j<10; j++){ printf(" %2d", i*j) } printf("\n"); } }
636 名前:634 mailto:sage [2008/11/12(水) 00:37:47 ] >>635 こっちのほうがすっきりしてるね
637 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:39:11 ] ↑jも1からだった void main(){ printf(" "); for(i=1; i<10; i++) printf(" %2d", i); printf("\n"); for(i=1; i<10; i++){ printf("%d", i); for(j=1; j<10; j++) printf(" %2d", i*j) printf("\n"); } }
638 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:41:40 ] %2dじゃ空白が入らないんじゃないの?
639 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:47:29 ] [1] 授業単元:プログラミング言語 [2] 改行を含む文字を受け取るにはどうすればいいんでしょうか?getを使えばスペースを含む文字を変数に書き込めるのは分かったんですが、改行を含む文字を書き込む方法が分かりません。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: ごめんよく分からない。でも使っているのはMicrosoftからダウンロードしたVisual C++ [3.3] 言語: C++ [4] 期限2008/11/15 [5] その他の制限: 無し
640 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:48:35 ] >>639 getsのこといってんだろうか・・・・・・・・ fgetsを使えばいんじゃね?
641 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:23:17 ] [1] 授業単元:ハッシュ法 [2] 問題文(含コード&リンク):指定したファイルを読み込み開放番地法でのハッシュ表を生成し、 (i) 線形探査法 (ii) 二重分散法 に基づいた探索関数を作成せよ。 (i),(ii)の探索関数を用いて任意の値 (a) 表中に存在するキー 100個 (b) 表中に存在しないキー 100個 について連続で探索し、総探査回数、総実行時間を記録する。(一部略) [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] 言語: C [4] 期限: 11月12日21時迄 www1.axfc.net/uploader/He/so/157773 (pass: jik1) ↑中身は問題原文、指定されたファイル、自分で作成したプログラムソースです 対象ファイルの中身が文字列なので探索にstrcmpを用いようとしたのですが、実行時にエラーが出てしまってどうすればいいかわからない状態です よろしくお願いします
642 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 01:29:27 ] [1] 授業単元:アルゴリズム [2] 問題文:5人の学生の3教科の点数(0~100点)をランダムに表示させる。 それぞれの合計点を計算し、合計点の高い順に順位をつける。 [3] 環境 [3.1] WindowsXP [3.2] gcc 3.4 [3.3] C [4] 期限:なし どなたかおねがいします…orz
643 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 02:06:34 ] >>642 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8011.c
644 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 02:08:18 ] 変数tmpはいらないから消してくれ
645 名前:デフォルトの名無しさん [2008/11/12(水) 02:29:43 ] >>613 ありがとうございます 聞きたいんですが、a[]にn個の整数が入ってるとしてって所なんですけど、どうやって定義したんですか?
646 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 04:48:09 ] >>645 int a[] = { 121, 11, 14641, 1331};
647 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 05:36:33 ] 1] 授業単元:プログラミング演習1 C言語の基礎 [2] 問題文(含コード&リンク): S=1+2+・・・n<100 を満たす最大の自然数nとSを出力するプログラムを作成してください。 for文とwhile文を用いたのをそれぞれ作成すること。 考え方:ループを用いて1から順に自然数を足して行き、 和が100を段階で計算を打ち切るようにプログラムする [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc バージョンは最新 [3.3] 言語: C [4] 期限: 今日 [5] その他の制限:変数とハローワールドとscanf、条件文しかならってないはず 期限が近い・・・よろしくお願いします
648 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:06:08 ] >>647 #include <stdio.h> main() { int S = 0, n; for(n = 1; S + n < 100; n++){ S += n; } n--; // 足しすぎたので 1 引く printf("n:%d S:%d\n", n, S); S = 0; n = 1; while(S + n < 100){ S += n; n++; } n--; printf("n:%d S:%d\n", n, S); }
649 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:14:44 ] >>648 なるほど・・・条件にS<100だから105しかでてこなかったのか俺・・・。 ありがとうございまいした、勉強になりました
650 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:00:09 ] [1] 授業単元:画像情報工学 [2] 問題文(含コード&リンク): ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。 仕様1(マウスの左ボタンと右ボタンを使用する。候補線の表示は無し。) マウスの左ボタンクリック 線分の始点座標の指定 マウスの右ボタンクリック 線分の終点座標の指定及び線分の描画 [3] 環境 [3.1] OS:vista [3.2] コンパイラ名とバージョン:VC++ 2008 [3.3] 言語: C [4] 期限: 2008年11月12日まで [5] その他の制限: ライブラリの点を描画するAPI関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。 Cは簡単なものしかやったことなくて全く分かりません 誰か助けてくださいお願いします……
651 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:16:50 ] 誰か610お願いします
652 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:29:43 ] >>610 @ /* (x,y)-平面の点を座標で表す構造体 */ struct Point { double x; double y; }; /* 原点からの長さを求める関数 */ double length_vector_p(struct Point *p) { return sqrt(p->x*p->x + p->y*p->y); } /* 平面の点を表示する関数 */ void print_v_p(struct Point *p) { printf("%f %f\n", p->x, p->y); } int main(void) { struct Point p; printf("Input Point X: "); scanf("%lf", &p.x); printf("Input Point Y: "); scanf("%lf", &p.y); print_v_p(&p); /* print_v_pを使用して,座標の表示 */ printf("The length of vector: %f\n", length_vector_p(&p) ); return 0; }
653 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:32:46 ] >>610 A struct Point { double x; double y; }; void input_point_p(struct Point *p){ printf("X:"); scanf("%lf", &p->x); printf("Y:"); scanf("%lf", &p->y); } void print_v_p2(struct Point *p){ printf("%f %f\n", p->x, p->y); } int main(void){ struct Point *p; /* 構造体ポインタ変数 p */ int num, i; printf("Input number of vector: "); scanf("%d", &num); for (i=0; i< num; i++) { p = malloc(sizeof(struct Point)); /* malloc を使って領域確保 */ if( p == NULL ) { printf( "memory cannot alloc!\n" ); exit( 1 ); } input_point_p(p); /* 関数を使って要素を代入 */ print_v_p2(p); /* 関数を使って要素の表示 */ free(p); /* メモリの解放 */ } return 0; }
654 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:38:01 ] >650 期限は12日じゃなくて19日まででした……
655 名前:デフォルトの名無しさん [2008/11/12(水) 10:13:51 ] >>646 ありがとうございます!
656 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 11:27:53 ] >>650 ライブラリって何の? 専用のをつかってるならそれもうp
657 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:21:11 ] 期限が1日伸びたので>>491 をお願いできませんか?
658 名前:608 mailto:sage [2008/11/12(水) 13:21:57 ] ちょっと聞きたいんですけど、学校から>>608 に関係した問題が追加で出されたんだけど、それを解いてもらえることってできますか?
659 名前:デフォルトの名無しさん [2008/11/12(水) 13:24:12 ] [1] 授業単元 プログラミング基礎 [2] 問題文(含コード&リンク) マイナスの値が入力されるまで繰り返し整数値を入力し最大、最小を求める。 初期化で最大値には最小の値を、最小値には最大の値を設定しておく。 繰り返しにはwhile文を使用する。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年 11月14日 18時 [5] その他の制限: 特になし よろしくお願いします
660 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:40:57 ] >>656 渡されたプリントに書いてあったまんまなんで、自分でも良くわかりません…… 授業ではC言語はおろかPCにすら触ってません
661 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:59:59 ] >>660 単に授業を聞いてなかったとかサボってたとかじゃなくて? 何の前説もなしにそのプリントをぽんと渡されただけなら行く学校を間違えたな たぶん、説明はあったのに理解できなくてスルーしただけだろうけど
662 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:05:51 ] >>659 #include <stdio.h> int main (void) { int n, min=32767, max=0; while(1){ scanf("%d", &n); if(n<0) break; if(n > max) max = n; if(n < min) min = n; } printf("min = %d, max = %d\n", min, max); return 0; }
663 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:11:44 ] >>657 ' ' とか '■' とか '○' マルチバイト文字を扱うのが面倒 ' ' とか '*' とか 'o' でよかったらそんなにかからないけど
664 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:47:40 ] >>659 >>662 + 初期値可変入力 #include <stdio.h> int main( void ) { int i, n; int imin, imax; int nmin, nmax; printf( "最小値の最大を入力してください>" ); scanf( "%d" , &imin ); /* 数値の入力 */ printf( "最大値の最小を入力してください>" ); scanf( "%d" , &imax ); /* 数値の入力 */ nmin=imin; nmax=imax; while (1) { printf( "数値を入力してください>" ); scanf( "%d" , &n ); /* 数値の入力 */ if ( n < 0 ) /* 終了 */ { printf( "終了\n" );break;} if ( n < imin ) /* 最小値 */ { nmin= n;} if ( imax < n ) /* 最大値 */ { nmax= n;} } printf(" 最小:%d\n", nmin); printf(" 最大:%d\n", nmax); }
665 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 14:54:11 ] >>661 授業が元々コンピュータでの画像の描画方法についてなんです 今までプログラムなんて一切なしでアルゴリズム?みたなのを学んでて いきなりレポートの概要渡されました 授業は毎回出てますし、ノートも取ってます それに居眠りとか出来る状況じゃないので 説明はあったんですが、それまでの知識じゃ全く理解できませんでした
666 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:03:29 ] どなたか>>641 お願いできないでしょうか? ヒントだけとかでもいいので・・・orz
667 名前:デフォルトの名無しさん [2008/11/12(水) 15:39:48 ] >>646 調べたい整数の数を を選べるようにするにはどうすればいいの?
668 名前:639 mailto:sage [2008/11/12(水) 15:46:44 ] >>640 あ、すいません。 getsの間違いでした。 fgets…使ってみたんですが、エラーが出ました。 今作っているソースは #include<stdio.h> #include<iostream> #include<string> using namespace std; int main(){ char filename[20], time[100], data[1000000]; FILE *fp; cout<<"CPUtime?"<<endl; gets(time); cout<<"data?"<<endl; gets(data); fp = fopen("file.txt","w"); fprintf(fp,"%s\n",time); fprintf(fp,"%s",data); fclose(fp); } で、本当は「file.txt」ってなってるファイル名を、キーボードから受け取るようにして(filenameとは宣言したものの…) dataに、 「 0 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012 1e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89000006022811e-014 2.63400000595493e-012 2e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89100023673223e-014 2.63400000595493e-012 4.000015229e-011 1.99400005840289e-007 -1.99400005840289e-007 9.89299991211411e-014 2.63400000595493e-012 …」みたいな改行を含んだ文字をコピーして実行画面(コマンドプロンプト)に貼り付けてテキストファイルを作りたいんですがよく分かりません。
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()呼んでいるので、必要に応じてリンクする