• 締切済み

繰り返し構文の使い方が分かりません。

フィボナッチに関するプログラムを組んでいます。繰り返し構文を利用したいのですが、よく分かりません。 先に念のため、フィボナッチ数列とその周期について説明しておきます。 まずフィボナッチ数列とは、1,1,2,3,5,8,13,21,34,55,89,144,233,377,610, のような数列のことです。 それぞれの項をある自然数で割った場合、その余りの数には特定の周期性が見られます。具体的な例でいくと、例えば5でそれぞれの項を割り、その余りを書き下していくと 1,1,2,3,0,3,3,1,4,0,4,4,3,2,0,2,2,4,1,0, 1,1,2,3,0,3… と、あるところから先はそれまでの列の繰り返しになります。この場合、ひと周期の長さは20ということになります。 今回組んだ以下のプログラム(注1)は、TextBox1に任意の自然数を入力し、その数で割っていった場合の周期の長さを表示するというものです。しかしこれでは、いちどに1つの周期しかもとめることができません。これを、例えば1000と指定したら、2から1000までの(注2)それぞれの数で割っていった場合の周期の長さを全て羅列するプログラムにしたいと思っています。プログラムに関しては全くの素人ですので、もしお時間があればご解答お願いいたします。 注1 ほとんど他の方にやってもらったものです。 注2 このプログラムの性質上、割る数として1を指定するとエラーが生じるようです。しかし割る数1なら周期も1なので問題ありません。 Dim a(3), c, n, x As Long a(1) = 1 : a(2) = 1 : n = 2 x = Val(TextBox1.Text) Do n = n + 1 a(3) = (a(1) + a(2)) Mod x If a(2) = 1 AndAlso a(3) = 1 Then c = n - 2 Exit Do End If a(1) = a(2) a(2) = a(3) Loop Label1.Text = c

みんなの回答

  • tom11
  • ベストアンサー率53% (134/251)
回答No.2

1    3    2 1    4    3 1    5    0 1    6    3 1    7    3 1    8    1 1    9    4 1    10    0 1    11    4 1    12    4 1    13    3 1    14    2 1    15    0 1    16    2 1    17    2 1    18    4 1    19    1 1    20    0 2    21    1 2    22    1 2    23    2 2    24    3 2    25    0 2    26    3 2    27    3 2    28    1 2    29    4 2    30    0 2    31    4 2    32    4 2    33    3 2    34    2 2    35    0 2    36    2 2    37    2 2    38    4 2    39    1 2    40    0 3    41    1 3    42    1 3    43    2 3    44    3 3    45    0 3    46    3 3    47    3 3    48    1 3    49    4 3    50    0 3    51    4 3    52    4 3    53    3 3    54    2 3    55    0 3    56    2 3    57    2 3    58    4 3    59    1 3    60    0 4    61    1 4    62    1 4    63    2 4    64    3 4    65    0 4    66    3 4    67    3 4    68    1 4    69    4 4    70    0 4    71    4 4    72    4 4    73    3 4    74    2 4    75    0 4    76    2 4    77    2 4    78    4 4    79    1 4    80    0 5    81    1 5    82    1 5    83    2 5    84    3 5    85    0 5    86    3 5    87    3 5    88    1 5    89    4 5    90    0 5    91    4 5    92    4 5    93    3 5    94    2 5    95    0 5    96    2 5    97    2 5    98    4 5    99    1 5    100    0 6    101    1 6    102    1 6    103    2 6    104    3 6    105    0 6    106    3 6    107    3 6    108    1 6    109    4 6    110    0 6    111    4 6    112    4 6    113    3 6    114    2 6    115    0 6    116    2 6    117    2 6    118    4 6    119    1 6    120    0 7    121    1 7    122    1 7    123    2 7    124    3 7    125    0 7    126    3 7    127    3 7    128    1 7    129    4 7    130    0 7    131    4 7    132    4 7    133    3 7    134    2 7    135    0 7    136    2 7    137    2 7    138    4 7    139    1 7    140    0 8    141    1 8    142    1 8    143    2 8    144    3 8    145    0 8    146    3 8    147    3 8    148    1 8    149    4 8    150    0 8    151    4 8    152    4 8    153    3 8    154    2 8    155    0 8    156    2 8    157    2 8    158    4 8    159    1 8    160    0 9    161    1 9    162    1 9    163    2 9    164    3 9    165    0 9    166    3 9    167    3 9    168    1 9    169    4 9    170    0 9    171    4 9    172    4 9    173    3 9    174    2 9    175    0 9    176    2 9    177    2 9    178    4 9    179    1 9    180    0 10    181    1 10    182    1 10    183    2 10    184    3 10    185    0 10    186    3 10    187    3 10    188    1 10    189    4 10    190    0 10    191    4 10    192    4 10    193    3 10    194    2 10    195    0 10    196    2 10    197    2 10    198    4 10    199    1 10    200    0 >注2 このプログラムの性質上、割る数として1を指定するとエラーが生じるようです。しかし割る数1なら周期も1なので問題ありません。 割る数を1にすると、周期性がなくなるでは????

  • machua
  • ベストアンサー率71% (28/39)
回答No.1

環境が手元にないのでなんとなくです。 「x = Val(TextBox1.Text)」の直後に以下を入れて、   Dim i As Integer   For i = 2 To x 「Label1.Text = c 」の直後に以下を入れるとどうでしょうか。   Next 「Label1.Text = c 」箇所で文字列連結されるか疑問なので、 適切に文字列の連結処理とコードの整形は行ってください。 申し訳ないですが、 脳内でコンパイルしたため動作確認はできていません。