Goには、整数または浮動小数点の値の集合を表せる基本的な数値型があります。 必要な値の大きさや、アプリケーションが動作しているコンピューターのアーキテクチャ(32ビットや64ビットなど)によって、使う型が変わります。
この演習では、次の型だけを扱います。
int:例:0、255、2147483647。
少なくとも32ビットの符号付き整数です(値の範囲は-2147483648から2147483647まで)。
ただし、これはシステムのアーキテクチャによって変わります。
最近のほとんどのコンピューターは64ビットなので、intは64ビットになります(値の範囲は-9223372036854775808から9223372036854775807まで)。
float64:例:0.0、3.14。
すべての64ビット浮動小数点数の集合を表します。
uint:例:0、255。
intと同じサイズの符号なし整数です(値の範囲は、32ビットでは0から4294967295まで、64ビットでは0から18446744073709551615まで)。
数値は、型変換によって他の数値型に変換できます。
Goは、標準的な算術演算子を数多くサポートしています。
| 演算子 | 例 |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
整数の除算では、余りは切り捨てられます(例:5 / 2 == 2)。
Goには、上記の演算子の省略記法があります(例:a += 5はa = a + 5の省略形です)。
Goは、インクリメント文とデクリメント文の++と--もサポートしています(例:a++)。
型の変換は、変換先の型の名前を持つ関数を使って行います。 例えば:
var x int = 42 // x has type int
f := float64(x) // f has type float64 (ie. 42.0)
var y float64 = 11.9 // y has type float64
i := int(y) // i has type int (ie. 11)
多くの言語では、異なる型の変数に対して算術演算を行えますが、Goではエラーになります。 例えば:
var x int = 42
// this line produces an error
value := float32(2.0) * x // invalid operation: mismatched types float32 and int
// you must convert int type to float32 before performing arithmetic operation
value := float32(2.0) * float32(x)
この演習では、自動車工場での生産を分析するコードを書きます。
車は生産ラインで生産されます。 生産ラインには決まった速度があり、その速度は変更することができます。 生産ラインの速度が速いほど、生産される車の台数も多くなります。 ただし、生産ラインの速度を変えると、正常に生産される車、つまり生産の過程でエラーがなかった車の台数も変わります。
1時間あたりに生産される車の台数と成功率を受け取り、1時間あたりに正常に生産される車の台数を計算する関数を実装してください。
成功率は0から100までのパーセントで与えられます。
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
注意: 戻り値はfloat64にする必要があります。
1時間あたりに生産される車の台数と成功率を受け取り、1分あたりに何台の車が正常に生産されるかを計算する関数を実装してください。
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
注意: 戻り値はintにする必要があります。
通常、車を1台ずつ生産するには、成功するかどうかに関わらず1台あたり10,000ドルかかります。 しかし、少し工夫すれば、10台の車をまとめて95,000ドルで生産できます。
たとえば、37台の車は次のように生産できます。 37 = 10台のまとまり3組 + 単体の車7台
つまり、37台の車のコストは次のとおりです。 3*95,000+7*10,000=355,000
成功するかどうかに関わらず、指定した台数の車を生産するコストを計算するCalculateCost関数を実装してください。
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
注意: 戻り値はuintにする必要があります。