Двоично-десятичное в Delphi 7 - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать простую консольную программу, в которой пользователь вводит двоичную строку, а он получает десятичное число.Мне не нужно проверять, есть ли в двоичной строке что-то еще, кроме 0 или 1. Мне уже удалось сделать десятичную в двоичную, но я не могу сделать это иначе.

Я попробовал какой-то код, найденный в SO и Redditно большую часть времени я получаю ошибку ввода / вывода 105

Вот десятичное значение для бина:

program dectobin;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Crt32;

var
 d,a :Integer;
 str :String;

begin
   str:='';
   Readln(a);
   while a>0 do begin
    d:=a mod 2;
    str:=concat(IntToStr(d),str);
    a:=a div 2;
  end;
  Writeln(str);
  Readln;
end.```

1 Ответ

0 голосов
/ 11 мая 2019

Основы позиционных систем счисления (PNS)

  • Количество уникальных цифр в PNS является его базой (или основанием)
    • Десятичная система (основание = 10) имеет десять цифр, 0,9
    • Бинарная система (база = 2) имеет две цифры, 0..1
  • Положение цифры в числе определяет ее вес:
    • самая правая цифра имеет вес единиц (1), (основание) ^ 0 (десятичное 1, двоичное 1)
    • вторая (справа) цифра имеет вес (основание) ^ 1 (десятичная 10, двоичная 2)
    • третья (справа) цифра имеет вес (основание) ^ 2 (десятичное 100, двоичное число 4)
    • и т. Д.

Обратите внимание, что вес всегда base * weight of previous digit (в направлении справа налево)

Общая интерпретация строки чисел в любой позиционной системе счисления

  assign a variable 'result' = 0
  assign a variable 'weight' = 1 (for (base)^0 )
  repeat
    read the rightmost (not yet read) digit from string
    convert digit from character to integer
    multiply it by weight and add to variable 'result'
    multiply weight by base in prep. for next digit
  until no more digits

После предыдущего вы можете использовать, например, IntToStr() для преобразования в десятичную строку.

...