Пусть программ имеет блочную структуру. процедура p является блоком. параметр передается по значению. что будет напечатано? перем m, n, k: integer; процедура p(m: integer); перем n: integer; начало m: =m+1; n: =k+10; k: =m+n; writeln(‘*‘, m,‘ ‘, n, ‘ ‘, k) конец; {p} начало m: =9; n: =17; k: =213; p(k); writeln(‘#‘, m,‘ ‘, n, ‘ ‘, k) конец.
ИСПОЛЬЗУЕТ Цепь ИЗ "...\Отделы\Иное\";
ПЕР
строка, память: РЯД 100 ИЗ ЗНАК;
сч: ЦЕЛ;
УКАЗ
ЕСЛИ ЧЕТ(ДЛИНА(строка)) ТО
память[0] := строка[0];
память[1] := 0X;
Цепь.Добавить(память, "www");
ОТ сч := 1 ДО ДЛИНА(строка) - 1 ВЫП
память[сч + 3] := строка[сч]
КОН;
память[ДЛИНА(строка) + 3] := 0X
ИНАЧЕ
ОТ сч := 0 ДО ДЛИНА(строка) ДЕЛИТЬ 2 - 1 ВЫП
память[сч] := строка[сч]
КОН;
ОТ сч := ДЛИНА(строка) ДЕЛИТЬ 2 + 1 ДО ДЛИНА(строка) - 1 ВЫП
память[сч - 1] := строка[сч]
КОН;
память[ДЛИНА(строка) - 1] := 0X
КОН
КОН Задание.
Формула красивая, короткая, но неудобная для вычисления. В самом деле, надо найти три факториала, каждый из которых может оказаться достаточно большим числом. Но можно сделать небольшое преобразование и упростить вычисление.
Но это было вычисление R только для конкретного k при заданном n.
Нам же нужно найти сумму R для всех k от 2 до n. И да, для k=n формула не предназначена, но зато мы и так понимаем, что для такого случая R=1.
Задача свелась к нахождению обычной суммы
// PascalABC.NET 3.2, сборка 1370 от 24.12.2016
// Внимание! Если программа не работает, обновите версию!
function C(n,k:integer):integer;
begin
if n=k then Result:=1
else begin
var p:=1.0;
for var i:=1 to n-k do p:=p*(k+i)/i;
Result:=Round(p);
end;
end;
begin
var n:=ReadInteger('Кол-во продуктов: ');
var s:=1;
for var i:=2 to n-1 do s:=s+C(n,i);
Writeln('Кол-во салатов: ',s)
end.
Примеры:
Кол-во продуктов: 3
Кол-во салатов: 4
Кол-во продуктов: 5
Кол-во салатов: 26
Кол-во продуктов: 10
Кол-во салатов: 1013