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

задача pascal. представить число в виде всех возможных сумм.

Для решения этой задачи нужно воспользоваться рекурсией:
procedure FindSum(Num, Ost : Byte; S : String);
var Sn : String; N : Byte;
begin
if Ost = 0 then begin Delete(S, 1, 1); if Pos('+', S) > 0 then WriteLn(Num, ' = ', S); end
else for N := 1 to Ost do begin
Str(N, Sn); FindSum(Num, Ost-N, S+'+'+Sn);
end;
end;

Write('N = '); ReadLn(N);
FindSum(N, N, '');

К примеру:

N = 5
5 = 1+1+1+1+1
5 = 1+1+1+2
5 = 1+1+2+1
5 = 1+1+3
5 = 1+2+1+1
5 = 1+2+2
5 = 1+3+1
5 = 1+4
5 = 2+1+1+1
5 = 2+1+2
5 = 2+2+1
5 = 2+3
5 = 3+1+1
5 = 3+2
5 = 4+1

Чтобы не получать значения с перестановкой слагаемых, нужно чуть-чуть доработать…

N = 5
5 = 1+1+1+1+1
5 = 1+1+1+2
5 = 1+1+3
5 = 1+2+2
5 = 1+4
5 = 2+3

… И нужно не забыть, что в переменную String влазит всего 255 символов, т. е. таким способом сумму можно получить только до значения 127 !
АС
Александр С.
81 389
Лучший ответ
Два цикла и условный оператор? Куда ж их запихать-то? Достаточно одного цикла и совсем не нужен if:
var
n,idx:integer;
begin
write('n=');
readln(n);
for idx:=0 to n do
writeln(n,'=',n-idx,'+',idx);
readln;
end.
А сложность в чем? Два цикла for и условный оператор if решат вашу задачу в пару секунд.