Удалить число, которое располагается на n-м месте в стеке. Free Pascal
Создать стек со случайными целыми числами. Удалить число, которое располагается на n-м месте в стеке (значение n вводится с клавиатуры)
Помогите пожалуйста с решением, пробовал делать по готовым процедурам но что-то не получается
PHP код:
uses
crt;
type
Tinf=integer;
List=^TList;
TList=record
data:TInf;
next:List;
end;
procedure Print(stek1:List);
begin
if stek1=nil then {проверка на пустоту стека}
begin
writeln('Стек пуст.');
exit;
end;
while stek1<>nil do {пока указатель stek1 не станет указывать в пустоту}
begin {а это произойдёт как только он перейдёт по ссылке последнего элемента}
Write(stek1^.data, ' '); {выводить данные}
stek1:=stek1^.next {и переносить указатель вглубь по стеку}
end;
end;
Function SearchElemZnach(stek1:List;znach1:TInf):List;
begin
if stek1<>nil then {если стек не пуст, то}
while (Stek1<>nil) and (znach1<>stek1^.data) do {пока stek1 не укажет в "пустоту" или пока мы не нашли нужный нам элемент}
stek1:=stek1^.next; {переносить указатель}
SearchElemZnach:=stek1;{функция возвращает указатель на найденный элемент}
end;
Procedure DelElemPos(var stek1:List;posi:integer);
var
i:integer;
tmp:List;
begin
if posi<1 then {проверка на ввод информации}
exit;
if stek1=nil then {если стек пуст}
begin
Write('Стек пуст');
exit
end;
i:=1; {будет считать позиции}
tmp:=stek1;
while (tmp<>nil) and (i<>posi) do {пока tmp не укажет в "пустоту" или мы не найдём искомый элемент}
begin
tmp:=tmp^.next; {переходим на следующий элемент}
inc(i) {увеличиваем значение счётчика}
end;
if tmp=nil then {если элемента нет выводим соответствующие сообщения и выходим}
begin
Writeln('Элемента с порядковым номером ' ,posi, ' нет в стеке.');
writeln('В стеке ' ,i-1, ' элемента(ов).');
exit
end;
DelElem(stek1,tmp); {если мы не вышли, то элемент есть и его следует удалить}
Writeln('Элемент удалён.'); {сообщаем о выполнении действия}
end;
begin
clrscr; {очистка экрана}
Print(Stk); {вызов процедуры вывода}
Write('Введите порядковый номер удаляемого элемента: ');
readln(znach); {ввод позиции удаляемого файла}
DelElemPos(Stk,znach);{вызов процедуры удаления элемента по значению}
readkey;{ожидаем нажатия клавиши}
end.
|