IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Нужна помощь в описании класов. контейнер на базе очереди.
medvedeva
сообщение 29.06.2011 14:55
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Женский

Репутация: -  0  +


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

Для этой задачи надо спроектировать набор необходимых классов, имена которых, а также имена их свойств и методов должны
соответствовать поставленной задаче.
- в классах ввести методы доступа к закрытым свойствам
- использование динамической версии массива не является обязательным
вот начало:
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;

заранее спасибо!

Сообщение отредактировано: Lapp - 29.06.2011 22:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 5.07.2011 19:46
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
на что получаю вот что:
1. Описание классов - отдельный модуль (один или несколько)
2. Класс Квартира: это не класс, а какое-то недоразумение!
3. Зачем вводить второе имя: TQItem = Apts;
4. Имена классов, свойств и методов должны быть содержательными: никаких Queue, Container и т.д.
5. Где метод удаления из списка и методы работы с файлами?
Я бы ответил вот так:

1. Описание классов НЕ ОБЯЗАНО быть в отдельных модулях, нечего "размазывать" эти несколько строк по десятку файлов.
2. Класс Квартира тут вообще не нужен, тут вполне достаточно Записи, если кто-то требует использования классов там, где они не нужны - то пускай он не удивляется недоразумениям. (Справедливости ради я бы все-таки добавил конструктор, я показывал как именно в посте №8)
3. Вот хочу и ввожу. Чем дополнительное имя помешало? Память при описании типа не выделяется, что не так? Не понимаем - значит "плохо"? Я захочу проверить, как работает очередь с целыми числами - присвою TQItem = Integer, и пускай компилятор мне скажет, где что надо поправить, а не буду ползать по программе и искать, "а где же тут еще надо заменить Apts на Integer"... Это называется "абстрагирование", если что.
4. Имена более чем содержательные: Queue - она и в Африке "Очередь", и если что-то делает работу Очереди, то оно должно называться TQueue, а не Ochered, и не TutBudutZapisaniUlicy... Собственно, TContainer по той же причине. Это именно контейнер (подними глаза на название темы: "Контейнер на базе очереди", и TQueue/TCOntainer, оказывается, несодержательны... Бред...)
5. Добавь - будет... Я программу "под ключ" делать не собираюсь. Во-первых - потому что это ТВОЕ задание, а во-вторых - Дельфи под Debian-ом почему-то не очень работает. Ты не в курсе, почему? smile.gif Текстовую версию (используя FPC) я набросал, основа - есть, дальше - сама. А приходить и говорить, что чего-то там нет - не надо. Ты покажи, что сделано самостоятельно, что пыталась, что не получилось. Поможем исправить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 5.07.2011 22:24
Сообщение #3


Гость






Цитата(IUnknown @ 5.07.2011 19:46) *

Ты покажи, что сделано самостоятельно, что пыталась, что не получилось. Поможем исправить...

вот что получилось, думаю не хватает многого...

unit Unit1;

interface
type
TDom = class
private
Number : Integer;
S : Integer;
public
constructor Create (value : TDom);
end;
type
TUlica = class
private
head, tail : TDom;
fHouse : Integer;
public
constructor Create (AHouse : Integer);
destructor Destroy;override;
function IsEmpty : boolean;
function Get : Dom;
procedure Put (value : Dom);
property House : Integer read fHouse;
end;
type
TGorod = class
private
fTitle : string;
Arr : array of TUlica;
function GetHouse (index : Integer) : TUlica;
function GetCount : Integer;
public
constructor Create (ATitle : string);
destructor Destroy;override;
procedure Add(Q : TUlica);
property Title : string read fTitle;
property Count : Integer read GetCount;
property Houses[index : Integer] : TUlica read GetHouse; default;
end;

implementation

end.

 К началу страницы 
+ Ответить 

Сообщений в этой теме
medvedeva   Нужна помощь в описании класов. контейнер на базе очереди.   29.06.2011 14:55
IUnknown   Во-первых, необходимо уточнение: Упорядоченного по...   29.06.2011 15:23
medvedeva   Во-первых, необходимо уточнение: Упорядоченного п...   29.06.2011 15:58
medvedeva   код пыталась отредактировать, но чёт не получилось...   29.06.2011 16:38
IUnknown   Возможно все... В первом приближении - вот так: u...   29.06.2011 17:52
medvedeva   ничего себе... спасибо огромное! для начала во...   29.06.2011 23:29
snejinka   вопрос по этой же теме... запись использовать нель...   2.07.2011 10:30
IUnknown   Не поверишь, достаточно заменить Record на Class и...   2.07.2011 11:02
Гость   Кому нужна эта лишняя головная боль? эта головна...   2.07.2011 16:04
Гость   простите конечно, но я опять к этой теме... на пре...   5.07.2011 19:27
IUnknown   Я бы ответил вот так: 1. Описание классов НЕ ОБЯЗ...   5.07.2011 19:46
Гость   Ты покажи, что сделано самостоятельно, что пытал...   5.07.2011 22:24


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.07.2025 2:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"