В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - Turbo Pascal
Формулировка задачи:
Здравствуйте,
Вы не могли бы помочь с задачей контрольной работы?
"Составить программу. В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного."
Буду премного благодарен.
------------------------------------------------
С Уважением, superuser!
Решение задачи: «В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного»
textual
Листинг программы
- const
- maxRandom = 2;
- lenList = 100;
- type
- tList = ^rList;
- rList = record
- N : Integer;
- P, X : tList;
- end;
- function CreateList : tList;
- var
- L : tList;
- i : Byte;
- begin
- Randomize;
- New(L);
- L^.N := Random(maxRandom + 1);
- L^.X := nil;
- for i := 1 to lenList - 1 do
- begin
- New(L^.P);
- L^.P^.X := L;
- L := L^.P;
- L^.N := Random(maxRandom + 1);
- end;
- L^.P := nil;
- CreateList := L;
- end;
- procedure OutList(L : tList);
- begin
- Write('Список:');
- while L <> nil do
- begin
- Write(#32, L^.N);
- L := L^.X;
- end;
- WriteLn;
- end;
- procedure TransformList(var L : tList);
- var
- cur, tmp : tList;
- begin
- cur := L;
- while cur <> nil do
- begin
- if (cur^.X <> nil) and (cur^.N = cur^.X^.N) then
- begin
- tmp := cur^.X;
- cur^.X := tmp^.X;
- if tmp^.X <> nil then
- cur^.X^.P := cur;
- Dispose(tmp);
- end
- else
- cur := cur^.X;
- end;
- end;
- var
- L : tList;
- begin
- L := CreateList;
- OutList(L);
- TransformList(L);
- OutList(L);
- end.
Объяснение кода листинга программы
- В функции CreateList создается новый список, в котором каждый элемент является ссылкой на предыдущий элемент списка, за исключением первого элемента, который является самостоятельным элементом. Это достигается путем использования цикла for, который выполняется от 1 до lenList-1, и в каждой итерации создается новый элемент, который ссылается на предыдущий элемент списка.
- В процедуре OutList выводится содержимое списка, начиная с самого первого элемента. Для этого используется цикл while, который выполняется до тех пор, пока L не станет равным nil. На каждой итерации выводится значение N текущего элемента списка, а затем происходит переход к следующему элементу, который хранится в X.
- В процедуре TransformList происходит преобразование списка. Для этого используется цикл while, который выполняется до тех пор, пока текущий элемент списка не станет равным nil. Внутри цикла проверяется условие, что X равен P текущего элемента списка. Если это условие выполняется, то текущий элемент списка копируется в новый элемент, создается новый элемент, который ссылается на предыдущий элемент списка, и затем происходит переход к следующему элементу, который хранится в X. Если условие не выполняется, то текущий элемент списка просто переходит к следующему элементу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д