Сортировка линейного списка при помощи алгоритма простого обмена - Pascal

Узнай цену своей работы

Формулировка задачи:

"Используя представление последовательности чисел в виде линейного списка, напишите программу, сортировки этой последовательности при помощи алгоритма простого обмена." Сделал код, но выдает ошибку в строке 46. Помогите пожалуйста. Заранее спасибо!
Листинг программы
  1. program yoho;
  2. uses crt;
  3. const n=10;
  4. type spisok=^element;
  5. element=record
  6. info:integer;
  7. next:spisok;
  8. end;
  9. var l,s,p:spisok;
  10. i,j:integer;
  11. procedure sort(p:spisok; j,i : integer);
  12. var
  13. chg:integer;
  14. b:boolean;
  15. begin
  16. for j:=1 to n-1 do begin
  17. p:=l;
  18. for i:=1 to n-j do begin
  19. b:=false;
  20. s:=p^.next;
  21. if p^.info>s^.info then b:=true;
  22. if b then
  23. begin
  24. chg:=p^.info;
  25. p^.info:=s^.info;
  26. s^.info:=chg;
  27. end;
  28. p:=p^.next;
  29. end;
  30. end;
  31. end;
  32. begin
  33. clrscr;
  34. {Заполнение списка}
  35. for i:=1 to n-1 do begin
  36. new(p);
  37. readln(p^.info);
  38. p^.next:=s;
  39. s:=p;
  40. end;
  41. new(p);
  42. readln(p^.info);
  43. p^.next:=s;
  44. l:=p;
  45. {Сортировка списка и как раз здесь ошибка возникает}
  46. sort(p);
  47. {Вывод списка}
  48. while p<>nil do begin
  49. write(p^.info:5);
  50. p:=p^.next;
  51. end;
  52. readln;
  53. end.

Решение задачи: «Сортировка линейного списка при помощи алгоритма простого обмена»

textual
Листинг программы
  1. procedure sort(var p:spisok);
  2. var
  3.   i,j,chg:integer;
  4.   b:boolean;
  5. begin
  6.     for j:=1 to n-1 do begin
  7.     p:=l;
  8.     for i:=1 to n-j do begin
  9.            b:=false;
  10.            s:=p^.next;
  11.            if p^.info>s^.info then b:=true;
  12.            if b then
  13.       begin
  14.            chg:=p^.info;
  15.            p^.info:=s^.info;
  16.            s^.info:=chg;
  17.       end;
  18.       p:=p^.next;
  19.       end;
  20.       end;
  21. end;

Объяснение кода листинга программы

Данный код представляет собой реализацию алгоритма сортировки линейного списка при помощи алгоритма простого обмена. В данном коде используются следующие переменные:

  • p: ссылка на начало списка, который нужно отсортировать.
  • n: количество элементов в списке.
  • j: переменная для итерации по элементам списка.
  • i: переменная для итерации по элементам списка.
  • chg: переменная для хранения временного значения, которое будет использоваться для обмена элементов.
  • b: логическое значение, которое указывает на то, что текущий элемент списка больше следующего. Алгоритм сортировки работает следующим образом:
    1. Инициализируем переменную p с началом списка и переменную b с false.
    2. Запускаем цикл for, который выполняется до тех пор, пока j не станет равным n-1.
    3. Внутри цикла for инициализируем переменную s с текущим элементом списка, который следует за текущим элементом.
    4. Проверяем условие p^.info > s^.info. Если это условие истинно, то меняем значения элементов и продолжаем цикл.
    5. После выполнения обмена, обновляем значение переменной p, чтобы он указывал на следующий элемент списка.
    6. После завершения внутреннего цикла, обновляем значение переменной b, чтобы она указывала на то, что все элементы были отсортированы.
    7. Завершаем внешний цикл. Таким образом, данный код выполняет сортировку линейного списка при помощи алгоритма простого обмена.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы