パズル万華鏡

面白いパズルの紹介と解説をします。

分数による近似値問題の考察

 分数による近似値問題の考察を示します。

 

(考察)

 問題(1)から(9)を解くプログラムを示す。

プログラム(AP111.bas)

' << AP111.bas >>
' Tiny Basic 
'
Public P(10): ' 順列を保存する配列。
Public N: ' nの値。
Public ERR: ' 誤差。
'
Do
' Nの値を読み込む。
Read N
If N <= 0 Then Exit Do
'
' 初期設定。
For I=1 To 9: P(I)=I: Next I
ERR=1
'
Print"分数    ";
Print"(分数)^2  ";
Print"(分数)^2-";N
' 順列の生成。
Call Perm(1)
Print
Loop
End
'
' 順列を生成する再帰関数を基に、近似値を探索する。
Sub Perm(K)
If K > 9 Then
V1=10000*P(1)+1000*P(2)+100*P(3)+10*P(4)+P(5)
V2=1000*P(6)+100*P(7)+10*P(8)+P(9)
V=(V1*V1-N*V2*V2)/(V2*V2)
'
' 近似値の更新と表示。
If Abs(V) <= ERR Then
ERR=Abs(V)
Print Using"#####/####";V1;V2;
Print Using" ##.########";V1*V1/(V2*V2);
Print Using" ##.########";V
End If
Exit Sub
End If
'
For I=K To 9
' 交換。
W=P(K): P(K)=P(I): P(I)=W
Call Perm(K+1)
' 交換を戻す。
W=P(K): P(K)=P(I): P(I)=W
Next I
End Sub
'
' データ。
Data 1, 2, 3, 4, 5, 6, 7, 8, 9, 0

f:id:isemba:20160224165315j:plain