Реферат: Изучение методики перевода из одной системы исчисления в другую и разработка программы для этой операции

      Ответственныйза курсовой проект:

                   3РОЗМАХОВ Олег Георгиевич 0   _______________

      Руководителькурсового проекта:

                   3ИОНИНА Татьяна Давыдовна 0   _______________

                   _ 2К У Р С О В О Й     П Р О Е К Т

                       Тема курсового проекта:

        ИЗУЧЕНИЕПРОБЛЕМЫ ПЕРЕВОДА ИЗ ОДНОЙ СИСТЕМЫ ИСЧИСЛЕНИЯ

           В ДРУГУЮИ РАЗРАБОТКА ПРОГРАММЫ ДЛЯ ЭТОЙ ОПЕРАЦИИ

                      Студента:      гр. 05-204

                             2ДЕНЕГИНАСергея

    4г. Москва

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                         — 1 -

                  2О Г Л А В Л Е Н И Е

   1. Введение

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

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

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

   5. Алгоритмпрограммы для перевода из одной

      системыисчисления в другую

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

   7. Подробныеразъяснения по программе

   8. Какпользоваться программой

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                         — 2 -

                   2I.  В В Е Д Е Н И Е

   Проблемаперевода из одной системы исчисления в дру-

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

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

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

ячейки памяти, для получения двоичного или шестнадцати-

ричного эквивалентов десятеричного числа. Иногда встает

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

дит на  помощь  двоичная система  исчисления.  В  этой

системе исчисления очень  быстро  производить операцию

умножения путем сдвига одного из операндов  в двоичном

виде влево  натакое число позиций в которой стоит еди-

ница во втором операнде.

   Рассмотримподробнее  как это осуществляется.  Пусть

нам надо умножить число 1101 на 101 (оба числа в двоич-

ной системе исчисления). Машина делает  это  следующим

образом: она берет  число 1101,  и если первый элемент

второго множителя равен  1 то она заносит его всумму.

Затем сдвигает число 1101 влево на одну позицию,  полу-

чая тем самым 11010 и если второй элемент второго  мно-

жителя равен единице то тоже заносит его в сумму.  Если

элемент второго множителя равен нулю то сумма не  изме-

няется. В связи с этим, если второй множитель содержит

много нулей, то операция умножения выполняется довольно

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 3 -

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

жителя, в том числе и нули.  Если же самому делать опе-

рацию  умножения тонули можно пропустить и тогда умно-

жение сделается быстрее.

   Чтокасается  применения  шестнадцатиричной  системы

исчисления то здесь тоже большие  возможности. Во-пер-

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

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

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

хранения информации, т.к. число в шестнадцатиричном ви-

де занимает  меньшеобъема диска чем тоже число в деся-

теричном, а тем более в двоичном виде.

   Таким образом мыубедились, что проблема перевода из

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

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

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

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

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

ричная и десятеричная. Иногда встречается и восьмирич-

ная система исчисления, но это бывает так редко, что не

стоит на этом останавливаться.  Итак, наша задача осу-

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

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

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

ную и десятеричную,  т.е.  взаимно связать все эти три

системы исчисления.

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 4 -

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

   Как же напрактике осуществляется перевод  из  одной

системы исчисления в другую? Попробуем разобраться.

   Допустим намнужно перевести число 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.Мы

получили конечный результат.

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 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.

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 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.  МЕТОДОЛОГИЧЕСКИЙПОДХОД

   Рассматриваяперевод   из    десятеричной    системы

исчисления в двоичную и шестнадцатиричную,  можно найти

много общего. В обоих случаях мы ищем максимальную сте-

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

возведенным в степень  разряда.  Единственная разница

заключается в том, что при переводе в двоичную систему

основанием степени служит двойка,  а  при переводе  в

шестнадцатиричную систему основанием служит число шест-

надцать. Возникает вопрос:  а нельзя ли объединить  оба

этих перевода в  одну процедуру,  в которую в качестве

параметров передавать основание степени? При более под-

робном рассмотрении перевода  в двоичную систему можно

заметить, что сравнивая остаток со степенью  двойки мы

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                         — 7 -

отмечаем только как бы два состояния:  да или нет, т.е.

1 или 0,  а припереводе в шестнадцатиричную систему мы

рассматриваем не просто  степень числашестнадцати,  а

произведение этой степени на величину будущего разряда.

