Задание 1
Определение класса, члены класса и конструкторы
Общее задание
1. Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для него конструктор по умолчанию, конструктор инициализации и конструктор преобразования.
2. Определить функции-члены класса для ввода и вывода членов-данных внутри объявления класса.
3. Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй использовать конструктор инициализации, третий - преобразование типа своего параметра к типу своего класса, а четвертый - функцию ввода данных.
4. Выполнить программу и проверить соответствие заданных и полученных данных.
5. Определить функции ввода и вывода вне объявления класса и повторить выполнение программы.
6. Объявить функции ввода и вывода как "друзей" класса с параметром - объектом класса, передаваемым по значению. Изменить определение этих функций и повторить выполнение программы.
7. Объявить функции ввода и вывода как "друзей" класса с параметром - объектом класса, передаваемым по ссылке. Изменить определение этих функций и повторить выполнение программы.
Индивидуальные задания
-
Класс "Комплексное число" с данными действительная и мнимая части.
-
Класс "Вектор на плоскости" с данными проекция вектора на оси X и Y.
-
Класс "Дробь" с данными числитель и знаменатель.
-
Класс "Окружность" с данными центр и радиус окружности.
-
Класс "Номер телефона" с данными код города, код станции и номер линии.
-
Класс "Квадрат" с данными центр квадрата и его сторона.
-
Класс "Прямоугольник" с данными верхняя левая и правая нижняя точки.
-
Класс "Вектор на плоскости" с данными модуль вектора и угол между вектором и положительным направлением оси X.
-
Класс "Дата" с данными число, номер месяца и две последние цифры года.
-
Класс "Время" с данными часы, минуты и секунды.
-
Класс "Комплексное число" с данными модуль и аргумент.
-
Класс "Вектор в пространстве" с данными проекция вектора на оси X, Y и Z.
-
Класс "Карта" с данными масть в виде первой буквы масти и значения в виде одного из символов: 2, ..10, В, Д, K, T.
-
Класс "Треугольник" с данными три стороны.
-
Класс "Точка в трехмерном пространстве" с данными координаты X, Y и Z.
-
Класс "Квадратный трехчлен" с данными коэффициенты при x2 , x и свободном члене.
-
Класс "Конус" с данными радиус окружности основания и высота.
-
Класс "Куб" с данными координаты центра и сторона.
-
Класс "Прямоугольный треугольник" с данными два катета.
-
Класс "Прямая на плоскости" с данными тангенс угла наклона к оси X и отрезок, отсекаемый на оси Y.
-
Класс «Счетчик» с данными минимальное значение, приращение, максимальное значение
-
Класс «Компьютер» с данными тактовая частота процессора, объем ОЗУ, емкость диска.
-
Класс «Служащий» с данными табельный номер, номер подразделения и оклад.
-
Класс «Накладная» с данными номер, дата отпуска и сумма.
-
Класс «Проект» с данными номер проекта, сумма, дата исполнения
-
Класс «Здание» с данными количество этажей, подъездов и квартир.
Задание 2
Совместное использование операций
Общее задание
Для заданного класса определить конструкторы по умолчанию, инициализации и преобразования, совместно используемые потоковые операции для ввода и вывода, операции и функции, необходимые для выполнения приведенного ниже задания согласно номеру варианта.
Индивидуальные задания
Варианты 1-5.
I. Определить класс -"Комплексное число" в виде модуля и аргумента.
II. Вычислить таблицу значений заданной функции при mod(z) = 1 и arg(z), изменяющемся на отрезке [0, 2pi] с шагом pi/4.
III. Вычислить значение функции в точке, значение которой вводится с клавиатуры.
IV Проверить найденные значения, используя класс complex.
1. 2z + sin(z-i) 2. z2 - cos(2z) 3. z/2 + ch(1+z) 4. i + z*sh(1+z)5. 2 + 3i*e1-z 5. (2+i)(3-z)/tg(2z).
Варианты 6-10
I. Для вариантов 6-10 определить класс -"Комплексное число" в виде действительной и мнимой частей
II. Вычислить таблицу значений заданной функции при -1<=Re(z)<=1 и -1<=Im(z)<=1 с шагом 1 по обоим аргументам.
III. Вычислить значение функции в точке, значение которой вводится с клавиатуры.
IV. Проверить найденные значения, используя класс complex
6. 1- z5 - th(z/2)
7. 2z + e(1+z)
8. i - z*sin(2z)
9. 2 + z*tg(z)
10. z3 + (1+2i)*z2 +(1-2i)*z - 5i
Варианты 11-15
I. Для вариантов 11-15 определить класс -"Рациональное число" в виде целых длинных чисел- числитель и знаменатель.
II. Определить операцию сокращение. Для выполнения этой операции написать функцию нахождения наибольшего общего делителя (НОД) двух целых чисел a и b по алгоритму Евклида:
Пусть b <= a и r остаток от деления a на b. Тогда: 1. Если b = 0, НОД = a. 2. Иначе a = b, b = r. Перейти к 1.
III Вычислить таблицу значений заданной функции при a <=x <= b с шагом h, где a, b, x, h - рациональные числа.
IV. Вычислить значение функции в точке, значение которой вводится с клавиатуры.
V. Сравнить найденные значения со значениями, полученными при использовании действительных чисел.
11. 2x + 1.3/x
12. x/3 - 1/(0.2+x)
13. 2.2x2 + x - 1
14. (x-1.3)/(x+1.6)
15.3/7 + (5/11)x - 2.5/x
Варианты 16-20
-
Для вариантов 16-20 определить класс -"Двумерный вектор" в виде вещественных чисел - проекций вектора на оси X - x и Y - y.
-
Вычислить значение выражения для векторов в правой части, значение которых вводится с клавиатуры. Строчные буквы означают простые переменные, прописные буквы - векторы.
-
Проверить полученное значение вычислением вручную.
16.С=b*A + a*B
17.c = arg(a*A - b*B)
18.c = A*B*(A + B)*(A - B)
19.C = (a*A - B + b*B)
20.c = mod(A)*(A/(A*B) - B/a )
Примечание mod(A) означает модуль вектора A, arg(A, B) означает угол между векторами A и B, A*B означает скалярное произведение A и B.
Варианты 21-25
I. Для вариантов 21-25 определить класс -"Интервал" в виде множества целых чисел с минимальным и максимальным значением диапазона, к которому могут принадлежать эти числа.
II. Вычислить таблицу значений заданной функции на заданном интервале с заданным шагом.
III. Вычислить значение функции в точке, значение которой вводится с клавиатуры.
IV. Проверить работу класса при выходе данных за интервал.
21. a- x2 - sin(x/2)
22. ab + e(c+x)
23. a - x*cos(b+x)
24. a + x*ln(bx)
25. x3 + ax2 +b*z - c
Примечание. x - переменная типа «Интервал», а остальные буквы - константы того же типа
ПРИЛОЖЕНИЕ
Действительная и мнимая части некоторых функций z = x + iy
|
Функция |
Действительная часть |
Мнимая часть |
|
Ez |
excos(y) |
exsin(y) |
|
Sin(z) |
sin(x)ch(y) |
cos(x)sh(y) |
|
Cos(z) |
cos(x)ch(y) |
sin(x)sh(y) |
|
Sh(z) |
sh(x)cos(y) |
ch(x)sin(y) |
|
Ch(z) |
ch(x)cos(y) |
sh(x)sin(y) |
|
Tg(z) |
sin(2x) |
sh(2y) |
|
|
cos(2x)+ch(2y) |
cos(2x)+ch(2y) |
|
Th(z) |
sh(2x) |
sin(2y) |
|
|
ch(2x)+cos(2y) |
ch(2x)+cos(2y) |
Задание 3
Классы, содержащие массивы встроенных типов данных
Общее задание
1. Определить класс по приведенному ниже заданию в соответствии с номером варианта, конструкторы инициализации, преобразования и копирования, деструктор и операцию присваивания. Перегрузить операции индексации, потоковые операции вставки в поток и извлечения из потока для ввода и вывода объекта класса.
2. Проверить правильность работы конструкторов, деструктора и перегруженных операций.
3. Разработать функции для выполнения индивидуального задания и проверить их работу.
Индивидуальные задания.
I. Класс "Вектор из элементов типа double" (DVector) состоит из следующих данных:
указатель на тип double; размерность вектора.
Определить операции и функции, необходимые для следующих вычислений. Прописные буквы в формулах означают векторы, строчные простые переменные, а строчные с нижним индексом - элементы вектора.
1. Y = x*V + 2*U
Z = v1*U + u1*V.
2. Y = x*V - U/2
Z = v2*U - 2*V.
3. y1 = cos(U,V)
y2 = U*V.
4. x1 = min(V)
x2= max(V).
5. z1=X1 == X2 ? x1 : x1 - x2
z2 = x1*mod(X1).
II. Класс «Множество» - Set состоит из следующих данных:
указатель на тип unsigned int или int; мощность множества (количество элементов в множестве).
Множество - совокупность однотипных неповторяющихся элементов, для которого определены следующие операции:
пересечение двух множеств состоит из элементов, входящих как в одно, так и другое множество (обозначается *); объединение двух множеств состоит из элементов, входящих или в одно или в другое множество или в оба вместе (обозначается +); разность множеств A и B состоит из элементов A, не принадлежащих B (обозначается -); множество A содержится в множестве B (обозначается <), если все элементы A содержатся в B; множества A и B эквивалентны, если A<B и B<A (обозначается ==), т.е. каждый элемент из A содержится в B и наоборот каждый элемент из B содержится в A;
Множество называется пустым (обозначается 0), если оно не содержит ни одного элемента.
Мощность множества одинакова для всех объектов Set, и поэтому должна быть статическим членом класса.
Объекты Set отличаются друг от друга содержанием элементов, т. е. каждый объект должен содержать сведения о принадлежности каждого элемента множества этому объекту.
Дополнительно к общему заданию определить для класса Intset:
конструктор по умолчанию, определяющий пустое множество;
функцию member с параметром положительное целое число, возвращающее "истинно", если множество содержит элемент с соответствующим значением, и "ложно" в противном случае;
функцию insert c параметром положительное целое число, осуществляющую добавление элемента в множество в том случае, если оно еще не содержит такого элемента.
Определить операции, необходимые для следующих вычислений.
6. A * B + C.
7. (A-B)*C.
8. A+B-C.
9. C = (A == B) ? A : 0.
10. C = (A < B) ? A : B.
III. Класс "Строка" (String) состоит из следующих данных:
указатель на тип char; количество символов в строке.
Указания. Массив символов не должен содержать символа окончания строки. Номера символов в строке должны начинаться с 1.
Перегрузить для класса String операцию + для сцепления двух строк.
Перегрузить для класс String функцию из библиотеки string по индивидуальному заданию.
Разработать функции по нижеследующему индивидуальному заданию и функцию main для проверки правильности работы класса.
11. strncat;
Функция substr выделяет подстpоку в данной стpоке.
Паpаметpы: стpока, номеp символа, с котоpого начинается выделение подстpоки, длина выделяемой подстpоки.
Возвpащаемое значение - подстpока.
Если номеp символа выходит за гpаницы номеpов символов в стpоке, то возвpащается вся стpока, если длина выделяемой подстpоки больше оставшейся части стpоки возвpащается вся оставшаяся часть стpоки.
12. strcmp;
Функция rat с параметрами строка, символ возвpащает номеp последнего вхождения заданного символа в заданную стpоку. Если символ не обнаpужен она возвpащает 0.
13. strset
Функция stuff с параметрами строка1, строка2, n возвращает строку1, в которой все символы, начиная с номера n, заменены на строку2. Если количество символов в строке1, начиная с n-ого, меньше длины строки2, то строка1 увеличивается до требуемой длины. Если n больше длины строки1, строка2 добавляется к концу строки1.
14. strnset
Функция delstr с параметрами строка, n1, n2 удаляет n2 символов из строки, начиная с n1. Если n1+n2 больше длины строки, удаляется оставшаяся часть строки. Если n1 меньше 1, удаляется часть строки, начиная с первого символа. Функция возвращает результат преобразования.
15. strncpy
Функция instr с параметрами строка1, строка2, n осуществляет поиск строки2 в строке1, начиная с позиции n строки1. Если поиск окончился успешно, она возвращает позицию символа в строке1, начиная с которой обнаружено вхождение, в противном случае - 0.
IV. Класс "Матрица из элементов типа double" (DMatrix) состоит из следующих данных:
указатель на тип «указатель на double»; количество строк; количество столбцов.
Определить операции и функции, необходимые для следующих вычислений. Прописные буквы в формулах означают матрицы, строчные простые переменные, а строчные с нижними индексами - элементы матрицы.
16. Y = x*V + 2*U;
Z = v1,2*U + u2,1*V.
17. Y = x*V - U/2;
Z = v2,1*U - 2*V.
18. Y = U*V;
Z = U-V.
19. Определить матрицу X по следующим выражениям:
x1,1 = min(V);
x1,2 = max(V);
x2,1 = min(V) + max(U);
x2,2 = max(V) - min(U).
20. Y = 2*U+3*V;
Z = 2*U-3*V
V. Класс "Упорядоченный массив " (SortArray) состоит из следующих данных:
указатель на тип double, представляющий элементы массива; указатель на тип int, представляющий индексы элементов массива; размерность массива;
текущее количество элементов в массиве.
Элементы массива неупорядочены, т.е. каждый добавляемый элемент помещается в конец массива. При этом элемент массива индексов содержит порядковый номер элемента массива данных. Например, для массива 5, -1, 2, -4 массив индексов при сортировке по убыванию должен быть таким: 3, 1, 2, 0. Таким образом, в массиве индексов на первом месте должен стоять индекс наименьшего элемента, на втором - следующего по величине и т.д. Если обозначить A - массив, Ind - массив индексов, то A[Ind[i]] - значение i - ого по порядку элемента массива. При этом операция индексации для пользователя A[i] должна интерпретироваться как A[Ind[i]] и не позволять изменять элемент массива.
Определить следующие функции для работы с упорядоченным массивом.
21. Добавление произвольного элемента в массив и удаления произвольного элемента из массива так, чтобы не нарушалась упорядоченность.
22. Преобразование неупорядоченного массива в упорядоченный.
23. Перегрузить операции сравнения (>, <, = =) двух массивов одинаковой размерности. Массив A считается больше массива B, если первый из неравных элементов массива A больше соответствующего элемента массива B.
24. Двоичного поиска элемента в массиве по заданному значению. Функция должна указывать окончился поиск успешно или нет.
25. Слияния двух упорядоченных массивов в один так, чтобы результирующий массив был упорядочен.
Задание 4
Классы с динамическими структурами данных
Общее задание
1. Для типа динамической структуры данных, указанного в индивидуальном задании, разработать соответствующий класс, предусмотрев в нем конструкторы по умолчанию и копирования, деструктор, функции вставки и удаления элемента, просмотра доступного элемента, функцию, проверяющую наличие элементов.
D – очередью называется очередь, в которой добавление и удаление возможно как в начало, так и в конец.
2. Перегрузить операции присваивания и потокового вывода/вывода.
3. Проверить работу созданного класса.
Индивидуальные задания
В индивидуальном задании приведены номер варианта, тип динамической структуры данных и способ ее реализации.
-
Линейный однонаправленный список, упорядоченный по возрастанию.
-
Линейный однонаправленный список, упорядоченный по убыванию.
-
Линейный двунаправленный список, упорядоченный по возрастанию.
-
Линейный двунаправленный список, упорядоченный по убыванию.
-
Циклический однонаправленный список, упорядоченный по возрастанию.
-
Циклический однонаправленный список, упорядоченный по убыванию.
-
Циклический двунаправленный список, упорядоченный по возрастанию.
-
Циклический двунаправленный список, упорядоченный по убыванию.
-
Очередь на основе линейного однонаправленного списка с указателями на начало и конец очереди.
-
Очередь на основе циклического однонаправленного списка.
-
Динамический буфер, реализованный как массив.
-
Линейный список, упорядоченный по возрастанию, с ограниченным количеством элементов, реализованный как массив.
-
D- Очередь в виде линейного однонаправленного списка с указателем на начало очереди.
-
D-Очередь в виде линейного однонаправленного списка с указателями на начало и конец очереди.
-
D-Очередь в виде циклического однонаправленного списка.
-
D-Очередь с ограниченным количеством элементов, реализованная как массив.
-
Очередь с приоритетами на основе линейного однонаправленного списка.
-
Очередь с приоритетами на основе циклического однонаправленного списка.
-
Очередь с приоритетами в виде массива очередей, каждая из которых реализована на основе линейного однонаправленного списка.
-
Очередь с приоритетами в виде массива очередей, каждая из которых реализована на основе циклического однонаправленного списка.
-
Линейный однонаправленный список, упорядоченный по возрастанию с выбором элемента только из начала списка.
-
Циклический однонаправленный список, упорядоченный по возрастанию с выбором элемента только из конца списка.
-
Линейный однонаправленный список, упорядоченный по возрастанию с выбором элемента только из конца списка.
-
Циклический однонаправленный список, упорядоченный по возрастанию с выбором элемента только из начала списка.
-
Стек с возможностью перемещения произвольного элемента в вершину.
Содержание отчета
-
Общее и индивидуальное задания.
-
Схемы алгоритмов работы с динамическими структурами данных.
Задание 5 Итераторы Общее задание
1. Разработать класс «Упорядоченный список», тип которого определяется заданием в п. I, предусмотрев в нем конструкторы инициализации и копирования, деструктор, функции вставки и удаления элемента, просмотра доступного элемента, функцию проверки наличия элементов.
2. Разработать класс «Итератор», который должен содержать конструктор и функции просмотра текущего элемента, перехода к следующему элементу, перехода в начало списка, перехода по заданному адресу, выдачу текущего адреса.
3. Используя разработанные классы, решить задачу из пункта II. Содержимым элемента списка является целое число.
4. Индивидуальное задание содержит две цифры. Первая определяет тип списка из пункта I, вторая действия над списком из пункта II.
I Типы списков
1. Простой однонаправленный упорядоченный по возрастанию.
2. Простой однонаправленный упорядоченный по убыванию.
II Действия над списком
1. Из списков s1 и s2 образовать список s3, содержащий только одинаковые элементы s1 и s2.
2. Из списков s1 и s2 образовать общий список s, включающий все элементы как списка s1 так и s2.
3. Из списков s1 и s2 удалить все элементы с одинаковым содержимым.
4. Из списка s1 образовать список s2, в котором из элементов в s1, имеющих одинаковое содержимое, присутствует только один.
5. Из списка s1 образовать список s2, в который включены все элементы s1, превышающие заданное число k.
6. Из списка s образовать два списка s1 и s2. В s1 должны войти все элементы, содержимое которых меньше заданного числа k, а в s2 - остальные.
7. Включить в список s1 все элементы списка s2, содержимое которых меньше заданного числа k.
8. Из списков s1 и s2 образовать список s3, являющийся объединением s1 и s2, т.е. одинаковые элементы s1 и s2 должны войти в s1 один раз.
9. Удалить из списка s все элементы с значением содержимого, превышающим заданное число k.
10. Из списков s1 и s2 образовать список s3, включив в него элементы из s1, не содержащиеся в s2 и элементы из s2, не содержащиеся в s1.
Индивидуальное задание.
Номер 1 2 3 4 5 6 7 8 9 10
Вариант 1.1 2.1 1.10 1.2 2.2 1.9 1.3 2.3 2.10 1.4
Номер 11 12 13 14 15 16 17 18 19 20
Вариант 2.4 2.9 1.5 2.5 2.8 1.8 2.6 1.6 1.7 2.7
Задание 6
Классы с вложенными динамическими структурами данных
Цель работы
Изучение способов организации классов типа "Контейнер", особенностей определения конструкторов и деструктора и реализация алгоритмов вставки и удаления элементов.
Общее задание
1. Для типа динамических структур данных, разработать соответствующие классы, предусмотрев конструкторы инициализации и копирования, деструктор, функции вставки и удаления элемента, просмотра доступного элемента, функцию проверяющую наличие элементов.
2. Перегрузить операции присваивания и потокового вывода для вывода содержимого динамической структуры на экран.
3. Задание реализовать с помощью динамических структур данных, одна из которых разрабатывается, а вторая используется стандартная. Типы динамических структур для каждого варианта представлены в таблице.
4. Проверить работу созданного класса.
