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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2010, 23:50   #1
patisson74
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 17
Вопрос Связанные динамические данные.

Дано число N и набор из N чисел. Создать стек, который содержит входные числа (последнее число будет вершиной стека), и вывести указатель Р1 на его вершину. Если N = 0, то положить P1 = nil.
Вот то, что я нашел, процедуры создания, добавления элемента в стек, удаления стека, начал писать основную программу, но закончить не получается, я не могу связать добавление элемента с соответствующей процедурой....
Код:
Program Stek;
Uses  crt; 
type
  Tinf=integer; {тип данных, который будет храниться в элементе стека}
  List=^TList;  {Указатель на элемент типа TList}
  TList=record 
    data:TInf;  {данные, хранимые в элементе}
    next:List;   {указатель на следующий элемент}
  end;
 
{Процедура добавляющая элемент в стек}
procedure AddElem(var  stek1:List; znach1:TInf);
var
  tmp:List;
begin
  GetMem(tmp,sizeof(TList)); {выделяем в памяти место для нового элемента}
  tmp^.next:=stek1;  {указатель на следующий элемент "направляем" на вершину стека}
  tmp^.data:=znach1; {добавляем к элементу данные}
  stek1:=tmp; {вершина стека изменилась, надо перенести и указатели на неё}
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;
 
{Процедура освобождения памяти занятой стеком}
Procedure FreeStek(stek1:List);
var
  tmp:List;
begin
  while stek1<>nil do {пока stek1 не станет указывать в "пустоту" делать}
  begin
    tmp:=stek1; {указатель tmp направим на вершину стека}
    stek1:=stek1^.next; {вершину стека перенесём на следующий за данной вершиной элемент}
    FreeMem(tmp,SizeOf(Tlist)); {освободим память занятую под старую вершину}
  end;
end;

var N:integer;
begin
clrscr;
writeln('Введите количество элементов стека ',N);
if N <> 0 do
writeln('Введите элементы стека ');

readln;
end.
Помогите, пожалуйста, как нужно все это связать воедино????
Мученик - заочник
patisson74 вне форума Ответить с цитированием
Старый 16.04.2010, 00:30   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
var
  N, i: integer;
  x: TInf;
  MyStek: List;
begin
  writeln('Введите количество элементов стека ',N);
  readln(N);
  MyStek := nil;
  for i := 1 to N do begin
    write('Введите элементы стека #', i, ' ');
    readln(x);//вводим
    AddElem(MyStek, x)//добавляем
  end;
  Print(MyStek);//выводим
  FreeStek(MyStek);//удаляем
  readln
end.
eoln вне форума Ответить с цитированием
Старый 16.04.2010, 00:58   #3
patisson74
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 17
По умолчанию

Спасибо, вроде заработала, но непонятно почему пишет
"Введите количество элементов стека 0" ? Почему ноль? Что-то я уже совсем запутался..........
Мученик - заочник
patisson74 вне форума Ответить с цитированием
Старый 16.04.2010, 01:36   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

writeln('Введите количество элементов стека ');// N - не нужно, осталось от копипаста
eoln вне форума Ответить с цитированием
Старый 17.04.2010, 22:30   #5
patisson74
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 17
По умолчанию

Ясно, еще раз СПАСИБО за помощь!
Мученик - заочник
patisson74 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанные списки в C++ Rembo Общие вопросы C/C++ 47 11.07.2016 12:45
Связанные списки Fezdipekla Microsoft Office Access 3 02.04.2010 22:07
Связанные формы Jq KEV JavaScript, Ajax 1 28.05.2009 20:03
Динамические данные. Списки. pulsar Помощь студентам 6 23.02.2009 16:12
Не отображаются данные связанные с гл. таблицей? zimmion БД в Delphi 11 27.02.2008 18:50