お願いします

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sim
記事: 48
登録日時: 10年前

お願いします

#1

投稿記事 by sim » 10年前

引数としての分数の積を求める関数。商を求める関数。
[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]
最後に編集したユーザー sim on 2015年7月28日(火) 23:19 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: お願いします

#2

投稿記事 by みけCAT » 10年前

まず、28行目と32行目のセミコロンを削除してください。
次に、とりあえずオーバーフローを気にしなければ、普通に分数の掛け算とわり算を実装すればいいでしょう。

コード:

struct fraction multiply(struct fraction val1,struct fraction val2)
{
	struct fraction ret;
	/* ここでretの各メンバに値を代入する */
	return ret;
}
/* divideも同様 */
分数の掛け算:結果分子=引数1分子×引数2分子、結果分母=引数1分母×引数2分母
分数の割り算:結果分子=引数1分子×引数2分母、結果分母=引数1分母×引数2分子
約分は最大公約数を求めてそれで割るのが一般的ですが、「ユークリッドの互除法」が使えます。
[search=google]ユークリッドの互除法[/search]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

sim
記事: 48
登録日時: 10年前

Re: お願いします

#3

投稿記事 by sim » 10年前

valはどう使うべきですか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: お願いします

#4

投稿記事 by みけCAT » 10年前

sim さんが書きました:valはどう使うべきですか?
引数1 = val1
引数2 = val2
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 14年前

Re: お願いします

#5

投稿記事 by box » 10年前

sim さんが書きました:

コード:

	fraction=kakunou(num,den);
kakunou関数の実体はどこにありますか?
sim さんが書きました:

コード:

	multiply(num,den);
1個の分数だけを渡しているように見えます。その状態で、どうやってかけ算しますか?
また、かけ算した結果を捨ててしまっているように見えます。それでいいんでしょうか?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: お願いします

#6

投稿記事 by みけCAT » 10年前

box さんが書きました:[
sim さんが書きました:

コード:

	multiply(num,den);
1個の分数だけを渡しているように見えます。その状態で、どうやってかけ算しますか?
そもそも分数を渡していないですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 14年前

Re: お願いします

#7

投稿記事 by box » 10年前

sim さんが書きました:引数としての分数の積を求める関数。商を求める関数。
ということは、分数を「2個」入力する必要があるわけです。ところが
sim さんが書きました:

コード:

	fraction fraction;
1個しか作っていません。これがつまずきの始まり。
sim さんが書きました:

コード:

struct fraction multiply(struct fraction val1,struct fraction val2);
struct fraction divide(struct fraction val1,struct fraction val2);
引数として2個の分数を渡そうという意図は正しいです。ところが、実際には
sim さんが書きました:

コード:

	multiply(num,den);
単に分子と分母を渡しているだけで、分数を渡していません。これが2個目のつまずき。
やりたいと思っていること(プロトタイプ宣言の記述)と実際にやっていることが食い違っています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 14年前

Re: お願いします

#8

投稿記事 by box » 10年前

書こうとしている関数が
 ・何を入力として受け取って
 ・中でどんな処理をして
 ・呼び出し元に何を返すのか(あるいは何も返さないのか)

その関数を呼び出す側はその関数に何を渡してあげて、戻り値があればそれをどのように使うのか

こういったあたりを、日本語で整理してからコードに落とし込むことをおすすめします。
なぜなら、(おそらくは母国語であろう)日本語で書けない処理を
(一種の外国語である)プログラミング言語で書くことはかなりむずかしいと思うからです。

何しろ、日本語でちゃんと書けた処理でさえ、いざプログラムを書いてみるとバグだらけ、
などということは日常茶飯事ですしね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る