Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание3 (все этапы решения).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
175.1 Кб
Скачать

Задание 3. Описание классов

Каждому студенту рекомендуется решить хотя бы одну из задач 1-12.

В каждой задаче необходимо описать класс.

В каждом классе должен быть описаны как минимум:

  • соответствующие поля,

  • конструкторы,

  • конструктор копирования (при необходимости),

  • деструктор (при необходимости),

  • операция присваивания (при необходимости),

  • метод ввода объекта с клавиатуры и из файла

  • метод вывода объекта на экран

  • операция сравнения ==,

  • операция <.

Кроме того, в классе должны быть описаны методы и операции, соответствующие варианту задания.

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

  • начальное формирование массива из N20 объектов класса (ввод с клавиатуры, ввод из заданного массива, ввод из файла);

  • добавления объекта в массив;

  • вывод массива объектов на экран;

  • функции, демонстрирующие работу методов и операций, описанных в варианте задания.

  • дополнительные функции, указанные в варианте задания.

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

  1. Описать класс РАЦИОНАЛЬНОЕ ЧИСЛО (поля: ЧИСЛИТЕЛЬ, ЗНАМЕНАТЕЛЬ).

Операция класса: сложение двух чисел (+)

Методы класса: поиск наибольшего числа в массиве рациональных чисел, сокращение рационального числа

Функция демонстрационной программы: вычисление суммы всех рациональных чисел из заданного массива.

  1. Описать класс ИСТОРИЧЕСКОЕ СОБЫТИЕ (поля: ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ).

Операция класса: вычисление интервала в днях, прошедшего между двумя заданными историческими событиями (-);

Метод класса: поиск наиболее позднего события в массиве событий.

Функция демонстрационной программы: поиск в массиве заданного события по его названию.

  1. Описать класс ДАТА (поля) ЧИСЛО, МЕСЯЦ, ГОД.

Операция класса: вычисление даты, на N дней вперед по заданной (+).

Метод класса: поиск в массиве дат всех дат заданного года.

Функция демонстрационной программы: удаление из массива заданной даты.

  1. Описать класс ДАТА (поля: ЧИСЛО, МЕСЯЦ, ГОД).

Операция класса: увеличение даты на один день (++)

Метод класса: по году и порядковому номеру дня в году возвращающий соответствующую дату.

Дополнительные функции демонстрационной программы: поиск в массиве дат самой поздней.

  1. Описать класс АЛГЕБРАИЧЕСКИЙ ПОЛИНОМ (поля: СТЕПЕНЬ, КОЭФФИЦИЕНТЫ).

Операция класса: сложение двух заданных полиномов (+).

Метод класса: вывод на экран полиномов с максимальной степенью из массива полиномов.

Функция демонстрационной программы: удаление заданного полинома из массива.

  1. Описать класс АВТОМАШИНА (поля: МАРКА (задается из фиксированного списка), ГОД ВЫПУСКА, НОМЕР, ФАМИЛИЯ ВЛАДЕЛЬЦА).

Операция класса: вычисление разницы в годах выпуска между двумя машинами (-)

Метод класса: сортировка массива машин по фамилии владельца.

Функция демонстрационной программы: поиск в массиве всех машин с заданной маркой.

  1. Описать класс СТУДЕНТ (поля ФИО, ЧИСЛО, МЕСЯЦ, ГОД РОЖДЕНИЯ).

Операция класса: вычисление разницы в возрасте (в днях) для двух студентов (-).

Метод класса: поиск в массиве всех студентов заданного года рождения.

Функция демонстрационной программы: удаление студента с заданной фамилией из массива.

  1. Описать класс ИСТОРИЧЕСКОЕ СОБЫТИЕ (поля ГОД, СОБЫТИЕ, УРОВЕНЬ (международный, всероссийский, местный)). Дополнительные функции демонстрационной программы:

Операция класса: вычисление разницы в годах между двумя событиями (-)

Метод класса: сортировка массива событий по комбинации (год, событие);

