Пыталась написать программу, но почему-то она не идет

01.01.2001

пыталась написать программу, но почему-то она не идет.
Разложить заданное число на всевозможные слагаемые, использованием рекурсии
function f(m,i:integer):integer;
var k:array [1..100] of integer;p:integer;
begin
k[e]:=m-i;
writeln(k[e],'+',i);
if (i>1) then begin p:=i-1;
writeln(k[e],'+',i-p,'+',p);
end;
if (m<>0)and(k[e]>1) then f:=f(m,i+1);
e:=e+1;
end;
begin
writeln ('введите число '); readln(n);
j:=1;
t:=n; e:=1;
while t>0 do begin write('1'); t:=t-1; if t>0 then write('+');end;
writeln;
q:=f(n,j);
end.

  • не повезло, не фортануло (
  • закинь код на pastebin.com, чтобы отступы было видно (надеюсь, ты с отступами пишешь, а не так, как здесь код отобразился) , а то сложно вникнуть.
    И ещё вечная беда всех паскальщиков: имена переменных вида m, p, i, c, t. Меня самого так учили, но когда мои программы стали превышать хотя бы пару экранов кода, я понял, что нужно от этого избавляться.
    А что понимается под слагаемыми? 1+1+1+1+1, 1+2+1+1, 1+2+2, 2+1+1+1,...Такое нужно получить? Или нужно ещё и перестановки учитывать, чтобы не было 2+2+1 и 1+2+2?

    Через две минуты домой иду, не буду ковырять твой код. Тем более, что параметры функции в виде m и i мне вообще ни о чём не говорят. Я лучше, если время будет, дома попробую сделать на php или js, а ты потом по аналогии сможешь сделать.
    А вообще, ты бери куски своего кода и гоняй их отдельно от основной программы, чтобы каждый кусок делал именно то, что от него требуется, потом соберёшь всё вместе. Я вот что-то не вижу у тебя выхода из рекурскии. По-моему, функция будет вызывать сама себя бесконечно
    И что за переменная e? Она же нигде не объявлена.
    Почему ты думаешь, что максимум слагаемых - три? Для числа N можно найти N слагаемых равных единице.

  • var arr:array[0..100]of integer; a,lev,c:integer;

    procedure Print;
    var i: integer;
    begin
    for i:=0 to lev do
    begin write(arr[ i]); if i< lev then write('+') else writeln; end;
    end;

    procedure Decomp(n,m:integer);
    var i:integer;
    begin
    if n> 0 then
    begin
    inc(lev); for i:=m to n do begin arr[ lev]:=i; decomp(n-i,i) end; dec(lev);
    end
    else begin inc(c); Print end;
    end;

    begin
    write('Enter a number to decompose additively: ');
    readln(a); lev:=-1; c:=0; Decomp(a,1);
    writeln('The number of variants: ',c); readln
    end.

    Имей в виду, что уже число 40 дает 37338 отличающихся числами вариантов разложения.

  • Ех Delphi незнаю я его, пошли лутше на мороженоэ)

Вас заинтересует