Файл: Отчет по проделанной работе Задание.docx

ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 09.12.2023

Просмотров: 43

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Титульный лист

Цель работы

Цель работы – приобрести практические навыки по использованию механизмов наследования и виртуальных функций при разработке объектно-ориентированных программ.

Для достижения поставленной цели надо решить следующие главные задачи:

 ознакомиться с теоретическими сведениями;  программно реализовать иерархию классов;

 выполнить тестирование программного кода;

 оформить отчет по проделанной работе

Задание

Вариант 4

Разработать абстрактный базовый класс вектор (одномерный массив произвольной длины) с виртуальным методом сумма (сумма элементов вектора) и производные классы вектор_целых_чисел (int*), вектор_чисел_float (float*) и вектор_чисел_double (double*) со своими реализациями этого метода

Описание программы

Согласно заданию необходимо разработать абстрактный класс, от которого будут наследоваться остальные классы, и переопределять методы базового класса. Для удобства работы с программой в программе необходимо создать меню для выбора действий.

Б
class Vector

{

public:

int count = 0;

virtual void sum() = 0;

virtual void generating_numbers() = 0; // заполнение вектора случайными значениями

virtual void print() = 0;

};
азовый класс имеет следующую структуру:

Листинг 1. Класс Vector

Класс VectorInt имеет следующее определение:
Л
class VectorInt : Vector

{

public:

int* mass;
VectorInt(int n)

{

mass = new int[n] {0};

count = n;

}
void sum()

{

int s = 0;

for (int i = 0; i < count; i++)

{

s += mass[i];

}

cout << "Сумма чисел: " << s << endl;

}
void generating_numbers()

{

random_device rd;

mt19937_64 gen(rd());

uniform_int_distribution dis;

for (int i = 0; i < count; i++)

{

mass[i] = dis(gen) % 100;

}

}
void print()

{

for (int i = 0; i < count; i++)

{

cout << mass[i] << " ";

}

cout << endl << endl;

}

};
истинг 2. Класс VectorInt


В классе переопределены функции базового класса.

По аналогии реализованы остальные классы, указанные в задание. Листинг реализаций классов приведен в приложение.

В функции main реализовано следующее меню:

Л
cout << "Меню" << endl;

cout << "1. Создать вектор с типом Int" << endl;

cout << "2. Создать вектор с типом Float" << endl;

cout << "3. Создать вектор с типом Double" << endl;

cout << "4. Вывод вектора с типом Int" << endl;

cout << "5. Вывод вектора с типом Float" << endl;

cout << "6. Вывод вектора с типом Double" << endl;

cout << "7. Вывод суммы элемеентов вектора с типом Int" << endl;

cout << "8. Вывод суммы элемеентов вектора с типом Float" << endl;

cout << "9. Вывод суммы элемеентов вектора с типом Double" << endl;

cout << "0. Выход" << endl << endl;

истинг 3. Меню
С его помощью можно работать с каждым классом отдельно.

Тестирование



Рисунок 1. Тест

Вывод по работе

В ходе выполнения работы было успешно разработано приложение по заданной теме. Приложение успешно прошло тестирование и показало высокую надежность. Были выполнены все заявленные цели лабораторной работы.

Список литературы

1. Campbell Parallel Programming with Microsoft® Visual C++® / Campbell. - Москва: Гостехиздат, 2018. - 784 c.

2. Альфред, В. Ахо Компиляторы. Принципы, технологии и инструментарий / Альфред В. Ахо и др. - Москва: Высшая школа, 2017. - 882 c.

3. Балена, Франческо Современная практика программирования на C++ / Франческо Балена , Джузеппе Димауро. - М.: Русская Редакция, 2019. - 640 c.

4. Боровский, А. C++ / А. Боровский. - М.: БХВ-Петербург, 2020. - 544 c.

5. Давыдов, В. Visual C++. / В. Давыдов. - М.: БХВ-Петербург, 2019. - 576 c.

Приложение

Листинг

main.cpp
// lab_1.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.

//
#include "Header.h"

int main()

