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/
75 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 13:02:11 ] >>68 ありがとうございました^^
76 名前:デフォルトの名無しさん [2007/11/07(水) 13:45:49 ] このスレも遂に99代目、次100代目ですね。 [1] 授業単元: C言語演習V [2] 問題文(含コード&リンク): 前回の講義にてプログラム実行時の引数を表示するプログラムを作成した。 (実行例) >ensyu1 file1 argv[0]:ensyu1 argv[1]:file1 >ensyu1 file1 file2 argv[0]:ensyu1 argv[1]:file1 argv[2]:file2 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5223.txt 今回はプログラムが実行時にファイルを1つだけ引数として取るような プログラムを作成したい。 そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、 プログラムを終了するように修正せよ。 (実行例) >ensyu1 file1 argv[0]:ensyu1 argv[1]:file1 >ensyu1 file1 file2 Usagi: ensyu1 filename [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C言語 [4] 期限: 11月8日(木)PM12時までにお願いします。 [5] その他の制限: ファイルの標準入出力まで習いました。
77 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 13:49:02 ] 兎じゃなくて、普通はUsageですよ。
78 名前:デフォルトの名無しさん [2007/11/07(水) 13:50:40 ] >>76 ×「そこで引数が違う場合には「Usagi: ./ensyu1 filename」と出力させ、 」 ○「そこで引数が2つ以上の場合には「Usagi: ensyu1 filename」と出力させ、」 でした./で実行はLinuxですね。(汗)
79 名前:デフォルトの名無しさん [2007/11/07(水) 14:03:53 ] >>77 Usageです。兎だと思ってた。orz
80 名前:デフォルトの名無しさん [2007/11/07(水) 15:27:01 ] すみませんが、お願いします。 [1] 授業単元: 音響工学 [2] 問題文(含コード&リンク): 正弦波に対してガウス窓を掛け、テキストファイルに出力せよ。窓間は任意。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C++ [4] 期限:2007年11月8日まで [5] その他の制限:特にありません。 よろしくお願いします!
81 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:21:26 ] >>80 >>1 をきちんと読んだかい?
82 名前:80 [2007/11/07(水) 16:57:10 ] 一応読みましたけど、至らない点ありましたか?
83 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:59:55 ] ガウス窓の説明とその描画方法を書くように
84 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 17:07:45 ] >>83 知らないんなら無視すればいいんじゃないかなー やる気あるならググれば一発だしー 描画しろなんてどこにも書いてないしー
85 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 17:13:22 ] 同意。それは兎も角、テキストファイルへの出力形式については質問させてくれ。 1行1データでずらっとならべればいいのか?
86 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 19:44:02 ] >>80 gnuplot使えば簡単にできるってことでいいのか
87 名前:80 [2007/11/07(水) 19:46:33 ] はい。 1行1データです。 ガウス窓でぐぐってもよくわからなかったので、お願いしに来た次第なのです。 すみませんが、できればお願いします。
88 名前:80 [2007/11/07(水) 19:47:48 ] >>86 gnuplotでできるんですか?
89 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:07:16 ] // >>80 ガウス窓 // gnuplot でやるには plot sin(x)*exp(-x*x/0.03*0.03) #include <iostream> #include <math> #include <fstream> #define pi 3.141592 int main (void) // window function - Gauss window { double x, sigma=0.03; std::ofstream window("window.csv"); for (x=-pi; x<pi; x+=0.01){ window << x << ", " << sin(x) * exp(-x*x/sigma*sigma) << std::endl; } return 0; }
90 名前:80 [2007/11/07(水) 20:15:28 ] ありがとうございます! これでなんとかなるかもです! ご迷惑おかけしました。
91 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:58:38 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): cat コマンドの作成 fgetc()とfputc() 関数の使用 標準出力とすること。ファイル名を指定しない場合は標準入力 [3] 環境 [3.1] OS:Linux [3.2] gcc 3.4 [3.3] C [4] 期限:無期限 [5] その他の:ポインタあたりからあやふやです よろしくお願いします。
92 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:25:02 ] >[5] その他の:ポインタあたりからあやふやです 自己紹介はしなくておk
93 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:26:25 ] [1] プログラミング [2] y=ax*x+b*x+cをfor文を使って計算しなさい。係数a b cは自分で入力 xの始めの値、終わりの値、増やす値も自分で入力できるようにしなさい。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語: Cでおねがいします。 [4] 期限: 明日(11月8日まで) [5] その他 #include<stdio.h> main() { int i, x, y, a, b, c, d, e, f; printf("y=x*x*a+b*x+cを計算します。\n"); printf("aとbとcを入力して下さい。 --->"); scanf("%f %f %f",&a, &b,&c); printf("Xの始めの値を入力して下さい。 --->"); scanf("%f",&d); printf("Xの終わりの値を入力して下さい。--->"); scanf("%f",&e); printf("Xを増やす値を入力してください。 --->"); scanf("%f",&f); for(x=d; x<=e; x+f){ y=(x*x*a)+(b*x)+c; ここまでは自力でやったんですけどその先がまったく分かりません。 よろしくおねがいします。
94 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:58:32 ] >>93 完成間近じゃねえかよw
95 名前:デフォルトの名無しさん [2007/11/07(水) 22:02:18 ] >>53 コードありがとうございます。 所で・・・ 答えとして 入力された分数が 1 / 2 と 2 / 3 のとき 1 / 2 + 2 / 3 = 7 / 6 1 / 2 − 2 / 3 = - 1 / 6 1 / 2 × 2 / 3 = 1 / 3 1 / 2 ÷ 2 / 3 = 3 / 4 こうなるんですが、マイナスの所だけ違うんですがどこを修正すれば ↑のようになりますか?
96 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:14:20 ] >>95 int gcd(int a,int b) { int c,tmp; if(a<0) a=-a; if(b<0) b=-b; if(b>a){ tmp = b; b = a; a = tmp; } /* ユークリッドの互除法で最大公約数を計算 */ while(a%b!=0){ c = a % b; a = b; b = c; } return b; } 符号をチェックしてなかった。gcdをこれに入れ替えてください。 あと、無意味な比較があったのでそれも外してます。
97 名前:93 mailto:sage [2007/11/07(水) 23:17:20 ] >>94 いくらひねっても分からない・・・orz
98 名前:デフォルトの名無しさん [2007/11/07(水) 23:57:15 ] [1] 授業単元: 応用プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5224.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: g++ [3.3] 言語: C++ (Cは全くわからないです) [4] 期限: 11月8日21:00 [5] その他の制限: 条件は問題文と一緒にあります。 どうかよろしくおねがいいたします
99 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:05:27 ] >>93 基本的にはあと y の値と、必要なら x の値を表示するだけだろう それに加えて x,y,a〜f の型と、for のカッコの中身を修正するんだ
100 名前:デフォルトの名無しさん [2007/11/08(木) 00:11:29 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): 画像を上下反転させる [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cです [4] 期限: かなり急いでます、一時ぐらいまで・・・ [5] その他の制限: とりあえず基本的なこと(ポインタ、構造体等)はやりました。 簡単な解説とかあれば嬉しいです。よろしくお願いします。
101 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:18:05 ] 二次元配列の上下の要素を入れ替えるやり方でいいんじゃないの?
102 名前:デフォルトの名無しさん [2007/11/08(木) 00:28:09 ] それがわからないんです・・・。 ネットで探してみましたが、プログラムの内容がさっぱりわかりません。
103 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:36:08 ] 単純な二重ループじゃない?
104 名前:デフォルトの名無しさん [2007/11/08(木) 00:51:16 ] >>76 まだ待ってます。よろしくお願いします。
105 名前:デフォルトの名無しさん [2007/11/08(木) 01:01:06 ] 文字列の配列変数とか使いますか?
106 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:04:50 ] [1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク): 行列Aとベクトルxの積y=Axを求めるプログラムを作成したい。 ・行列nと列数mを入力させる。 ・n×x(nかけるx)の行列Aのメモリを動的に確保する。 ・ベクトルx,yのメモリを動的に確保する。 ・A[0][0]からA[n-1][m-1]までの数値を1つずつ入力させる。 ・ベクトルxの要素x[0]からx[m-1]の数値を入力させる。 ・計算結果yの要素y[0]からy[n-1]を出力する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C [4] 期限:11/11(日)
107 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:06:09 ] >> 106ーーー実行結果ーーー ./ensyu3 行(n)の数は?2 列(m)の数は?3 ------ A[0][0]=1 A[0][1]=2 A[0][2]=3 A[1][0]=4 A[1][1]=5 A[1][2]=6 ------ x[0]=1 x[1]=2 x[2]=3 ------ y[0]=14 y[1]=32 $
108 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:07:27 ] >>105 どれ宛の安価?
109 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:10:00 ] そこまで書いてあるなら順番どおりにやるだけじゃん。
110 名前:デフォルトの名無しさん [2007/11/08(木) 01:10:18 ] すみません、自分は100です。 色々定義しないとダメですよね・・・。 呼び出し関数を使わなくてもforを使えばいいのでしょうか?
111 名前:デフォルトの名無しさん [2007/11/08(木) 01:30:02 ] >[4] 期限: かなり急いでます、一時ぐらいまで・・・ 1時くらいまでといってる割には、ノンビリしてるな。 「1時くらいまでには、私は寝たい」から急いでるだけだろ? こんなやつに、教える必要ないぞ。
112 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:56:26 ] >>110 #define SWAP(type, a, b) {type c;c=a;a=b;b=c;} for(y=0;y<height/2;y++) { for(x=0;x<width;x++) { SWAP(data_t, data[y][x], data[height-1-y][x]); } }
113 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 01:59:36 ] 期限近いヤツの先にやってやれよ。 >>76 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5225.txt
114 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:02:29 ] >>113 ありがとうございます。 もう出来ないのかと思ってました。ほんとにありがとうございます。
115 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:12:31 ] >>91 #include<stdio.h> void file_output(FILE *fp_in, FILE *fp_out){ int moji; while((moji=fgetc(fp_in))!=EOF) fputc(moji, fp_out); } int main(int argc, char *argv[]){ FILE *fp=stdin; int i; if(argc==1) file_output(fp, stdout); for(i=1;i<argc;i++){ fp=fopen(argv[i], "r"); if(fp==NULL) continue; file_output(fp, stdout); fclose(fp); } return 0; }
116 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:40:25 ] 【質問テンプレ】 [1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 入力した文字列(行単位)n個をソートして 昇順に表示するプログラムを作成してください。 ただし同じ文字列は1回だけ表示します。 また、nは1024以下とし、文字列は1024文字までします。 <補足> >以下を加えてください。 #include<stdio.h> #include<string.h> [3] 環境 [3.1] OS:Linux [3.2] わかりません [3.3] C言語 [4] 期限: 11月10日 [5] その他の制限: 文字列の関数 strlen(s):sの長さを数える strcmp(s1,s2):2つの文字列s1,s2を比較し、辞書的に大きい、等しい、小さいに対して 正数、0、負数を返す。 strcpy(s1,s2):文字列s2をs1にコピーし、s1のアドレスを返す。 strcat(s1,s2):文字列s2をs1の後に付け、s1のアドレスを返す。
117 名前:デフォルトの名無しさん [2007/11/08(木) 11:52:35 ] 【質問テンプレ】 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 整数除算 a/b (a,b は正または負の整数)を計算する関数 int fdivide(int a, int b )を作成せよ。 a と b とを入力、 fdivide(a,b )を計算して出力するmain 関数を作成し、 プログラムと実行結果を提出せよ。 a/b は a がb未満になるまでaから b を繰り返し 引き続け、その回数を記憶することで実現させる。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン: (bcc) [3.3] 言語: (C++) [4] 期限: ([11月10日]まで) [5] その他の制限:C++ の割り算演算子の利用は禁止 よろしくお願いします
118 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 14:43:16 ] #include <stdio.h> #include <stdlib.h> unsigned fdivide(unsigned a, unsigned b) { unsigned sum = 0; for (unsigned ic = 1; ic < a; ++ic) { sum += b; if (sum > a) return ic - 1; } return a; } int main(int argc, char ** argv) { printf("%d\n", fdivide(atoi(argv[1]), atoi(argv[2]))); return 0; }
119 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 15:00:38 ] >>116 #include <stdio.h> #include <stdlib.h> #include <string.h> #define WORD_LEN_MAX 1024 int cmp(char **a, char **b){ return strcmp(*a, *b); } int main(int argc, char *argv[]){ char buf[WORD_LEN_MAX+1+1], **word=NULL; int len, wordnum=0L, i; while(fgets(buf, sizeof(buf), stdin)!=NULL){ len=strlen(buf); if(len>0 && buf[len-1]=='\n') buf[len-1]='\0'; word=realloc(word, sizeof(*word)*(wordnum+1)); word[wordnum++]=strdup(buf); } qsort(word, wordnum, sizeof(*word), cmp); for(i=0;i<wordnum;i++) printf("%s\n", word[i]); for(i=0;i<wordnum;i++) free(word[i]); free(word); return 0; }
120 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:20:55 ] [1] 授業単元: [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5226.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月9日10:00まで] [5] その他の制限: 特にありません どうぞよろしくお願いします
121 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:24:14 ] >>120 マルチ乙 pc11.2ch.net/test/read.cgi/tech/1180856695/546
122 名前:デフォルトの名無しさん [2007/11/08(木) 16:40:29 ] >>91 学校特定しました。
123 名前:デフォルトの名無しさん [2007/11/08(木) 17:18:56 ] >>117 #include <stdio.h> int fdivide(const int a, const int b ) { int numerator = a; int denominator = b; int result = 0; int flg; if(numerator < 0) numerator *= -1; if(denominator < 0) denominator *= -1; while(numerator >= denominator){ numerator -= denominator; result++; }; if((a > 0 && b > 0) ||(a < 0 && b < 0)) flg = +1; else flg = -1; return result*flg; } int main() { printf("fdivide(6,2) = %d \nfdivide(1,3) = %d \nfdivide(6,-2) = %d \nfdivide(-6,2) = %d \n" "fdivide(-7,2) = %d \nfdivide(7,-3) = %d \nfdivide(10,1) = %d \n" ,fdivide(6,2),fdivide(1,3),fdivide(6,-2),fdivide(-6,2),fdivide(-7,2),fdivide(7,-3),fdivide(10,1)); return 0; }
124 名前:デフォルトの名無しさん [2007/11/08(木) 18:21:56 ] [1] 授業単元: データ構造(アルゴリズム) [2] 問題文:下記 [3] 環境 [3.1] OS: LINUX [3.2] 言語: C [4] 期限: 11月14日まで] [5] その他の制限: 特にありません どうぞよろしくお願いします
125 名前:デフォルトの名無しさん [2007/11/08(木) 18:24:49 ] >>124 問題文書け
126 名前:デフォルトの名無しさん [2007/11/08(木) 18:25:10 ] 124続き #include <stdio.h> #include <malloc.h> struct tfield { int num[20]; struct tfield *pointer; } ; struct tfield *talloc(void); int main(void) { struct tfield *head, *p; head = NULL; while (p = talloc(), scanf("%d", p -> num)!= EOF){ p -> pointer = head; head = p; } p = head; while(p != NULL){ printf("%d\n", p -> num); p = p -> pointer; } } struct tfield *talloc(void) {return((struct tfield *)malloc(sizeof(struct tfield))); } 上記を、二つのリストをソートした新たなリストを表示するように改変せよ。です
127 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:31:55 ] [1] 授業単元:データ構造とアルゴリズム1 [2] 問題文(含コード&リンク):待ち行列シミュレーションするプログラムを作成せよ 完成する関数: void enqueue(char *x) void dequeue() void queue_print() CPPファイル:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5227.txt 作成するプログラムについて:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5228.txt 実行例:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5229.txt ヒント:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5230.txt [3] 環境 [3.1] OS:win xp [3.2] Microsoft Visual Studio .NET 2003 [3.3] 言語:c++ [4] 期限:2007年11月09日9:30まで [5] その他の制限:(どこまで習っているか)構造体、ファイル処理あたりまで よろしくおねがいします。
128 名前:デフォルトの名無しさん [2007/11/08(木) 19:51:08 ] 【質問テンプレ】 [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): n変数の連立1次方程式をガウスの消去法で解くプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] gcc 3.4 [3.3] 言語: C) [4] 期限: 明日 [5] その他の制限:配列まで習いました。
129 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:28:33 ] [1] 授業単元:プログラミング練習 [2] 問題文(含コード&リンク): あるテキストファイル「memo.txt」にexampleとかかれているとして そのファイルを読み込み、その書かれている単語の1文字ずつ見ていき 母音なら1と、子音なら0と表示するプログラムをつくれ。 exampleなら1010001と表示するように [3] 環境 [3.1] OS:Linux [3.2]GCC [3.3] C言語 [4] 期限: 11月10日
130 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:42:05 ] >>129 #include <stdio.h> #include <ctype.h> main() { int c; FILE *fp; if((fp=fopen("memo.txt","r"))==NULL){ printf("file can't open.\n"); return; } while((c=fgetc(fp))!=EOF){ switch(c){ case 'a': case 'A': case 'i': case 'I': case 'u': case 'U': case 'e': case 'E': case 'o': case 'O': putchar('1'); break; default: /* 何がきても0を出力するのならputchar('0');break;だけでいい */ if(isalpha(c)) putchar('0'); else putchar(' '); break; } } putchar('\n'); fclose(fp); }
131 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:21:29 ] >>124-126 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5231.c
132 名前:131 mailto:sage [2007/11/08(木) 23:39:48 ] 配列使って書き直し。こっちのほうが安全。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5232.c
133 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:40:24 ] [1] 授業単元: [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5233.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月9日10:00まで [5] その他の制限: 期限まであまり時間がありませんが、どうぞよろしくお願いします
134 名前:デフォルトの名無しさん [2007/11/09(金) 00:17:40 ] どなたか>>127 よろしくお願いします。どうもすみません
135 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:27:56 ] >>133 int binarysearch(int v){ /* ここにプログラムを追加 */ int l = 0, r = N-1,x; while( l<=r ) { x = (l + r) / 2; printf("%d %d %d \n",l,x,r); if( v == a[x] ) return 0; /* 見つかった */ if( v > a[x] ) l = x + 1; if( v < a[x] ) r = x - 1; } return -1; } int interpolationsearch(int v){ /* ここにプログラムを追加 */ int l = 0, r = N-1,x; while( l<=r ) { x = l + (v - a[l]) * (r - l) / (a[r]-a[l]); if(x < 0) return -1; if(x >= N) return -1; printf("%d %d %d \n",l,x,r); if( v == a[x] ) return 0; /* 見つかった */ if( v > a[x] ) l = x + 1; if( v < a[x] ) r = x - 1; } return -1; }
136 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:32:17 ] >>135 一応な…… v>a[x]の場合、xの位置のデータは答えよりも小さいから、それよりも右に位置する(x+1)を新しいlにする。 v<a[x]の場合、xの位置のデータは答えよりも大きいから、それよりも左に位置する(x-1)を新しいlにする。
137 名前:デフォルトの名無しさん [2007/11/09(金) 00:59:36 ] int binarysearch(int v){ /* ここにプログラムを追加 */ int mid; int left = 0; int right = 9; while(left < right){ mid = (left + right)/2; if(a[mid] < v) left = mid + 1; else right = mid; }; if(a[left] == v) return left; return -1; }
138 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 01:41:38 ] >>134 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5234.txt この問題、やらしいな。 front = 0 , rear = 0; /* 空 */ front = 0 , rear = 1; /* 1つめ追加 */ front = 0 , rear = 2; /* 2つめ追加 */ front = 0 , rear = 3; /* 3つめ追加 */ front = 0 , rear = 4; /* 4つめ追加 */ front = 0 , rear = 0; /* 5つめ追加 */ ってなるので、空の場合と満杯の場合でfrontとrearの関係が同じなる。ということでflagたてて逃げてみた。
139 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 02:24:06 ] >>128 行列におけるガウスの消去法(掃き出し法)はサンプルコードが至る場所にあります。 ttp://www.mit.msn.to/matrix/determinant.html
140 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 02:32:14 ] >>127 しかしC++でやるんならコンテナがあるんだからqueueの実装なんかやるだけ無駄、 空いた時間で、queueを使った応用をしたほうが宿題として合格だな queueの応用問題を考えられないのは教師に欠陥があるからだ
141 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 09:32:28 ] >>138 どうもありがとうございました。 助かりました
142 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:49:56 ] [1] 授業単元:C言語入門(第7週ファイルの入出力) [2] 問題文(含コード&リンク): 簡単なファイル暗号化・復号化のプログラムを作成せよ。 今回の暗号化は、改行以外の文字のアスキーコードに1を足し、復号化はその逆を行うこととする。 最初の引数が暗号化(c)と復号化(d)のどちらかを決定し、次が入力ファイル名、最後が出力ファイル名を示す。 引数が間違っている場合は"error"を表示する。 (実行例) $ cat input.txt(読み込むファイルの中身確認) Hello! Good bye... $ ./q2-3 c input.txt output.txt $ cat output.txt Ifmmp" Hppe!czf/// $ ./q2-3 d output.txt newinput.txt $ cat newinput.txt Hello! Good bye... ヒント:ファイルからfgetcで1文字づつ読み込み、int型の変数に入れる。 アスキーコードに1足し、fputcでファイルに書き出す。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: GCC [3.3] 言語: C [4] 期限: 11/11(日) [5] その他の制限: 暗号化(c)、復号化(d)の判別には「!strcmp」を使ってください。
143 名前:デフォルトの名無しさん [2007/11/09(金) 11:06:18 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 正規分布に従って、乱数を発生させるプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++ Compiler5.5 [3.3] 言語: C++ [4] 期限: 11/9 18時 [5] その他の制限: よろしくお願いします
144 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:08:42 ] #include <stdio.h> #include <string.h> void encodeDecode(int codeOffset, FILE * fpIn, FILE * fpOut) { int ch; while ((ch = fgetc(fpIn)) != EOF) { fputc(ch == '\n' ? ch : ch + codeOffset, fpOut); } } int main(int argc, char ** argv) { int codeOffset; FILE * fpIn; FILE * fpOut; if (argc > 3) goto error; if (strcmp(argv[1], "c") == 0) { codeOffset = 1; } else if (strcmp(argv[1], "d") == 0) { codeOffset = -1; } else { goto error; } fpIn = fopen(argv[2], "r"); if (fpIn == NULL) goto error; fpOut = fopen(argv[3], "w"); if (fpOut == NULL) goto error; encodeDecode(codeOffset, fpIn, fpOut); return 0; error: fprintf(stderr, "error\n"); return 1; }
145 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:13:04 ] >>144 ×argc > 3 ○argc <= 3
146 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:13:53 ] >>143 上限と下限は指定しないのか? あと、出力方法は?
147 名前:デフォルトの名無しさん [2007/11/09(金) 12:23:52 ] >>146 >上限と下限は指定しないのか? とりあえず、指定されてないので後から変えられるようにしてもらえますか? あと、マイナスが出ないようにしてもらえると助かります。 >出力方法は? 数字が表示されればいいと思います。
148 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:25:30 ] やろうと思ったらC++かよ('A`)
149 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:55:18 ] >>144-145 期限まで待つつもりでしたが、お早い回答ありがとうございます。 変数名なども分かりやすく書いてもらったみたいで感謝しております。
150 名前:129 mailto:sage [2007/11/09(金) 14:47:59 ] [1] 授業単元:プログラミング練習 [2] 問題文(含コード&リンク): 129とほとんど同じなんですけど、 main(){ char str1[10]=”four”; /*char型の配列”four”に母音が含まれれば1、子音が含まれれば0と表示する*/ } を作れ。 3] 環境 [3.1] OS:Linux [3.2]GCC [3.3] C言語 [4] 期限: 11月10日
151 名前:イトキン ◆lq89E2SwMI [2007/11/09(金) 15:09:16 ] [1] 授業単元: オペレーティングシステム [2] 問題文(含コード&リンク): コマンドufsinfoを実装し、ソースコードとレポートを提出せよ。 ufsinfoの概要 ufsinfoは、ファイルシステムから次の情報を取り出す。 ○マジック番号(fs_majic) ○ディレクトリ中のファイル名一覧 ◆ディレクトリを引数に指定した場合 ○データブロックの番号の一覧 ◆そのファイルの中身を格納するブロック ufsinfoの書式 ○ufsinfo パス名 スペシャルファイル名 ◆パス名 ファイルシステム中のファイルへの絶対パス ◆スペシャルファイル名 ファイルシステム全体を表すファイル名
152 名前:イトキン ◆lq89E2SwMI [2007/11/09(金) 15:10:24 ] [3] 環境 [3.1] OS: mac OS [3.2] わかりません [3.3] 言語: C言語のみ [4] 期限: 12月5日 [5] その他の制限: mmapは使用禁止 スペシャルファイルでなく、イメージファイル上の動作でok 二重間接まで動作チェックせよ。 Cのみで350行程度でかけるみたいです。 問題文、が長過ぎて、何をここに書けばいいのかまよってしまいました。 問題について聞きたいことがあれば、レスお願いします。
153 名前:デフォルトの名無しさん [2007/11/09(金) 15:40:01 ] 期限過ぎてもいいんで、誰か143お願いします。
154 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:16:37 ] >>143 //ボックス=ミューラー法で100個の正規乱数を生成するテスト #include<iostream> #include<math.h> #include<stdio.h> #include<time.h> int main() { int i; double u1,u2,n1,n2; srand(time(NULL)); for(i=0;i<50;i++){ u1=(double)(rand())/RAND_MAX; u2=(double)(rand())/RAND_MAX; n1=sqrt(-2*log(u1))*sin(2*M_PI*u2); n2=sqrt(-2*log(u1))*cos(2*M_PI*u2); std::cout <<n1<<" "<<n2<<std::endl; } return 0; }
155 名前: ◆a3LMU3qR26 [2007/11/09(金) 16:36:08 ] 1] 授業単元:アルゴリズム [2] 問題文:巡回セールスマン問題を解くプログラムを作成しなさい。 今回は、あらゆる場合を全通り調べる方法で解を求めるプログラムでかまいません。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: Cのみ [4] 期限: できるだけ早く [5] その他の制限: たいていあり
156 名前: ◆a3LMU3qR26 [2007/11/09(金) 16:38:30 ] >>155ですけど for(i = 0; i < n; i++) used[i]=NO; perm(0); return(0); } void perm(int d) { int i,j; int b[MAXN]; int s = adj[a[0]][a[n-1]]; if(d == n){ for(i = 0; i < n-1; i++){ s+=adj[a[i]][a[i+1]]; } } else { for (i = 0; i < n; i++) { if (used[i] == NO) { a[d] = i; used[i] = YES; perm(d + 1); used[i] = NO; } } } } このプログラムを利用したいのですが これだけだとただの列挙になってしまいます 最小値だけをだすにはどうしたらいいでしょうか?
157 名前:153 [2007/11/09(金) 18:46:49 ] >>154 ありがとうございます。 できれば、マイナスの値が出ないようにしていただきたいんですけど、無理ですか?
158 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:54:49 ] でてきた正規分布を正軸に好きなだけ平行移動させりゃいいじゃん 分散は変わらないから形は変わらないだろ
159 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:56:06 ] 形っていうのは乱数の母集団分布な
160 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 19:25:13 ] 何故マイナスの値を出さないようにしたいのか?その理由気になる。
161 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 19:30:40 ] >>106-107 順番がきましたら、こちらもよろしくお願いします。 期限は日曜日までありますので、土曜日が期限の人を優先していただいて構いません。 正確な期限は11/11(日) PM5時までです。 よろしくお願いします。
162 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 20:50:23 ] >>106 >>161 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5236.c 期限や順番なんて関係無いよ。答える奴は自分がやりたい問題をやるだけ
163 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:33:34 ] [1] データ構造 [2] 問題文(含コード&リンク): n個の頂点からなるグラフを、辺の両端の頂点に同じ色を塗らないようにし、すべての頂点を彩色するのに必要な色数を最小化する。 また、頂点iに接続する辺の数を頂点iの次数とよぶ。以下のアルゴリズムで作るように。 (1) @頂点の次数を降順にソートする。 A頂点1に色1を割り当てる B頂点i=2、...nについて、隣接する頂点に割り当てられていない最小の色番号を頂点iに割り当てる。 (2)頂点iの隣接頂点に彩色された異なる色数を頂点iの飽和次数とする。 @最大次数の頂点に色1を割り当てる A飽和次数が最大の頂点を選ぶ。そのような頂点が複数ある場合は、 未彩色の部分グラフにおいて最大次数の頂点を選ぶ。 B選んだ頂点に彩色可能な最小の色番号を割り当てる C全頂点が彩色済みならば終了。そうでないならAにもどる。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2007年11月10日24:00まで(出来れば21:00 [5] その他の制限: 関数と変数の定義 #include <stdio.h> #define TRUE 1 #define FALSE 0 #define MAX_N 2000 /*変数*/ int n; /*頂点数*/ int m; /*辺数*/ double x[MAX_N],y[MAX_N]; /*各頂点の座標*/ int a[MAX_N][MAX_N]; /*隣接行列*/ int color[MAX_N]; /*色*/ int max_color; /*最大の色番号*/
164 名前:163 mailto:sage [2007/11/09(金) 21:34:07 ] 問題例データの読み込み input_fire = fopen(argv[1],"r"); fscanf(input_fire,"%d %d\n",&n,&m); /*頂点数と辺陬の読み込み*/ for(i = 0;i < n;i++){ fscanf(input_file,"%1f %1f\n"&(x[1]),&(y[i])); /*頂点データの読み込み*/ } for(i = 0;i < n;i++){ /*隣接行列の初期化*/ for(j = 0;j < n;j++){ a[i][j] = 0; } } for(i = 0;i < m;i++){ fscanf(input_file,"%d %d\n",&k1,&k2); /*辺データの読み込み*/ a[k1][k2] = a[k2][k1] = 1; /*隣接行列の生成*/ } for(i = 0;i < n;i++){ color[i] = -1; /*解の初期化*/ } 説明文に意味がわからないところがあったらご指摘ください。お願いします。
165 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:52:39 ] >>164 でーんつーだーい
166 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:25:47 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5237.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11/12 [5] その他の制限: よろしくお願いします
167 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:35:03 ] >>163 それだと彩色数は最小化されないが
168 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:44:59 ] >>167 これ、近似アルゴリズムだから。
169 名前:デフォルトの名無しさん [2007/11/09(金) 22:46:25 ] #include <stdio.h> #include <math.h> double f(double x){ return 1/sqrt(1+pow(x,4)); /*求める定積分*/ } int main(void){ double x,sum=0,h; printf("h:"); scanf("%lf",&h); for(x=2*h;x<1;x+=2*h){ /*範囲指定*/ sum+=(f(x) + 4*f(x-h) + f(x-2*h)) * h/3; /*シンプソンの公式*/ printf("%f %f\n",sum,x); } }
170 名前:デフォルトの名無しさん [2007/11/09(金) 22:47:19 ] for(x=0;x<1-2*h;x+=2*h){ /*範囲指定*/ sum+=(f(x) + 4*f(x+h) + f(x+2*h)) * h/3; /*シンプソンの公式*/ printf("%f %f\n",sum,x);
171 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 23:07:34 ] >>162 >>答える奴は自分がやりたい問題をやるだけ と言いつつプログラム作ってくれた>>162 さんに感謝。自分の課題解いてくれてありがとうございます。 わざわざプログラムコード中に説明文まで入れてもらって本当に感謝しています。 m(_ _)m
172 名前:aho mailto:sage [2007/11/10(土) 01:06:59 ] >>142 これ以外に何かあればいってちょ! encrypt()内がちょっと汚いから書き直してね。 void encrypt(char** argv){ int tmp; //文字読み込みバッファ FILE* fp = fopen(argv[2], "rb"); if(!fp){ printf("file open error!\n"); return; } FILE* fout = fopen(argv[3], "wb"); if(!strcmp(argv[1], "c")){ //暗号化 while((tmp = fgetc(fp)) != EOF){ if(tmp == 0x0A){ //改行コード fputc(tmp, fout); continue; } tmp += 0x01; fputc(tmp, fout); } } else if(!strcmp(argv[1], "d")){ while((tmp = fgetc(fp)) != EOF){ if(tmp == 0x0A){ fputc(tmp, fout); continue; } tmp -= 0x01; fputc(tmp, fout); }
173 名前:aho mailto:sage [2007/11/10(土) 01:09:33 ] >>172 } fclose(fout); fclose(fp); } int main(int argc, char** argv){ if(!strcmp(argv[1],"c") && !strcmp(argv[1],"d")){ printf("argument error!\n"); return 0; } encrypt(argv); return 0; } もっと細かい引数のチェック(argcでも判断, 拡張子判断etc)もした方がいいかもね。 疲れたので寝ます
174 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:14:06 ] >>172-173 つ「>>144-145 」 まあ、作りが少し違う参考になるでしょ。
175 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:23:30 ] [1] 授業単元: 確率論 [2] 問題文: www.uploda.org/uporg1104561.txt ここに書きました。 図はこんな感じです。 www.uploda.org/uporg1104531.jpg [3] 環境 [3.1] OS: LINUX [3.2] 言語: C [4] 期限: 11月10日 [5] その他の制限: 特にありません わかりにくいかもしれませんがお願いします。