Треки
/
PHP
PHP
/
Вправи
/
Піца й Пі
Піца й Пі

Піца й Пі

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

Вступ

Цілі числа

Цілі числа - це числа без дробової частини, які належать множині {..., -2, -1, 0, 1, 2, ...}. Максимальне й мінімальне значення цілого числа визначає система, у якій виконується PHP. Зазвичай у більшості сучасних систем ціле число займає 64 біти, тобто воно може представляти значення від -9_223_372_036_854_775_808 до 9_223_372_036_854_775_807 включно.

<?php

$a = 1234;
$a = 1_234_567;

Цілочислові літерали можна записувати не лише в десятковій системі числення, а й в інших, за допомогою префікса основи:

<?php

$a = 0123; // octal number (equivalent to 83 decimal)
$a = 0o123; // octal number (as of PHP 8.1.0)
$a = 0x1A; // hexadecimal number (equivalent to 26 decimal)
$a = 0b11111111; // binary number (equivalent to 255 decimal)

Узято з документації PHP

Числа з плаваючою комою

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

<?php

$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // as of PHP 7.4.0

Поширені пастки

Не всі числа можна подати, і не всі арифметичні дії можна виконати з числами з плаваючою комою. Використання чисел з плаваючою комою для подання доларів і центів може призвести до помилок округлення.

<?php

$result = 0.1 + 0.2; // => 0.30000000000000004

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

PHP надає низку операторів для виконання арифметичних дій. Для своїх арифметичних операторів PHP дотримується стандартного математичного порядку виконання дій. Ось оператори, які надає PHP:

  • Тотожність (+)
  • Заперечення (-)
  • Додавання (+)
  • Віднімання (-)
  • Множення (*)
  • Ділення (/)
  • Остача (%)
  • Піднесення до степеня (**)
$moles = +'10';
$aLotOfMoles = 6.022 * 10**23 * $moles;

Вказівки

Ліллі любить готувати. Вона хоче влаштувати вечірку з піцою разом із друзями. Щоб якнайкраще використати свої інгредієнти, їй треба знати, скільки кожного з них знадобиться, перш ніж почати.

Щоб розвʼязати цю задачу, Ліллі написала чернетку програми, яка автоматизує частину планування, але їй потрібна наша допомога, щоб її завершити. Допоможемо Ліллі влаштувати пропорційно бездоганну вечірку з піцою?

1. Пропорція тіста

Ліллі полюбляє тонкі хрусткі піци з тоншою скоринкою. Тіста для середини потрібно щонайменше 200 г, але на кожну людину, яку нагодує піца, потрібно ще 20 г тіста.

grams = pizzas * ((persons * 20) + 200)

Ліллі потрібна функція, яка:

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

Наприклад, щоб приготувати 4 піци, які нагодують 8 людей:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateDoughRequirement(4, 8);
// => 1440

2. Трохи соусу

Ліллі дуже ретельно наносить соус, але розмір її піц може бути неоднаковим. З досвіду вона знає, що на одну піцу йде 125 мл соусу. Ліллі потрібна функція, яка обчислює, скільки банок соусу купити.

cans of sauce = pizzas * sauce per pizza / sauce can volume

Наприклад, якщо Ліллі треба приготувати 8 піц, а в кожній банці 250 мл:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateSauceRequirement(8, 250);
// => 4

3. Трохи сиру, будь ласка

Сир продається ідеальними кубами, за розміром.

Формула, яку використовує Ліллі, не є формулою площі піци, адже вона не хоче, щоб сир покривав усю площу. Вона вирішила скористатися такою формулою, щоб визначити, скільки піц певного діаметра (diameter) можна зробити з куба сиру з певною довжиною ребра (cheese_dimension):

pizzas = (cheese_dimension³) / (thickness * PI * diameter)

Створіть функцію, яка:

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

Наприклад, якщо куб сиру має розмір 25×25×25 см, шар сиру завтовшки 0,5 см, а діаметр піц 30 см:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateCheeseCubeCoverage(25, 0.5, 30);
// => 331

4. Справедлива частка

Нарешті, Ліллі хоче, щоб кожна піца ділилася на 8 шматків і шматки рівномірно розподілялися між її друзями.

Створіть функцію, яка:

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

Наприклад:

<?php

$pizza_pi = new PizzaPi();
$pizza_pi->calculateLeftOverSlices(2, 4);
// => 0
$pizza_pi->calculateLeftOverSlices(4, 3);
// => 2
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
PHP Exercism

Час розпочати Піца й Пі?

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