Выполнить поиск элемента в списке - Pascal ABC

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

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

Разработать программу, выполняющую coздание односвязного списка, вывод его элементов на экран, а также указанные действия в соответствии с вариантом. Построить схемы действий со списком, отражающие связи между элементами списка, а также их изменение в случае добавления или удаления элементов из списка.Тип элементов списка – символы. Выполнить поиск элемента в списке. Помогите исправить
Листинг программы
  1. programlistexample;
  2. uses CRT;
  3. type
  4. plist = ^tlist;
  5. tlist = record
  6. data : real;
  7. next :plist
  8. end;
  9. var
  10. list, start : plist;
  11. i : integer; b:real;
  12. procedure Add (d : real);
  13. var
  14. l :plist;
  15. begin
  16. New (l);
  17. l^.data := d;
  18. l^.next := nil;
  19. if start <> nil then
  20. begin
  21. list := start;
  22. while list^.next<> nil do
  23. list := list^.next;
  24. list^.next := l
  25. end
  26. else
  27. start := l;
  28. list := l
  29. end;
  30. procedure Display;
  31. begin
  32. if start = nil then
  33. begin
  34. writeLn ('Списокпуст');
  35. exit
  36. end;
  37. list := start;
  38. while list <> nil do
  39. begin
  40. write (#32, list^.data);
  41. list := list^.next
  42. end
  43. end;
  44. procedure Clean;
  45. var
  46. l :plist;
  47. begin
  48. if start = nil then
  49. exit;
  50. list := start;
  51. while list <> nil do
  52. begin
  53. l := list;
  54. list := list^.next;
  55. Dispose (l)
  56. end;
  57. start := nil
  58. end;
  59. procedure Delete;
  60. var
  61. l :plist;
  62. begin
  63. if start = nil then
  64. exit;
  65. l := list^.next;
  66. begin
  67. list := start^.next;
  68. Dispose (start);
  69. start := list
  70. end
  71. end;
  72. procedure Search (d :real);
  73. var
  74. flag :boolean;
  75. begin
  76. list := start;
  77. flag := false;
  78. while (list <> nil) and (not flag) do
  79. begin
  80. if d = list^.data then
  81. flag := true
  82. else
  83. list := list^.next
  84. end
  85. end;
  86. begin
  87. while true do
  88. begin
  89. ClrScr;
  90. writeLn ('Выберитедействие');
  91. writeLn ('1 - Добавление');
  92. writeLn ('2 - Удаление');
  93. writeLn ('3 -Очистка памяти');
  94. writeLn ('4 - Вывод');
  95. writeLn ('5 - Выход');
  96. writeLn ('>>>>>');
  97. Display;
  98. gotoxy (7, 7);
  99. readLn (i);
  100. gotoxy (1, 9);
  101. casei of
  102. 1 : begin
  103. write ('Введитезначение ');
  104. readln (b);
  105. Add (b)
  106. end;
  107. 2 :begin
  108. write ('Искомое значение ');
  109. readLn (b);
  110. Search (b);
  111. if list = nil then
  112. begin
  113. writeLn ('списокпуст');
  114. readLn;
  115. continue
  116. end;
  117. Delete;
  118. end;
  119. 3 : Clean;
  120. 4 : begin
  121. ClrScr;
  122. Display;
  123. readLn;
  124. end;
  125. 5 : begin
  126. Clean;
  127. break
  128. end
  129. end
  130. end
  131. end.

Решение задачи: «Выполнить поиск элемента в списке»

textual
Листинг программы
  1. program listexample;
  2.  
  3. uses CRT;
  4. type
  5.   plist = ^tlist;
  6.   tlist = record
  7.     data: real;
  8.     next: plist
  9.   end;
  10.  
  11. var
  12.   list, start: plist;
  13.   i: integer;
  14.   b: real;
  15.   f: boolean;
  16.  
  17. procedure Add(d: real);
  18. var
  19.   l: plist;
  20. begin
  21.   New(l);
  22.   l^.data := d;
  23.   l^.next := nil;
  24.   if start <> nil then
  25.   begin
  26.     list := start;
  27.     while list^.next <> nil do
  28.       list := list^.next;
  29.     list^.next := l
  30.   end
  31.   else
  32.     start := l;
  33.   list := l
  34. end;
  35.  
  36. procedure Display;
  37. begin
  38.   if start = nil then
  39.   begin
  40.     writeLn('Список пуст');
  41.     exit
  42.   end;
  43.   list := start;
  44.   while list <> nil do
  45.   begin
  46.     write(#32, list^.data);
  47.     list := list^.next
  48.   end
  49. end;
  50.  
  51. procedure Clean;
  52. var
  53.   l: plist;
  54. begin
  55.   if start = nil then
  56.     exit;
  57.   list := start;
  58.   while list <> nil do
  59.   begin
  60.     l := list;
  61.     list := list^.next;
  62.     Dispose(l)
  63.   end;
  64.   start := nil
  65. end;
  66.  
  67. procedure Delete;
  68. var
  69.   l: plist;
  70. begin
  71.   if start = nil then
  72.     exit;
  73.   l := list^.next;
  74.   begin
  75.     list := start^.next;
  76.     Dispose(start);
  77.     start := list
  78.   end
  79. end;
  80.  
  81. procedure Search(d: real; var flag: boolean);
  82. begin
  83.   list := start;
  84.   flag := false;
  85.   while (list <> nil) and (not flag) do
  86.   begin
  87.     if d = list^.data then
  88.     begin
  89.       flag := true;
  90.       break;
  91.     end
  92.     else
  93.       list := list^.next
  94.   end;
  95. end;
  96.  
  97. begin
  98.   while true do
  99.   begin
  100.     ClrScr;
  101.     writeLn('Выберите действие');
  102.     writeLn('1 - Добавление');
  103.     writeLn('2 - Удаление');
  104.     writeLn('3 - Очистка памяти');
  105.     writeLn('4 - Вывод');
  106.     writeLn('5 - Поиск');    
  107.     writeLn('6 - Выход');
  108.     writeLn('>>>>>');
  109.     Display;
  110.     gotoxy(7, 8);
  111.     readLn(i);
  112.     gotoxy(1, 10);
  113.     case i of
  114.       1:
  115.         begin
  116.           write('Введите значение ');
  117.           readln(b);
  118.           Add(b)
  119.         end;
  120.       2:
  121.         begin
  122.           write('Искомое значение ');
  123.           readLn(b);
  124.           Search(b, f);
  125.           if list = nil then
  126.           begin
  127.             writeLn('Список пуст');
  128.             readLn;
  129.             continue
  130.           end;
  131.           Delete;
  132.         end;
  133.       3: Clean;
  134.       4:
  135.         begin
  136.           ClrScr;
  137.           Display;
  138.           readLn;
  139.         end;
  140.       5:
  141.         begin
  142.           write('Искомое значение: ');
  143.           readLn(b);
  144.           Search(b, f);
  145.           if f then
  146.             writeln('Найденное значение: ', b)
  147.           else
  148.             writeln('Нет такого значения');
  149.           readLn;  
  150.         end;
  151.       6:
  152.         begin
  153.           Clean;
  154.           break
  155.         end;
  156.     end;
  157.   end;
  158. end.

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

  1. В программе используется структура данных список, представленная типом plist.
  2. Функция Add добавляет новый элемент в список.
  3. Функция Display выводит элементы списка.
  4. Функция Clean очищает список.
  5. Функция Delete удаляет элемент из списка.
  6. Функция Search ищет элемент в списке.
  7. Программа предлагает пользователю выбрать действие и выполняет соответствующую операцию.
  8. Код программы реализован с помощью условного оператора gotoxy для перемещения курсора на нужную позицию на экране.
  9. В случае поиска элемента программа выводит сообщение Найденное значение:, а затем просит пользователя ввести найденное значение.

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


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

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

13   голосов , оценка 4.154 из 5

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

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

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