Дано число является ли оно палиндромом в Pascal. Если можно с объяснением каждого шага.
Answers & Comments
APALoff
//Pascal ABC.NET Версия 2.2 Сборка 790 var s:string; i,s1:integer; begin; readln(s1); //вводим число str(s1,s); for i:=1 to length(s) div 2+length(s) mod 2 do {цикл от начала и до середины/центра в зависимости от чётности} begin; if s[i]<>s[length(s)+1-i] then {если 1 символ не равен последнему, второй-предпоследнему и т.д.} begin; writeln('Не палиндром'); exit; //если это условие хоть раз верно-программа завершается end; end; writeln('Палиндром'); //если условие не разу не оказалось верным end.
Пример ввода: 121 Пример вывода: Палиндром
2 votes Thanks 1
gimliT
Begin B:=1; While B<A do B:=B*10; B:=B div 10; If A>9 then isPali:=((A div B)=(A mod 10)) and isPali(A mod B div 10) else isPali:=True; end;
APALoff
в этом куске кода ищется порядок (сотня, тысяча и т.п.), соответствующий заданному числу и используется для получения его первой цифры. Например для 1234 порядком будет 1000 - целочисленно поделив 1234 на 1000 - получим его первую цифру "1". А дальше идёт рекурсивный способ проверки равенства первой и последней цифры.
Function isPali(A : Longint) : Boolean; Var B : Longint; Begin B:=1; While B<A do B:=B*10; B:=B div 10; If A>9 then isPali:=((A div B)=(A mod 10)) and isPali(A mod B div 10) else isPali:=True; end;
Var N : Longint; Begin Readln(N); Writeln(isPali(N)); end.
1 votes Thanks 1
APALoff
Между "дано число" и "дана строка цифр" есть разница... Вы не находите?
Gleb1Kosyrev
В данном случае и данном задании, не нахожу.
APALoff
А если это задача часть большой задачи по расчёту значений целочисленного массива, в котором и нужно определить палиндромы? В условии чётко указано - дано число, а не строка.
Gleb1Kosyrev
После "а если" обычно начинаются знатные дискуссии в комментариях. Если Вы так жаждите ввода числа, используйте inttostr().
APALoff
ну тут возникает еще одно 'если', указанная Вами функция присуща не всем диалектам языка Паскаль... в отличии от функции STR
APALoff
)) это обратное преобразование VAL тут не нужен
APALoff
Я понимаю, что Ваш метод может быть в итоге не принципиален в рамках конкретной задачи.... но я за то, чтобы решать именно в рамках поставленных условий.
Gleb1Kosyrev
Думаю, вопрос исчерпан. Останемся при своих мнениях и завершим.
Answers & Comments
var s:string;
i,s1:integer;
begin;
readln(s1); //вводим число
str(s1,s);
for i:=1 to length(s) div 2+length(s) mod 2 do
{цикл от начала и до середины/центра в зависимости от чётности}
begin;
if s[i]<>s[length(s)+1-i] then
{если 1 символ не равен последнему, второй-предпоследнему и т.д.}
begin;
writeln('Не палиндром');
exit; //если это условие хоть раз верно-программа завершается
end;
end;
writeln('Палиндром'); //если условие не разу не оказалось верным
end.
Пример ввода:
121
Пример вывода:
Палиндром
B:=1;
While B<A do B:=B*10;
B:=B div 10;
If A>9 then isPali:=((A div B)=(A mod 10)) and isPali(A mod B div 10) else isPali:=True;
end;
Verified answer
Function isPali(A : Longint) : Boolean;Var B : Longint;
Begin
B:=1;
While B<A do B:=B*10;
B:=B div 10;
If A>9 then isPali:=((A div B)=(A mod 10)) and isPali(A mod B div 10) else isPali:=True;
end;
Var N : Longint;
Begin
Readln(N);
Writeln(isPali(N));
end.