Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.06.2011, 15:50
medvedeva medvedeva вне форума
Прохожий
 
Регистрация: 27.06.2011
Сообщения: 2
Репутация: 10
По умолчанию Нужна помощь в описании класов. контейнер на базе очереди

тема:Объектная реализация контейнера на основе комбинированной структуры «Упорядоченный массив динамических очередей»
есть начало, но его нужно переделать так, чтобы выполнялось след:
- информационные объекты являются квартирами дома с парой свойств Номер и Площадь
- квартиры объединяются в рамках объекта Дом (свойство - НомерДома) на основе динамической очереди
- дома объединяются в рамках объекта Улица (свойство - Название) на основе упорядоченного массива.

Для этой задачи надо спроектировать набор необходимых классов, имена которых, а также имена их свойств и методов должны
соответствовать поставленной задаче.
- в классах ввести методы доступа к закрытым свойствам
- использование динамической версии массива не является обязательным
вот начало:
Код:
uses
  classes,
  SysUtils;
 
type
  T = integer;
  TypizFile = file of T; // типизированный файл
 
  TQueueItem = class // класс - элемент очереди
  private
    Data: T; // мои данные
    Next: TQueueItem; // указатель на следующий элемент
  private
    constructor Create(value: T); // создание элемента очереди
  end;
 
  TQueue = class // класс очередь
  private
    Marker: T; // для метки очередей, для их поиска
    First, Last: TQueueItem; // указатели начала и конца
 
  public
    constructor Create; // инициализация очереди
    destructor Free;
    procedure Put(value: T); // добавление элемента
    function Get: T; // удаление
    procedure Print; // просмотр
    function Empty: boolean; // проверка на пустоту
 
    // procedure Save (value: T); //сохранение в файл
    // procedure Load (value: T); // загрузка из файла
  end;
 
  {Класс TCont обьявляем контейнерным классом}
  TCont = class // класс-контейнер
  private // свойства
    mas: array of TQueue; // динамический массив
    procedure Add(theQueue: TQueue);
 
  public
    Constructor Create; // создание массива указателей очередей
    Procedure Add_main; // добавить новые очереди в контейнер
    Procedure Delete_main;
    procedure Scan_main;
    // procedure Save (value: T); //сохранение контейнера в файл
    // procedure Load (value: T); // загрузка из файла
  end;
 
 
{========================================}
// инициализация элемента
constructor TQueueItem.Create(value: T);
begin
  Data := value;
  next := nil;
end;
 
{==========================================}
// инициализация очереди
Constructor TQueue.Create;
begin
  first := nil; last := nil; // создаем пустую очередь
end;
// Освобождаем память, которую занимала очередь
destructor TQueue.Free;
begin
  while not Empty do Get; // удаляем все элементы
end;
Админ: Пользуемся тегами для оформления кода!

Последний раз редактировалось Admin, 29.06.2011 в 15:54.
Ответить с цитированием
  #2  
Старый 01.07.2011, 00:43
Аватар для Developer
Developer Developer вне форума
Прохожий
 
Регистрация: 01.07.2011
Адрес: Украина
Сообщения: 27
Версия Delphi: 7, 2009
Репутация: 75
По умолчанию

А нельзя ли использовать стандартные классы, например TList или вам нужно свой класс реализовать?
Ответить с цитированием
  #3  
Старый 01.07.2011, 01:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а все равно кучу своего дописывать.
Для внутреннего списка я обычно использую TObjectList, который как Items с соотв. методами доступа вытягиваю в интерфейс.

Вообще, в задании не указано как делать очереди. Т.е. имплементация может быть любая. только вот я не понимаю зачем для данной задачи вообще очередь...

Я бы делал как-то так:
Код:
type
  TBaseClass = class
  public
    // create new instance
    constructor Create; virtual; overload;

    // create instance and load from stream
    constructor Create(AStream : TStream); virtual; overload;

    // save/load object to/from stream
    procedure SaveToStream(AStream : TStream); virtual; abstract;
    procedure LoadFromStream(AStream : TStream); virtual; abstract;
  end;

  TApartment = class(TBaseClass)
  priivate
    FNumber : Integer;
    FSquare : Integer;
  public
    procedure SaveToStream(AStream : TStream); override;
    procedure LoadFromStream(AStream : TStream); override;
    
    property Number : Integer read FNumber write SetNumber;
    property Square : Integer read FSquare write SetSquare;
  end;

  THouse = class(TBaseClass)
  private
    FNumber : Integer;
    FItems : TObjectList;
  public
    procedure SaveToStream(AStream : TStream); override;
    procedure LoadFromStream(AStream : TStream); override;
    
    function Add(AItem : TApartment) : Integer;
    function AddNew(ANumber, ASquare : Integer) : Integer;

    procedure  Remove(AItem : TApartment);
    procedure Delete(AIndex : Integer);

    procedure IndexOf(AItem : TApartment) : Integer; overload;
    procedure IndexOf(ANumber : Integer) : Integer; overload;

    property Number : Integer read FNumber write SetNumber;
    property Items[Index : Integer] : TApartment read GetApartment;
    property Count : Integer read GetCount;
  end;

и т.д.
когда перенесешь код в среду, то нажми Ctrl+Shift+C и среда догенерит все, чего не хватает (сетеры/гетеры и заготовки для методов).
Ответить с цитированием
  #4  
Старый 25.07.2011, 20:04
medvedeva medvedeva вне форума
Прохожий
 
Регистрация: 27.06.2011
Сообщения: 2
Репутация: 10
Вопрос

вопрос по поводу класса TDom.. как сделать так, чтоб элементы собирались в динамичекую структуру?
Код:
type
   TKvartira = class // класс квартир
  private
    Number : Integer;
    S : Integer;
    procedure SetNumber(aNumber:integer);
    function GetNumber:integer;
    proedure SetS(kvS:integer);
    function GetS:integer;
  public
    constructor Create (aNumber:integer; aS:integer);
  property
    fNumber:integer read GetNumber write SetNumber;
  property
    fS:integer read GetS write SetS;
  end;
type
  TDom = class // класс дом
  private
    head, tail : TKvartira;
    fDom : Integer;
  public
    constructor Create (ADom : Integer);
    destructor Destroy;override;
    function IsEmpty : boolean;
    function Get : Kvartira;
    procedure Put (value : Kvartira);
    property Dom : Integer read fDom;
  end;
type
  TUlica = class // класс улица
  private
    fTitle : string;
    Arr : array of TDom;
    function GetDom (index : Integer) : TDom;
    function GetCount : Integer;
  public
    constructor Create (ATitle : string);
    destructor Destroy;override;
    procedure Add(Q : TDom);
    procedure Del: TDom;
    procedure Print (Q : TDom);
    property Title : string read fTitle;
    property Count : Integer read GetCount;
    property Dom[index : Integer] : TDom read GetDom; default;
  end;

Последний раз редактировалось medvedeva, 25.07.2011 в 20:09.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter