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/
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を使う よろしくお願いします。