Сравнение введённого и данного текста - Free Pascal
Формулировка задачи:
Определить совпадает ли введённый текст(числовой) с каким либо отрезком последовательности целых чисел 0,1,2...
пример:3, 678,101112
Решение задачи: «Сравнение введённого и данного текста»
textual
Листинг программы
const NY: array [Boolean] of String[3] = ('НЕ ','');
var
s: String;
i, j, k, p, q: Integer;
begin
repeat
Write('Цифры: '); ReadLn(s);
i:=Length(s); while (i>0) and (s[i] in ['0'..'9']) do Dec(i);
if (i=0) and (Length(s)>1) then Break
else WriteLn('*** Ошибочный ввод. Повторите...');
until False;
for j:=1 to Length(s) div 2 do
if Length(s) mod j=0 then begin
Val(Copy(s,1,j),q,k); i:=1+j;
while i+j-1<=Length(s) do begin
p:=q; Val(Copy(s,i,j),q,k);
if q-p<>1 then Break;
Inc(i,j);
end;
if i+j-1>Length(s) then Break;
end;
WriteLn(NY[i+j-1>Length(s)],'совпадает');
end.
Объяснение кода листинга программы
- Объявлены следующие переменные: — s: String; — i, j, k, p, q: Integer; — NY: array [Boolean] of String[3] = ('НЕ ','');
- В цикле repeat осуществляется ввод строки s с помощью функции ReadLn и проверка корректности ввода. Если введенная строка некорректна, выводится сообщение об ошибке и цикл повторяется. Если строка корректна, цикл завершается.
- В цикле for j:=1 to Length(s) div 2 do осуществляется проверка на четность длины строки s. Если длина строки нечетная, то цикл выполняется.
- Внутри цикла for осуществляется проверка совпадения четных подстрок s. Для этого используется функция Val для преобразования подстроки в число и проверки его на равенство предыдущему числу. Если числа не совпадают, цикл прерывается.
- Если все четные подстроки совпадают, то выводится сообщение о совпадении.
- Код не обрабатывает ситуацию, когда строка s пустая или содержит только пробелы.