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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 19:44   #1
serge_
 
Регистрация: 12.12.2011
Сообщений: 4
По умолчанию Работа со стеком. Delphi

Cпасайте, уже разные способы перепробовал. Независимо от начальных данных выводит единственное число " 1243000 ".
Создать стек из случайных чисел и из него сделать еще два стека. В первый поместить все четные, а во второй - нечетные числа.

Код:
unit Unit1; 
interface 
uses Unit2; 
type
  TForm1 = class(TForm)
    lst1: TListBox;
    lst2: TListBox;
    lst3: TListBox;
    btn1: TButton;
    btn2: TButton;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  lst:TList;
implementation 
{$R *.dfm} 
 
procedure TForm1.btn1Click(Sender: TObject);
var c:Integer;
begin
Randomize;
c:=Random(50);
lst.addk(c);
lst1.Items.Add(IntToStr(c)); 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
Lst:=Tlist.Create;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
var ev,od:TList;
  c:TInf;
begin
  od:=TList.Create;
  ev:=TList.Create;
  lst.readk(c);
  if not odd(c) then
     ev.addk(c)
  else
     od.addk(c);
  ev.print(lst2);
  od.print(lst3); 
  ev.free();
  od.free(); 
end;
end.

unit Unit2; 
interface
 uses StdCtrls, SysUtils;

 type  TInf=integer;
  TSel=^Sel;
  Sel=Record
    inf:TInf;
    A:TSel;
  end;

 TList=class( TObject)
  sp1,spk,sp,sp1ch,spkch,spch,sp1ne,spkne,spne: TSel;
  constructor create;
  procedure addk(inf: TInf);
  procedure readk(inf: TInf);
  procedure print(var list:TListBox); 
 end;

implementation
  constructor  TList.create;
  begin
    inherited create;
    sp1:=nil;
    spk:=nil;
  end;
 
procedure TList.addk;
begin
   if spk=Nil then
  begin
   New(spk);
   spk^.A:=Nil;
   spk^.Inf:=inf;
   sp1:=spk;
  end
  else
   begin
    New(spk^.A);
    spk:=spk^.A;
    spk^.Inf:=Inf;
    spk^.A:=Nil;
   end;
end;

procedure TList.readk;
begin
  Inf:=sp1^.inf;
  sp:=sp1;
  sp1:=sp1^.A;
    if sp1=Nil then spk:=Nil;
  Dispose(sp);
 
end;
procedure TList.print;
begin
  sp:=sp1;
  while sp<>nil do begin
    list.Items.add(IntToStr(sp.inf));
    sp:=sp.A;
  end;
end;
end.
Вложения
Тип файла: rar 15.rar (168.5 Кб, 17 просмотров)

Последний раз редактировалось serge_; 12.12.2011 в 20:12.
serge_ вне форума Ответить с цитированием
Старый 12.12.2011, 20:07   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Что говорит трассировка\отладка ? Кидай проектом - в разы удобнее проверять
phomm вне форума Ответить с цитированием
Старый 12.12.2011, 20:13   #3
serge_
 
Регистрация: 12.12.2011
Сообщений: 4
По умолчанию

Отладка показывает, что читается только этот элемент.
serge_ вне форума Ответить с цитированием
Старый 12.12.2011, 20:30   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Если читается именно первый элемент, то он есть в стеке (хотя вариант что он просто мусорный тоже мб), а вы же говорите, что независимо от начальных данных.

Где проект-то? Код влом смотреть "в уме", я бы сам протрассировал даже по проекту, и поискал бы в чем косяк, а то уж устал за день кодить, всё заработало, отлаживать не пришлось ) а так отдохнул бы малость )
phomm вне форума Ответить с цитированием
Старый 12.12.2011, 20:54   #5
serge_
 
Регистрация: 12.12.2011
Сообщений: 4
По умолчанию

В первом сообщении вложение.
serge_ вне форума Ответить с цитированием
Старый 12.12.2011, 21:07   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

О .. не видел.. сейчас погоняю
UPD1. хе у меня выдает 1243060 так что походу мусор стека или просто указатель
UPD2. этот мусор из-за того что у тебя описание readk(inf: TInf); а надо readk(var inf: TInf); !

Делай дальше, прикрути цикл, а то вывод в чет-нечет только по нажатию кнопки и после удаления последнего элемента из стека - креш. А ещё особо не думал над организацией, но это на список всё же больше походит, а не на стек. Может ты пытался стек на списке организовать... но у тебя чет-нечет начинает заполняться от начала списка, так что где-то перемудрил , копай указатели.

Я кстати малость удивился, у тебя в методе print исп-ся var , т.е. умеешь вроде бы пользоваться .. но он кстати в методе print не нужен - экземпляр класса (объект) Tlistbox и так по указателю передается.
Всё я спать, удачи))

Последний раз редактировалось phomm; 12.12.2011 в 21:25.
phomm вне форума Ответить с цитированием
Старый 12.12.2011, 22:14   #7
serge_
 
Регистрация: 12.12.2011
Сообщений: 4
По умолчанию

Ох блин, спасибо. Устал, видимо
serge_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со стеком 0479 Общие вопросы по Java, Java SE, Kotlin 2 27.02.2011 21:38
Работа со стеком KBAC Помощь студентам 0 26.12.2010 12:54
работа со стеком Sparky Паскаль, Turbo Pascal, PascalABC.NET 2 23.09.2010 11:08
Работа со стеком,С++ Singularity Помощь студентам 0 04.05.2010 19:31
работа со стеком xarvenx Общие вопросы C/C++ 1 25.06.2009 13:31