скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

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

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

клавиши запишется в переменную 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<Kon;

          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.


Страницы: 1, 2


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.