Решение 50 типовых задач по программированию на языке Pascal Дата размещения сборника в сети


Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal»


Download 1.52 Mb.
Pdf ko'rish
bet51/77
Sana03.02.2023
Hajmi1.52 Mb.
#1152062
TuriРешение
1   ...   47   48   49   50   51   52   53   54   ...   77
Bog'liq
Задачи на Pascal

Данил Душистов: «Решение 50 типовых задач по программированию на языке Pascal» 
46 
19.
n := n div 10 
20.
end; 
21.
if odd(digits) then n := n div 10; 
22.
for i := 1 to digits div 2 do begin 
23.
left := left + n mod 10; 
24.
n := n div 10 
25.
end; 
26.
writeln(left = right) 
27.
end. 
Представим, как должен работать алгоритм при вводе числа 14350: 
1) 
Считаем длину числа, она равна 5 (строки 11-14); 
2) 
В цикле из 5 div 2 = 2 повторений прибавляем к right крайние справа цифры 0 и 5, после 
чего отбрасываем их и имеем в n 143 (строки 17-20); 
3) 
Так как odd(digits) = odd(5) = true, отбрасываем 3, после чего имеем в n 14 (строка 21); 
4) 
В цикле из 5 div 2 = 2 повторений прибавляем к left оставшиеся цифры 1 и 4, после чего n 
становится равно 0, что, впрочем, нас уже не интересует (строки 22-25); 
5) 
Выводим на экран значение выражения left = right – ответ положительный (строка 26). 
Задача № 38. Проверить, является ли натуральное число палиндромом 
Формулировка. Дано натуральное число n. Проверить, представляет ли собой палиндром его 
десятичная запись. 
Решение. Задача является общим случаем задачи 9. Чтобы решить ее, необходимо разделить 
число n на две половины одинаковой длины, отбросить серединную цифру в случае нечетной длины 
n 
и проверить равенство одной из частей реверсной записи другой части. 
Так как нам заранее неизвестна десятичная разрядность n, мы можем посчитать ее с помощью 
следующего цикла (подробнее это описывалось в предыдущей задаче): 
a := n; 
digits := 0; 
while a <> 0 do begin 
a := a div 10; 
inc(digits) 
end; 
Теперь рассмотрим варианты проверки числа на палиндром вместе с разбором на примере. 
Пусть дано число нечетной длины, например, 79597. Мы можем отделить его правую поло-
вину 97, проведя ряд последовательных делений с взятием остатка в цикле из digits div 2 повторе-
ний. При этом необходимо сразу сформировать ее реверс в переменную right (мы делали это в 

Download 1.52 Mb.

Do'stlaringiz bilan baham:
1   ...   47   48   49   50   51   52   53   54   ...   77




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling