1 名前:デフォルトの名無しさん [2010/01/18(月) 23:25:55 BE:265079647-S★(508111)] あなたが解けない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++の宿題片付けます 133代目 pc12.2ch.net/test/read.cgi/tech/1260532772/
321 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:43:19 ] >>307 どうぞ。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10462.txt
322 名前:デフォルトの名無しさん [2010/01/28(木) 22:44:06 ] >>316 >>318 どうもありがとうございます。一人ではどうにもなりませんでした。
323 名前:デフォルトの名無しさん [2010/01/28(木) 22:49:08 ] >>321 ありがとうございます! なんとかのりきれそうですm(_ _)m
324 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:52:05 ] >>320 あの… 名簿の人数が大体5人と考えてみても無理でしょうか? その中から一人検索するので… 条件が習ってる範囲なので変えることができないのですが。
325 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:03:15 ] >324 データ数は関係ない。 その条件だとファイルの読み書きができない。 使用可能関数に記述もれは無いのか? fで始まる名前の関数を習って無いのか?
326 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:07:18 ] >>299 > fp while float else puts gets >strlen strcpy strcat 以外は使用しないでください。 これだけだと、ファイルに入出力できない。 >>320 タソが言ってる方法もあるが・・・ > 名簿の人数が大体5人と考えてみても無理でしょうか? 人数は関係ないかと。 というか、名簿のフォーマットは決められていないですか? ファイルの入出力関数について何も習ってないならば、 この問題は解けないと思います。 とりあえず、講義資料とかノートとか読み返して、 fgetsとかfputsとかを習っていないか確認してください。
327 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:15:56 ] >>324 >上記のプログラミングの他に fp while float else puts gets >strlen strcpy strcat 以外は使用しないでください。授業で習っていないので… それ、あなたが勝手に付けた条件だよね? 上記に記載されていない fopen,fclose,scanf,printf,struct等使ってるけど それはいいの? fopenやfcloseは使ってるのに fprintf,fgets,fputs等のファイル入出力関数は使っちゃダメなの? ・問題文は、出題されたまま全文を書いてください。
328 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:16:59 ] 翻弄された回答者が(´・ω・)カワイソス
329 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:17:22 ] >>320 >>326 すみません!!見直したところfscanf、fprintf、fputsとfgetsも使ってました。 不注意でご迷惑お掛けしました…
330 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:18:53 ] >>329 なら308でいいよね?
331 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:29:58 ] >>330 それがEOFとbreakがつかえないもので…すみません。
332 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:45:17 ] 連投すみません。これ以上書くと私物化も甚だしいので控えます。 頂いたヒントで頑張ります。情報不足でご迷惑お掛けしました。 本当にありがとうございました。
333 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 04:07:06 ] 下痢便飲みたいのかそうか
334 名前:デフォルトの名無しさん [2010/01/29(金) 16:23:54 ] [1] 授業単元:C言語演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10465.txt [3]環境 [3.1] OS:WindouwsXP [3.2] コンパイラ名とバージョン:Microsoft VisualC++2008 Express Edition [3.3] 言語:C [4] 期限: (2010年1月31日17:00まで [5] その他の制限:特になし ファイルの入出力について理解したいので、 すみませんが、よろしくお願いします。
335 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 17:43:11 ] >>334 #include <string.h> #include <stdlib.h> #include <stdio.h> int main(void) { FILE *fp,*fin; char s[256]="gomibako"; char fname[256], buff[256]; long pos; printf("出力するファイル名を入力せよ。\n"); fgets(fname,256,stdin); //スペース入りファイル名なので fname[strlen(fname)-1]='\0'; //\n → \0 strcat(fname, ".txt"); fp = fopen(fname, "a"); fin = fopen("word.txt","r");//fpは"a"追記モード if ((fp == NULL)||(fin == NULL)) { printf("ファイルオープン失敗。\n"); exit(EXIT_FAILURE); } fseek(fp,0,SEEK_END); //ファイル名出力は最初の1回目のみのようなので pos=ftell(fp); if(pos==0) fprintf(fp,"%s\n",fname); while(fscanf(fin,"%s",buff)!=EOF) if(strcmp(buff,s)!=0) fprintf(fp,"%s\n",buff); fclose(fin); fclose(fp); printf("読み込み完了/書き込み完了。\n\n"); return 0; }
336 名前:デフォルトの名無しさん [2010/01/29(金) 20:20:50 ] [1] 授業単元: 情報処理B [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt [3] 環境 [3.1] OS: Windows vista [3.2] Cygwin [3.3] 言語: C [4] 期限:2月9日まで [5] その他の制限: とりあえずstrcpyは習っています。 課題5以外はプログラム中の省略を補っていただきたいです。多いですがよろしくお願い致します。
337 名前:200 mailto:sage [2010/01/29(金) 22:56:13 ] >>200 ですがおかげさまでプログラムを完成させられました。 do{ }while(next_permutation(intary.begin(), intary.end())); を使いました。 ところで>>200 ではn!もしくはn!×n!の組み合わせを計算することになりますが nが10だとn!×n!は1.31681894 × 10^13もの組み合わせになります。 この辺をうまいことごまかす方法ってないものでしょうか。 厳密な解でなくともそこそこの解を短時間で計算できる、みたいな・・・。
338 名前:デフォルトの名無しさん [2010/01/29(金) 23:26:09 ] >>335 さん。 詳しい解説助かります。本当にありがとうございました。
339 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:16:49 ] >>337 「B組の隣にA組を並ばせる」「身長差を最小にする」 の2つを同時に満たす解があるとは限らないので、よくあるのは重みWを利用して 点数=(1-W)×(Bの隣にAがいるか?)+W×(身長差が最小か?) で並びを評価する。2つの条件のどちらを重視するかでWの値を調節する。 あとは色々とアルゴリズムあると思うけど、ランダム山登り探索でもすればいいんじゃないかね @今の並びの点数を計算 Aランダムに2つ選んで交換してみる B交換したあとの点数を計算 C点数が高くなっていたら交換を採用、低くなっていたら元に戻す を繰り返していって、何回か連続で失敗したら終了。
340 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 03:04:51 ] >>336 課題1 codepad.org/pk2M6ihf 課題2 codepad.org/RfxMRbKe 課題3 codepad.org/tV9c41B9
341 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:16:33 ] >>339 これは組み合わせ最適化ってカテゴリになるんですかね? う〜ん、なかなか手の込んだことしないといけないっぽいなぁ。
342 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:14:15 ] >>337 計算途中で、過去の最小を超えたら中止したらいいんじゃね? 少しはラクになるはずw
343 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:19:52 ] 身長順にソートして、 隣の組の子と手を繋がせて、 A組の子を元の順に並べる。 これじゃダメなの?
344 名前:342 mailto:sage [2010/01/30(土) 11:33:03 ] あ、中止つうのは、端折って次へ、という意味。
345 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:09:33 ] >>341 宿題のレベル超えるから最適化アルゴリズムでも調べてくれ >>342 それをやったとしても計算量のオーダーには寄与しないよ テクニックとしては重要だが。 >>343 そのやり方だと「AとBが隣り合う」という条件を完全に満たして、 「身長差が小さい」についてはそこそこ、という解が得られる。 そういう解が欲しいときにはその手の方法がベストだと思う。 >>200 の問題文を見る限り、その解釈でいいと思う。
346 名前:デフォルトの名無しさん [2010/01/30(土) 13:21:56 ] Microsoft社 Visual Studio C++のソフトウェアを用いて チャットアプリケーションを作れと言われたのですが、 当方C言語系がとても苦手で困っています;; システムの仕様は ・1対1の環境でのみ動作。 ・サーバ側はポート番号を指定して、クライアントからの接続を待つ。 ・クライアント側はサーバのIPアドレスとポート番号を指定して、サーバに接続する。 ・この時の通信はTCPで行う。 ・クライアントが通信をやめたい場合は"endc" ・サーバ側がやめたい場合は"ends"と入力。 ・WinSockを使用してWindowsのコンソールプログラムとして基本的な簡易なチャット 以上の条件でプログラミングしていただけると幸いです。 よろしくお願いします m__)m
347 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 13:38:34 ] >>346 >>1
348 名前:200 mailto:sage [2010/01/30(土) 14:21:39 ] 身長順にソートできれば確かに楽になりそうですね。 ただ>>200 の問題はもっと複雑なものの一部分を抜き出したもので、 本当は身長順というよりも2次元平面上で距離が近いもの同士って感じなんです。 そうなると・・・ちょっと安易にはソートできないかな? なんにしても宿題としては提出してしまっているので自分が気になってるだけです。 最適化アルゴリズムでいろいろ見てみようと思います。
349 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 14:45:58 ] Cマガのプログラミング研究会を思い出した。
350 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 15:26:06 ] >>345 343じゃないけど、>>343 のやり方で、 身長差が最小とならない場合って、どんな場合? 計算してみたら、常に最小になりそうなんだが。 それとも「そこそこ」ってのは 「最小にならない場合がある」って意味ではない?
351 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 15:29:09 ] [1] 授業単元:プログラミング演習U [2] 問題文(含コード&リンク): □1□2□3□4□5□6□7□8□9 の□に四則の演算子(+,−)や空白を入れて100なるような 小町算の全ての解を求めるプログラムを作成すること 例えば 12 + 3 - 4 + 5 + 67 + 8 + 9 = 100 123 - 45 - 67 + 89 = 100 [3] 環境 [3.1] OS: Windows [3.2] VC3.5SP1 [3.3] 言語: C++ [4] 期限: 本日4時まで [5] その他の制限: 特にないです かなり切羽詰まってるのでお願いします…
352 名前:350 mailto:sage [2010/01/30(土) 15:42:36 ] と、思ったけど、AとBが隣り合わない場合を考慮すると、 343のやり方では、身長差が最小とならない場合がある、 という意味だったのね。 失礼、読み違えてました。
353 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:14:36 ] [1] 授業単元:コンピュータグラフィック [2] 問題文(含コード&リンク):10468.txt モノクロ画像を読み込み,(319,239) の画素値を 0 とする 画像を関数を使用して読み込み,それを 2 次元配列に格納する関数を作成する. 指定した画素の画素値をセットする. 2 次元配列に格納していた画像を 1 次元配列に再度格納し,関数を使用して画像ファイルとして書き戻す. [3] 環境 [3.1] OS:WindowsXP [3.2] VC 05 [3.3] 言語:C [4] 期限: ([2010年2月1日01:00まで] [5] その他の: 前スレで24日辺りに回答を頂いた問題なのですが、差し戻されました 自分なりに分かる部分を書き直してみましたが、一向に解決しないので回答をいただけないでしょうか?
354 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:16:35 ] >>351 31分でコードを作ってもらおうという考えは非常識
355 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:51:17 ] >>351 前にIPAの試験に出てたので、そのまま作ってみたよ codepad.org/2eIcdrm7
356 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:07:34 ] [1]情報科学特論 (大学院講義レポート課題) [2]kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10469.txt [3] OS:Solaris GNU-C-compiler 4.0 C言語 [4] 2/11迄 [5] 面倒なのでよろしく
357 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:28:17 ] [1] 授業単元:計算機自論 [2] 問題文(含コード&リンク): LISPはCと同じで関数型言語ではないということを200文字以内で表現してください [3] 環境 [3.1] OS: すべて [3.2] コンパイラ名とバージョン: すべて [3.3] 言語: 日本語 [4] 期限: 無期限
358 名前:デフォルトの名無しさん [2010/01/30(土) 19:15:44 ] [1] 授業単元:プログラミング演習U [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10471.txt [3] 環境 [3.1] OS:WindouwsXP [3.2] コンパイラ名とバージョン:VisualC++2008 Express Edition [3.3] 言語:C [4] 期限:2010年2月2日15:00まで [5] その他の制限:特になし なんとか途中まで頑張りましたが、今の自分ではこれが限界でした・・・。 問題文リンク先の≪問題と条件≫の全てを満たすソースを、お教え下さい。 お手数かけますが、よろしくお願いします。
359 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:21:19 ] >>351 なんか変数いっぱい散らかしてもっちゃりしてるけど。 処理もなんかぐねぐねぐねぐねとしてるし。駄目だな。 ttp://codepad.org/E2NpBjB2 >>355 さんのを見て勉強しなおしてきます。
360 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:44:31 ] >>358 #include <stdio.h> int main(int argc,char *argv[]){ FILE *fp1=NULL,*fp2=NULL; char buf; int i=1; int result=0; if(argc!=3){ printf("引数が不正\n"); result=-1; goto EXIT; } fp1 = fopen(argv[1],"rb"); fp2 = fopen(argv[2],"w"); if(fp1==NULL || fp2==NULL){ printf("file open error\n"); result=-1; goto EXIT; } while(fread(&buf,1,1,fp1)){ fprintf(fp2,"%02X ",buf); if(i%16==0) fprintf(fp2,"\n"); i++; } EXIT: if(fp1) fclose(fp1); if(fp2) fclose(fp2); return result; }
361 名前:デフォルトの名無しさん [2010/01/30(土) 20:26:12 ] 360さん。回答ありがとうございます。 早速、このソースでコンパイルしたところ問題なくビルドは出来ました。 しかし、その後の「デバックなし」で実行してみましたが、 「引数が不正」と表示されてしまい、上手く出来ません。 これは何故でしょうか?しょぼい質問ですいません・・・。
362 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 20:38:24 ] >>361 ≪問題と条件≫ 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、 ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。 (実行) >free1.exe test.txt test2.txt でしょ?
363 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 20:41:50 ] >>361 横からだけど、 今の場合引数っていうのは、プログラム実行時にプログラム名の後に続けて書くもの >free1.exe test.txt test2.txt この場合はtest.txtが第1引数で、test2.txtが第2引数 例えばここを >free1.exe hoge.txt fuga.txt にしても、ちゃんとhoge.txtから読み込んでfuta.txtに出力するような プログラムを作れっていうのが、この課題なんじゃないかな
364 名前:デフォルトの名無しさん [2010/01/30(土) 20:45:52 ] >>362 はい、そうです。
365 名前:デフォルトの名無しさん [2010/01/30(土) 20:51:31 ] >>363 はい、test.txtとhoge.txtは、あらかじめ作成している状態です。
366 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 20:57:08 ] 分かってねー
367 名前:363 mailto:sage [2010/01/30(土) 20:59:19 ] >>365 だったら実行時に指定しないと。 VC++でどうやって指定するか分かんないけど
368 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 21:11:35 ] >>365 コマンドライン引数というものが分かってないので ttp://www9.plala.or.jp/sgwr-t/c/sec11-4.html ttp://www.geocities.jp/ky_webid/c/045.html この辺読みましょう
369 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:28:36 ] [1] 授業単元: プログラム演習U [2] 問題文(含コード&リンク): 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する) 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC [3.3] 言語: C [4] 期限:2010/2/8 お願いします
370 名前:デフォルトの名無しさん [2010/01/30(土) 22:43:05 ] >>358 です。 稚拙ですが、質問をURLにまとめたので、よろしくお願いします。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10472.txt
371 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:46:23 ] >>370 >>368 を読め。
372 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:58:55 ] >>370 Cドライブ直下にfreeフォルダを作成します。 C:\free です。 >>360 のソースを free1.c などとしコンパイルして free1.exe を作成します。 作成された free1.exe を C:\free フォルダ内にコピーします C:\free\free1.exe です。 作成済みのデータ test.txt も同様に C:\free フォルダ内にコピーします C:\free\test.txt です。 C:\free フォルダの中には free1.exe test.txt 2つのファイルがあります。 コマンドプロンプトを起動します。 スタート>ファイル名を指定して実行>cmd.exe OKボタン コマンドプロンプトが立ち上がりました。 C:\............... >_ (_は点滅状態) となります。 カレントディレクトリを C:\free に移動します。 C:\............... >cd c:\free です。 C:\free>_ (_は点滅状態) になりました。 この状態で C:\free>free1.exe test.txt test2.txt を実行します。 C:\freeフォルダの中に test2.txt が作成されました。おしまい。
373 名前:デフォルトの名無しさん [2010/01/30(土) 23:03:50 ] >>340 ありがとうございます!助かりました! 課題4、5については引き続きどなたかよろしくお願い致します。。
374 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:30:33 ] >>353 ファイルの入出力はファイルポインタを用いたものに変更してます。 (インデントが変な所はタブをスペース4つに換えて下さい) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10473.txt
375 名前:デフォルトの名無しさん [2010/01/31(日) 00:04:17 ] 372さん。回答ありがとうございます。 アドバイス通りにしてみて、実行したのですが、 「Lhaplus slef extractor」というのが 表示されます。展開先のフォルダはC:\free を選べるのですが、 展開されるファイルが何故かfree1.cしか選べません・・・。 何度も見直して実行したのですが、結果は一緒です。 これは、なにか他に原因があるのでしょうか?
376 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 01:53:57 ] >>356 には手だすな。 >>357 も>>369 も やんないほうがいい
377 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 02:16:46 ] >>375 それ以上の質問はスレ違いどころか板違い。
378 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 02:35:35 ] 乱数は言語学習レベルの人がうかつに手を出すべきものじゃない。 補助的に使うのならともかく 高度に依存するプログラムの生成には高度な専門知識が必要で 専門家”集団”レベルで扱うべきもの。 みだりに使う癖だけは付けないほうが良い 以上自戒を込めて
379 名前:378 mailto:sage [2010/01/31(日) 02:37:05 ] 誤爆につき謝罪
380 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 07:42:21 ] around >>372 www.geocities.jp/ky_webid/c/image/commandline.png
381 名前:デフォルトの名無しさん [2010/01/31(日) 07:47:50 ] [1] 授業単元:プログラミング演習U [2] 問題文(含コード&リンク): 入出力とデータファイルへの保存とその間の処理あるプログラムを作成する kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10475.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:2010年2月4日まで [5] その他の制限:特にありません 自分では手のつけようがなく、非常に困っています。 どなたかよろしくお願いします。
382 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:33:52 ] 漠然としすぎ
383 名前:357 mailto:sage [2010/01/31(日) 15:40:24 ] ほとほと困っています。どなたか回答お願いします。
384 名前: ◆QZaw55cn4c [2010/01/31(日) 15:41:15 ] [1] 自主課題:前スレ pc12.2ch.net/test/read.cgi/tech/1260532772/776 関連 [2] パイプ機能(prog1|prog2|prog3) を有するシェルを作成せよ。 [3.1] WindowsXP/cygwin または Linux(Vine linux 4.2) [3.2] gcc3 [3.3] C [4] 特になし 前スレ pc12.2ch.net/test/read.cgi/tech/1260532772/776 を解こうとして挫折しました。 なにとぞ、お手本のプログラムを示していただきたく、お願いいたします。 私のほうでは、 まず、pipe() -> fork() ->read()/write()またはgetchar()/printf() の流れでチャイルドプロセスの鎖の間をパイプでつなごうとしましたがうまくいきません。 プログラムは codepad.org/lkCrVtuo です。 #define LOWLEVEL ではパイプが頭からお尻までつながって、 read()/write() 低水準入出力てデータが渡り、最後にプロンプトが表示されます。 ところが、 /* #define LOWLEVEL */ とコメントアウトした場合、FILE stdin, stdout でデータの読み書きを行うのですが、EOF を検出できず チャイルドプロセスがロックしてしまいます。 ヒントでもかまいませんので、この種のプログラムのやりかたをどうか教えていただきたくよろしくお願いいたします。
385 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:06:44 ] >>384 > EOF を検出できず EOFではなく0x0Aを検出したらどうでしょ
386 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:35:06 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10480.txt どうぞ。
387 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:43:07 ] 息抜きにって下さい。 自分は分からないっす お客様に「今後の夏のセールには、必ず連絡してほしい」といわれた時 お客様に「もらいもので気に入らないので他の商品と取り替えて欲しい」といわれた時 販売員の正しい行動を。
388 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 20:49:08 ] 上司に聞け
389 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 22:26:49 ] >>384 できたよ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10481.c
390 名前:384 mailto:sage [2010/01/31(日) 23:00:10 ] >>389 提示されたコードを読ませていただき、私のコードがうまくいかなかった原因がわかりました。 int fd[2]; pipe(fd); dup2(fd[0], 0); close(fd[0]); のあとに、 close(fd[1]); が必要でした。 その他、いろいろと示唆にとむコードを掲示していただき、ありがとうございました。
391 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 00:47:15 ] すいませんが規制されてるので携帯から簡単に 問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10482.txt 環境:XP、gcc、C言語 期限:今日の午前中 その他制限:なし 構造体とfwrite関数とコマンドライン引数等を使うらしいのですがよく分かりません よろしくおねがいします
392 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 00:50:31 ] >>391 追加ですいません バイナリファイルです
393 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 01:44:49 ] >>391 名前〜年齢間のタブ数が一定ではないけどそのルールはどうなってるの?
394 名前:デフォルトの名無しさん [2010/02/01(月) 05:48:48 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 住所録の機能を実現するプログラムを作成せよ。 [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2月3日 17時まで [5] その他の制限: 特になし
395 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 08:23:12 ] >>384 ,390 EOFの検出はfeof()でできるよ。
396 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 09:15:16 ] >>393 タブ数は共通して一回です
397 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 10:27:05 ] >>391 codepad.org/YWsKOWtO これじゃダメ?
398 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 10:28:21 ] >>391 連投スマソ。 構造体も,fwrite() も使ってなかったorz 忘れて下さい。
399 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 10:32:02 ] [1] 授業単元: C++実習 [2] 問題文(含コード&リンク): ●自由にクラスを設計する 設計図を提出 : クラスのデータメンバ、メンバ関数、仕様、 使い方等を詳しく説明したドキュメント 形式自由 (ただし電子化されたものに限る) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualStudio2008 [3.3] 言語: C++ [4] 期限: 2010年2月7日まで プログラム作成ではないのですが、よろしければよろしくお願いします。
400 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:11:23 ] 設計図て。図まで書けと申すか。
401 名前:デフォルトの名無しさん [2010/02/01(月) 11:32:51 ] 規制中なので携帯から失礼します [1] 授業単元:プログラミングI [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10477.txt [3] 環境 [3.1] OS:Windows vista [3.2] コンパイラ名とバージョン:visual studio2008 [3.3] 言語:C++ [4] 期限:2010年02月5日まで [5] その他の制限:特になし 自分では全然作れませんでした・・・ よろしくお願いします
402 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 12:47:47 ] 配列の使い方がイヤすぎるw
403 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 12:48:02 ] schaffleって英語じゃないよな?何語?
404 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 12:51:07 ] シャッフルしてランダムな結果を返すならシャッフル関数は2つもいらない気がする
405 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 12:55:25 ] schaffle1(int n, int a[]) { while(n > 1) { int i = rand() / (RAND_MAX + 1.0) * n + 1; int temp = a[n]; a[n--] = a[i]; a[i] = temp; }} schaffle2(int n, int a[]) { int i, j, temp; for(i=1; i<=n; i++) { j = rand() / (RAND_MAX + 1.0) * i + 1; temp = a[j]; a[j] = a[i]; a[i] = temp; }}
406 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 14:48:08 ] [1] 授業単元:プログラミング応用演習 [2] 問題文(含コード&リンク): ttp://mikilab.doshisha.ac.jp/dia/research/report/2008/1118/002/report20081118002.html [3] 環境 [3.1] OS: Windows [3.2] ) [3.3] 言語:C++ [4] 期限: 2010/2/2or3 [5] その他の制限: ライブラリは使わず。問題文のリンク先のプログラム(DIRECT)を組む。 よろしくお願いします。できれば解説を付けてくださると助かります。
407 名前:390 mailto:sage [2010/02/01(月) 18:25:32 ] >>395 C 言語というより UNIX/POSIX システムコールの問題でした。 パイプを pipe() で作成した後適切に処理しなければ、パイプが閉じたことにならず、EOF が検出できずに getchar()やread() がブロックされたのでした。 これは fcntl() で NONBLOCK 属性をつけてもうまくいきませんでした。 codepad.org/WiYTFttG
408 名前:395 mailto:sage [2010/02/01(月) 19:13:22 ] >>407 オレの言いたかったのはget_line()の方。 これじゃコマンドを入力するときのEOFを検出できないと言いたかったの。
409 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 19:26:11 ] [1] C言語演習 [2] int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10} int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5} が与えられている。 値x[0]*y[0]+2*x[1]*y[1]+3*x[2]*y[2]+4*x[3]*y[3]+5*x[4]*y[4]+6*x[5]*y[5] が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム [3] Windows XP/Borland C++ 5.0/C言語 [4] 2/18迄 [5] 特に無し
410 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:27:14 ] >>408 拙作のgetline() のほうでしたら、fgets() が NULL を返すのをみて、一行入力の終わりがきたことを検知できます。特に問題はありません。
411 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:36:37 ] >>410 EOF入力してみた?
412 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:37:07 ] >>409 6以降はどうすんの?
413 名前:410 mailto:sage [2010/02/01(月) 20:41:12 ] >>411 わざわざ Ctrl-Dを入力しなくとも、一行の終わりは検知できていますが、何か?
414 名前:409 mailto:sage [2010/02/01(月) 20:43:57 ] すみません。誤りがありましたので訂正させて下さい。 [1] C言語演習 [2] int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10} int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5} が与えられている。 値x[0]*y[0] - 2*x[1]*y[1]+3*x[2]*y[2]- 4*x[3]*y[3]+5*x[4]*y[4]-6*x[5]*y[5] +7*x[6]*y[6]-8*x[7}*y[7]+9*x[8]}*y[8]-10*x[9]*x[9] が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム 最大/最小になる時のx[],y[]とその値を出力すること [3] Windows XP/Borland C++ 5.0/C言語 [4] 2/18迄 [5] 特に無し
415 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:51:49 ] >>413 入力してみ。
416 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:05:14 ] >>415 特になにもおこりません。というか fgets() で一行入力できているのですが。 どんな振る舞いが発生して、どうおかしいのか教えていただけないでしょうか?
417 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:21:57 ] >>416 > > cannot found がずっとでたけど。 EOFになったら綺麗に終了したほうがいいよ。
418 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:34:01 ] [1] C言語プログラミング演習(大学専門課程選択教科期末課題) [2]kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10483.txt [3] [3-1] Windows Vista [3-2] Visual C++ 2005 [3-3] C/C++どちらでも可(なるべくC言語) [4] 2/11迄 [5]SQLがイマイチ理解できないので、指針だけでも よろしくお願いします
419 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:36:53 ] >>417 なるほど、bash でも Ctrl-D できれいに終了しますね。 これは改良の余地がありました。アドバイスありがとうございます。 コード中のgetline() (とmain())を書き直しました。 codepad.org/5NsN385B
420 名前:デフォルトの名無しさん [2010/02/02(火) 00:56:53 ] [1] 授業単元:プログラミング実践 [2] 問題文 アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。 (図)affin.txt 00000 00000 11111 00000 00000 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名: gcc [3.3] 言語:C++ [4] 期限:2010年2月4日まで [5] その他の制限:特にありません 色々試しましたが、うまくいきませんでした。 よろしくお願いします。
421 名前:409 mailto:sage [2010/02/02(火) 00:59:25 ] すみません。 >>414 の問題なんですがこちらの写し間違いみたいですので 結構です。取り敢えず今回はお願いを取り消させてください。 もういちど確かめてお願いするかもしれません。