Файл: Методические указания по выполнению лабораторных и самостоятельных работ для обучающихся с применением дистанционных.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 79
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
14
-- stochastic generator with geometric distribution --
0 0 1 0 0 7 0 6 2 0 0 1 1 3 1
-- stochastic generator with Poisson distribution --
7 13 9 5 8 7 11 8 11 9 8 11 8 18 11
-- stochastic generator with Student distribution --
-1.27187 0.456237 -0.676487
-3.9993 0.981968 1.55521 0.996671 1.28064 -1.34321 0.238776 -0.654921 -1.15184
-0.383618 -0.143547 0.513351
Рис. 1.5 – Пример генерации псевдослучайных чисел при использовании std::mt19937 при геометрическом, пуассоновском и стьюдентовском распределениях
1.3
Задание на лабораторную работу
Для успешного выполнения задания следует:
1. Ознакомиться с программными кодами, приведенными в подразд. 1.2.
2. Модернизировать приведенные коды за счет изменения параметров шаблонов и проанализировать полученные результаты.
3. Разработать программные коды для генерации последовательностей псев- дослучайных чисел при использовании распределений по следующим шаблонам:
– piecewise_linear_distribution<> (кусочно-линейное);
– discrete_distribution<> (дискретное);
– normal_distribution<> (нормальное);
– lognormal_distribution<> (логнормальное);
– bernoulli_distribution<> (Бернулли);
– binomial_distribution<> (биноминальное).
15
2
ЛАБОРАТОРНАЯ РАБОТА № 1 «КЛАССЫ»
Хе-хе, понятненько! Это должно бытьвыкопано, положено в мешок, заперто в сундук.
М/ф «Клад»
2.1
Цели и задачи работы
Цель работы – изучить особенности разработки классов на языке C++, а также получить навыки по созданию и работе с их объектами.
Для достижения поставленной цели необходимо решить следующие глав- ные задачи:
ознакомиться с теоретическими сведениями;
программно реализовать пользовательский класс согласно заданию, включающему общую (разработать класс, содержащий поля и методы) и инди- видуальную (дополнительный метод класса) части;
выполнить тестирование программного кода;
оформить отчет по проделанной работе.
2.2
Теоретические сведения: ключевые темы
Для успешного выполнения задания рекомендуется предварительно озна- комиться с материалами п. 3.3.1–3.3.7 (раздел 3. ООП: инкапсуляция) учебного пособия по дисциплине [3] и просмотреть небольшие видеофайлы:
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Что такое класс. Что такое объект класса.
Сеттеры и геттеры, указатель this.
Конструкторы и деструкторы.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
2.3
Программное и методическое обеспечение
Работу можно выполнить в интегрированных средах разработки Microsoft
Visual Studio или Qt Creator (инструкции по их установке и настройке, а также
16 созданию проектов в них приведены в приложениях А, Б, Д и Е учебного посо- бия по дисциплине [3]) или используя компилятор GDB online Debugger [2] (для работы требуется браузер и выход в сеть Интернет).
Кратко рассмотрим особенности создания пользовательского проекта в компиляторе GDB online Debugger. Для этого на главной странице компиля- тора надо пройти процедуру регистрации или, если она уже пройдена ранее, вы- полнить вход в аккаунт. Для этого в левой части экрана надо выбрать Login
(рис. 2.1, а). Затем надо выбрать требуемый режим входа. Для этого можно вы- брать имеющиеся аккаунты в сервисах Google, Facebook, GitHub или зарегистри- роваться по адресу электронной почты (рис. 2.1, б).
а
б
Рис. 2.1 – GDB online Debugger: вид до (а) и после (б) входа в аккуант
По умолчанию пользовательский проект состоит из одного файла main.cpp
, в который помещена функция main(). Для создания дополнитель- ного файла (для разделения определения и реализации классов) надо в верхней части окна нажать на иконку New File (или Ctrl+M), ввести требуемое имя и нажать Save (рис. 2.2).
17
а
б
Рис. 2.2 – GDB online Debugger: добавление нового файла (а) и вид окна с пользовательским проектом, состоящим из 3 файлов (б)
Для сохранения файлов в пользовательском проекте следует нажать на иконку Save (Ctrl+S), расположенную по центру в верхней части окна, и ввести требуемое имя проекта (рис. 2.3, а). После описанных действий главное окно примет вид, представленный на рисунке 2.3, б.
а
б
Рис. 2.3 – GDB online Debugger: добавление имени проекта (а) и вид окна с успешном сохраненным проектом (б)
18
Для возврата к редактированию проекта после повторного входа в пользо- вательский аккаунт используется меню в левой части экрана My Projects.
2.4
Задание для выполнения работы
В ходе работы необходимо, не используя контейнеры библиотеки шабло-
нов STL, разработать класс Array, содержащий:
конструктор (задает начальные значения полям класса);
деструктор (освобождает память, которая выделялась под массив);
метод, резервирующий память под массив, состоящий из N элементов, где N – это аргумент метода;
метод, задающий значение k-го элемента массива, где индекс k и значе- ние элемента массива являются аргументами метода;
метод, заполняющий массив псевдослучайными числами с распределе- нием согласно индивидуальному заданию;
метод, выводящий элементы массива на экран (консольное окно);
метод, выводящий на экран текущий размер массива, выраженный в числе его элементов и в байтах, для его хранения;
дополнительный метод (варианты см. в таблице 2.1);
поле, хранящее размер массива;
поле, хранящее указатель на массив.
Пример определения (array.cpp), реализации (array.h) и использова- ния (main.cpp) класса array приведен в приложении А.
2.5
Порядок выполнения работы
При выполнении работынеобходимо:
1. Создать проект (подразд. 2.3) с именем, состоящим из имени студента и номера учебной группы (например, Sidorov_169_1) и содержащим файлы с программным кодом из приложения A. (Объявление класса поместить в заголо- вочный файл *.h, а его реализацию – в исполняемый *.cpp. Имена этих файлов
19 должны совпадать с именем разрабатываемого класса. Функция main(), созда- ние объектов класса и работа с ними должны быть помещены в файл main.cpp.)
2. Выполнить анализ работы программного кода из созданного проекта.
3. Выполнить модернизацию программного кода созданного проекта для того, чтобы его элементы были именованы согласно рекомендациям из приложе- ния В учебного пособия по дисциплине [3].
4. Модернизировать программный код класса, чтобы он содержал все ме- тоды, указанные в подразд. 2.4.
5. При реализации методов класса предусмотреть обработку ошибочных ситуаций: индекс k выходит за рамки массива; индекс k меньше нуля или больше размера массива; размер массива меньше или равен нулю и др. (при необходи- мости).
6. Выполнить тестирование работы созданного проекта. Для этого в функ- ции main() создать объект разработанного класса и с его помощью продемон- стрировать работу всех методов класса. Вызов каждого метода (кроме конструк- тора и деструктора) организовать с помощью считывания данных из консоли и вывода в консоль. При этом должно быть выполнено тестирование всех ветв- лений работы методов класса как при корректном, так и при некорректном зада- нии требуемых параметров (аргументов методов).
7. Оформить отчет по проделанной работе согласно требованиям из под- разд. 2.6.
2.6
Требования к оформлению отчета
Структура отчета должна включать:
титульный лист;
цель работы;
основную часть (описательная часть, пояснения, результаты тестирова- ния);
выводы по работе;
20
список использованной литературы;
приложения (3 шт.), содержащие раздельные листинги файлов с про- граммным кодом (3 файла) созданного проекта.
При оформлении текстовой части отчета следует руководствоваться тре- бованиями Образовательного стандарта ТУСУР 01-2021 «Работы студенческие по направлениям подготовки и специальностям технического профиля. Общие требования и правила оформления» (приказ ректора от 25.11.2021)
(
https://regulations.tusur.ru/documents/70
).
Отчет по работе должен включать:
архив (RAR или ZIP) с программной частью лабораторной работы. В ар- хиве должны находиться все исходные файлы, включая файлы проектов исполь- зуемой среды разработки, а также файлы, необходимые для запуска программы
(исполняемый файл, файлы с входными данными и т. п.). Программный код дол- жен быть построчно комментирован;
документ с отчетом по лабораторной работе в формате DOC, DOCX,
RTF или PDF;
рецензия на предыдущий вариант работы, если она сдается повторно по- сле исправления замечаний.
2.7
Варианты индивидуальных заданий
Работа выполняется согласно варианту индивидуального задания (таб- лица 2.1), выбор которого осуществляется по следующей формуле:
V = NK div 100, где V – искомый номер варианта;
N – общее количество вариантов;
K – код варианта (индивидуальный код студента); div – целочисленное деление.
При V = 0 выбирается максимальный вариант.
Параметры, не указанные в таблице 2.1, но необходимые для работы гене- раторов псевдослучайных чисел, выбираются на усмотрение обучающегося.
21
Таблица 2.1 – Варианты индивидуальных заданий
Вариант
Задание
1
Разработать класс array_delete_first_zero для работы с мас- сивом динамической длины. Тип данных – int. Для генерации псев- дослучайных чисел использовать 32-битный алгоритм MT19937 и начальное значение 1234. Дополнительный метод: удаление из мас- сива первого найденного нулевого элемента со сдвигом элементов
(уменьшение размера массива)
2
Разработать класс array_sort для работы с массивами динамиче- ской длины. Тип данных – int. Для генерации псевдослучайных чи- сел использовать 32-битный алгоритм MT19937 и случайное началь- ное значение. Дополнительный метод: сортировка элементов массива
3
Разработать класс array_delete для работы с массивами динами- ческой длины. Тип данных – int. Для генерации псевдослучайных чисел использовать 64-битный алгоритм MT19937 и начальное зна- чение 2345. Дополнительный метод: удаление элемента с номером n
(n– аргумент метода, заданный пользователем)
4
Разработать класс array_last для работы с массивами динамиче- ской длины. Тип данных – int. Для генерации псевдослучайных чи- сел использовать 64-битный алгоритм MT19937 и случайное началь- ное значение. Дополнительный метод: вывод последних n элементов массива (n – аргумент метода, заданный пользователем)
5
Разработать класс array_double_directed для работы с масси- вами динамической длины. Тип данных – int. Для генерации псев- дослучайных чисел использовать 32-битный алгоритм MT19937, слу- чайное начальное значение и равномерное распределение для диапа- зона (–13, 10). Дополнительный метод: вывод массива на экран в об- ратном порядке
6
Разработать класс array_remove_if_odd для работы с масси- вами динамической длины. Тип данных – float. Для генерации псевдослучайных чисел использовать 32-битный алгоритм MT19937, случайное начальное значение и равномерное распределение для диапазона (–6.6, 6.6). Дополнительный метод: удаление элементов с четными индексами со сдвигом оставшихся элементов (уменьше- ние размера массива)
7
Разработать класс array_remove_if_odd_value для работы с массивами динамической длины. Тип данных – float. Для генера- ции псевдослучайных чисел использовать 32-битный алгоритм
MT19937, случайное начальное значение и равномерное распределе- ние для диапазона [0, 1). Дополнительный метод: удаление элемен- тов с четными значениями со сдвигом оставшихся элементов (умень- шение размера массива)
22
Продолжение таблицы 2.1
Вариант
Задание
8
Разработать класс array_remove_if_not_odd для работы с мас- сивами динамической длины. Тип данных – int. Для генерации псевдослучайных чисел использовать 32-битный алгоритм MT19937, случайное начальное значение и геометрическое распределение. До- полнительный метод: удаление элементов с нечетными индексами со сдвигом оставшихся элементов (уменьшение размера массива)
9
Разработать класс array_remove_if_not_odd_value для ра- боты с массивами динамической длины. Тип данных – int. Для ге- нерации псевдослучайных чисел использовать 32-битный алгоритм
MT19937, случайное начальное значение и распределение Пуассона.
Дополнительный метод: удаление элементов с нечетными значени- ями со сдвигом оставшихся элементов (уменьшение размера массива)
10
Разработать класс array_remove_every_N для работы с масси- вами динамической длины. Тип данных – float. Для генерации псевдослучайных чисел использовать 32-битный алгоритм MT19937, случайное начальное значение и распределение Стьюдента. Допол- нительный метод: удаление каждого n-го элемента массива (n – аргу- мент метода, заданный пользователем) со сдвигом оставшихся эле- ментов (уменьшение размера массива)
11
Разработать класс array_shift_left для работы с массивами ди- намической длины. Тип данных – int. Для генерации псевдослучай- ных чисел использовать 32-битный алгоритм MT19937 и начальное значение 4321. Дополнительный метод: циклический сдвиг элемен- тов массива влево на n позиций (n – аргумент метода, заданный поль- зователем). Пример: было [1 10 3 5 7 2 4] и при n = 3 стало [5 7 2 4 1 10 3]
12
Разработать класс array_shift_right для работы с массивами динамической длины. Тип данных – int. Для генерации псевдослу- чайных чисел использовать 32-битный алгоритм MT19937 и случай- ное начальное значение. Дополнительный метод: циклический сдвиг элементов массива вправо на n позиций (n – аргумент метода, задан- ный пользователем). Пример: было [1 10 3 5 7 2 4] и при n = 3 стало
[7 2 4 1 10 3 5]
13
Разработать класс array_delete_max_positive_items для ра- боты с массивами динамической длины. Тип данных – float. Для генерации псевдослучайных чисел использовать 32-битный алгоритм
MT19937, случайное начальное значение и равномерное распределе- ние для диапазона (–13.13, 13.13). Дополнительный метод: удаление из массива максимального положительного элемента со сдвигом оставшихся элементов (уменьшение размера массива)
23
Окончание таблицы 2.1
Вариант
Задание
14
Разработать класс array_delete_max_negative_items для работы с массивами динамической длины. Тип данных – float. Для генерации псевдослучайных чисел использовать 32-битный алго- ритм MT19937, случайное начальное значение и распределение Сть- юдента. Дополнительный метод: удаление из массива максималь- ного отрицательного элемента со сдвигом оставшихся элементов
(уменьшение размера массива)
15
Разработать класс array_delete_min_positive_items для работы с массивами динамической длины. Для генерации псевдослу- чайных чисел использовать 32-битный алгоритм MT19937, случай- ное начальное значение и равномерное распределение для диапазона
(–15, 15). Дополнительный метод: удаление из массива минималь- ного положительного элемента со сдвигом оставшихся элементов
(уменьшение размера массива)
2.8
Система оценивания
Для оценивания работы используется следующая балльная система (разде- ление программного кода на файлы является обязательным и дополнительно не оценивается, а каждый выполненный не в полной мере пункт оценивается как
0,5 балла):
Разработан класс согласно общему заданию из подразд. 2.4 (без допол- нительного метода, из таблицы 2.1) – 1 балл.
Выполнено именование элементов программного кода (согласно реко- мендациям из приложения В учебного пособия по дисциплине [3]) и его коммен- тирование – 1 балл.
Разработаны проверки корректного ввода данных и корректной работы кода – 1 балл.
Разработанный класс содержит корректно работающий дополнительный метод, предписанный индивидуальным заданием (таблица 2.1) – 1 балл.
Оформление отчета выполнено согласно ОС ТУСУР – 1 балл.