Курсовая работа ООП. 3. Решение задачи с использованием функций 3
Скачать 317.62 Kb.
|
Цель курсовой работы 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 Введение Процедурное программирование означает создания набора процедур, который представляет собой набор подпрограмм. Функции содержат набор команд, выполняющих определенную задачу. Функции в программе вызываются повторно для выполнения определенных задач. Проблема при применении ПОП заключается в обработке данных. Под данными мы понимаем информацию, полученную от пользователя, новые результаты, полученные после вычислений, и т.д. Если в программе насчитывается 10 функций, то все эти 10 функций могут получить доступ к глобальной переменной (объявленной как global). Если одна из функций случайно изменит значение такой переменной, то будет слишком трудно отлаживать программу и выявлять функцию, вызывающую проблемы, особенно если программа очень большая. Базовая концепция ООП основана на понятии, называемым классом. Он позволяет упаковать вместе различные типы данных наряду с различными функциями, манипулирующими элементами данных этого класса. Элементы данных внутри класса могут быть объявлены как локальные (private) или глобальные (public). ООП тесно связывает данные с определенным классом и его объектами. Здесь нет необходимости в глобальных типах данных, как в ПОП, и, следовательно, данные не могут свободно «течь» по всей программе. Это гарантирует то, что не произойдет какой-либо случайной модификации важных данных. Еще одной особенностью, привнесенной в ООП, является возможность повторного использования кода. Это стало возможным благодаря особенности классов под названием наследование. Благодаря наследованию один класс может приобрести свойства другого класса. Цель курсовой работыЦелью работы является изучение особенностей реализации процедурного и объектно-ориентированного подходов в языке С++, на примере разработки консольных приложений для решения заданной задачи с матрицами. Задачи курсовой работыИсходя из поставленной цели, можно определить следующие задачи курсовой работы: Проанализировать условие задачи, составить таблицы данных; Разработать основной вычислительный алгоритм; Разработать и отладить консольное приложение с использованием функций (процедурный подход); Разработать и отладить консольное приложение с использованием одного, и двух классов (объектно-ориентированный подход); Условие задачиПроверить, есть ли в матрице A (6×5) элементы, большие 10, а в матрице B (5×7) — элементы, большие 5. Решение задачи с использованием функцийАлгоритм вычисления элементов, которые больше заданных чисел (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 – заданные числа. Состав данных функции main Состав данных функции main представлен в таблице:
Форма ввода для функции matr_inФорма вывода для функции main Блок-схема функции mainСостав данных функции обработкиОбработка осуществляется в функции matrne(float mx[][7], int n, int m, float QD) Состав данных функции matrne представлен в таблице.
Блок схема алгоритма функции 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; } Тестирование Решение задачи с использованием класса и класса наследника на языке С++Создадим базовый класс матрицы (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 ТестированиеЗаключениеВ ходе написания курсовой работы нами были подробно рассмотрены особенности реализации процедурного и объектно-ориентированного подхода к реализации алгоритма обработки матриц на примере конкретной задачи в алгоритмическом языке C++, а также были разработаны программы на основе поставленной задачи: Консольное приложение с использованием функций; Консольное приложение с использованием базового класса и класса – наследник. Результаты проведенной работы показали, что ООП подходит для решения сложных задач, имеющих большое количество данных, функций и параметров в функциях, поскольку помимо всех достоинств процедурного программирования обладает принципами инкапсуляции, наследования и полиморфизма. Принцип инкапсуляции позволяет защищать важные данные от всякого рода случайностей. Принципы наследования и полиморфизма дают возможность значительного уменьшения кода и намного упрощают его отладку. Сама система классов очень удобна, так как не нужно задавать параметры для методов, если они описаны как поля класса. Источники разработкиПриложения и среды разработки: -Visual Studio 2019; Web-ресурсы: -https://www.draw.io – блок-схемы |