Главная страница
Навигация по странице:

  • Задание Вариант 4

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

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

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

  • Приложение Листинг main . cpp

  • Header . h

  • Лабораторная работа 2. Лабораторная 2. Отчет по проделанной работе Задание


    Скачать 66.53 Kb.
    НазваниеОтчет по проделанной работе Задание
    АнкорЛабораторная работа 2
    Дата28.04.2023
    Размер66.53 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная 2.docx
    ТипОтчет
    #1096305

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

    Цель работы

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

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

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

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

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

    Задание

    Вариант 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] {0};

    count = n;

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

    {

    float 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) % 10000 / 100.0; // генерация чисел от 0.0 до 100.0

    }

    }
    void print() // вывод списка на печать

    {

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

    {

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

    }

    cout << endl << endl;

    }

    };
    class VectorDouble : Vector

    {

    public:

    double* mass;
    VectorDouble(int n)

    {

    mass = new double[n] {0};

    count = n;

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

    {

    double s = 0;

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

    {

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

    }

    cout << "Сумма чисел: " << s << endl << 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) % 10000 / 100.0; // генерация чисел от 0.0 до 100.0

    }

    }
    void print() // вывод списка на печать

    {

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

    {

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

    }

    cout << endl << endl;

    }

    };


    написать администратору сайта