Не понравилась реализация, переделал, специально сохранив основу предыдущего решения.
const legal = ['0'..'9', 'A'..'F', 'a'..'f'];
var s: string; i: integer; IsHex: Boolean;
begin writeln('Введите строку: '); readln(s); i := 1; IsHex := True; while (i <= length(s)) and IsHex do begin if not (s[i] in legal) then IsHex := False; i := i + 1 end; if isHex then writeln('Введенная строка является шестнадцатиричным числом.') else writeln('Введенная строка не является шестнадцатиричным числом.'); end.
Тестовое решение:
Введите строку: 58bfa Введенная строка является шестнадцатиричным числом. Введите строку: 1054Acg Введенная строка не является шестнадцатиричным числом.
// Внимание! Если программа не работает, обновите версию!
begin
var s:=ReadlnString;
if s<>s.MatchValue('[01]+') then Write('не ');
Writeln('двоичное число')
end.
Пример
010101111011
двоичное число
begin
var s:=ReadlnString;
if s<>s.MatchValue('[\+-]?\d+.\d+') then Write('не ');
Writeln('дробное число')
end.
Пример
12.54
дробное число
begin
var s:=ReadlnString;
s.Matches('\s([\+-]?\d{2})\s').Select(t->Trim(t.Value)).Println;
end.
Пример
123.3 15 -11.7 +21 23.2 51 9 182
15 +21 51