1 名前:デフォルトの名無しさん [2007/09/21(金) 08:46:37 BE:340816166-2BP(12)] あなたが解けない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++の宿題を片付けます 95代目 pc11.2ch.net/test/read.cgi/tech/1187944110/
2 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 09:06:17 ] >>1 乙
3 名前: ◆YpQ/fINFLk [2007/09/21(金) 17:43:40 ] [1] 授業単元: 応用演習3 [2] 問題文(含コード&リンク): エラトステネスの篩の公式を用い、自然数nまでの素数を全て表示するさいに、1〜nまでに求めた素数を格納しておき、それを用いて素数か否かを判別せよ。 (20を素数か判別するときは、それまでに格納した2,3,5,7,11,13,17,19の√20以下の2,3で割る) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 9月25日まで [5] その他の制限:素数に対する、習っていない特殊なincludeや関数は仕様しない 口頭で出された課題なので、問題文等分かりにくかったらすいません。
4 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 18:10:51 ] なんか読点無くてわかりにくいんだけど、要するに @エラトステネスのふるいを使って、nまでのすべての素数を表示する Anが素数かどうか判定する(ただしその際、@で求めた素数リストを利用する) ということか??
5 名前: ◆YpQ/fINFLk [2007/09/21(金) 19:15:36 ] すいません、やっぱり分かり辛いですよね……。 @の表示するときの段階にもAを行うみたいな感じです。 素数リストを作る。 そのさい、次の数を判定するのに今まで求めた素数を使用する。 仮にnが100のときは 10の時点の判別には、今まで求めた(格納した) 2〜√10までの素数を用い、 100の時は、2〜√100までの素数を用いるということです。 まだ少し分かり辛いですが、よろしくお願いします。
6 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 19:41:39 ] >[5] その他の制限:素数に対する、習っていない特殊なincludeや関数は仕様しない 何を習っていて何を習っていないのかがわからん
7 名前: ◆YpQ/fINFLk [2007/09/21(金) 20:10:43 ] たびたび、すいません。 includeに関しては、 #include <stdio.h> #include <math.h> 使用するものは、この二つのみだと思います。 授業範囲は、配列程度までなのでデータを配列に格納しつつfor文やIf文で使って作れという課題だと思います。
8 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 20:19:04 ] エラトステネスのふるいって分かってる? >>5 の例だと、n = 100 は 2 が素数だと分かった瞬間に ふるい落とされるから、>>5 みたいな動作はしないよ? そういう素数を逐次格納して試し割るアルゴリズムは ふるい型のアルゴリズムとは呼ばない。
9 名前: ◆YpQ/fINFLk [2007/09/21(金) 20:41:03 ] >>8 勉強不足、申し訳ありませんorz 素数関係もプログラムも初心者なもので、1〜√nがどうとか聞いてるうちに、勘違いしていたようです。 ・「素数を逐次格納して試し割るアルゴリズム」 これが課題で、間違いないと思います。 分かりやすい説明ありがとうございます。
10 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 20:48:52 ] >>9 #define n 100 int main() { int primes[n+1], pnum = 0; int i, x; for (x = 2; x <= n; ++x) { for (i = 0; i < pnum; ++i) { if (x % primes[i] == 0) break; } if (i == pnum) primes[pnum++] = x; } for (i = 0; i < pnum; ++i) { printf("%d\n", primes[i]); } }
11 名前: ◆YpQ/fINFLk [2007/09/21(金) 21:15:59 ] >>10 ありがとうございました。 自宅にはC++がないので、明日にでも学校で試してみます。
12 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 21:47:02 ] 自宅でwebにアクセスできる環境があるならついでにC++ソースをコンパイルできるように環境を整えておけ 携帯しか持っていないってことなら仕方ないが
13 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 21:49:55 ] てかC++というよりCだよな
14 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:01:00 ] 「C++がない」ってのはVC++のことを言っているんだと思うよ、たぶん。
15 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 00:55:08 ] >>9 #include <stdio.h> #define N 100 int main(void) { int prime[N], i, j, cnt = 0; prime[cnt++] = 2; for(i=3; i<=N; i++) { int flag = 0; for(j=0; prime[j]*prime[j]<=i; j++) { if(i%prime[j]==0) { flag = 1; break; } } if(flag==0) prime[cnt++] = i; } for(i=0; i<cnt; i++) printf("%d ", prime[i]); return 0; }
16 名前:デフォルトの名無しさん [2007/09/22(土) 03:44:00 ] 【質問テンプレ】 [1] 授業単元: プログラミング(2) [2] 問題文(含コード&リンク): 「電卓」をC言語で作成せよ。 ただし、1語のレジスタ、1語のメモリを持つように作成し、 以下の条件を満たすようにする。 (1) n+m=,n-m=,n*m=,n/m=と入力することで四則演算ができる。 (2) M+,M-と入力することで演算結果をメモリに加減算する。 (3) MRと入力することでメモリの内容をレジスタに読み出す。 (4) RCの入力でレジスタのクリア、MCの入力でメモリのクリアをする。 (5) メモリ上の値との計算は MR+n=,MR*m=といったように入力することで可能にする。 (6) end: が入力されるまでプログラムは終了せず、 再度演算ができるように入力待ち状態にする。 (7) 連続した計算は左順に計算する仕様でよい。n-m/a=は(n-m)/aという計算順でよい。 (8) 数字、計算符号および(1)〜(7)までに設定した命令文字(end:など)以外が入力された場合、 「エラー」と出力し、再度演算が出来るようにエラー処理を入れる。 以上 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: ([07年9月23日まで] ) [5] その他の制限:とくに制限はありません。 掛け、割りの計算順序を考えなくていいから簡単だと先生は言っていましたが、 その前にレジスタとメモリの概念が??です。 とにかく「一時的に値を保持する場所を作る」がポイントと聞きました。 みなさんこの問題についてどうぞよろしくお願いします。
17 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 04:11:07 ] [1] 授業単元: [2] 問題文(含コード&リンク): ICU4Cを用いて、和暦変換する関数を作成せよ。 (例) 2007,9,1 → 平成19年9月1日 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: C++ [4] 期限:[無期限] [5] その他の制限: ないです。
18 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 07:10:29 ] エラー デバッグ ブラウザ ツール www.mozilla-japan.org/ シンプル プログミング ツール proforceone.web.fc2.com/ 素因数分解サンプルプログラム Calculation processing にコピーして[RUN] A=2*3*5*11*13*17*19; x=A;write(" "+x+" ⇒"); for(i=2;x>=i;i++){if(0==x%i){k=0; for(j=2;(i>=j)&&(1>=k);j++){ if(0==i%j){k++;} } if(1==k){write(" "+i);} }}
19 名前:デフォルトの名無しさん mailto:age [2007/09/22(土) 08:51:27 ] // エラー デバッグ ブラウザ ツール // www.mozilla-japan.org/ // シンプル プログミング ツール // proforceone.web.fc2.com/ // 素因数分解サンプルプログラム // Calculation processing にコピーして[RUN] MAX=1000;br(); for(x=2;MAX>=x;x++){write(" "+x+" ⇒"); for(i=2;x>=i;i++){if(0==x%i){k=0; for(j=2;(i>=j)&&(1>=k);j++){ if(0==i%j){k++;} } if(1==k){write(" "+i);} }} br(); } br();
20 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 11:08:18 ] 1] 授業単元:プログラミング技術 [2] 問題文(含コード&リンク):四則(加減乗除)演算を関数としてもっているプログラム。 実数と整数の両方に対応し、式と結果を表示する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語:C言語 [4] 期限:2007/09/27(木) [5] その他の制限:関数,scanfを使います。 よろしくお願いします。
21 名前:デフォルトの名無しさん [2007/09/22(土) 13:45:45 ] [1] 授業単元:C [2] 問題文(含コード&リンク): 3つ読み込み全て等しいか2つ等しいか全て異なるかを表示せよ。 [3] 環境 [3.1] OS: Win Bcc32 C [4] 期限:[無期限] [5] その他の制限: ないです。
22 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:47:09 ] 何を3つ読み込むんだよ
23 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:49:29 ] 本
24 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:51:07 ] >>22 数字です
25 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:59:40 ] 読み込み方は?
26 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 14:00:04 ] #include <stdio.h> int main(void) { int a, b, c; char *p[] = {"全て異なる", "2つ等しい", "", "全て等しい"}; scanf("%d%d%d", &a, &b, &c); printf("%s", p[(a==b) + (b==c) + (c==a)]); return 0; }
27 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 14:02:16 ] なんじゃそりゃ
28 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 14:05:59 ] #include <stdio.h> int main(void) { int no1,no2,no3; printf("A:"); scanf("%d",&no1); printf("B:"); scanf("%d",&no2); printf("C:"); scanf("%d",&no3); if (no1==no2 && no2==no3) printf("三つは同じです。"); else if (no1==no2 || no2==no3 || no1==no3) printf("二つは同じです。"); else printf("三つとも違います。"); return (0); }
29 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 15:26:13 ] 1] 授業単元: データ構造 [2] 問題文: 階上n!(nは0以上の整数)は、以下のように再帰的に定義されている。 n!=n*(n-1) , 0!=1 この式を参考に、再起呼び出し用いて0以上の整数nを受け取りn!を返す 関数int Factorial(int n)を作り、n!を求めるプログラムを作成せよ。 また、再帰の動作がわかる表示を行い 表示を用いて再帰関数の呼び出される順序を説明せよ。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 2007年9月24日 [5] その他の制限:特にないです 再帰の動作を表示させないものは書けるのですが どうしても表示を用いて 再帰関数の呼び出される順序がうまくいきません。 どうがよろしくお願いします。
30 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 15:54:45 ] >>29 > 再帰の動作を表示させないものは書けるのですが 見せて
31 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 16:26:00 ] >>29 こんな感じか? #include <stdio.h> int indent; int f( int in ) { int i, ret; indent++; for( i = 0; i < indent; i++ ) printf( " " ); printf( "f( %d )\n", in ); if( in == 0 ) ret = 1; else ret = in * f( in - 1 ); for( i = 0; i < indent; i++ ) printf( " " ); printf( "return %d\n", ret ); indent--; return ret; } int main( void ) { int in = 9; indent = 0; printf( "%d! = %d\n", in, f( in ) ); return 0; }
32 名前:デフォルトの名無しさん [2007/09/22(土) 16:58:41 ] [1] 授業単元: C [2] 問題文: 2つの整数を読み込んで、それらの値の差が10以下か11以上かを表示プログラムを作れ。ただし、論理OR演算子を使うこと。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: 2007年9月24日 [5] その他の制限:特にないです
33 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:00:29 ] >>32 に追加。 10以下の場合「差は10以下」と表示し、11以上なら「差は11以上」と表示する。
34 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:04:51 ] 純水に差?それとも差の絶対値?
35 名前:32 mailto:sage [2007/09/22(土) 17:05:05 ] #include <stdio.h> int main(void) { int no1,no2,sa; printf("A:"); scanf("%d",&no1); printf("B:"); scanf("%d",&no2); if (no1>no2) sa=no1-no2; else sa=no2-no1; if (sa<=10) printf("それらの差は10以下です。"); else printf("それらの差は11以上です。"); return (0); } ここまでできたんですが、 >ただし、論理OR演算子を使うこと。 の論理OR演算子||をどこで使うのかが分かりません。 お願いします。
36 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:05:52 ] >>34 教科書には、単に「差」と出ています。
37 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:10:14 ] こういうこと? if(no1-no2<=10 || no2-no1<=10)
38 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:11:29 ] #include <stdio.h> int main(void) { int no1,no2,sa; printf("A:"); scanf("%d",&no1); printf("B:"); scanf("%d",&no2); sa=no1-no2; if (sa > 10 || sa < -10) printf("それらの差は11以上です。"); else printf("それらの差は10以下です。"); return (0); }
39 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:12:07 ] >if (no1>no2) これ要らんだろ。 普通に前者から後者を引けば良い。
40 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:12:40 ] >>37 面白すぎ
41 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:14:14 ] >>37 はダメだな オレだけど
42 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:14:18 ] >>37 なにこれ?
43 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:14:40 ] >>37 ?
44 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:15:20 ] // こういうことだと思われ sa = no1 - no2; if( sa < -10 || 10 < sa ) puts("11以上"); else puts("10以下");
45 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:16:55 ] 暇人多くてワロタ
46 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:17:58 ] >>38 >sa < -10 これどういう意味?
47 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:19:03 ] -10よりsaが小さい場合1
48 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:19:54 ] sa <= -10 じゃないの?
49 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:21:02 ] >>48 中学生からやり直せ
50 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:21:53 ] あれ、マイナス習うのって中学生だっけ? 算数では引き算は必ずプラスの値なんだっけ?
51 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:23:48 ] if (sa<=10 || sa<=-10) printf("それらの差は%dで10以下です。",sa); else printf("それらの差は%dで11以上です。",sa);
52 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:24:47 ] >>51 sa>=-10
53 名前:デフォルトの名無しさん [2007/09/22(土) 17:25:42 ] >>48 -10 より saが小さい よりと以上の違いが分からないなら数学止めた方が良いよ
54 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:25:48 ] 質問者と回答者のレベルがほとんど同じだな
55 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:25:52 ] >>51-52 バカすぎ
56 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:27:32 ] >>52 &&
57 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:28:08 ] >>54 一応まともに答えてる38と44は除外してやれよw
58 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:28:33 ] アホ回答してるの>>37 だろ。
59 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:32:43 ] >>35 if (sa<=10 || 0) でおk
60 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:33:25 ] printf("それらの差は%dで10以下です。",sa); else printf("それらの差は%dで11以上です。",sa); の順でやって。
61 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:35:24 ] -1,-2,-,3-,4 -1と-4は、-1のほうが大きい。
62 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:37:02 ] >>60 ||を使えってのにその順番はないだろ
63 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:41:29 ] A&B = not(not A | not B)
64 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:43:56 ] >>60 差の値を表示しろなんて、元の問題文にも>>35 にもないわけだが。
65 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:50:56 ] >>60 int sa = no1 - no2; if(sa==-10||sa==-9||sa==-8||sa==-7||sa==-6||sa==-5||sa==-4||sa==-3||sa==-2||sa==-1||sa==0 ||sa==1||sa==2||sa==3||sa==4||sa==5||sa==6||sa==7||sa==8||sa==9||sa==10)
66 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:54:49 ] if((unsigned int)(sa+10) <= 20)
67 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 17:56:05 ] どうでもいいけど、「それらの値の差」って言ったら一方の差の絶対値と解釈するよな
68 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:03:08 ] 絶対値って何?
69 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:03:33 ] 0からどれだけ離れているか。
70 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:06:21 ] >>68 せめて中学卒業してからおいで
71 名前:29 mailto:sage [2007/09/22(土) 18:08:29 ] 29です。 >>30 >>31 返信が遅くなってすみません。 一応こんな感じで書いて動作はしました。 #include<stdio.h> int Factorial(int n); int main(void) { int n; printf("自然数を入力して下さい:"); scanf("%d",&n); printf("%dの階乗は,%dです。\n",n,Factorial(n)); return 0; } int Factorial(int n) { printf("関数Factorial(%d)にはいりました。\n",n); if(n>0) { return n*Factorial(n-1); } else { return 1; } }
72 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:09:05 ] >>71 良かったね。さようなら。
73 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:10:11 ] >>71 それで十分な気もするが
74 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:16:05 ] >>35 if (sa>=11 || sa<=-11) これでOK
75 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:18:24 ] if (sa>=11 || sa<=-11) printf("それらの差は%dで11以上です。",sa); else printf("それらの差は%dで10以下です。",sa);
76 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:21:56 ] しつこいな そんなにバカな答え書いてバカにされたのが悔しかったのか
77 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:23:14 ] >>75 「それらの差」がマイナスの表示になってもいいの?
78 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:23:16 ] 絶対値?
79 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:23:30 ] しつこさに思わず噴いた
80 名前:29 mailto:sage [2007/09/22(土) 18:27:04 ] 71です。 これ以外に関数Factorial(n)から出ます:Factorial(n)=再帰の途中経過 見たいなのを表示しなければならないんですよ・・・ どこに入れたら表示させらるのか分からないので教えてもらえませんか? よろしくお願いします
81 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:28:13 ] しつこいぞ。スレ違い。
82 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:29:41 ] どういう表示をさせたいの?
83 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 18:29:46 ] >>80 int Factorial(int n) { int ret; printf("関数Factorial(%d)にはいりました。\n",n); ret = n > 0 ? Factorial(n-1) * n : 1; printf("関数Factorial(%d)は%dを返して終了します\n",n, ret); return ret; } こんな感じでどうよ?
84 名前:29 mailto:sage [2007/09/22(土) 18:50:30 ] >>83 ありがとうございます。 おかげさまで分かりました。 ホントにありがとうございました。 >>82 >>83 さんのおかげで分かりました。 >>81 しつこくてすみませんでした。 何度もしつこく聞いてしまったのに親切に返信してくれた 方々ありがとうございました。
85 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:19:42 ] >>77 どういうこと?
86 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 19:31:10 ] >>85 sa=-11 のとき 「それらの差は-11で11以上です。」 というおかしな表示になるよ。
87 名前:>>16 mailto:sage [2007/09/22(土) 20:10:26 ] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int main(void){ double reg = 0, mem = 0; char buf[128] = {0}, *p; while(1){ scanf("%127s", buf); if(!strcmp(buf, "end:")) break; else if(!strcmp(buf, "M+")) mem += reg; else if(!strcmp(buf, "M-")) mem -= reg; else if(!strcmp(buf, "MR")) reg = mem; else if(!strcmp(buf, "RC")) reg = 0; else if(!strcmp(buf, "MC")) mem = 0; else if(isalpha(*buf)) fprintf(stderr, "error\n"); else{ p = buf; reg += strtod(p, &p); while(*p != '=' && *p != '\0') switch(*p++){ case '+' : reg += strtod(p, &p); break; case '-' : reg -= strtod(p, &p); break; case '*' : reg *= strtod(p, &p); break; case '/' : reg /= strtod(p, &p); break; default : reg = strtod(p, &p); break; } } printf("reg = %g \t mem = %g\n", reg, mem); } return 0; }
88 名前:87 mailto:sage [2007/09/22(土) 20:24:14 ] >>87 は無しで……
89 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:34:32 ] 残念ながら無しにはできない。このスレにはずっと残るし ログを残している人はいつでもそのレスを見ることが出来る。 つまり、有るってことで。
90 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:50:33 ] >>16 他の人に期待 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4950.txt
91 名前:16 [2007/09/23(日) 12:44:46 ] >>90 リンク先を利用させてもらったのですが、どうも計算が上手くいきません。 たとえば「5+5=」と打ち込んで、「end:」で終了させても答えは出ず、 「reg=-1 mem=0」といった感じにしか表示されません。 おそらくレジスタが−1でメモリが0であることを表していると思うのですが、 肝心の計算結果がわかりません。 このプログラムをどのように修正すればよいのでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4950.txt
92 名前:デフォルトの名無しさん [2007/09/23(日) 13:21:49 ] [1] 授業単元:C [2] 問題文(含コード&リンク): 読み込んだ非負の整数血を逆順に表示。 [3] 環境 [3.1] OS: Win Bcc32 C [4] 期限:[無期限] [5] その他の制限: ないです。
93 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:36:41 ] 血...
94 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 14:26:07 ] >>91 >90のソースをコンパイルしたら一箇所だけエラーが出たので、それを修正してコンパイルしてみた。 -- $ ./a.out 5+5= reg = 10 mem = 0 end: $ -- 普通に動いているようだが。
95 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 14:28:16 ] >>91 なんかわかんなくなってきたから、実行例をいくつかください
96 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:03:31 ] >>92 #include <stdio.h> #define n 10 int main(int c,char**v){ int i,a[n]; if(c==1)for(i=0;i<n;i++)scanf("%d",&a[i]); c!=n+1?printf("%d ",main(c+1,c==1?(char**)a:v)):0; return c==1?0:*((int*)v+c-2); }
97 名前:デフォルトの名無しさん [2007/09/23(日) 15:06:32 ] >>92 スタックの勉強でもしてるのかな? #include <stdio.h> #define S_MAX 500 int stack[S_MAX]; int top=-1; void push(int x){ stack[++top] = x; } int pop(){ return stack[top--]; } int main(){ int i=1; while(i!=0){ printf("非負値の入力(0で終了):"); scanf("%d", &i); if(i<0){ printf("非負値じゃないとダメです\n"); }else if(i!=0){ push(i); } } printf("--- 結果 ---\n"); while(top!=-1){ printf("%d\n", pop()); } return 0; }
98 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:07:52 ] かぶった・・・orz
99 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:09:26 ] >>97 do whileを勉強しています。
100 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:11:59 ] #include <stdio.h> int main(void) { int num; do { printf("非負の整数:"); scanf("%d",&num); if (num<0) puts("その数は負の数です。"); } while (num<0); printf("その数を逆から読むと、"); do { printf("%d",num%10); num=num/10; } while (num>0); puts("です。"); return (0); }
101 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:12:12 ] do while か。そのくらいだったら、逆にスタック使うと不自然だなw >>96 のforをdowhileに直した方がいいね