Skip to content

Latest commit

 

History

History
73 lines (53 loc) · 7.42 KB

assignment_2.md

File metadata and controls

73 lines (53 loc) · 7.42 KB
Практична робота №2

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

Мета роботи:

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

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

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

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

Завдання

Як і в минулій роботі, завдання має різні рівні складності і ви взмозі обрати той, на якому вам буде більш комфортно розв'язувати завдання.

1 рівень. Напишіть програму, що просить користувача ввести число. Користувач може ввести число в одному із двох форматів: 1) десяткове число вводиться в звичайному вигляді (наприклад, 34523), 2) двійкове число вводиться з префіксом 0b (наприклад, 0b1010 - це число 10, але записане в двійковому форматі). Після введення, виконайте переведення введенного числа у інший (двійковий або десятковий відповідно) формат та виведіть число у цьому форматі на екран.

Після закінчення переведення, програма має запитати користувача, чи бажає він перевести ще одне число. Якщо ні, то програма має завершитись, якщо так - повторити всі дії спочатку.

2 рівень. Додайте до попередньої програми підтримку шістнадцяткових чисел. Таке число вводиться із префіксом 0x (наприклад, 0x3A5). Після введення числа, запитайте у довільному форматі користувача у яку систему числення слід перевести число та виконайте цю дію.

3 рівень. Розширьте програму до підтримки будь-яких систем численя за основою від 2 до 16. Число довільної системи числення може вводитись за допомогою закінчення xN, де N - основа системи числення, наприклад 3123x4 - число записане в системі числення за основою 4

Що повторити

Якщо ви хочете повторити загальну теорію систем числення, можна подивитись це або це відемо, або почитати підручник чи статтю

З програмування треба освіжити наступні теми:

  • функції;
  • цикли;
  • рекурсія (не обов'язково використовувати, але будуть питання на практичній);
  • робота з рядками;
  • цілочисельна арифметика (ділення з остачею та без);

Як виконувати

При виконанні вам знадобиться алгоритм запису довільного десяткового числа 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

Оцінювання

Максимальний бал - 5:

  • 1 бал - першій рівень
  • 1 бал - другий рівень
  • 1 бал - третій рівень
  • 1 бал - відповідь на теоретичні питання при здачі
  • 1 бал - виконання додаткового практичного завдання при здачі