История изменений
Исправление 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.