Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Удалить число, которое располагается на n-м месте в стеке. Free Pascal (http://www.tehnari.ru/f43/t253845/)

kot_ 21.05.2017 22:53

Удалить число, которое располагается на 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



Часовой пояс GMT +4, время: 04:49.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.