ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Вивчення методики перекладу з однієї системи числення в іншу й розробка програми для цієї операційної
         

     

    Інформатика
    В В Е Д Е Н Н Я


    Проблема перекладу з однієї системи числення в дру-
    гую дуже часто зустрічається при програмуванні. Осо-
    бенно часто з'являється така проблема при программир-
    вання на Асемблері. Наприклад при визначенні адреси
    комірки пам'яті, для одержання двійкового або шістнадцяти-
    ричного еквівалентів десяткової числа. Іноді встає
    проблема збільшення швидкості обчислень, і тоді прихо-
    дит на допомогу двійкова система числення. У цій
    системі числення дуже швидко робити операцію
    множення шляхом зсуву одного з операндів в двійковому
    виді вліво на таке число позицій у якій стоїть еди-
    Іваниця у другому операнд.
    Розглянемо докладніше як це здійснюється. Нехай
    нам треба помножити число 1101 на 101 (обидва числа в двоіч-
    ної системі числення). Машина робить це в такий
    чином: вона бере число 1101, і якщо перший елемент
    другого множника дорівнює 1 те вона заносить його в суму.
    Потім зрушує число 1101 вліво на одну позицію, напів-
    чаю тим самим 11010 і якщо другий елемент другого мно-
    мешканця дорівнює одиниці то теж заносить його в суму. Якщо
    елемент другого множника дорівнює нулю то сума не вимірюв-
    вується. У зв'язку з цим, якщо другий множник містить
    багато нулів, то операція множення виконується досить


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

                    2II. ПОСТАНОВКА ЗАВДАННЯ

    З введення стало зрозуміло, що найбільш часто зустрічаються-
    чающіеся системи числення це двійкова, шістнадцяти-
    ковий і десяткової. Іноді зустрічається і восьміріч-
    ва система числення, але це буває так рідко, що не
    варто на цьому зупинятися. Отже, наше завдання здій-
    суспільством переклад із двійкової системи числення у десять-
    терічную і шестнадцатірічное, з десяткової в двоіч-
    ну і шестнадцатірічное і з шістнадцятковій в двоіч-
    ну і десяткової, тобто взаємно зв'язати всі ці три
    системи числення.


                            - 4 -

             ТЕОРЕТИЧНА ОСНОВА РІШЕННЯ ЗАДАЧІ

    Як же на практиці здійснюється переклад з однієї
    системи числення в іншу? Спробуємо розібратися.
    Припустимо нам потрібно перекласти число 567 десяткової
    системи в двійкову систему. Робиться це в такий про-
    разом: відшукується максимальний ступінь двійки, щоб
    два в цьому ступені було менше або рівне вихідного
    числу. У нашому випадку це 9, тому що 2 ^ 9 = 512, а 2 ^ 10 = 1024
    що більше нашого початкового числа. Таким чином ми
    одержали число розрядів результату. Воно дорівнює 9 +1 = 10.
    Значить результат буде мати вигляд 1ххххххххх, де замість
    х може стояти 1 або 0. Знайдемо другу цифру результату.
    Зведемо двійку до степеня 9 і віднімемо з початкового
    числа: 567-2 ^ 9 = 55. Потім порівнюємо з числом 2 ^ 8 = 256.
    Тому що 55 менше 256 те дев'ятий розряд буде нулем,
    тобто результат уже прийме вид 10хххххххх. Розглянемо
    восьмий розряд: 2 ^ 7 = 128> 55, значить і восьмий розряд
    буде нулем. Оскільки 2 ^ 6 = 64 то сьомий розряд дорівнює нулю.
    Таким чином ми отримали чотири старших розряду і
    число набуде вигляду 1000хххххх. Обчислюємо 2 ^ 5 = 32 і бачимо,
    що 32 <55, значить шостий розряд дорівнює 1 (результат>
    10001ххххх), залишок 55-32 = 23. 2 ^ 4 = 16 <23 - п'ятий раз->
    ряд 1 => 100011хххх. Залишок 23-16 = 7. 2 ^ 3 = 8> 7 =>
    1000110ххх. 2 ^ 2 = 4 <7 => 10001101хх, залишок 3. 2 ^ 1 = 2
    3 => 100011011х, залишок 1. 2 ^ 0 = 1 = 1 => 1000110111. Ми
    отримали кінцевий результат.


                            - 5 -
    епер спробуємо перекласти теж число 567, але вже в
    шестнадцатірічное систему. Підхід приблизно такий же.
    Визначимо максимальний розряд. Оскільки 16 ^ 2 = 256 <567, а>
    16 ^ 3 = 4096> 567, то максимальний розряд 2 +1 = 3. Визна-
    лім число, яке буде стояти в третьому розряді.
    Шукається максимальний множник у межах від 1 до 15,
    щоб поточний ступінь шістнадцяти помножена на цей
    множник була менше або дорівнювала вихідного числа (а
    надалі - залишку). У нашому прикладі цей множник
    2, тому що 256 * 2 = 512 <567, а 256 * 3 = 768> 567. Значить
    старший розряд нашого результату буде дорівнює 22 0, і ре-
    зультат набуде вигляду 2хх, де замість х можуть стояти будь-які
    цифри або букви з нижче перерахованих:
    0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F. Обчислюємо залишок:
    567-2 * 16 ^ 2 = 55. Визначимо що стоятиме у другому
    розряді. Тому що 3 * 16 ^ 1 = 48 <55, а 4 * 16 ^ 1 = 64> 55, то
    в другому розряді буде стояти цифра 23 0. Осту-
    ток = 55-3 * 16 ^ 1 = 7. Визначаємо перший розряд: тому що 16 ^ 0 = 1
    то цифра першого розряду дорівнює залишку, тобто 27 0. Таким
    чином ми отримали число 2237 0, але вже в шестнадцатіріч-
    ної системі числення.
    Операція переведення з десяткової системи виглядає
    набагато простіше. Розглянемо її на прикладі перекладу з
    шістнадцятковій системи в десяткової.
    Припустимо нам потрібно перекласти число 24A3F 0В десятеріч-
    ву систему. Беремо старший (4 ий) розряд і зводимо 16
    до степеня 4-1 = 3, одержуємо 16 ^ 3 = 4096. Отриманий резуль-
    тат множимо на значення четвертого розряду, тобто 4.


                            - 6 -
    Виходить 4096 * 4 = 16384. Цей результат ми заносимо в
    суму. Переходимо до наступного розряду: 16 ^ 2 = 256. 256
    потрібно помножити на значення третього розряду тобто A. Як
    відомо в шістнадцятковій системі числення букви
    від A до F символізують числа від 10 до 15 (A = 10, B = 11,
    C = 12, D = 13, E = 14, F = 15). Помноживши 256 на 10 одержимо 2560
    і цей результат додаємо до суми, в якій у нас по-
    ка було 16384. У суму у нас вийшло 18944. Перех-
    дим до другого розряду: 3 * 16 ^ 1 = 48, додавши це в суму
    отримаємо 18992. І останній розряд: 15 * 16 ^ 0 = 15. Кінцева
    сума дорівнює 219007 0. Ми отримали результат у десяткової
    системі числення.

                 2IV. МЕТОДОЛОГІЧНІ ПІДХОДИ

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


                            - 7 -
    відзначаємо тільки як би два стани: так чи ні, тобто
    1 або 0, а при перекладі в шестнадцатірічное систему ми
    розглядаємо не просто ступінь числа шістнадцяти, а
    твір цього ступеня на величину майбутнього розряду.
    Виникає питання: а чи це не одне і теж. Адже помноживши
    число на одиницю ми його не змінюємо, а отже
    немає різниці між часом, порівнювати ступінь із залишком
    або із залишком помноженим на одиницю. Таким чином ви-
    яснілось, що переведення з десяткової системи обчислений-
    ня в двійкову і в шестнадцатірічное можна здійснювати
    однією процедурою, в яку як параметр пере-
    давати підставу ступеня, тобто підстава кінцевої
    системи числення.
    Щоб не ускладнювати програму і не робити безліч
    операторів умовного переходу в залежності від того, до
    якій системі числення належить вихідне число,
    введення цього числа здійснюється єдиним блоком, і результат-
    ве число в результаті виконання цього блоку записуючи-
    ється у вигляді рядковий змінної і передається на обра-
    лення наступного блоку. Другий блок що надійшла в нього
    рядок символів обробляє таким чином, що на ви-
    ході цього блоку виходить числове значення в десяте-
    річної системі числення вихідного числа. І третє
    заключний блок перетворить це числове значення в
    рядок символів, яка буде містити результат у
    системі числення, яка була потрібна.
    У результаті такого підходу до вирішення завдання Алго-
    ритм значно спрощується, тому що в ньому немає розгалужень.


                            - 10 -

            2VII. ДЕТАЛЬНІ РОЗ'ЯСНЕННЯ ПО ПРОГРАМІ

    Програма починається стандартної рядком:
    Program Perevod;
    Далі слід описова частина програми. Вона
    складається з кількох розділів:
    - Uses: вказує які зовнішні TPU файли буде
    використовувати програма (це специфіка Turbo Pascal).
    - Const: описує використовувані в програмі Констан-
    ти. S - масив констант рядків символів складаються з п'ятого-
    тідесяті символів. Їм присвоюються значення, які
    будуть використовуватися для складання меню.
    - Var: описує змінні.
    Longint - цілочисельний тип, значення якого може
    змінюватися від -2147483648 до 2147483647 і займає в
    пам'яті 32 біта.
    Integer - цілочисельний тип, може приймати значен-
    ня від -32768 до 32767 і займає обсяг пам'яті в 16
    біт.
    Char - символьний тип, може приймати значення лю-
    бого символу.
    Byte - цілочисельний тип, може приймати значення
    від 0 до 255 з займає обсяг пам'яті в 8 біт.
    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
    значення клавіші ENTER. Обидва ці значення змінних сім-
    волізіруют вихід із зовнішнього циклу з пост-умовою, а
    значить і вихід з програми.
    Четвертий умовний оператор обробляє клавішу
    ENTER, але за умови, що Y
    підведений до останньому рядку зі значенням виходу з
    програми. Якщо значення виразу цього умовного опе-
    ратора набуде значення True, то починається виконання
    основної частини програми, яка здійснює не-
    посередньо переклад з однієї системи числення в
    іншу.
    Спочатку очищається екран. Потім малиновим кольором в
    першому рядку виводиться з якої і в яку систему
    обчислення програма буде переводити числа. Після це-
    го, в нижній частині зеленим кольором виводиться фраза "ESC
    - ВИХІД У МЕНЮ ". Потім встановлюється колір виводу на
    екран білий і виділяється вікно для виведення виключає
    першу і останню рядка екрану. Змінній Stroka
    (змінна вказує рядок положення курсору) присв-
    івается значення 2.
    Після цих підготовчих процесів оператор Case
    в залежності від того з якої і в яку систему
    обчислення ми будемо переводити числа, визначає значен-
    ня змінних Isx (підстава вихідної системи обчислений-
    ня), Keys (клавіші, які можна натискати, щоб ввести
    вихідного числа) і Kon (підстава кінцевої системи
    обчислення).


                            - 14 -
    Далі в програмі слід оператор циклу з
    пост-умовою Repeat, усередині якого здійснюється
    введення вихідного числа. Спочатку йде очікування натискання
    клавіші, і якщо клавіша буде натиснута, то значення цієї
    клавіші запишеться в змінну Klav. Стандартна функ-
    ція UpCase переводить символ з нижнього регістра в верх-
    ний. Умовний оператор If визначає, чи є натис-
    тая клавіша допустимої, і якщо це так, то змінна
    Kol (кількість символів у введеному числі) збільшуючи-
    ється на одиницю, значення клавіші записується в масив
    A (масив символів з вихідним числом) та введена кла-
    Вишал відображається на екрані.
    Наступний умовний оператор визначає, чи не була
    натиснута клавіша забій. У цьому випадку Kol зменшується на
    одиницю, курсор переміщується на одну позицію вліво і
    стирається останній введений символ.
    Оператор Until здійснює вихід з циклу з
    пост-умовою в тому випадку, якщо була натиснута клавіша
    ENTER або клавіша ESC.
    Далі йде умовний оператор, який обробляючи-
    ет умова натискання клавіші ENTER. Якщо це так, то це
    означає, що вихідне число введено і користувач хо-
    чет отримати результат, і необхідно приступити до не-
    посередньому перекладу.
    Усередині цього умовного оператора виконується цикл від
    1 до Kol (кількість символів у вихідному числі). Всередині
    цього циклу умовним оператором If визначається за-
    лежно від символу його числовий еквівалент для даль-


                            - 15 -
    ковитого множення, а потім мінлива Promeg збільшуючи-
    ється на число рівне твору отриманого числового
    еквівалента на основу вихідної системи числення в
    ступеня Kol-1. В результаті виконання цього циклу ми
    з вихідного числа у вигляді набору символів отримали його
    значення в десяткової системі числення. Таким обра-
    зом половину перекладу ми здійснили. Тепер нам потрібно
    це значення перевести в необхідну систему числення.
    Далі йде обнулення змінної I, а після цього
    циклом з пост-умовою визначається максимальний поря-
    док результату (див. п.III. Теоретичні основи рішення
    завдання).
    Після того як ми визначили цей порядок і записали
    його в змінну I, організовується цикл від I до 0. Всередині
    цього циклу проводяться наступні перетворення для по-
    одержанні необхідного результату:
    - Змінної Help присвоюється числове значення
    Jтого елемента у вихідному результаті;
    - Умовним оператором If з цього значення отримує
    символ, який буде стояти в результаті;
    - Записується отриманий символ в рядок символів,
    яка буде містити результат;
    - Обчислюється залишок, що записується в пере-
    менную Promeg.
    Всі ці дії були описані в теоретичній частині
    цього реферату, а їх практичне здійснення не
    вимагає ніяких труднощів.
    Після виконання цих операцій, програма переходить


                            - 16 -
    до отримання наступного символу, поки не отримає останнім
    ний символ шуканого результату. Як тільки результат
    отриманий, він виводиться на екран оператором WriteLn.
    Після цього слід перехід на початок циклу з
    пост-умовою, в якому буде знову вводиться оригінал
    число і виходити результат, якщо не була натиснута кла-
    Вишал ESC. Якщо все ж таки була натиснута клавіша ESC то виконан-
    ня програми передається основного циклу з
    пост-умовою який включає в себе вибір в меню.
    Умова виходу з цього циклу - це натиснення клавіші
    ENTER, якщо курсор меню стояв на рядку "ESC - ВИХІД У
    DOS ".
    Якщо ця умова виконана, то здійснюється очи-
    щення екрану і виконання програми завершується.

               2VIII. ЯК КОРИСТУВАТИСЯ ПРОГРАМОЮ

    Відразу після запуску програми на екрані з'являється
    меню можливих перекладів:


                            - 17 -

     _____________________________________________________< br /> | |
    |> Переклад з десяткової коду в двійковий. |
    | |
    | Переклад з двійкового коду в десяткової. |
    | |
    | Переклад з десяткової коду в шістнадцяткові. |
    | |
    | Переклад з шестнадцатірічное коду в десяткової. |
    | |
    | Переклад з двійкового коду в шістнадцяткові. |
    | |
    | Переклад з шестнадцатірічное коду в двійковий. |
    | |
    | ESC - ВИХІД У DOS |
    | |
    |_____________________________________________________|< br />
    Зліва від першого рядка стоїть позначка вибору. Клавішами
    ВГОРУ та ВНИЗ можна переміщати позначку за меню. Після того
    як мітка підведена до потрібної рядку натискається клавіша
    ENTER. Якщо Ви хочете з головного меню вийти з прог-
    Рамі, то це можна зробити двома способами: натиснути
    клавіші ESC або підвести курсор до останньому рядку і
    натиснути ENTER.
    Якщо Ви натиснули ENTER, на одній з верхніх рядків меню
    то на екрані з'являється наступна картина:


                            - 18 -

     _____________________________________________________< br /> | |
    | Переклад з десяткової коду в двійковий. |
    | |
    |? 32 = 100000 |
    |? 33 = 100001 |
    |? 26 = 11010 |
    |? 500 = 111110100 |
    |? 3 = 11 |
    |? 34_ |
    | |
    | |
    | |
    | |
    | |
    | ESC - ВИХІД У МЕНЮ |
    |_____________________________________________________|< br />
    Однак замість верхнього рядка може стояти кожна з
    шести строк зазначених у меню, в залежності від того,
    стоячи на якому рядку меню Ви натиснули ENTER.
    У цьому стані можна вводити вихідне число, при-
    ніж програма буде сама визначати, допустимий символ
    Ви вводите чи ні. Так наприклад якщо Ви перекладаєте з
    двійкової системи числення, то Ви можете натискати
    тільки клавіші '1 'або '0', в іншому випадку програм-
    ма натиснуту клавішу не проігнорує.


                            - 19 -

    Після того як Ви ввели вихідне число, потрібно натиснути
    клавішу ENTER, після чого напроти вихідного числа через
    знак одно з'явиться еквівалент вихідного числа, але вже
    в потрібній системі числення.
    Якщо Ви помилилися при введенні вихідного числа, то можна
    натиснути клавішу забій, і останній введений символ сот-
    рется.
       Щоб завершити виконання програми або здійснити
    переклад з іншої системи числення, потрібно натиснути кла-
    вишу ESC (про що зазначено в нижній частині екрана). У цьому
    випадку Ви опинитеся в початковому меню. Якщо Ви хочете
    продовжити переклад, то знову клавішами ВГОРУ та ВНИЗ
    підведіть курсор до потрібної рядку меню і натисніть ENTER.
    Якщо ж Ви хочете завершити виконання програми, то
    це можна зробити двома способами вищеописаними.


                                         - 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 c: 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); (поки не натиснута ENTER або ESC)
            if Ord (klav) = 13 then begin (якщо клавіша ENTER, - початок обробки результату)
              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 або ENTER, на виході)
      ClrScr (очистити екран)
      end.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status