Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 06.10.2011, 13:33   #1 (permalink)
IvaIlga
Member
 
Регистрация: 11.11.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Программа выводит результат бесконечное число раз. Не ясна причина

Здравствуйте! я написала программу сортировки одномерного массива простым обменом. Проверила в ее работоспособности, массив выводится в правильной последовательности чисел,но бесконечное число раз. Буду рада,если Вы покажете причину и дадите совет,как устранить проблему (или сами поправите код с комментарием).Привожу саму программу:
Код:
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.
IvaIlga вне форума   Ответить с цитированием

Старый 06.10.2011, 13:33
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

По содержанию данные темы очень схожи с вашей

Не выводит массив Delphi7
В чём причина - в БП или в чём-то другом?

Старый 06.10.2011, 14:06   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

А вы i увеличивать не пробовали? Иногда помогает
AlexZir вне форума   Ответить с цитированием
Старый 06.10.2011, 15:37   #3 (permalink)
IvaIlga
Member
 
Регистрация: 11.11.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

AlexZir, попробовала увеличить. Но зацикливание все равно происходит:
Здесь есть кака-то ошибка?
Код:
i := 0;
while i < n do begin
  if i > 0 then Write(', ');
  Write(a[i]);
  Inc(i);
end;
IvaIlga вне форума   Ответить с цитированием
Старый 06.10.2011, 15:50   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от IvaIlga Посмотреть сообщение
Здравствуйте! я написала программу сортировки одномерного массива простым обменом. Проверила в ее работоспособности, массив выводится в правильной последовательности чисел,но бесконечное число раз. Буду рада,если Вы покажете причину и дадите совет,как устранить проблему (или сами поправите код с комментарием).
Да, девушка - что-то Вы тут по части циклов накрутили немыслимое. Зачем-то сортировку затолкали в цикл, да еще и двойной, да и вывод почему-то усложненный... Собственно, исправил одну ошибку (младший индекс массива вы объявили 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.10.2011, 16:15   #5 (permalink)
IvaIlga
Member
 
Регистрация: 11.11.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 07.10.2011, 09:52   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.