Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 19:22   #1
Nelson1992
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 30
Сообщение Паскаль,работа со стеком.

На языке программирования Pascal реализовать процедуры работы со стеком на последовательном распределении памяти:

- Создание пустого стека

- Добавление элемента на вершину стека

- Удаление элемента с вершины стека

Процедуры, реализующие операции добавления и удаления элемента должны разумным образом обрабатывать ситуации переполнения и нехватки (схемы (2а), (3а)). Стек реализовать, используя одномерный массив и переменную типа integer (указатель на вершину стека).

вот я немного написал....но по частям...это правильно?

Создание пустого стека:

Код:
procedure CreateStack ( var StackHead: Stack); 
begin 
  StackHead:= nil 
end;
Проверка стека на пустоту

Код:
function StackIsClear( var StackHead: Stack ): Boolean; 
begin 
StackIsClear:= ( StackHead= nil ) 
end;
добавление элемента в вершину стека:

Код:
procedure IncludeInStack( var StackHead: Stack; NewElem: TypeOfElem ); 
var 
  ServiceVar: Stack; 
begin 
  {создание нового элемента} 
&nbspnew( ServiceVar ); 
  ServiceVar^.Elem:= NewElem; 
  {созданный элемент сделать вершиной стека} 
  ServiceVar^.NextElem:= StackHead; 
  StackHead:= ServiceVar 
end;
И удаление элемента из вершины стека:

Код:
procedure SelectFromStack( var StackHead: Stack; var Result: TypeOfElem ); 
var 
  ServiceVar: Assoc; 
begin 
  if StackHead <> nil then begin 
{выбор элемента из вершины} 
    Result:= StackHead^.Elem; 
    {запоминание ссылки на старую вершину} 
    ServiceVar:= StackHead; 
    {исключение из стека и уничтожение элемента} 
    StackHead:= StackHead^.NextElem; 
    dispose( ServiceVar ) 
  end 
end;
Если всё правильно теперь только мне всё это надо теперь соеденить в одну программу.

Последний раз редактировалось Stilet; 03.02.2010 в 13:41.
Nelson1992 вне форума Ответить с цитированием
Старый 03.02.2010, 13:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну приблизительно так:
Код:
type
  Stack=^TStack;
  TStack=record
   Elem:integer;
   NextElem:Stack
  end;


  procedure CreateStack ( var StackHead: Stack);
begin
  StackHead:=nil;
end;

procedure IncludeInStack( var StackHead: Stack; NewElem: integer );
var 
  ServiceVar: Stack;
begin 
  {создание нового элемента} 
  new( ServiceVar );
  ServiceVar^.Elem:= NewElem;
  {созданный элемент сделать вершиной стека} 
  ServiceVar^.NextElem:= StackHead; 
  StackHead:= ServiceVar 
end;


procedure SelectFromStack( var StackHead: Stack);
var
  ServiceVar: Stack;
begin 
  if StackHead <> nil then begin
{выбор элемента из вершины} 
    {запоминание ссылки на старую вершину}
    ServiceVar:= StackHead;
    writeln(StackHead^.Elem);
    {исключение из стека и уничтожение элемента}
    StackHead:= StackHead^.NextElem;
    dispose( ServiceVar )
  end 
end;


var sh:Stack;
begin
 CreateStack(sh);
 IncludeInStack(sh,1);
 IncludeInStack(sh,2);
 IncludeInStack(sh,3);

 SelectFromStack(sh);
 SelectFromStack(sh);
 SelectFromStack(sh);

 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со стеком xarvenx Общие вопросы C/C++ 1 25.06.2009 13:31
Программа со стеком (С++) Olya90 Помощь студентам 14 30.04.2009 00:03
работа со стеком Katovski Помощь студентам 8 12.06.2008 11:30