{

setlocale(LC_ALL, "Russian"); // подключение кириллицы

cout << "Меню" << endl;

cout << "1. Создать вектор с типом Int" << endl;

cout << "2. Создать вектор с типом Float" << endl;

cout << "3. Создать вектор с типом Double" << endl;

cout << "4. Вывод вектора с типом Int" << endl;

cout << "5. Вывод вектора с типом Float" << endl;

cout << "6. Вывод вектора с типом Double" << endl;

cout << "7. Вывод суммы элемеентов вектора с типом Int" << endl;

cout << "8. Вывод суммы элемеентов вектора с типом Float" << endl;

cout << "9. Вывод суммы элемеентов вектора с типом Double" << endl;

cout << "0. Выход" << endl << endl;

string select;

VectorInt* vectorInt = nullptr; // вектор с типом Int

VectorFloat* vectorFloat = nullptr; // вектор с типом float

VectorDouble* vectorDouble = nullptr; // вектор с типом double

int n = 0;

while (true)

{

cout << "Выберите пункт меню: ";

cin >> select; // выбор пункта меню

switch (select[0])

{

case '1': // создание вектора с типом int

n = input("Введите число элементов в массиве: ");

vectorInt = new VectorInt(n);

vectorInt->generating_numbers();

cout << "Массив успешно сгенерирован" << endl << endl;

break;

case '2': // создание вектора с типом float

n = input("Введите число элементов в массиве: ");



vectorFloat = new VectorFloat(n);

vectorFloat->generating_numbers();

cout << "Массив успешно сгенерирован" << endl << endl;

break;

case '3': // создание вектора с типом double

n = input("Введите число элементов в массиве: ");

vectorDouble = new VectorDouble(n);

vectorDouble->generating_numbers();

cout << "Массив успешно сгенерирован" << endl << endl;

break;

case '4': // вывод вектора с типом int

if (vectorInt == nullptr)

{

cout << "Список не был создан. Создайте список" << endl << endl;

continue;

}

vectorInt->print();

break;

case '5': // вывод вектора с типом float

if (vectorFloat == nullptr)

{

cout << "Список не был создан. Создайте список" << endl << endl;

continue;

}

vectorFloat->print();

break;

case '6': // вывод вектора с типом double

if (vectorDouble == nullptr)

{

cout << "Список не был создан. Создайте список" << endl << endl;

continue;

}

vectorDouble->print();

break;

case '7': // вывод суммы элемеентов вектора с типом Int

if (vectorInt == nullptr)

{

cout << "Список не был создан. Создайте список" << endl << endl;

continue;

}

vectorInt->sum();

break;

case '8': // вывод суммы элемеентов вектора с типом float

if (vectorFloat == nullptr)

{

cout << "Список не был создан. Создайте список" << endl << endl;

continue;

}

vectorFloat->sum();

break;

case '9': // вывод суммы элемеентов вектора с типом double

if (vectorDouble == nullptr)

{

cout << "Список не был создан. Создайте список" << endl << endl;

continue;

}

vectorDouble->sum();

break;

case '0':

return 0;

default:

break;

}

}

}
Header.h
#pragma once

/*

Разработать абстрактный базовый класс вектор (одномерный массив произвольной длины)

с виртуальным методом сумма (сумма

элементов вектора) и

производные классы вектор_целых_чисел (int*),

вектор_чисел_float (float*) и

вектор_чисел_double (double*)

со своими реализациями этого метода

*/
#include

#include

#include

using namespace std;
int input(string mess) // ввод числа с проверкой на корректность

{

int val = 0;

string text;

while (true)

{

try

{

cout << mess;

cin >> text;

val = stoi(text);

if (val > 0) // число должно быть положительное

return val;

else

cout << "Введите положительное число" << endl;

}

catch (...)

{

cout << "Некорреткный ввод, повторите" << endl;

}

}

}
class Vector // базовый класс веткора

{

public:

int count = 0; // число элементов в векторе

virtual void sum() = 0; // функция вывода суммы элементов вектора

virtual void generating_numbers() = 0; // заполнение вектора случайными значениями

virtual void print() = 0; // печать списка

};
class VectorInt : Vector // вектор с типом Int

{

public:

int* mass;
VectorInt(int n) // конструктор с параметрами

{

mass = new int[n] {0};

count = n;

}
void sum() // перегруженная функция базового класса для вывода суммы элементов

{

int s = 0;

for (int i = 0; i < count; i++)

{

s += mass[i]; // суммирование элементов списка

}

cout << "Сумма чисел: " << s << endl;

}
void generating_numbers() // генерация случайных чисел

{

random_device rd;

mt19937_64 gen(rd());

uniform_int_distribution dis;

for (int i = 0; i < count; i++)

{

mass[i] = dis(gen) % 100; // генерация числе от 0 до 100

}

}
void print()

{

for (int i = 0; i < count; i++)

{

cout << mass[i] << " "; // вывод чисел в строку

}

cout << endl << endl;

}

};
class VectorFloat : Vector

{

public:

float* mass;
VectorFloat(int n)

{

mass = new float[n]