Функция демонстрационной программы: поиск в массиве событий всех событий заданного уровня.

  1. Описать класс СТУДЕНТ (поля: ФИО, ГОД РОЖДЕНИЯ, НОМЕР ГРУППЫ (задается из фиксированного списка)). Дополнительные функции демонстрационной программы:

Операция класса: вычисление разницы в возрасте для двух студентов (-).

Метод класса: удаление из массива студента с определенной ФИО;

Функция демонстрационной программы: поиск в массиве всех студентов с заданным номером группы.

  1. Описать класс ТОВАР (поля: НАИМЕНОВАНИЕ ТОВАРА, СТРАНА-производитель (задается из фиксированного списка), ОБЪЕМ ПАРТИИ (в штуках)).

Дополнительные Операция класса: увеличение объема партии товара на n%(*)

Метод класса: сортировка массива товаров по наименованию;

Функция демонстрационной программы: поиск всех товаров, импортируемых заданной страной.

  1. Описать класс УЧЕНИК (поля: ФИО, ГОД ОБУЧЕНИЯ, НАЗВАНИЯ КЛАССА (БУКВА a-д)).

Операция класса: перевод ученика в следующий класс (++)

Метод класса: сортировка массива учеников по паре (год обучения, название класса);

Функция демонстрационной программы: удаление ученика с заданной ФИО из массива.

  1. Описать класс УЧЕНИК (поля: ФИО, ГОД ОБУЧЕНИЯ, НАЗВАНИЯ КЛАССА (БУКВА a-д)), ИТОГОВАЯ ОЦЕНКА)

Операция класса: увеличение итоговой оценки (++)

Метод класса: сортировка массива учеников по фамилии;

Функция демонстрационной программы: поиск всех учеников с отличной итоговой оценкой

Пример решения задачи

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

Описать класс СТУДЕНТ (поля: ФАМИЛИЯ, СПЕЦИАЛЬНОСТЬ, ПОЛ (задается из фиксированного списка), ГОД ОБУЧЕНИЯ).

Операция класса: перевод студента на следующий курс (++)

Метод класса: поиск студента с заданной фамилией в массиве студентов

Функции демонстрационной программы: вывод всех студентов с заданной специальностью.

    1. удаление студента с заданной фамилией

    2. удаление всех студентов заданного года

    3. сортировка списка студентов по фамилии

    4. сортировка списка студентов по специальности

Этап 1.

Для решения данной задачи в файле CStudent.h опишем класс CStudent c указанными полями и двумя конструкторами. Для проверки работы конструкторов сразу определим метод, выводящий на экран все поля.

#include <string>

using namespace std;

enum gender_type{male, female, unknown};

class CStudent

{

/* Поля класса CStudent */

string name;

string speciality;

gender_type gender;

int year;

public:

static int k;//статическое поле класса для хранения количества созданных объектов

CStudent();//конструктор «пустого» студента

CStudent(string, string, gender_type, int);//конструктор создания студента на основе заданных фамилии, специальности, пола и года

void output();// метод вывода данных о студенте на экран

~CStudent(){k--;};//деструктор

string get_name() {return name;}

string get_speciality(){return speciality;}

gender_type get_gender(){return gender;}

int get_year(){return year;}

};

Обратите внимание, что в классе введено статическое поле k, предназначенное для хранения количества созданных в программе объектов. Следовательно, в любом конструкторе это поле должно увеличиваться на единицу, а в деструкторе - уменьшаться на единицу. Поле введено с тестовой целью.

Тела конструкторов и метода output опишем в файле CStudent.cpp

# include "CStudent.h"

# include <iostream>

# include <string>

# include <iomanip>

using namespace std;

CStudent::CStudent(): name(""), speciality(""), gender(unknown), year(0) {k++;}

CStudent::CStudent(string n, string s, gender_type g, int y)

{

name=n;

speciality=s;

gender=g;

year=y;

k++;

}

void CStudent::output()

{

cout.setf(ios::left);

cout<<"\n"<<setw(30)<<name<<setw(30)<<speciality;

if (gender==male) cout<<setw(8)<<"male";

else if (gender==female) cout<<setw(8)<<"female";

else cout<<setw(8)<<"unknown";

cout<<setw(4)<<year;

}