- •Лабораторная работа № 1 рациональные числа
- •Теоретические сведения
- •Синтаксис объявления класса tRational
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 2 комплексные числа
- •Теоретические сведения
- •Синтаксис объявления класса tComplex
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 3 векторы
- •Теоретические сведения
- •Синтаксис объявления класса tVector
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 4 матрицы
- •Теоретические сведения
- •Арифметические операции с матрицами
- •Синтаксис объявления класса tMatrix
- •Основные свойства и методы компонента StringGrid
- •Программа работы
- •Исходные данные
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 5 строки
- •Теоретические сведения
- •Программа работы
- •Исходные данные
- •Контрольные вопросы
- •Лабораторная работа № 6 стек
- •Теоретические сведения
- •Синтаксис объявления класса tStack
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 7 очередь
- •Теоретические сведения
- •Синтаксис объявления класса tQueue
- •Программа работы
- •Контрольные вопросы
- •Лабораторная работа № 8 деревья
- •Теоретические сведения
- •Синтаксис объявления класса tTreeNode
- •Синтаксис объявления класса tTree
- •Программа работы
- •Контрольные вопросы
- •Библиографический список
- •Содержание
Программа работы
Создать новый проект в меню FileðNewðVCL Forms Application, добавить к нему новый модуль (FileðNewðUnit) и сохранить все файлы в папке с именем ‘…\Лабораторная работа № 15’.
В заголовочной части второго модуля объявить класса TQueue и все его методы в соответствии с ADT – форматом, используя пространство имен MyQueue.
Создать на форме компоненты ListBox1¸ListBox3, Edit1 и кнопку Button1.
Рис. 6. Примерное расположение компонентов на форме
Написать программу, которая разбивала бы на пары участников праздничной дискотеки. Список всех приглашенных храниться в файле 'Дискотека.txt', которые записаны последовательно на каждой строке в следующем формате:
Ж
Анжелика Варум
М
Леонид Агутин.
Для загрузки этой информации из файла можно воспользоваться методом LoadFromFile свойства Items компонента ListBox1 в конструкторе формы FormCreate. Чтобы этот список не был виден на форме, свойство Visible этого компонента необходимо установить в false.
В обработчике нажатия кнопки Button1 объявить две объектные переменные Men и Women с типом TQueue для хранения данных типа AnsiString, и записать в них имена и фамилии приглашенных в зависимости от их пола. После этого, сформировать пары танцующих в формате «Мужчина + Женщина» в компоненте ListBox2 до тех пор, пока одна из очередей не окажется пустой. Затем вывести в компонент Edit1 того, кто будет приглашен на танец следующим, а в компонент ListBox3 – всех, кто остался без пары, при условии, что одно из очередь осталась не пустой.
Запустить программу на выполнение и записать в отчет расположение компонентов на форме, конструктор формы, обработчик нажатия кнопки Button1 и полученные результаты выполнения программы.
Ответить на контрольный вопрос, записав в отчет разработанный метод, обработчик его использования и результат выполнения программы.
Контрольные вопросы
Записать ADT – формат и объявление класса TQueue.
Записать реализацию метода Insert класса TQueue и объяснить его работу.
Записать реализацию метода Delete класса TQueue и объяснить его работу.
Записать реализацию метода Front класса TQueue и объяснить его работу.
Записать реализацию метода Empty класса TQueue и объяснить его работу.
Записать реализацию метода Full класса TQueue и объяснить его работу.
Записать реализацию метода Clear класса TQueue и объяснить его работу.
Написать программу, считывающую последовательность n целых чисел из массива, помещая все честные числа в одну очередь, а нечетные – в другую. Выведите содержание каждой очереди в компоненты Edit1 и Edit2.
Написать программу, которая, используя операции с очередью, находила бы первое появление заданного элемента в ней и перемещала бы его в вершину очереди, сохраняя упорядочение для остальных элементов.
Написать программу, которая, используя операции с очередь, находила бы последнее появление заданного элемента в ней и перемещала бы его в начало очереди, сохраняя упорядочение для остальных элементов.
Написать программу, которая, используя операции с очередью, удаляет из него первый заданный элемент.
Записать и протестировать в программе оператор равно для очереди.
Записать и протестировать в программе оператор не равно для очереди.
Записать и протестировать в программе оператор присвоения для очереди.
Что будет содержаться в свойстве 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());
}
Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередями? Объясните Ваш выбор.
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);
}
}
Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередями? Объясните Ваш выбор.
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);
};
}
Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.
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);
};
}
Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.
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);
};
}
Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.
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);
};
}
Придумайте название следующей процедуры, которое отражало бы выполняемую ей операцию с очередью? Объясните Ваш выбор.
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);
};
}