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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2012, 17:06   #1
Viwwna
Пользователь
 
Аватар для Viwwna
 
Регистрация: 18.11.2011
Сообщений: 33
Восклицание Паскаль.Стеки

Плохо разбираюсь с созданием динамических структур типа стек....Помогите понять алгоритм приведенного кода:
Код:
Program steki;
type st=^stek;
stek=record
t:integer;
a:st;
end;
var s1,s2:st;
i1:integer;
  begin
  s2:=nil;
  i1:=0;
  while i1>=0 do
        begin
            new(s1);
            writeln ('Введите число:');
            read(i1);
            s1^.t:=i1;
            s1^.a:=s2;
            s2:=s1;
            end;
        repeat
        writeln('Элемент стека: ',s1^.t);
        s2:=s1^.a;
        dispose(s1);
        s1:=s2;
    until(s1=nil);
    End.
Спасибо, кто объяснит алгоритм решения данного кода (что и как происходит).
Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает программистов, презирающих программистов, которые презирают тех, кто их презирает.
Viwwna вне форума Ответить с цитированием
Старый 28.06.2012, 21:33   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Код:
Program steki;
type st=^stek; {объявление типа - указатель на структуру типа stek }
stek=record {описание элемента динамической структуры - запись}
t:integer; {информационное поле структуры}
a:st;   {техническое поле, используется для связывания элементов}
end;
var s1,s2:st; {объявление двух переменных, которые теперь являются
типизированными указателями - указатели на такую структуру памяти, в которой будут размещаться элементы стека}
{s1-временная переменная - нужна на стадии формирования элемента,  s2 - переменная - указатель на вершину стека}
i1:integer;
  begin
  s2:=nil; {стек пуст}
  i1:=0;
  while i1>=0 do
        begin
            new(s1); {просим выделить в динамической области такое количество памяти, что бы
там разместился элемент структуры - целое и указатель. s1 - получает значение адреса на начало такого фрагмента памяти}
            writeln ('Введите число:');
            read(i1);
            s1^.t:=i1; {заполняем элемент полезной информацией}
            s1^.a:=s2; {заполняем техническое поле - nil - это последний элемент}
            s2:=s1; {передаем адрес начала элемента - s2-хранит адрес на вершину стека}
            end; {конец цикла While}
        repeat
        writeln('Элемент стека: ',s1^.t); {поскольку при последней операции в предыдущем цикле
указатель на элемент в вершине стека сохранился во временной переменной s1, то используем этот момент
и читаем введенное значение - полезную информацию}
        s2:=s1^.a; {переносим указатель на вершину стека}
        dispose(s1); {освобождаем память из под прочитанного элемента - возвращаем в "кучу"}
        s1:=s2; {переписываем указател на вершину стека во временную переменную и переходим на начало цикла}
    until(s1=nil);
    End.
Ну вот, объяснил ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++: Стеки erfo Помощь студентам 0 23.05.2012 20:05
Стеки ильшат9 Паскаль, Turbo Pascal, PascalABC.NET 0 18.10.2011 18:43
Где ошибка в программе? Списки. Стеки. Паскаль AHD Помощь студентам 0 10.12.2010 14:25
Стеки в Си n4sfe Помощь студентам 0 28.11.2009 13:49