Вычислить сумму тех чисел из заданного отрезка, в запись которых входит цифра k - Pascal
Формулировка задачи:
Решить задачу с использованием процедур. Указать выделенные подзадачи, решаемые процедурами.
Вычислить сумму тех чисел из заданного отрезка [a, b] (a, b — натуральные), в запись которых входит цифра k.
Решение задачи: «Вычислить сумму тех чисел из заданного отрезка, в запись которых входит цифра k»
textual
Листинг программы
function HaveK(numb: Word; k: Byte): Word; var flag: Boolean; Result: Word; begin Result := numb; repeat flag := ((numb mod 10) = k); numb := numb div 10; until ((numb = 0) Or (flag)); if (Not flag) then Result := 0; HaveK := Result; end; function Rec(const a, numb: Word; const k: Byte): LongWord; var Result: LongWord; begin if (numb >= a) then begin Result := HaveK(numb, k) + Rec(a, numb - 1, k); end else Result := 0; Rec := Result; end; var a, b: Word; k: Byte; begin Write('Input a='); ReadLn(a); repeat Write('Input b(>=', a, ')='); ReadLn(b); until (b >= a); repeat Write('Input k='); ReadLn(k); until (k < 10); WriteLn('Sum=', Rec(a, b, k)); end.
Объяснение кода листинга программы
- Объявляется функция
HaveK
с параметрами:numb
(число типаWord
),k
(цифра типаByte
). В функции также объявляются переменные:flag
(логическая переменная типаBoolean
),Result
(целочисленная переменная типаWord
).
- Происходит присвоение переменной
Result
значения переданного параметраnumb
. - Инициируется цикл
repeat...until
, в котором проверяется наличие цифрыk
в числеnumb
:- Вычисляется
flag
как результат сравнения остатка от деленияnumb
на 10 с числомk
. numb
делится на 10 для последующей проверки следующей цифры. Цикл выполняется до тех пор, покаnumb
не станет равным 0 или покаflag
будет равен true.
- Вычисляется
- Если
flag
равен false (то есть цифраk
не встречается в числеnumb
), то переменнойResult
присваивается значение 0. - Возвращается значение
Result
. - Объявляется функция
Rec
с параметрами:a
(число типаWord
),numb
(число типаWord
),k
(цифра типаByte
). В функции также объявляется переменнаяResult
типаLongWord
.
- Проверяется, если
numb
больше или равноa
, то:- Вызывается функция
HaveK
для проверки наличия цифрыk
в числеnumb
и результат суммируется с рекурсивным вызовом функцииRec
с уменьшенным значениемnumb
на 1. - Результат сохраняется в переменной
Result
.
- Вызывается функция
- Если
numb
меньшеa
, переменнойResult
присваивается значение 0. - Возвращается значение
Result
. - Объявляются переменные:
a
(число типаWord
),b
(число типаWord
),k
(цифра типаByte
).
- Вводятся значения
a
,b
иk
с клавиатуры. - Вызывается функция
Rec
с параметрамиa
,b
иk
, и результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д