43596 (662704), страница 2

Файл №662704 43596 (Изучение методики перевода из одной системы исчисления в другую и разработка программы для этой операц) 2 страница43596 (662704) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Первый оператор 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 (количество символов в исходном числе). Внутри

этого цикла условным оператором 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 = 100000 |

| ? 33 = 100001 |

| ? 26 = 11010 |

| ? 500 = 111110100 |

| ? 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 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<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 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]<'A' then Znach:=Ord(a[i])-48

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.

Характеристики

Тип файла
Документ
Размер
89,22 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6417
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее