Ещё вариант:
const M = ['0'..'9', 'a'..'f', 'A'..'F'];
var S : String; L : Byte absolute S; N : Byte;
begin
Write('Введите HEX-число = '); ReadLn(S);
N := 0; repeat Inc(N); until (N = L) or Not(S[N] in M);
Write(S); if Not(S[N] in M) then WriteLn(' - не является шестнадцатиричным числом. ') else WriteLn(' - шестнадцатеричное число. ');
end.
Цикл останавливается, если очередной символ является недопустимым!
Ещё, в случае успеха, можно представить его в 10-тичном формате:
const M = ['0'..'9', 'a'..'f', 'A'..'F'];
var S, D: String; L: Byte absolute S; dL : Byte absolute D; N: Byte;
procedure Mul16; var P, N : Byte;
begin
P := 0; for N := dL downto 1 do begin P := P + (Ord(D[N]) - 48) * 16; D[N] := Chr(P mod 10 + 48); P := P div 10; end;
while P > 0 do begin D := Chr(P mod 10 + 48) + D; P := P div 10; end;
end;
procedure Hex2Dec(C: Char); var P, N : Byte;
begin
case C of '0'..'9' : P := Ord(C) - 48; 'A'..'F' : P := Ord(C) - 55; 'a'..'f' : P := Ord(C) - 87; end;
Mul16; for N := dL downto 1 do begin P := P + (Ord(D[N]) - 48); D[N] := Chr(P mod 10 + 48); P := P div 10; end;
while P > 0 do begin D := Chr(P mod 10 + 48) + D; P := P div 10; end;
end;
begin
Write('Введите HEX-число = '); ReadLn(S);
N := 0; D := '0';
repeat Inc(N); if S[N] in M then Hex2Dec(S[N]); until (N = L) or not (S[N] in M);
Write(S); if not (S[N] in M) then WriteLn(' - не является шестнадцатиричным числом. ') else begin WriteLn(' - шестнадцатеричное число. '); WriteLn('Равно 10-ому: ', D); end;
end.
Результат:
Введите HEX-число = fEdCbA
fEdCbA - шестнадцатеричное число.
Равно 10-ому: 16702650
Это чисто Паскаль от дяди Борланда!
Если переделывать под другой паскаль, то вместо assign в описании, нужно использовать length в теле программы…
Другие языки программирования и технологии
помогите пожалуйста.pascal
program p_146;
var a:string; i:integer; b:boolean;
begin
write('Input something: '); readln(a); b:=true;
for i:=1 to length(a) do if not(a[ i]in['0'..'9','a'..'f','A'..'F']) then b:=false;
if b then writeln('16xxx') else writeln('No 16xxx'); readln
end.
var a:string; i:integer; b:boolean;
begin
write('Input something: '); readln(a); b:=true;
for i:=1 to length(a) do if not(a[ i]in['0'..'9','a'..'f','A'..'F']) then b:=false;
if b then writeln('16xxx') else writeln('No 16xxx'); readln
end.
исправь на
begin
b:=a квадр. скопки i квадр. скопки;
l:=ord(b);
begin
b:=a квадр. скопки i квадр. скопки;
l:=ord(b);
Похожие вопросы
- Помогите пожалуйста (pascal). В долгу не останусь ;)
- народ помогите пожалуйста) надо сделать прогу на pascal)
- Здравствуйте! помогите пожалуйста выполнить зачётные задания по программированию на Pascal
- Помогите пожалуйста с Pascal
- Помогите разобраться, Pascal!
- Люди помогите пожалуйста....Кто понимает TURBO PASCAL
- Помогите, пожалуйста, написать текст программы на языке высокого уровня (Basic или Pascal)!
- Turbo Pascal 7.0 помогите пожалуйста!!!
- Turbo Pascal помогите пожалуйста. помогите пожалуйста с написание программы для вычисления 1-й и 2-й производной функции
- Задача Pascal , строки , помогите пожалуйста !!!