1 名前:デフォルトの名無しさん [2007/11/05(月) 20:38:18 ] あなたが解けない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++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1193150915/
369 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 17:35:25 ] >>367 for(i=1; i<N-1; i++) if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n", i); for(i=0; i<N/2; i++) if(a[i]==a[N-1-i]) printf("%d\n", i);
370 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 17:54:23 ] >>367 先越された #include<stdio.h> void prArry(const int a[const], size_t sz) { size_t idx = 1; while( idx != sz - 2 ) { if( 2*a[idx] > a[idx-1] + a[idx+1] ) printf("%d\n",a[idx]); ++idx; } return; } void prHeqT(const int a[const], size_t sz) { size_t idx = 0; while( 2*idx <= sz ) { if( a[idx] == a[sz-1-idx] ) printf("%d\n",idx); ++idx; } return; } int main(void) { const int a[] = {1,2,4,1,55,32,1,4,7,6}; prArry(&a[0],sizeof(a)/sizeof(int)); prHeqT(&a[0],sizeof(a)/sizeof(int)); return 0; }
371 名前:367 [2007/11/12(月) 18:07:48 ] >>368 そうです、誤字すいません。 トレーニング用だと思われます。。。 まだCを始めたばかりで難しくて・・・ アドバイスいただければ幸いです。 >>369 #include <stdio.h> #define N 10 int main(void) { int a[N]; char buf[80]; int i; for(i=1;i<N-1;i++) { fgets(buf,80,stdin); sscanf(buf,"%d",&a[i]); } if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i); } とりあえず2をこんな感じにやってみたのですが、うまくいきません。。。 どんな数字を入れても9になってしまいます・・・ >>370 ごめんなさい、基礎プログラミングなので、そこまで高度な技術は分かりません^^;
372 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:09:21 ] どこら辺が高度?修正するけど。
373 名前:367 [2007/11/12(月) 18:18:16 ] わざわざすいません、テンプレに書くべきだったのですが、 自分はまだ制御構造のwhile文までくらいのコマンドくらいしか分からないので・・・ お勧めの入門書などがあれば教えてもらいたいです。
374 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:20:59 ] 独習C
375 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:27:46 ] >とりあえず2をこんな感じにやってみたのですが、うまくいきません。。。 >どんな数字を入れても9になってしまいます・・・ if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i); だとそりゃ9がでる。 for( i = 0; i != N; ++i ) { if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i); }
376 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:31:49 ] >>371 #include<stdio.h> #include<stdlib.h> #define N 10 int main(void) { int a[N]; int i; for( i = 0; i != N; ++i) { scanf("%d",&a[i]); } printf("--------------------------\n"); for( i=0; i != N; ++i ) { if(a[i]*2>a[i-1]+a[i+1]) printf("%d\n",i); } }
377 名前:デフォルトの名無しさん [2007/11/12(月) 18:35:29 ] 何度も同じ質問すみません [1] 授業単元:アルゴリズム [2] 問題文:巡回セールスマン問題を解く(厳密解)プログラムを作成しなさい。 (解=最小値とその最小値を出す通路) 巡回セールスマン問題のデータファイルは次のデータ形式とする。1行目に頂点数、2行目以下に距離行列。例えば、次のようなもの。 5 0 3 2 99 4 3 0 99 12 99 2 99 0 5 6 99 12 5 0 16 4 99 6 16 0 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: Cのみ [4] 期限: 15日 [5] その他の制限: 全列挙を利用して 本当に列挙だけで最小値だけを出すということができません
378 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:42:41 ] [1] アルゴリズムとデータ構造 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5252.txt [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限: 21日まで 問題の解きがいがないかもしれませんが よろしくお願いします。
379 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:48:00 ] for (i=0; i<kosu; i++) printf("%s\n", data[i]; のところで printf("%s\n", data[i] ) ; カッコが抜けてる
380 名前:デフォルトの名無しさん [2007/11/12(月) 18:54:28 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ・ニュートン法と二分法の両方を用いて、直線 y = x + 1/2 と単位円 x^2 + y^2 = 1 の交点の座標の近似解(小数点以下第6位まで)を求めよ。 ・一つのプログラムに書くこと ・二分法を用いる初期値は、 [a,b] = [-1,1] とせよ。 ・ニュートン法で用いる初期値は、2つとも0とせよ。その際、1つの関数は収束しない。収束しない場合は、求められないとわかった時点でやめるように工夫せよ。 ・ニュートン法も二分法もともに何回で収束したかがわかるようにしておくこと。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc(バージョン不明です) [3.3] 言語:C++ [4] 期限: [2007年11月21日まで(22日提出です)] [5] その他の制限: ・見てわかりやすいように説明文なども各自付加しろ、と指示がありました。 ・デスクトップ環境: GNOME 2.4.2 よろしくお願いします。
381 名前:367 [2007/11/12(月) 18:58:25 ] >>374 ,375,376 ありがとうございます!
382 名前: ◆wFVK8h9bmM mailto:sage [2007/11/12(月) 19:09:28 ] ものすごく遅くなってしまいましたが、>>289 ありがとうございました。 考えて下さった、279、280、281、284のみなさんもありがとうございました。 ちなみに>>284 の質問の答えが返ってきましてV=V0/E=1.000が正しいらしいです。
383 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 19:23:58 ] >>377 巡回セールスマン問題については、 最適解(厳密解)を求めるアルゴリズム自体が、2007年現在、未だに確立されていません。 近似解を用いるのが一般的です。 最適解(厳密解)を求めるアルゴリズムを考え出すのはほとんど無理です。
384 名前:378 mailto:sage [2007/11/12(月) 19:27:58 ] >>379 ありがとうございます。 問2に関しても自己解決できました。
385 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 19:29:25 ] >>383 ・・・へぇ
386 名前: ◆a3LMU3qR26 [2007/11/12(月) 19:29:33 ] 頂点数が5個程度なら全列挙で解が得られるのではないでしょうか?
387 名前:377 ◆a3LMU3qR26 [2007/11/12(月) 19:30:27 ] すいません 377です
388 名前:377 ◆a3LMU3qR26 [2007/11/12(月) 19:40:48 ] ファイルから読み込むプログラムで #include<stdio.h> #define MAXN (100) #define YES (1) #define NO (0) int n, a[MAXN], used[MAXN]; int adj[MAXN][MAXN]; void perm(int d); void minimum(int s); int main(int argc, char **argv){ int i, j; FILE *fp; if (argc != 2) { printf("Usage: %s <filename>\n", argv[0]); exit(1); } fp = fopen(argv[1],"r"); if (fp == NULL) { printf("File not found.\n"); exit(1); } fscanf(fp, "%d", &n); if ((n > MAXN) || (n < 0)) { printf("Out of range: n.\n"); exit(1); } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { fscanf(fp, "%d", &adj[i][j]); } } fclose(fp);
389 名前:377 ◆a3LMU3qR26 [2007/11/12(月) 19:43:37 ] printf("%d\n",n); for(i = 0; i < n; i++){ for(j = 0; j < n; j++){ printf("%d ",adj[i][j]); } printf("\n"); } printf("\n"); for(i = 0; i < n; i++) used[i]=NO; perm(0); return(0); } void perm(int d) { int i,j; int s = 0; if(d == n){ for(j = 0; j < n-2; j++) s+=adj[a[j]][a[j+1]]; s+=adj[a[0]][a[n-1]]; printf("%d\n",s); } else{ for (i = 0; i < n; i++) { if (used[i] == NO) { a[d] = i; used[i] = YES; perm(d + 1); used[i] = NO; } } } }
390 名前:377 ◆a3LMU3qR26 [2007/11/12(月) 19:45:39 ] スレ汚しスマソ ここまではできてるんですけどこれだけだと和の列挙にしかなりません ここから最小値を取り出して出力させるには何を付け加えたらいいのか教えてください
391 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:16:37 ] >>390 TSPのアルゴリズムそのものを付け足せばいい
392 名前:334 [2007/11/12(月) 20:44:16 ] >>391 ググってみたけどもわからないんですけど 具体的にどういう風にすればいいのですか?
393 名前:377 ◆a3LMU3qR26 [2007/11/12(月) 20:45:08 ] すみません >>334 =>>337 です
394 名前:デフォルトの名無しさん [2007/11/12(月) 21:00:16 ] 授業名:アルゴリズム 問題: 次の問題の題意を日本語で説明し問題の解答を与えるプログラムを作成せよ。 For what value of integer N is 10NlgN>2N^2? 環境:C言語でコンパイラはgcc 期限:来週の月曜まで よろしくおねがいします。
395 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:01:09 ] >>394 せめて日本語で説明する部分くらいやってもいいのでは?
396 名前:デフォルトの名無しさん [2007/11/12(月) 21:13:26 ] >>395 自分の日本語訳は 整数Nはなんのために10NlgN>2N^2ですか? みたいな感じなんですけどあってるんでしょうか・・・ 初めての英語問題で面食らってます
397 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:25:29 ] >>377 ほらよ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5253.c >>383 馬鹿か?
398 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:32:48 ] >>396 どんな値の範囲で10NlgN>2N^2が成り立ちますか? じゃないかFor = 範囲
399 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:39:57 ] 10NlogN - 2N*N = 0を満たすNをもとめりゃいい。
400 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:42:41 ] ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆【一番クリックした国が優勝】参加者求ム!☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ イギリス人天才プログラマが運営する前代未聞の無料ブラウザゲーム、clickclickclick.com/ ただひたすらクリックし、国別の総クリック数を世界中で競い合う! 究極にバカバカしくそして意味がなく、ひたすら時間の無駄でなんの得にもならない、だがそれが(・∀・)イイ! ライバルはハンガリー、そして台湾!! GAME2から参戦し、現在GAME27開催中! VIPで発祥し現在2ch全土から結集したクリック兵達で日本チームは戦っている! 意味のない事に全力を傾ける、それが2ちゃんねるクオリティ!! 独自のクリックツール開発競争も熱く、各国のプログラマが全力で優秀な兵器開発をしている!! 日本の技術力の高さを世界に見せつけてやろうぜ! プログラマ、Flashゲーム製作者、動画職人、AA職人、絵師、DJ、wiki編集blog編集者、データ分析者etcも募集中! ツール放置参加もできるので、PCのスペックに自身のある奴、CPUに空きのある奴、時間が余ってる奴もぜひ参加してくれ! 本スレッド 【簡単多重】一番クリックした国が優勝【8砲門】 wwwww.2ch.net/test/read.cgi/news4vip/1194741194/l50 ※落ちているときはここから1発検索 www.clickjapan.jp/find2ch.php 日本チームの有志によるまとめサイトポータル www.clickjapan.jp/ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
401 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:22:09 ] >>394 #include<stdio.h> #include<math.h> typedef double (*SingleFun)( double ); double newton(SingleFun fun,SingleFun fprime, double x) { double fx; double fp; double xprev; do { fx = fun(x); fp = fprime(x); if(fp == 0) fp = 1; xprev = x; x -= fx / fp; } while( x != xprev ); return x; } double fN(double N) { return 10.0 * N * log( N ) - 2*N*N; } double dfdN(double N) { return 10.0 * log( N ) - 4.0 * N + 10.0; } int main(void) { double res = newton( fN, dfdN, 1.0 ); printf("result = %1lf\n",res ); printf("10Nlog(N) > 2N^2 is true for N > %lf\n",res); return 0; }
402 名前:デフォルトの名無しさん [2007/11/12(月) 22:25:38 ] >>398-399 ありがとうございます。やっと理解できました >>401 ありがとうございます。
403 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:27:58 ] >>402 結果を実数で返してしまった。整数に直してくれ。 だから答えとしてはN > 1だな。
404 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:36:44 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ライブラリ関数atofと同じ動作を行う関数 double strtof(const char *nptr) {/*・・・*/} を作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] gcc3.4 [3.3] C言語 [4] 11/15まで お願いします
405 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:43:07 ] #include<stdio.h> #include<stdlib.h> double strtof_ (const char *nptr) { return strtod_ (nptr, (char **) NULL); }
406 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:44:11 ] 間違えた。 ていうか衝突するからstrtofって名前使わないほうがいいと思う。 #include<stdio.h> #include<stdlib.h> double strtof_ (const char *nptr) { return strtod (nptr, (char **) NULL); }
407 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:52:40 ] >>406 すいません、条件を書き忘れました 申し訳ありません 標準ライブラリ関数を使わないでお願いします
408 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 01:52:52 ] >>404 double strtof(const char *nptr) { double ret = 0, div = 10, f = 1; if(*nptr=='-') { f = -1; nptr++; } else if(*nptr=='+') nptr++; while('0' <= *nptr && *nptr <= '9') ret = ret * 10 + *nptr++ - '0'; if(*nptr++!='.') return f * ret; while('0' <= *nptr && *nptr <= '9') { ret += (*nptr++ - '0') / div; div *= 10; } return ret * f; }
409 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 03:35:54 ] double strtof(const char *nptr) { const char *p; int s, n, d; s = 1; n = 0; d = 0; for (p = nptr; *p != '\0'; p++) if (*p == '+' || *p == '-') { if (p != nptr) break; if (*p == '-') s = -1; } else if (*p == '.') d = 1; else if (*p >= '0' && *p <= '9') { n = n * 10 + *p - '0'; d = d * 10; } else break; if (d == 0) d = 1; return (double)s * (double)n / (double)d; }
410 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 03:44:32 ] >>408 >>409 つ[EBCDIC]
411 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 03:48:22 ] EBCDICは0〜9の並びについては保証されてるよ アルファベットがいけない
412 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 07:06:07 ] >>397 これ厳密解じゃないよ しかもnodeを30とかにすると解くのに時間かかりすぎ やり直してきたほうがいいのでは?
413 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 07:54:05 ] 再帰じゃそんなもんざます
414 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 08:19:37 ] >>409 いろいろとひどいな
415 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 16:14:07 ] [1] 授業単元: プログラム演習 [2] 問題文: ここに書きました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5255.txt [3] 環境 [3.1] OS: LINUX [3.2] 言語: C [4] 期限: 11月13日24時まで [5] その他の制限: 特にありません お願いします。
416 名前:デフォルトの名無しさん [2007/11/13(火) 16:25:41 ] 学校からのカキコミです。 わからないので教えてください。 課題25 1からキーボードで入力した値までの合計を求めるプログラムを作りなさい >kadai25 いくつまで合計しますか> 10 /*10と入力 合計は55 ↑こうしたいのですが、よろしくお願いします。 ちなみにscanfとforを使うみたいです
417 名前:デフォルトの名無しさん [2007/11/13(火) 16:29:14 ] 351さん、そうです。 そのやり方がよくわからないのです。
418 名前:デフォルトの名無しさん [2007/11/13(火) 16:44:09 ] [1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):ある新聞販売店では新聞を1部40円で仕入れ、100円で売っている。売れ残った新聞 は1部15円で新聞社に引き取ってもらう。過去1年間の統計によれば、1日に売れる新 聞の数(客数)は、平均800、標準偏差120 の正規分布に大体従っている。このとき、こ の店では1 日に何部の新聞を仕入れれば最も利益(粗利)が多くなるか? これをプログラムに記述せよ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C/C++ [4] 期限: 11月18日 [5] その他の制限:なし よろしくお願いします。
419 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 16:44:33 ] >>415 勝手にテンプレ省略すんなハゲ
420 名前:こまった [2007/11/13(火) 17:08:34 ] 初歩の初歩の質問で本当にごめんなさい。 まったくわからなくって本当にこまってます。 問題:四則演算する電卓を作りなさい。また、あまりも出しなさい。 例:%a.out 5+8 5+8=13 式を入れれば自動計算するようにしたいのですが///さっぱりわからないのです。 すみません。
421 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:13:54 ] お前の質問も全くわからん
422 名前:こまった [2007/11/13(火) 17:22:26 ] 式を打ち込めば四則演算をしてくれて、かつ、あまりがあれば、それも表示してくれるプログラミング なんですけど(;△;) どうしたらよいのでしょう。
423 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:56:16 ] >>422 とりあえずがんばってみたら? だめなら、ダメなりに、どこがどういうことで行き詰ったかかかなあかんよ
424 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 18:02:44 ] mapのデータ部分にクラスを利用する?ことができるらしいんですがイマイチどうすればいいか わかりません・・・
425 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 18:05:28 ] >>424 普通の型と同じでおk
426 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 18:09:39 ] >>425 例えばDATAっていうクラスがあったとしたら map<key,DATA>でいいってことですか?
427 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 19:40:02 ] [1] 基礎プログラミング [2] キーボードから与えられる試験の得点(100点満点)を次々と読み込み、その中央値を 求めるプログラムを作成せよ。得点は1行にひとつずつ入力され、負の値は入力の終了を表すも のとする。また、データの個数の上限は適当に決めてよい。ただし、得点が一つも与えられなか ったときは「なし」と印字せよ。 なお、一般に、数値データの中央値は、それらを昇順に並び換えたものに(n個としたとき)、 奇数なら先頭から{(n+1)÷2}番目、偶数なら[{n÷2+(n+1)÷2}÷2]番目である。 [3.1]Linux [3.3]C言語 [4]できれば今日中 [5] 配列
428 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 20:45:57 ] 【質問テンプレ】 [1] 授業単元:プログラミング演習1 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5256.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月20日 [5] その他の制限:if文、if-else文、switch文まで習いました
429 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 21:00:14 ] >>426 その通り ついでにスレ違い
430 名前:デフォルトの名無しさん [2007/11/13(火) 21:33:40 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 第1項・第2項の値を1とし、 直前の2つの項の和を項の値とする数列を「フィボナッチ数列」と言う。 この数列のi番目の項を計算する関数は、 以下のように再帰的に記述することができる。 f(i) = f(i-1) + f(i-2) (i > 1のとき) f(i) = 1 (i = 1のとき) f(i) = 0 (i = 0のとき) キーボードから数字を入力して変数aに格納し、 フィボナッチ数列・第a項の値を計算するプログラムを作成せよ。 項の計算は上の定義を使い、 再帰的な呼び出しを実行する関数 int F(int n) を作成して呼び出すこと。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/15まで [5] その他の制限: #defineはなしで
431 名前:デフォルトの名無しさん [2007/11/13(火) 21:35:17 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): キーボードから入力した数値(10進数)を 2進数に変換して画面に出力するコードを作成しなさい。 また,キーボードから入力した2進数の数値を 10進数に変換して画面に出力するコードを作成しなさい。 また、必要に応じて再帰を使っても使わなくてもよい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/15まで [5] その他の制限: #defineはなしで
432 名前:380 mailto:sage [2007/11/13(火) 21:35:40 ] >>380 です。単位かかってるレポなんでどなたかお願いします。
433 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 21:35:40 ] >>428 if(a==0) { if(b==0) { if(c==0) printf("It is trivial!\n"); else printf("Boo-boo!\n"); } else { x1 = -c / b; printf("x=%.2f\n", x1); } } else { D = b * b - 4 * a * c; if(D >0) { x1 = (-b+sqrt(D)) / (2 * a); x2 = (-b-sqrt(D)) / (2 * a); printf("x=%.2f,%.2f\n", x1, x2); } else if(D==0) { x1 = -b / (2 * a); printf("x=%.2f\n", x1); } else printf("There exist no real-valued solutions.\n"); } return 0; }
434 名前:デフォルトの名無しさん [2007/11/13(火) 21:36:01 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ハノイの塔を解くプログラムを作成する。 キーボードから円盤の枚数を入力し、 円盤を移動する手順を画面に表示すること。 ・円盤は小さい物から順に1から番号で示す ・柱はL・C・Rで示し、円盤全体をLからRへ移すとする ・可能ならば手順の回数も表示すること 【実行結果(枚数を3と入力した場合)】 円盤枚数を入力 3 円盤1をL→Rへ移す 円盤2をL→Cへ移す 円盤1をR→Cへ移す 円盤3をL→Rへ移す 円盤1をC→Lへ移す 円盤2をC→Rへ移す 円盤1をL→Rへ移す (終了) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VS2005 [3.3] 言語: C [4] 期限: 11/15まで [5] その他の制限: #defineはなしで
435 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 21:42:19 ] >>433 ありがとうございました。
436 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 21:49:56 ] >>434 Hanoiだし再帰使っていいよね? #include<stdio.h> void hanoi(int L,int C,int R,int n){ if(n==0)return; hanoi(L,R,C,n-1); printf("円盤%dを%c→%cへ移す\n",n,L,R); hanoi(C,L,R,n-1); } main(){ int n; printf("円盤枚数を入力"); scanf("%d",&n); hanoi('L','C','R',n); printf("手順の回数 %d\n",~(~0<<n)); }
437 名前:shin [2007/11/13(火) 21:54:59 ] [1]授業単元: 関数入門 [2]問題文: 100点満点の試験を入力して、5段階評価を返す関数 hyouka を作成せよ。 5段階評価は、100〜90までは5、89〜80は4、79〜70は3、69〜60は2、60未満は1とする。 この関数を利用して、学生10人の試験の点数を入力して、 それぞれの5段階評価を求め一覧表を表示するプログラム quality.cpp を作成せよ。 [3]環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: [3.3] 言語: C++ [4]期限: 2007年11月14日 17:00 まで [5]その他の制限: 関数の作り方、使い方が分からないので、そこを教えていただけるだけでも結構です(´`;) よろしくおねがいします!
438 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:03:46 ] ウィルスつくってください anonm4@yahoo.co.jp
439 名前:デフォルトの名無しさん [2007/11/13(火) 22:18:09 ] [1] 授業単元:プログラミング、関数基礎 [2] 問題文(含コード&リンク): メイン関数において、2つの放物線 y=ax2+bx+c y=px2+qx+r の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。 関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場 合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が 有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数 から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個 存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限: 2007年11月19日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) C言語の基礎しか習っていません。 どなたかよろしくお願いします。
440 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:23:38 ] >>430 #include <stdio.h> int F(int n) { if(n==0) return 0; else if(n==1) return 1; else return F(n-1) + F(n-2); } main() { int a,x; printf("数字を入力:"); scanf("%d",&a); x = F(a); printf("フィボナッチ数列第%d項 = %d\n",a,x); return; }
441 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:35:55 ] >>440 それだと末尾最適化されないはず こっちで #include<stdio.h> #include<stdlib.h> typedef unsigned int uint; uint iter(uint a, uint b, uint n) { return n == 0 ? 1 : n == 1 ? a : iter(a+b,a,n-1); } uint fibonacci(uint n) { return iter(1,1,n); } int main(void) { size_t idx = 0; for( ; idx != 10; ++idx) printf("%d: %d\n",idx,fibonacci(idx)); return EXIT_SUCCESS; }
442 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:37:18 ] すまん。大元の問題読んでなかった。 >>440 でいいね。
443 名前:46 mailto:sage [2007/11/13(火) 22:46:48 ] どなたか>>46 をお願いします
444 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:53:23 ] >>443 使っているライブラリは何?よくわからないけど興味あるから勉強してみたい。 で、もしできたら答える。
445 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:59:41 ] >>444 意味わからん。
446 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 23:10:15 ] >>444 とりあえずforkをぐぐるところから始めるといいと思うよ
447 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 23:16:14 ] >>443 , >>444 そんなおまいらに、 ttp://www.ipa.go.jp/security/awareness/vendor/programming/b07_04_main.html
448 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 23:28:57 ] 当方の環境は、WindowsXP / 処理系は gcc 3.4.4 です。 プログラムを起動すると、名前と点数を聞いてきます。 10人分入力すると、名前と評価(level)を表示します。 入力した名前が 1024 文字以上だと、バグります。ごめんなさい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5257.txt
449 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 23:30:46 ] >>448 → >>437
450 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 23:32:18 ] >>448 何も考えずに string を勧める
451 名前:shin [2007/11/13(火) 23:47:58 ] >>448 ありがとうございます!!!
452 名前:shin [2007/11/13(火) 23:54:22 ] >>437 です 自力でやったのですが、 エラーを消すためにいろいろとしていたらよくわからなくなりました.. 誰かなおしてください… お願いします!
453 名前:shin [2007/11/13(火) 23:59:48 ] #include <iostream.h> #include <iomanip.h> int hyouka( int ) ; // 5段階評価する関数 main() { const int x = 10 ; // 入力できる人数 int a[x] ; // テストの点数 int b[x] ; // 1〜5の成績 int i, result ; for( i=0 ; i<x ; i++){ cout << i+1 << "人目の成績 >>> " ; cin >> a[i] ; result = hyouka( a[x] ) ; } return 0 ; }
454 名前:shin [2007/11/14(水) 00:00:28 ] // 関数hyouka int x ; int hyouka(int a[x]) { int x ; int b[x] ; //1〜5の成績 if(90<=a[i]){ b = 5 ; }else if (80<=a[i]){ b = 4 ; }else if (70<=a[i]){ b = 3 ; }else if (60<=a[i]){ b = 2 ; }else{ b = 1 ; } }
455 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:21:12 ] 面白い
456 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:21:42 ] エラー直して欲しいだけならエラーメッセージ見たら大体分かるだろ。
457 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:30:00 ] >>437 (>>452 ) #include <iostream> #include <iomanip> int hyouka( int ) ; // 5段階評価する関数 int main(void) { const int x = 10 ; // 入力できる人数 int a[x] ; // テストの点数 int b[x] ; // 1〜5の成績 int i ; for( i=0 ; i<x ; i++){ std::cout << i+1 << "人目の成績 >>> " ; std::cin >> a[i] ; b[i] = hyouka( a[i] ) ; } std::cout << "番号:点数:評価" << std::endl; for( i=0 ; i<x ; i++) std::cout << std::setw(4) << i + 1 << ':' << std::setw(4) << a[i] << ':' << std::setw(4) << b[i] << std::endl; return 0 ; }
458 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:31:25 ] 承前 int hyouka(int a) { if(90<=a){ return 5 ; }else if (80<=a){ return 4 ; }else if (70<=a){ return 3 ; }else if (60<=a){ return 2 ; } return 1 ; }
459 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:42:21 ] >>458 横からスマンがこういうほうが個人的に好き int hyouka(int a) { return 90 <= a ? 5 : 80 <= a ? 4 : 70 <= a ? 3 : 60 <= a ? 2 : 1; }
460 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:56:02 ] >>439 当方の環境は、WindowsXP / 処理系は cygwin(gcc 3.4.4) です。 表示は小数点3桁まで、重根の判定は幾分甘くしています。 係数が整数ならば、問題ないと思います。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5258.txt
461 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:59:46 ] 【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): ここに書きました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5255.txt [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: ([2007年11月14日24:00まで) [5] その他の制限: 書き直しました
462 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 01:05:27 ] >>461 自分のレス流れたから書いてるだけじゃねーかタコが 書き直すんならもっと早くやっとけよ低脳
463 名前:aho mailto:sage [2007/11/14(水) 01:06:43 ] >>461 作るの面倒だから、アルゴリズムを・・・ "s"が並ぶことはないから単純に"b"かどうかを判定すればよい。 従って、 for(省略) if(!strcmp(sdata[i].word[j], "b")) sdata[i].num++; end of for これじゃあかんのかな?
464 名前:458 mailto:sage [2007/11/14(水) 01:18:30 ] >>459 458 のは、ちょっとずぼら過ぎたね int hyouka(int a) { if (90<=a) return 5 ; if (80<=a) return 4 ; if (70<=a) return 3 ; if (60<=a) return 2 ; return 1 ; } に訂正
465 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 01:27:22 ] >>461 #include<stdio.h> struct tfield{ char word[5]; int num; }; int width_get(int value){ char tmp[16]; return sprintf(tmp, "%d", value); } int main(void){ struct tfield sdata[20]; const char *initial_data="bsbsbbsbsbsbsbbsbbsb"; int i, prev='b', count; for(i=0,count=0;i<20;i++){ if(prev=='b') count++; sprintf(sdata[i].word, "%*c", width_get(count), initial_data[i]); sdata[i].num=count; prev=initial_data[i]; } for(i=0;i<20;i++) printf("%s", sdata[i].word); printf("\n"); for(i=0;i<20;i++) printf("%d", sdata[i].num); printf("\n"); return 0; }
466 名前:461 mailto:sage [2007/11/14(水) 01:47:05 ] >>463 >>465 ありがとうございました。
467 名前:デフォルトの名無しさん [2007/11/14(水) 02:09:09 ] 【質問テンプレ】 [1] 授業単元: [2] 数独を解くプログラムを作れ(なるべく詳しく説明もいれて) [3] 環境 [3.1] 特に指定なし [3.2] 特に指定なし [3.3] 言語:C [4] 期限: 11月17日 [5] 特に制限はなく 単にCを使って数独をとくプログラムをかけばよいらしいのですが 難易度があがってもなるべく解けるように・・・といわれました。 どうしてもうまくいきません。 よろしくお願いします
468 名前:デフォルトの名無しさん [2007/11/14(水) 02:48:15 ] 各ブロックに、ある数字が入る可能性が1マスしかない場合 各ブロックに、ある2個の数字が入る可能性が2マスしかない場合 →それらのマスには他の数字は入らない、他のマスにはその数字は入らない 各行ごとに、ある数字が入る可能性が1つのブロックにしか残っていない場合 →そのブロックの他の行にはその数字は入らない
469 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 03:45:09 ] 数独程度だと、なまじアルゴリズムを凝るよりも安直に作った方がいい。 何故ならば、どんなに安直に作っても1秒と掛からずに解けてしまうから。 つまり、凝ったアルゴリズムを考える手間やデバッグの暇に何千問も処理できるってこった。
470 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 05:51:45 ] [1] 基礎プログラミング [2] キーボードから与えられる試験の得点(100点満点)を次々と読み込み、その中央値を 求めるプログラムを作成せよ。得点は1行にひとつずつ入力され、負の値は入力の終了を表すも のとする。また、データの個数の上限は適当に決めてよい。ただし、得点が一つも与えられなか ったときは「なし」と印字せよ。 なお、一般に、数値データの中央値は、それらを昇順に並び換えたものに(n個としたとき)、 奇数なら先頭から{(n+1)÷2}番目、偶数なら[{n÷2+(n+1)÷2}÷2]番目である。 [3.1]Linux [3.3]C言語 [4]11月14日朝10時 [5] 配列 おねがいします
471 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 07:12:34 ] >>467 数独のソースはネットで探せば確実にあります まずは探しましょう
472 名前:cvop [2007/11/14(水) 07:41:40 ] プログラミング初心者ですが、 画像処理のプログラミングで、PGM画像中にある、 それぞれのオプティカルフローの角度[度]と大きさ[pixel]の 頻度の分布(縦軸:フローの頻度、横軸:フローの角度or大きさ)を 検出し、グラフにしたい(ヒストグラムみたいに)のですが、 どのようなプログラムを作れば良いのでしょうか? 分かる方がいらっしゃれば教えて頂けないでしょうか。 言語はC言語です。
473 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 07:58:56 ] スレ違い
474 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 09:16:19 ] [1] 授業単元:データ構造 [2] 問題文(含コード&リンク):edu.net.c.dendai.ac.jp/ad/1/2007/kadai.html [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:mingw-jp.bat [3.3] 言語:C++ [4] 期限:2007年12月5日20:00まで [5] その他の制限:Windows の API は使用しない,基本的な文法はわかります(For文等) 丸投げですがよろしくお願いします。
475 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 10:06:42 ] >>474 「なお、写したと思われるほど酷似したレポートが複数提出された場合、 原著がどれかの調査を行わず、抽選で一通のレポートのみを評価の対象とし」 こ れ は お も し ろ い
476 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 10:28:45 ] >>474 レポートも書けってこと?Wordでいいのか?
477 名前:デフォルトの名無しさん [2007/11/14(水) 10:46:21 ] [1] 授業単元: 情報処理 [2] 問題文(含コード&リンク):ある新聞販売店では新聞を1部40円で仕入れ、100円で売っている。売れ残った新聞 は1部15円で新聞社に引き取ってもらう。過去1年間の統計によれば、1日に売れる新 聞の数(客数)は、平均800、標準偏差120 の正規分布に大体従っている。このとき、こ の店では1 日に何部の新聞を仕入れれば最も利益(粗利)が多くなるか? これをプログラムに記述せよ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C/C++ [4] 期限: 11月18日 [5] その他の制限:なし よろしくお願いします。
478 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 11:52:10 ] >>429 ありがとうございました スレ違いすみませんでした・・・
479 名前:デフォルトの名無しさん [2007/11/14(水) 13:10:41 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 整数型変数nの値を1から25まで1ずつ変化させて、nの2乗、1/n nの平方根、およびnの立方根を求めて、以下のような数表を作成する プログラムを完成せよ。 n n*n 1/n sqrt(n) n∧(3/1) 1 1 1.00000 1.00000 1.00000 2 2 0.50000 1.41421 1.25992 == == ======= ======= ======= 25 625 0.04000 5.00000 2.92402 (課題分では===のところはくっついていて、 2乗、1/nなどのところはくっついてしまっていますが それぞれ離れています。やりかたがわかりませんでした。 大変見にくくてすみません) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VS2005 [3.3] 言語: C++ [4] 期限: 2007年11月14日(15日提出) [5] その他の制限: 習い始めたばかりなのでよくわかりませんが ないと思います。 宜しくお願いします。
480 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 13:10:48 ] >>475 ひねくれた教授なのでw >>476 プログラムだけで大丈夫です。 なるべく初歩的な文法でお願いしたいのですが…
481 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 14:06:17 ] >>480 教授にメールしとくわ
482 名前:デフォルトの名無しさん [2007/11/14(水) 14:31:30 ] >>467 数独はアルゴリズムは簡単で良いけど、ハッシュ表は導入した方が良いよ ちょっとやってみた #include <iostream> using namespace std; main(){ int z,w,l=0,n,i,j,bf[8][81]; int tmp[4][3]={0,1,9, 0,9,1, 8,-1,9, 8,9,-1}; for(n=0;n<4;n++){ for(i=0;i<9;i++)for(j=0;j<9;j++){ z=tmp[n][0]+tmp[n][1]*i+tmp[n][2]*j; bf[l][z]=bf[l+1][80-z]=i+9*j;}l+=2;} int x[81],p[81],q[81];for(z=0;z<81;z++)x[z]=rand()%10; for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<x[z]<<" ";} cout<<endl<<"のハッシュ値を求める。"<<endl; int num[10]; for(i=0;i<81;i++)p[i]=9; for(l=0;l<8;l++){ for(i=0;i<10;i++)num[i]=0;i=1; for(z=0;z<81;z++){ n=x[ bf[l][z] ]; if(n>0)if(num[n]==0){num[n]=i;i++;} q[z]=num[n];} for(i=0;i<81;i++)if(p[i]<q[i])goto end; else if(p[i]>q[i])break; if(i<81)for(i=0;i<81;i++)p[i]=q[i];end:} unsigned int rh[81][9],hash=0; for(z=0;z<81;z++)for(i=0;i<9;i++)rh[z][i]=(rand()<<16)+rand(); for(z=0;z<81;z++)hash^=rh[z][p[z]]; for(z=0;z<81;z++){if(z%9==0)cout<<endl;cout<<p[z]<<" ";} cout<<"\nと変形され\nハッシュ値は"<<hash<<endl;}
483 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 14:35:23 ] www10.atwiki.jp/prospi3/pages/1.html www.nurs.or.jp/~ukkari/pro-spi/index.php?%A5%BB%A1%A6%A5%EA%A1%BC%A5%B0#content_1_15 www.nurs.or.jp/~ukkari/pro-spi/index.php?%A5%BB%A1%A6%A5%EA%A1%BC%A5%B0#content_1_15 www29.atwiki.jp/purosupi4/ www.geocities.jp/agepan1230/
484 名前:デフォルトの名無しさん [2007/11/14(水) 14:37:14 ] ハッシュ表があれば調べる局面が、1/8以下に出来るよ すぐ解答が出る場面では逆に鈍くなると思うけど、0.5秒以上かかるならハッシュ表使ったら速いと思うよ
485 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 14:52:57 ] >>481 教授公認だから問題無しw
486 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 14:58:32 ] >>485 「ひねくれた教授」が公認なの?
487 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 15:09:02 ] 474「宿題を2chに丸投げしておk?」 教授「おk。公認するよん」 こんな感じか
488 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 15:11:47 ] 底辺大学の教授ってそんなもんなのか
489 名前:デフォルトの名無しさん [2007/11/14(水) 15:24:06 ] [1] 授業単元:情報技術 [2] 問題文: 「キーボードから以下の整数値を入力し,最大値を表示するプログラムを作成せよ キーボードから入力する値 25 , 6 , 45, 18 , 57, 5 ヒント for文を用いてキーボードから数値を読み込みながら, if文を使って読み込んだ数値がそれまでに読み込んだ 数値の最大値maxよりも大きければその値を更新する ・・・・・・ for(i=?;i<=?;??){ scanf(?????); if( ? > max) ???????; } printf(?????); ・・・・・・」 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:すみません、よく分かりません [3.3] 言語:C [4] 期限:2007年11月16日12:00 [5] その他の制限:if文、for文あたりの簡単なレベルでお願いします 大学の授業の課題です。 低レベルかもしれませんが、さっぱり分からないので、よろしくお願いします。
490 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 15:46:17 ] >>489 これが大学の授業か……
491 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 15:49:14 ] >>486 >>487 いや、教授自身が2ちゃんねらーw だからここに問題が漏れてる事も知ってる。というより本人が自分で回答とかしてるしw
492 名前: ◆30lFlSJfAI [2007/11/14(水) 15:54:27 ] [1] 授業単元: 情報基礎 [2] 問題文:下記の問題のプログラミングを作成してください。 関数y=1/xをシンプソン法により、区間[1,2] で積分せよ。 このとき、区切りの数を変えることによって精度が変化することを確認せよ。 ただし、解析的な解はloge2=0.69314718である [3] 環境 OS: Windows 言語: C言語のみ [4] 期限: ([2007年11月21日まで] [5] 制限は特にありません。 プログラミング初心者にもかかわらず大学でこのような課題を出されました。 来週までで申し訳ないのですが、よろしくお願いします。
493 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 15:54:42 ] _,,..r'''""~~`''ー-.、 ,,.r,:-‐'''"""~~`ヽ、:;:;:\ r"r ゝ、:;:ヽ r‐-、 ,...,, |;;;;| ,,.-‐-:、 ヾ;:;ゝ :i! i! |: : i! ヾ| r'"~~` :;: ::;",,-‐‐- `r'^! ! i!. | ;| l| ''"~~ 、 i' | i! ヽ | | | ,.:'" 、ヽ、 !,ノ ゝ `-! :| i! .:;: '~~ー~~'" ゙ヾ : : ::| r'"~`ヾ、 i! i! ,,-ェェI二エフフ : : :::ノ~|`T <イエーイ、坂本直志君見てるー? ,.ゝ、 r'""`ヽ、i! `:、 ー - '" :: : :/ ,/ !、 `ヽ、ー、 ヽ‐''"`ヾ、.....,,,,_,,,,.-‐'",..-'" | \ i:" ) | ~`'''ー---―''"~ ヽ `'" ノ
494 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:01:02 ] >>491 学籍番号は何番?
495 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:09:34 ] 教授職って何気に終身雇用なんだよね 同じ空気吸ってても一山いくらで売られていく子羊たちとの間には明らかな次元断層がある
496 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:12:35 ] 日本語でおk
497 名前:shin [2007/11/14(水) 16:15:56 ] >>457 >>458 >>459 ありがとうございました!!!
498 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:18:09 ] >>474 課題1-1 #include <stdio.h> #include <stdlib.h> #include <time.h> #define STUDENT_NUM_MAX 99999 int get_rand_score(void){ int i, score=0; for(i=0;i<20;i++) score+=rand()%6; return score; } int main(int argc, char *argv[]){ int i, index, student_num; if(argc!=2){ fprintf(stderr, "\nUsage : %s <number>\n", argv[0]); fprintf(stderr, "%5s : number (1-%d)\n", "", STUDENT_NUM_MAX); return 1; } if(sscanf(argv[1], "%d%n", &student_num, &index)<1 || argv[1][index]!='\0'){ fprintf(stderr, "\nERROR : Invalid parameter. %s\n", argv[1]); return 2; } if(student_num<1 || student_num>STUDENT_NUM_MAX){ fprintf(stderr, "\nERROR : Out of range (1-%d). %d\n", STUDENT_NUM_MAX, student_num); return 3; } srand(time(NULL)); for(i=1;i<=student_num;i++) printf("C%05d %d\n", i, get_rand_score()); return 0; }
499 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:49:44 ] >>492 シンプソン公式がわかってれば単純なforループの問題でしかないから。
500 名前:デフォルトの名無し [2007/11/14(水) 17:13:23 ] [1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): アスキーコードの値を対応する文字を組み合わせた 一覧表を出力するプログラムを作成せよ。 アスキーコードの範囲は「32」〜「126」、スペースには△を出力。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 今週中にお願いします。 [5] その他の制限: なし
501 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 17:24:27 ] #include<stdio.h> int main(void){ int i; printf(" 32 △\n"); for(i=33;i<127;i++) printf("%3d %c\n",i,i); return 0; }
502 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 17:30:15 ] >>474 課題 1-3 1-4 1-5 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5259.c
503 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 19:03:55 ] [1] 授業単元:データ構造とアルゴリズム1 [2] 問題文(含コード&リンク):stackプログラムを配列ではなく、連結リストを用いて、作成せよ。 配列で実現する時に比べて、その利点及び欠点をのべよ。 stackプログラム:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5260.txt [3] 環境 [3.1] OS:win xp [3.2] Microsoft Visual Studio .NET 2005 [3.3] 言語:c++ [4] 期限:2007年11月16日9:30まで [5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで よろしくおねがいします。
504 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 19:14:44 ] >>492 #include <stdio.h> #include <math.h> double func1(double x) { return 1.0/x; } double simpson(double a, double b, int n, double (*func)(double)) { double odd = 0, even = 0, h = (b - a)/n; int i; for(i = 1; i < n; i += 2) odd += func(a + i*h); for(i = 2; i < n; i += 2) even += func(a + i*h); return h/3.0*(func(a) + func(b) + 4*odd + 2*even); } int main(void) { int n; for(n = 2; n <= 1024; n *= 2) printf("%4d : %.8f\n", n, simpson(1.0, 2.0, n, (double (*)(double))func1)); return 0; }
505 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 20:17:36 ] >>503 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5261.txt
506 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 20:58:35 ] >>460 本当にありがとうございます。 助かりました。
507 名前:デフォルトの名無しさん [2007/11/14(水) 21:26:19 ] どなたか>>479 を宜しくお願いします。 周りと比べてかなりレベルの低い問題だとは思いますが まったくわからないのでお願いします。
508 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 21:45:15 ] >>507 #include <iostream> #include <iomanip> #include <algorithm> #include <cmath> using namespace std; struct succ{ int operator()(){ return _n++; } succ():_n(1){};int _n; }; struct print{ double qube( const int & n ) { double x = 0, xn = 1; while ( fabs( x-xn ) > 1.0e-8 ) { x = xn; xn = x-(x*x*x-n)/(3.0*x*x ); } return xn; } void operator()( const int & n ){ cout<<setw(4)<<n<<" "<<setw(4)<<n*n<<" "<<setw(9)<<1.0/n<<" "<<setw(9)<<sqrt(n)<<" "<<setw(9)<<qube(n)<<endl; } }; int main( int argc, char ** args ){ const int N = 25; int v[N]={}; cout << setw(4) << "n"<<setw(4)<<"n^2"<<setw(9)<<"1/n"<<setw(9)<<"n^1/2"<<setw(9)<<"n^1/3"<<endl; generate( v, v+N, succ()); for_each( v, v+N, print()); return 0; }
509 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 21:59:04 ] >>474 課題1-5 合格最低点を引数に取り、受験番号順に合格者リストを表示するプログラムを作りなさい。 void pass(int border) { char number[7]; int score; while (scanf("%s %d", number, &score) == 2) if (score >= border) printf("%s\n", number); }
510 名前:デフォルトの名無しさん [2007/11/14(水) 21:59:29 ] [1]プログラミング2 [2] 以下は、下記フォーマットにしたがってデータが収められている配列を表現するためのプログラムです。また、そのフォーマットを持つ配列を引数として、有効なレコード数(つまり配列の0番目の値)を返り値として返す関数 int list_len(const int * list) を作成し、プログラムを完成させなさい。 フォーマット(score table) 配列の要素 内容(ただしi≧0) 0番目 有効なレコード数(K) 5*(i-1)+1番目 i番目の学生の英語の得点 5*(i-1)+2番目 i番目の学生の国語の得点 5*(i-1)+3番目 i番目の学生の数学の得点 5*(i-1)+4番目 i番目の学生の理科の得点 5*(i-1)+5番目 i番目の学生の社会の得点
511 名前:デフォルトの名無しさん [2007/11/14(水) 22:00:20 ] サンプルコード #define MAX 101 /* 得点を入れる配列の最大値 */ #define REC 5 /* 1レコードの要素数 */ #define SUB 6 /* 科目名の文字数 */ char sub[REC][SUB]={"英語","国語","数学","理科","社会"}; /* 関数作成 */ int main() { /* 変数は適切に宣言する */ int score[MAX]={3, /* レコード数 */ 45, 60, 36, 72, 53, /* 1レコード目 */ 87, 48, 77, 69, 91, /* 2レコード目 */ 23, 54, 49, 58, 62}; /* 3レコード目 */ p=score+1; size=list_len(score); /* ここに書く */ } 実行例 +----++----++----++----++----+ |英語||国語||数学||理科||社会| +----++----++----++----++----+ | 45|| 60|| 36|| 72|| 53| +----++----++----++----++----+ | 87|| 48|| 77|| 69|| 91| +----++----++----++----++----+ | 23|| 54|| 49|| 58|| 62| +----++----++----++----++----+
512 名前:デフォルトの名無しさん [2007/11/14(水) 22:02:19 ] [3] 環境 [3.1] OS:win xp [3.2] Microsoft Visual Studio 2005 [3.3] 言語:C言語 [4] 期限:2007年11月17日まで [5] その他の制限ポインタのあたりまで
513 名前:デフォルトの名無しさん [2007/11/14(水) 22:10:43 ] >>508 ありがとうございます。 本当に助かりました。
514 名前:デフォルトの名無しさん [2007/11/14(水) 22:28:24 ] >>431 どなたかお願いします。
515 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:39:28 ] >>505 ありがとうございました。
516 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:43:31 ] >>510 #include <stdio.h> #define MAX 101 /* 得点を入れる配列の最大値 */ #define REC 5 /* 1レコードの要素数 */ #define SUB 6 /* 科目名の文字数 */ char sub[REC][SUB]={"英語","国語","数学","理科","社会"}; /* 関数作成 */ int list_len(const int * list); int list_len(const int * list) { return list[0]; } int main() { /* 変数は適切に宣言する */ int size, x, y; int *p; int score[MAX]={3, /* レコード数 */ 45, 60, 36, 72, 53, /* 1レコード目 */ 87, 48, 77, 69, 91, /* 2レコード目 */ 23, 54, 49, 58, 62}; /* 3レコード目 */
517 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:44:10 ] >>516 p=score+1; size=list_len(score); /* ここに書く */ for (x=0 ; x<REC ; x++) { printf("+----+"); } printf("\n"); for (x=0 ; x<REC ; x++) { printf("|%s|", sub[x]); } printf("\n"); for (x=0 ; x<REC ; x++) { printf("+----+"); } printf("\n"); for (y=0 ; y<size ; y++) { for (x=0 ; x<REC ; x++) { printf("|%4d|", *p);
518 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:44:41 ] >>517 p++; } printf("\n"); for (x=0 ; x<REC ; x++) { printf("+----+"); } printf("\n"); } }
519 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:52:25 ] >>431 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void ten2two(int num) { if (num==0) return; ten2two(num/2); if(num&1) { printf("1"); } else { printf("0"); } } int main() { int num; scanf("%d", &num); ten2two(num); printf("\n"); return 0; }
520 名前:デフォルトの名無しさん [2007/11/14(水) 23:03:19 ] ただ .exe 立ち上げさせるだけのプログラム作りたいんだけど、何かいい方法ある?
521 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:07:05 ] >>431 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int two2ten(char *buf) { unsigned int num=0, i; for (i=0 ; i<strlen(buf) ; i++) { num*=2; if (buf[i]=='1') { num++; } } return num; } int main() { char buf[100]; scanf("%s", buf); printf("%d\n", two2ten(buf)); return 0; }
522 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:07:31 ] >>520 ダブルクリックでおk
523 名前:デフォルトの名無しさん [2007/11/14(水) 23:08:50 ] >>522 いや、ごもっともなんだけどね。。。 どういう命令をすればやってくれるのかなって思って。
524 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:12:27 ] >>520 #include <stdlib.h> int main() { system("%systemroot%\\NOTEPAD.EXE"); return 0; }
525 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:12:47 ] >>523 system
526 名前:デフォルトの名無しさん [2007/11/14(水) 23:16:57 ] >>524 , 525 ありがとお。こんなの知らなかったお。
527 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:21:59 ] >>477 当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。 乱数は M系列乱数、ガウス分布化は局座標法を使用しています。 仕入れ部数を600部から1000部まで1ずつ変化させ、それぞれに 大して 6 万回の試行を行い、平均を算出しています。 さらに、ピークをわかりやすくするために隣接3区間の平均をもって 平準化しています。(が、はっきりしませんでした。) 結果だけのべると、800 より少し多いところ(830〜850) に極大があるようです。 実行すると仕入れ部数と利益が対になって出力されます。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5262.txt (参考文献)C言語による最新アルゴリズム事典/奥村晴彦/技術評論社 1991 ISBN4874084141
528 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:32:29 ] >>474 課題1-4 合格最低人数を引数にして合格最低点を求めるプログラムを作成しなさい。 但し、引数のとりかたは付録を参照すること。 void border(int count) { char number[7]; int score; score = 101; while (count > 0 && scanf("%s %d", number, &score) == 2) count--; printf("%d\n", score); }
529 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:33:08 ] >>479 #include <stdio.h> #include <math.h> int main() { int n; printf(" n n*n 1/n sqrt(n) n∧(3/1)\n"); for (n=1 ; n<=25 ; n++) { printf("%2d ",n); printf("%3d ",n*n); printf("%.5f ",(float)1/n); printf("%.5f ",sqrt((float)n)); printf("%.5f ",powf((float)n, (float)1/3)); printf("\n"); } return 0; }
530 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 00:31:07 ] >>474 課題1-1 99999 以下の整数の引数をとり、受験番号を C00001 から順に C00002 のように引数の数だけ発生させ、 さらに各受験番号に対して乱数で発生させた点数を組み合わせたテストファイルを作るプログラムを作りなさい。 但し、点数は、 0 点から 5 点までを乱数で 20 回発生させ和を取ることで求めなさい。 引数のとりかた、乱数の発生の仕方は付録を参照のこと。 void list(int count) { int number, score, i; for (number = 1; number <= count; number++) { score = 0; for (i = 0; i < 20; i++) score += myrand(); printf("C%05d %d\n", number, score); } }
531 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:24:00 ] >>479 当方の環境は WindowsXP / 処理系は cygwin(gcc 3.4.4) です。 C++ の書式設定を駆使しています。3 項演算子をネストさせています。 ので、宿題の答えとしては難ありですが、細かいところまで題意を満たす ためには致し方なかったのでした。すみません。 詳しめの参考書を見てください。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt
532 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 01:36:26 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): unsigned long long 型の x, y に対して x^2 を y で割った余り計算しなさい。 ただし x^2 がオーバーフローする 可能性があることに注意すること。 [3] 環境 [3.1] OS: Windows (Cygwin) [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: どちらでも可 [4] 期限: 16日まで [5] その他の制限: 特にありません おねがいします
533 名前:デフォルトの名無しさん [2007/11/15(木) 01:57:19 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5264.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5265.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: C [4] 期限: 11/16 pm5:00 [5] その他の制限: 特にありません。 よろしくお願いします。
534 名前:デフォルトの名無しさん [2007/11/15(木) 02:14:51 ] メイン関数において、2つの放物線 y=ax2+bx+c y=px2+qx+r の係数a、b、c、p、q、rをキーボードから入力し、その数値を関数に引数として渡す。 関数はその数値を用いて2曲線の交点の有無を調べ、その交点の個数を戻り値とし てメイン関数に渡す(交点が無い場合は0、交点が1つの場合は1、交点が2つの場 合は2、交点が無限に存在する場合はー1を戻り値にする)。また関数は、もし交点が 有限個存在するならばそれらの交点の座標値をメイン関数に渡す。メイン関数は関数 から得たこれらの情報を得て、交点の個数を画面に表示し、さらにもし交点が有限個 存在するならばそれらの座標値を画面に表示する。そのようなプログラムを作成せよ。 よろしくお願いします。。
535 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:48:36 ] 移項して判別式で判定すりゃいいんだから、>>433 のを適当に変えればいいだけだろ。
536 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:54:15 ] >>534 あの、>>460 に問題がありましたら何がまずいのか教えてください。
537 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:58:19 ] >>474 課題1-3 点数表を読み込み、点数の高い順に出力するプログラムを作成しなさい。 プログラムにおいて点数表の容量を制限してはいけない。 コンピュータのメモリが許す限り大きな点数表も表示できること。 int compare(const char *a, const char *b) { return atoi(b + 7) - atoi(a + 7); } void rank(void) { int size, count; char *buffer; fseek(stdin, 0L, SEEK_END); size = 10; count = ftell(stdin) / (size + 1); buffer = (char *)calloc(count, size); fseek(stdin, 0L, SEEK_SET); fread(buffer, size, count, stdin); qsort(buffer, count, size, compare); fwrite(buffer, size, count, stdout); free(buffer); }
538 名前:デフォルトの名無しさん [2007/11/15(木) 07:02:14 ] >>532 #include <iostream> using namespace std; #define N 4294967295 // 2^32 - 1 unsigned int amari(unsigned int x, unsigned int y){ int k=x-y; if(k<0)k=-k; if(x>k)x=k; k=N/x; int p=x/k,l=x%k; return ((x*k)%y)*p+((x*l)%y)%y;} main(){ int x=97,y=123; cout<<amari(x,y)<<" "<<(x*x)%y; }
539 名前:538 [2007/11/15(木) 07:28:16 ] バグがあったよ
540 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 07:44:16 ] あと型が違うんじゃね?
541 名前:デフォルトの名無しさん [2007/11/15(木) 10:01:04 ] >>494 07KC189
542 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 11:57:29 ] 画像の指定範囲を決めてそこだけを出力するプログラム教えてください。
543 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 12:21:54 ] [1] 授業単元: 確率論 [2] 問題文: ここに書きました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5266.txt 図はこうです toku.xdisc.net/cgi/up/vcc/nm13048.jpg.html [3] 環境 [3.1] OS: LINUX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月15日24:00 [5] その他の制限: お願いします。
544 名前:538 [2007/11/15(木) 13:48:07 ] #include <iostream> using namespace std; typedef unsigned long int Nsu; Nsu N; Nsu amari(Nsu x, Nsu y){ int a; x%=y; a=x-y; if(a<0)a=-a; if(x>a)x=a; a=N/x; int p=x/a, q=x%a , r=0; for(int i=0;i<p;i++){r+=(a*x)%y; r%=y;} r+=(q*x)%y; r%=y; return r;} main(){ N=-1; Nsu x,y; x=(1<<16)-17; y=(1<<14)-3; cout<<amari(x,y)<<" "<<(x*x)%y; }
545 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:14:41 ] >>541 存在しない学籍書いてるんじゃねーよ 04kc〜06kcのどれかだろ? 2年〜4年のどれかなんだから
546 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 16:45:36 ] >>543 とりあえず「重き」ってなんなんだ? 「重さ」だよな…… それともオレの知らない専門的な言い回しなのか……
547 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 16:51:37 ] >>543 >>257 >>258 でダメな理由は?
548 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:04:22 ] 重みじゃないの?
549 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:07:26 ] >>544 x%y が0の場合にゼロ除算
550 名前:デフォルトの名無し [2007/11/15(木) 17:27:31 ] 1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 文字列を正数に変換せよ。 入力が空の場合は処理を終了。「入力されていません」と表示。 入力の最大入力桁数は4バイトとし、桁あふれに対して「4文字で入力してください」と表示。 入力が半角数字以外に対しては「半角数字以外入力できません」と表示。 入力がゼロの場合は「0は入力できません」と表示。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 4.0 [3.3] 言語: C言語 [4] 期限: 今週中にお願いします。 [5] その他の制限: 特にありません
551 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:37:23 ] >>550 突っ込むべき部分があるな 入力の最大入力桁数は四バイト? それとも四文字? -129のような文字列は129に変換? 129を変換したあとの数字は、1290? それとも0129?
552 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 18:56:30 ] >>550 #include<stdio.h> #include<string.h> #include<ctype.h> int get_value(void){ char buf[4+1+1]; // 4文字オーバーチェック + 終端 \0 int i, value=0, buflen; fgets(buf, sizeof(buf), stdin); buflen=strlen(buf); if(buf[buflen-1]=='\n') buf[--buflen]='\0'; if(buflen<=0){ puts("入力されていません"); return -1; } if(buflen>4){ puts("4文字以内で入力してください"); return -1; } for(i=0;buf[i];i++){ if(!isdigit(buf[i])){ puts("半角数字以外入力できません"); return -1; } value=value*10+buf[i]-'0'; } if(value==0) puts("0は入力できません"); return value; } int main(void){ int value; value=get_value(); if(value>0) printf("\n%d\n", value); return 0; }
553 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 19:41:05 ] [1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5263.txt サンプルプログラムは、窓口が1個で,行列が窓口の前にできる場合に,時間と共に窓口の前にできる行列の様子を調べるものである. (1)サンプルプログラム内の乱数処理を srand関数とrand関数を使用するように書き換えなさい。 (2)参考プログラムを元に,パラメータs, q, aを構造体のメンバ として扱うプログラムBに変更しなさい. (3)作成したプログラムを変更し,窓口が2個の場合にも(すなわち1個または2個の場合に)対応できるようにしなさい。 このとき,窓口の個数(1または2)もパラメータLやM, シミュレーション時間と同様に入力して指定できるようにしなさい. なお,新しく到着した客は,最も短い行列(待っている人が少ない窓口)に並ぶものとする. 全ての窓口の行列が同じ長さの場合には,一様な確率 (窓口が2個の場合は1/2の確率)で並ぶ窓口を決定するものとする. (4)窓口が3個以上にも対応できるようにしなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C [4] 期限: 明日までです… [5] その他の制限: 特に無いと思います
554 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 20:10:23 ] >>547 実際はね、重きじゃなくて入力データなんです。 入力データ(配列でいうとdata[50][5])が移動間を動く感じなんですけど 各状態にデータがあって、その入力データを各状態のデータによって 計算して出された値を各移動確率とかけるというわけなんですけど。 で書いてくださったプログラムにおいて、 for(cnt=0;cnt<50;cnt++){それを50回 for(i=0;i<7;i++)cal_next_gs(list[i]);は7つの状態間で1回の移動につき確率計算 } ってのはわかるんです。1次元配列として引数として渡せば できるのかなーと今思いました。 for(cnt=0;cnt<50;cnt++){それを50回 for(i=0;i<7;i++)cal_next_gs(list[i],data[cnt]);は7つの状態間で1回の移動につき確率計算 } void cal_next_gs(struct gstate *gs,float data[5]) { //計算して移動確率を計算 } でいけそうな感じがします。
555 名前:デフォルトの名無しさん [2007/11/15(木) 21:27:17 ] >>527 ありがとうございました。
556 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:38:48 ] >>554 何をいいたいのか、いまいち分からないんだが、 どんな入力に対してどんな出力が欲しいの? 電気回路上の電流のシミュレーション?
557 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:58:18 ] 入力に対して隠れマルコフモデル(HMM)を使って確率を出すんですけど、 この例では3状態のHMMと2状態のHMMを使って最終的にendにたどりつくとこの 状態の確率が出力値となるんです。 で1つの移動に対して入力1フレームを正規分布によって評価し確率を出す。 その正規分布をHMMで評価するんです。 そのHMMには平均分散、移動確率とあるんですけど、 平均分散を正規分布で用いて確率をだして、移動確率をかけて 最終的な移動の確率となるんです。 前につくってもらったのが移動確率でのみの計算でした
558 名前:デフォルトの名無しさん [2007/11/15(木) 22:01:52 ] 神経衰弱を行うゲームを作成すること。 ただし、カードは52枚全て使用し、絵柄の 区別は無いものとする。 このプログラムをお願いします。(^_^)
559 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:02:55 ] すみません、どなたか>>489 をお願いします。 自分でもあつかましいと承知しているのですが、 どうにも分からないので・・・。 コンパイラ名はVS2005のようです。 よろしくお願いします。
560 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:12:59 ] 557ですけど 頼んだのは移動してくる確率が2つだったらグリッドで計算できたんですけど 3つの場合どうすればいいのかわからなくて。 しかも下のやつも計算しなくてはならなくて。 なので質問させていただきました
561 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:30:13 ] >>543 >この(startから状態1への移動確率)X(重き)と >(状態1の状態確率)X(状態1から状態1への移動確率)X(重き)と、(状態11の状態確率)X(状態11 >から状態1への移動確率)X(重き)の和が状態1の状態確率となります。 状態1ってループしてるけど単純にこれでいいの? (状態1の状態確率)X(状態1から状態1への移動確率)X(状態1から状態1への移動確率)X(重き) ... とかは考えなくてもよし?
562 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:36:35 ] >>543 >>246 の問題だと矢印にくっつく数値(状態遷移確率)が固定だったのを 時間(移動回数)によって矢印にくっつく数値(状態遷移確率)を変化させたいと言う事でいい?
563 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:40:42 ] >>561 考えなくていいです。 >>562 そうです。 実際は入力に対して各HMMの1つの状態の平均分散から 正規分布により出力確率を出してそのHMMから移動確率を出して 確率X移動確率なんですけど 簡単のために、出力確率を重きとしてるわけです。
564 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:43:05 ] 移動確率を出す関数だけ。 enum states { START, FIRST, SECON, THIRD, TENTH, ELEVE, E_N_D }; enum states movProbMap( enum states from, enum states to ) { return from == START ? (to == FIRST ? 0.5 : to == TENTH ? 0.5 : 0.0) : from == FIRST ? (to == FIRST ? 0.6 : to == SECON ? 0.3 : to == ELEVE ? 0.1 : 0.0) : from == SECON ? (to == SECON ? 0.7 : to == THIRD ? 0.3 : 0.0) : from == THIRD ? (to == THIRD ? 0.8 : to == E_N_D ? 0.2 : 0.0) : from == TENTH ? (to == TENTH ? 0.6 : to == ELEVE ? 0.4 : 0.0) : from == ELEVE ? (to == ELEVE ? 0.7 : to == FIRST ? 0.2 : to == E_N_D ? 0.1 : 0.0) : 0.0; }
565 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:44:10 ] 激しく無意味だな。スマン無視してくれ。
566 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:47:07 ] >>564 これは一体何でしょう? 実数を返したいんじゃないの???
567 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:55:57 ] enum states -> double で。
568 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:10:49 ] >>543 使い方は data.txt をリダイレクトするだけ lzh 内のファイル名間違えたけど気にしない ans478 < data.txt ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5268.lzh
569 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:32:51 ] >>568 ありがたいんですけど これちょっと使いかたわからなくて。 gcc ans478.cして実行のときになにか入力しないといけないんですか?
570 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:35:27 ] 本来なら ans478 と打って実行するところを ans478 < data.txt のようにしてdata.txtを標準入力にリダイレクト
571 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:36:42 ] >>489 #include<stdio.h> int main(void){ int i, num, max=0; for(i=20071114;i<=20071114+6-1;i++){ scanf("%d", &num); if(num>max) max=num; } printf("%d\n", max); return 0; }
572 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:39:49 ] >>570 できました。。。 さっきできなかったのに。 ありがとうございます。 自分で作りなおしてから できなかったらこれも試してみます