前提・実現したいこと
底辺の半径 r, 高さ h の円錐を h を n 等分し,n − 1 個の円柱の体積を求め積算することにより計算せよ.
というものを実行しようとしていました。
発生している問題
scanが反応しているのかいないのか、数字を打っても処理が行われない。
該当のソースコード
c言語
1 2コード 3 4#include<stdio.h> 5#define PI 3.1415926536 6int main(void){ 7 8 double r; 9 double n; 10 double h; 11 printf("please enter the radius,height and split? \n"); 12 scanf("%lf",&r); 13 scanf("%lf",&h); 14 scanf("%lf",&n); 15 double i; 16 double val=0; 17 for(i=1;i<n;i++){ 18 val=val+r*r*(1-i/n)*(1-i/n)*PI*h/n; 19 } 20 printf("%lf",val); 21 return 0; 22} 23 24 25```### 試したこと 26 27printfの位置を変える、n,h,iをscanfにしてみる等を行いましたが解決しませんでした。 28###現在の出力 29please enter the radius,height and split? 30123 310.000000%
コードを変更されたようですが、入力が正しく行われているか確認しましたか?
手元では、値が出力されましたが、、、(正しいかの検証はしてない)
確認ですが、
問題は、底辺の半径 r, 高さ h の円錐を h を n 等分する。
n等分したときの一番上をn個目としたとき
n-1個の円柱 とn個目の円錐ができる。
1 ~ n-1個目の円柱に対してそれぞれ体積を求め、それらを積算することで n-1個分の円柱の体積を求める。
で合っていますか?
実際に試した入力データと出力結果を追記してください。
pepperleafさん、kazuma-sさん
行いました、以下の通りです。
please enter the radius,height and split?
123
0.000000%
crimson_Tideさん、
はい、その解釈で大丈夫です。
r*r*(1-i/n)*(1-i/n)*PI*h/n
この計算式あっていますか?
i=1 のとき 1-1/n が0になって 体積0になりますよ
n=1じゃなければ大丈夫かと思うのですが…
n=2 で2分割したとき
for は i =1 しか実行されませんよね
r*r*(1-i/n)*(1-i/n)*PI*h/n が0になるので valは0になると思うのですが、私何か勘違いをしているのでしょうか
ああすみません
1-i/n を(1-i)/n と見誤っていました。
大変失礼しました
https://paiza.io/ja/projects/new
こちらのサイトにコード貼り付けて、入力タブに1 2 3を入力して試したら
please enter the radius,height and split?
1.163553
と出力されました。
↓試した結果(リンク切れ起こすかも)
https://paiza.io/projects/c0bqbTdHsrm6w7jQqx5rKw
AtCoderという競技プログラミングのサイトにある実行テスト環境でも、私のローカル環境でもC++ですが、同様の結果になりました。
文法的には問題なさそうですけど、実行環境の問題ですかね?
実行ファイルを一度消して、コンパイルし直してみてどうでしょう。
scanが反応してるかどうかは、scan後にn,h,r変数を出力してみて確認されてはどうでしょうか。
問題なければ for文の計算前後のvalの値を出力して確認してみましょう。
ありがとうございます!解決しました。
同じ問題を抱えた方のためにも、原因を教えていただけますか?
全角だったのが原因だと思います。お騒がせしました。
回答2件
あなたの回答
tips
プレビュー