- ベストアンサー
関数による四則演算でのエラー
- 関数を使用した四則演算でエラーが発生しました。
- インデントと括弧の数を確認しても解決しないため、原因がわかりません。
- 後ろから演算させるように変更するとエラーが解消される可能性があります。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
((3+4)*3)/7-2 1つの演算子に対して1組の()を適用する。 ((((3+4)*3)/7)-2) それぞれの()に対して演算子に応じた関数を適用する。 hiku(waru(kakeru(tasu(3+4)*3)/7)-2) 各式を引数のならびに置き換える。 hiku(waru(kakeru(tasu(3, 4), 3), 7), 2)
その他の回答 (5)
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19867)
>printf("%d = 1\n",(tasu(3,4)kakeru(1,3)waru(21,7)hiku(3,2))); この行は意味不明だ。 3と4を足すのは「tasu(3,4)」で求まる。 求まった答えに3を掛けるなら「kakeru(求まった答え,3)」で求めないといけない。 「求まった答え」は「tasu(3,4)」と書けるのだから、結局「kakeru(tasu(3,4),3)」が「(3+4)*3」になる。 んで、(3+4)*3を7で割るなら「waru(kakeru(tasu(3,4),3),7)」になる。 あとは判りますね? それと、printfは printf("((3+4)*3)/7-2 = %d\n", 関数を使った正しい式 ); と書かないと、訳が判らない。 貴方が書いたprintfだと、表示結果が 1 = 1 になっちゃって、何を表示しているのか訳が判らない。
- singlecat
- ベストアンサー率33% (139/418)
>>hiku(waru(kakeru(tasu(3,4),3),7),2); >念のため理解したいのですが >hikuを呼び出してwaruを呼び出してkakeruを呼び出してtasuから計算しているということでよろしいでしょうか? いやいや、それでは計算できません。 普通の計算と同じように()内が優先されます。 ではこう書きましょう。(変数の宣言はしませんね) a = tasu(3,4); ←a=7 b = kakeru(a,3); ←b=21 c = waru(b,7); ←c=3 d = hiku(c,2); ←d=1 ご理解いただけましたか? 本当は関数の中身として、不十分な所があったりします。 1.引数のどこかがゼロだったら 2.割り切れなかったら などなど、予測される事にプログラムは対応する必要はあります。
- singlecat
- ベストアンサー率33% (139/418)
>tasuのところにtasu(kakeru(1,3),4);とやるべきなのでしょうか。。。 近いですがちょっと違います。 関数の引数にすでに、あなたが頭で計算した答えが入っているのは何故何故? プログラムの意味がないと思いますよ。 hiku(waru(kakeru(tasu(3,4),3),7),2);
お礼
プログラムの理解ができてなかったということですね... >hiku(waru(kakeru(tasu(3,4),3),7),2); この通りにしたらできました 後は理解が足りない...
補足
>hiku(waru(kakeru(tasu(3,4),3),7),2); 念のため理解したいのですが hikuを呼び出してwaruを呼び出してkakeruを呼び出してtasuから計算しているということでよろしいでしょうか?
- Wr5
- ベストアンサー率53% (2173/4061)
>printf("%d = 1\n",(tasu(3,4)kakeru(1,3)waru(21,7)hiku(3,2))); なかなか斬新ですが……どういう動作を期待しているのでしょう? >expected ')' before 'kakeru' kakeruの前に閉じ括弧')'が必要と言われています。 式としてもおかしいので当然と言えば当然ですが。 というか…… 「((3+4)*3)/7-2 の計算をするようにプログラムを関数を使用し書け。」というのはそういう意味ではないと思いますけど……。 >インデントも)も同じ数にしているのですが インデントは関係ありませんし、括弧の対応が正しかったとしても書式としてヘンです。
お礼
なるほど。つまり式の通りにプログラムするのでなく応用して、 この式を完成させろということでしょうか。 個の場合はインデント以前の問題だったんですね。。。ふむ
- singlecat
- ベストアンサー率33% (139/418)
tasu(3,4); ←これが抜けています。 が、根本的に間違っているので、 最初からやり直した方が良いと思います。
お礼
ご回答ありがとうございます。 しかしやり方が、、、うーん
補足
printfでの関数は複数を1つの表示にするとき tasu(3,4); とやるとprintfで%dなのでtasuだけの関数しか使えないと思うのですがどうでしょう tasuのところにtasu(kakeru(1,3),4);とやるべきなのでしょうか。。。
お礼
>貴方が書いたprintfだと、表示結果が >1 = 1 >になっちゃって、何を表示しているのか訳が判らない。 これは((3+4)*3)/7-2 が1になればいいという問題で 1=1 になればOKということです。 実際に((3+4)*3)/7-2 は1です。これは関数電卓でやりました。