Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая работа / Устаревшая КР (СТАРАЯ ОФОРМЛЕНИЕ Вычисление определенного интеграла)

.pdf
Скачиваний:
1
Добавлен:
10.12.2024
Размер:
667.36 Кб
Скачать

3.3.1.7Алгоритм сохранения результатов в файл

Сохраняет текущие результаты вычислений в файл results.txt, записывает в файл название метода, точность, значение интеграла и количество итераций для каждого результата.

Алгоритм представлен на рисунке 3.7

Рисунок 3.7 - Алгоритм сохранения результатов в файл

3.3.2 Структура программы с описанием функций

составных частей и связей между ними

Все функции взаимосвязаны через основную функцию main(), которая

координирует их работу на основе выбора пользователя.

int main() – взаимодействует с пользователем (ввод данных, выбор действий), вызывает функции для интегрирования, работы с результатами и отображения.

midPointMethod(), simpsonMethod(), newtonCotesMethod() -

выполняют вычисления интегралов с заданной точностью,

Возвращают значения интегралов и количество итераций.

f(double x) - определяет целевую функцию, которая интегрируется.

saveResults(), loadResults(), printResults() - сохраняет, загружает и отображает результаты.

3.4 Технические средства, которые используются при

работе программы

Для запуска программы пользователю необходимо открыть предоставляемый пользователю файл «.exe». Как было отмечено ранее, для корректной работы продукта необходимо наличие графического адаптера и операционной системы Windows.

3.5 Вызов программы

Исходный текстовый файл (Рисунок 3.10):

Рисунок 3.10 – Исходный текстовый файл

При запуске программного продукта появляется главное окно приложения, у пользователя просят последовательно ввести пределы интегрирования, точность (Рисунки 3.8, 3.9, 3.10).

Рисунок 3.8 – Запрос ввода a

Рисунок 3.8 – Запрос ввода b

Рисунок 3.8 – Запрос ввода точности eps

Далее выводится текстовое меню, со всеми указанными в техническом задании операциями (Рисунок 3.9).

Рисунок 3.9 – Вывод меню

В первом случае программа вычисляет определённый интеграл методом средних и выводит результат (Рисунок 3.10).

Рисунок 3.10 – Вывод расчета методом средних

Во втором случае программа вычисляет определённый интеграл методом Симпсона и выводит результат (Рисунок 3.11).

Рисунок 3.11 – Вывод расчета методом Симпсона

В третьем случае программа вычисляет определённый интеграл методом Ньютона-Котеса и выводит результат (Рисунок 3.12).

Рисунок 3.12 – Вывод расчета методом Ньютона-Котеса

В четвертом случае выводятся результаты вычислений текущего сеанса

(Рисунок 3.13).

Рисунок 3.13 – Вывод результатов текущего сеанса

В пятом случае выводятся результаты вычислений из файла (Рисунок

3.14).

Рисунок 3.14 – Вывод результатов из файла

В шестом случае программа останавливает работу и сохраняет результаты текущего сеанса в файл. Файл после остановки работы программы представлен на рисунке 3.15.

Рисунок 3.14 – Файл после выхода из программы

3.6 Входные данные (организация и предварительная

подготовка входных данных)

В качестве входных данных программа принимает параметры, которые вводит пользователь. Также программа может принять данные из текстового файла.

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

Выходные данные — это результаты, записанные в файл.

ЗАКЛЮЧЕНИЕ

На протяжении всего процесса проектирования и создания программного продукта были получены практические навыки в области численных методов и алгоритмов вычисления определенных интегралов.

Особое внимание было уделено методам средних, Симпсона и Ньютона-

Котеса, которые нашли свое применение в разработанной программе.

В ходе выполнения курсовой работы были освоены алгоритмы работы с файлами в C++, что позволило успешно реализовать сохранение и просмотр результатов сеансов, а также взаимодействие пользователя с программой. Это способствовало не только углублению знаний в области работы с текстовыми файлами, но и расширению навыков разработки пользовательских интерфейсов в консольных приложениях.

Все поставленные задачи были успешно выполнены: создана программа,

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Лозовский В.В. Алгоритмические основы обработки данных: учебное пособие / Лозовский В.В., Платонова О.В., Штрекер Е.Н. — М.: МИРЭА – Российский технологический университет, 2022. – 337 с.

