Объектно-ориентированное программирование (С.И. Борисов, 2002 г., 38 с.)

ЛАБОРАТОРНАЯ РАБОТА №1. «ПРОСТЕЙШИЕ ПРОГРАММЫ»
Цель работы
Целью данной лабораторной работы является реализация простейших программ, изучение работы с компилятором языка С/С++, изучение стандартного ввода/вывода и операций в языке С++.

Задания
Номер задания вычисляется исходя из последних двух цифр Вашего кода доступа. Например, если последние две цифры равны 34, то номер варианта равен: n=34*10/100=3,4 = 3 вариант.
В случае, если непонятна формулировка вопроса, выполняйте задание так, как Вы его понимаете, но предварительно объясните, как Вы поняли задание, то есть сформулируйте Ваше понимание данного задания.

Вариант Номер
задания Задание
1 1.1 Найти минимальное число в массиве.
1.2 Произвести сложение двух массивов 5х3 по правилам сложения матриц.
1.3 Найти разницу в днях между двумя заданными датами.
2 2.1 Найти максимальное число в массиве.
2.2 Создать двумерный массив 5х3 элемента, найти в этом массиве сумму всех элементов.
2.3 Определить, является ли заданная квадратная матрица симметричной относительно главной диагонали.
3 3.1 Найти сумму чисел в массиве.
3.2 Отсортировать массив по убыванию.
3.3 Произвести перемножение двух массивов 5х3 и 3х5 по правилам умножения матриц.
4 4.1 Найти произведение чисел в массиве.
4.2 Отсортировать массив по возрастанию.
4.3 Найти определитель матрицы 3х3 по определению определителя.
5 5.1 Распечатать массив в обратном порядке.
5.2 Заполнить массив числами Фибоначчи (от n=1 до n=20). Числа Фибоначчи: fn=fn-1+fn-2, f1=1, f2=1.
5.3 Произвести сложение двух одномерных массивов целых чисел, в каждом элементе которого записана одна десятичная цифра.
6 6.1 Заполнить массив значениями квадрата индекса.
6.2 Заполнить массив из 20 вещественных чисел значениями факториала: n!, где n – индекс массива, ! – операция факториал: n!=n(n-1)!, 1!=1.
6.3 Произвести вычитание двух одномерных массивов целых чисел, в каждом элементе которого записана одна десятичная цифра.
7 7.1 Найти среднее арифметическое чисел массива.
7.2 Заполнить массив вещественных чисел случайными числами в диапазоне от 10 до 11. Произвести нормировку массива вещественных чисел: , где А – корень квадратный из суммы квадратов значений массива: .
7.3 Произвести операцию скалярного умножения двух векторов.
8 8.1 Домножить каждый элемент массива на заданное число.
8.2 Написать программу, которая определяет, является ли первый заданный вектор вещественных чисел обратной записью второго аналогичного вектора.
8.3 Вычислить векторное произведение двух векторов.
9 9.1 Добавить к каждому элементу массива заданное число.
9.2 По заданной квадратной матрице найти вектор, в котором записаны максимумы всех строк матрицы.
9.3 Найти вектор-сумму нескольких заданных векторов.
10 10.1 Вычесть из каждого элемента массива значение среднего арифметического.
10.2 По заданной квадратной матрице найти вектор, в котором записаны минимумы всех столбцов матрицы.
10.3 Назовем седловой точкой матрицы ячейку, которая является минимальной в своей строке и максимальной в столбце. Найти хотя бы одну седловую точку матрицы размером 10х10, если она есть.

