Посчитать количество чисел палиндромов из последовательности чисел - Free Pascal
Формулировка задачи:
Вводится последовательность из N положительных целых элементов. Посчитать количество чисел палиндромов. Для определения палиндрома создать функцию. А теперь сам вопрос: Программа рабочая, но не совсем корректно работает. При написании числа, допустим 123421, он его считает за палиндром. Т.е. ошибка в последнем прохождении цикла на строке 17. Но вроде всё правильно. Помогите!
program project1;
function palindrom(x:longint):boolean;
var y,j:longint;
k,i:byte;
begin
palindrom:=false; // Пусть palindrom:=false
j:=1;
k:=0;
y:=abs(x);
while y>0 do // Подсчет кол-ва цифр в числе
begin
k:=k+1;
y:=y div 10;
end;
for i:=1 to k-1 do //Разрядность числа (пригодится в дальнейшем)
j:=j*10;
for i:=1 to k div 2 do
begin
if x mod 10 = x div j then //Сравнивает 1-ую и последнюю цифры
begin // И если они равны, то
palindrom:=true; // Присваиваем фунцкии значение true
x:=x-(x div j)*j; // Убираем 1-ую цифру
x:=x div 10; // Убираем последнюю цифру
j:=j div 100; // Уменьшаем разрядность на 100
end
else // иначе выходим из цикла
break;
end;
end;
var x:longint;
n,kp,i:byte;
begin
write('N = '); //Количество элементов последовательности
readln(n);
kp:=0; //Количество палиндромов
for i:=1 to N do
begin
write('x = ');
readln(x);
if x>0 then //Если число положительное, то
begin
if palindrom(x) then //Использование функции
kp:=kp+1; //Подсчет чисел палиндромов
end
else //Иначе сообщение об ошибке
writeln('Error');
end;
writeln('Kol-vo palindromov = ',kp); //Вывод
readln;
end.Решение задачи: «Посчитать количество чисел палиндромов из последовательности чисел»
textual
Листинг программы
program project1;
function Palindrom(n:longint):boolean;
var m,p:longint;
i,k:integer;
begin
m:=n;
p:=0;
while m>0 do
begin
i:=m mod 10;
p:=p*10+i;
m:=m div 10;
end;
Palindrom:=p=n;
end;
var x:longint;
n,kp,i:byte;
begin
write('N = '); //Количество элементов последовательности
readln(n);
writeln('Введите ',n,' целых положительных чисел');
kp:=0; //Количество палиндромов
for i:=1 to N do
begin
repeat
write('x',i,'=');
readln(x);
until x>0;
if palindrom(x) then //Использование функции
kp:=kp+1; //Подсчет чисел палиндромов
end;
writeln('Kol-vo palindromov = ',kp); //Вывод
readln;
end.