leha_fenchenco@mail.ru
  15.11.2012 17:39
  
 
  Program perestanowki;
const
 mm=100;
var
 m,i,j,k,n:integer;
 a,p:array[1..mm] of integer;
begin
 write('Введите число эл.для перестановки ');
 readln(m);
 writeln('Введите элементы массива a[1..m]');
 for i:=1 to m do
 begin
 write('Введите ', i, '-й элемент ');
 readln(a[i]);
 p[i]:=i
 end;
 for i:=1 to m do write(a[i], ' ');
 writeln;
 for i:=m-1 downto 1 do
 if p[i] < p[i+1] then
 begin
 n:=p[i];
 for j:=m downto i do
 if n < p[j] then
 begin
 p[i]:=p[j]; p[j]:=n;
 k := 1;
 while i+k < m-k+1 do
 begin
 n:=p[i+k];
 p[i+k]:=p[m+1-k];
 p[m+1-k]:=n;
 k:=k+1
 end;
 j:=i
 end;
 for i:=1 to m do write(a[p[i]]:4);
 writeln
 end
end.
Как сделать так что б она сохраняла ВСЕ ответы в документ, и не тормозилась на первых 20тыс.
Заранее спасибо.  И ещё, по моему у вас сполера не работаею, или Я не так пишу
 
 
 
  TarasBer
  15.11.2012 19:06
  
 
  по-моему, в коде косяк
Вот я вижу фрагмент отбмена значений:
p[i]:=p[j]; p[j]:=n;
Но переменная n инициализируется вне цикла, то есть ко второй итерации она может оказаться не равной p[i]
и ещё вы меняете j внутри цикла по j, это неправильно
и используйте тэг [ code ] [ /code]
 
 
 
  leha_fenchenco@mail.ru
  15.11.2012 19:09
  
 
  было б не плохо если вы написали текст исправленной проги
 
 
 
  TarasBer
  16.11.2012 15:10
  
 
  Что за алгоритм вы пытались реализовать?
Почему не используете отступы?
Ваша программа в Дельфи даже не компилируется, потому что Дельфи запрещает менять управляющие переменные цикла внутри цикла.
j:=i внутри цикла по j от m до i. Зачем это? Просто чтобы выйти из цикла преждевременно? Для этого есть слово break;
for i:=1 to m do write(a[p[i]]:4); - и это внутри цикла по i! Вы нарушаете работу цикла. Замените i на j, тогда оно хотя бы скомпилируется. Только показывать все перестановки оно, конечно же, не будет. Просто хотя бы потому, что двойным циклом не получить более n*n вариантов, а надо получить n! (факториал)
 
 
 
  leha_fenchenco@mail.ru
  17.11.2012 16:23
  
 
  получается нужно заменить i на j. но все перестановки все равно не выдаст...Как сделать так что б выдал все перестановки.
P.S. в АВСпаскале запускается и работает
 
 
 
 
  Использовать рекурсию, такой ответ вас удовлетворит?
 
 
 
  TarasBer
  17.11.2012 18:37
  
 
  Или алгоритм Дейкстры.
Вы ведь его попытались реализовать?
 
 
   
  Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, 
нажмите сюда.