ЛАБОРАТОРНАЯ РАБОТА №2. «РЕАЛИЗАЦИЯ ПРОСТЕЙШЕГО КЛАССА»
Цель работы
Целью данной лабораторной работы является реализация про-стейшего абстрактного класса на языке С++.
Задания
В случае, если непонятна формулировка вопроса, выполняйте за-дание так, как Вы его понимаете, но предварительно объясните, как Вы поняли задание, то есть сформулируйте Ваше понимание данного задания.
1 Разработать класс Vector – геометрический вектор произ-вольной размерности (размерность задается в конструкторе вектора). Реализовать метод доступа к элементам вектора. Реализовать операции сложения, вычитания и скалярного произведения векторов, а также нахождение модуля вектора.
2 Разработать класс Matrix – матрица. Размерность матрицы задавать в конструкторе. Реализовать метод доступа к эле-ментам массива. Реализовать операции сложения, вычита-ния, умножения и транспонирования матрицы. Сделать метод определения симметричности матрицы (если матри-ца квадратная). Сделать метод формирования единичной матрицы (для квадратных матриц).
3 Разработать класс ArrayOfInt – массив целых чисел. Раз-мерность массива задавать в конструкторе. Реализовать метод доступа к элементам массива. Реализовать метод Sum – вычисление суммы чисел в массиве. Метод сорти-ровки массива по возрастанию и по убыванию, метод срав-нения двух массивов (==, !=). Метод конкатенации (слия-ния) двух массивов.
4 Разработать класс FileStream, инкапсулирующий работу с файлами через стандартную библиотеку Си (fopen, fclose, fprintf, fscanf, fread, fwrite и т.д.). Реализовать методы от-крытия и закрытия файла (отдельный метод Open и метод Create и конструктор с именем открываемого файла, закры-вать – в деструкторе и отдельным методом Close) Реализо-вать методы Write и Read для int, double и char*. Обеспе-чить два режима записи – двоичный и текстовый. В тексто-вом режиме все числа записываются в виде текста, напри-мер, целое число 3987 записывается как последователь-ность символов ‘3987 ’ (преобразование можно сделать при помощи fprintf, например), а в двоичном  в виде последо-вательности двух байт: 0x93, 0x0f (при помощи fwrite).
5 Разработать класс large – длинное целое. Для хранения одной десятичной цифры использовать одно число типа char. Количество десятичных цифр, которые должны размещаться в этом числе, передавать в конструкторе. Реализовать методы присваивания, сложения двух чисел, печати числа на экране.
Переписать программу вычисления числа Фибоначчи для типа large. Вычислить fn=100 (22 десятичных цифры). Заме-чание: если Вы в прошлый раз использовали рекурсивный алгоритм вычисления чисел Фибоначчи, то теперь Вам необходимо разработать нерекурсивный алгоритм, так как рекурсивное вычисление для n=100 займет слишком много времени (возможно, несколько миллионов лет).
6 Разработать класс String – строка символов. Реализовать операции присваивания, конкатенацию (слияние двух строк), сравнения строк (==, !=), метод вывода объекта на экран. Размер строки динамически увеличивается в процес-се работы со строкой по мере необходимости.
7 Разработать класс Vector4 и Matrix4 – 4-компонентный вектор и матрица 4х4 соответственно. Реализовать опера-ции сложения матриц, умножения матриц, сложения векто-ров, умножения матрицы на вектор и вектора на матрицу. Домножение матрицы и вектора на число, нормализация вектора (при данной нормализации все 4 составляющие вектора делятся на значение последней – четвертой составляющей). Отображение матрицы и вектора на эк-ране.
8 Реализовать класс Date (дата) – инкапсулирует внутри дан-ные для работы с датой. Реализовать методы ввода и выво-да этой информации. Реализовать операцию вычисления разности между двумя датами (результат в днях).
9 Реализовать класс Time (время) – инкапсулирует внутри данные для хранения времени (часы, минуты, секунды). Реализовать методы ввода и вывода этой информации. Реа-лизовать операцию вычисления разности между двумя точ-ками времени (результат в секундах).
10 Разработать класс Complex – комплексные числа. Реализо-вать операции: сложения, умножения комплексных чисел, умножения реальных чисел на комплексные и наоборот, нахождения реальной и мнимой части числа, перевода в полярные координаты.

