Другие языки программирования и технологии

Помогите пожалуйста! Как Разработать алгоритм нахождения суммы и кол-ва четных чисел натурального ряда, кот. >K, но

>K, но
Доброго времени суток.

Нет смысла, Юрик, гонять цикл с инкрементом в 1 для четных чисел. Тогда уж лучше использовать цикл while и инкрементировать на 2. Вот только зачем вообще циклы гонять? Думать надо.

Пусть дано число К. Каким будет четное число, следующее за К? Если К нечетное, то это будет К+1, а если четное, то К+2, поскольку в условии сказано, что нужна сумма чисел больших К. Аналогично и с М. Если М не четное, то это будет М-1, а если четное, то М-2. С начальным и конечным числами последовательности разобрались. Попытаемся выяснить количество четных чисел в такой последовательности. Для этого от большего числа отнимем меньшее, разделим на 2 и к частному прибавим 1. Осталось найти сумму этих чисел. Принимая во внимание, что такая последовательность будет представлять собой арифметическую прогрессию, сумма членов которой равна среднему арифметическому ее крайних членов, умноженному на число членов. Вот и все. Осталось это же сказать на паскале.

program SumDigit;
var
i,j,k,m,n : Longint;
begin
WriteLn('Сумма и количество чётных цифр от K до M');
Write('Введите k = '); ReadLn(k);
Write('Введите m = '); ReadLn(m);

{определяем первый член последовательности}
if Odd(k) then i := k + 1 else i := k + 2;

{определяем последний член последовательности}
if Odd(m) then j := m - 1 else j := m - 2;

{находим число чисел между К и М}
N := ((j - i) div 2) + 1;

{находим сумму четных чиссел между К и М}
S := ((i + j) div 2) * N;

{выводим результат}
WriteLn('S = ', S, ' N = ', N);

ReadLn; {задержка, чтобы увидеть результат}
end.

Поскольку у нас числа четные, то имеем полное право использовать целочисленное деление (div) при нахождении суммы членов арифметической прогрессии.

Удачи!
==
==Серёга= ===
59 613
Лучший ответ
program summ; {сумма чётных цифр}
uses crt;
var n,m,i,k:integer;
s:longint;

begin
clrscr;
writeln('Сумма и количество чётных цифр от m до n');
write('Введите m = '); readln(m);
write('Введите n = '); readln(n);
s:=0; k:=0;
for i:=m to n do
if not odd(i) then
begin
s:=s+i;
inc(k)
end;
writeln('S = ',s,'; k = ',k);
readkey;
end.

odd(n) – стандартная функция модуля system. Возвращает true, если n нечётно.
inc(n) – стандартная функция модуля system. Увеличивает целое n на единицу.

Да, чтобы программа точно соответствовала твоему условию, поменяй местами m и k.

Похожие вопросы