Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2.doc
Скачиваний:
35
Добавлен:
13.02.2015
Размер:
1.4 Mб
Скачать

Программа работы

  1. Создать новый проект в меню FileðNewðVCL Forms Application, добавить к нему новый модуль (FileðNewðUnit) и сохранить все файлы в папке с именем ‘…\Лабораторная работа № 15’.

  2. В заголовочной части второго модуля объявить класса TQueue и все его методы в соответствии с ADT – форматом, используя пространство имен MyQueue.

  3. Создать на форме компоненты ListBox1¸ListBox3, Edit1 и кнопку Button1.

Рис. 6. Примерное расположение компонентов на форме

  1. Написать программу, которая разбивала бы на пары участников праздничной дискотеки. Список всех приглашенных храниться в файле 'Дискотека.txt', которые записаны последовательно на каждой строке в следующем формате:

Ж

Анжелика Варум

М

Леонид Агутин.

Для загрузки этой информации из файла можно воспользоваться методом LoadFromFile свойства Items компонента ListBox1 в конструкторе формы FormCreate. Чтобы этот список не был виден на форме, свойство Visible этого компонента необходимо установить в false.

  1. В обработчике нажатия кнопки Button1 объявить две объектные переменные Men и Women с типом TQueue для хранения данных типа AnsiString, и записать в них имена и фамилии приглашенных в зависимости от их пола. После этого, сформировать пары танцующих в формате «Мужчина + Женщина» в компоненте ListBox2 до тех пор, пока одна из очередей не окажется пустой. Затем вывести в компонент Edit1 того, кто будет приглашен на танец следующим, а в компонент ListBox3 – всех, кто остался без пары, при условии, что одно из очередь осталась не пустой.

  2. Запустить программу на выполнение и записать в отчет расположение компонентов на форме, конструктор формы, обработчик нажатия кнопки Button1 и полученные результаты выполнения программы.

  3. Ответить на контрольный вопрос, записав в отчет разработанный метод, обработчик его использования и результат выполнения программы.

Контрольные вопросы

  1. Записать ADT – формат и объявление класса TQueue.

  2. Записать реализацию метода Insert класса TQueue и объяснить его работу.

  3. Записать реализацию метода Delete класса TQueue и объяснить его работу.

  4. Записать реализацию метода Front класса TQueue и объяснить его работу.

  5. Записать реализацию метода Empty класса TQueue и объяснить его работу.

  6. Записать реализацию метода Full класса TQueue и объяснить его работу.

  7. Записать реализацию метода Clear класса TQueue и объяснить его работу.

  8. Написать программу, считывающую последовательность n целых чисел из массива, помещая все честные числа в одну очередь, а нечетные – в другую. Выведите содержание каждой очереди в компоненты Edit1 и Edit2.

  9. Написать программу, которая, используя операции с очередью, находила бы первое появление заданного элемента в ней и перемещала бы его в вершину очереди, сохраняя упорядочение для остальных элементов.

  10. Написать программу, которая, используя операции с очередь, находила бы последнее появление заданного элемента в ней и перемещала бы его в начало очереди, сохраняя упорядочение для остальных элементов.

  11. Написать программу, которая, используя операции с очередью, удаляет из него первый заданный элемент.

  12. Записать и протестировать в программе оператор равно для очереди.

  13. Записать и протестировать в программе оператор не равно для очереди.

  14. Записать и протестировать в программе оператор присвоения для очереди.

  15. Что будет содержаться в свойстве Text компонента Edit1 после выполнения следующей программы? Ответ объяснить в пошаговом режиме.

template <class T>

voidExample()

{

TQueue<T> Queue;

int X, Y;

Y = 3;

Queue.Insert(5);

Queue.Insert(2);

Y = Queue.Front();

Queue.Insert(Y);

X = Queue.Delete();

Queue.Insert(X);

X = Queue.Delete();

Queue.Insert(Y);

Y = Queue.Delete();

Queue.Insert(X);

Queue.Insert(Y);

while (!Queue.Empty())

Edit1.Text := Edit1.Text+IntToStr(Queue.Delete());

}

  1. Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередями? Объясните Ваш выбор.

template <class T>

voidUnKnown (TQueue<T> &Queue1, TQueue<T> &Queue2)

{

TQueue<T> Temp;

T X;

while (!Queue1.Empty())

{

X = Queue1.Delete();

Temp.Insert(X);

};

while (!Temp.Empty())

{

X = Temp.Delete();

Queue1.Insert(X);

Queue2.Insert(X);

}

}

  1. Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередями? Объясните Ваш выбор.

template <class T>

voidUnKnown (TQueue<T> &Queue1, TQueue<T> &Queue2)

{

T Queue<T> Temp;

T X;

while (!Queue1.Empty())

{

X = Queue1.Delete();

Temp.Insert(X);

};

while (!Queue2.Empty())

{

X = Queue2.Delete();

Temp.Insert(X);

};

Queue2.Clear();

while (!Temp.Empty())

{

X = Temp.Delete();

Queue1.Insert(X);

Queue2.Insert(X);

};

}

  1. Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.

template <class T>

voidUnKnown (TQueue<T> &Queue1, TQueue<T> &Queue2)

{

T Queue<T> Temp;

T X;

while (!Queue2.Empty())

{

X = Queue2.Delete();

Temp.Insert(X);

};

while (!Queue1.Empty())

{

X = Queue1.Delete();

};

while (!Temp.Empty())

{

X = Temp.Delete();

Queue1.Insert(X);

Queue2.Insert(X);

};

}

  1. Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.

template <class T>

voidUnKnown (TQueue<T> &Queue)

{

TStack<T> Temp;

T X;

while (!Queue.Empty())

{

X = Queue.Delete();

Temp.Push(X);

};

while (!Temp.Empty())

{

X = Temp.Pop();

Queue1.Insert(X);

};

}

  1. Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.

template <class T>

voidUnKnown (TQueue<T> &Queue1, TQueue<T> &Queue2)

{

T Stack<T> Temp;

T X;

while (!Queue1.Empty())

{

X = Queue1.Delete();

Temp.Push(X);

};

while (!Queue2.Empty())

{

X = Queue2.Delete();

Temp.Push(X);

};

while (!Temp.Empty())

{

X = Temp.Pop();

Queue1.Insert(X);

Queue2.Insert(X);

};

}

  1. Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.

template <class T>

voidUnKnown (TQueue<T> &Queue)

{

T Queue<T> Temp;

T X;

while (!Queue.Empty())

{

X = Queue.Delete();

Temp.Insert(X);

};

while (!Temp.Empty())

{

X = Temp.Delete();

Queue.Insert(X);

};

}