1 名前:デフォルトの名無しさん [2009/01/15(木) 23:21:27 ] あなたが解けない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++の宿題を片付けます 121代目 pc11.2ch.net/test/read.cgi/tech/1230678123/
151 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:25:28 ] >>149 課題提出に問題ないと思うけど 問題文の解釈は自分ではこうなるけど、、、 while(n<=0){ printf("Input n ?? "); scanf("%d",&n); if(n>0) break; printf("正の整数を入力してください。\n"); //問題文から警告と読み取るとこの位置 } for文と条件演算子使うと1行で(簡単なんだか難解なんだか) // for(Size=0;Size<1;Size<1?puts("正の値を入力してください"):0 ) scanf("%d",&Size);
152 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:37:51 ] >>151 scanf("%d",&n); while(n<=0){ printf("正の整数を入力してください。\n"); scanf("%d",&n); } 入力部はこれでひと塊なんだ
153 名前:デフォルトの名無しさん [2009/02/02(月) 16:48:57 ] >>144 です >>150 を試してみましたが 色々入力してみて結果をみると a が含まれてるのに表示されないのがあります どう改善すればいいでしょうか;;;
154 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 16:51:16 ] >>153 fgets を使う
155 名前:デフォルトの名無しさん [2009/02/02(月) 17:03:33 ] >>154 fgets って言うのは習ってないので どこに組み込めばいいか分からないです…。
156 名前:150-151 mailto:sage [2009/02/02(月) 17:11:59 ] >>152 自分でコンパイルしてなかった。すまん。 >>153 >>155 strlenが改行コード含むと思ってプログラムしてたから、自作関数の-1を消してもらえば大丈夫だと思う。
157 名前:デフォルトの名無しさん [2009/02/02(月) 17:14:29 ] >>156 -1を消したらうまくできました!ありがとうございます^^ >>147 ,149,150,151,152,154,156 いい人が沢山居て本当に助かりました☆ 皆さんありがとうございました!!!
158 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 18:50:58 ] >>143 読んでないけど、>>115 で不満なのか?
159 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 20:53:12 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8804.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++Compiler 5.5 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語 [4] 期限: 2月5日まで [5] その他の制限:C言語は一通り習ってます。 (1)がさっぱりわかりません・・・・。よろしくお願いします。
160 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:01:55 ] (x^n) mod m
161 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:04:48 ] >>160 はええな マジで? おれより速い奴がいるなんて興奮して勃起しちゃった
162 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:10:20 ] >>160 すごいですね!ありがとうございます。
163 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:20:28 ] >>160 質問者じゃないんだけど y=1;z=x; for(i=n;i>0;i>>=1){ ←i>>=1これどういう意味ですか? if(i%2) y=(y*z)%m; ←これなんでiが偶数のときは処理しないんですか? z=(z*z)%m; } return y;
164 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:31:18 ] >>163 www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/power.html
165 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:36:58 ] >>163 >for(i=n;i>0;i>>=1){ ←i>>=1これどういう意味ですか? iを右に一つシフトした結果をiに代入する。 結果、iが二分の一になる。
166 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 21:38:49 ] >>165 >結果、iが二分の一になる。 端数切捨てね。 5(101)→2(10)
167 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:01:27 ] [1] 授業単元:DirectX研究2 [2] 問題文(含コード&リンク): サイコロを転がして目を決める。 ・テーブルとサイコロを作成する。 ・キー操作でサイコロを投げ下ろすように振る。 ・落下してきて,1つの目を上にして止まる。 ・何度でも遊べる ◎テーブルにサイコロの影がある ◎回転しながら落下してくる ◎自由な方向から見ることができる ◎テーブルの上でサイコロは跳ね,転がる。 ◎サイコロとして正しい pub.idisk-just.com/fview/_tILCoWWjdmUjpPFJTUxmAq6FeoO_tXOymM-2i9jWWI5H3mCxm9x4ARZUBR0TsUi を参考にしてよい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC8 or VC9 [3.3] 言語:C/C++どちらでも可 [4] 期限: 2月10日まで [5] その他の制限:DirectXの課題ですがよろしくお願いいたします。
168 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:37:41 ] ここって宿題じゃなくて単発の質問はいいのかな?
169 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:41:33 ] スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/
170 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:41:35 ] >>168 答えはNO スレ違い
171 名前:デフォルトの名無しさん [2009/02/02(月) 22:43:50 ] >>169-170 こっちか。ありがとう
172 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:48:04 ] 内容:[1] 授業単元: プログラミング [2] 問題文:Visual c++を使って大富豪を作りなさい。 ルールは、8切りのみです。ペア、階段等は無しにします。 CPUは1名とします。 カード枚数は10枚ずつで、ジョーカーは無しです。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: [3.3] 言語:Visual c++ [4] 期限: できれば早めに・・・・ [5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。 画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします
173 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 22:49:49 ] >>166 スレ違いなのに質問に答えてくれてありがとうございます
174 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:14:27 ] >>172 CPUとの1対1でいいのか? ペアなしっていうのは、常に1枚ずつしかカード出せないってことでいい? ていうかCPUの思考ルーチン作るのって基礎段階を大幅に超える気がするんだが
175 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:21:42 ] どなたか>>134 をお願いいたします。
176 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:29:56 ] >>175 お願いされるWORDが無い
177 名前:105 mailto:sage [2009/02/02(月) 23:33:50 ] 問2をここまでやったのですが、どうも何かが違うようで7桁の数字を入力しても学番は7桁〜のほうがでてしまうんです。 #include<stdio.h> #include<string.h> #include<stdlib.h> void main(){ char x[100]; int y,z; printf("学番を入力:"); gets(x); y=strlen(x); z=atoi(x); if(y==7 && z==7){ printf("g%s@yahho\n",x); } else{ printf("学番は7桁の数字で入力して下さい\n"); } } どこがいけないのでしょうか? 何度も住みませんが、よろしくお願いします。
178 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:37:27 ] >>175 バブルソート フローチャート でググれ
179 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:40:46 ] >>177 Z==7がまずい というかそれ、問3じゃないのか?
180 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:44:31 ] >>179 あ、ごめんなさい。問3でした z==7がいけない、ということは y==7 か z==7 どちらかしか使用してはいけないということなのでしょうか 文字数が7、尚且つ数字であるとき、という風にしたいのですが・・・
181 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:57:45 ] >>172 仕様を、常に自分からで敵は出せる最小を必ず出す、とすれば楽になる。 が、10行20行で分かりやすく纏めるのやファイルうpはめんどい。 流れの案だけ、書いとく。 全体 [シャッフル]->[配布]->[スタート(自分の番)]->[ループ&終了判定]->[終了時コメント]->end ループ部分 自分の番:自分のカードを printf("%d:%d ",i%10,ME[i]);とかで表示 scanfでキーボードの1,2,3,...,9,0を選択。フラグ処理などしないと、同じカード捨てる事になる。 相手の番:場に出ている番号(初めは0)より大きい最小のカードのインデックスを計算 あればそのインデックス。無ければ自分の番に。 細かいシステム管理(枚数チェックとか、場のカードの数・切るとか)も必要だし、 [シャッフル]7行 [配布]2〜5行 [ループ&終了判定]30行位[終了時コメント]3行 整理して、こんなもんかな?
182 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 23:57:45 ] >>180 言ってることとやってることがめちゃくちゃだぞ 数字かどうか判断するにはxに格納された文字が '0'と'9'の間にあるかどうかを判断すべき それと宿題程度ならいいと思うが getsはなるべく使わない方がいい
183 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:00:57 ] >>182 よく使ってるscanfも曲者と聞きますし、fgets&sscanfが良いと聞きますが 宿題レベルでもでしょうか?実感ないのですが。
184 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:01:39 ] z = atoi(x) だから z==7だと zが7かどうかを判定してることになってしまう。 ほしいのは7桁かどうかだから、これはまずい。 あとはzが7桁の数字かどうか判定すればいいだけだよ。 それとgets()は使わない方がいい。 この辺参考に ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/getc.3.html
185 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:05:49 ] >>183 オーバーフローするような値を 敢えて入力するやつはいないと思うから 宿題レベルでとやかく言われることはないんじゃね? でもリスクは少なくしておくべき
186 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:05:57 ] y=strlen(x); bool b = true; int i; for( i = 0; i < 7; ++i ){ if( x[i] < '0' || x[i] > '9' ) b = false; } if(y==7 && b ){ printf("g%s@yahho\n",x); } else{ printf("学番は7桁の数字で入力して下さい\n"); }
187 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:06:50 ] >>174 出せるカードの中で一番弱いカードを出す程度で十分。 商用ゲームですらこれのことあるし。
188 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:07:33 ] >>174 常に1枚だすので大丈夫です。よろしくお願いします。
189 名前:デフォルトの名無しさん [2009/02/03(火) 00:17:01 ] C言語、プログラミング基礎の問題です。 整数型変数xに値16を代入文で直接代入する代わりに、ポインタ変数を用いて 間接的に行う方法を与えよ。 とても簡単だと思うのですがわからなくて。。。 お願いします
190 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:21:08 ] >>189 int x; int *px; px = &x; *px = 16; こういうことかな?
191 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:23:53 ] もしくは px[0] = 16 も。ポインタ理解できると→*(&px[1]-1)=16 でもできる事がわかる。
192 名前:デフォルトの名無しさん [2009/02/03(火) 00:24:34 ] >>182 >>184 ありがとうございます。おかげさまで無事できました! 授業ではgets()しか習っていませんでしたが使わないほうがいいのですね。勉強になります。
193 名前:181 mailto:sage [2009/02/03(火) 00:40:07 ] シャッフルだけ。 大富豪以外にもカードゲームボードゲームでも同じ事するはずだから、良いソース持ってる人いるだろうケド 山のシャッフルは、短絡的に実装しました。 バグさえなければ、大雑把にCARD_NUMの2乗オーダーの計算だと思うので 10000枚とかでなければ気にする事無いと思います。 #define CARD_NUM (13*4) int main(){ int cards[CARD_NUM];// カード番号とカードの数字を対応 int yama[CARD_NUM];// カードをシャッフルして代入 int i,j,ran; srand((unsigned) time(NULL)); for(i=0;i<CARD_NUM;i++){ cards[i]=i; yama[i]=-1; } for(i=0;i<CARD_NUM;i++){ ran = rand()%(CARD_NUM); if(yama[ran]==-1) yama[ran]=i; //トランプの数字にするには yama[ran] = i/4; else i--; //やり直し } /* シャッフル検査 */ for(i=0;i<4;i++){ for(j=0;j<13;j++) printf("%2d/",yama[i*13+j]); puts(""); } return 0; }
194 名前:デフォルトの名無しさん [2009/02/03(火) 00:49:48 ] >>190 >>191 ありがとうございます!! あと、while(条件){作業} を、if文とdo-while文を使って表現すると、どうなるのでしょうか・・・
195 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 00:57:24 ] マルチポスト 224 名前:デフォルトの名無しさん[] 投稿日:2009/02/02(月) 22:46:51 while文をif文とdo-while文を使って表現せよ という問題なんですが…ifも使わなきゃいけないというところがわかりません どうすればよいのですか??
196 名前:デフォルトの名無しさん [2009/02/03(火) 01:00:04 ] >>195 イタチといわれたので
197 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:02:24 ] それでも前のスレで答えてくれている人がいるだろ。 チェックしてないのかよ。
198 名前:デフォルトの名無しさん [2009/02/03(火) 01:03:38 ] 見たけどあってるかわからなかったんで
199 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:05:39 ] じゃあこのスレで答えても同じことになるだろ。
200 名前:デフォルトの名無しさん [2009/02/03(火) 01:08:58 ] 答え2つあったんですけど、どっちがあってるかわかりますか このスレは答え教えてくれるんで
201 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:15:05 ] じゃあもう一個増やしてやるよ。 do{ if(!x){ break; } /*処理*/ }while(x);
202 名前:デフォルトの名無しさん [2009/02/03(火) 01:27:04 ] 暇人・・・ww
203 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:55:24 ] do { if(!x) break; /*処理*/ }while(1); でもよくね?
204 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:58:34 ] do { loop: if (!x) break; /* 処理 */ goto loop; } while (0);
205 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:59:27 ] あ〜あ夜は暇だなっと。マジレスでもするか while(cnd){ /* ○処理 */ } if(cnd?"GO"[0|0]:0x0)do{ /* ○処理 */ }while("yoru"['-'-'-']?cnd:69);
206 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 06:08:15 ] [1] 授業単元:(復習課題) 分岐 繰り返し 一次元配列 2重ループ 2次元配列 文字列(これらどれかを使って解け) [2] www.pref.fukushima.jp/pc-concours/2008/03/pdf/2007honsen.pdf 問6 問7 [3] 環境 [3.1] OS:Windows [3.2]visual C++ [3.3] 言語:C++ [4] 期限: 2009年2月4日まで [5] main関数を使いそれ以外にもユーザ定義関数を1つ以上作成すること。 入力はscanf 出力はprintfでお願いします。 >>46 の時は、ほんと助かりました。 今回もお願いします。
207 名前:デフォルトの名無しさん [2009/02/03(火) 06:57:53 ] >>158 実行できなかったもので・・・
208 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 07:38:52 ] >>206 問6 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8805.txt
209 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 07:48:04 ] >>208 >入力はscanf 出力はprintfでお願いします。 ってかいてあるべ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8806.txt
210 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 08:16:43 ] >>206 問7 #include <stdio.h> #define COUNT_OHAJIKI 32 #define MAX_JIRO 25 int main(){ int n; scanf("%d",&n); while(n!=0){ int i,rest=COUNT_OHAJIKI,jiro[MAX_JIRO]; for(i=0;i<n;i++)scanf("%d", jiro+i); i=0; while(rest!=0){ rest-=(rest-1)%5; printf("%d\n", rest); rest-=jiro[i]; if(rest<0)rest=0; printf("%d\n", rest); i=(i+1)%n; } scanf("%d",&n); } return 0; }
211 名前:デフォルトの名無しさん [2009/02/03(火) 10:13:29 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ・2つの分数の分子と分母を入力すると,それらの和・差・積・商を 出力する.データは構造体で表現すること. ・分数計算では通分・約分には最大公約数が必要になる.通分には分母の最小公倍数が, 約分には最第公約数が必要である.したがってこれらを計算する関数をそれぞれ作る. ・最大公約数を求めるには,次のアルゴリズムを使うとよい(ユークリッドの互除法). @ mをnで割る (ただしm>n). A @の割る数を@の余りで割る. B Aの割る数をAの余りで割る. C 以下同様に,余りが0になるまで繰り返し,そのときの「割る数」が最大公約数になる. ・2つの数,m,nの最小公倍数は,m*n/(mとnの最大公約数)で求めることができる. (実行例) 1つめの分数の分子・分母の入力―>3 4 2つめの分数の分子・分母の入力―>1 6 和:11 / 12 差: 7 / 12 積: 1 / 8 商: 9 / 2 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 今週中ぐらい [5] その他の制限: 繰り返し文、条件判断文、構造体を勉強しました。 初心者なので、初心者にもわかるようなプログラムをお願いします。
212 名前:デフォルトの名無しさん [2009/02/03(火) 11:25:26 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8807.txt [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: ([2009年02月04日17:00まで] [5] その他の制限:
213 名前:デフォルトの名無しさん [2009/02/03(火) 11:28:51 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8808.txt [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: ([2009年02月04日17:00まで] [5] その他の制限:
214 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 11:36:27 ] ノ >>149 これ見てから考えな。あと、これくらい一つのファイルにまとめろ。
215 名前:デフォルトの名無しさん [2009/02/03(火) 11:40:08 ] >>212 #include <stdio.h> int main(void) { int i, j, n; printf("段数を入力してください: "); scanf("%d", &n); for(i = 0; i < n; i++) { for(j = 0; j < i + 1; j++) printf("*"); printf("\n"); } return 0; }
216 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 11:41:04 ] >>211 構造体はどういう形で作ればいいんだ? 指定なし? なしなら授業で作った構造体を1つ晒してくれ
217 名前:デフォルトの名無しさん [2009/02/03(火) 11:42:41 ] >>213 #include <stdio.h> int main(void) { int i, j, n; printf("段数を入力してください: "); scanf("%d", &n); for(i = 0; i < n; i++) { for(j = 0; j < i; j++) printf(" "); for(j = 0; j < (n - i) * 2 - 1; j++) printf("*"); printf("\n"); } return 0; }
218 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 12:48:06 ] >>211 どう? #include <stdio.h> typedef struct bunsu{int bunshi,bunbo;} BUNSU; int main(){ BUNSU bunsu1,bunsu2; printf("1つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu1.bunshi),&(bunsu1.bunbo)); printf("2つめの分数の分子・分母の入力->\n");scanf("%d%d",&(bunsu2.bunshi),&(bunsu2.bunbo)); int bunbo=bunsu1.bunbo*bunsu2.bunbo;int bunshi=bunsu1.bunshi*bunsu2.bunbo+bunsu2.bunshi*bunsu1.bunbo; int GCD = gcd(bunshi,bunbo); printf("和:%d / %d\n",bunshi/GCD,bunbo/GCD); // bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo-bunsu2.bunshi*bunsu1.bunbo; GCD = gcd(bunshi,bunbo); printf("差:%d / %d\n",bunshi/GCD,bunbo/GCD); // bunshi=bunshi=bunsu1.bunshi*bunsu2.bunshi; GCD = gcd(bunshi,bunbo); printf("積:%d / %d\n",bunshi/GCD,bunbo/GCD); // bunshi=bunshi=bunsu1.bunshi*bunsu2.bunbo; bunbo=bunsu1.bunbo*bunsu2.bunshi; GCD = gcd(bunshi,bunbo); printf("商:%d / %d\n",bunshi/GCD,bunbo/GCD); return 0; } int gcd(int m,int n){ if(m<n){int temp=m;m=n; n=temp;} int amari; while((amari=m%n)!=0){m=n;n=amari;} return n; }
219 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:18:18 ] 全部bunではじめるなよ。 bunsu とbunsu1じゃ大違いだろ。int int1;と同じ。 編集してみた。 #include <stdio.h> typedef struct bunsu{int son,mom;} BUNSU; int main(){ BUNSU A,B; int new_mom,GCD; printf("1つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(A.son), &(A.mom)); printf("2つめの分数の分子・分母の入力-> \t"); scanf("%d %d",&(B.son), &(B.mom)); GCD = gcd(A.mom,B,mom); new_mom = (A.mom*B.mom)/GCD; // 通分 GCD = gcd(new_mom,A.son+B.son); printf("和:%d / %d\n",(A.son+B.son)/GCD,new_mom/GCD); GCD = gcd(new_mom,A.son-B.son); printf("差:%d / %d\n",(A.son-B.son)/GCD,new_mom/GCD); GCD = gcd(A.son*B.son,A.mom*B.mom); printf("積:%d / %d\n",(A.son*B.son)/GCD,(A.mom*B.mom)/GCD); GCD = gcd(A.son*B.mom,A.mom*B.son); printf("商:%d / %d\n",(A.son*B.mom)/GCD,(A.mom*B.son)/GCD); return 0; } int gcd(int m,int n){ if(m<n){int temp=m;m=n; n=temp;} int amari; while((amari=m%n)!=0){m=n;n=amari;} return n;
220 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:28:11 ] >>219 そんなのを気にするくらいなら BUNSU bunsu_add(BUNSU a, BUNSU b); 的なのを作ったほうがよくないか?
221 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:32:37 ] >>220 ツッコミドコロは、そこじゃないな。
222 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:39:36 ] >>218 をbun -> "空白"にWORDで置換してみると 文字数 896 -> 680。実にソースの24%がbun成分です。もはやネタソースだろ。
223 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:39:52 ] 大文字の変数とかやめてよ。 しかも一文字
224 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:47:10 ] 分子が息子で分母がお母さんかw
225 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:49:17 ] >>222 一文字変数にしてご満悦って、70年代の世界からでも来たのかよ?
226 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:50:00 ] >>219 通分が分からないって、ありえないだろ。 いじらなくても変数名だけ変えられたし。
227 名前:219 mailto:sage [2009/02/03(火) 13:50:29 ] 小さいプログラムや、ローカルな変数の場合、無駄に長い変数は望ましくないと考えるが。 a,c,i,xは基本の型で、行列や構造体等A,Ary,Array場合によるが大文字も使う。 特にVBとか別言語触れてからは、使い分けるようになった。 >>224 ソースコードで変な想像したら負け組(new_mom?A.mom*B.son:A.son*B.momとか)
228 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:50:52 ] >>227 ばかか
229 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:52:31 ] >>227 バカだから、テストどころかコンパイルもしないで貼ってみたわけね・・・
230 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:52:55 ] >>227 小学校からやり直せよ
231 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:54:02 ] >>227 そもそも>>219 は計算が間違ってるwww
232 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:09:51 ] 計算しなければどうということはない
233 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:18:21 ] [1] 授業単元: アルゴリズムと数値計算 [2] ニュートン法とオイラー法で√2の近似値を計算するプログラムを作れ ただし、計算は50ステップ行い、それぞれの初期値とsqrt(2)との差を表示する事。 初期値は各々が定めてよい [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC2005EE [3.3] 言語:C [4] 期限:09/02/04迄 [5] その他の制限: 文字表示・繰り返し文・条件判断とオイラー法の計算は分かります
234 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:58:41 ] >>233 オイラー法ってこんなか? #include <stdio.h> #include <math.h> double newton(){ double x=1.0; int i; for(i=0;i<50;i++){ x=x-(x*x-2)/(2*x); } return x; } double euler(){ int n=50; double x=1.0,h=(double)(2-1)/n; int i; for(i=0;i<n;i++){ x=x+h/(2*x); } return x; } int main(){ double temp=newton(); printf("sqrt(2):%f,newton:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp); temp=euler(); printf("sqrt(2):%f,euler:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp); return 0; }
235 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 15:19:50 ] >>227 VBに触れたから呪われたんだな
236 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 16:04:45 ] >>234 ありがとうございます! for文の中身1行で表せるんですね。 初期値表示と(double)(2-1)を2.0-1.0など軽く置き換えて完成しました。
237 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 19:48:11 ] >>193 O(N^2)じゃなくO(NlgN)だ
238 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:41:50 ] だいたい、プログラム入れてみるとxln(x)が定数なしで自己相関関数に一致してるくらいだな。 つまり、O(NlnN)だな。でも、NlogNだと思ってて、N^2だったってよりよくない?
239 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:51:59 ] うん。
240 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:18:36 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 角度はラジアン単位(rad),度単位(degree)【°】で表される.さらに 度単位は 32.4°と10進小数表示する場合と 32度24分と度分秒で表示する場合がある.(60秒で1分, 60分で1度) @2つの角度(度単位)を10進小数点2桁 でキーボードから入力し(例 69.21° と 33.73° ) それらを度分秒単位で 表示させるプログラムを作成しなさい. Aさらに度分秒単位で表示された2つの角度の差を求め,度分秒単位で表示しなさい. 計算は度分秒単位のまま引き算すること(60進法の引き算アルゴリズムを作成すること). [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年2月4日 13:00 [5] その他の制限: よろしくお願いします
241 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:25:50 ] キーボードから入力し(例 69.21° と 33.73° ) 2バイト文字か?まずその入力ができるかが問題だ。 Alt+半角で全角打てるけど、(例 69.21 と 33.73)の間違えだと言ってくれ。
242 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:37:58 ] >>241 すみません 半角です
243 名前:デフォルトの名無しさん [2009/02/03(火) 22:03:28 ] >>211 のものですが、>>219 をコンパイルしたら 和と差が計算できなかったのですが、どうすれば いいでしょうか? どなたか教えてください。
244 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:18:25 ] A.son *= B.mom; B.son *= A.mom; A.mom=B.mom=(A.mom*B.mom); // 通分(約分せず) GCD = gcd(A.mom,A.son+B.son); printf("和:%d / %d\n",(A.son+B.son)/GCD,A.mom/GCD); GCD = gcd(A.mom,A.son-B.son); printf("差:%d / %d\n",(A.son-B.son)/GCD,A.mom/GCD);
245 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:23:43 ] 分母: mom 分子: son っていうネーミングセンスが素敵だ
246 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:36:37 ] 辞書片手に英語にしまくったら単語の意味を忘れて自分で読めないというのは聞かなくもないけれど、 日本語の一部を切り出して英語にするっていうのは新しい。
247 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:40:47 ] >>240 誤差がぁぁぁ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8809.c
248 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:42:30 ] >>240 #include<stdio.h> #include<math.h> typedef struct { int deg, min, sec; } Degree; void rad2deg(Degree *pdeg, double rad) { pdeg->deg = (int)rad; rad = (fabs(rad) - fabs(pdeg->deg)) * 60; pdeg->min = (int)rad; rad = (rad - pdeg->min) * 60; pdeg->sec = (int)rad; } void print_deg(const Degree *pdeg) { printf("%d度%02d分%02d秒\n", pdeg->deg, pdeg->min, pdeg->sec); } void degsub(Degree *pdiff, const Degree *pdeg1, const Degree *pdeg2) { pdiff->sec = pdeg1->sec - pdeg2->sec; pdiff->min = pdeg1->min - pdeg2->min; pdiff->deg = pdeg1->deg - pdeg2->deg; if (pdiff->sec < 0) { pdiff->sec += 60; pdiff->min --; } if (pdiff->min < 0) { pdiff->min += 60; pdiff->deg --; } } int main() { double rad1, rad2; Degree deg1, deg2, degdiff; printf("radian1="); scanf("%lf", &rad1); printf("radian2="); scanf("%lf", &rad2); rad2deg(°1, rad1); printf("degree1="); print_deg(°1); rad2deg(°2, rad2); printf("degree2="); print_deg(°2); degsub(°diff, °1, °2); printf("degree1-degree2="); print_deg(°diff); return 0; }
249 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:55:09 ] >>240 の人気に嫉妬 #include <stdio.h> #include <math.h> struct ds_t { int d; int m; int s;}; struct ds_t dec2ds(double dd){ struct ds_t ds; ds.d = floor(dd); ds.m = floor(60*(dd - ds.d) + 0.5/60); ds.s = floor(3600*(dd - ds.d) - 60*ds.m + 0.5); return ds; } void print_ds(struct ds_t *ds){ printf("%d.%d\'%d\"\n", ds->d, ds->m, ds->s); } struct ds_t sub_ds(struct ds_t *ds1, struct ds_t *ds2){ struct ds_t ds3; ds3.d = ds1->d - ds2->d; ds3.m = ds1->m - ds2->m; ds3.s = ds1->s - ds2->s; if(ds3.s < 0) ds3.s += 60, ds3.m--; if(ds3.m < 0) ds3.m += 60, ds3.d--; return ds3; } int main(void){ double dd1, dd2; struct ds_t ds1, ds2, ds3; scanf("%lf%lf", &dd1, &dd2); ds1 = dec2ds(dd1); ds2 = dec2ds(dd2); print_ds(&ds1); print_ds(&ds2); ds3 = sub_ds(&ds1, &ds2); return 0; }
250 名前:248 mailto:sage [2009/02/03(火) 22:57:35 ] degsubの符号の扱いが全然だめだった。>>248 は取り下げます。
251 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:58:00 ] >>243 そのコードはクズだ。捨てろ。