Во-первых, не whill, а while. Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу. Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.
Во-вторых, цикл с предусловием(while) выполняется только тогда, когда его условие возвращает ложь. Если условие возвращает правду, цикл завершается. Бывает так, что при попытке первой итерации цикла условие уже возвращает правду. В этом случае цикл не будет выполнен ни разу.
Цикл с предусловием(repeat), наоборот, выполняется, пока условие возвращает правду и завершается ложью. Стоит заметить, что если цикл с предусловием проверяет своё условие перед итерацией, цикл с постусловием делает это после, а это значит, что последний выполнится хотя бы один раз.
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('n=');
Writeln('Сумма четных: ',Range(2,n,2).Sum);
Writeln('Произведение нечетных: ',
Range(1,n,2).Aggregate(BigInteger(1),(p,q)->p*q))
end.
Примеры
n= 10
Сумма четных: 30
Произведение нечетных: 945
n= 100
Сумма четных: 2550
Произведение нечетных: 2725392139750729502980713245400918633290796330545803413734328823443106201171875
n= 220
Сумма четных: 12210
Произведение нечетных: 1107777077219218863731176870556049213277080310011307546922058816496685355705579762805879646585202270946781726057710274499420058851200005273702334889222745707797723907366146060509882690145022444427013397216796875