КОНТРОЛЬНАЯ РАБОТА №1
Цель работы
Целью данной контрольной работы является контроль знаний и умений, полученных в процессе изучения предыдущего материала.
Предварительные сведения
В предыдущих лабораторных работах внутри классов Вы исполь-зовали только встроенные в компилятор типы данных. Данная работа будет отличаться лишь тем, что, помимо стандартных типов данных, Вы будете использовать еще и созданные Вами в предыдущей лабора-торной работе классы.
Задания
В случае, если непонятна формулировка вопроса, выполняйте задание так, как Вы его понимаете, но предварительно объясните, как Вы поняли задание, то есть сформулируйте Ваше понимание данного задания.
1 На основе класса Vector разработать класс Matrix (мат-рица, физически представляющая собой вектор, состоя-щий из заданного числа векторов). Реализовать метод сравнения двух матриц (==, !=).
2 Разработать класс ArrayOfMatrix – массив матриц. Раз-мерность массива и матриц, входящих в него, задавать в конструкторе. Реализовать метод доступа к элементам массива, метод сравнения двух массивов (==, !=). Реали-зовать операции конкатенации массивов.
3 Разработать класс SqArrayOfInt – двумерный массив целых чисел. Физически данный массив должен состоять из вектора массивов типа ArrayOfInt. Размерность массива задавать в конструкторе. Реализовать метод доступа к элементам массива. Реализовать метод Sum – вычисление суммы чисел в массиве. Метод сортировки массива по возрастанию и по убыванию, метод сравнения двух массивов (==, !=). Метод конкатенации (слияния) двух массивов.
4 Разработать класс SortedFile – сортированный файл, в данном файле хранятся строчки одинаковой длины в порядке возрастания. Имя файла задается в конструкторе. Реализовать метод слияния двух файлов (результирующий файл должен остаться сортирован-ным).
5 Разработать класс NaturalFraction (обыкновенная дробь) два числа типа large (числитель и знаменатель). Реализо-вать методы сложения, умножения и деления дробей. Метод вывода на экран.
6 Разработать класс Strings – массив строк символов. Реа-лизовать операции доступа к строкам (оператор «квад-ратная скобка»), присваивания, конкатенации (слияния двух массивов).
7 Разработать класс ArrayOfVector4 – массив 4-компонентных векторов. Размер массива не ограничен и изменяется динамически в зависимости от потребностей. Реализовать операции доступа к элементам массива, конкатенации, добавления к массиву элемента. Метод-итератор – в данный метод передается функция, которую необходимо выполнить для каждого элемента массива.
8 Реализовать класс Person (персона) – инкапсулирует пер-сональные данные о человеке (фамилию, имя, отчество и дату рождения типа Date). Для этого класса реализовать конструктор, позволяющий записать данные в объект и метод вывода персоны на экран. Реализовать класс Persons – массив персон. Реализовать операции доступа к элементам массива, конкатенации, добавления к массиву элемента. Метод, выдающий список лиц, до дня рождения которых осталось менее 5 дней (возможно при-дется модифицировать класс Date).
9 Реализовать класс Event (событие) инкапсулирует время прихода события (типа Time) и значение события (веще-ственное число). Реализовать класс Events – последова-тельность событий. Размер массива задается в конструк-торе и автоматически изменяется в случае необходимо-сти. Реализовать методы сортировки по времени и по значению события (два метода). Метод поиска среднего значения между двумя точками времени. Метод поиска среднего времени между двумя последовательными со-бытиями.
10 Разработать класс ComplexMatrix – матрица комплекс-ных чисел. Размер матрицы задается в конструкторе. Реализовать операции: сложения, умножения матриц, умножения матрицы на число (комплексное).

