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/
52 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:48:54 ] >>44 #include <stdio.h> void input_array(int *a,int *ptr) { printf("%d個目の数値入力\n",(*ptr)+1); scanf("%d",(a+*ptr)); ++*ptr; } main() { int a[10],ptr=0; printf("数値を10個入力してください。\n"); while(ptr<10){ input_array(&a[0],&ptr); } printf("入力結果: "); for(ptr=0;ptr<10;ptr++) printf("%d ",a[ptr]); putchar('\n'); return; }
53 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:50:37 ] >>43 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5221.txt
54 名前:33 mailto:sage [2007/11/07(水) 07:40:52 ] >>38 どうもありがとうございました〜。
55 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 08:51:46 ] >>52 >入力を行う関数は、配列のアドレスと >配列の要素数を引数として受け取るものとする。
56 名前:名無し募集中。。。 [2007/11/07(水) 09:20:23 ] [1] 自習 明解C++演習5_9 [2] b以上a以下の全整数の和を求める関数sumを作成せよ。 なお、bが省略されて呼び出される場合はbを1とみなして合計を求めること [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc55 [3.3] 言語:C++ [4] 期限:11/7まで お願いします。
57 名前:デフォルトの名無しさん [2007/11/07(水) 09:27:25 ] #include <iostream> using namespace std; int sum(int a){return a*(a+1)/2;} int sum(int b, int a){return a*(a+1)/2 - b*(b-1)/2;} main(){ cout<<sum(2,10); }
58 名前:デフォルトの名無しさん [2007/11/07(水) 09:48:19 ] [1]情報処理 [2]二分法で y=x*x−5 の根をもとめる [3]C言語 LInux [4]10時半まで [5]おねがいします><
59 名前:デフォルトの名無しさん [2007/11/07(水) 10:06:56 ] #include <stdio.h> double f(double x){return x*x-5;} main(){ double a=0,b=10,x; int i; for(i=0;i<100;i++){ x=(a+b)/2; if(f(a)*f(x)>0)a=x; else b=x; } printf("%.6f",x); }
60 名前:デフォルトの名無しさん [2007/11/07(水) 10:12:10 ] >59 めっっちゃありがとうございます!! 何回で収束するかもできますか?><
61 名前:デフォルトの名無しさん mailto:age [2007/11/07(水) 10:14:50 ] [1]情報処理 [2]第1引数で指定したint型の先頭から、第2引数で指定した数の要素に中に、 第3引数で指定した値と一致するものがあればその要素のアドレスを、一致す るものが無ければNULLを戻り値とする関数を作りなさい。探索アルゴリズムと して番兵法を用いなさい。作成した関数のテストは、戻り値として得たアドレス に格納されている値を表示する main関数を作成して行いなさい。一致するもの がない場合には何も表示しなくてよい。 [3]c言語 [4]11/7 23:00 お願いします。
62 名前:デフォルトの名無しさん [2007/11/07(水) 10:15:50 ] >>60 できるけど、収束はいくつぐらいだよ たとえば2乗したときに5からのずれが0.00001とか
63 名前:デフォルトの名無しさん [2007/11/07(水) 10:19:01 ] #include <stdio.h> #define gosa 0.00001 double f(double x){return x*x-5;} main(){ double a=0,b=10,x,y; int i; for(i=1;i<100;i++){ x=(a+b)/2; y=f(x); if(y<gosa && y>-gosa){printf("%d回目の試行で収束 x=%.6f",i,x);return 0;} if(f(a)*f(x)>0)a=x; else b=x; } printf("収束しない"); }
64 名前:デフォルトの名無しさん [2007/11/07(水) 10:21:52 ] ありがとうございました!! 条件じぶんでかえてやります><
65 名前:教えてください [2007/11/07(水) 11:52:10 ] double bibun_f(double a, double b,double c, double d) { double f; f = 1 / (1 - mu * pow(cos(d - c), 2)) * (mu * ga * sin(d) * cos(d - c) + mu * pow(a, 2) * sin(d - c) * cos(d - c) - ga * sin(c) + mu / lambda * pow(b, 2) * sin(d - c)); return(f); } ここでエラーが error C2018: 文字 '0x81' は認識できません。 と error C2018: 文字 '0x40' は認識できません。がでるのですが・・・どうすればいいのでしょうか??
66 名前:名無し募集中。。。 [2007/11/07(水) 11:55:15 ] >>57 ありがとうございました
67 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:05:21 ] >>65 エラーメッセージを読めばわかるように、全角スペースが混ざっている。 あと、宿題以外は基本的にはスレ違いだから、以後は別のところで聞いてね。
68 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:13:55 ] >>61 int *search(int *p, int n, int x) { /* destructive */ for (*(p+n) = x; *p != x; ++p); return p; } main() { int i, array[10+1]; /* +1 is for sentinel */ for (i = 0; i < 10; ++i) { array[i] = i % 7; printf("%p : %d\n", &array[i], array[i]); } printf("%d found at %p\n", 4, search(array, 10, 4)); }
69 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:17:48 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): N×N のチェス盤が与えられる( 左下を (1,1) とする )。 (x1,y1) にビショップを置いたとき、(x2,y2) に移動するまでの 最小手数を表示せよ。ただし移動できない場合は -1 と表示せよ。 [3] 環境 [3.1] OS: 指定なし [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: どちらでも可 [4] 期限: 今日中 [5] その他の制限: 特になし
70 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:32:43 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。 各ブロックには自分自身の重さ weight[k] と、 自分の上に乗せられる重さ load[k] が設定されている。 縦に積める最大のブロックの個数を求めよ。 例: N = 5, (weight, load) = (19,15), (7,13), (6,7), (6,8), (1,2) → 4 [3] 環境 [3.1] OS: 指定なし [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: どちらでも可 [4] 期限: 今日中 [5] その他の制限: 特になし
71 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:37:29 ] >>70 >同じ形をした正方形のブロックが N 個与えられる (N ≦ 1000)。 違う形をした正方形があったら怖い。 同じ大きさと言う解釈でいいのかな?
72 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:43:34 ] >>71 そういうことです。形(大きさ)が問題になって積めない、ということはないとします。
73 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:45:24 ] >>71 重さ考えるだけでいんだから大きさはどうだっていいだろ それより >正方形のブロック 二次元か
74 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:45:46 ] >>69 #include<stdio.h> int main(void){ int x,y,x1,y1,x2,y2; printf("x1 y1 x2 y2 = "); scanf("%d %d %d %d",&x1,&y1,&x2,&y2); x=x1>x2?x1-x2:x2-x1; y=y1>y2?y1-y2:y2-y1; if(x==0&&y==0)printf("0"); else if(x==y)printf("1"); else if(x%2==y%2)printf("2"); else printf("-1"); printf("\n"); return 0; }
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行程度でかけるみたいです。 問題文、が長過ぎて、何をここに書けばいいのかまよってしまいました。 問題について聞きたいことがあれば、レスお願いします。