Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛаборООП.docx
Скачиваний:
49
Добавлен:
01.06.2015
Размер:
1.46 Mб
Скачать

Варианты задания

При выполнении работы необходимо:

  • разработать соответствующие классы, их поля и методы;

  • поля класса сделать закрытыми, для чтения и изменения их значений определить открытые методы;

  • в функции main создать объекты для демонстрации работы методов класса c выводом соответствующих сообщений на консоль .

В этой и следующих лабораторных работах в заданиях предложены англоязычные термины, которые обязательны к использованию; если вам понадобятся дополнительные термины, то пользуйтесь словарем, а не набором латинских символов. Названия методов надо начинать с глаголов (Set, Get и т.п.), а атрибутов – с существительных. Не ограничивайте длину идентификатора(в разумных пределах). Отговорки типа « я изучаю немецкий» не принимаются.

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

  1. Определить класс Дата(Date), в котором производится ввод календарной даты, определение соответствующего дате дня недели, прибавления к дате целой константы и т.п. операции без использования библиотечных классов, таких как ctime.

  2. Определить класс Fraction, в котором производятся операции над обыкновенными дробями (сравнение, сложение, умножение, деление, сокращение).

  3. Определить класс римских чисел RomanFigure. Реализовать алгоритм перевода из десятичной системы и обратно и операции сложения и вычитания.

  4. Определить класс Точка на шаровой поверхности(PointSphere), объекты которого задаются в полярной системе координат (широта, долгота, радиус-вектор). Реализовать метод определения длины линии на поверхности шара между двумя точками и метод преобразования полярной системы координат в прямоугольные и обратно.

  5. Определить класс Квадрат (Square) со сторонами, параллельными осям координат. Методы: перемещение, изменение размеров, построение прямоугольника, являющегося пересечением двух других. Желательно фигуры рисовать. Если не хотите связываться с графикой, то выведите на консоль контуры в виде последовательности символов '*', для чего используйте заголовочный файл iomanip и его методы setw и setfill.

  6. Определить класс многочленов (Polinom)от одной переменной, задаваемых степенью многочлена и массивом коэффициентов, с операциями вычисления значения многочлена для заданного аргумента, сложения и вычитания многочленов.

  7. Определить класс Множество (Set) c методами: добавление элементов в множество, пересечение и объединение множеств. Множество реализовать на основе массива в динамической памяти или списка.

  8. Определить класс вещественных матриц (Matrix) с методами, реализующими сложение и вычитание матриц, транспонирования, вычисления детерминанта и обратной матрицы. Воспользоваться массивoм, создающимся с помощью оператора new.

  9. Написать класс для работы с С-строкой (C_String) ( завершающим символом строки является '\0'). Поля класcа: указатель на char – хранит адрес динамически выделенной памяти для размещения символов строки, значение типа int для хранения длины строки в байтах. Конструкторы: без параметров, копирования, создающий строку заданной длины. Методы: получение длины строки, очистка строки, соединения 2 – х строк (перегрузить операцию +). Не использовать соответствующие библиотечные функции.

  10. Реализовать класс Стек (Stack) для какого-либо типа данных с операциями инициализации, добавления и извлечения элементов согласно соответствующей дисциплине обслуживания. Воспользоваться массивoм, создающимся с помощью new.

  11. Реализовать класс Очередь (Queue) для какого-либо типа данных с операциями инициализации, добавления и извлечения элементов согласно соответствующей дисциплине обслуживания. Воспользоваться массивoм, создающимся с помощью оператора new. Подумайте, как создать очередь с приоритетами.

  12. Описать класс Предметный указатель (Index). Указатель содержит слово и номера страниц некоторого текста, в которых это слово встречается. Количество номеров страниц, относящихся к одному слову, не превышает десяти. В классе может быть массив указателей.

  13. Определить класс Морской_порт (NavyPort) , полями которого являются причал (Pier), судно(Ship), рейд (Raid); причал может быть занят/свободен, судно – на причале/на рейде/ пустое/с грузом, рейд – пустой/есть суда (до 5). Реализовать методы, осуществляющую следующую последовательность действий:

  1. разгрузка судна –> причал свободен, судно переходит к причалу, причал занят, количество судов на рейде уменьшается на 1, судно разгружено;

  2. погрузка судна –> то же, что и в a), но в итоге судно с грузом.

  1. Определить класс «Поезд (Train)» с полями: номер поезда, поездная бригада(машинист, начальник поезда, проводники), движется/на станции, пассажиры: полный/частично заполненный /пустой , запас воды и продуктов/нет запасов. Реализовать методы, осуществляющую следующую последовательность действий:

  1. поезд подается на станцию отправления ->бригада занимает свои места, пассажиры заполняют поезд, запасы воды и продуктов возобновляются;

  2. поезд прибывает на промежуточную станцию -> пассажиры частично сменяются, запасы воды и продуктов проверяются и в случае необходимости увеличиваются;

  3. поезд прибывает на конечную станцию -> все пассажиры и поездная бригада покидают поезд.

  1. Определить класс Аэропорт (Airport), полями которого являются взлетно-посадочная полоса (runway, занята/свободна), самолет(airplane, на полосе/ в воздухе) и пассажирский терминал(terminal, занят пассажирами/пуст). Реализовать методы, осуществляющую следующую последовательность действий:

  1. посадка самолета(landing) –> самолет на полосе , полоса становится занятой, терминал заполняется;

  2. взлет самолета(flight) -> самолет в воздухе, полоса освобождается, терминал свободен.

