В списке целых чисел удалить из каждой группы подряд идущих одинаковых элементов все, кроме одного - 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. Если условие не выполняется, то текущий элемент списка просто переходит к следующему элементу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д