1 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 12:30:56 ] あなたが解けない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++の宿題を片付けます 108代目 pc11.2ch.net/test/read.cgi/tech/1211980711/
304 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:01:09 ] さすがにpowに渡すからってループ変数をdoubleにしたキチガイは言うことが違うw
305 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:20:06 ] ループ変数がdoubleでも小数点以下を使わなければ 桁落ち誤差が累積する事はない
306 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:26:52 ] 円の中心に原点をおくと、格子点はi,jを整数として座標(i,j)で表される。(i,j)が円環に含まれる場合に1,含まれない場合に0を返却する関数 is_inrarge(double r, int i, int j) を作成し というところまでを自分でr、i、jを入力する方法でやって #include <stdio.h> #include<math.h> #include<stdlib.h> int main(void) { int r,i,j; printf("r,i,j ="); scanf("%d,%d,%d", &r,&i,&j); printf("%d,%d,%d \n",r,i,j); inrange(); return 0; } int inrange(double r,int i, int j) { double o,p,q; o=r*r; p=(i*i+j*j); q=(r+1)*(r+1); if (q >= p && p>o){ printf("1"); }else{ printf("0"); } } ここまでやって5時間かけてもどうにもうまくいきません。 vista vc05ですけど関係ないような気もします。 誰か教えてください。
307 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:29:11 ] 途中の↓はどうにも行かなくて確認で入れてみたら 代入した直後の数字とは別の数字が出ます。 printf("%d,%d,%d \n",r,i,j); わけがわかりません
308 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:39:07 ] >>307 //inrange() としてもう一度確かめてみそ
309 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:42:14 ] [1] 授業単元: プログラミング技術V [2] 問題文(含コード&リンク): 任意の文字列を配列に読み込み、その中に出てくる特定の文字列を指定した文字列に置き換えるプログラムを作成せよ。 (実行例) 文字列を入力せよ : kadai no teisyutukigen ha mamore 置き換え元を入力せよ : kadai 置き換え後を入力せよ : report 結果 : report no teisyutukigen ha mamore [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cygwin gcc [3.3] 言語: C言語 [4] 期限: 本日午後2時までにお願いします。 [5] その他の制限: 空白ごと読み込む方法はgetchar命令、もしくはfgets命令を用いるとよい。
310 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 05:58:41 ] >>305 pow関数にdouble渡してカウンタにしてたってーのは知らないけど 情報落ちも考慮するとdoubleは異常
311 名前:デフォルトの名無しさん [2008/06/12(木) 06:01:42 ] >>309 入力:111 置き換え元:11 置き換え後:aa 結果:aa1 結果:1aa どっち?
312 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:02:22 ] double d=(double)10000000000000,e=(double)0.0; while( e<d ) e+=(double)1.0; このコードは停止するか?
313 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:06:23 ] >>311 最初に見つかった方をするようにお願いします。 結果:aa1
314 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:45:29 ] >>304 お前が相当な馬鹿だということが分かった・・・っつか、お前の言っていることって 言わなきゃ良いことばかりだよ?かなりあほだな・・・進路を変えろ、基地外
315 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:47:54 ] ttp://www.bohyoh.com/CandCPP/C/Library/pow.html double pow(double x, double y); 知った無知の基地外は、自分基準で相手を罵倒することに 専念するだけだから困る。しっかりと資料を提示するなり 見れば無駄口を叩くこともなかっただろうに。 適切な取り扱いを知らない奴は、こういった業界では 絶対に通用しない。
316 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:54:33 ] [1]授業単元:プログラミング基礎論 [2]ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6878.txt [3]環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:borland c++5.5 [4] 期限:来週の月曜日 [5] その他の制限:関数まで習いました ぜんぜんわからないのでよろしくお願いします
317 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 07:33:40 ] >>306 入力するとき,で区切って入力してないってオチじゃない?
318 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 07:40:04 ] >>316 #include <stdio.h> int my_tolower(int ch) { if('A'<=ch && ch<='Z') ch += ('a' - 'A'); return ch; } int main(void) { char str[256]; int i, len; scanf("%s", str); for(len=0; str[len]; len++); printf("文字列の長さ:%d\n", len); for(i=0; i<len; i++) str[i] = my_tolower(str[i]); printf("大文字を小文字に変換した文字列:%s\n", str); for(i=0; i<len / 2; i++) if(str[i]!=str[len-1-i]) break; if(i==len/2) printf("回文です\n"); else printf("回文ではありません\n"); return 0; }
319 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 08:01:11 ] >>309 文字列を複製する関数:strcpy(str1,str2,n) 文字列の長さを返すかんすう:strlen(str1) 文字列をn文字比較する関数:strncmp(str1,str2,n) 文字列str2をstr1のあとの連結する関数:strcat(str1,str2) を使うなど、このレベルでプログラムを組んでいただけると助かります。
320 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 08:32:23 ] [1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク): PNMという画像フォーマットを用いるとprint文で文字コードを出力することで 画像が作成できる。 (説明例:a-gamyl.hp.infoseek.co.jp/Clang/pnm_read.html ) これを用いて任意の画像を作成する。2次元の配列変数x,y座標を持つ平面に見立てて 画像を構成することが可能である。例えば画像の大きさ256x256の大きさとして 中央の(128,128)の場所に赤い点をひとつだけ打つには以下のようなプログラムになる。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6879.txt 以下のように直接出力してみよう。 $ cc en5-3.c $ ./a.out > test.ppm 出来上がったtest.ppmというファイルをファイルブラウザで開いてみると 中央に赤い点が打たれているのが分かる。どのようなデータが書き込まれているかは プログラムの最後のfor文を見ていただきたい。 (課題) ・sin派を描いた画像を作成するプログラムに変更せよ。 ・円を描いた画像を作成するプログラムに変更せよ。 ・うずまきを描いた画像を作成するプログラムに変更せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限:無理を承知で後日6/12 午後2時までにお願いします。
321 名前:デフォルトの名無しさん [2008/06/12(木) 09:03:24 ] >>206 の老婆心 つまり、処理系によって、ちゃんと解釈してくれないよ という忠告は 小さな親切余計なお世話 というのが>>207 で女々しい口喧嘩を繰り返すと。 要するにだ、207がちゃんとキャストをするなりしてコードを書いて 206がそれをハンディコンパイルすればそれで済む話 (できれば207がコードを実行すれば尚良い)
322 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:08:45 ] >処理系によって、ちゃんと解釈してくれないよ Cの規格読み直せw
323 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:20:41 ] ×小さな親切余計なお世話 ○小さな親切大きなお世話
324 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:23:04 ] このスレレベルの「案件」では自分のコンパイラで動作確認さえ取ってさえいれば いいんじゃないのか?(自分のコンパイラで動作確認もとってないのにソース上げるのは論外だけど) どんな処理系でも動作するポータビリティなんて要求されてないし、 仮に要求してきたにせよ宿題丸投げの要求なんて無視していい というか、そんなウィルスコードここに貼るな。
325 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:24:27 ] >>324 だからといってなコードは削ればいいという思想もウィルス
326 名前:デフォルトの名無しさん [2008/06/12(木) 10:29:39 ] >>318 様 ありがとうございました!
327 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:36:54 ] このスレとしては ×自分のコンパイラ ○テンプレ[3]で指定されている環境 まぁ適当に書いてもだいたい通るから大丈夫だけど
328 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:46:12 ] 205は適当でも処理系依存でもなくきちんと規格に準拠したコードなのになw
329 名前:デフォルトの名無しさん [2008/06/12(木) 10:54:15 ] ソースコード読むのは人間だろ 解析するのがコンパイラ
330 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:25:47 ] >>306 なんだ、まだ5時間しか考えてないのか、というのはヤボですかね。
331 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:21:05 ] >>328 >>205 char *buf; buf = malloc(size); int main()
332 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:23:17 ] あーあ・・
333 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:26:55 ] ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00042.html ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00042.html とりわけ「準拠」というなら、何に?ANSI、ISO準拠なら int mainについても蛇足とは言わない指摘がされるぞ。 だから無知は黙ってろって言われるんだよw 何に対して、何を元に指摘されているかわかってないんだろ。 資料を読んでから意見しろ。ルールブックも読まない奴が 勝手に自分ルールでそれは要らないよ、従っている人に 蛇足だよ、無駄だよなんて言っても通じない。
334 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:45:23 ] C#は取り扱っていませんか?
335 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:47:03 ] >>334 スレはあるようだけど過疎ってるなw C#,C#の宿題片付けます。 pc11.2ch.net/test/read.cgi/tech/1197620454/
336 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:01:03 ] >>335 誘導ありがとうございます。 31に書き込んだのでどなたかよろしくお願いします
337 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:32:57 ] [1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク):() kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6881.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 6月16日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 特にありません。よろしくお願いします。
338 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:47:02 ] >>337 int main(void){ QUEUE_TYPE x; initQueue(); while(1) { printf("整数を入力して下さい:\n"); scanf("%d",&x); if (x<0) break; if(x % 2) { printf("dequeue() %d : ",dequeue()); printQueue(); } else { enqueue(x); printf("enqueue(%d) : ",x); printQueue(); } } while(!chkEmpty()){ printf("dequeue() %d : ",dequeue()); printQueue(); } return 0; }
339 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:53:10 ] >>338 すばやい回答ありがとうございました!
340 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:56:53 ] [1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク):() kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6883.txt [3] 環境 [3.1] OS: (Windows/Linux/等々) linux [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc [3.3] 言語: (C/C++/どちらでも可 のいずれか) C [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 6月16日まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) >>337 の続きの課題なのですが・・ よろしくお願いします
341 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:16:43 ] while(1) { printf("整数を入力して下さい:\n"); scanf("%d",&x); if (x<0) break; if(x % 2) { dequeue(&Q); printQueue(&Q); } else { enqueue(x, &Q); printf("enqueue(%d) : ", x); printQueue(&Q); } }
342 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:23:16 ] >>341 ありがとうございます。 しかし、 負の数字-100を入力した場合に、実行例に在るとおりに dequeue します: キューの中 [ 20 30 ] dequeue します: キューの中 [ 30 ] dequeue します: キューの中 [ ] 空状態のためデキューできません。 と表示されないのと、奇数の数字35等を入力した場合にdequeue しますという文字が表示されません。 それとやはり、デキューされた値を表示するのは難しいのでしょうか?
343 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:37:10 ] if(x % 2) { dequeue(&Q); printQueue(&Q); } を if(x % 2) { dequeue(&Q); printf("dequeue します: "); printQueue(&Q); } に q=Q.front;以下はそのまま使ってる?
344 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:47:19 ] >>343 すいません、q=Q.front;以下も一緒に消してしまっていました。 負の数の時のも無事いけました! デキューされた値を表示するのは無理でしょうか?
345 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:54:28 ] dequeue()関数をいじっていいなら337のみたいに返り値でdequeueしたのを戻せばいいんだけど。
346 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:55:56 ] void dequeueを↓に変更 int dequeue(struct queue *Q){ /* デキューする関数 dequeue の定義 */ struct cell *q; /* キューの先頭(デキューされるセル)を指す*q の宣言 */ int x; if(Q->front == NULL) { /* Q->front がNULL(キューが空状態)であれば */ printf("空状態のためデキューできません。\n"); /* 左記のメッセージを画面に表示して */ exit(1); /* プログラムを終了 */ } else { /* Q->front がNULL(キューが空状態)でなければ */ q=Q->front; /* ポインタ変数*q はキューの先頭を指す */ x=q->element; Q->front = (Q->front)->next; /* キューの先頭(Q->front)を置き換える */ free(q); /* デキューされたセルのメモリを解放 */ } if(Q->front == NULL){ /* Q->front がNULL(キューが空状態)であれば */ Q->rear = NULL; /* キューの初期化 */ } return x; } あとmain()内の dequeue(&Q); printf("dequeue します: "); を printf("dequeue() %d : ",dequeue(&Q)); にすればいけると思う
347 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:56:53 ] あれ、dequeueを変えない方が良かったか?
348 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:57:33 ] >>250-251 >>255 ありがとうございます。助かりました
349 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:59:56 ] >>347 いいんじゃね? main()を変えてって指定があるのは337の問題の方だけだし
350 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:09:16 ] >>346 ありがとうございました!見事に動作しました
351 名前:340 mailto:sage [2008/06/12(木) 18:17:57 ] 何度もすいません、>>337 と同じ内容を実施するプログラムと書いてあるので、 >偶数(0 を含む)である場合は、その整数をエンキューする。キューがフル状態である場合には、 >その整数をエンキューせず、『enqueue : フル状態のためエンキューできません。』と表示した後、プログラムを終了する。 の部分も付け加えなければいけないと思うのですが、 この部分はどうすればよいのでしょうか? 恐らくmain以外もいじくってよいと思います。。 よろしくお願いします
352 名前:309 mailto:sage [2008/06/12(木) 18:24:29 ] まだ、待ってます。 期限は過ぎてますが、遅れてでもいいので提出したいです。 >>309 >>319
353 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:28:17 ] >>351 >>340 の場合は、要素が入る度にmallocでqueueのサイズを増やしてるから、 キューがフルである状態というのがそもそもない。 だからその部分は必要ないはず。 まあ、もしもそれを分かっていて、mallocするメモリが存在しなかった場合の話をしているなら、 enqueue内の p=(struct cell *)malloc(sizeof(struct cell)); /* エンキューするセルを指すポインタ変数*p の獲得 */ を if((p=(struct cell *)malloc(sizeof(struct cell)))==NULL){ printf("enqueue : フル状態のためエンキューできません。\n"); exit(1); } とすればおk
354 名前:340 mailto:sage [2008/06/12(木) 18:30:09 ] >>353 なるほど、そうなのですか!無知な発言申し訳ないです。 本当に助かりました
355 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:37:58 ] [1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6886.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C [4] 期限:明日中 [5] その他の制限: 1kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6884.c 2-1kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6885.c 自分で作れた所までです。 2-2はよくわかりませんでした お願いします [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語: C [4] 期限:明日中 [5] その他の制限: お願いします
356 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:18:12 ] [1] 授業単元:C言語 [2] 問題文http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6888.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限: 6月15日日曜日(早いと助かります) [5] その他の制限:できるだけ簡単に お願いします
357 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:19:55 ] [1] 授業単元:C言語 [2] 問題文kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6888.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語: C [4] 期限: 6月15日日曜日(早いと助かります) [5] その他の制限:できるだけ簡単に お願いします
358 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:16:39 ] >>278 をおねがいします
359 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:18:43 ] >>352 どれがわかんないの? int main(void) { //文字列入力 //置き換えられる文字入力 //その文字列が最初に入力した文章ないにあるかチェック //無いときの処理 //置き換える文字列入力 //置き換え前文字列表示 //置き換え処理 //置き換え後文字列表示 return(0); }
360 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:21:21 ] [1] 授業単元:C++プログラミング [2] 3つの整数を入力し、入力値を昇順に入れ替える処理を作成する。 ソート処理は関数を使って作成し、処理結果は関数の外で行う。 ソート関数は引数がポインタ、参照の2種類の関数をオーバーロードで作成する 出力イメージ: "整数を3つ入力しなさい" "入力した値は15,1,12" "昇順に並び替えると1,12,15" [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C++ [4] 期限:6月14日 [5] その他の制限:どうぞ宜しくお願いします
361 名前:309 mailto:sage [2008/06/13(金) 01:22:57 ] >>359 ・指定した文字列が含まれているか判定 ・無いときの処理 ・置き換え方 特に置き換える際は、どうやって文字を置き換えているのかさっぱり分からないです。 自分で分からないものを煮詰めても、まったくす進まないので、丸投げで全部作っていただきたく思います。
362 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:26:13 ] >>309 #include <stdio.h> #include <string.h> #define BUFF_SIZE 1024 void ex(char *dest, char *src,char *a,char *b){ while(*src!='\0'){ if(strncmp(src,a,strlen(a))==0){ strncpy(dest,b,strlen(b)); src+=strlen(a); dest+=strlen(b); } else *dest++=*src++; } *dest='\0'; } int main( void ) { char buf[BUFF_SIZE],src[BUFF_SIZE],dest[BUFF_SIZE],a[BUFF_SIZE],b[BUFF_SIZE]; printf("文字列を入力せよ : "); fgets(buf,BUFF_SIZE,stdin); sscanf(buf,"%[^\n]",src); printf("置き換え元を入力せよ : "); fgets(buf,BUFF_SIZE,stdin); sscanf(buf,"%[^\n]",a); printf("置き換え後を入力せよ : "); fgets(buf,BUFF_SIZE,stdin); sscanf(buf,"%[^\n]",b); ex(dest,src,a,b); printf("結果 : %s\n",dest); return 0; }
363 名前:362 mailto:sage [2008/06/13(金) 01:30:54 ] fgetsに引っ付いてくる改行文字除去するのにもっとスマートなやり方があるかもしれんが 優秀な方がつっこんでくれるに期待して 一応>>311 の通りに置きかえ
364 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:36:46 ] \nの置き換えなら if((p=strchar(buf, '\n'))!=NULL) *p = '\0'; ってやるのが一般的か?
365 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:37:45 ] strcharじゃなくてstrchrだな
366 名前:デフォルトの名無しさん [2008/06/13(金) 02:52:16 ] [1] 授業単元:C言語 [2] コマンドラインから数字の文字列を入力して、 unsigned intの範囲外の値が入力された場合は エラー文を返す。それ以外は入力値を標準出力する。 例) 入力 → 出力 例1) "4294967295" → 4294967295 例2) "4294967296" → 入力値が範囲外です。 [3] 環境 [3.1] OS:Ubuntu [3.2] コンパイラ名とバージョン:gcc4 [3.3] 言語:C [4] 期限:6月15日 [5] その他の制限:特にありません。isdigit()は使うと思います。 よろしくお願いいたします。
367 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:05:53 ] [1] 授業単元: プログラミング実験 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 6889 [3] 環境 [3.1] OS windows [3.2] コンパイラ名とバージョン: Visual studio2005 [3.3] 言語: C [4] 期限 本日13時まで [5] その他の制限:特になし よろしくお願いします
368 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:08:52 ] >>358 >>280 をスルーしたからスルーされてるのかなー?
369 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:10:02 ] sum1 += (the[i] - mea1[i]) * (the[i] - mea1[i]); sum2 += (the[i] - mea2[i]) * (the[i] - mea2[i]);
370 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:11:20 ] [1] 授業単元: プログラミング実験 [2] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 6889 [3] 環境 [3.1] OS windows [3.2] コンパイラ名とバージョン: Visual studio2005 [3.3] 言語: C [4] 期限 本日13時まで [5] その他の制限:特になし よろしくお願いします
371 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:12:30 ] >>366 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { unsigned int u = ~0; double d; if(argc!=2) return 0; d = atof(argv[1]); if(d - u > 0) printf("入力値が範囲外です。\n"); else printf("%u", (unsigned int)d); return 0; }
372 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:12:32 ] 2重投稿すみませんorz
373 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:13:47 ] >>361 > 文字列をn文字比較する関数:strncmp(str1,str2,n) を使ってくれといっているのに > ・指定した文字列が含まれているか判定 が分からないとは。 自分が分からないものを他人に作ってもらって分かったふりして 提出する程度の人だからしょうがないけど。
374 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:22:47 ] >>369 解決しました ありがとうございました
375 名前:366 mailto:sage [2008/06/13(金) 03:29:05 ] >>371 早速ありがとうございます。 ただ以下の箇所でSIGSEGVが発生してしまいます。 d = atof(argv[1]);
376 名前:366 mailto:sage [2008/06/13(金) 03:32:44 ] char *argvとしていました。申し訳ありません。
377 名前:366 mailto:sage [2008/06/13(金) 03:38:31 ] >>371 0未満の値を入力すると大きな値が出力されてしまいます。 例) -1 → 4294967295
378 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 03:49:43 ] >>377 符号無しが範囲だから、0未満は範囲外として良いん?
379 名前:366 mailto:sage [2008/06/13(金) 03:56:17 ] >>378 0〜4294967295以外はエラーという事でお願いします。 こんな感じでしょうか? #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { unsigned int u = ~0; double d; if(argc!=2) return 0; d = atof(argv[1]); if(d - u > 0) printf("入力値が範囲外です。\n"); else if(d < 0) printf("入力値が範囲外です。\n"); else printf("%u", (unsigned int)d); return 0; }
380 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:00:55 ] if(d - u > 0 || d < 0) とすると一つにまとめられるよ
381 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:01:39 ] あと小数点を入れられた時はどうすんの?その辺りも教えて
382 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:09:29 ] っつか、int型って時点で小数点以下は無視かと。 範囲って言うと・・・どうなん?>質問者 まぁ、切り落としちゃえば良い話だろうけど
383 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:14:20 ] >>381 >>382 ここでは小数を想定していないので、 「不正な形式です。」と表示させたいです。 文字列が0〜9の数字で構成されているかチェックする必要が ありそうです。
384 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:17:03 ] エラーの種類は最初に確定しとかないと後出しで条件つけるなって怒られるよ
385 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:34:29 ] ほっほっほ、麻呂がクソースを書くでおじゃるから、待ってたもう
386 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:36:41 ] 入力された文字列が正しい範囲のC言語の意味での符号無し整数を 表しているかどうかは、次の方法を取るべきであろう。 まず、文字に不正な文字が含まれていないか検査する。 これは文字列を先頭からスキャンし、不正な('0'~'9'以外の)文字が 含まれているか否かをチェックし、検出された場合は、エラー出力 して終了する。 4294967295は10桁なので、スキャンが終わった段階で、長さ ??以上あった場合はエラーとしたいが、それは間違いである。 先頭に?が何個継続しているかで、文字列の長さが100あっても 正しく範囲にあるかも知れない。 最初に?ではない文字が出た位置を記憶(これを実質開始位置とする)し、 文字終端の位置と比較して、差を取り、??桁より大きい場合はこの時点 でエラー出力して終了して良い。 以降文字列の開始点が上記実質開始位置であるとして考える。 文字列の長さが?桁未満の場合は、正常終了できる。 ??桁の時が問題であり、先頭の文字が?以下の時は正常数量 ?以上の時はエラー終了とする。 ?桁目を見て、?以下の場合は正常終了、?以上の時はエラー終了する。 ?桁目を見て、?以下の場合は正常終了、?以上の時はエラー終了する。 以降同様の処理を1桁目まで書く。
387 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:41:08 ] >>366 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6890.c 麻呂のクソースを喰らうでおま〜
388 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:43:11 ] しまった、flgの設定が不適切だったでおじゃる、ちと直してくるでおまる
389 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:47:12 ] >>366 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6891.c 今度こそ、喰らうでおじゃる
390 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 04:50:34 ] >>389 間違ってる
391 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:18:31 ] >>366 strtoulを使い、エラーチェックすれば簡単。 if (先頭が数字でない || *endがNULでない || errnoがERANGE && 結果がULONG_MAX) 不正な形式です。 longがunsigned intの大きさが異なるなら、これにさらにチェックを加えれば良い。 ライブラリ関数を使わないのであれば、 unsigned int r, s; int i; for (r = 0, i = 0; s = r * 10 + argv[1][i] - '0'; i++, r = s) if (r > s || argv[1][i]が数字でない) 不正な形式です。 かな。こちらは自信なし。
392 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:20:14 ] 不等号の向きが逆だお。
393 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:37:32 ] >>390 アッーーー!って、見つけちゃったあなた、罰ゲームとして修正しておまっ
394 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:40:44 ] どこが間違ってるか分からないなら素直に教えてくださいって言えよ。
395 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 05:59:48 ] >>394 またお前か・・・態度でバレバレ。桁が同じだったときの 各桁の大小の評価のところだろ。面倒だから後はあんたがやっとけw
396 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:05:37 ] 教えてくださいって言えよ。 教えてくださいって 教えてくださいって 言えよ。 言えよ。 これはハマるぜ、この程度のことでここまで偉そうに出来るやつって 日ごろ相当つまらないことで恩着せがましい態度で嫌われてんぞw
397 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:09:10 ] どこが間違っているか分かっているなら素直に答えてやるよっておっしゃってぇ〜
398 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:24:19 ] ミスったら自分で修正しないか?
399 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:24:25 ] アルェー、結果がおかしかったから間違っているとだけ言ったけど 本当はコードのどこが間違っているか分かってなかったのかYO!
400 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:25:04 ] 1時間かけてようやく分かった癖にw
401 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:25:25 ] >>398 > どこが間違ってるか分からないなら素直に教えてくださいって言えよ。 って指摘したら指摘した奴が率先して口先だけじゃないってことを 証明するためにも、修正しないか?ウホッ?
402 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:30:05 ] ミス指摘されて逆ギレってみっともなさすぎるな
403 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 06:59:32 ] >>400 > 1時間かけてようやく分かった癖にw そもそも、ソースを書いた本人じゃないし、俺はw 指摘した奴が詳細を把握してないのに、何言ってんだお前?w どうせ数日前に現れた蛇足野郎だろ?w あれを蛇足なんて言う程度の低さだから、どうせ口先だけだろ。
404 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:07:05 ] 一体誰と戦ってるんだw