1 名前:デフォルトの名無しさん [2008/04/15(火) 23:07:41 ] あなたが解けない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++の宿題を片付けます 104代目 pc11.2ch.net/test/read.cgi/tech/1202135539/
267 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 12:25:23 ] Linux = EOFが入力できる Win = EOFが入力できない というわけで Linux > 越えられない壁 >>>>>>>>>>>>>>>>>> Win てことだ
268 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:19:09 ] >>267 標準入力からEOFをいれる方法 Linux Ctrl+D Windows Ctrl+Z
269 名前:デフォルトの名無しさん [2008/04/22(火) 13:33:14 ] >>268 Wordでそれをやってみろ。 ドザは知識がなさすぎる。
270 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:41:14 ] ならemacsでやってみたら? 標準入力からって書いてあるだろう。
271 名前:デフォルトの名無しさん [2008/04/22(火) 13:46:48 ] >>270 できないと思ってるのかw
272 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:54:23 ] はいはい、できなくはないですよ。論点はそこじゃない。
273 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:59:29 ] 一般人に使われないlinuxをちょっと齧って windowsユーザーを馬鹿にしたくなる年頃なんだろう。 煩わしいコマンドをターミナルに打ち込んで「俺玄人wwwwwwうはwwwww」とか本気で思ってそう。
274 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 14:11:30 ] どんなOSを使ったことがあるかとかどうでも良いわ。 俺は大学でUNIXは普通に使ってたよ。ってか、使えないと授業にならねーし。
275 名前:デフォルトの名無しさん [2008/04/22(火) 14:50:53 ] 論点=ドザはクリックしかできない
276 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 14:57:34 ] やっぱりヤツがいると荒れるな。
277 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:01:48 ] そうだな、論点ズレまくりのナンバーサインがいると。以後放置よろ。
278 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:13:17 ] EOFをファイルデータとして持ってたのは昔のメインフレームくらいじゃないの? 今はほとんどファイルシステムで管理してるでしょ
279 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:16:21 ] またそれかよ・・・EOFが何なのかなんてどうでも良いんだよ。 入力されることがあるかないか?ナンバーサインがズレてんのは getcharとfreadのライブラリの性質に話を持ち込んで、キーボードからの EOF入力さえも否定したから悪いんだよw 普通にEOF入力なんてあるわ、とっくの昔からw
280 名前:デフォルトの名無しさん [2008/04/22(火) 15:19:44 ] >>258
281 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:20:57 ] ヒント:印字可能な文字(データ)しか入力できないという考えがすでに素人以下
282 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:32:17 ] どっちもそこら辺で勘弁してやれよ。
283 名前:デフォルトの名無しさん [2008/04/22(火) 15:38:17 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6305.txt よろしくお願いします。
284 名前:249 mailto:sage [2008/04/22(火) 15:45:10 ] >>279 キーボードから直接EOFコードを入力できると言ってるように聞こえるので一言。 もし、そうじゃなかったらごめん。 アプリがライブラリのgetchar()を呼ぶと、kernelはユーザーの入力待ちになる。 ユーザーがたとえば "test string^D" を入力すると、kernelは^Dを入力の終了と判断し、 ライブラリに "test string" を返す。アプリはライブラリからそれを一文字ずつ取り出して使う。 もしここで "test string" を入力せず、単に^Dだけ入力した場合、kernelは\0をライブラリに返す。 ライブラリは入力がなかったという意味でEOFをアプリに返す。 要は、EOFはもうそれ以上入力がないということを示す、 ライブラリとそれを利用するアプリの取り決めになっています。
285 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:50:46 ] 相手にしたらダメな人だから
286 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:54:26 ] ヒント:改行もタブも印字不可能でもキーボードからの入力が可能。 便宜上出力で指定する場合に \n や \t など、印字可能な文字で代用しているものがある。 所詮テキストファイルにしても、バイナリーデータにしても数値データの塊に過ぎない。 バイナリに関しては、変数の型を指定することで、数値データを適切にプログラムが 解釈するようにコードを記述する際に宣言をしている。
287 名前:デフォルトの名無しさん [2008/04/22(火) 16:31:03 ] お前らスレタイ読め。 C/C++でEOFは「もうそれ以上入力がない」という意味では「ない」。 アフォはひたすらクリックしてればいいんだよ。 妄想披露スンナ。 これだからドザは(ry
288 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:35:12 ] >>287 > もうそれ以上入力がない いつ誰がそんなことを言ったんだよ?w お前こそ黙っとれw
289 名前:デフォルトの名無しさん [2008/04/22(火) 16:37:39 ] 言ってなくても書いてあるだろが。 掲示板でどうやって言うんだよ。 ドザは駄目だな。
290 名前:デフォルトの名無しさん [2008/04/22(火) 16:38:59 ] 「引数として配列のポインタとデータの個数を用いて、引数に与えられた整数の2乗を引数に値を返す関数を作成し、1^2から10^2まで表示せよ」 5時間悩んでも出来ませんでした。よろしくお願いします。
291 名前:249 mailto:sage [2008/04/22(火) 16:43:49 ] >>287 「もうそれ以上入力がない」というのは語弊があるかもしれないですね。 アプリがgetchar()で次の文字を取りに行ったとき、入力がなかったときライブラリがEOFを返します。 以下、ちょっと補足。 Linuxの場合、端末から入力された^Dは、kernelでは16進の0x04になります。 で、ライブラリに返すときこれを\0で上書きします。 ^Dは入力の終了を示すものであり、EOFではないです。 興味ある人は drivers/char/n_tty.c とかglibcのソースを見るといいです。
292 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:45:28 ] そろそろ自演でスレ伸ばすの止めようぜ?
293 名前:デフォルトの名無しさん [2008/04/22(火) 16:49:40 ] >>291 アフォか。 規格書読め。 これだからドザは。
294 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:51:31 ] >>290 #include <stdio.h> void f(int *p, int n) { while(n--) p[n] = p[n] * p[n]; } int main(void) { int a[10], i; for(i=0; i<10; i++) a[i] = i + 1; f(a, 10); for(i=0; i<10; i++) printf("%d ", a[i]); return 0; }
295 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:52:36 ] なんだ、249をNGにしていたから気づかなかったが、まだ勘違いバカが 粘着しているのかw お前が黙ってりゃ一番解決するんだよ。 スレ板読めや、基地外。自分にとってそれはこういう意味ですとか このように解釈しました、そう解釈した理由を こじつけ で勝手に作るなよw お前はISO関係者か?コンピュータの設計者か?これらはすべて 国際的に決められた標準化に基づいて構成されてんだよ。 思い違いを正当化するために、自分の知識の貧弱さを露呈しなくて良いから 黙ってろや、どこぞの学校の講師か知らんが、貴様の元では学びたくないな。 生徒だったらどんな講師に学んだんだと?w
296 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 16:55:36 ] #include <stdio.h> int main(void) { char ch; while( ( ch=getchar() ) != EOF ); printf("%d %c / EOF : %d %c ",ch,ch,EOF,EOF); return 0; } これをコンパイルして、Ctlr-zでEOFを検出させてみろw そしてEOFとして定義されているマクロの値を調べてみましょう。 EOFが入力されたことが一目瞭然です、ありがとうございました。 さてと、これ以上は無駄なんで、以後放置よろ。
297 名前:デフォルトの名無しさん [2008/04/22(火) 16:58:56 ] >>296 はい0点
298 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:02:33 ] では次ぎ、テキストでもバイナリーデータでも、当然画像でも音声データでも良い。 >>296 のプログラムにリダイレクトでファイルを入力させてみろ。 ほれ、やっぱりEOF、ファイルの終わりを検出して終了し、そのときのコード、値と EOFが一致しました、本当に、本当に、重ね重ね、ありがとうございますた!
299 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:03:45 ] >>296 少なくとも変数 ch は int 型でないといけない
300 名前:デフォルトの名無しさん [2008/04/22(火) 17:07:05 ] >>294 どうもありがとうございます!!
301 名前:249 mailto:sage [2008/04/22(火) 17:07:17 ] >>293 Cの規格書JISX3010ちらっと見てみたけど、7.19.1にこう書いてありました。 「EOFは、ファイルの終わり(end-of-file)、すなわちストリームからもうそれ以上の入力 がないことを示すために、幾つかの関数から返される、」
302 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:07:28 ] 良いか、ボケ共、入力は何も 文字データ だけじゃねーんだよ。 標準入力で人間がキーボードから行う入力と言えば文字データが思い浮かぶが プログラムへのデータの入力は、文字だろうと所詮デジタルデータ、 数値データに過ぎんのだよ。それが使用している環境の 文字コード体系で印字可能な文字は視覚的に見えるんであって バイナリーデータのような数値データの塊でも、入力できるんだよ。 そしてEOFも。なんでEOFが入力できないのか、もう説明しなくて良い。 とっくの昔からEOFの入力なんてされてたんだよ、当たり前のように。 でなきゃ、プログラムはどうやってファイルの終わりを認識してたのだね?ん? 怒らないから、そんな秘密の情報があるなら、おいちゃんの耳元でそぉ〜っと言ってごらん?
303 名前:デフォルトの名無しさん [2008/04/22(火) 17:07:35 ] >>298 0点。 規格書読め。
304 名前:デフォルトの名無しさん [2008/04/22(火) 17:09:57 ] >>301 アフォか。 エラーを示すために-1を返す関数が一つ以上あれば、-1はエラーか。 ドザはほんとに駄目だな。
305 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:10:27 ] >>299 はぁ?なんで?1バイトずつ読み込まないでどうすんだ??? お前、もしかして・・・変数の型を誤解してないか?wwww
306 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:12:01 ] >>303 −100点。お前が説明しろ、ボケ低レベルへたれプログラマーwwwwww 東大、京大卒の教授の元で指導を受けた俺と、それ未満の講師に コードの入力だけ教わったお前とは格が違いすぎ。 説明と言う説明がお前は出来てないだろ、目の前にあるものの 来本部部は同じだと言うのにw
307 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:14:16 ] >>305 EOF != 0xFF おk?
308 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:15:36 ] 299 名前:デフォルトの名無しさん 投稿日:2008/04/22(火) 17:03:45 >>296 少なくとも変数 ch は int 型でないといけない ↑このアフォーの思い違いを説明せよ 配点-100点wwww では >>296 のコードを int ch; に変更して実行してみましょう。あららっ!?結果は同じ -1 が検出されましたwwwww だから何について説明しているか分からない低レベルは黙ってろって。 お前らとは使用していた施設のレベルからして違うんだよ! 大学にあった施設は企業レベル、いやそれ以上。だからお前らとは 見てきたものが違い過ぎるんだよwwwww
309 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:18:30 ] ぷぷっ、こいつ、EOFが int 型だと思ってるよwwwwwwwwwwwwwwwwwww -1なんて1bitでも表現できんだよ!char型は1バイト、すなわち標準的な環境では 8bitなので、十分EOFの検出は可能です、ありがとうございましたwwww そもそも、ACSIIコードとShift-JISの仕組みが分かっていれば、下らない突っ込みなんてしねーよ。 全角で2バイト必要な文字は、それに応じた文字コードが割り振られてんだがw お前、Shift-JISで日本語の全角文字をすべて表示するコードを書いてみろや! 結局、そんなものは基本の拡張に過ぎないと気づくからw んで、EOFが入力できない説明をしてくれよ。俺はそれを求めてんだが?
310 名前:デフォルトの名無しさん [2008/04/22(火) 17:18:31 ] kusakabe先生の教えを守って書き込みしたらスレが伸びる伸びる
311 名前:デフォルトの名無しさん [2008/04/22(火) 17:19:35 ] >>309 > ぷぷっ、こいつ、EOFが int 型だと 規格書読めよ。
312 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:21:21 ] >>305 Cには、データベースなんかで見かけるNull値ありの型がないから、 getcharなどはNull値相当をEOFに割り当てて、 Null値ありcharをただのintで代用しているという考え方が近いと思う。
313 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:23:21 ] お前さぁ、負の値が2進数、デジタルデータの世界でどのように表現されているか知らんのぉ? まぁ、これは大学でやった実験では普通に扱いましたよ、論理回路も含めて。 なんで変数の型に、敢えて unsigned があると思ってんの? 8bitで扱える値の幅、パターンの数、負の値がどのように記録されているかも C言語でもコードを書いて調べることが出来るんだがねぇ。 んで、EOFが入力できない説明を求む。それ以外の御託はいらねー
314 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:27:12 ] >>309 -1単体は1ビットでも区別可能だけど、 ここでは、(unsigned) charの値と区別できないといけないから、 charよりビット数の多い(はずの)intなんだろ。
315 名前:デフォルトの名無しさん [2008/04/22(火) 17:28:43 ] >>313 先生の教えに背いて教えてやってもいいんだが、完全にお前の理屈を否定することになるぞ。 どうやらここにはドザしかいないようだから、味方してやってもいいんだが?
316 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:32:37 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6305.txt 困っています。よろしくお願いします。 Windows gcc C です。
317 名前:デフォルトの名無しさん [2008/04/22(火) 17:37:29 ] さて、ドザかまっててもしょうがないから宿題やるか。
318 名前:249 mailto:sage [2008/04/22(火) 17:48:49 ] >>296 >>298 これ実行すると、ファイルの終了に達していなくても、ファイルの途中にたまたま0xFFが現れたら そこでwhileループ抜けるよね。 > ほれ、やっぱりEOF、ファイルの終わりを検出して終了し、 whileループを抜けたのはファイルの終わりを検出したわけではないです。
319 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:50:15 ] 騒いでる奴らはそろそろ専用スレ立てろや
320 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:54:41 ] ビット演算子の意味も分かってなさそうだな。こりゃダメだ・・・ 所詮、文字コードでしかプログラムの意味が分からんのだろ。 高度でもない、当たり前なことを知っている人は、”汎用”電子計算機に対して 制御を行うコードを書いているという、当たり前な頭はあるんだよ。 そんなの大学に通わなくても、それ関連の仕事をしている人は 当たり前に見ている。人間なんて、所詮見た目が良かろうが DNAによって動物細胞の塊が人それぞれ違った形に形成されていると 医療関係に属する人が知っているように。萌え〜なんていっている奴は、 2次元にしろ3次元にしろ、そういう人達から見ると不思議に思えるんだろうね。 だって、所詮動物細胞、0と1の組み合わせのデジタルデータなんだもの、みつを。
321 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:54:52 ] >>296 jpegファイルはいきなり0xFFで始まるんですが、読み込めないということですか?わかりません><
322 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:01:55 ] >>320 最後おちゃらけて見せて、興奮を隠そうとしなくてもいいよ わかるわかる
323 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:10:28 ] >>296 はcharがunsignedの環境なら無限ループだな
324 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:11:11 ] ビット演算なんて、もはや遺伝子組み換えレベルの操作なのさ〜♪
325 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:33:29 ] もうね、鸚鵡返しのように 規格書 とか言うだけで、具体的に該当する 事項を示さないアホは何?w 自分が言いたいこと、思ったことを 相手に理解してもらえないって言っているだけじゃん。お前が言いたいことがあるなら 具体的に示せよ、低レベル講師め。お前んとこの学校はどこだ? 通報しておいてやるよ、EOFが入力できないなんていい加減なことを、 ありもしない規格書を持ち出して事実を捻じ曲げているとw 頼むから大学レベル未満のお前、EOFが入力されないという 話が拗れた根本の説明をしてみろや?どうやってEOFを検出して 終了するコードが実行されたのか、摩訶不思議アドベンチャーで ゴクウも界王拳をスーパーサイヤ人になってからお前にお見舞いするだろうよw
326 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:38:44 ] ttp://www.st.rim.or.jp/~phinloda/cqa/cqa9.html 面白い記事が見つかりましたよ、ほらw お前が勘違いしていたEOFが特殊な文字コードってやつ、 所詮は人間が勝手に 定義 した数値に過ぎないということがはっきりしただろ? 俺はEOFがファイルの終わりを示すとは一言も言っていないんだよw 何度も言っただろ?文字を入力したとしても所詮は 数値データ に過ぎないと。 プログラムが、コンピュータがそれを認識するために 人間が定義した に過ぎないと。 人間が好き勝手にルールを決めてしまうと、世界で共通ではなくなり インターネットの世界でも混乱が起こるんだよ。ウェブページだって 規格が違ってブラウザが国ごとによって違ってたら面倒だろ? 規格書とか言うお前、お前はISOの内容は知っているようだが 標準化の意味は理解していなかったようだな。所詮それも 人間が定義 したに過ぎないということを。
327 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:45:33 ] さてと、int型がなぜ2^32 すなわち 2^8^4 の値として扱われているか? 結局は4バイト分のデータを1つの変数として取得して扱っているからだよ。 誰だよ、EOF != 0xFF なんて話をしたのは?俺はそんなこと一言もいってないよw EOF にはしっかりと -1 と定義されているとは言ったが。なんで8ビットのみで話が進んでるの??? だから俺は、人間が勝手に数値の前にマイナス - という符号を付けて 表現したものではなく、2進数において 負の値をどのように表現しているか について問い正したんだが? 悪いがこれについては 実験で その詳細を知ることが出来たんでね。 コンピュータを構成している基本部分なんて、単純なもんだよw
328 名前:249 mailto:sage [2008/04/22(火) 18:57:07 ] >>326 > 俺は と言われてもお前がどれを書き込んでいて、どれにレスしてるのかわからない。 Ctrl-DやCtrl-Zは単にユーザーが入力の終了を示すだけです。 アプリがgetchar()を発行したとき、ライブラリ側にアプリに渡せる文字がなければEOFを返します。 入力ファイル中に0xFFが含まれていて、それをchar型変数で受ければ ファイルの途中であっても同じくEOFとして判定されます。 この場合、feof()関数でストリームの終了かどうか判定できると思います。 一応念のため、Cの規格書ならここで見れます。 「www.jisc.go.jp/ 」→「JIS検索」で「X3010」を入力
329 名前:デフォルトの名無しさん [2008/04/22(火) 18:59:20 ] だから相手にしちゃダメなんだって。 半年ぐらい前までしょっちゅう暴れてたキチガイなんだから。
330 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 19:05:40 ] だからよぉ、所詮整数型にしろ文字にしろ、人間が都合よくデジタルデータの塊を 数値や文字として扱うために 変数の型を宣言 したプログラムによって 解釈できるように処理させてんだよぉ。どんなファイル、データにろ ビット すなわち 2進数の1桁 レベルに話を持ち込めば、0と1の組み合わせの 塊に過ぎんと何度も言っておろうにw それはともかく、EOFが入力できないという理由を説明してくれ、規格書でw
331 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 19:07:21 ] >>328 > ユーザーが入力の終了を示すだけ それを326に言わせればEOFの入力となるんだろ。それくらい察してやれ。
332 名前:249 mailto:sage [2008/04/22(火) 19:14:18 ] >>329 そうですか、キチガイですか。 そんな気はちらっとしてたんですけどね。 とりあえずいい暇つぶしになったんで、相手してくれてありがとう>キチガイ 彼がこの後何を言ってくるか楽しみにしてますwww
333 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:02:35 ] 多分このスレで一番レベルの高いおれから言わせてもらうと 自演くさい
334 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:54:32 ] >>316 とりあえず動く程度のものでしかないけど課題1 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6306.txt
335 名前:デフォルトの名無しさん [2008/04/22(火) 22:17:54 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6307.c [1] 授業単元: Cプログラミング [2] 問題文: @任意の2ノード間の最短路を求めるアルゴリズムを実行するプログラムを作成せよ。 A任意の2ノード間の最短最大路を求めるアルゴリズムを実行するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限:リンク先のソース(経路選択の部分がない)を使用すること。 また、ソース中のdistance.txtの内容は、 0 1 1 0 3 1 1 2 1 1 3 1 2 4 1 2 5 1 3 4 1 3 7 1 4 5 1 4 7 1 5 6 1 5 8 1 6 8 1 7 8 1 7 9 1 8 9 1 です。よろしくお願いします。
336 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:33:05 ] getcharの戻り値にEOFがあるだけの話だろ もはや何の話を必死にしたいのかさっぱりだな
337 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:54:19 ] 【質問テンプレ】 [1] 授業単元:ネットワークプログラミング [2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6309.txt [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ:gcc [3.3] 言語: C言語 [4] 期限: 4月25日まで [5] その他の制限: 特になし よろしくお願いします。
338 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:03:35 ] >>337 stdoutを別のファイルにするだけじゃね?
339 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:06:50 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク):自分が今使っている開発環境のコンパイラとリンカのバージョンを調べる [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: CPad for Borland C++Compiler(これでいいのかな?) [3.3] 言語: C言語 [4] 期限: 4月29日まで [5] その他の制限:正直大学一年目の後期にさらっとならっただけで、それもだいぶ忘れてます だから質問の内容がちょっと変かもしれませんが、よろしくお願いします
340 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:10:07 ] >>316 続いて課題2 ところでこれって課題4まで終了した後のソースコードを提出しないといけないの? だったら俺が細切れに上げてるのは割と意味が無いな
341 名前:340 mailto:sage [2008/04/22(火) 23:11:07 ] >>316 ミスった kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6310.txt
342 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:32:10 ] >>339 >自分が今使っている開発環境のコンパイラとリンカのバージョンを調べる スレ違い。 # まさかと思うが、調べるプログラムを作れとは言わんだろうな。
343 名前:デフォルトの名無しさん [2008/04/22(火) 23:35:06 ] すいません、264お願いします・・・
344 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:40:14 ] #include <stdio.h> int main (void) { char c, *pc; int i, *pi; double d, *pd; pc = &c; pi = &i; pd = &d; pc++; pi++; pd++; printf("pc=%dbyte\npi=%dbyte\npd=%dbyte", (unsigned int)pc-(unsigned int)&c, (unsigned int)pi-(unsigned int)&i, (unsigned int)pd-(unsigned int)&d) }
345 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:43:14 ] >>264 #include <stdio.h> static int diff(void * lhs, viod * rhs) {return ((char *) lhs) - ((char *) rhs);} int main() { char c, *pc; int i, *pi; double d, *pd; pc = &c; pi = &i; pd = &d; pc++; pi++; pd++; printf("%d, %d, %d\n", diff(pc, & c), diff(pi, & i), diff(pd, & d)); return 0; }
346 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:44:01 ] >>316 課題3 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6311.txt 課題2にミスあり 提出するなら、main関数のreturn 0;の前の行に fclose(fp); を追加してくだしあ
347 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:44:06 ] [1] 授業単元:ネットワークシステム基礎演習 [2] 問題文(含コード&リンク):( ファイルbdata.txtには1から1000000までの異なる数が999999個入っている。つまり1から1000000までの数字のうち1つだけない。その数字を見つけなさい。 プログラムは #include<stdio.h> #define N 1000000 int main(void){ int min,max,mid; int count1,count2; int data,i; FILE *fp で始まり、これ以外の変数は使用してはいけない。 また、以下の方法でプログラムを書くこと。 方法)簡単のため。1から100までの数のうち、1つがない場合を例として方法を説明する。もちろん最後まで実行しないとわからないことだが、説明の都合上、存在しない数は48だとする。 (1)ファイルを先頭から最後まで読み、1〜50の数と51〜100の数の個数を数える。 (2)1〜50の数が49個しかないので、求めている数は1〜50の数のどれかである。 (3)ファイルを先頭から最後まで読み、1〜25の数と26〜50の数の個数を数える。 (4)26〜50が24個しかないので、求めている数は26〜50までの数のどれかである。 中略 (5)ファイルを先頭から最後まで読み、48〜49の数と50〜50の数の個数を数える。 (6)48〜49の数が1個しかないので、求めている数は48〜49までの数のどれかである。 (7)ファイルを先頭から最後まで読み、48〜48の数と49〜49の数の個数を数える。 (8)48〜48までの数が0個なので、求めている数は48である。 ) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年04月23日23:00まで] [5] その他の制限:
348 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:18:51 ] >>347 #include<stdio.h> #define N 1000000 int main(void){ int min,max,mid; int count1,count2; int data,i; FILE *fp; fp=fopen("bdata.txt", "r"); if(fp==NULL) return 1; count1=0; while(fscanf(fp, "%d", &data)==1) count1+=data; fclose(fp); if(N%2) count2=(N+1)/2*N; else count2=N/2*(N+1); printf("%d\n", count2-count1); return 0; }
349 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:28:15 ] >>348 >if(N%2) count2=(N+1)/2*N; >else count2=N/2*(N+1); は場合分けする必要が無いだろ 答えは出るし効率もいいけど指定された解法じゃない
350 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:30:17 ] >>348 ありがとうございます。 本当に助かりました。
351 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:40:45 ] いや、助かってないでしょw 解法が違う以外にも、intが32bitじゃ足りないし。
352 名前:348 mailto:sage [2008/04/23(水) 00:52:43 ] >>347 解法無視してたので訂正版 >>351 >>349 の指摘している場合分けのおかげで正しい答えがでる #include<stdio.h> #define N 1000000 int main(void){ int min,max,mid; int count1,count2; int data,i; FILE *fp; fp=fopen("bdata.txt", "r"); if(fp==NULL) return 1; min=1; max=N; while(min<max){ mid=(min+max)/2; count1=count2=0; fseek(fp, 0L, SEEK_SET); for(i=0;i<N-1;i++){ fscanf(fp, "%d", &data); if(data>=min && data<=max){ if(data<=mid) count1++; else count2++; } } if(count1<mid-min+1) max=mid; else min=mid+1; } fclose(fp); printf("%d\n", max); return 0; }
353 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:53:42 ] 347です。確かに348さんのやつで、それらしき解答が出るのですが、 初心者の私にはソースを読んでも理解できませんでした。 どなたか助けてください。
354 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:57:09 ] 理解できないならあきらめるしか無いと思うが
355 名前:351 mailto:sage [2008/04/23(水) 01:03:00 ] ああなるほど、オーバーフローしても差は正しくなるってことか。 >>353 まず、値の総和を計算している。 1〜Nまで全部揃っているなら、総和はN*(N+1)/2になるはず。 しかし1個だけ値が足りない、総和はその値の分だけ少なくなる。
356 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:23:20 ] 347です。 355さんの説明で348のソースを理解できました。ありがとうございます。 352の改訂版のfseek(fp, 0L, SEEK_SET); のfseek関数を知らないので,ググったらファイルの位置指示子の設定とあったのですが、 この役割をどなたか教えていただけませんか。 また、fseek関数を使わない方法はないのでしょうか。
357 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:24:42 ] >>316 当方の環境はWindowsXP, 処理系はcygwin(gcc 3..4.4) です。 課題 1:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6312.txt 課題 2:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6313.txt 課題 3:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6314.txt 課題 4:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6315.txt >>346 ですでに回答がありますので、お友達にでも贈ってください。
358 名前:264 [2008/04/23(水) 01:31:22 ] ありがとうございます!
359 名前:348 mailto:sage [2008/04/23(水) 01:33:42 ] >>356 #include<stdio.h> #define N 1000000 int main(void){ int min,max,mid; int count1,count2; int data,i; FILE *fp; min=1; max=N; while(min<max){ mid=(min+max)/2; count1=count2=0; fp=fopen("bdata.txt", "r"); if(fp==NULL) return 1; for(i=0;i<N-1;i++){ fscanf(fp, "%d", &data); if(data>=min && data<=max){ if(data<=mid) count1++; else count2++; } } fclose(fp); if(count1<mid-min+1) max=mid; else min=mid+1; } printf("%d\n", max); return 0; }
360 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:55:39 ] >>359 何度もありがとうございます。本当にありがとう。
361 名前:デフォルトの名無しさん [2008/04/23(水) 04:00:39 ] すみません 質問良いですか? class split { public: char a : 1; char b : 2 ; char c : 5;} char x[1000]; split *z; z=&x[10]; z->a; とすればxの値を部分的に読み取れますか?
362 名前:361 [2008/04/23(水) 04:08:45 ] 自己解決しました 符号無しにすれば正常に読み取れるみたいです
363 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 05:47:26 ] 誰か>>361-362 を解説してくれ
364 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 06:42:28 ] >>357 とか、かなり前に散々既出で決まった、ISO準拠の int main(void) あるいは int argc , char*argv[] を使ってない EOFについて噛み付いてきた新入りって何モノ? 初心者、素人臭が漂いすぎ・・・
365 名前:デフォルトの名無しさん [2008/04/23(水) 06:45:23 ] すみません、335お願いします・・・
366 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 06:58:49 ] >>336 EOFがキーボードから入力できるかの話だろ もはや何の話を(ry
367 名前:デフォルトの名無しさん [2008/04/23(水) 07:19:49 ] ドザが二匹いてどっちもドザだからまともな議論にならないだけだな。