Иллюстрированный самоучитель по Turbo Pascal для начинающих

Решения (задачи 131-150)

Задача 149

var
st: string[2]; { шестнадцатеричное число }
d: integer; { десятичное число, соответствующее введенному шестнадцатеричному }
v: integer; { вес разряда шестнадцатеричного числа } 1: integer; begin
writeln('Введите двухразрядное шестнадцатеричное число 'и нажмите Enter.');
write(' › '); readln (st);
{ преобразуем введенную строку к верхнему регистру } for i: = l to Length(st)
do st[i]: = UpCase(st[i]);
i: = Length(st); { обрабатываем с младшего разряда } v: = l; {и его вес равен единице }
while (i>0) and
(((st[i] >= '0') and (st[i] <= '9')) or
((st[i] >= 'A') and (st[i] <= 'F'))) do begin
{ здесь символ – цифра или латинская буква от А до F }
if (st[i] >= '0') and (st[i] <= '9') then d: = d + v * (Ord(st[i])-48)
{ Ord('O') = 48, Ord('l') = 49, и т.д. } else d: = d + v * (Ord(st[i]) – 55);
{ Ord('A') = 65, Ord('B') = 66, и т.д. }
i: = i-l; { к предыдущему разряду } v: = v*16;
end;
if i=0 { обработаны все разряды }
then writeln('Шестнадцатеричному числу ',st,
' соответствует десятичное ',d) else writeln('Введенная строка не является ',
'шестнадцатеричной цифрой.');
readln; end.

Задача 150

{ Программа преобразует десятичное число
в число в указанной пользователем системе счисления (от 2-х до 10-ти))
uses Crt;
о:integer; n:integer; г:integer;
s:string[16]
{ Основание системы счисления }
{ Исходное число }
{ Остаток от деления числа на основание сист. счисл. }
 { Представление числа в заданной сист. счисл. }
buf:string[1]; begin
ClrScr;
write('Введите целое число › '); readln(n);
write('Введите основание системы счисления › '); readln(o); s: = ";
{ делим исходное число на основание системы счисления до тех пор,
пока остаток от деления больше основания системы счисления.
Остаток от деления на каждом шаге – очередная цифра. } repeat
r: = n mod о; n: = n div о; Str(r,buf); s: = buf+s; until(n<o)I Str(n,buf);
s: = buf+s; writeln(s); readln; end.
(очередная цифра } { целая часть деления } (преобразование цифры в строку}
(Программа преобразует десятичное число в шестнадцатеричное } uses Crt;
var
n:integer; { Исходное число }
r:integer; { Остаток от деления числа на основание сист. счисл. }
s:string[16]; { Представление числа в заданной сист. счисл. }
buf:string[1]; begin
ClrScr;
write('Введите целое число › ');
readln(n);
s: = ";
{ делим исходное число на основание системы
счисления (16) до тех пор, пока остаток от деления
больше основания системы счисления.
Остаток от деления на каждом шаге – очередная цифра. }
write('Десятичному числу ',п); write (' соотвествует шестнадцатеричное '); repeat
r: = n mod 16; (очередная цифра } n: = n div 16; { целая часть деления } if r<10
then buf: = chr(r+48) { chr(48) = '0', chr(49)='l' и т.д. }
else buf: = chr(r+55); { chr(65) = 'A', chr(66)='B' и т.д. } s: = buf+s;
until(n<16); if n <> 0 then begin if n<10
then buf: = chr(n+48) else buf: = chr(n+55); s: = buf+s; end;
writeln(s); readln;
end.
{ Программа вычисляет значение арифметического
выражения, введенного с клавиатуры } uses Crt;
s: string[80]; { сторока }
1: integer; { длина строки }
z: integer; { значение выражения }
n: integer; { очередное число }
i: integer; { номер числа в строке }
err: integer; { код ошибки, при преобразовании символа в число }
begin
ClrScr;
writeln('Введите арифметическое выражение,1);
writeln('например, 4+5-3-5+2 и нажмите клавишу Enter');
write(' › ');
readln(s);
val (s[1],z,err);
i: =3;
repeat
val(s[i],n,err); { получить очередное однозначное
число }
if s[i-l] = '+' then z: = z+n else z: = z-n;
until i > Length(s);
writeln('Значение введенного выражения: *,z); writeln('Для завершения программы нажмите Enter.');
readln; end.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.