ЛАБОРАТОРНАЯ РАБОТА №3. «НАСЛЕДОВАНИЕ»
Цель работы
Целью данной лабораторной работы является изучение механизма наследования.
Предварительные сведения
Понятие наследования подробно рассмотрено в курсе лекций.
Задания
В случае, если непонятна формулировка вопроса, выполняйте за-дание так, как Вы его понимаете, но предварительно объясните, как Вы поняли задание, то есть сформулируйте Ваше понимание данного задания.
1 Разработать класс NormVector – вектор единичной длины, наследованный от класса Vector.
Замечание: нормирование необходимо производить после любого изменения составляющих вектора. Соответственно необходимо перегрузить метод доступа к компонентам век-тора.
2 Разработать класс NormMatrix (матрица с единичным определителем), наследованный от класса Matrix.
Замечание: для упрощения пусть матрица будет размерно-стью до 3х3. Нормирование матрицы необходимо произво-дить после любого изменения составляющих. Соответ-ственно необходимо перегрузить метод доступа к ее ком-понентам.
3 Разработать класс SortedArrayOfInt – упорядоченный мас-сив целых чисел, наследованный от класса ArrayOfInt.
Замечание: сортировку массива необходимо производить после любого изменения его составляющих. Соответствен-но необходимо перегрузить метод доступа к его компонен-там.
4 Разработать класс EncryptedFile – шифрованный файл, наследованный от файла FileStream. В конструктор данного класса передавать ключ – последовательность из нескольких символов, все операции чтения и записи производить через виртуальную процедуру шифрования. Об алгоритме шифрования читайте в комментариях. Все остальные методы сохраняются аналогично классу FileStream.
5 Разработать класс fixpoint (число с фиксированной точкой), наследованный от класса large. В конструктор класса передавать количество цифр до запятой и количество цифр после запятой – их сумма как раз и будет количеством цифр в числе large. Операция сложения остается неизменной. Изменятся вывод числа на экран.
6 Разработать класс LowString (строка из прописных симво-лов), наследованный от класса String.
Замечание: замену больших букв на маленькие необхо-димо производить при любом изменении строки.
7 Разработать класс NormedVector4 – 4-компонентный нор-мализованный вектор. Нормализацию вектора необходимо производить при каждом изменении составляющих векто-ра. Обеспечить методы «поворот», «смещение», «масшта-бирование» (см. комментарии).
8 Реализовать класс ValidDate (корректная дата), наследованный от класса Date. При каждом изменении даты необходимо производить контроль корректности даты. Реализовать метод вывода печати в различных форматах.
9 Реализовать класс ValidTime – корректное время. При каж-дом изменении времени необходимо производить контроль корректности времени. Реализовать методы форматного вывода этой информации.
10 Разработать класс PolarComplex (комплексные числа, пред-ставленные в полярных координатах), наследованный от класса Complex. Ввод и вывод этих чисел осуществляется в полярных координатах, хранение и все остальные методы оставить родительские.

ЛАБОРАТОРНАЯ РАБОТА №4. «ШАБЛОНЫ»
Цель работы
Целью данной лабораторной работы является изучение шаблонов классов в языке С++.
Задания
В случае, если непонятна формулировка вопроса, выполняйте за-дание так, как Вы его понимаете, но предварительно объясните, как Вы поняли задание, то есть сформулируйте Ваше понимание данного задания.
1 Разработать шаблон класса TVector – одномерный мас-сив; в качестве параметра шаблона использовать тип данных, хранимых в массиве. Функциональность дан-ного класса аналогична функциональности класса из 2-ой лабораторной работы. В качестве примера использования данного шаблона сделать его реализа-цию для типа NormVector.
2 Разработать шаблон класса TList – список (одно-связный либо двусвязный); в качестве параметра шаблона использовать тип хранимых в списке данных. Обеспечить функциональность данного класса, аналогичную функциональности класса из 2-ой лабораторной работы. В качестве примера использования данного шаблона сделать его реали-зацию для типа Matrix.
3 Разработать шаблон класса TArray – массив (прямо-угольный); в качестве параметра шаблона использо-вать тип хранимых в массиве данных. Обеспечить функциональность данного класса, аналогичную функциональности класса из 1-ой лабораторной работы. В качестве примера использования данного шаблона сделать его реализацию для типа SqArrayOfInt.
4 Разработать шаблон класса TFileOf – типизированный файл; в качестве параметра шаблона использовать тип данных, хранимых в файле (это могут быть строки фик-сированной длины, целые числа, структуры и так да-лее). Имя открываемого файла и режим открытия (чте-ние/запись) передается в конструктор. Режим чтения и записи только двоичный. Реализовать методы Read и Write, в которые в качестве параметра передается объ-ект (для Write) или ссылка на объект (для Read), кото-рый необходимо записать или прочитать.
5 Разработать шаблон класса TLarge – длинное число; в качестве параметра шаблона указать тип данных, ис-пользуемых для хранения одной десятичной цифры. Обеспечить функциональность, аналогичную функцио-нальности класса large. В качестве примера использования данного шаблона сделать его реали-зацию для типа char.
6 Разработать класс TString – строка символов; в каче-стве параметра шаблона указать тип данных, используемых для хранения одного символа. Обеспечить функциональность, аналогичную функциональности класса String. Размер строки динамически увеличивается в процессе работы со строкой по мере необходимости. В качестве примера использования данного шаблона сделать его реали-зацию для типа short.
7 Разработать шаблоны классов TVector4 и TMatrix4 – 4-компонентный вектор и матрица 4х4 соответственно; в качестве параметра шаблона использовать тип дан-ных, используемых для хранения одной ячейки. Обеспе-чить функциональность, аналогичную функционально-сти классов Vector4 и Matrix4.
8 Разработать шаблон класса TVector – одномерный мас-сив; в качестве параметра шаблона использовать тип данных, хранимых в массиве. Обеспечить метод досту-па к элементам массива; дополнительно обеспечить функциональность, аналогичную классу Persons. В ка-честве примера использования данного шаблона сде-лать его реализацию для типа Person.
9 Разработать шаблон класса TVector – одномерный мас-сив; в качестве параметра шаблона использовать тип данных хранимых в массиве. Обеспечить метод доступа к элементам массива; дополнительно обеспечить функциональность, аналогичную классу Events. В качестве примера использования данного шаблона сделать его реализацию для типа Person.
10 Разработать шаблон класса TArray – двумерный массив (матрица); в качестве параметра шаблона ис-пользовать тип данных, хранимых в матрице. Размер-ность матрицы задавать в конструкторе. Реализовать метод доступа к элементам массива. Реализовать операции сложения, вычитания, умножения и транспонирования матрицы. Сделать метод определения симметричности матрицы (если матрица квадратная). В качестве примера использования данного шаблона сделать его реализацию для типа Complex.

