[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/13 08:24 / Filesize : 133 KB / Number-of Response : 421
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++の宿題片付けます 122代目



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/

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
そのコードはクズだ。捨てろ。

252 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:00:11 ]
[1] 授業単元:ループ
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8810.txt
[3] 環境
 [3.1] OS:WindowsXP
 [3.2]コンパイラ名とバージョン:C++ Compiler 5.5/Turbo Debugger
 [3.3] 言語:C
[4] 期限:一ヶ月以内
[5] その他の制限:2重ループを使うらしいですが使わなくてもいいそうです。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<133KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef