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

Минобрнауки РФ

Санкт-Петербургский государственный электротехнический университет

им. В.И. Ульянова (Ленина) «ЛЭТИ»

(СПбГЭТУ)

Факультет компьютерных технологий и информатики

Кафедра САПР

ОТЧЁТ

По лабораторной работе №3

«Использование итерационных алгоритмов»

Преподаватель: ______________________ Калмычков В. А.

Студент гр. 8309: ______________________ Янтиков Д. А.

Санкт-Петербург

2018

Оглавление

Формулировка задания 3

Цель работы 3

Анализ задания и контрольный пример 3

Математическая постановка задачи 3

Блок – схема 4

Текст программы 5

Примеры работы программы 6

Вывод 8

Формулировка задания

Написать программу, определяющую минимально значение n > 0, для которого очередное слагаемое по модулю не превышает Eps > 0 при нахождении результата согласно формуле:

Цель работы

Изучение библиотеки “fstream”, использование её для записи информации в файл, а также обучение работы с оператором цикла while.

Анализ задания и контрольный пример

  • Eps = e^0.0000000000000001

  • a1 = 5.00000e+00

  • a2 = 6.25000e+00

  • a3 = 4.16667e+00

  • a22 = 2.31865e-17

  • S22 = a1 + a2 + a3 + … + a22 =

= 18.105428403911520973679216695018112659454345703125000

  • n = 22

Математическая постановка задачи

Дано: Уравнение суммы и Eps > 0 (бесконечно малое число).

Найти: Значение n > 0, для которого очередное слагаемое по модулю не превышает Eps.

Способ решения: Производить вычисления до того момента, пока не станет меньше Eps, т.к. функция уравнения является уменьшающейся и стремящейся к 0, но никогда не достигающей её. Результаты записывать в файл output.txt.

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

Определение внутреннего формата представления данных:

Переменные S, Eps, ix, а также временные переменные для совершения действий (a, a1, a2, a3, b) – переменные типа long double. Переменной i присвоен тип int.

Описание алгоритма: Вывод в консоль приветствия и формулировки задания. Ввод пользователем с клавиатуры значения Eps. Проверка на корректность введенного значения Eps (5 попыток). Открытие файла вывода. Выполнения действий согласно формуле из условия и запись необходимых результатов в файл.

Блок – схема

Текст программы

#include "pch.h"

#include "iostream"

#include "iomanip"

#include "fstream"

using namespace std;

int main()

{

ofstream out;

setlocale(LC_ALL, "Russian");

long double s, eps, a, a1, a2, a3, b, ix;

int i;

cout << "Iantikov Daniil, 8309." << endl << "Version 3.1.1 " << endl << "(25.09.2018 - 01.10.2018)" << endl << endl;

cout << "Определить минимальное значение n > 0, для которогоочередное слагаемое по модулю не превышает eps > 0 при нахождении результата согласно формуле:" << endl << endl;

cout << " n \n";

cout << " ------- i\n";

cout << " \\ 5 *(i+1)!\n";

cout << " \\ ________________\n";

cout << " / \n";

cout << " / (2 * i)!\n";

cout << " -------\n";

cout << " i=1\n \n";

i = 0;

do

{

cout << "Пожалуйста, введите eps(>0): ";

cin >> eps;

if (eps > 0 && eps < 0.0001) break;

{

cout << "Ошибка ввода eps, пожалуйста введите подходящее значение.\n";

i =+ 1;

}

}

while (i < 5);

if (i >= 5)

cout << "Превышен лимит попыток.";

else

{

out.open("C:\\Users\\danii\\source\\repos\\Proga 3\\output.txt");

i = 1;

a = 5.000000000000000000000000000000000000000000000000000000000000000;// значение первой итерации

s = a;

a1 = 5.0;

a2 = 2.0;

a3 = 2.0;

b = 6.0;

out << " i ai si \n";

out << "-----------------------------------------------------------------------------------------\n";

out << "| " << left << scientific << setw(4) << i << " | " << setw(13) << setprecision(5) << a << " | " << setw(61) << setprecision(60) << fixed << s << endl;

while (abs(a) >= eps && i < 1000)

{

i += 1;

ix = i * 2;//4 6 8

b = b * ix;//24 720 40320

a1 = a1 * 5;

a2 = a2 * (i + 1);

a = (a1 * a2) / b;

b = b * (ix + 1);//120 5040 362880

s += a;

out << "| " << left << scientific << setw(4) << i << " | " << setw(13) << setprecision(5) << a << " | " << setw(61) << setprecision(60) << fixed << s << endl;

}

out << "-----------------------------------------------------------------------------------------\n";

}

out << "n = " << i;

out.close();

}

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

  • Программа выдает ошибку из-за некорректности введенного значения Eps и исчерпания пользователем попыток его ввода:

Консоль:

  • Успешное выполнение программы при Eps = 0.00000000001:

Консоль:

Файл output.txt:

Вывод

В ходе выполнения задания была освоена библиотека “fstream”, изучены основные действия с циклическими операторами while и do while на языке С++, а также получены практические навыки использования языка для решения задач.

Соседние файлы в папке 1 семестр Калмычков