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 (діапазон значень: від 0 до 4294967295 для 32 бітів і від 0 до 18446744073709551615 для 64 бітів)
Числа можна перетворювати на інші числові типи за допомогою перетворення типів.
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)
У цій вправі ми писатимемо код для аналізу виробництва на автомобільному заводі.
Автомобілі виготовляють на конвеєрі. Конвеєр має певну швидкість, яку можна змінювати. Чим вища швидкість конвеєра, тим більше автомобілів виготовляють. Проте зміна швидкості конвеєра також змінює кількість автомобілів, виготовлених успішно, тобто автомобілів без жодних помилок у виробництві.
Реалізуйте функцію, яка приймає кількість автомобілів, виготовлених за годину, і частку успішних автомобілів, та обчислює кількість справних автомобілів, виготовлених за годину.
Частка успішних автомобілів задається у відсотках, від 0 до 100:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
Примітка: повернене значення має бути float64.
Реалізуйте функцію, яка приймає кількість автомобілів, виготовлених за годину, і частку успішних автомобілів, та обчислює, скільки автомобілів успішно виготовляється щохвилини:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
Примітка: повернене значення має бути int.
Зазвичай виготовлення одного автомобіля окремо коштує $10,000, незалежно від того, успішний він чи ні. Але з трохи планування 10 автомобілів можна виготовити разом за $95,000.
Наприклад, 37 автомобілів можна виготовити так: 37 = 3 × групи по десять + 7 окремих автомобілів
Отже, вартість 37 автомобілів така: 3*95,000+7*10,000=355,000
Реалізуйте функцію CalculateCost, яка обчислює вартість виробництва певної кількості автомобілів, незалежно від того, успішні вони чи ні:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
Примітка: повернене значення має бути uint.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 34 концепції165 вправ та справжнє наставництво від людей, і все це безкоштовно.