Вычислить сумму тех чисел из заданного отрезка, в запись которых входит цифра 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
, и результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д