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


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

Страница 1 из 2 | Следующая страница

                   2О Р Л А У Л Є М І Є

   1. Запровадження

   2. Постановка завдання

   3. Теоретична основа виконання завдання

   4. Методологический підхід

   5. Алгоритм програми для перекладу з однієї

      системи обчислення до іншої

   6. Текст програми з коментарями

   7. Докладні роз'яснення з програмі

   8. Як користуватися програмою


                         - 2 -

                   2I. У У Є Д Є М І Є

   Проблема перекладу з однієї системи обчислення в дру-

гую часто-густо зустрічається при програмуванні. Осо-

бенно часто з'являється така проблема при программиро-

вании на Ассемблері. Наприклад щодо адреси

осередки пам'яті, щоб одержати двоичного чи шістнадцяти-

ричного еквівалентів десятеричного числа. Іноді постає

проблема збільшення швидкості обчислень, і тоді прихо-

дит допоможе двоичная система обчислення. У цьому

системі обчислення нас дуже швидко виробляти операцію

множення шляхом зсуву однієї з операндов в двоичном

вигляді вліво на число позицій у якій стоїть еди-

ка у другому операнде.

   Розглянемо докладніше як і здійснюється. Нехай

потрібно помножити число 1101 на 101 (обидва вересня двоич-

іншої системі обчислення). Машина робить це наступним

чином: вона бере число 1101, і якщо перший елемент

другого множника дорівнює 1 вона заносить їх у суму.

Потім зрушує число 1101 вліво однією позицію, підлозі-

чаю цим 11010 і якщо другий елемент другого мно-

жителя дорівнює одиниці то теж заносить їх у суму. Якщо

елемент другого множника нульовий то сума не изме-

няется. У зв'язку з цим, якщо другий множник містить

багато нулів, то операція множення виконується досить


                        - 3 -

довго, т.к. машина перевіряє кожну цифру другого мно-

жителя, зокрема і нулі. Якщо ж самому робити опе-

рацію множення то нулі можна оминути й тоді розумно-

жение стане швидше.

   Що ж до застосування шестнадцатиричной системи

обчислення то тут великі можливості. Во-пер-

вых, деякі стандартні процедури Паскаля і Сі тре-

буют завдання параметрів в шестнадцатиричной системі, а

по-друге, таку систему обчислення вельми зручне для

зберігання інформації, т.к. число в шестнадцатиричном ві-

де займає менше обсягу диска ніж теж число в деся-

теричном, а тим більше двоичном вигляді.

   Отже ми переконалися, що проблему перекладу з

двоичной системи обчислення в десятеричную, з шестнад-

цатиричной в десятеричную і навпаки дуже актуальна.

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

   З запровадження з'ясувалося, що найчастіше встре-

чающиеся системи обчислення це двоичная, шістнадцяти-

ричная і десятеричная. Іноді трапляється восьмирич-

ная система обчислення, але це буває так рідко, що ні

слід за цьому. Отже, наше завдання осу-

ществить переведення з двоичной системи обчислення в деся-

теричную і шестнадцатиричную, з десятеричной в двоич-

ную і шестнадцатиричную і з шестнадцатиричной в двоич-

ную і десятеричную, тобто. взаємно зв'язати всі ці три

системи обчислення.


                        - 4 -

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

   Які ж практично здійснюється переведення з однієї

системи обчислення до іншої? Спробуймо розібратися.

   Припустимо ми мусимо перевести число 567 десятеричной

системи в двійкову систему. Робиться наступним про-

разом: відшукується максимальна ступінь двійки, щоб

два у цій ступеня було менше, або одно вихідному

числу. У нашому випадку це 9, т.к. 2^9=512, а 2^10=1024

що більший за наш початкового числа. Отже ми

отримали число розрядів результату. Воно одно 9+1=10.

Отже результат матиме вид 1ххххххххх, де замість

x може тупцювати 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хх, де замість x можуть стояти будь-які

