Перевод из одной системы в другую - Pascal

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Перевод из одной системы в другую»

textual
Листинг программы
[FONT=monospace]program Z_1_2;
{$APPTYPE CONSOLE}
uses
  SysUtils, Crt32, RusString;
Const
 BaseBin = 2; // Основание двоичной системы
 Digit: String[10] = '0123456789';  // Строка символов
Var
 Bin: String;   // Число в двоичной системе счисления
 Dec: Integer;  // Число в десятичной системе счисления
 Symbol,L: Byte;//  Длина строки Bin и номер символа в строке
 count: Byte;   // Счетчик примеров
Label
 M1,M2; // Метки
begin
 // Из двоичной в десятичную
 ClrScr;
 count := 1;
 Repeat  //Цикл
 Write(Count, Rus('. Введите число в двоичной системе счисления: ')); ReadLn(Bin);
 Dec := 0;
 Symbol :=1;
 L := Length(Bin); // Определяем длину строки Bin
 M1: begin //Метка M1
      Dec:= Dec*BaseBin + Pos(Bin[Symbol],Digit)-1;
      (*POS (SUBST, ST)  - функция типа INTEGER; отыскивает в строке ST первое
      вхождение подстроки SUBST и возвращает номер позиции, с которой она начинается;
      если подстрока не найдена, возвращается ноль.*)
      Inc(Symbol);  //  Перемещаемся к следующему символу в строке
      If L>=Symbol then Goto M1; // Проверяем если мы не до шли до конца строки
     end;                        //  Возврщаемся к метке M1
 WriteLn(Rus('   В десятичной: '), Dec);
 // Из десятичной в двоичную
 Bin := ''; // Делаем строку Bin пустой
 M2: Begin // Метка M2
       Bin := Digit[(Dec mod BaseBin)+1]+Bin; // Прибавляем к строке Bin символ
                                             //  остатка от деления плюс один строки Digit
       Dec := Dec div BaseBin;  // Делим
       If Not (Dec=0) Then Goto M2; // Проверяем если Dec<>0 Возвращаемся к M2
     end;
 WriteLn(Rus('   В двоичной: '), Bin);
  Inc(Count);// Прибавляем 1 к Count
  Until (ReadKey=#27) or (Count>10);
   //Условие для выхода- Нажата клавиша ESC или более 10 тестовых примеров[/FONT]
[FONT=monospace]end.[/FONT]

Объяснение кода листинга программы

  1. Программа начинается с объявления типа программы и использования необходимых библиотек.
  2. Затем объявляются константы и переменные, включая основание двоичной системы (BaseBin), строку символов (Digit), переменную Bin для хранения числа в двоичной системе, переменную Dec для хранения числа в десятичной системе, и переменные Symbol и L для работы с длиной строки Bin.
  3. Далее идет метка M1, за которой следует цикл, в котором пользователь вводит число в двоичной системе, а программа преобразует это число в десятичную систему и выводит результат. Внутри цикла выполняются следующие действия:
    • Dec устанавливается равным 0.
    • Symbol устанавливается равным 1.
    • L устанавливается равным длине строки Bin.
    • Если L больше или равно Symbol, то цикл повторяется, иначе программа возвращается к метке M1.
    • После вывода результата в десятичной системе, Symbol увеличивается на 1, и если это приводит к выходу за пределы строки Bin, то программа возвращается к метке M1.
  4. После метки M1 идет метка M2, за которой следует еще один цикл, в котором число в десятичной системе преобразуется обратно в двоичную систему. Внутри цикла выполняются следующие действия:
    • Bin устанавливается равным строке Digit, к которой добавляется символ, соответствующий остатку от деления Dec на BaseBin плюс 1.
    • Dec устанавливается равным Dec деленное на BaseBin.
    • Если Dec не равно 0, то цикл повторяется, иначе программа возвращается к метке M2.
  5. Цикл продолжается до тех пор, пока пользователь не нажмет клавишу ESC или не будет выполнено условие Count больше 10.
  6. Программа заканчивается без использования вложенных списков.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы