- ベストアンサー
プログラミングについて。
- みんなの回答 (16)
- 専門家の回答
質問者が選んだベストアンサー
回答No.11にあるように、プログラムの動作どおりに1stepづつ計算結果を全て書いていけば判ることです。 ----ここから開始---- 100行目 N=0 110行目 X=1 120行目 IF文判定:X<=2なので130行目以下の計算実行 130行目 N=0+1=1 140行目 X=1 x 1.05 = 1.05 150行目 120行目に戻る 120行目 IF文判定:X<=2なので130行目以下の計算実行 130行目 N=1+1=2 140行目 X=1.05 x 1.05=1.1025 150行目 120行目に戻る ・ ・ (以下この繰り返しなのでN=13まで中略) ・ 130行目 N=13+1=14 140行目 X=1.88564914232323560791015625 x 1.05=1.9799315994393973883056640625 150行目 120行目に戻る 120行目 IF文判定:X<=2なので130行目以下の計算実行 130行目 N=14+1=15 140行目 X=1.9799315994393973883056640625 x 1.05=2.078928179411367257720947265625 150行目 120行目に戻る 120行目 IF文判定:X>2なのでIF文実行の要件を満たさないためTHEN以下の処理は行われず、160行目へ処理が飛ばされる 160行目 END IFでIF文処理は終了 170行目 PRINT Nで現在変数Nに格納されている数値(直前の計算結果であるN=15)を出力する 180行目 終了 です。 >何故X=1.05^Nになるのでしょう? 1.05^Nは「1.05のN乗」すなわち、1.05をN回掛け合わせたという意味ですが、それを理解されていますか? 130行目のNは「1.05を掛け合わせた回数」を表しています。 140行目が1.05を複数回掛け合わせている計算処理で、140行目の計算式は常にX=1.05^Nの計算を行っています。 (N=2のときは1.05x1.05で1.05^2、N=3のときは[N=2のときのXの計算結果]x1.05なので1.05^3。以下同様) これが理解できない限り、この問題は永遠に判らないままです。 15回目の処理が終了した時点で、Xの値はX>2となりますよね。 で、16回目の処理を行おうとして150行目から120行目に戻った時点で、IF文の実行条件であるX<=2を満たさなくなります。なので130行目以下の計算処理は行われません。「直前の計算結果」はこの15回目の計算結果を指します。 「ただ計算する」だけではなく、このプログラムを動作の流れにそって1行づつ実行をたどっていけば全てが理解できるはずです。それが理解できていない、ということはプログラムを動作の流れに沿って追えていない(若しくは追っていない)ことになります。 判らなければ判るまで自分で考えて、プログラムを1ステップ(1行)づつ追って手計算で実行してみる、ということを面倒くさがらずにやることが重要であり、プログラムを理解するためには必要なことです。 とにかく努力をして自分で考える、その習慣をつけらえることをお勧めします。 以上、ご参考まで。
その他の回答 (15)
- Higurashi777
- ベストアンサー率63% (6224/9771)
>2回目で終わるのではないのでしょうか?だって、N=2で、2.1になりますよね?3回目以降はないのでしょうか? NとXを混同されていますね。Nはあくまでも「IF文を回した回数」をカウントしているだけです。 1回目の演算結果 130行目 N(新しいN)=N(元のNの値)+1 0+1で1が代入されます。 140行目 X(新しいX)=X(元のXの値)*1.05 1*1.05で1.05が代入されます。 2回目の演算結果 130行目 N(新しいN)=N(元のNの値)+1 1+1で2が代入されます。 140行目 X(新しいX)=X(元のXの値)*1.05 1.05*1.05で1.1025が代入されます。 3回目の演算結果 130行目 N(新しいN)=N(元のNの値)+1 2+1で3が代入されます。 140行目 X(新しいX)=X(元のXの値)*1.05 1.1025(=1.05*1.05)*1.05の計算結果が代入されます。 この時点でN=3、X=(1.05*1.05)*1.05 = 1.05^3(1.05の3乗)ですから、計算結果としてはX=1.05^Nですよね。 これをXの値が2を超えるまで実行されます。 で、Xが2を超えた時点でIF文の処理で130/140/150行目は実行されずに160行目へ飛びます。 この時点でのX,Nの値は「直前の計算結果が2を超えた直後の値」になります。 なので、Nの値をPRINTで表示すれば「最小の整数N」の計算結果が出力される、ということになります。 以上、ご参考まで。
補足
直前の計算結果が2を超えた直後の値とはどういうことでしょうか?教えていただけると幸いなのですが。すみません。
- QCD2001
- ベストアンサー率58% (325/554)
文法が全く分からないまま、本質的でない枝葉の質問を繰り返しているようですね。 IF THEN END IF という構文です。 END IF までの間に書かれている3行がTHEN の後ろに来る文です。 長いので改行して3行になっているだけです。 前の質問にもありましたが、 LET というのはある変数にある値を代入せよ、という命令文であって、 =の左右が等しいという命題ではありません。 Xの値に1.05をかけたものを計算し、この値をXに代入しなさい。 という命令文です。ですから、この命令文を実行する前と後ではXの値は変化しています。 「=」は等号ではありません。 LET と組み合わせることで、Xの値に○○を代入しなさい。という命令文なのです。 コンピュータは自分で考えたりしません。こういう計算や処理をしなさい。という命令をすることで、計算やデータ処理をします。 そのための命令がプログラムです。 ですから、プログラムとはコンピュータに対する命令文の集合なのです。 A=B と書いてあっても、コンピュータはAとBとが等しい。ということを認識する能力を持っていません。 問題やプラグラムの例を読む前に、文法の入門書を読むことをお勧めします。
- wormhole
- ベストアンサー率28% (1626/5665)
>次の数学のBASICで、なぜ、THENの後ろが何もないのでしょうか?どういうことでしょうか? 削除されているようで見つかりませんが 以前にされた、あなたの質問の中に、 その説明がされた本のスクリーンショットありましたよ。 >それと、なぜ、行140は、LET X=X✳︎1.05なのでしょうか? スクリーンショットの本の日本語の文章ちゃんと読んでいますか?
- Higurashi777
- ベストアンサー率63% (6224/9771)
120行目から始まるIF文は、160行目のEND IFまでがひとくくりとなります。 すなわち、120行目のIF文の処理としては、 1)Xが2以下である場合は130行目以下を順次実行する 2)Xが2を超えた時点でこの120-160行目の処理は行われず、170行目へ飛ぶ という処理となります。 130行目以降の処理は、以下になります。 140行目:Nの値を、現在設定されているNの値に1を足したもので設定しなおす 150行目:Xの値を、現在設定されているXの値に1.05を掛けたもので設定し直す 初期値ではN=0ですから、1.05^0=1ですよね。ですからXの初期値は1に設定されています。 初回の処理ではX=1ですから120行目のIF文の分岐で130行目以降の処理へ入ります。 130行目でNの値を0から1に設定しなおします。(N=N+1) 140行目で、Xの値を元のXの値に1.05を掛けたものに設定しなおします。 で、150行目で120行目へ戻ります。 2回目の処理としては、 130行目でNの値を1から2に設定しなおします。(N=N+1) 140行目で、Xの値を元のXの値に1.05を掛けたものに設定しなおします。 すなわち、現在のXの値は1.05ですから、結果として1.05^2の計算になります。 3回目以降もこの処理が行われますから、結果としてXの値は1.05^Nになります。 以上、ご参考まで。
補足
あの、すみません。2回目で終わるのではないのでしょうか?だって、N=2で、2.1になりますよね?3回目以降はないのでしょうか?教えていただけると幸いなのですが。すみません。
- szk9998
- ベストアンサー率45% (1026/2241)
>THENの後ろが何もないのでしょうか? と言われても、それが文法だから。それだけ。 >なぜ、行140は、LET X=X✳︎1.05なのでしょう と言われても、それを計算したいからこそのプログラム。 なぜと言われても・・・ X*1.05を繰り返して、1.05のn乗を求める計算式なのだから それだけ。 何がわからないのかが、わからないですよ。 基礎からプログラム文法を学習しないと個別に聞いてもムダかと。
- 1
- 2
補足
では、が2を超えた直後の値というのはどういうことでしょうか?2を超えたはわかりますが、直後の値というのがわかりません。直前と言ったり、直後と言ったりもう訳がわかりません。どういうことか教えていただけると幸いなのですが。すみません。物分かりが悪くて。