цифри чи літери з нижче перелічених:

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: описує використовувані у програмі констан-

ти. P.S - масив констант рядків символів які з пя-

тидесяти символів. Їм присвоюються значення, які

використовуватимуться упорядкування меню.

   - Var: описує перемінні.

   Longint - целочисленный тип, значення може

змінюватися від -2147483648 до 2147483647 і в

пам'яті 32 біта.

   Integer - целочисленный тип, може приймати значе-

ние від -32768 до 32767 і обсяг пам'яті в 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<7, тобто. курсор в меню не

підведено до останнього рядку багатозначно виходу з

програми. Якщо значення висловлювання цього умовного опе-

ратора прийме значення True, то починається виконання

більшості програми, яка проводить не-

посередньо переведення з однієї системи обчислення в

іншу.

   Спочатку очищається екран. Потім малиновим кольором в

першої рядку виводиться з якої й у який систему

обчислення програма переказати числа. Після це-

го, у нижній рядку зеленим кольором виводиться фраза "ESC

- ВИХІД У МЕНЮ". Потім встановлюється колір виведення

екран білий та програм виділяється вікно висновку який виключає

першу і останню рядки екрана. Переменной Stroka

(змінна вказує рядок становища курсору) присва-

ивается значення 2.

   Після прочитання цих підготовчих процесів оператор Case

залежно від цього з якої й у який систему

обчислення ми переводити числа, визначає значе-

ния змінних Isx (підставу вихідної системи исчисле-

ния), Keys (клавіші, які можна натискати для введення

вихідного числа) і Kon (підставу кінцевої системи

обчислення).


                        - 14 -

   Далі у програмі слід оператор циклу з

пост-условием Repeat, у якому здійснюється

введення вихідного числа. Спочатку йде очікування натискання

клавіші, і якщо клавіша буде натиснута, ті значення цієї

клавіші запишеться в зміну Klav. Стандартна функ-

ция UpCase переводить символ з нижнього регістру в гору-

ний. Умовний оператор If визначає, чи є нажа-

несучи клавіша припустимою, і якщо це, то змінна

Kol (кількість символів у введеному числі) увеличива-

ется на одиницю, значення клавіші записується в масив

A (масив символів з вихідним числом) і введена кла-

виша відображається на екрані.

   Наступний умовний оператор визначає, була чи

натиснута клавіша ЗАБОЙ. І тут Kol зменшується на

одиницю, курсор переміщається однією позицію вліво і

стирається останній запроваджений символ.

   Оператор Until здійснює вихід із циклу з

пост-условием у разі, якщо натиснута клавіша

ВВОД чи клавіша ESC.

   Далі йде умовний оператор, який обрабатыва-

ет умова натискання клавіші ВВОД. Якщо це, це

означає, що вихідне число запроваджено і користувач хо-

чіт досягти результату, і потрібно розпочати не-

посередньому перекладу.

   Всередині цієї умовного оператора виконується цикл від

1 до Kol

Страница 1 из 2 | Следующая страница

Схожі реферати:

  • Реферат на тему: Файловая структура диска. Види файлів та його позначення
    Файл – пойменована область, на диску чи іншому носії інформації. У файлах можуть зберігатися тексти
  • Реферат на тему: Штучний інтелект
    Зміст: Введение.....................................1 Механічний подход..........................2
  • Реферат на тему: Командные файли
    Командные файлыМИНИСТЕРСТВО СПІЛЬНОГО І ПРОФЕССИОНАЛЬНОГО ОСВІТИ РОСІЙСЬКОЇ ФЕДЕРАЦІЇ МОСКОВСЬКИЙ
  • Реферат на тему: CD-ROM і застосування
    На початку 80-х голандская фірма " Philips "оголосила про досконалої нею ревоолюцией у
  • Реферат на тему: Access
    Введення ЄІАС у Ми розглянемо можливості Access і типи завдань, які можна вирішити з допомогою цієї

Навігація