Изучение методики перекладу з однієї системи обчислення до іншої й розробка програми з цією операц
Натиснута клавіша «ДОГОРИ «. У результаті його выполнения. Набагато простіше. Розглянемо її на прикладі перекладу из. Введення вихідного числа. Спочатку йде очікування нажатия. Як мітка підведено до потрібної рядку нажимается клавиша. Ния в двійкову й у шестнадцатиричную можна осуществлять. Коли клавіша буде натиснута, його значення буде присвоено. Значення клавіші ВВЕДЕННЯ. Обидва цих значень… Читати ще >
Изучение методики перекладу з однієї системи обчислення до іншої й розробка програми з цією операц (реферат, курсова, диплом, контрольна)
В У Є Д Є М І Е.
Проблема перекладу з однієї системи обчислення в дру;
гую часто-густо зустрічається при програмуванні. Осо;
бенно часто з’являється така проблема при программиро;
вании на Ассемблері. Наприклад при визначенні адреса.
осередки пам’яті, щоб одержати двоичного чи шестнадцати;
ричного еквівалентів десятеричного числа. Іноді встает.
проблема збільшення швидкості обчислень, і тоді прихо;
дит на допомогу двоичная система обчислення. У этой.
системі обчислення дуже швидко виробляти операцию.
множення шляхом зсуву однієї з операндов в двоичном.
вигляді вліво на число позицій у якій стоїть еди;
ка у другому операнде.
Розглянемо докладніше як і здійснюється. Пусть.
потрібно помножити число 1101 на 101 (обидва вересня двоич;
іншої системі обчислення). Машина робить це следующим.
чином: вона бере число 1101, і якщо перший элемент.
другого множника дорівнює 1 вона заносить їх у сумму.
Потім зрушує число 1101 вліво однією позицію, полу;
чаю цим 11 010 і якщо другий елемент другого мно;
жителя дорівнює одиниці то теж заносить їх у суму. Если.
елемент другого множника нульовий то сума не изме;
няется. У зв’язку з цим, якщо другий множник содержит.
багато нулів, то операція множення виконується довольно.
— 3 ;
довго, т.к. машина перевіряє кожну цифру другого мно;
жителя, зокрема і нулі. Якщо ж самому робити опе;
рацію множення то нулі можна оминути й тоді умно;
жение стане быстрее.
Що ж до застосування шестнадцатиричной системы.
обчислення то тут великі можливості. Во-пер;
вых, деякі стандартні процедури Паскаля і Сі тре;
буют завдання параметрів в шестнадцатиричной системі, а.
по-друге, така система обчислення вельми зручне для.
зберігання інформації, т.к. число в шестнадцатиричном ви;
де займає менше обсягу диска ніж теж число в деся;
теричном, а тим більше двоичном виде.
Отже ми переконалися, що проблему перекладу из.
двоичной системи обчислення в десятеричную, з шестнад;
цатиричной в десятеричную і навпаки дуже актуальна.
2II. ПОСТАНОВКА ЗАДАЧИ.
З запровадження з’ясувалося, що найчастіше встре;
чающиеся системи обчислення це двоичная, шестнадцати;
ричная і десятеричная. Іноді трапляється восьмирич;
ная система обчислення, але це буває так рідко, що не.
слід за цьому. Отже, наше завдання осу;
ществить переведення з двоичной системи обчислення в деся;
теричную і шестнадцатиричную, з десятеричной в двоич;
ную і шестнадцатиричную і з шестнадцатиричной в двоич;
ную і десятеричную, тобто. взаємно зв’язати всі ці три.
системи исчисления.
— 4 ;
ТЕОРЕТИЧНА ОСНОВА РІШЕННЯ ЗАДАЧИ.
Які ж практично здійснюється переклад з одной.
системи обчислення до іншої? Спробуємо разобраться.
Припустимо ми мусимо перевести число 567 десятеричной.
системи в двійкову систему. Робиться наступним об;
разом: відшукується максимальна ступінь двійки, чтобы.
два в цієї ступеня було менше або дорівнює исходному.
числу. У нашому випадку це 9, т.к. 29=512, а 210=1024.
що більше нашого початкового числа. Отже мы.
отримали число розрядів результату. Воно одно 9+1=10.
Отже результат матиме вид 1ххххххххх, де вместо.
x може тупцювати 1 чи 0. Знайдемо другу цифру результата.
Зведемо Кобзареву двійку в ступінь 9 і віднімемо з исходного.
числа: 567−29=55. Потім порівнюємо із кількістю 28=256.
Оскільки 55 менше 256 то дев’ятий розряд буде нулем,.
тобто. результат вже прийме вид 10хххххххх. Рассмотрим.
восьмий розряд: 27=128 > 55, отже, і восьмий разряд.
буде нулем. Т.к. 26=64 то сьомий розряд дорівнює нулю.
Отже ми отримали чотири старших розряду и.
число набуде вигляду 1000хххххх. Обчислюємо 25=32 і видим,.
що 32 < 55, отже шостий розряд дорівнює 1 (результат>
10 001ххххх), залишок 55−32=23. 24=16 < 23 — п’ятий раз->
ряд 1 => 100 011хххх. Залишок 23−16=7. 23=8 > 7 =>
1 000 110ххх. 22=4 < 7 => 10 001 101хх, залишок 3. 21=2.
3 => 100 011 011х, залишок 1. 20=1 = 1 => 1 000 110 111. Мы.
отримали кінцевий результат.
— 5 ;
еперь спробуємо перевести теж число 567, але вже настав в.
шестнадцатиричную систему. Підхід приблизно такий же.
Визначимо максимальний розряд. Т.к. 162=256 < 567, а>
163=4096 > 567, то максимальний розряд 2+1=3. Опреде;
лим число, яке буде стояти в третьому разряде.
Шукається максимальний множник не більше від 1 до 15,.
щоб поточна ступінь шістнадцяти помножена на этот.
множник була за чи дорівнювала вихідному числу (а.
надалі - залишку). У прикладі цей множитель.
2, т.к. 256*2=512 < 567, а 256*3=768 > 567. Значит.
старший розряд нашого результату дорівнюватиме 22 0, і ре;
зультат набуде вигляду 2хх, де замість x можуть стояти любые.
цифри чи літери з нижче перечисленных:
0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F. Обчислюємо остаток:
567−2*162=55. Визначимо що буде стояти у втором.
розряді. Оскільки 3*161=48 < 55, а 4*161=64 > 55, то.
у другому розряді буде стояти цифра 23 0. Оста;
ток=55−3*161=7. Визначаємо перший розряд: т.к. 160=1.
то цифра першого розряду дорівнює залишку, тобто. 27 0. Таким.
чином отримали число 2237 0, але вже шестнадцатирич;
іншої системі исчисления.
Операція перекладу з десятеричной системи выглядит.
набагато простіше. Розглянемо її на прикладі перекладу из.
шестнадцатиричной системи в десятеричную.
Припустимо ми мусимо перевести число 24A3 °F 0 В десятерич;
ную систему. Беремо старший (4 ый) розряд і будуємо 16.
до рівня 4−1=3, отримуємо 163=4096. Отриманий резуль;
тат множимо на значення четвертого розряду, тобто. 4.
— 6 ;
Виходить 4096*4=16 384. Цей результат ми заносимо в.
суму. Переходимо ось до чого розряду: 162=256. 256.
потрібно помножити на значення третього розряду тобто. A. Как.
відомо в шестнадцатиричной системі обчислення буквы.
від A до F символізують числа від 10 до 15 (A=10, B=11,.
C=12, D=13, E=14, F=15). Помноживши 256 на 10 одержимо 2560.
і це результат додаємо від суми, у якій ми по;
ка було 16 384. У суму ми вийшло 18 944. Перехо;
дим до другого розряду: 3*161=48, додавши це у сумму.
одержимо 18 992. І останнє розряд: 15*160=15. Конечная.
сума дорівнює 219 007 0. Нас результат в десятеричной.
системі исчисления.
2IV. МЕТОДОЛОГІЧНИЙ ПОДХОД.
Розглядаючи переклад з десятеричной системы.
обчислення в двійкову і шестнадцатиричную, можна найти.
багато спільного. У обох випадках саме максимальну сте;
пень, потім у обох випадках порівнюємо залишок з числом.
зведеним в ступінь розряду. Єдина разница.
у тому, що з перекладі в двійкову систему.
підставою ступеня служить двійка, а при перекладі в.
шестнадцатиричную систему підставою служить число шест;
надцять. Постає питання: а чи можна об'єднати оба.
цих перекладу в одну процедуру, у якому в качестве.
параметрів передавати підставу ступеня? За більш под;
робном розгляді перекладу в двійкову систему можно.
помітити, що порівнюючи залишок зі ступенем двійки мы.
— 7 ;
відзначаємо лише хіба що два стану: так чи ні, т. е.
1 чи 0, а під час перекладу в шестнадцатиричную систему мы.
розглядаємо не просто ступінь числа шістнадцяти, а.
твір цієї міри на величину майбутнього разряда.
Постає питання: а чи не одне це теж. Адже умножив.
число на одиницю ми їх змінюємо, а следовательно.
не має значення між тим, порівнювати ступінь з остатком.
чи із залишком помноженим на одиницю. Отже вы;
яснилось, що переведення з десятеричной системи исчисле;
ния в двійкову й у шестнадцатиричную можна осуществлять.
однієї процедурою, у якому як параметра пере;
давати підставу ступеня, тобто. підставу конечной.
системи исчисления.
Щоб не ускладнювати програму і робити множество.
операторів умовного переходу залежно від цього, к.
який системі обчислення належить вихідне число,.
введення цього числа здійснюється єдиним блоком, і исход;
ное число у виконання цього блоку записыва;
ется в вигляді строковой перемінної і передається на обра;
ботку наступному блоку. Другий блок який надійшов в него.
рядок символів обробляє в такий спосіб, що у вы;
ході цього блоку виходить числове значення в десяте;
ричной системі обчислення вихідного числа. І третий.
заключний блок перетворює це числове значення в.
рядок символів, яка буде утримувати результат в.
системі обчислення, яка требовалась.
Через війну такого підходу до розв’язання завдання алго;
ритм зазнає суттєвого спрощення, т.к. у ньому ветвлений.
— 10 ;
2VII. ДОКЛАДНІ РОЗ’ЯСНЕННЯ ПО ПРОГРАММЕ.
Програма починається стандартної строкой:
Program Perevod;
Далі йде описова частина програми. Она.
складається з кількох разделов:
— Uses: вказує які зовнішні TPU файли будет.
використовувати програма (це специфіка Turbo Pascal).
— Const: описує використовувані у програмі констан;
ти. P. S — масив констант рядків символів які з пя;
тидесяти символів. Їм присвоюються значення, которые.
використовуватимуться упорядкування меню.
— Var: описує переменные.
Longint — целочисленный тип, значення может.
змінюватися від -2 147 483 648 до 2 147 483 647 і займає в.
пам’яті 32 бита.
Integer — целочисленный тип, може приймати значе;
ние від -32 768 до 32 767 і обсяг пам’яті в 16.
бит.
Char — символьний тип, може приймати значення лю;
бого символа.
Byte — целочисленный тип, може приймати значения.
від 0 до 255 з займе місця пам’яті у вісім бит.
Set of «0 ». «F «- тип безліч, елементи которого.
можуть бути будь-які символи які перебувають в проміжку от.
" 0 «до «F » .
Array [1.255] of Char — масив символів розміром в.
— 11 ;
255 знаков.
String — рядок символів перемінної довжини (довжина мо;
жет змінюватися від 1 до 255 символов).
Далі у програмі йде опис процедури Zast. Эта.
процедура виводить на екран в стовпчик пункти меню, в ко;
торых вказується з якої й у який систему исчисления.
користувач хоче перевести число. Структура процедуры.
лінійна. Воно складається з кількох операторов:
Window (1,1,80,24) — відводить вікно доступне для вы;
вода.
ClrScr — очищає экран.
TextColor (15) — встановлює колір наступного вы;
вода (яскраво белый).
GoToXY (x, y) — переводить курсор в рядок з номером y.
і стовпець з номером x.
Write () — виводить на екран від позиції курсору вы;
ражение вказаний у скобках.
Далі у програмі слід функція спорудження в сте;
пень. Вона буде використовуватися у дальшій программе.
кілька разів для безпосереднього перекладу з одной.
системи обчислення до іншої, тому довелося оформить.
її як функцію, ніж використовувати кожний раз опера;
ции з логарифмом і експонентою. Спорудження до рівня в.
цієї функції здійснюється звичайним багаторазовим умно;
жением в циклі, і гадаю, на не слід останавли;
ваться.
Продовжимо розгляд програми. Після функції воз;
ведення до рівня йде оператор початку исполнительной.
— 12 ;
частини програми Begin.
Перемінної Y присвоюється значення 1 — начальное.
становище курсору в меню.
Далі йде виклик процедури Zast, внаслідок выпол;
нения якої на екран виводиться список можливих ком;
бинаций переводов.
По виконанні процедури Zast слід оператор ор;
ганизации циклу з пост-условием Repeat. Усередині этого.
циклу здійснюється виконання доведена всією подальшою прог;
раммы.
Усередині нього послідовно йде установка кольору на.
малиновий, переміщення курсору в позицію 13,2 і вывод.
символу мітки поточного становища курсору в меню (2> 0).
Далі йде оператор очікування введення клавіші ReadKey.
Коли клавіша буде натиснута, його значення буде присвоено.
перемінної Klav. Потім іде стирання мітки поточної по;
зиции курсору в меню.
Після цього йде блок умовних операторів If, кото;
рые обробляють натиснуту клавішу виконують определен;
ные дії відповідність до натиснутою клавишей.
Перший оператор If обробляє ситуацію, якщо была.
натиснута клавіша «ДОГОРИ ». У результаті його выполнения.
значення перемінної Y зменшується на одиницю, а если.
вона дорівнювала 1, що його значення стає рівним 7.
Аналогічно діє другий умовний оператор, только.
він обробляє клавішу «ВНИЗ » .
Третій умовний оператор приймає значення True.
якщо натиснута клавіша ESC (вихід). І тут пе;
— 13 ;
ремінної Y присвоюється значення 7, а перемінної Klav.
значення клавіші ВВЕДЕННЯ. Обидва цих значень змінних сим;
волизируют вихід із зовнішнього циклу з пост-условием, а.
отже, і вихід із программы.
Четвертий умовний оператор обробляє клавишу.
ВВЕДЕННЯ, але за умови, що Y.
підведено до останньої рядку зі значенням виходу из.
програми. Якщо значення висловлювання цього умовного опе;
ратора прийме значення True, то починається выполнение.
більшості програми, яка здійснює не;
посередньо переклад з однієї системи обчислення в.
другую.
Спочатку очищається екран. Потім малиновим кольором в.
першої рядку виводиться з який і в яку систему.
обчислення програма переказати числа. Після это;
го, у нижній рядку зеленим кольором виводиться фраза «ESC.
— ВИХІД У МЕНЮ ". Потім встановлюється колір виведення на.
екран білий й виділяється вікно для виведення исключающее.
першу і останню рядки екрана. Перемінної Stroka.
(змінна вказує рядок становища курсору) присва;
ивается значення 2.
Після прочитання цих підготовчих процесів оператор Case.
залежно від того з який і в яку систему.
обчислення ми переводити числа, визначає значе;
ния змінних Isx (підставу вихідної системи исчисле;
ния), Keys (клавіші, які можна натискати для ввода.
вихідного числа) і Kon (підставу кінцевої системы.
исчисления).
— 14 ;
Далі в програмі слід оператор циклу с.
пост-условием Repeat, всередині якого осуществляется.
введення вихідного числа. Спочатку йде очікування нажатия.
клавіші, і якщо клавіша буде натиснута, ті значення этой.
клавіші запишеться в зміну Klav. Стандартна функ;
ция UpCase переводить символ з нижнього регістру в верх;
ний. Умовний оператор If визначає, чи є нажа;
несучи клавіша припустимою, і якщо це, то переменная.
Kol (кількість символів у введеному числі) увеличива;
ется на одиницю, значення клавіші записується в массив.
A (масив символів з вихідним числом) і введена кла;
виша відображається на экране.
Наступний умовний оператор визначає, була ли.
натиснута клавіша ЗАБІЙ. І тут Kol зменшується на.
одиницю, курсор переміщається на позицію вліво и.
стирається останній запроваджений символ.
Оператор Until здійснює вихід з циклу с.
пост-условием у разі, якщо натиснута клавиша.
ВВЕДЕННЯ чи клавіша ESC.
Далі йде умовний оператор, який обрабатыва;
ет умова натискання клавіші ВВЕДЕННЯ. Якщо це, то это.
означає, що вихідне число запроваджено і користувач хо;
чіт отримати результат, і потрібно розпочати не;
посередньому переводу.
Всередині цієї умовного оператора виконується цикл от.
1 до Kol (кількість символів в вихідному числі). Внутри.
цього циклу умовним оператором If визначається за;
висимости від символу його числової еквівалент для даль;
— 15 ;
нейшего множення, та був змінна Promeg увеличива;
ется на число однакову твору отриманого числового.
еквівалента на підставу вихідної системи обчислення в.
ступеня Kol-1. У виконання цього циклу мы.
з вихідного вересня вигляді набору символів отримали его.
значення в десятеричной системі обчислення. Таким обра;
зом половину перекладу ми що його. Тепер нам нужно.
це значення перекласти на необхідну систему исчисления.
Далі йде обнуління перемінної I, а після этого.
циклом з пост-условием визначається максимальний поря;
док результату (див. п.III. Теоретичні основи решения.
задачи).
Коли ми визначили цей лад і записали.
їх у зміну I, організується цикл від I до 0. Внутри.
цього циклу проводяться такі перетворення для по;
лучения необхідного результата:
— перемінної Help присвоюється числове значение.
Jтого елемента у вихідному результате;
— умовним оператором If від цього значення получает.
символ, що стоятиме в результате;
— записується отриманий символ в рядок символов,.
що не міститиме результат;
— обчислюється залишок, який записується в пере;
менную Promeg.
Всі ці дії були описані у теоретичної части.
справжнього реферату, які практичне здійснення не.
потребує жодного труда.
По виконанні операцій, програма переходит.
— 16 ;
для отримання наступного символу, доки отримає послед;
ний символ бажаного результату. Щойно результат.
отримано, він виводиться на екран оператором WriteLn.
Після цього слід перехід на початок циклу с.
пост-условием, у якому знову вводитися исходное.
число і виходити результат, а то й була натиснута кла;
виша ESC. Якщо була натиснута клавіша ESC то выпол;
нение програми передається основному циклу с.
пост-условием що включає у собі вибір в меню.
Умова виходу від цього циклу — це натискання клавиши.
ВВЕДЕННЯ, якщо курсор меню стояв на рядку «ESC — ВИХІД В.
DOS " .
Якщо це основна умова выполнилось, то здійснюється очи;
щение екрану і виконання програми завершается.
2VIII. ЯК КОРИСТУВАТИСЯ ПРОГРАММОЙ.
Відразу після запуску програми на екрані появляется.
меню можливих переводов:
— 17 ;
_____________________________________________________.
| |.
| > Переведення з десятеричного коду в двоїчний. |.
| |.
| Переведення з двоичного коду в десятеричний. |.
| |.
| Переведення з десятеричного коду в шестнадцатиричный.|.
| |.
| Переведення з шестнадцатиричного коду в десятеричный.|.
| |.
| Переведення з двоичного коду в шістнадцятковий. |.
| |.
| Переведення з шестнадцатиричного коду в двоїчний. |.
| |.
| ESC — ВИХІД У DOS |.
| |.
|_____________________________________________________|.
Зліва з першої рядки стоїть мітка вибору. Клавишами.
ДОГОРИ і ВНИЗ можна переміщати мітку по меню. Після того.
як мітка підведено до потрібної рядку нажимается клавиша.
ВВЕДЕННЯ. Якщо ви хочете із меню вийти з прог;
раммы, то це можна зробити двома шляхами: нажать.
клавіші ESC чи підвести курсор до останньої рядку и.
натиснути ВВОД.
Якщо ви натиснули ВВЕДЕННЯ одній із верхніх рядків меню.
то, на екрані з’являється наступна картина:
— 18 ;
_____________________________________________________.
| |.
| Переведення з десятеричного коду в двоїчний. |.
| |.
|? 32 = 100 000 |.
|? 33 = 100 001 |.
|? 26 = 11 010 |.
|? 500 = 111 110 100 |.
|? 3 = 11 |.
|? 34_ |.
| |.
| |.
| |.
| |.
| |.
| ESC — ВИХІД У МЕНЮ |.
|_____________________________________________________|.
Одначе замість верхньої рядки може тупцювати будь-яка из.
шести рядків вказаних у меню, залежно від того,.
стоячи який рядку меню Ви натиснули ВВОД.
У стані можна вводити вихідне число, при;
ніж програма буде сама визначати, припустимий символ.
Ви вводите чи ні. Приміром коли переводьте из.
двоичной системи обчислення, то Ви можете нажимать.
лише клавіші «1 «чи «0 », інакше програм;
мало натиснуту клавішу не проигнорирует.
— 19 ;
Коли Ви запровадили вихідне число, потрібно нажать.
клавішу ВВЕДЕННЯ, після чого навпаки вихідного числа через.
знак одно з’явиться еквівалент вихідного числа, але уже.
у потрібній системі исчисления.
Якщо ви помилилися при введення вихідного числа, то можно.
натиснути клавішу ЗАБІЙ, і другий запроваджений символ сот;
рется.
Щоб завершити виконання програми чи осуществить.
переведення з інший системи обчислення, потрібно натиснути кла;
вишу ESC (що зазначено у нижній рядку екрана). У этом.
разі Ви опинитеся в початковому меню. Якщо Ви хотите.
продовжити переклад, то знову клавішами ДОГОРИ і ВНИЗ.
підведіть курсор до потрібної рядку меню і натиснімо ВВОД.
Якщо ж Ви хочете завершити виконання програми, то.
можна зробити двома вищеописаними способами.
— 8 ;
Program Perevod;
Uses Crt;
Const P1= «Переведення з »; { константи для початкового меню }.
s:array [1.7] of string[50]=(p1+ «десятеричного коду в двоїчний. » ,.
p1+ «двоичного коду в десятеричний. » ,.
p1+ «десятеричного коду в шістнадцятковий. » ,.
p1+ «шестнадцатиричного коду в десятеричний. » ,.
p1+ «двоичного коду в шістнадцятковий. » ,.
p1+ «шестнадцатиричного коду в двоїчний. » ,.
" ESC — ВИХІД У DOS ");
Var Promeg, Chast: Longint;
Znach, j: Integer;
Klav:Char;
i, Stroka, Isx, Kon, y, Kol, Help: Byte;
Keys: Set of «0 ». «F » ;
a: Array [1.255] of Char;
Otv, Pom: string;
Procedure Zast; { процедура виведення меню }.
begin.
Window (1,1,80,24); { виділити вікно 80×24 }.
ClrScr; { очистити вікно }.
TextColor (15); { встановити колір — білий }.
FOR I:=1 TO 7 do begin { цикл по рядкам }.
GoToXY (15,I*2); Write (s[i]); { формування меню }.
end;
end { zast }; { кінець процедури меню }.
Function Stepen (Chis, St: Byte): Longint; { функція спорудження до рівня }.
var з: Byte;
Res: longint;
begin.
Res:=1;
For c:=1 to st do Res:=Res*chis;
Stepen:=Res; { присвоєння функції значення }.
End { Stepen }; { кінець функції спорудження в сепень }.
Begin { ПОЧАТОК НОВИЙ ПРОГРАМИ }.
y:=1; { y — поточна рядок в меню }.
Zast; { вивести меню }.
Repeat { цикл для переміщення в меню }.
TextColor (13);
GoToXY (13,y*2); Write (Chr (16)); { вивести мітку поточної рядки меню }.
klav:=ReadKey; { зчитування клавіші в klav }.
GoToXY (13,y*2); Write («»); { стирання старої мітки поточної рядки }.
if Ord (Klav)=72 then if y > 1 then y:=y-1 else y:= 7; { якщо клавіша ДОГОРИ }.
if Ord (Klav)=80 then if y < 7 then y:=y+1 else y:= 1; { якщо клавіша ВНИЗ }>
if Ord (Klav)=27 then begin y:=7; klav:=Chr (13) end; { якщо клавіша ESC }.
if (Ord (Klav)=13) and (y.
ClrScr; { очистити екран }.
TextCOLOR (13); GoToXY (20, 1); Write (s[y]); { вивести назва перекладу }.
TextCOLOR (10); GoToXY (31,24); Write («ESC — ВИХІД У МЕНЮ »); { вивести клавішу для виходу }.
TextColor (15); { поміняти колір — білий }.
Window (1,2,80,23); { встановити вікно зі 2 по 23 рядки }.
Stroka:=2; { поточна рядок }.
— 9 ;
Case y of { визначення клавіш які можна буде потрапити натискати }.
1,3: begin { якщо переведення з десятиричного коду }.
Isx:=10;
Keys:=[ «0 ». «9 «]; { можливі клавіші }.
If y=1 Then Kon:=2 else Kon:=16; { присвоєння системи обчислення результату }.
end;
2,5: begin.
Isx:= 2;
Keys:=[ «0 », «1 «]; { визначення клавіш які можна буде потрапити натискати }.
If y=2 Then Kon:=10 else Kon:=16; { присвоєння системи обчислення результату }.
end;
4,6: begin.
isx:=16;
keys:=[ «0 ». «9 », «A ». «F «]; { визначення клавіш які можна буде потрапити натискати }.
if y=4 then kon:=10 else kon:=2; { присвоєння системи обчислення результату }.
end;
end;
Repeat { основний цикл для перекладу }.
Write («? »); Promeg:=0; Kol:=0; Otv:= «»; { підготовчі дії }.
Repeat { цикл для введення числа }.
klav:=ReadKey; { читання клавіші }.
if UpCase (Klav) in Keys then begin { якщо клавіша допустима }.
kol:=kol+1; { кількість символів в вихідному числі }.
a[kol]: =UpCase (Klav); { запам’ятовування введеного символу }.
Write (a[kol]); { висновок нажатого символу }.
end;
if (Ord (Klav)=8) and (Kol>0) then begin { якщо клавіша ЗАБІЙ }.
kol:=kol-1;
GoToXY (WhereX-1,WhereY);
ClrEol;
end;
Until (Ord (klav)=13) or (Ord (klav)=27); { доки натиснута ВВЕДЕННЯ чи ESC }.
if Ord (klav)=13 then begin { якщо клавіша ВВЕДЕННЯ — початок обробки результату }.
for i:=1 to kol do begin { перекладу введеного вересня десятеричную систему}.
if a[i].
else Znach:=Ord (a[i])-55;
promeg:=promeg+Znach*Stepen (isx, kol-i);
end;
i:=0;
Repeat { визначення максимального порядку результату }.
i:=i+1;
Chast:=Trunc (Promeg/Stepen (Kon, i));
Until Chast.
For j:=i downto 0 do begin { переведення у потрібну систему обчислення }.
Help:=Trunc (Promeg/Stepen (Kon, j));
If Help>9 Then Pom:=Chr (55+Help).
Else Str (Help, Pom);
Otv:=Otv+Pom;
Promeg:=Promeg-Help*Stepen (Kon, j);
end;
WriteLn («= «, Otv); { висновок результату }.
end; { кінець обробки результату }.
Until Ord (Klav)=27; { якщо натиснута ESC то вихід основне меню }.
Zast; { висновок заставки }.
end;
Until (Ord (Klav)=13) and (y=7); { тоді як меню натиснули ESC чи ВВЕДЕННЯ не вдома }.
ClrScr { очистити екран }.
end.