2. Платонова О.В. Алгоритмические основы обработки данных:

методические указания / Платонова О.В., Асадова Ю.С., Расулов М.М. — М.:

МИРЭА – Российский технологический университет, 2022. — 73 с.

3. Белик А.Г. Алгоритмы и структуры данных: учебное пособие / А.Г.

Белик, В.Н. Цыганенко. — Омск: ОмГТУ, 2022. — 104 с. — ISBN 978-5-8149- 3498-7. — Текст: электронный // Лань: электронно-библиотечная система. — URL: https://e.lanbook.com/book/343688 (дата обращения: 20.10.2023)

4. Павлов Л.А. Структуры и алгоритмы обработки данных / Л.А. Павлов,

Н.В. Первова. — 2-е изд., стер. — Санкт-Петербург: Лань, 2022. — 256 с. —

ISBN 978-5-507-44105-1. — Текст: электронный // Лань: электронно-

библиотечная система. — URL: https://e.lanbook.com/book/207563 (дата обращения: 20.10.2023)

5. Пантелеев Е.Р. Алгоритмы и структуры данных: учебное пособие /

Е.Р. Пантелеев, А.Л. Алыкова. — Иваново: ИГЭУ, 2018. — 142 с. — Текст:

электронный // Лань: электронно-библиотечная система. — URL: https://e.lanbook.com/book/154576 (дата обращения: 20.10.2023)

ПРИЛОЖЕНИЕ А

Листинг A.1 — Основная программа

#include <iostream>

#include <fstream> #include <cmath> #include <iomanip> #include <string>

using namespace std;

//Функция для интегрирования double f(double x) {

return sin(x);

}

//Структура для хранения результатов struct Result {

string method; double accuracy;

double integral_value; int iterations;

};

// Метод средних

double midPointMethod(double a, double b, double eps, int& iterations) { double n = 1;

double integral = 0, prev_integral; do {

prev_integral = integral; double h = (b - a) / n; integral = 0;

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

integral += f(a + h * (i + 0.5));

}

integral *= h; n *= 2; iterations++;

} while (fabs(integral - prev_integral) > eps); return integral;

}

// Метод Симпсона

double simpsonMethod(double a, double b, double eps, int& iterations) { double n = 2;

double integral = 0, prev_integral; do {

prev_integral = integral; double h = (b - a) / n; integral = f(a) + f(b);

for (int i = 1; i < n; i += 2) { integral += 4 * f(a + i * h);

}

for (int i = 2; i < n - 1; i += 2) { integral += 2 * f(a + i * h);

}

integral *= h / 3.0; n *= 2; iterations++;

Продолжение листинга A.1

} while (fabs(integral - prev_integral) > eps); return integral;

}

// Метод Ньютона-Котеса для m = 5

double newtonCotesMethod(double a, double b, double eps, int& iterations) {

const double weights[] = { 19.0 / 288.0, 75.0 / 288.0, 50.0 / 288.0, 50.0 / 288.0, 75.0 / 288.0, 19.0 / 288.0 };

double n = 1;

double integral = 0, prev_integral; do {

prev_integral = integral; double h = (b - a) / (5 * n); integral = 0;

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

for (int j = 0; j <= 5; j++) {

integral += weights[j] * f(a + i * 5 * h + j * h);

}

}

integral *= 5 * h; n *= 2; iterations++;

} while (fabs(integral - prev_integral) > eps); return integral;

}

// Сохранение результатов в файл

void saveResults(const Result results[], int count) { ofstream file("results.txt", ios::app);

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

file << results[i].method << " | Accuracy: " << results[i].accuracy

<<" | Integral: " << results[i].integral_value

<<" | Iterations: " << results[i].iterations << endl;

}

file.close();

}

//Вывод результатов из файла void loadResults() {

ifstream file("results.txt"); string line;

while (getline(file, line)) { cout << line << endl;

}

file.close();

}

//Вывод результатов текущего сеанса

void printResults(const Result results[], int count) { for (int i = 0; i < count; ++i) {

cout << results[i].method << " | Accuracy: " << results[i].accuracy