Другие языки программирования и технологии

Задача системы исчисления Паскаль

Имеется файл с данными. В файле столбиком выводятся четыре числа в различных системах счисления, а именно - 1. в бинарной, 2. восьмеричной, 3. десятичной 4. шестнадцатеричной. Другие системы не используются. Различные системы счисления используются в произвольном порядке и в произвольном наборе, т.е. может быть, например, два бинарных числа и ни одного восьмеричного. Все числа рассматриваются как целые и положительные. Ни одно из них по величине не превосходит 64000. Числа кодируются специальным образом так: 1. десятичные кодируются естественным образом (например: 123); 2. бинарные кодируются как последовательность нулей и единиц, а в конце записи числа приписана буква «b» (например: 101b); 3. восьмеричные кодируются аналогично, но в конце записи числа приписана буква «o» (например: 237o); 4. шестнадцатеричные числа для записи используют дополнительные символы «a», «b», «c», «d», «e» и «f», а в конце записи числа приписана буква «h» (например: b2h). Незначащих нулей, лишних пробелов - нет. Все буквы - строчные. Напишите программу, которая наводит порядок - приводит все числа к десятичному виду и записывает в другой файл.
Вот тебе программа по введённому числу получаем в 10-ой системе.
Переделать на файлы большого труда не должно составить.
var
S : String;
Error : Boolean;
N : Byte;
Chislo : Longint;
begin
Write('Введите число : '); ReadLn(S);
Error := False;
{ проверка правильности по последнему символу }
if Not(S[Length(S)] in ['0'..'9', 'b', 'o', 'h']) then Error := True
else begin
Chislo := 0;
{ по последнему символу делаем перевод величин }
case S[Length(S)] of
'0'..'9' : for N := 1 to Length(S) do
if S[N] in ['0'..'9'] then Chislo := Chislo * 10 + Ord(S[N]) - 48
else Error := True;
'b' : for N := 1 to Length(S) - 1 do
if S[N] in ['0', '1'] then Chislo := Chislo * 2 + Ord(S[N]) - 48
else Error := True;
'o' : for N := 1 to Length(S) - 1 do
if S[N] in ['0'..'7'] then Chislo := Chislo * 8 + Ord(S[N]) - 48
else Error := True;
'h' : for N := 1 to Length(S) - 1 do
if S[N] in ['0'..'9'] then Chislo := Chislo * 16 + Ord(S[N]) - 48
else if S[N] in ['A'..'F'] then Chislo := Chislo * 16 + Ord(S[N]) - 55
else if S[N] in ['a'..'f'] then Chislo := Chislo * 16 + Ord(S[N]) - 87
else Error := True;
end;
end;
if Not Error then WriteLn(Chislo)
else WriteLn('Не верно заданное число! ');
end.
Сергей Пухальский
Сергей Пухальский
55 532
Лучший ответ
За такие программы обычно денег просят.