- 1 名前:デフォルトの名無しさん [2008/12/16(火) 19:45:29 BE:198809273-PLT(36020)]
- あなたが解けない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++の宿題を片付けます 119代目 pc11.2ch.net/test/read.cgi/tech/1228313292/
- 293 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:35:44 ]
- >>292
client側から以下(client.cの76,77行目)でGET /%s HTTP/1.1\r\nHOST: %s\r\n\r\nを送信します size = sprintf (str, "GET /%s HTTP/1.1\r\nHOST: %s\r\n\r\n", url.path, url.host); write (s, str, size+1); server側はこれを受け取って処理するんですが パスだけ取得できればいいんで、はじめは、fgets (str, STR_SIZE, ns_read);でGET /%s HTTP/1.1だけ読み込んで そこからパスを取得してそれ以降の処理をしてました でも、どうやらclient側から送信された文字列を全部受け取らずにそれ以降の処理に進むとパイプ破壊のエラーが出ることが分かったんで、 while(fgets (str, STR_SIZE, ns_read));でclient側から送信された文字列を全て(残りの”HOST: %s\r\n\r\n”の部分)取得しようとしたら、このwhile分の2回目のループのfgetsの部分で 止まってそれ以降プログラムが動かないみたいなんです とりあえず、while(fgets (str, STR_SIZE, ns_read));をfgets (str, STR_SIZE, ns_read);に書き換えればパイプ破壊も起きず問題なく動くんですが、 ネット上のechoサーバサンプルコード見てても、特に何が原因でこうなってるのかよく分からなかったので質問させてもらいました >>291 一応それ以降まで進んでることは確認してます ”HOST: %s\r\n”も読み込んで次に実行されたfgetsで止まってる見たいです
- 294 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:58:53 ]
- >>293
>止まってそれ以降プログラムが動かないみたいなんです client側が次に何か送って来るのを待っているんだから
- 295 名前:182 [2008/12/18(木) 16:01:54 ]
- int i=0,j=0,//イテレータ
jousu[10],//乗数を格納 TEMP;//ソート用 char bunkatsu[10][NAGASA] = {},//別けた式を格納 TEMP_MOJI[10][NAGASA] = {}; for(i=0;i<tate-1;i++){ for (j=tate-1;j>i;j--){ if (jousu[j-1] < jousu[j]) {//前の要素のほうが大きいなら //乗数配列の交換 TEMP = jousu[j]; jousu[j] = jousu[j-1]; jousu[j-1]= TEMP; //分割式配列の交換 TEMP_MOJI[j] = bunkatsu[j]; bunkatsu[j] = bunkatsu[j-1]; bunkatsu[j-1] = TEMP_MOJI[j]; } } } これでソートしようと思ってるんだけど、分割式配列の交換で代入できない型ってエラーが出ます。 char型で統一してるのに駄目なの?
- 296 名前:デフォルトの名無しさん [2008/12/18(木) 16:05:17 ]
- >>295
プログラム全体を貼り付けてよ できればうpろだに
- 297 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 16:10:53 ]
- >>293
>>291だけど、言いたかったのは>>293がうまく言ってくれたw ns_readから読み込むと、普通のファイルと違ってパイプから読みこむから、読み込みたいときにパイプが空っぽだと、誰からパイプに入れてくれるのをずっと待ってるんだよ。
- 298 名前:デフォルトの名無しさん [2008/12/18(木) 16:38:48 ]
- [1] 授業単元:
[2] 問題文(含コード&リンク): 「エラトステネスのふるい」は素数を求めるアルゴリズムです。 このアルゴリズムを用いて、100までの素数をすべて表示する プログラムを作成してみよう。 (ヒント) 101個の配列aを用意して、添字2〜100を数として扱います。 数2がふるいに入っている状態はa[2]=1、ふるいから取り 除かれた場合はa[2]=0となるようにします。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc32) [3.3] 言語: (C) [4] 期限: ([2008年12月20日18:00まで] ) [5] その他の制限: (なし)
- 299 名前:デフォルトの名無しさん [2008/12/18(木) 16:50:55 ]
- [1] 授業単元:
[2] 問題文(含コード&リンク): year年 month月のカレンダーを表示するプログラムを作成してみよう。 ヒント 次の関数を作ってカレンダーを作成してみよう。 int leap(int year) 閏年の判定 int days(int year,int month) year年(month-1)月終了時までの日数のずれ void cal_print(int year,int month) year年month月の表示 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc32) [3.3] 言語: (C) [4] 期限: ([2008年12月20日18:00まで] ) [5] その他の制限: (なし)
- 300 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:05:54 ]
- >>299
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8394.c
- 301 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:11:15 ]
- >>298
#include <stdio.h> int main(void) { int i, j; int a[101]; for(i=2; i<101; i++) a[i] = 1; for(i=2; i<=10; i++){ for(j=i+1; j<101; j++){ if(j%i == 0){ a[j] = 0; } } } for(i=2; i<101; i++){ if(a[i]){ printf("%d\n", i); } } return 0; }
- 302 名前:301 mailto:sage [2008/12/18(木) 17:19:13 ]
- 間違えた
for(i=2; i<=10; i++){ if(a[i]){ for(j=i+1; j<101; j++){ if(j%i == 0){ a[j] = 0; } } } }
- 303 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:20:18 ]
- >>301 ちょっとふいたw 答えは合っているが、ちょっと違う。
- 304 名前:デフォルトの名無しさん [2008/12/18(木) 17:20:27 ]
- >>296
お願いします。 www.uploda.org/uporg1864479.c.html パス:1111
- 305 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:20:38 ]
- >>229
クライアントの write (1, str, size+1);も変だな。サイズ大きすぎるだろ。
- 306 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:27:38 ]
- >>298
#include <stdio.h> #define MAX 101 int main(void) { int i,j,k; int a[MAX]={0,0,1}; for(i=3; i<101; i++) a[i] = 1; for(i=2; i<=10; i++) { if(a[i]==1) for(k=i,j=i*2; j<101; j+=k) a[j] = 0; } for(i=2; i<101; i++) if(a[i]) printf("%d ", i); return 0; }
- 307 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:29:03 ]
- >>298
#include <stdio.h> #define MAX 101 int main(void) { int a[MAX]={0,0,1},i,j,k; for(i=3; i<MAX; i++) a[i] = 1; for(i=2; i*i<=MAX; i++) { if(a[i]==1) for(k=i,j=i*2; j<101; j+=k) a[j] = 0; } for(i=2; i<MAX; i++) if(a[i]) printf("%d ", i); return 0; }
- 308 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:38:51 ]
- struct Point
{ int x; int y; }p; int length_vector(struct Point p) { int a,b,c,d; a=pow(p.x , 2 ); b=pow(p.y , 2 ); c = a + b; d =sqrt(c); return d ; } int main(void) { struct Point p; printf("Input Point X: "); scanf("%lf", &p.x); printf("Input Point Y: "); scanf("%lf", &p.y); print_v(p); /* print_vを使用して,座標の表示 */ printf("The length of vector: %f\n", length_vector(p) ); return 0; } なぜ動かん!
- 309 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:45:18 ]
- print_v()を定義していないし、整数型じゃなくて浮動小数点型を使うべき
- 310 名前:デフォルトの名無しさん [2008/12/18(木) 18:03:36 ]
- >>300
ページを開くことができませんでした…
- 311 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 18:04:04 ]
- >>310 嘘は言わなくて良いから。
- 312 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 19:29:35 ]
- >>215
ありがとうございマス!
- 313 名前:デフォルトの名無しさん [2008/12/18(木) 19:33:38 ]
- >>245の者ですが>>280で少し間違いがあったみたいなのでもう一度お願いします。
途中まで、あってるか確証はありませんが、自分でやったのでこの続きをお願いします。 #include<stdio.h> int main(void) { FILE *fp1,*fp2, *fp3; int num, math, eng, total; char name[20]; fp1=fopen("/home/sample/PE1/2008/e12math.txt","r"); if(fp1==NULL){ printf("open error\n");exit(1); } fp2=fopen("/home/sample/PE1/2008/e12eng.txt","w"); if(fp2==NULL){ printf("open error\n");exit(1); } fp3=fopen("report.txt.","x"); while(fscanf(pf1,"%d %s %d",&num,name,&math)!=EOF){
- 314 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 19:48:12 ]
- >>313
どう間違えてたの?
- 315 名前:デフォルトの名無しさん [2008/12/18(木) 19:51:22 ]
- >>314
一致せずが1つあるはずなのになかった
- 316 名前:デフォルトの名無しさん mailto:age [2008/12/18(木) 19:52:40 ]
- やり方も、できれば>>313のような漢字でお願いします
- 317 名前:デフォルトの名無しさん mailto:age [2008/12/18(木) 19:56:17 ]
- >漢字
感じ
- 318 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:07:35 ]
- 何で英語が"w"ww
- 319 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:14:53 ]
- >>316
どこら辺が>>313っぽくなればいいのかが読み取れないなぁ。 別に>>280と大差あるように見えない。 変数名をtypoしたりcloseをOS任せにする辺りが特徴?
- 320 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:34:32 ]
- [1] 授業単元: 科学実習T
[2] 問題文: 16進数を入力するプログラムを作れ。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン:gcc -o [3.3] 言語: C言語 [4] 期限: 2008年12月31日23時59分 [5] その他の制限:scanfは使用禁止。よろしくお願いします。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:37:55 ]
- >>320
#include <stdio.h> #include <stdlib.h> int main() { char s[1000]; int x; fgets(s, 1000, stdin); x = strtol(s, NULL, 16); return 0; }
- 322 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:40:15 ]
- >>320
#include <stdio.h> int main() { char str[256]; unsigned int n; fgets(str, 256, stdin); sscanf(str, "%x", &n); return 0; }
- 323 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:23:54 ]
- >>313=315であると仮定して
検証に使った math.txt と eng.txt そして実際にはどういう結果(出力)が欲しかったのか それを示さないと何とも言えない。
- 324 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:29:24 ]
- math.txtに10人、eng.txtに11人あると最後の人が検出できなさそうにも見える
- 325 名前:280 mailto:sage [2008/12/18(木) 21:32:49 ]
- 今気づいたが29行目くらいに else を漬け忘れているような気がする
>>324 問題文に > 2つのファイルの行数は同じ とあるので。
- 326 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:43:49 ]
- C言語にて、数列(12,43,17,23,57,50,17,41, 7,63)をクイックソートを用いて降順にソートしなさい。
なお、整列完了までの途中経過を表示せよ。 いろいろなサイトで公開されているクイックソート昇順のプログラムを弄ってみたのですが どうしてもうまく行きません。よろしくお願いします。 また、このプログラムを改良し、左端・中央・右端の3要素の中をうちを枢軸 右端)とする 場合のプログラムを考えよ。 に関しては自分で考えてみるつもりなのですが、もし良ければお願いします
- 327 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:51:09 ]
- >>325
ほんとだ。よく見ず難癖つけてすまんかった>行数
- 328 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:14:16 ]
- >>326
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8395.c
- 329 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:24:35 ]
- >>326 途中経過の表示を追加
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8396.c
- 330 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:38:43 ]
- >>328,329
ありがとうございます。 ですが、今回は数列(12,43,17,23,57,50,17,41, 7,63)が指定されているので、 これをscanfでの入力もしくは、プログラム内に埋め込みという形で出来ないでしょうか?
- 331 名前:デフォルトの名無しさん [2008/12/18(木) 22:40:26 ]
- 授業単元:C言語
問題 0〜9、+、−、×、÷、(、)、を使った整数式を ポーランド記法を使ったツリー構造に変換し出力。 さらに計算し解を出力するプログラムを作成。 ただし整数式は標準入力から式ブロックで入力され"quit"が 入力されるまで繰り返し入力できるものとする ※割り算によって発生する小数部は切り捨ててよい ※入力式の誤り判定は不必要とする ※ただし−符号は考慮すること 環境:WS コンパイラ:gcc 制約:breakは原則使用禁止(Selectcase文は除く) scanfは使用禁止 以上です。お願いします
- 332 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:43:24 ]
- >>331
breakの代わりにgoto使ってもいい?
|

|