![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте.)
Начинаю изучать Ооп, вот появилось задание написать программу "массив динамических стеков", массив и стек должны быть описаны своими классами. вот мой класс простого массива, в который, я думаю, нужно добавлять указатели стеков(пока только добавление). Код:
unit MyMass; //заголовок модуля(!) interface Uses Dialogs, classes, SysUtils, Unit1; type TMas = class //заголовок класса mas1: array [1..20] of pCell; i : integer; private public constructor Create; overload; procedure AddX; procedure AddFD(X:integer); procedure DelFD(x:integer); procedure ShowMas; end; implementation constructor TMas.Create; begin i:=0; end; procedure TMas.AddX; begin if i>19 then ShowMessage('Массив полон') else i:=i+1; end; procedure TMas.AddFD(X:pCell); begin mas1[i]:=X; //входит из основной программы end; Класс стека(только добавление): Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Dialogs; type PCell = ^TCell; TCell = record Num : Integer; // значение Next : pCell; // указатель на следующий элемент end; TStack = class(TComponent) //класс private FDataPtr : PCell; //указатель на верхний элемент стека public constructor Create(AOwner : TComponent); overload; // procedure Push(Val : Integer); //добавление элемента в стек procedure Info(N:pCell); //отображение стека end; implementation Uses MyMass; constructor TStack.Create(AOwner : TComponent); begin inherited Create(AOwner); // вызываем конструктор предка FDataPtr:=NIL; end; procedure TStack.Push(Val : Integer); var P : PCell; str:string ; FMas : TMas; begin New(P); P^.Num:=Val; P^.Next:=FDataPtr; FDataPtr:=P; Fmas.AddFd(FdataPtr); //добавляет в массив элемент end; никак не могу разобраться с методами Set/Get... нужно ли их использовать и если да, то как? Подскажите, пожалуйста) |
#2
|
|||
|
|||
![]() Динамических - это значит что размер меняется в зависимости от потребностей. Тебе помогут классы TList, TStringList, TObjectList.
Ну а массив - это уже просто. Тебе какие данные надо в стеке хранить? |
#3
|
|||
|
|||
![]() > Тебе какие данные надо в стеке хранить?
целые числа (для простоты).. в задании об этом ничего не сказанно, поэтому я хочу сделать просто стек целых чисел. |
#4
|
|||
|
|||
![]() Тады примерно так:
Код:
unit StackUnit; interface uses Windows, SysUtils, Classes, Contnrs; type TStackItem = class private FData : Integer; public constructor Create(AData : Integer); virtual; destructor Destroy; override; property Data : Integer read FData; end; TStack = class private FItems : TObjectList; public constructor Create; virtual; destructor Destroy; override; function Pop : Integer; procedure Push(AItem : Integer); procedure Clear; end; implementation { TStackItem } constructor TStackItem.Create(AData: Integer); begin inherited; FData := AData; end; destructor TStackItem.Destroy; begin inherited; end; { TStack } procedure TStack.Clear; begin FItems.Clear; end; constructor TStack.Create; begin inherited; FItems := TObjectList.Create(True); end; destructor TStack.Destroy; begin FItems.Free; inherited; end; function TStack.Pop: Integer; begin If FItems.Count = 0 Then Raise Exception.Create('Стек пуст') Else Begin Result := (FItems[0] As TStackItem).Data FItems.Delete(0); End end; procedure TStack.Push(AItem: Integer); begin FItems.Insert(0,TStackItem.Create(AItem)); end; end. Класс TStackItem полезен для того, что бы было удобно работать, ну и для дальнейшего наращивания. |