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/
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 できました。。。 さっきできなかったのに。 ありがとうございます。 自分で作りなおしてから できなかったらこれも試してみます