Skip to content

Latest commit

 

History

History
76 lines (54 loc) · 7.81 KB

assignment_4.md

File metadata and controls

76 lines (54 loc) · 7.81 KB
Практична робота №4

Системи числення

Мета роботи:

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

Загальний опис

В цій практичній ми спробуємо зробити головний акцент на якості та чистоті нашого коду. Тут вже не можна буде написати всю программу одним "полотном" - вам потрібно буде аккуратно розбити програму на функції, так щоб уникнути повторення коду та заплутанності. Пам'ятайте про загальні правила:

  1. Якщо якійсь фрагмент коду з декількох або більше рядків повторюється в вашій програмі у незмінному (або майже незмінному) вигляді, варто подумати над тим щоб винести його в окрему функцію
  2. Завжди давайте розгорнуті та зрозумілі імена всім змінним та функціям
  3. Якщо код вашої основної програми або якоїсь функції стає таким великим, що ледь поміщається у один екран монітора (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 у двійкову систему числення:

  1. Залишок від ділення 17 на 2 - 1. X = 1
  2. Ділимо цілочисельно 17 на 2 - отримуємо 8.
  3. Залишок від ділення 8 на 2 - 0. X = 01
  4. Ділимо цілочисельно 8 на 2 - отримуємо 4.
  5. Залишок від ділення 4 на 2 - 0. X = 001
  6. Ділимо цілочисельно 2 на 2 - отримуємо 2.
  7. Залишок від ділення 2 на 2 - 0. X = 0001
  8. Ділимо цілочисельно 2 на 2 - отримуємо 1.
  9. Залишок від ділення 1 на 2 - 1. X = 10001
  10. Ділимо цілочисельно 1 на 2 - отримуємо 0.
  11. 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 бал - виконання додаткового практичного завдання при здачі