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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2008, 09:57   #11
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Римма Посмотреть сообщение
И здесь мне препод сказал что не правильно объявлены First и Last. Для реализации статического очереди надо объявить массив
и две переменные – указатель начала очереди First и указатель конца очереди Last.
И при каждом добавлении нового элемента переменная Last увеличивается на 1,
а при удалении на 1 увеличивается указатель First.
Еще удобно ввести переменную-счетчик(Count) числа элементов в очереди, с помощью которой легко отслеживаются состояния пустой и заполненной очереди.
Если отсюда сделать вывод то они должны быть объявлены как в маем коде то есть QueueClass . А препод говорит неправильно. А как правильно их объявить то не можете подсказать мне люди добрые объявить как integer что ли?
Да правильно он говорит. У вас же объявлен массив

Queue: array[1..10] of InfoClass

Для указания первого и последнего элемента в этом массиве нужны номера элементов т.е.

First, Last : integer;

см. pu4koff пост #3. Да и у вас было integer. А потом почему-то поменялось.

Count по желанию. Это легко вычисляется из First/Last

Даже так. Если вы введете count, то нужно будет согласованное изменение Count/First/Last. Это дополнительные и не нужные трудности в реализации.

Последний раз редактировалось alexBlack; 11.04.2008 в 10:01.
alexBlack вне форума Ответить с цитированием
Старый 11.04.2008, 11:50   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Да правильно он говорит. У вас же объявлен массив
Queue: array[1..10] of InfoClass
Дык судя по посту, автор подразумевает First и Last как указатели на кучу этих QueueClass, которых будет много. Причем тут массив то?
Только тут нужно бы Next и Prev.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.04.2008, 13:09   #13
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Дык судя по посту, автор подразумевает First и Last как указатели на кучу этих QueueClass, которых будет много. Причем тут массив то?
Только тут нужно бы Next и Prev.
Аааа... Stilet, понял твою точку зрения. Просто QueueClass - очередь элементов InfoClass. Как я понял очередь реализуется массивом

Queue: array[1..10] of InfoClass

иначе зачем он там объявлен. А для хранения головы и хвоста очереди в этом массиве используем First/Last. Может и препод так-же понял.

2Римма. Не пора уже приступить к реализации ?
alexBlack вне форума Ответить с цитированием
Старый 11.04.2008, 13:33   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дык, это я бы (чесслово) взял бы уже готовую реализацию например того же TStringList и просто подмарафетил бы его под себя. Врядли препод будет в кишки вникать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.04.2008, 15:02   #15
Римма
Пользователь
 
Регистрация: 06.12.2006
Сообщений: 31
По умолчанию

Большое спасибо что ответили на мой вапрос.Надеюсь что в этой недели закончу наверное АЛЛА БИРСА.
Римма вне форума Ответить с цитированием
Старый 15.04.2008, 10:57   #16
Римма
Пользователь
 
Регистрация: 06.12.2006
Сообщений: 31
Вопрос ??????????????

Добрый день люди добрые. Я по вашему совету приступила к реализации и сразу же у меня опять возникла вопросик. Я в начале попробую реализовать статический очередь как специализированного контейнера для хранения информационных объектов. Я сделала два модуля один для описание класса а вторая для работы с формой. Модуль первый так же оставила:

unit Unit4;//// Модуль для описание классов

interface
const
size=5;
type
InfoClass = class // Информационный класс
Private // закрытые переменные члены
Name : String[2]; // инфо поле
Public
Constructor Create(aName : string); // конструктор
Procedure SetName(aName : string); // методы доступа
Function GetName:string;
end;
QueueClass = class // Класс очереди
private
Queue: array[1..size] of InfoClass;
Count : integer;// число элементов в очереди
First : integer;
Last : integer;
public
Constructor CreateA();// конструктор вызывается при создании элемента списка
Function GetFirst: integer;
Function GetCount: integer;
Procedure SetCount(aCount : integer);
Procedure AddItem(aName : string); // процедура добавления элемента
Procedure SetFirst(aFirst : integer); // устанав.первый эл-т очереди
Function GetLast: integer; // берём последний элемент
//Function DeleteItem:InfoClass; // процедура удаления
Procedure SetLast(aLast : integer); // устанавл. последний элемент
end;
var

d:QueueClass;


implementation

uses Unit3;
// ОПИСАНИЕ МЕТОДОВ ИНФОРМАЦИОННОГО КЛАССА.
/////////////////////////////////////////////////////////////////////////////////
Constructor InfoClass.Create(aName:string);
Begin
Name := aName;
end;

Procedure InfoClass.SetName(aName : string);
Begin
Name := aName;
end;

Function InfoClass.GetName:string;
Begin
result:=Name;
End;
// ОПИСАНИЕ КЛАССА КОНТЕЙНЕР - ОЧЕРЕДИ
///////////////////////////////////////////////////////////////////////
Constructor QueueClass.CreateA();
Begin
Count:=0;
First:=1;
Last:=1;
End;

Function QueueClass.GetFirst: integer;
Begin
result:=First;
End;

Function QueueClass.GetCount: integer;
Begin
result:=Count;
End;

Procedure QueueClass.SetCount(aCount : integer);
Begin
Count:=aCount;
End;

Procedure QueueClass.SetFirst(aFirst : integer);
Begin
First:=aFirst;
End;

Function QueueClass.GetLast: integer;
Begin
result:=Last;
End;


Procedure QueueClass.SetLast(aLast : integer);
Begin
Last:=aLast;
End;

Procedure QueueClass.AddItem(aName : string);
var
temp: InfoClass;
Begin
if Count < Size then
begin
Queue[last]:=temp;
last:=last+1;
if last>size then last:=1;
Count:=Count+1;
end

End;

end.

В форму добавила кнопку «Создать очередь» и «Показать очередь» и StringGrid1.

procedure TForm3.FormCreate(Sender: TObject);
begin

d:=QueueClass.CreateA();
end;

procedure TForm3.Button1Click(Sender: TObject); // код Кнопки «Создать очередь»

begin
d.AddItem(Form3.Edit1.Text);
end;


А вот код для кнопки «Показать очередь» не получается писать. А сама я хочу писать такой код, который после нажатие на эту кнопку созданный очередь(Массив) вставит в ячейку StringGrid1. Вы не подскажите как это сделать? Или у меня где то ошибка?
Римма вне форума Ответить с цитированием
Старый 15.04.2008, 11:32   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Никуся, тебе б сюда еще добавить ченить типа GetNextItem,
Дабы в цикле можно было пройтись по очереди.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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