Цель курсовой работы – получение навыков по алгоритмизации и программированию.
Задачи, решаемые в данной курсовой работе:
- Изучение структуры подпрограммы, механизмов передачи параметров в подпрограмму, возврата результатов из подпрограммы, и вызова подпрограммы на выполнение;
- Разработка алгоритмов решения четырех задач с использованием вспомогательных алгоритмов и их оформление в виде блок-схемы;
- Подготовка тестов для отладки программ;
- Написание и отладка комментированных программ на языке С++ и C#;
- Изучение теоретических вопросов использования системы программирования C и C++.
В ходе выполнения курсовой необходимо разработать алгоритмы решения следующих четырех задач:
1. Используя первую интерполяционную формулу Ньютона для заданного значения аргумента вычислить приближенное значение функции, заданной таблично;
2. Используя обобщенную формулу Cимпсона, вычислить определенный интеграл с заданной точностью;
3. С помощью метода Коши-Эйлера решить задачу Коши для дифференциального уравнения;
4. Используя метод прогонки, найти решение краевой задачи для обыкновенного дифференциального уравнения второго порядка.
Для решения данных задач существуют математические алгоритмы, в которых применяется большое количество повторяющихся вычислений и объёмных формул. Решение их вручную занимает достаточно много времени и при этом существует большая вероятность появления ошибок во время вычислений. Любые изменения в исходных данных ведут к повторному объёмному пересчету всей задачи.
Использование современной системы программирования С++ при решении сложных математических задач позволяет существенно сократить время на их решение, исключает появление ошибок возможных при вычислении вручную, увеличивает точность вычислений. Единожды написанную и протестированную программу можно использовать любое количество раз для различных исходных данных.
Язык программирования С++ представляет высокоуровневый компилируемый язык программирования общего назначения со статической типизацией, который подходит для создания самых различных приложений. На сегодняшний день С++ является одним из самых популярных и распространенных языков.
С++ является мощным языком, унаследовав от Си богатые возможности по работе с памятью. Поэтому нередко С++ находит свое применение в системном программировании, в частности, при создании операционных систем, драйверов, различных утилит, антивирусов и т.д. Его часто используют для создания игр с богатой насыщенной визуализацией. С++ нашел своё применение и в разработке приложений для мобильных устройств. Нередко он применяется для создания графических приложений, различных прикладных программ. В целом С++ – язык широкого использования и может применятся в программах любого уровня, где важны скорость работы и производительность.
Во время решения задач, нередко возникают ситуации, когда одни и те же действия необходимо выполнять несколько раз в различных местах программы. Чтобы упростить процесс решения, структурировать задачу, а также существенно уменьшить количество программного кода применяются вспомогательные алгоритмы (подпрограммы, функции). Алгоритм, ранее разработанный и целиком используемый в составе других алгоритмов, называется вспомогательным.
Вся программа условно может быть разделена на две части: основную и вспомогательную. В основной части производится простейшая обработка информации, организуется обращение к разным вспомогательным модулям (подпрограммам).
Функции – это блоки кода, выполняющие определенные операции. Если требуется, функция может определять входные параметры, позволяющие вызывающим объектам передавать ей аргументы. При необходимости функция также может возвращать значение как выходное. Функции могут запускаться (вызываться) в коде программы любое нужное число раз. Значения, которые передаются функции, называются аргументами. Их типы должны быть совместимы с типами параметров в определении функции.
Длина функции практически не ограничена, однако для максимальной эффективности кода целесообразно использовать функции, каждая из которых выполняет одиночную, четко определенную задачу. Сложные алгоритмы лучше разбивать на более короткие и простые для понимания функции, если это возможно.
2.1 Математическая постановка задачи
В первой задаче необходимо используя первую интерполяционную формулу Ньютона для заданного значения аргумента х*=0,1006 вычислить приближенное значение функции, заданной таблично. Исходные данные приведены в таблице 2.1.
Во второй задаче необходимо, используя обобщенную формулу Cимпсона, вычислить определенный интеграл с заданной точностью.
Для решения задачи был разработан алгоритм simpson и вспомогательный алгоритм calc_simpson. Во вспомогательном алгоритме происходят непосредственно вычисления, а в основном задается количество узлов и проверяется соответствует ли текущая погрешность вычислений необходимой точности. Если да, то вычисления заканчиваются и результат выводится на экран, в противном случае количество узлов увеличивается в двое и вычисления проводятся снова. Блок-схемы алгоритмов представлены в приложении А: алгоритма simpson на рисунке 3, calc_simpson на рисунке 4.
Кроме того были разработаны подпрограммы fun_1 и fun_2 для вычисления значений подынтегральных функций в разных точках. В качестве параметра они принимают x, а в результате возвращают значение функции.
В третьей задаче необходимо с помощью метода Коши-Эйлера решить задачу Коши для дифференциального уравнения
Для решения задачи был разработан алгоритм koshi_eiler, в котором производятся все вычисления и вывод результатов на экран. Кроме того использовалась подпрограмма fun_3 принимающая в качестве аргументов значения x и у и возвращающая значение функции.
Блок схема алгоритма koshi_eiler представлена на рисунке 5 в приложении А.
В четвертой задаче необходимо, используя метод прогонки, найти решение краевой задачи для обыкновенного дифференциального уравнения второго порядка:
Для решения задачи были разработаны следующие алгоритмы: find_koef – для формирования массивов коэффициентов a, b, c, f, find_alpha_betta – для формирования массивов
и
, find_u – для формирования массива
, который и будет являться решением задачи. Кроме того алгоритмы e_x, z_x, q_x – для вычисления значений соответствующих функций при разных х. Блок-схема основного алгоритма представлена на рисунке 9 в приложении А, вспомогательных – на рисунках 6-8 в приложении А.
В результате выполнения курсового проекта были получены навыки по алгоритмизации и программированию.
В процессе работы были изучены различные теоретические вопросы связанные с использованием системы программирования С++. В частности были подробно изучены особенности структуры подпрограммы, механизмы передачи параметров в подпрограмму, возврата результатов из подпрограммы, вызова подпрограммы на выполнение.
В результате выполнения курсового проекта были разработаны алгоритмы для решения четырех задач. При их разработке были применены на практике знания, касающиеся структуры подпрограммы, её объявления, определения и вызова. Использовались механизмы передачи параметров в функцию по значению и по ссылке. Некоторые функции разработаны без параметров и не возвращают значения.
Для работы с задачами в основном алгоритме разработан удобный интерфейс пользователя, который позволяет выбрать нужную задачу, ввести исходные данные для решения. Вся введённая информация проверяется на корректность. При наличии ошибок ввода пользователю выводится соответствующее сообщение.
Алгоритмы для каждой задачи оформлены в виде блок-схем. Для каждой задачи были подготовлены тесты, написан и отлажен программный код. В процессе отладки программа успешно прошла все разработанные тесты. В программном коде присутствует достаточное количество комментариев, описывающих работу программы.
Использование функций в процессе решения задач позволило сделать программный код структурированным и понятным, избежать большого числа повторяющихся строк кода. При необходимости можно легко внести изменения в нужный участок программы, не затрагивая при этом основной алгоритм.
Использование системы программирования С++ при решении данных задач существенно ускоряет процесс решения, избавляет от случайных ошибок при вычислении вручную. Также разработанные функции можно использовать в дальнейшем для решения более сложных задач.
СКРИНШОТЫ РАБОТЫ


