- •Лабораторные работы 1-3 по ооп
- •Справки и пояснения по учебным файлам
- •1. Простейшие опыты
- •2. Исследование дружественных функций. Работа с комплексными числами
- •Лабораторная работа № 2. Перегрузка функций и перегрузка операций
- •2. Комплект файлов point.H, point.Cpp, pointmai.Cpp - класс точка на экране
- •Справки и пояснения по учебным файлам
- •Упражнение 1. Перегрузка функций
- •Упражнения 2. Перегрузка операций
- •1. Данные класса и статус их доступа
- •2. Методы класса Point
Упражнение 1. Перегрузка функций
1.1. Перегрузить функцию swap(a, b) - обменник, т.е. объявить в программе две одноименные функции для разных типов данных из табл.1. Вариант Вар = № MOD 14 +1.
Таблица 1.
№ |
тип a,b 1й функции |
тип a,b 2й функции |
№ |
тип a,b 1й функции |
тип a,b 2й функции |
1 |
int |
stroka |
8 |
double |
float **z, масс. n*n |
2 |
int |
float |
9 |
point |
float **z, масс. n*n |
3 |
stroka |
char *s |
10 |
point |
float *x, массив n эл |
4 |
double |
cmplx |
11 |
point |
stroka |
5 |
cmplx |
stroka |
12 |
point |
cmplx |
6 |
double |
float *x, массив n эл |
13 |
point |
double |
7 |
stroka |
float **z, масс. n*n |
14 |
stroka |
complex из <complex.h> |
Подключить необходимые заголовочные учебные файлы с определением классов.
1.2. Перегрузить функцию cmplx sqrt(cmplx); для класса cmplx комплексных чисел, из файла CMPLX.H и решить квадратное уравнение z= A*X2 + B*x + C с комплексными переменными по формулам Виетта. Числа A, B и C взять из предыдущей работы. Квадратный корень из комплексного числа X равен
, где - модуль, - аргумент комплексного числа X.
Для контрольного примера используем теорему Виета, согласно (X-X1)(X-X2) = 0, при известных корнях X1 и X2 коэффициенты нашего уравнения равны A = 1, B=-(X1+X2), C = X1*X2. Вычислим эти коэффициенты и найдем новые корни нашего уравнения x1 и x2, которые, если наша функция cmplx sqrt(cmplx) правильная, совпадут с исходными X1 и X2.
Отчет по 3й части должен содержать: -тексты программ, - ручные проверки и выводы.
Упражнения 2. Перегрузка операций
2.1. Перегрузить для класса stroka одну из выбираемых по варианту (ниже) операций для четного варианта в теле класса, для нечётного вне класса.
1,2 |
Вычитание строк S1-S1 |
Из первого слова удалять только первое вхождение буквы второго слова, например: долото – дом = лото |
3,4 |
Вычитание строк S1-S1 |
Из первого слова удалять только все вхождения буквы второго слова, например: олово – слово = о |
5,6 |
Вычитание строк S1-S1 |
Из первого слова удалять только соответствующие вхождения буквы второго слова, например: олово – соло = во |
7,8 |
Кольцевая прокрутка слова |
Например S<<i “программист”<<3 = граммистпро |
9,10 |
Кольцевая прокрутка слова |
Например S>>i “программист”>>3 = истпрограмм |
11,12 |
Префиксная ++ |
++S, добавит слева одну букву “сслово” |
13,14 |
Постфиксная ++ |
S++, добавит справа одну букву “словоо” |
15,16 |
Префиксная -- |
--S, убавит слева одну букву “лово” |
17,18 |
Постфиксная -- |
S--, убавит справа одну букву “слов” |
19,20 |
Унарный минус картавит |
-S станет “калтошка” |
21,22 |
Унарный плюс грассирует |
+S вместо “Прогресс Гроссерман” станет “Прррогрресс Гррроссеррман” С вероятностями 40% буква р удваивается или утраивается и с вероятностью 10% остаётся одна |
23,24 |
Префиксная ++ Заика |
С вероятностями 20% первая буква слова удваивается или утраивается и с вероятностью 60% остаётся одна “п-прекрассная п-п-погода не правда ли” |
25,26 |
! Японский акцент |
!S все буквы л заменяются на р, а все ч и ш на сь |
|
|
|
2.2. Перегрузить для символа ^ (стандартная поразрядная операция исключающее ИЛИ) для операций возведения в степень X^Y, как в Бейсике.
Вариант выбирать по формуле N = Вар MOD 6 +1
Вариант N |
Тип операнда X |
Тип операнда Y |
Тип результата |
1 |
int |
int |
long |
2 |
long |
long |
long |
3 |
float |
float |
double |
4 |
double |
double |
double |
5 |
double |
double |
long double |
6 |
complex |
int |
complex |
|
|
|
|
Возведение комплексного числа в целую степень осуществлять по формуле Муавра
Zm = rm(cos(m φ)+ J sin( m φ),
где r = √ (re2 + im2) – модуль
φ = arctg(im/re) - аргумент (фаза) комплексного числа.
Подготовить контрольные примеры
Лабораторная работа № 3. Разработка собственных классов
ПРИМЕРЫ Объектно-ориентированное проектирования класса
При традиционном программировании вначале разрабатывают методики расчетов и алгоритмы, а затем реализуют их путем написания кода программ, процедур и функций. Т.е. работа проводится в две стадии: - проектирование и реализация (программирование).
Аналогично при разработке и создании таких новых абстракций как классы необходима стадия объектно-ориентированного проектирования. При этом, в соответствии с целями и задачами создаваемых абстракций, необходимо продумать, спрогнозировать для будущих возможностей и задач и определить:
- нужный набор данных, описывающих свойства объектов,
- статус их доступа,
- методы, описывающие поведение объектов,
- алгоритмы их реализующие,
- средства создания, инициализации и уничтожения объектов
- интерфейс и взаимодействие объектов.
Т.е., всё это необходимо вначале придумать.
Спроектируем в пять отмеченных этапов класс Point для решения задач манипуляции точками и, возможно будущем, другими графическими объектами, на плоскости (экране компьютера).