На практиці розібратися із переводом чисел між різними системами числення, закріпити знання із проектування програм на Python та використання функцій.
В цій практичній ми спробуємо зробити головний акцент на якості та чистоті нашого коду. Тут вже не можна буде написати всю программу одним "полотном" - вам потрібно буде аккуратно розбити програму на функції, так щоб уникнути повторення коду та заплутанності. Пам'ятайте про загальні правила:
- Якщо якійсь фрагмент коду з декількох або більше рядків повторюється в вашій програмі у незмінному (або майже незмінному) вигляді, варто подумати над тим щоб винести його в окрему функцію
- Завжди давайте розгорнуті та зрозумілі імена всім змінним та функціям
- Якщо код вашої основної програми або якоїсь функції стає таким великим, що ледь поміщається у один екран монітора (70-80 рядків) - варто подумати щоб розбити його на окремі функції для зручності сприйняття
Завдання має різні рівні складності і ви взмозі обрати той, на якому вам буде більш комфортно розв'язувати завдання.
1 рівень. Напишіть програму, що просить користувача ввести число. Користувач може ввести число в одному із двох форматів: 1) десяткове число вводиться в звичайному вигляді (наприклад, 34523
), 2) двійкове число вводиться з префіксом 0b
(наприклад, 0b1010
- це число 10, але записане в двійковому форматі). Після введення, виконайте переведення введенного числа у інший (двійковий або десятковий відповідно) формат та виведіть число у цьому форматі на екран.
Після закінчення переведення, програма має запитати користувача, чи бажає він перевести ще одне число. Якщо ні, то програма має завершитись, якщо так - повторити всі дії спочатку.
На цьому рівні ваша програма має складатися мінімум з трьох функцій - одна що переводить десяткові числа в двійкові, друга - навпаки, і третя, яку ви будете викликати всередині циклу while
поки юзеру не набридне конвертувати числа
2 рівень. Додайте до попередньої програми підтримку шістнадцяткових чисел. Таке число вводиться із префіксом 0x
(наприклад, 0x3A5
). Після введення числа, запитайте у довільному форматі користувача у яку систему числення слід перевести число та виконайте цю дію.
3 рівень. Розширьте програму до підтримки будь-яких систем численя за основою від 2 до 16. Число довільної системи числення може вводитись за допомогою закінчення xN
, де N - основа системи числення, наприклад 3123x4
- число записане в системі числення за основою 4
Якщо ви хочете повторити загальну теорію систем числення, можна подивитись це або це відео, або почитати підручник чи статтю.
На Jetbrains Academy повторіть уважно прочитайте та вивчіть матеріал про функції.
З програмування треба освіжити наступні теми:
- функції;
- цикли;
- робота з рядками (slicing точно знадобиться);
- цілочисельна арифметика (ділення з остачею та без);
При виконанні вам знадобиться алгоритм запису довільного десяткового числа N у системі числення за основою m:
1. Визначити Х як порожній рядок;
2. Знайти залишок від ділення N на m, додати результат _ліворуч_ окремим розрядом до Х
3. Поділити N на m цілочисельним діленням (тобто відкидаючи залишок), результат записати в N
4. Повторювати пункти 2-3 поки N не дорівнює нулю
Наприклад, переведемо десяткове число 17 у двійкову систему числення:
- Залишок від ділення 17 на 2 - 1. X = 1
- Ділимо цілочисельно 17 на 2 - отримуємо 8.
- Залишок від ділення 8 на 2 - 0. X = 01
- Ділимо цілочисельно 8 на 2 - отримуємо 4.
- Залишок від ділення 4 на 2 - 0. X = 001
- Ділимо цілочисельно 2 на 2 - отримуємо 2.
- Залишок від ділення 2 на 2 - 0. X = 0001
- Ділимо цілочисельно 2 на 2 - отримуємо 1.
- Залишок від ділення 1 на 2 - 1. X = 10001
- Ділимо цілочисельно 1 на 2 - отримуємо 0.
- N дорівнює нулю, програму завершено. X = 10001
Для зворотнього переведення варто пам'ятати що якщо число ABCD записане у системі числення за основою N, то його можна представити як (^
- степінь)
ABCD = A*N^3 + B*N^2 + C*N^1 + D* N^0
Наприклад, 123 = 1*10^2 + 2*10^1 + 3*10^0
, або 0b1101 = 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
Максимальний бал - 6:
- 1 бал - першій рівень
- 1.5 бали - другий рівень
- 1.5 бали - третій рівень
- 1 бал - відповідь на питання при здачі
- 1 бал - виконання додаткового практичного завдання при здачі