引数としての分数の積を求める関数。商を求める関数。
[code]
#include<stdio.h>
typedef struct fraction
{
int num; /*分子*/
int den; /*分[/album]母*/
}fraction;
struct fraction multiply(struct fraction val1,struct fraction val2);
struct fraction divide(struct fraction val1,struct fraction val2);
int main(void)
{
fraction fraction;
int num,den;
printf("分子を入力してください。\n");
scanf("%d",&num);
printf("分母を入力してください。\n");
scanf("%d",&den);
fraction=kakunou(num,den);
multiply(num,den);
return 0;
}
struct fraction multiply(struct fraction val1,struct fraction val2);
{
}
struct fraction divide(struct fraction val1, struct fraction val2);
{
}
[/code]
/*struct fraction multiply(struct fraction val1,struct fraction val2);
struct fraction divide(struct fraction val1, struct fraction val2);*/
のところがわかりません。[quote][/quote]
お願いします
Re: お願いします
まず、28行目と32行目のセミコロンを削除してください。
次に、とりあえずオーバーフローを気にしなければ、普通に分数の掛け算とわり算を実装すればいいでしょう。
分数の掛け算:結果分子=引数1分子×引数2分子、結果分母=引数1分母×引数2分母
分数の割り算:結果分子=引数1分子×引数2分母、結果分母=引数1分母×引数2分子
約分は最大公約数を求めてそれで割るのが一般的ですが、「ユークリッドの互除法」が使えます。
[search=google]ユークリッドの互除法[/search]
次に、とりあえずオーバーフローを気にしなければ、普通に分数の掛け算とわり算を実装すればいいでしょう。
struct fraction multiply(struct fraction val1,struct fraction val2)
{
struct fraction ret;
/* ここでretの各メンバに値を代入する */
return ret;
}
/* divideも同様 */
分数の割り算:結果分子=引数1分子×引数2分母、結果分母=引数1分母×引数2分子
約分は最大公約数を求めてそれで割るのが一般的ですが、「ユークリッドの互除法」が使えます。
[search=google]ユークリッドの互除法[/search]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: お願いします
kakunou関数の実体はどこにありますか?
1個の分数だけを渡しているように見えます。その状態で、どうやってかけ算しますか?
また、かけ算した結果を捨ててしまっているように見えます。それでいいんでしょうか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: お願いします
ということは、分数を「2個」入力する必要があるわけです。ところがsim さんが書きました:引数としての分数の積を求める関数。商を求める関数。
1個しか作っていません。これがつまずきの始まり。
引数として2個の分数を渡そうという意図は正しいです。ところが、実際には
単に分子と分母を渡しているだけで、分数を渡していません。これが2個目のつまずき。
やりたいと思っていること(プロトタイプ宣言の記述)と実際にやっていることが食い違っています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: お願いします
書こうとしている関数が
・何を入力として受け取って
・中でどんな処理をして
・呼び出し元に何を返すのか(あるいは何も返さないのか)
その関数を呼び出す側はその関数に何を渡してあげて、戻り値があればそれをどのように使うのか
こういったあたりを、日本語で整理してからコードに落とし込むことをおすすめします。
なぜなら、(おそらくは母国語であろう)日本語で書けない処理を
(一種の外国語である)プログラミング言語で書くことはかなりむずかしいと思うからです。
何しろ、日本語でちゃんと書けた処理でさえ、いざプログラムを書いてみるとバグだらけ、
などということは日常茶飯事ですしね。
・何を入力として受け取って
・中でどんな処理をして
・呼び出し元に何を返すのか(あるいは何も返さないのか)
その関数を呼び出す側はその関数に何を渡してあげて、戻り値があればそれをどのように使うのか
こういったあたりを、日本語で整理してからコードに落とし込むことをおすすめします。
なぜなら、(おそらくは母国語であろう)日本語で書けない処理を
(一種の外国語である)プログラミング言語で書くことはかなりむずかしいと思うからです。
何しろ、日本語でちゃんと書けた処理でさえ、いざプログラムを書いてみるとバグだらけ、
などということは日常茶飯事ですしね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。