Треки
/
Swift
Swift
/
Вправи
/
Ставки фрилансера
Ставки фрилансера

Ставки фрилансера

Навчальна вправа

Вступ

Числа

Swift надає дві основні категорії чисел: цілі числа та числа з плаваючою комою.

У числові літерали можна вставляти підкреслення, щоб покращити читабельність: 1_000_000 - те саме, що 1000000. Числові літерали з плаваючою комою можна записати в десятковій або експоненційній формі.

У більшості випадків для цілих чисел використовують Int, а для чисел з плаваючою комою - Double:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

Арифметичні оператори

Swift надає стандартні арифметичні оператори для числових обчислень:

Оператор Опис Приклад
+ Додавання 4 + 6 дає 10
- Віднімання 15 - 10 дає 5
* Множення 2 * 3 дає 6
Caution

Swift є типобезпечною мовою і не дозволяє змішувати різні числові типи в арифметичних операціях. Не можна напряму додати чи помножити Int та Double; спершу потрібно перетворити один тип, щоб він відповідав іншому.

Ділення

Оператор / виконує ділення. Коли обидва операнди є цілими числами, цілочисельне ділення відкидає дробову остачу:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

Ділення ненульового числа з плаваючою комою на нуль дає inf або -inf. Ділення 0.0 на 0.0 дає nan (Not a Number). Натомість ділення цілого числа на нуль спричиняє помилку під час компіляції або виконання:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

Оператор остачі

Оператор остачі (%) обчислює остачу, що залишається після ділення двох цілих чисел:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

У Swift % - це справжній оператор остачі, а не оператор модуля. Результат завжди має знак першого операнда (діленого), незалежно від знаку другого операнда:

5 % -2  // 1
-5 % 2  // -1

Округлення чисел з плаваючою комою

Округлити число з плаваючою комою можна методом rounded(). Типово rounded() округлює до найближчого цілого. Можна також вказати конкретне правило округлення, як-от .up чи .down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

Виведення типу

Коли ми оголошуємо числову константу чи змінну без анотації типу, Swift виводить її тип:

  • Цілі числа типово мають тип Int.
  • Числа з десятковою точкою типово мають тип Double.
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

Перетворення типу

Щоб виконувати операції між значеннями різних типів, перетворюємо одне значення за допомогою ініціалізаторів типу, як-от Double(_:) чи Int(_:):

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

Вказівки

У цій вправі ми писатимемо код, який допоможе фрилансеру спілкуватися з менеджером проєкту. Ми надамо кілька допоміжних функцій, щоб швидко розраховувати денні та місячні ставки, за потреби зі знижкою.

Спершу встановімо кілька правил між фрилансером і менеджером проєкту:

  • Денна ставка у 8 разів більша за погодинну.
  • У місяці 22 оплачувані робочі дні.

Іноді фрилансер пропонує застосувати знижку до своєї денної ставки (наприклад, для найвідданіших клієнтів або неприбуткових організацій).

Знижки подаються як дробові числа, що позначають відсотки, наприклад 25.0 (25%).

1. Обчислити денну ставку за погодинною ставкою

Реалізуйте функцію dailyRateFrom, щоб обчислити денну ставку, де погодинна ставка передається як параметр. За домовленістю день має 8 оплачуваних годин.

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

Повернена денна ставка має бути Double.

2. Обчислити місячну ставку за погодинною ставкою та знижкою

Реалізуйте функцію monthlyRateFrom, щоб обчислити місячну ставку зі знижкою. Вона приймає два параметри: погодинну ставку та знижку у відсотках.

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

Повернену місячну ставку потрібно округлити вгору (взяти стелю) до найближчого цілого числа.

3. Обчислити кількість повних робочих днів за бюджетом, погодинною ставкою та знижкою

Реалізуйте функцію workdaysIn, яка приймає бюджет, погодинну ставку та знижку й обчислює, на скільки повних днів роботи цього вистачить.

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

Повернену кількість днів потрібно округлити вниз (взяти підлогу) до найближчого цілого числа.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Swift Exercism

Час розпочати Ставки фрилансера?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Swift, а також 35 концепцій116 вправ та справжнє наставництво від людей, і все це безкоштовно.