Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2016, 20:02   #1
Валентина90
Новичок
Джуниор
 
Регистрация: 30.05.2016
Сообщений: 2
По умолчанию Помогите найти ошибку

Программа выполняет процедуру ввода и вывода, но процедуру сортировки не выполняет
Код:
program z5;
type A=array [1..10] of integer;
var C:A;
i,n,j,w:integer;
procedure vvod (i: integer; var C:A);
begin 
for i:=1 to 10 do
read (C[i]);
end;
procedure vivod (i: integer; var C:A);
begin 
for i:=1 to 10 do
write (C[i]+' ');
end;
procedure sort (n,i: integer; var C:A);
begin
for i:=1 to n do
begin
w:=C[i];
 j:=i-1;
while (w<C[j]) and (j>=0) do
begin
C[j+1]:=C[j];
j:=j-1
end;
C[j+1]:=w
end;
end;
begin
vvod (i,C);
vivod (i,C);
sort (n,i,C)
end.

Последний раз редактировалось Аватар; 19.09.2016 в 20:46.
Валентина90 вне форума Ответить с цитированием
Старый 20.09.2016, 00:10   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ошибка в алгоритме сортировки

смотрите:

Цитата:
Код:
for i:=1 to n do
begin
  w:=C[i];
   j:=i-1;
берём начало цикла.
i равно 1
чему равно j ? j:=i-1, т.е. j равно нулю
уже всё, ошибка, т.к. C[j] это C[0] - не существует (выход за границу массива).

но дальше хуже.
Цитата:
Код:
hile (w<C[j]) and (j>=0) do
пока выполняется условие, мы
Цитата:
Код:
C[j+1]:=C[j];
затираем элементы массива.

Цитата:
Код:
j:=j-1
и уменьшаем j в отрицательную сторону.

Это что за алгоритм сортировки?!


И, если Вам алгоритм сортировки можно любой использовать, то я могу предложить сортировку методом простых обменов:
Код:
procedure sort (n: integer; var C:A);
var i,j: integer;
  w : integer;
begin
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if C[i]>C[j] then begin
        w:=C[i];
        C[i]:=C[j];
        C[j]:=w;
      end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив а(n) типа SWORD. найти сумму всех отрицательных элементов массива.помогите найти ошибку Юлия123456 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 07.09.2016 06:12
Помогите найти ошибку AmaPC HTML и CSS 0 15.11.2015 19:39
Найти седловые точки в матрице(помогите найти ошибку) - pascal tdsotm Помощь студентам 0 20.11.2014 18:57
Помогите найти ошибку - StrToFloat выдаёт ошибку EConvertError для ячеек StringGrid (Delphi) Artsiom Помощь студентам 10 18.12.2013 14:10
Помогите найти ошибку smitters Общие вопросы C/C++ 9 06.07.2009 18:42