Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Программа выводит результат бесконечное число раз. Не ясна причина (http://www.tehnari.ru/f41/t58178/)

IvaIlga 06.10.2011 13:33

Программа выводит результат бесконечное число раз. Не ясна причина
 
Здравствуйте! я написала программу сортировки одномерного массива простым обменом. Проверила в ее работоспособности, массив выводится в правильной последовательности чисел,но бесконечное число раз. Буду рада,если Вы покажете причину и дадите совет,как устранить проблему (или сами поправите код с комментарием).Привожу саму программу:
Код:

program sortirovka1;
uses crt;
var
a: array [0..99] of integer;
i, j,n,k,x,f,g: integer;
begin
clrscr;
writeln('Danna programma sortiryet massiv prostum obmenom.');
writeln('******************************');
writeln('Vvedite chislo zifr massiva n=');
readln(n);
randomize;
for i:=1 to n do
a[i]:=random(10);
for i:=1 to n do
begin
for i:=1 to n do
inc(k);
for i:=1 to n do
write(a[i]);
writeln;
{-- algoritm sortirovki --}
for i:=n downto 2 do
    for j:=1 to i-1 do
      if a[j]>a[j+1]
        then
          begin
            f:=a[j];
            a[j]:=a[j+1];
            a[j+1]:=f;
          end;
end;
writeln('Otsortirovannui massiv: ');
while (i<n) and (i>0) do
{-- for i:=n downto 1 do--}
write(a[i]);
readln;
end.


AlexZir 06.10.2011 14:06

А вы i увеличивать не пробовали? Иногда помогает :))

IvaIlga 06.10.2011 15:37

AlexZir, попробовала увеличить. Но зацикливание все равно происходит:
Здесь есть кака-то ошибка?
Код:

i := 0;
while i < n do begin
  if i > 0 then Write(', ');
  Write(a[i]);
  Inc(i);
end;


Vladimir_S 06.10.2011 15:50

Цитата:

Сообщение от IvaIlga (Сообщение 597123)
Здравствуйте! я написала программу сортировки одномерного массива простым обменом. Проверила в ее работоспособности, массив выводится в правильной последовательности чисел,но бесконечное число раз. Буду рада,если Вы покажете причину и дадите совет,как устранить проблему (или сами поправите код с комментарием).

Да, девушка - что-то Вы тут по части циклов накрутили немыслимое. Зачем-то сортировку затолкали в цикл, да еще и двойной, да и вывод почему-то усложненный... Собственно, исправил одну ошибку (младший индекс массива вы объявили 0, а циклы строите от 1 - исправил), а в остальном редактирование свелось просто к удалению этих лишних циклов. Пожалуйста:
Код:

uses crt;
var
 a:array [1..99] of integer;
 i,j,n,f: integer;
begin
 clrscr;
 writeln('Danna programma sortiryet massiv prostum obmenom.');
 writeln('******************************');
 write('Vvedite chislo zifr massiva n= ');
 readln(n);
 randomize;

 for i:=1 to n do
  begin
  a[i]:=random(10);
  write(a[i]:2);
  end;

 writeln;

{-- algoritm sortirovki --}
 for i:=n downto 2 do
  for j:=1 to i-1 do
  if a[j]>a[j+1] then
    begin
    f:=a[j];
    a[j]:=a[j+1];
    a[j+1]:=f;
    end;

 writeln('Otsortirovannui massiv: ');

 for i:=1 to n do
  write(a[i]:2);
 readln;
end.


IvaIlga 06.10.2011 16:15

Vladimir_S, спасибо за оптимизацию и исправление программы!
Дело в том,что я с недавних пор серьезно взялась за изучение этой дисциплины и пишу код,как получается. Мне пока что хоть как-нибудь разбираться в заданиях и,чтобы сама могла составить программу :)

AlexZir 07.10.2011 09:52

IvalIga
Не пытайтесь сразу писать программу, сначала дискретизируйте задание, разбейте его на шаги, потом посмотрите, как более оптимально можно реализовать каждый шаг, составьте математическую модель задания, попытайтесь составить алгоритм, проверьте его правильность и непротиворечивость, только потом принимайтесь за программу на языке программирования.


Часовой пояс GMT +4, время: 23:15.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.