В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - Turbo Pascal

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

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

Здравствуйте, Вы не могли бы помочь с задачей контрольной работы? "Составить программу. В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного." Буду премного благодарен. ------------------------------------------------ С Уважением, superuser!

Решение задачи: «В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного»

textual
Листинг программы
  1. const
  2.   maxRandom = 2;
  3.   lenList   = 100;
  4.  
  5. type
  6.   tList = ^rList;
  7.   rList = record
  8.     N : Integer;
  9.     P, X : tList;
  10.   end;
  11.  
  12. function CreateList : tList;
  13. var
  14.   L : tList;
  15.   i : Byte;
  16. begin
  17.   Randomize;
  18.   New(L);
  19.   L^.N := Random(maxRandom + 1);
  20.   L^.X := nil;
  21.   for i := 1 to lenList - 1 do
  22.     begin
  23.       New(L^.P);
  24.       L^.P^.X := L;
  25.       L := L^.P;
  26.       L^.N := Random(maxRandom + 1);
  27.     end;
  28.   L^.P := nil;
  29.   CreateList := L;
  30. end;
  31.  
  32. procedure OutList(L : tList);
  33. begin
  34.   Write('Список:');
  35.   while L <> nil do
  36.     begin
  37.       Write(#32, L^.N);
  38.       L := L^.X;
  39.     end;
  40.   WriteLn;
  41. end;
  42.  
  43. procedure TransformList(var L : tList);
  44. var
  45.   cur, tmp : tList;
  46. begin
  47.   cur := L;
  48.   while cur <> nil do
  49.     begin
  50.       if (cur^.X <> nil) and (cur^.N = cur^.X^.N) then
  51.         begin
  52.           tmp := cur^.X;
  53.           cur^.X := tmp^.X;
  54.           if tmp^.X <> nil then
  55.             cur^.X^.P := cur;
  56.           Dispose(tmp);
  57.         end
  58.       else
  59.         cur := cur^.X;
  60.     end;
  61. end;
  62.  
  63. var
  64.   L : tList;  
  65. begin
  66.   L := CreateList;
  67.   OutList(L);
  68.   TransformList(L);
  69.   OutList(L);
  70. end.

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

  1. В функции CreateList создается новый список, в котором каждый элемент является ссылкой на предыдущий элемент списка, за исключением первого элемента, который является самостоятельным элементом. Это достигается путем использования цикла for, который выполняется от 1 до lenList-1, и в каждой итерации создается новый элемент, который ссылается на предыдущий элемент списка.
  2. В процедуре OutList выводится содержимое списка, начиная с самого первого элемента. Для этого используется цикл while, который выполняется до тех пор, пока L не станет равным nil. На каждой итерации выводится значение N текущего элемента списка, а затем происходит переход к следующему элементу, который хранится в X.
  3. В процедуре TransformList происходит преобразование списка. Для этого используется цикл while, который выполняется до тех пор, пока текущий элемент списка не станет равным nil. Внутри цикла проверяется условие, что X равен P текущего элемента списка. Если это условие выполняется, то текущий элемент списка копируется в новый элемент, создается новый элемент, который ссылается на предыдущий элемент списка, и затем происходит переход к следующему элементу, который хранится в X. Если условие не выполняется, то текущий элемент списка просто переходит к следующему элементу.

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


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

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

14   голосов , оценка 3.929 из 5

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

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

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