Population

この実習では1~2人のクラスメートと協力することは問題ありませんが、そのグループのすべての受講生が等しく実習に貢献することが求められます。

集団が特定の大きさに達するのにかかる時間を推定しましょう。

$ ./population
Start size: 100
End size: 200
Years: 9

背景

ラマがn匹いるとしましょう。毎年、n / 3匹のラマが生まれ、n / 4匹のラマが死んでいくとします。

たとえば、ラマがn = 1200匹いるとすると、最初の年には、1200 / 3 = 400匹の新しいラマが生まれ、1200 / 4 = 300匹のラマは死んでしまいます。その年の終わりには、ラマは1200 + 400 - 300 = 1300匹になります。

別の例を試しましょう。ラマがn = 1000匹いる場合、年末には1000 / 3 = 333.33匹の新しいラマが生まれます。ただし、1匹未満のラマは存在できないので、小数部を切り捨てて333匹のラマが生まれるとします。1000 / 4 = 250匹のラマは死んでしまうので、年末には全部で1000 + 333 - 250 = 1083匹のラマがいることになります。

始めるにあたって

実装の詳細

開始サイズから終了サイズまでの人口の増加に必要な年数を計算するように、population.cの実装を完了します。

  • プログラムは、最初にユーザーに初期母集団サイズの入力を求めます。
    • ユーザーが入力した数値が9未満 (許容される最小の母集団数未満) の場合は、9以上の数値を入力するまで、最初の母集団のサイズを入力するように求めるメッセージが再度表示されます (9匹以下のラマから始めると、ラマの個体数はすぐに停滞してしまいます)。
  • プログラムは、ユーザーに終了母集団サイズの入力を求めるプロンプトを表示します。
    • 開始母集団サイズより小さい数値が入力された場合は、開始母集団サイズ以上の数値を入力するまで、終了母集団サイズの入力を求めるプロンプトが再度表示されます (つまり、私たちはラマの人口が増えることを望んでいます!) 。
  • その後、母集団が少なくとも終了値のサイズに達するまでに必要な年数 (整数) を計算します。
  • 最後に、ラマの人口が最終的なサイズに達するのに必要な年数を、Years: n  (nは年数)  とターミナルに出力します。

ウォークスルー

ヒント

  • 何らかの条件が満たされるまで、ユーザーに変数の値の入力を繰り返し求める場合はdo ... whileループを使用します。たとえば、次のコードは、ユーザーが正の整数を入力するまで繰り返しユーザーにプロンプトを表示します。
int n;
do
{
    n = get_int("Positive Integer: ");
}
while (n < 1);

開始サイズが9以上、終了サイズが開始サイズ以上になるように、このコードをどのように調整しますか?

  • 新しい変数を宣言するには、そのデータ型、変数の名前、および (オプションで) 初期値を必ず指定してください。
    • たとえば、何年が経過したかを追跡する変数を作成する必要があるでしょう。
  • 人口が最終的な規模に達するまでに何年かかるかを計算するには、別のループが役立つかもしれません。ループ内では、「背景」で与えられた式に従って母集団のサイズを更新し、経過した年数を更新します。
  • 整数nをターミナルに出力するには、以下のようなコードを使うことができます。
  printf("The number is %i\n", n);

変数nがプレースホルダ%iに代入されるように指定します。

コードのテスト方法

プログラムは、次の例に従って動作する必要があります。

$ ./population
Start size: 1200
End size: 1300
Years: 1
$ ./population
Start size: -5
Start size: 3
Start size: 9
End size: 5
End size: 18
Years: 8
$ ./population
Start size: 20
End size: 1
End size: 10
End size: 100
Years: 20
$ ./population
Start size: 100
End size: 1000000
Years: 115

解決方法がわかりませんか?

check50を使用して以下を実行し、コードの正確さを評価してください。ただし、コンパイルとテストは必ず自分で行ってください。

check50 cs50/labs/2021/x/population

以下を実行し、style50を使用してコードのスタイルを評価します。

style50 population.c

提出方法

次のコマンドを実行し、GitHubのユーザー名とパスワードを入力してログインします。セキュリティのため、パスワードには実際の文字ではなくアスタリスク (*) が表示されます。

submit50 cs50/labs/2021/x/population