Добавить процедуру, которая последний элемент массива ставит на первое место - Pascal ABC
Формулировка задачи:
Вот программа, нужно добавить процедуру, которая последний элемент ставит на 1 место, помогите пожалуйста.
Листинг программы
- program list1;
- type
- w = string[10];
- pComp = ^Comp;
- Comp = record
- SD: w;
- pNext: pComp;
- end;
- var
- pTop, pEnd, pAux, pKey, pPreComp: pComp;
- pTop1,pEnd1: pComp;
- D, dKey: w;
- bCond: boolean;
- procedure CreateLL(var pTop, pEnd: pComp; var D: w); { Создаём ячейку и выделяем память}
- begin
- new(pTop);
- pTop^.pNext := nil; {Ссылается в никуда}
- pTop^.SD := D;
- pEnd := pTop; {Связывает одну ячейку}
- end;
- procedure AddLL(var pEnd: pComp; var D: w); {Добавление ячеек}
- var
- pAux: pComp;
- begin
- new(pAux); {Выделяем память в новую ячейку}
- pAux^.pNext := nil;
- pEnd^.pNext := pAux;
- pEnd := pAux;
- pEnd^.SD := D;
- end;
- procedure Find(var dKey: w; var pTop, pKey, pPreComp: pComp; var bCond: boolean); {Поиск ключа}
- begin
- pKey := pTop; {Обьявляем начало}
- while (pKey <> nil) and (dKey <> pKey^.SD) do
- begin
- pPreComp := pKey;
- pKey := pKey^.pNext;
- end;
- if (pKey = nil) and (dKey <> pKey^.SD)
- then bCond := false
- else bCond := true;
- writeln(pKey^.SD);
- end;
- procedure InsComp(var dKey, D: w); {Добавляем числа по ключу}
- var
- work: pComp;
- begin
- Find(dKey, pTop, pKey, pPrecomp, bCond);
- work:=pKey^.pNext;
- pKey^.pNext:=pTop1; {Вставляем после ключа новый лист}
- pEnd1^.pNext:=work; {Последний элемента 2-го списка}
- end;
- begin
- writeln('Введите элементы списка: ');
- writeln('Конец списка, введите 0! ');
- readln(d);
- createLL(pTop, pEnd, d); {Функция добавления первой ячейки}
- repeat
- readln(d);
- if d <> '0' then addLL(pEnd, D); { Пока нет нуля, пишем добавляем элементы}
- until d = '0';
- paux := ptop;
- repeat
- paux := paux^.pNext;
- until paux = nil;
- writeln;
- writeln('Введите ключ ');
- readln(dkey);
- writeln('Введите элементы вставляемого списка: ');
- createLL(pTop1, pEnd1, D); {Описываем 2-ой список}
- repeat
- readln(D); {Считываем}
- addLL(pEnd1, D); {Добавляем}
- until d = '0';
- inscomp(dkey, d); {Добавление по ключу, после него}
- writeln;
- writeln('Вывод нового списка: ');
- paux := ptop;
- repeat
- writeln(paux^.SD);
- paux := paux^.pNext;
- until paux = nil;
- end.
Решение задачи: «Добавить процедуру, которая последний элемент массива ставит на первое место»
textual
Листинг программы
- PROCEDURE Swap;
- var p:pComp;
- s:string [10];
- begin
- p:=pTop;
- While p^.pNext<>nil do p:=p^.pNext;
- s:=p^.SD;
- Dispose (p);
- New (p);
- p^.SD:=s;
- p^.pNext:=pTop;
- pTop:=p;
- end;
Объяснение кода листинга программы
- Создается процедура Swap.
- Создается переменная типа pComp, которую называют p.
- Создается переменная типа string, которую называют s, и ей присваивается значение
s
. - Переменная p инициализируется значением pTop.
- В цикле While происходит следующее:
- Переменная p считывает значение следующего элемента в массиве.
- Переменная p освобождается с помощью Dispose.
- Создается новый объект типа pComp.
- Значение переменной s присваивается новому объекту pComp.
- Переменная p^.pNext присваивается значению pTop.
- Переменная pTop присваивается значению p.
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д