Содержание
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Варианты заданий
№ | Условие | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | Создать класс CFile, инкапсулирующий в себе такие функции работы с файлами, как Open, Close, Seek, Read, Write, GetPosition и GetLength. На базе этого класса создать производный класс CMyDateFile — файл, содержащий в себе данные некоторого определенного типа MyData, а также заголовок, облегчающий доступ к этому файлу. Написать программу, демонстрирующую работу с этими классами. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | Создать класс CPoint — точка. На его основе создать классы CcoloredPoint и CLine. На основе класса CLine создать класс CColoredLine и класс CPolyLine — многоугольник. Все классы должны иметь методы для установки и получения значений всех координат, а также изменения цвета и получения текущего света. Написать демонстрационную программу, в которой будет использоваться список объектов этих классов в динамической памяти. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | Создать абстрактный класс CVehicle. На его основе реализовать классы CPlane, CCar и CShip. Классы должны иметь возможность задавать и получать координаты, параметры средств передвижения (цена, скорость, год выпуска). Для самолета должна быть определена высота, для самолета и корабля — количество пассажиров. Для корабля — порт приписки. Написать программу, создающую список объектов этих классов в динамической памяти. Программа должна содержать меню, позволяющее осуществить проверку всех методов классов. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | Задание 4.1. Описать базовый класс «Элемент». Поля:
Методы:
Задание 4.2. На основе класса «Элемент» описать производный класс «Комбинационный», представляющий собой комбинационный элемент (двоичный вентиль), который может иметь несколько входов и один выход. Поля:
Методы:
Задание 4.3. На основе класса «Элемент» описать производный класс «Память», представляющий собой триггер. Триггер имеет входы, соответствующие типу триггера, и входы установки и сброса. Все триггеры считаются ассинхронными, сам синхровход в состав триггера не включается. Поля:
Методы:
Задание 4.4. Создать класс «Регистр», используя класс «Память» как включаемый класс. Поля:
Методы:
Все поля классов «Элемент», «Комбинационный» и «Память» должны быть описаны с ключевым словом private, или protected. В задании перечислены только обязательные члены и методы класса. Можно задавать дополнительные члены и методы, если они не отменяют обязательные и обеспечивают дополнительные удобства при работе с данными классами, например, описать функции вычисления выхода/состояния как виртуальные. Задание 4.5. Для проверки функционирования созданных классов написать программу, использующую эти классы. В программе должны быть продемонстрированы все свойства созданных классов. Конкретный тип комбинационного элемента, тип триггера и разрядность регистра выбираются в соответствии с вариантом задания.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | Описать базовый класс СТРОКА. Обязательные поля класса:
Обязательные методы:
Описать производный от СТРОКА класса СТРОКА_ИДЕНТИФИКАТОР. Строки данного класса строятся по правилам записи идентификаторов в языке С и могут включать в себя только те символы, которые могут входить в состав С-идентификаторов. Если исходные данные противоречат правилам записи идентификатора, то создается пустая СТРОКА_ИДЕНТИФИКАТОР. Обязательные методы:
Переопределить следующие операции:
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов. Написать текстовую программу, которая:
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса). Режим диалога обеспечивается с помощью иерархического меню. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | Описать базовый класс СТРОКА. Обязательные поля класса:
Обязательные методы:
Описать производный от СТРОКА класса БИТОВАЯ_СТРОКА. Строки данного класса могут содержать только символы ‘0’ или ‘1’. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, БИТОВАЯ_СТРОКА принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число. Отрицательные числа хранятся в дополнительном коде. Обязательные методы:
Переопределить следующие операции (длина строки результата равна длине большей из строк; в случае необходимости более короткая битовая строка расширяется влево знаковым разрядом):
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов. Написать текстовую программу, которая:
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса). Режим диалога обеспечивается с помощью иерархического меню. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | Описать базовый класс СТРОКА. Обязательные поля класса:
Обязательные методы:
Описать производный от СТРОКА класса ДЕСЯТИЧНАЯ_СТРОКА. Строки данного класса могут содержать символы десятичных цифр и символы — и +, задающие знак числа. Символы — или + могут находиться только в первой позиции числа, причем символ + может отсутстовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, ДЕСЯТИЧНАЯ_СТРОКА принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число. Обязательные методы:
Переопределить следующие операции:
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов. Написать текстовую программу, которая:
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса). Режим диалога обеспечивается с помощью иерархического меню. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | Описать базовый класс СТРОКА. Обязательные поля класса:
Обязательные методы:
Описать производный от СТРОКА класса КОМПЛЕКСНОЕ_ЧИСЛО. Строки данного класса состоят из двух полей, разеделенных символом $i$. Первое поле задает значение реальной части числа, а второе — мнимой. Каждое из полей может содержать только символы десятичных цифр и символы — и +, задающие знак числа. Символы — или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, КОМПЛЕКСНОЕ_ЧИСЛО принимает нулевое значение. Примеры строк: $33i12$, $-7i100$, $+5i-21$. Обязательные методы:
Переопределить следующие операции:
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов. Написать текстовую программу, которая:
Для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса). Режим диалога обеспечивается с помощью иерархического меню. |
Образец выполнения (вариант №3)
Условие задачи
Создать абстрактный класс CVehicle. На его основе реализовать классы CPlane, CCar и CShip. Классы должны иметь возможность задавать и получать координаты, параметры средств передвижения (цена, скорость, год выпуска). Для самолета должна быть определена высота, для самолета и корабля — количество пассажиров. Для корабля — порт приписки.
Написать программу, создающую список объектов этих классов в динамической памяти. Программа должна содержать меню, позволяющее осуществить проверку всех методов классов.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 | #include <iostream> #include <iomanip> #include <string> #include <vector> using namespace std; // описание сущности "Точка" на плоскости с целочисленными координатами struct Point { int x; int y; // конструктор по умолчанию Point() {} // параметрический конструктор Point( const int x, const int y ) { this -> x = x; this -> y = y; } }; // описание сущности "Средство передвижения" - абстрактный класс class CVehicle { private: Point coords; // целочисленные координаты местоположения double price; // стоимость size_t max_speed; // максимальная скорость size_t year_released; // год основания public: // конструктор по умолчанию CVehicle() {} // параметрический конструктор абстрактного класса CVehicle( const Point coords, const double price, const size_t speed, const size_t year ) { this->coords = coords; this->price = price; this->max_speed = speed; this->year_released = year; } // вывод информации на экран virtual void Print_info( void ) { cout << "\t- координаты местоположения: {" << this->coords.x << "; " << this->coords.y << "}" << endl; cout << "\t- стоимость, млн.руб.: " << setprecision( 3 ) << fixed << this->price << endl; cout << "\t- максимальная скорость, км/час: " << this->max_speed << endl; cout << "\t- год выпуска: " << this->year_released << endl; } // чисто виртуальная функция, выводящая название средства передвижения virtual void Print_name( void ) = 0; }; // описание сущности "Самолет" - производный класс class CPlane : public CVehicle { private: size_t max_high; // максимальная высота size_t passengers_count; // количество пассажиров public: // параметрический конструктор для создания самолета CPlane( const Point coords, const double price, const size_t speed, const size_t year, size_t high, size_t pass_count ) : CVehicle( coords, price, speed, year ) { this->max_high = high; this->passengers_count = pass_count; } // вывод информации о самолете на экран virtual void Print_info( void ) { CVehicle::Print_info(); cout << "\t- максимальная высота, м: " << this->max_high << endl; cout << "\t- количество пассажиров, чел: " << this->passengers_count << endl; } // вывод название средства на экран, т е вывод слова "Самолет" virtual void Print_name( void ) { cout << endl << "Информация о самолете " << endl; } }; // описание сущности "Автомобиль" - производный класс class CCar : public CVehicle { public: // параметрический конструктор для создания машины CCar( const Point coords, const double price, const size_t speed, const size_t year ) : CVehicle( coords, price, speed, year ) {} // вывод название средства на экран, т е вывод слова "Автомобиль" virtual void Print_name( void ) { cout << endl << "Информация об автомобиле " << endl; } }; // описание сущности "Корабль" - производный класс class CShip : public CVehicle { private: size_t passengers_count; // количество пассажиров string port; // порт приписки public: // параметрический конструктор для создания корабля CShip( const Point coords, const double price, const size_t speed, const size_t year, size_t pass_count, string port ) : CVehicle( coords, price, speed, year ) { this->passengers_count = pass_count; this->port = port; } // вывод информации о корабле на экран virtual void Print_info( void ) { CVehicle::Print_info(); cout << "\t- количество пассажиров, чел: " << this->passengers_count << endl; cout << "\t- порт приписки: " << this->port << endl; } // вывод название средства на экран, т е вывод слова "Корабль" virtual void Print_name( void ) { cout << endl << "Информация о корабле " << endl; } }; // ввод общей информации о транспортном средстве с клавиатуры void Input_info_from_keyboard( Point &point, double &price, size_t &speed, size_t &year ) { cout << endl; cout << "\t- введите координаты местонахождения (2 целых числа через пробел): "; cin >> point.x >> point.y; cout << "\t- введите стоимость средства передвижения, млн.руб: "; cin >> price; cout << "\t- введите максимальную скорость, км/час: "; cin >> speed; cout << "\t- введите год выпуска: "; cin >> year; } // ввод информации о добавляемом самолете в базу данных CPlane* Create_plane( void ) { Point point; double price; size_t speed, year; size_t high, count; Input_info_from_keyboard( point, price, speed, year ); cout << "\t- введите максимальную высоту, м: "; cin >> high; cout << "\t- введите количество пассажиров: "; cin >> count; CPlane* plane = new CPlane( point, price, speed, year, high, count ); return plane; } // ввод информации о добавляемом авто в базу данных CCar* Create_car( void ) { Point point; double price; size_t speed, year; Input_info_from_keyboard( point, price, speed, year ); CCar* car = new CCar( point, price, speed, year ); return car; } // ввод информации о добавляемом корабле в базу данных CShip* Create_ship( void ) { Point point; double price; size_t speed, year; size_t count; string port; Input_info_from_keyboard( point, price, speed, year ); cout << "\t- введите количество пассажиров: "; cin >> count; fflush( stdin ); cout << "\t- введите порт приписки: "; getline( cin, port ); CShip* ship = new CShip( point, price, speed, year, count, port ); return ship; } // главное меню программы int Menu( void ) { int select; do { system( "CLS" ); cout << "\t\tГЛАВНОЕ МЕНЮ ПРОГРАММЫ" << endl << endl; cout << "1 - Добавление в базу данных самолета" << endl; cout << "2 - Добавление в базу данных автомобиля" << endl; cout << "3 - Добавление в базу данных корабля" << endl; cout << "4 - Вывести информацию обо всех транспортных средствах из базы данных" << endl; cout << "5 - Выход из программы" << endl; cout << "\tВЫБОР: "; cin >> select; fflush( stdin ); } while( ( select < 1 ) || ( select > 5 ) ); return select; } // главная функция программы (точка входа) int main( void ) { // русификация диалогов программы setlocale( LC_ALL, "Russian" ); // отвечает за выбор пользователя int select; // база данных средств передвижения vector< CVehicle* > vehicles; do { select = Menu(); switch( select ) { case 1: { CPlane* plane = Create_plane(); vehicles.push_back( plane ); cout << endl << "Информация о самолете успешно добавлена в базу данных."; break; } case 2: { CCar* car = Create_car(); vehicles.push_back( car ); cout << endl << "Информация об автомобиле успешно добавлена в базу данных."; break; } case 3: { CShip* ship = Create_ship(); vehicles.push_back( ship ); cout << endl << "Информация о корабле успешно добавлена в базу данных."; break; } case 4: { if( vehicles.size() == 0 ) cout << endl << "В базе данных нет ни одного транспортного средства! Печать физически невозможна."; else { cout << endl << "Информация обо всех транспортных средства из базы данных" << endl; for( size_t i = 0; i < vehicles.size(); i++ ) { vehicles[ i ] -> Print_name(); vehicles[ i ] -> Print_info(); } } break; } } // задержка программы, чтобы у пользователя была возможность просмотреть результат if( select != 5 ) { cout << endl << endl; system( "pause" ); } } while( select != 5 ); // перед выходом из программы удаляем все данные из базы данных for( size_t i = 0; i < vehicles.size(); i++ ) delete vehicles[ i ]; vehicles.clear(); return EXIT_SUCCESS; } |
Результаты работы программы
ВНИМАНИЕ | Для получения программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Добавить комментарий