フィボナッチ数列の項は、その直前の連続する二つの項の和である。
f( n ) = f( n - 1 ) + f( n - 2 )
但し、 f(0) = 0, f(1) = 1 である。
フィボナッチ数列の連続する項の差の比
z = { f( n - 1 ) - f( n - 2 ) }/ { f( n ) - f( n - 1 ) }
は、 n が大きくなれば、ある値に収束する。この値の近似値を求める プログラムを書き、その値を示せ。この値は黄金分割比と呼ばれる。
フィボナッチ数列は関数 fibonacci を作って求め、項は配列に表せ。まず 30 項まで求め、黄金分割比の値が収束していく様子を出力して確かめよ。収束判定のために定数 dif = 1.0 e -6 を宣言し、 連続する z の差の絶対値が dif 以下になったとき、収束したとして計算を終了するプログラムを作りなさい。
この問題について質問なんですが
コンパイルはできるんだけど、結果がうまく表示されません。 すみませんがわかる方教えてくれませんか?
program pe1_2(input,output);
const dif = 1.0e-6;
var i,m, g : integer;
f, z,q : array [0..500] of real;
function fibonacci(n: integer):integer;
begin
if (n >=0) and (n <=1) then fibonacci:=n
else fibonacci:=fibonacci(n-1)+fibonacci(n-2);
end; { fibonacci }
begin
f[i]:=fibonacci(i);
writeln('30項まで求めます ');
for i :=1 to 30 do
begin
writeln('f(',i:2,')=',f[i]:1);
end;
write('m=');
readln(m);
for i:= 3 to m do
repeat z[i]:=(f[i-1]-f[i-2])/(f[i]-f[i-1]);
until dif >= z[i]-z[i-1];
writeln(z[i]);
{writeln('z(',i:3,')=',z[i]:1,','); }
end.
No.1
- 回答日時:
pascalを使ったことがないので的外れかもしれませんがfibonacci(integer)はオーバーフローしていませんか?
あと、配列を作って答えを入れるなら、同じ計算を何度もする必要はないような気がしますが.....まあ単純な計算だから大丈夫かな。
プログラムの文法についてはわかりません。
>うまく表示されない
というのは、途中で止まってしまうのか、まったく動かないのか、間違えた答えが表示されるのか、そのあたりがわかるとよいかも。
No.2ベストアンサー
- 回答日時:
f[i]:=fibonacci(i);がfor loopの外に出ちゃってますね。
-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
program pe1_2(input,output);
const dif = 1.0e-6;
var i: integer;
f: array [0..500] of real;
function fibonacci(n: integer):integer;
begin
if (n >=0) and (n <=1) then fibonacci:=n
else fibonacci:=fibonacci(n-1)+fibonacci(n-2);
end; { fibonacci }
begin
writeln('30項まで求めます ');
for i :=1 to 30 do
begin
f[i]:=fibonacci(i);
writeln('f(',i:2,')=',f[i]);
end;
end.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) vba 最大値 条件分岐 4 2022/12/10 10:20
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
VBA public変数はどのようなこ...
-
sublimit textっていうエディタ...
-
C#のループでtextboxに値を入れ...
-
[VB6] SQLの作成について
-
visual basic初心者です。 visu...
-
Pythonのre.split()の正規表現...
-
プログラムの素朴な質問です 分...
-
Functionの戻り値を配列にした...
-
Excel VBAでsub,dimは何の略?
-
VBSのプログラム
-
リストビューの列ヘッダーの幅...
-
エクセルVBAでテキストボッ...
-
二点の座標から距離や角度を求...
-
VB.NETでのイベントの途中終了
-
ユーザーフォームへのデータ入...
-
GetNextWindowがDLLファイルUse...
-
C言語のサフィックスについて
-
他のフォームから別のフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
verilogのcase文
-
【FPGA】VHDLのprocessとevent
-
vbsのmsgboxランダム表示について
-
TreeViewのTag情報取得
-
Verilogの文法
-
リスト間のアイテム移動について
-
日付の重複
-
文字の連結がうまくいかない
-
エクセルVBAついて ①if•••••the...
-
delphi
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
Scilabの&と&&に関する質問です
-
vb2010webページのリンクをクリ...
-
EXCEL VBA 文字 アドレス 検...
-
整順リスト形式の英単語辞書(pa...
-
Matlab
-
三項でたとえば交換って
おすすめ情報