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

  • Цель курсовой работы

  • Задачи курсовой работы

  • Условие задачи

  • Решение задачи с использованием класса и класса наследника на языке С++

  • Источники разработки

  • Курсовая работа ООП. 3. Решение задачи с использованием функций 3


    Скачать 317.62 Kb.
    Название3. Решение задачи с использованием функций 3
    АнкорКурсовая работа ООП
    Дата22.05.2021
    Размер317.62 Kb.
    Формат файлаdocx
    Имя файлаКурсовая работа ООП.docx
    ТипРешение
    #208433

    Цель курсовой работы 2

    Задачи курсовой работы 2

    2.Условие задачи 3

    3.Решение задачи с использованием функций 3

    3.1 Прототипы выбранных функций 3

    3.3Форма ввода для функции matr_in 4

    3.5Блок-схема функции main 5

    5

    3.6Состав данных функции обработки 6

    3.7Блок схема алгоритма функции matrne. 7

    3.8 Код консольного приложения с подпрограммами на языке C++ 8

    4.Решение задачи с использованием класса и класса наследника на языке С++ 9

    4.1 UML-диаграмма 9

    4.2 Код консольного приложения с подпрограммами на языке C++ 10

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

    5.Заключение 12

    6.Источники разработки 13

    13



    1. Введение

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

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

    Базовая концепция ООП основана на понятии, называемым классом. Он позволяет упаковать вместе различные типы данных наряду с различными функциями, манипулирующими элементами данных этого класса. Элементы данных внутри класса могут быть объявлены как локальные (private) или глобальные (public). ООП тесно связывает данные с определенным классом и его объектами. Здесь нет необходимости в глобальных типах данных, как в ПОП, и, следовательно, данные не могут свободно «течь» по всей программе. Это гарантирует то, что не произойдет какой-либо случайной модификации важных данных.

    Еще одной особенностью, привнесенной в ООП, является возможность повторного использования кода. Это стало возможным благодаря особенности классов под названием наследование. Благодаря наследованию один класс может приобрести свойства другого класса.

    Цель курсовой работы


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

    Задачи курсовой работы


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

    • Проанализировать условие задачи, составить таблицы данных;

    • Разработать основной вычислительный алгоритм;

    • Разработать и отладить консольное приложение с использованием функций (процедурный подход);

    • Разработать и отладить консольное приложение с использованием одного, и двух классов (объектно-ориентированный подход);


    1. Условие задачи


    Проверить, есть ли в матрице A (6×5) элементы, большие 10, а в матрице B (5×7) — элементы, большие 5.


    1. Решение задачи с использованием функций


    Алгоритм вычисления элементов, которые больше заданных чисел (10 и 5) одинаковы. Поэтому вычисление этих элементов следует оформить как функцию matrne, а затем применить её два раза к конкретным (фактическим) матрицам A и B.

    Алгоритм ввода одинаков для матриц A и B, поэтому ввод также оформим как функцию matr_in.

    3.1 Прототипы выбранных функций


    Void matr_in (float[][7], int n, int m, char nm)– обеспечивает ввод матрицы с клавиатуры,

    • float[][7] – указатель на двумерный массив (матрица),

    • int n – кол-во строк матрицы,

    • int m – кол-во столбцов матрицы,

    • char nm – символ-название матрицы.

    Int matrne(float[][7], int n, int m, char nm, float QD)– находит элемент матрицы больше указанного,

    • float[][7] – указатель на двумерный массив (матрица),

    • int n – кол-во строк матрицы,

    • int m – кол-во столбцов матрицы,

    • char nm – символ-название матрицы,

    • float QD – заданные числа.



      1. Состав данных функции main

    Состав данных функции main представлен в таблице:

    Имя

    Смысл

    Тип

    Структура




    Входные данные




    a

    1 заданная матрица

    Double

    (вещественный)

    Двумерный массив n1*n1

    b

    2 заданная матрица

    Double

    (вещественный)

    Двумерный массив n2*n2

    Q

    1 заданное число

    Double

    (вещественный)

    Простая переменная

    D

    2 заданное число

    Double

    (вещественный)

    Простая переменная




    Выходные данные







    Смотрите форму вывода





      1. Форма ввода для функции matr_in




      1. Форма вывода для функции main
      2. Блок-схема функции main





      1. Состав данных функции обработки


    Обработка осуществляется в функции matrne(float mx[][7], int n, int m, float QD) Состав данных функции matrne представлен в таблице.

    Имя

    Смысл

    Тип

    Структура




    Входные данные




    mx

    Заданная матрица

    Float

    (вещественный)

    Двумерный массив n*m

    n,m

    Заданная размерность матрицы

    Integer

    (целый)

    Простые переменные

    QD

    Заданное число

    Float

    (вещественный)

    Простая переменная




    Выходные данные




    S

    Указатель на число, большее заданного

    Integer

    (целый)

    Простая переменная




    Промежуточные данные




    i

    Индекс строки

    Integer

    (целый)

    Простая переменная

    j

    Индекс столбца

    Integer

    (целый)

    Простая переменная






























      1. Блок схема алгоритма функции matrne.



    3.8 Код консольного приложения с подпрограммами на языке C++


    #include

    #include
    using namespace std;
    void matr_in(float[][7], int n, int m, char nm);

    int matrne(float[][7], int n, int m, float QD);

    int main()

    {

    float A[6][7], B[5][7], Q, D;

    int s1, s2;

    Q = 10; D = 5;

    matr_in(A, 6, 5, 'A'); matr_in(B, 5, 7, 'B');

    s1 = matrne(A, 6, 5, Q); s2 = matrne(B, 5, 7, D);
    if (s1 == 0)

    cout << "There are no such elements that are > 10 " << endl;

    else

    cout << "There are such elements that are > 10 " << endl;

    if (s2 == 0)

    cout << "There are no such elements that are > 5 " << endl;

    else

    cout << "There are such elements that are > 5 " << endl;
    _getch();

    }
    void matr_in(float mx[][7], int n, int m, char nm)

    {

    int i, j;

    cout << "Input matrix " << nm << " size of " << n << " x " << m << endl;

    for (i = 0; i < n; i++)

    {

    for (j = 0; j < m; j++)

    cin >> mx[i][j];

    cout << " \n";

    }

    }

    int matrne(float mx[][7], int n, int m, float QD)

    {

    int i, j, s;

    s = 0;

    for (i = 0; i < n && !s; i++)

    {

    for (j = 0; j < m && !s; j++)

    {

    if (mx[i][j] > QD)

    s = 1;

    }

    }

    return s;

    }

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


    1. Решение задачи с использованием класса и класса наследника на языке С++


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

    4.1 UML-диаграмма





    4.2 Код консольного приложения с подпрограммами на языке C++




    #include

    #include
    using namespace std;
    class Matritsa

    {

    protected:

    int n, m, s; // Размер матрицы

    char nm; // Имя матрицы

    float QD; // Заданные числа

    float** matr; //Двумерный массив-матрица

    public:

    Matritsa(int n1, int m1, char nm1, float QD1); // конструктор

    void Matr_in(); // Ввод матрицы

    void Matrne(); // Основной вычислительный алгоритм задачи
    };
    Matritsa::Matritsa(int n1, int m1, char nm1, float QD1) // Конструктор

    {

    n = n1; m = m1; nm = nm1; QD = QD1;

    }
    class Yes : public Matritsa // Класс-наследник

    {

    protected:

    int kolvo;

    public:

    Yes(int n1, int m1, char nm1, float QD1);

    int Plus();

    };
    Yes::Yes(int n1, int m1, char nm1, float QD1) :Matritsa(n1, m1, nm1, QD1) // Конструктор

    {
    };
    void Matritsa::Matr_in() // Заполнение матрицы

    {

    int i, j;
    cout << "Input matrix " << nm << " size of " << n << " x " << m << endl;

    matr = new float* [n];

    for (i = 0; i < n; i++)

    {

    matr[i] = new float[m];

    for (j = 0; j < m; j++)

    cin >> matr[i][j];

    cout << " \n";

    }

    }
    void Matritsa::Matrne() // Выполнение условия (нахождение чисел больше заданного)

    {

    int i, j, s;
    s = 0;

    for (i = 0; i < n && !s; i++)

    {

    for (j = 0; j < m && !s; j++)

    {

    if (matr[i][j] > QD)

    s = 1;

    }
    }

    if (s == 0)

    cout << "There are no such elements that are > " << QD << endl;

    else

    cout << "There are such elements that are > " << QD << endl;

    }
    int Yes::Plus() // Класс-наследник, суммирующий количество чисел больше заданного

    {

    kolvo = 0;

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

    {

    for (int j = 0; j < m; j++)

    {

    if (matr[i][j] > QD)

    kolvo = kolvo + 1;

    }

    }

    return kolvo;

    }


    int main()

    {

    Matritsa A(6, 5, 'A', 10); Yes A1(6, 5, 'a', 10);

    A.Matr_in();

    A.Matrne();

    A1.Matr_in();

    A1.Matrne();

    cout << "The amount of numbers that are > 10 is " << A1.Plus() << endl;

    Matritsa B(5, 7, 'B', 5); Yes B1(5, 7, 'b', 5);

    B.Matr_in();

    B.Matrne();

    B1.Matr_in();

    B1.Matrne();

    cout << "The amount of numbers that are > 5 is " << B1.Plus() << endl;

    _getch();

    }


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









    1. Заключение


    В ходе написания курсовой работы нами были подробно рассмотрены особенности реализации процедурного и объектно-ориентированного подхода к реализации алгоритма обработки матриц на примере конкретной задачи в алгоритмическом языке C++, а также были разработаны программы на основе поставленной задачи:

    • Консольное приложение с использованием функций;

    • Консольное приложение с использованием базового класса и класса – наследник.

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


    1. Источники разработки


    Приложения и среды разработки:

    -Visual Studio 2019;

    Web-ресурсы:

    -https://www.draw.io – блок-схемы



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