Возникает вопрос: а не одно ли это и тоже. Ведь умножив

число на единицу мы его не  изменяем, а  следовательно

нет разницы между  тем,  сравнивать степень с остатком

или с остатком умноженным на единицу. Таким образом вы-

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

ния в двоичную и в шестнадцатиричную можно осуществлять

одной процедурой, в которую в качестве параметра пере-

давать основание степени,  т.е.   основание  конечной

системы исчисления.

   Чтобы неусложнять программу и не  делать  множество

операторов условного перехода в зависимости от того,  к

какой системе исчисления принадлежит  исходное  число,

ввод этого числа осуществляется единым блоком, и исход-

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

ется в  видестроковой переменной и передается на обра-

ботку следующему блоку. Второй блок поступившую в него

строку символов обрабатывает таким образом,  что на вы-

ходе этого блока получается числовое значение в десяте-

ричной системе исчисления  исходного  числа. И третий

заключительный блок преобразует это числовое значение в

строку символов, которая  будет  содержать результат в

системе исчисления, которая требовалась.

   Врезультате  такого  подхода к решению задачи алго-

ритм значительно упрощается, т.к. в нем нет ветвлений.

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                         — 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 — массив символов размером  в

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 11 -

255 знаков.

   String — строкасимволов переменной длины (длина мо-

жет изменяться от 1 до 255 символов).

   Далее впрограмме идет описание процедуры Zast. Эта

процедура выводит на экран в столбик пункты меню, в ко-

торых указывается из какой и в какую систему исчисления

пользователь хочет перевести число. Структура процедуры

линейная. Она состоит из нескольких операторов:

   Window(1,1,80,24)  — отводит окно доступное длявы-

вода.

   ClrScr — очищаетэкран.

   TextColor (15) — устанавливает цвет последующего вы-

вода (ярко белый).

   GoToXY (x,y) — переводит курсор в строку с номером y

и столбец с номером x.

   Write ( ) — выводит на экран от позиции курсора  вы-

ражение указанное в скобках.

   Далее впрограмме следует функция возведения в сте-

пень. Она будет  использоваться в дальнейшейпрограмме

несколько раз для непосредственного перевода  из одной

системы исчисления в другую,  поэтому пришлось оформить

ее как функцию, чтобы не использовать каждый раз опера-

ции с логарифмом и экспонентой.  Возведение в степень в

этой функции осуществляется обычным многократным  умно-

жением в цикле,  идумаю,  на ней не следует останавли-

ваться.

   Продолжимрассмотрение программы. После функции воз-

ведения в степень идет оператор  начала исполнительной

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 12 -

части основной программы Begin.

   Переменной Yприсваивается значение  1  - начальное

положение курсора в меню.

   Далее идет вызовпроцедуры Zast, в результате выпол-

нения которой  наэкран выводится список возможных ком-

бинаций переводов.

   После выполненияпроцедуры Zast следует оператор ор-

ганизации цикла с пост-условием  Repeat. Внутри  этого

цикла осуществляется выполнение  всей дальнейшей прог-

раммы.

   Внутри него  последовательно идет установка цвета на

малиновый, перемещение курсора в позицию 13,2  и вывод

символа метки  текущегоположения курсора в меню (  2> 0 ).

Далее идет оператор ожидания  ввода  клавиши ReadKey.

Когда клавиша будет нажата, ее значение будет присвоено

переменной Klav. Затем идет стирание метки текущей по-

зиции курсора в меню.

   После этого идетблок условных операторов If,  кото-

рые обрабатывают нажатую клавишу и выполняют определен-

ные действия в соответствии с нажатой клавишей.

   Первый операторIf обрабатывает ситуацию,  если была

нажата клавиша «ВВЕРХ».  В результате  его  выполнения

значение переменной Y  уменьшается на единицу,  а если

она была равна 1, то ее значение становится равным 7.

Аналогично действует второй условный оператор,  только

он обрабатывает клавишу «ВНИЗ».

   Третийусловный  оператор  принимает значение  True

если была нажата клавиша ESC (выход). В этом случае пе-

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 13 -

ременной Y присваивается значение 7,  а переменной Klav

значение клавиши ВВОД. Оба эти значения переменных сим-

волизируют выход из внешнего цикла с пост-условием, а

значит и выход из программы.

   Четвертыйусловный   оператор  обрабатывает клавишу