КОНТРОЛЬНАЯ РАБОТА №2
Цель работы
Целью данной контрольной работы является контроль знаний и умений, полученных в процессе изучения предыдущего материала.
Предварительные сведения
Данная контрольная работа является завершающим звеном в про-цессе разработки и реализации цикла лабораторных работ. Основная задача данной работы – доведение ранее созданных классов до полной функциональности.
Задания
1 Доработать шаблон класса TVector. Будем считать новый шаблон полноценным геометрическим вектором; внести операции сложения, вычитания, умножения ска-лярного и геометрического (для 3-мерных), умножения на число, нормализацию вектора. В качестве пара-метра шаблона – тип чисел хранимых в векторе (могут быть float, double, complex и так далее).
2 Разработать шаблон класса TMatrix, в качестве пара-метра шаблона – тип чисел хранимых в векторе (могут быть float, double, complex и так далее). В данном шаб-лоне должны быть реализованы методы: сложения, вычитания матрицы, умножения матриц, умножения матрицы на число, транспонирования, вычисления определителя (по определению), обращения матрицы. Создание единичной матрицы.
3 Разработать шаблон класса TVector – одномерный мас-сив; в качестве параметра шаблона использовать тип хранимых в массиве данных. Обеспечить методы: до-бавление элемента в начало, в конец, в произвольное место массива. Аналогично  удаление. Реализовать методы: среднее арифметическое, среднее геометриче-ское, максимум, минимум, сортировка по убыванию и по возрастанию. Дополнительно: написать функцию построения ряда Фибоначчи, в качестве контейнера для хранения ряда использовать реализацию шаблона TVector для вещественных чисел.
4 Добавить в шаблон класса TFileOf операцию сортиров-ки файла.
5 Добавить в шаблон класса large операции вычитания и умножения.
6 Добавить в шаблон класса TString методы: DelDupSpaces – удаление дублированных пробелов, Tab2Space – замена табуляции на пробелы, CountWord – подсчет количества слов, CountSimb – подсчет количества символов.
7 Доработать шаблоны классов TVector4 и TMatrix4 для обеспечения полной функциональности (аналогично лабораторной работе №3).
8 Добавить к классу Date метод определения дня недели.
9 Доработать класс Time – написать метод перевода раз-ницы секунд в часы, минуты и секунды.
10 Разработать шаблон класса TComplex, обеспечить ему полную функциональность, необходимую для ком-плексных чисел, в качестве параметра шаблона – тип данных, используемых для хранения составляющих комплексного числа. Обеспечить операцию деления комплексных чисел.


ОТПРАВИТЬ ЗАЯВКУ
(уточните наименование работ: ТКР, ЛР, ККР, КП, ЭКЗ,
2 последние цифры пароля
к какому числу нужно выполнить работы)

Имя

Email



© 2009-2024 TusurBiz