Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum-S__wofp.pdf
Скачиваний:
166
Добавлен:
11.02.2015
Размер:
22.69 Mб
Скачать

II. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++

Лабораторная работа № 1 Понятие класса. Инкапсуляция

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

110

ОБРАЗЕЦ ОТЧЁТА ПО ЛАБОРАТОРНОЙ РАБОТЕ

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

Задачи

1.Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел.

2.Построить систему классов для описания плоских геометрических фигур: круг, квадрат, прямоугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и поворота на заданный угол.

3.Составить описание класса прямоугольников со сторонами, параллельными осям координат. Предусмотреть возможность перемещения прямоугольников на плоскости, изменение размеров, построение наименьшего прямоугольника, содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.

4.Составить описание класса для объектов - векторов, задаваемых координатами концов в трёхмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между векторами.

5.Составить описание класса для работы со списками строк (строки произвольной длины), с операциями включения в список, удаления из списка элемента с заданным значением данного, удаления всего списка или конца списка, начиная с заданного элемента.

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

7.Составить описание класса для определения одномерных массивов

132

целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы индексов, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, умножения и деления всех элементов массива на скаляр, печати (вывода на экран) элементов массива по индексам и всего массива.

8.Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.

9.Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.

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

11.Создать класс типа «циклическая последовательность». Функции-члены получают элемент и помещают его в последовательность. Предусмотреть функцию вывода последовательности на экран. Для хранения последовательности использовать динамический массив.

12.Создать класс типа «дата с полями»: день (1-31), месяц (1-12), год (целое число). Класс имеет конструктор. Функции-члены: установки дня,

133

месяца и года, функции-члены получения дня, месяца и года, а также две функции-члены печати: печать по шаблону: «5 января 1997 года» и «05.01.1997». Функции-члены установки полей класса должны проверять корректность задаваемых параметров.

13.Создать класс типа «время с полями»: час (0-23), минуты (0-59), секунды (0-59). Класс имеет конструктор. Функции-члены установки времени, функции-члены получения часа, минуты и секунды, а также две функции-члены печати: печать по шаблону: «16 часов 18 минут 3 секунды» и «4 p.m. 18 минут 3 секунды». Функции-члены установки полей класса должны проверять корректность задаваемых параметров.

14.Составить описание класса для работы с квадратной целочисленной матрицей. Обязательные функции-члены класса для ввода/вывода матрицы, вычисления следа матрицы и её определителя.

15.Составить описание класса для работы со стеком вещественных чисел. Обязательные функции-члены класса для добавления/удаления элемента, проверки присутствия указанного элемента, вывода текущих элементов стека. Для реализации стека использовать динамический массив.

16.Составить описание класса для работы с символом на экране (в текстовом режиме). Для этого должны быть предоставлены возможности: высветить символ на экране в определённом месте, определённым цветом; определить видимость символа в данный момент; получить координаты точки после поворота отрезка, соединяющего этот символ с началом координат на заданный угол.

17.Создать класс типа «матрица». Данный класс содержит указатель на double, размер строк и столбцов и состояние ошибки. Определить конструктор без параметров, конструктор с одним параметром и конструктор с двумя параметрами, деструктор. Определить методы доступа, возвращать значение элемента (i, j) и адрес этого элемента. Определить функцию печати. Определить функции сложения и

134

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

18.Создать класс типа «прямоугольник». Поля - высота и ширина. Функции-члены вычисляют площадь, периметр, устанавливают поля и возвращают значения. Функции-члены установки полей класса должны проверять корректность задаваемых параметров и обеспечивать отображение информации на экране дисплея в текстовом или

графическом режиме.

19.Создать класс типа «одномерный массив» и класс типа «массив одномерных массивов». Обеспечить возможность обращения к элементам по индексу с контролем выхода за границы.

20.Создать класс типа «окружность». Поля – координаты центра и радиус. Функции-члены вычисляют площадь, длину окружности, устанавливают значения полей и возвращают значения. Функции-члены установки полей класса должны проверять корректность задаваемых параметров. Функция печати.

21.Создать класс типа «игра в крестики-нолики». Поле класса - массив 3х3. Обеспечить возможность заполнения только свободных «клеток» в массиве.

22.Создать класс типа «квадрат». Поля – координаты сторон квадрата. Функции-члены вычисляют площадь, периметр, устанавливают поля и возвращают значения. Функции-члены установки полей класса должны проверять корректность задаваемых параметров. Функция печати.

23.Составить описание класса одномерных массивов строк, каждая строка задается длиной и указателем на выделенную для неё память. Предусмотреть возможность обращения к отдельным строкам массива

135

по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) отдельных элементов массива и всего массива.

24.Создать класс, который считывал бы строку, содержащую произвольный текст на английском и/или русском языках. Переводил бы все строчные буквы в заглавные (не меняя остальных символов) и записывал всё в стандартный поток вывода.

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

? – любой символ;

* – любое количество любых символов; + – любое ненулевое количество любых символов;

(..)* – элементы, удовлетворяющие регулярному выражению в скобках, могут повторяться любое количество раз; (..)+ – элементы, удовлетворяющие регулярному выражению в скобках,

могут повторяться любое ненулевое количество раз; (..)_ – элементы, удовлетворяющие регулярному выражению в скобках,

могут либо присутствовать (один раз), либо отсутствовать.

26.Создать класс, который содержит массив A целого типа из произвольного количества элементов, присвоить всем элементам случайные значения в диапазоне [-134, 142]. Создать функции-члены класса, которые позволяют:

1)найти наибольший по абсолютной величине элемент;

2)найти такую пару элементов, у которой разность между вторым и первым наибольшая;

136

3)найти такую тройку элементов, для которой выражение

A[i]*A[i+1]+A[i+2] наибольшее.

27.Создать класс, который считывает десятичное число и печатает его двоичный, восьмеричный и шестнадцатеричный эквиваленты.

28.Создать класс, который содержит две переменные с разными значениями. В рамках класса создать функцию-член, которая обменивает значения переменных, не используя дополнительных переменных и не выделяя для этих целей динамической памяти.

29.Создать класс, который выводит на экран сумму цифр целого положительного числа.

30.Создать класс «страны мира». Информация о странах должна содержаться в записях со следующими полями: название, территория, население, выход к морю. Массив должен содержать не менее 10 записей. Организовать ввод информации о странах с клавиатуры. Реализовать функцию-член класса, которая определит страну с наибольшей территорией, имеющую выход к морю и/или океану.

31.Создать класс, который определял бы, сколько раз каждая буква встречается в заданном файле, и печатал результат на экране монитора.

32.Создать класс, который по массиву с данными строит круговую диаграмму и отображает её на экране монитора.

33.Создать класс, который по заданному массиву строит гистограмму и отображает её на экране монитора.

34.Имеется текстовый файл. Создать класс, который создал бы новый файл, в котором каждая строка исходного файла читалась бы наоборот, т.е.

1-ый символ в исходной строке стал бы последним, 2-ой - предпоследним и т.д. Количество строк в файле произвольно.

35.Создать класс, который использует массив из 40 элементов для хранения целых чисел вплоть до больших целых, содержащих по 40 цифр. Функции-члены должны вводить, выводить, складывать и вычитать эти большие, целые. Сравнение больших целых чисел. Деление и умножение

137

целых больших чисел.

138