Помогите чего-то не компилируется, а задача: вывести на экран подстановки из н элементов.
Program PODSTANOVKI;
var n: longint;
a: array [1..100]
{-*-*-*-*-*-*-*-*-*-*-*-*-}procedure see(n:longint);
var i : longint;
BeginFor i := 1to n dowrite(a[i]);
end;
{-*-*-*-*-*-*-*-*-*-*-*-*-}procedure Fill(n: longint);
var i :longint;
beginfor i:= 1to n do
a[i]:=i;
end;
{-*-*-*-*-*-*-*-*-*-*-*-*-}procedure perstanovka(j: longint);
var i,k,m:longint;
predel:boolean;
nomer:longint;
Beginif j = 0then
Fill(n)
else
perestanovka(j-1);
predel:=false;
for i:= n downto1beginif a[i]=n thenbegin
predel:=true;
nomer:=i;
end;
end;
If predel thenbegin
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;
endelse
a[n]:=a[n] +1;
see(n);
end;
{-*-*-*-*-*-*-*-*-*-*-*-*-}function factorial(m:longint):longint;
begin
factorial(1):=1;
factorial:=factorial(m-1)*m:
end;
{-*-*-*-*-*-*-*-*-*-*-*-*-}beginread(n);
perestanovki(factoreal(n));
end.
volvo
7.12.2005 20:42
А с чего это она должна компилироваться?
a: array [1..100]
неполное описание... Это не Бейсик, а Паскаль, нужно типы указывать...
+ Perestanovka в названии функции
+ ошибки в самой логике программы...
K Y S K A
7.12.2005 20:45
Я уже исправила, для н=6 не работает!!!!
Программа для всех н до 5 работает, а для н=6 и более нет, что больше lONGINTа??????
черт, не работает и для 4, но как это исправить????
volvo
8.12.2005 0:07
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;
beginfor i := 1to T dowrite(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;
beginif T >= n then print(t)
elsefor i := T + 1to n dobegin
swap(a[T+1], a[i]);
solve(T+1);
swap(a[t+1], a[i])
endend;
var i: integer;
begin
readln(n);
for i := 1to n do a[i] := i;
solve(0)
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.