const PTR = 10;type razbivka = array[0..PTR] of byte;var n, i, z, k: byte;x: razbivka;procedure p(var x: razbivka; var z: byte);var i, j, s: byte;begini := z - 1;s := x[z];while (i > 1) and ( x[i - 1] <= x[i] ) dobegins := s + x[i];dec(i);end;inc( x[i] );z := i + s - 1;for j := i + 1 to z dox[j] := 1;end;beginwrite('Введите число: ');readln(n);write(n,' = ');z := n;for i := 1 to z dox[i] := 1;for i := 1 to n do beginif i > 1 then write(' + ');write( x[i], '' );end;writeln;repeatp( x, z );inc(k);write( n,' = ' );for i := 1 to z do beginif i > 1 then write(' + ');write( x[i], '' );end;writeln;until z = 1;end.p.s: нашел в интернете для вас вариант с рекурсией. Сами можете убедиться, что с ней только хуже (по быстродействию уж точно)const m = 100;var a: array[1..m] of integer;k, n: integer;procedure p(j,n: integer);var i: integer;begin if ( n = 0 ) and ( k > 1 ) thenbegin for i := 1 to k dowrite( a[i] : 4 );writeln;end else for i := j to n dobeginInc(k);a[k] := i;p( j, n - i );Dec(k);end;end;beginwrite('Введите число: ');readln(n);k := 0;p(1,n);end.значения PTR и m можно поставить и больше, но тогда я не ручаюсь)