В следующих вариантах рекомендуется создавать 2 класса и объекты или указатели на один из них включить в другой.

  1. Определить классы Автостоянка (Parking) и Автомобиль (Car). Для каждого автомобиля во втором классе описывают госномер, марку, цвет и признак присутствия на стоянке. В первый класс вводится массив автомобилей, которые могут присутствовать на стоянке. Определить в первом классе методы заезда автомобиля на стоянку, его выезда, подтверждения присутствия автомобиля на стоянке по госномеру, вывода списка присутствующих автомобилей.

  2. Определить классы Карта (Card) и Колода_карт (CardBatch). Поля первого – масть (suit)и достоинство(rank). Второй содержит массив объектов первого и методы перемешивания колоды и раздачи карт на заданное число игроков равными порциями. Создать метод, моделирующий упрощенный розыгрыш взятки: на стол выкладываются по одной карте одной масти от каждого из 4-х игроков; выигрывает карта, старшая по достоинству (картинки старше простых карт; козырной масти нет).

  3. Определить классы Автобусный_маршрут (BusLine) и Автобус (Bus). Во втором задаются госномер, название остановки и время от начала маршрута. Объект этого класса вводится в первый класс, где, кроме того, определены:

a) массив структур из 3-х полей; первое поле – название остановки маршрута, второе – время от начала маршрута, которое автобус должен затратить для ее достижения, третье – признак нахождения автобуса на этой остановке;

b) метод последовательного перехода автобуса от одной остановки к другой с фиксацией времени автобуса от начала маршрута;

с) метод, фиксирующий отклонения реального времени прохождения маршрута от установленного.

  1. Определить классы Книга (Book) и Библиотека (Library). Поля книги: ФИО автора(ов), название(Title), год издания(Year), издательcтво (Publishers). Библиотека содержит массив книг, размер которого является параметром. Массив инициализируется 10-ю реальными книгами. Предусмотреть возможность поиска книги по какому-либо признаку (например, по автору или по названию), сортировки книг.

  2. Определить классы Студент (Student) и Студенческая_группа (Group). Поля первого: ФИО, дата рождения, адрес, учится/отчислен. Группа содержит массив студентов, размер которого является параметром. Предусмотреть возможность поиска студента по какому-либо признаку, сортировки по одному из полей, изменения значения поля учится/отчислен, выдачи списка учащихся и отчисленных студентов.

Замечание относительно сортировки.

Сортировку массивов можно делать или самостоятельно, или с помощью библиотечного алгоритма sort, находящегося в заголовочном файле algorithm:

int arr[8];

…………

sort(arr, arr+8);

Так указывается диапазон объектов, которые надо отсортировать, в данном случае весь массив. Но помните, что, сортируя объекты пользовательского класса, вы обязаны перегрузить в классе операцию «меньше» для того поля, по которому вы собираетесь вести сортировку (см. листинг 4.1)