ВВОД, но при условии, что Y<7,  т.е.  курсор в меню не

подведен к последней  строке  со значением  выхода из

программы. Если значение выражения этого условного опе-

ратора примет значение True,  то начинаетсявыполнение

основной части программы,  которая  осуществляет  не-

посредственно перевод из  одной  системы исчисления в

другую.

   Сначалаочищается  экран.  Затем малиновым цветом в

первой строке выводится из  какой и  в  какую систему

исчисления программа будет переводить числа. После это-

го, в нижней строке зеленым цветом выводится фраза«ESC

— ВЫХОД  ВМЕНЮ».  Затем устанавливается цветвывода на

экран белый и выделяется окно  для вывода  исключающее

первую и последнюю  строки  экрана. Переменной Stroka

(переменная указывает строку положения курсора) присва-

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

   После этихподготовительных процессов оператор  Case

в зависимости от  того  из какой  и  в какую систему

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

ния переменных Isx (основание исходной системы исчисле-

ния), Keys (клавиши, которые можно нажимать для  ввода

исходного числа) и  Kon  (основание конечной  системы

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

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 14 -

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

пост-условием Repeat, внутри  которого  осуществляется

ввод исходного числа.  Сначала  идет ожидание нажатия

клавиши, и если клавиша будет нажата,  то значение этой

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

ция UpCase переводит символ из нижнего регистра в верх-

ний. Условный оператор If определяет, является ли нажа-

тая клавиша допустимой, и если это так,  то переменная

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

ется на единицу, значение клавиши записывается в массив

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

виша отображается на экране.

   Следующийусловный  оператор определяет,  не была ли

нажата клавиша ЗАБОЙ. В этом случае Kol уменьшается на

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

стирается последний введенный символ.

   ОператорUntil   осуществляет   выход  из  цикла  с

пост-условием в том случае,  если была нажата  клавиша

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

   Далее следуетусловный оператор, который обрабатыва-

ет условие нажатия клавиши ВВОД.  Если это так, то это

означает, что исходное число введено и пользователь хо-

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

посредственному переводу.

   Внутри этогоусловного оператора выполняется цикл от

1 до Kol (количество символов в исходном числе). Внутри

этого цикла условным  оператором Ifопределяется в за-

висимости от символа его числовой эквивалент для  даль-

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 15 -

нейшего умножения, а затем переменная Promeg увеличива-

ется на число равное произведению полученного числового

эквивалента на основание исходной системы исчисления в

степени Kol-1.  Врезультате выполнения этого цикла  мы

из исходного  числав виде набора символов получили его

значение в десятеричной системе исчисления. Таким обра-

зом половину перевода мы осуществили.  Теперь нам нужно

это значение перевести в необходимую систему исчисления.

   Далее следуетобнуление переменной I,  а после этого

циклом с  пост-условиемопределяется максимальный поря-

док результата (см. п.III. Теоретические основы решения

задачи).

   После того какмы определили этот порядок и записали

его в переменную I, организуется цикл от I до 0. Внутри

этого цикла проводятся следующие преобразования для по-

лучения необходимого результата:

   — переменнойHelp  присваивается  числовое значение

Jтого элемента в исходном результате;

   — условнымоператором If из этого значения  получает

символ, который будет стоять в  результате;

   — записываетсяполученный символ в строку  символов,

которая будет содержать результат;

   — вычисляетсяостаток,  который записывается в пере-

менную Promeg.

   Все эти действиябыли описаны в теоретической  части

настоящего реферата, а их практическое осуществление не

требует никакого труда.

   После выполненияэтих операций,  программа переходит

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 16 -

к получению следующего символа, пока не получит послед-

ний  символ  искомого результата.  Как только результат

получен, он выводится на экран оператором WriteLn.

   После этого   следует переход  на  начало цикла  с

пост-условием, в котором будет опять вводиться исходное

число и получаться результат,  если не была нажата кла-

виша ESC. Если все же была нажата клавиша ESC то выпол-

нение   программы    передается  основному   циклу   с

пост-условием который включает в себя выбор в меню.

   Условиевыхода  из этого цикла — это нажатиеклавиши

ВВОД, если курсор меню стоял на строке «ESC -  ВЫХОД В

DOS».

   Если это условиевыполнилось, то осуществляется очи-

щение экрана и выполнение программы завершается.

           2VIII. КАК ПОЛЬЗОВАТЬСЯ ПРОГРАММОЙ

   Сразу после  запуска программы на экране появляется

меню возможных переводов:

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 17 -

 _____________________________________________________

|                                                    |

| > Перевод из десятеричного кода в двоичный.         |

|                                                    |

|   Перевод издвоичного кода в десятеричный.         |

|                                                     |

|   Перевод издесятеричного кода в шестнадцатиричный.|

|                                                    |

|   Перевод изшестнадцатиричного кода в десятеричный.|

|                                                     |

|   Перевод издвоичного кода в шестнадцатиричный.    |

|                                                    |

|   Перевод изшестнадцатиричного кода в двоичный.    |

|                                                    |

|               ESC — ВЫХОД В DOS                     |

|                                                    |

|_____________________________________________________|

   Слева от первойстроки стоит метка выбора. Клавишами

ВВЕРХ и ВНИЗ можно перемещать метку по меню. После того

как метка подведена к нужной строке нажимается клавиша

ВВОД. Если Вы хотите из главного меню  выйти из  прог-

раммы, то  это  можно сделать двумя способами:  нажать

клавиши ESC или подвести курсор к  последней строке  и

нажать ВВОД.

   Если Вы нажалиВВОД на одной из верхних  строк  меню

то на экране появляется следующая картина:

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 18 -

 _____________________________________________________

|                                                    |

|       Перевод издесятеричного кода в двоичный.     |

|                                                    |

|? 32 = 100000                                       |

|? 33 = 100001                                       |

|? 26 = 11010                                        |

|? 500 = 111110100                                   |

|? 3 = 11                                            |

|? 34_                                              |

|                                                    |

|                                                    |

|                                                    |

|                                                    |

|                                                    |

|                ESC — ВЫХОД В МЕНЮ                 |

|_____________________________________________________|

   Однаковместо  верхней  строки может стоять любая из

шести строк указанных в меню,  в зависимости от  того,

стоя на какой строке меню Вы нажали ВВОД.

   В этом состоянииможно вводить исходное число,  при-

чем программа будет сама определять,  допустимый символ

Вы вводите или нет. Так например если Вы переводите из

двоичной системы исчисления,  то  Вы можете  нажимать

только клавиши '1' или '0', в противном случае програм-

ма нажатую клавишу не проигнорирует.

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                        — 19 -

   После того какВы ввели исходное число, нужно нажать

клавишу ВВОД, после чего напротив исходного числа через

знак равно появится эквивалент исходного числа,  но уже

в нужной системе исчисления.

   Если Вы ошиблисьпри вводе исходного числа, то можно

нажать клавишу ЗАБОЙ, и последний введенный символ сот-

рется.

   Чтобы завершитьвыполнение программы или осуществить

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

вишу ESC (о чем указано в нижней строке экрана). В этом

случае Вы окажетесь в начальном меню.  Если Вы  хотите

продолжить перевод, то  опять  клавишами ВВЕРХ и ВНИЗ

подведите курсор к нужной строке меню и  нажмите ВВОД.

Если же  Вы  хотите завершить выполнение программы,  то

это можно сделать двумя вышеописанными способами.

<span Courier New";mso-fareast-font-family: Batang;mso-ansi-language:RU;mso-fareast-language:KO;mso-bidi-language:AR-SA">

                                     — 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 > 1then y:=y-1 else y:= 7;            { есликлавишаВВЕРХ}

    if Ord(Klav)=80 then if y < 7 theny:=y+1 else y:= 1;            { есликлавишаВНИЗ}

    if Ord(Klav)=27 then begin y:=7;klav:=Chr(13) end;              { есликлавишаESC }

    if (Ord(Klav)=13) and (y<7) then begin                           { есликлавишаВВОДненавыходе}

      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 yof                                                     { определение клавиш которые можно будет нажимать }

        1,3:begin                                                 { если перевод из десятиричного кода }

               Isx:=10;

               Keys:=['0'..'9'];                                    { возможныеклавиши }

                Ify=1 Then Kon:=2 else Kon:=16;                     { присвоение системыисчисления результата }

              end;

        2,5: begin

               Isx:= 2;

               Keys:=['0','1'];                                     { определение клавиш которые можно бу

еще рефераты
Еще работы по программированию, базе данных