Помощь - Поиск - Пользователи - Календарь
Полная версия: Разложение числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Kolyancz
Нужно написать программу разложения числа на слагаемые.

var
  n: integer;
  c: array[1..100] of integer;
  print: boolean;

const
diapazon:set of byte=[1..40];

procedure find(num,k,len: integer);
const sign: array[boolean] of char = ('+', ' ');
var
  i: integer;
begin
  if num=0 then begin
    print := true;
    for i := 1 to pred(len) do
      if not (c[i] in diapazon) then print := false;

    if print then begin
      for i:=1 to len-1 do write(c[i], sign[i = len - 1]); writeln 
    end;
  end
  else begin
    for i:=1 to k do
      if num-i>=0 then begin
        c[len]:=i;
        find(num-i,i,len+1);
      end;
  end;
end;
begin
  read(n);
  find(n,n,1);
end. 


Это программа выводит результат от наибольшего слогаемого к наименьшему, а мне надо наоборот от наименьшего к наибольшему.
Пример: число 5.
Есть:
1+1+1+1+1
2+1+1+1
2+2+1
3+1+1
3+2
4+1
5
А надо:
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
1+4
2+3
5
Помогите, пожалуйста.
Lapp
Измени вывод, вот так:
      for i:=len-1 downto 1 do write(c[i], sign[i = 1]);
Kolyancz
Цитата(Lapp @ 29.12.2008 23:53) *

Измени вывод, вот так:
      for i:=len-1 downto 1 do write(c[i], sign[i = 1]);


Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.