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