Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа о подстановках
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
K Y S K A
Помогите чего-то не компилируется, а задача: вывести на экран подстановки из н элементов.

Program PODSTANOVKI;

var n: longint;
    a: array [1..100]

{-*-*-*-*-*-*-*-*-*-*-*-*-}

procedure see(n:longint);
var i : longint;
Begin
     For i := 1 to n do
         write(a[i]);
end;

{-*-*-*-*-*-*-*-*-*-*-*-*-}

procedure Fill(n: longint);
var i :longint;
begin
     for i:= 1 to n do
     a[i]:=i;
end;

{-*-*-*-*-*-*-*-*-*-*-*-*-}

procedure perstanovka(j: longint);
var       i,k,m:longint;
          predel:boolean;
          nomer:longint;
Begin
     if j = 0 then
         Fill(n)
     else
         perestanovka(j-1);
     predel:=false;
     for i:= n downto 1 begin
         if a[i]=n then begin
            predel:=true;
            nomer:=i;
         end;
     end;
     If predel then begin
         a[nomer-1] := a[nomer-1] + 1;
         a[nomer] := a[nomer-1]-1;
         a[nomer+1] := a[nomer]+2;
                    for i:= (nomer+2) to n do
                        a[i]:=a[i-1}+1;
     end
     else
         a[n]:=a[n] +1;
     see(n);
end;

{-*-*-*-*-*-*-*-*-*-*-*-*-}

function factorial(m:longint):longint;
begin
     factorial(1):=1;
     factorial:=factorial(m-1)*m:
end;

{-*-*-*-*-*-*-*-*-*-*-*-*-}

begin
     read(n);
     perestanovki(factoreal(n));
end.
volvo
А с чего это она должна компилироваться?
    a: array [1..100]
неполное описание... Это не Бейсик, а Паскаль, нужно типы указывать...

+ Perestanovka в названии функции

+ ошибки в самой логике программы...
K Y S K A
Я уже исправила, для н=6 не работает!!!!

Программа для всех н до 5 работает, а для н=6 и более нет, что больше lONGINTа??????

черт, не работает и для 4, но как это исправить????
volvo
K Y S K A, ну я же говорил -
Цитата
ошибки в самой логике программы...


Вот так рекурсивно генерируются перестановки (работает для любого N, конкретно здесь - до 20)
const
  n: integer = 3;

var
  a: array[0 .. 20] of longint;

procedure print(T: integer);
var i: integer;
begin
  for i := 1 to T do write(a[i]:3);
  writeln
end;

procedure swap(var a, b: integer);
var T: integer;
begin T := a; a := b; b := T end;

procedure solve(T: integer);
var i: integer;
begin
  if T >= n then print(t)
  else
    for i := T + 1 to n do begin
      swap(a[T+1], a[i]);
      solve(T+1);
      swap(a[t+1], a[i])
    end
end;

var i: integer;
begin
  readln(n);
  
  for i := 1 to n do a[i] := i;
  solve(0)
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.