- ベストアンサー
この問題の解き方分かりますか?
私は、初めてC++を学んでいる者です。 以下の問題を解こうとしているのですが、どのようなコードにすれば良いか悩んでいます。 分かる方いらっしゃいましたら、助けてください。 なお、問題1は大丈夫なのですが、その問題1を利用した問題2が分かりませんので、問題2の解法を教えて下さい。お願いします。 問題1.A社のパソコンが246,000円、B社のパソコンが285,000円で売られている。A社は13%引き、B社は20%引きになると言う。A,B社の値引き後の売価を求めるプログラムを作れ。ただし、消費税は5%とする。 (※扱う数値が32767よりも大きいので、long intを使うのは分かっています。そして、入出力は%ldで行う事も分かっています。) 問題2.前問において、b社の売価の方がA社の売価より安くなる為には、値引率を何%以上(整数)にすれば良いかを求めるプログラムを作れ。 ヒント:A,B社の定価をそれぞれa,bとすると以下の式を満足するxを求めればよい。記号%を出力したい時は%を2つ続けて%%と書くようにJIS Cで規定されている。 ちなみに、今までならったのは「printf」「scanf」「int」「float」「char」「long int」「short int」「double」「long double」です。if文みたいな文法は習っていないので、これらを利用した解法をお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
式を変形しましょう。何%以上ということは、=も有りだから x=の式にすればいいはず。 printf()の引数に比較の文を書いても全然意味がないことに注意。 比較の結果の、真か偽かその数値が出るだけです。 #Cの定義から行くと、0か0以外の数値になるはず ほんと、実行結果はどうだったんでしょうね…
その他の回答 (8)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 色々と考えた結果、このようなコードになり、満足のいく結果になりました。 > #include <stdio.h> > main() > { float a,b; > scanf("%d %d",&a,&b); > printf("%3.0f%%以上",((0.87*a)/b)*100); > } > これで合っていますか? 満足のいく結果になったんなら合っているんじゃないですか。 # 僕にはこれでちゃんと動くとはとうてい信じられないけど
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
プログラムの前に'算数'だなぁ。 a*0.87 > b*(1-x) -a*0.87 < b*x - b -a*0.87 + b < b*x (-a*0.87 + b)/b < x x が '左辺'より大きいことが要件を満たす条件です。 つまり、求める値は'左辺'です。 a, b の値はわかっていますね?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 過去の問題などを参考にして以下のようなコードを考えました。 > > #include <stdio.h> > main() { > float a,b,x; > scanf("%d %d",&a,&b); > printf("%d%%以上",a*0.87>b*(1-x)); > } で、コンパイルしましたか? 実行しましたか? 結果はどうなりましたか? "%d" の意味はわかっていますか? a, b は何ですか? x は何ですか?
- a0123456789
- ベストアンサー率22% (57/255)
お悩みの問題は、下記のご質問記載内容より、 >※扱う数値が32767よりも大きいので、long intを使うのは分かっています。そして、入出力は%ldで行う事も分かっています。) 変数の宣言を全て long int にしていませんか? No3の方がアドバイスされているように、問題2では小数を扱うのでFloat等の実数型の変数を使うべきなのにlong intを使っているのでは? 当然、変数の型が変われば入出力の書式も変わりますね! P.S. 問題1においても普通はlong intを使わずにFloatを使うと思うのですが....
補足
実際にfloatを使ってコードを書いています。 なので、おそらく変数の定義では、問題ないのかと思うのですが…。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 以下の問題を解こうとしているのですが、どのようなコードにすれば良いか悩んでいます。 何を/どう悩んでいるかを書いてください。 あるいは書きかけでも構わないからコードを見せてください。 コードを書き、 コンパイルし、 実行し、 期待する結果と比較し、 一致すればOK。 一致しなかったらその原因を探ってください。 # これをやらないといつまでたっても習得できませんよ。 質問は結果が一致せず、その原因を掴めなかったときでも遅くありません。
補足
過去の問題などを参考にして以下のようなコードを考えました。 #include <stdio.h> main() { float a,b,x; scanf("%d %d",&a,&b); printf("%d%%以上",a*0.87>b*(1-x)); }
- timber
- ベストアンサー率29% (218/739)
ヒントだけです。 小数の計算が入ってきますので、「int」「long int」「short int」ではなく、 「float」「double」「long double」を使用してください。 「int」「long int」「short int」は整数しか扱えません。
お礼
一応、コードでintやlong intなどは使用していません。 やはり、xをどのようにすれば求まるのかが分かりません。 回答ありがとうございました。参考になりました。
- hinebot
- ベストアンサー率37% (1123/2963)
C++はひとまず置いといて、単に数学の問題として解けますか(計算の仕方がわかりますか)? 「数学としては判るけど、C++でどう組んだらよいか分からない」のか、 そもそも「数学としてもどう計算すればよいのか分からない」のかどちらの状態でお悩みなんでしょうか?
補足
回答ありがとうございます。 計算方法としては、xを求めるように計算すればよいと言う事は分かっています。 私は、それをC++のコードで書くとしたら、どのようになるのかが知りたいのです。
- ceita
- ベストアンサー率24% (304/1218)
>A,B社の定価をそれぞれa,bとすると以下の式を満足するxを求めればよい とのことなので、 単純に計算するだけだとおもいますが? 参考までにその式も教えてもらえると、 回答しやすいと思います。
補足
遅くなってスイマセンでした。 以下の式を満足するxを求めればよいと言っている式は、これです。 a*0.87>b*(1-x) よろしくお願いします。
補足
色々と考えた結果、このようなコードになり、満足のいく結果になりました。 #include <stdio.h> main() { float a,b; scanf("%d %d",&a,&b); printf("%3.0f%%以上",((0.87*a)/b)*100); } これで合っていますか? このコードでいきたいと思います。