[VBA] バクテリアの増殖プログラム

[VB-02] バクテリアの増殖

 1 時間ごとに分裂して個数が 2 倍になるバクテリアがあります。このバクテリアが最初 (時刻 t = 0) に 1 個存在したとして、1 億個を超えるときの時間 t と、そのときのバクテリアの個数 n を出力するコードを書いてください。
 

VB-02 のヒント

ある数を超えるまで という問題に適したループ処理の方法があります。

・個数は 2t を計算させるのではなく、再帰 という方法で処理してみましょう。
 

[Amazon書籍] 驚異のバクテリア (ニュートンムック)
[内容:大腸菌、ビフィズス菌、酵母など、身近にいるけれど、顕微鏡を使わないと見ることのできない小さな細菌たち (bacteria) の生態と、人間の生活に与える影響について幅広く解説した一冊。]
[Amazon書籍] バクテリアのはなし (入門ビジュアルサイエンス)
[内容:VRE (バンコマイシン耐性腸球菌) の発生で抗生物質の効かない細菌に対抗するためにビフィズス菌や乳酸菌が利用されています。小さな世界でおこる細菌同士の攻防の様子など、バクテリアについての最新情報をビジュアル付きで伝える一冊。]

 

VB-02 の解答 (Do Until ... Loop を使います)

 時間とバクテリアの個数をそれぞれ t, n で表し、初期値は 0, 1 とします。
 Do Until ... Loop ステートメントを使って、n が 108 を超えるまで、

t に 1 を加え、n は 2 倍する

という処理を繰り返します(あるいは Do While ... Loop を使います)。

'バクテリアの増殖プログラム

Sub Bacteria()

 Dim n As Long
 Dim t As Long

 '個数の初期値
 n = 1

 '時刻の初期値
 t = 0

 Do Until n > 10 ^ 8

  '時間に 1 を加える
  t = t + 1

  '個体数を 2 倍にする
  n = n * 2

 Loop

 Debug.Print "t = " & t
 Debug.Print "n = " & n

 End Sub

 このマクロを実行すると、

 t = 27
 n = 134217728

という結果が表示されます。すなわち、バクテリアは 27 時間後に 134,217,728 個に増殖します。

スポンサーリンク
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください