LINUX.ORG.RU

История изменений

Исправление ilyaGor, (текущая версия) :

Спасибо вам за такое подробное объяснение. Переписал с учётом того, что вы подсказали, насколько я вижу оно почти работает. Там снизу добавил основное тело программы, чтобы видеть, что числа выдаются. Если ввожу двузначное значение в параметр, который отвечает за систему исчисления, он передаёт второй символ сразу в следующий параметр. Подскажите как реализовать у этого параметра ввод двузначных?

procedure ReadLongint (var success : boolean; var base: integer; var result : longint; var notation : char);
var
   c	: char;
   res	: longint;
   pos	: integer;
begin
   res := 0;
   pos := 0;
   repeat
      read(c);
      pos := pos + 1
   until (c <> ' ') and (c <> #10);
   while (c <> ' ') and (c <> #10) do
   begin    
      case c of
        '0'..'9': res:=res*base+ord(c)-ord('0');
        'A'..'Z': res:=res*base+ord(c)-ord('A')+10;
        'a'..'z': res:=res*base+ord(c)-ord('a')+36;
       end;
   read(c);
   pos := pos + 1    
  
   end;
   result := res;
   success := true
end;

var
   x, y	: longint;
   n	: char;
   ok	: boolean;
   base	: integer;
begin
    repeat
       write('Please type scale of notation: ');
       read(n)
    until (n >' ');
    base:=10;
    if n='$' then begin
    base:=16;
    read(n);
    end;
    repeat
       write('Please type the first number: ');
       ReadLongint(ok, base, x, n)
    until ok;
    repeat
       write('Please type the second number: ');
       ReadLongint(ok, base,  y, n)
    until ok;
 writeln(x, ' times ', y, ' is ', x*y)
end.

Исходная версия ilyaGor, :

Спасибо вам за такое подробное объяснение. Переписал с учётом того, что вы подсказали, насколько я вижу оно почти работает. Там снизу добавил основное тело программы, чтобы видеть, что числа выдаются. Если ввожу двузначное значение в параметр, который отвечает за систему исчисления, он передаёт второй символ сразу в следующий параметр. Подскажите как реализовать ввод у этого параметра ввод двузначных?

procedure ReadLongint (var success : boolean; var base: integer; var result : longint; var notation : char);
var
   c	: char;
   res	: longint;
   pos	: integer;
begin
   res := 0;
   pos := 0;
   repeat
      read(c);
      pos := pos + 1
   until (c <> ' ') and (c <> #10);
   while (c <> ' ') and (c <> #10) do
   begin    
      case c of
        '0'..'9': res:=res*base+ord(c)-ord('0');
        'A'..'Z': res:=res*base+ord(c)-ord('A')+10;
        'a'..'z': res:=res*base+ord(c)-ord('a')+36;
       end;
   read(c);
   pos := pos + 1    
  
   end;
   result := res;
   success := true
end;

var
   x, y	: longint;
   n	: char;
   ok	: boolean;
   base	: integer;
begin
    repeat
       write('Please type scale of notation: ');
       read(n)
    until (n >' ');
    base:=10;
    if n='$' then begin
    base:=16;
    read(n);
    end;
    repeat
       write('Please type the first number: ');
       ReadLongint(ok, base, x, n)
    until ok;
    repeat
       write('Please type the second number: ');
       ReadLongint(ok, base,  y, n)
    until ok;
 writeln(x, ' times ', y, ' is ', x*y)
end.