Добавить процедуру, которая последний элемент массива ставит на первое место - Pascal ABC

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

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

Вот программа, нужно добавить процедуру, которая последний элемент ставит на 1 место, помогите пожалуйста.
Листинг программы
  1. program list1;
  2. type
  3. w = string[10];
  4. pComp = ^Comp;
  5. Comp = record
  6. SD: w;
  7. pNext: pComp;
  8. end;
  9. var
  10. pTop, pEnd, pAux, pKey, pPreComp: pComp;
  11. pTop1,pEnd1: pComp;
  12. D, dKey: w;
  13. bCond: boolean;
  14. procedure CreateLL(var pTop, pEnd: pComp; var D: w); { Создаём ячейку и выделяем память}
  15. begin
  16. new(pTop);
  17. pTop^.pNext := nil; {Ссылается в никуда}
  18. pTop^.SD := D;
  19. pEnd := pTop; {Связывает одну ячейку}
  20. end;
  21. procedure AddLL(var pEnd: pComp; var D: w); {Добавление ячеек}
  22. var
  23. pAux: pComp;
  24. begin
  25. new(pAux); {Выделяем память в новую ячейку}
  26. pAux^.pNext := nil;
  27. pEnd^.pNext := pAux;
  28. pEnd := pAux;
  29. pEnd^.SD := D;
  30. end;
  31. procedure Find(var dKey: w; var pTop, pKey, pPreComp: pComp; var bCond: boolean); {Поиск ключа}
  32. begin
  33. pKey := pTop; {Обьявляем начало}
  34. while (pKey <> nil) and (dKey <> pKey^.SD) do
  35. begin
  36. pPreComp := pKey;
  37. pKey := pKey^.pNext;
  38. end;
  39. if (pKey = nil) and (dKey <> pKey^.SD)
  40. then bCond := false
  41. else bCond := true;
  42. writeln(pKey^.SD);
  43. end;
  44. procedure InsComp(var dKey, D: w); {Добавляем числа по ключу}
  45. var
  46. work: pComp;
  47. begin
  48. Find(dKey, pTop, pKey, pPrecomp, bCond);
  49. work:=pKey^.pNext;
  50. pKey^.pNext:=pTop1; {Вставляем после ключа новый лист}
  51. pEnd1^.pNext:=work; {Последний элемента 2-го списка}
  52. end;
  53. begin
  54. writeln('Введите элементы списка: ');
  55. writeln('Конец списка, введите 0! ');
  56. readln(d);
  57. createLL(pTop, pEnd, d); {Функция добавления первой ячейки}
  58. repeat
  59. readln(d);
  60. if d <> '0' then addLL(pEnd, D); { Пока нет нуля, пишем добавляем элементы}
  61. until d = '0';
  62. paux := ptop;
  63. repeat
  64. paux := paux^.pNext;
  65. until paux = nil;
  66. writeln;
  67. writeln('Введите ключ ');
  68. readln(dkey);
  69. writeln('Введите элементы вставляемого списка: ');
  70. createLL(pTop1, pEnd1, D); {Описываем 2-ой список}
  71. repeat
  72. readln(D); {Считываем}
  73. addLL(pEnd1, D); {Добавляем}
  74. until d = '0';
  75. inscomp(dkey, d); {Добавление по ключу, после него}
  76. writeln;
  77. writeln('Вывод нового списка: ');
  78. paux := ptop;
  79. repeat
  80. writeln(paux^.SD);
  81. paux := paux^.pNext;
  82. until paux = nil;
  83. end.

Решение задачи: «Добавить процедуру, которая последний элемент массива ставит на первое место»

textual
Листинг программы
  1. PROCEDURE Swap;
  2. var p:pComp;
  3. s:string [10];
  4. begin
  5. p:=pTop;
  6. While p^.pNext<>nil do p:=p^.pNext;
  7. s:=p^.SD;
  8. Dispose (p);
  9. New (p);
  10. p^.SD:=s;
  11. p^.pNext:=pTop;
  12. pTop:=p;
  13. end;

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

  1. Создается процедура Swap.
  2. Создается переменная типа pComp, которую называют p.
  3. Создается переменная типа string, которую называют s, и ей присваивается значение s.
  4. Переменная p инициализируется значением pTop.
  5. В цикле While происходит следующее:
    • Переменная p считывает значение следующего элемента в массиве.
    • Переменная p освобождается с помощью Dispose.
    • Создается новый объект типа pComp.
    • Значение переменной s присваивается новому объекту pComp.
    • Переменная p^.pNext присваивается значению pTop.
  6. Переменная pTop присваивается значению p.
  7. Код завершается.

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


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

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

11   голосов , оценка 3.818 из 5

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

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

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