Решения (задачи 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.