Код программы (лабораторная работа №3)




Федеральное агенство по образованию

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ»

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

Кафедра МО ЭВМ

 

 

Дисциплина: «Программирование»

 

Отчет по лабораторной работе № 4

Выполнили: студенты группы 1381

Баканов Александр

Грейнер Андрей

 

Проверил: Самойленко В.П.

 

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


Задание

Изменить программы из лабораторных работ №№ 2, 3 таким образом, чтобы ввод данных, вычисления и вывод данных осуществлялись с использованием функций.

 

 

Содержательная постановка задачи

 

1. Лабораторная работа №2: для разделения программы на отдельные логические блоки определим следующие функции:

1. Ввод данных

2. Проверка входных данных

3. Подсчет суммы

4. Вывод результата

2. Лабораторная работа №3: аналогично предыдущему пункту выделим в программе следующие логические блоки:

1. Ввод данных

2. Вычисление точности

3. Вывод результата

 

 

Интерфейсы функций:

1. Лабораторная работа №2:

1. void getIncomingData(double &n, double &k)

2. bool checkIncomingData(double n, double k)

3. double countSum(double n, double k)

4. void showResult(double sum)

2. Лабораторная работа №3:

1. void getIncomingData(double &p, double &x)

2. double e_pow_10_p(double p)

3. void showResult(double x, double sum)


Код программы (лабораторная работа №2)

#include <iostream>

 

using namespace std;

 

/**

 

* Функция получения входных данных.

 

* @param n максимальное значение итератора

 

* @param k вводимый коэффициент

 

*/

 

void getIncomingData(double &n, double &k);

 

/**

 

* Функция проверки введенных данных.

 

* @param n максимальное значение итератора

 

* @param k вводимый коэффициент

 

* @return true, если данные корректны, false в противном случае

 

*/

 

bool checkIncomingData(double n, double k);

 

/**

 

* Функция вычисления суммы ряда.

 

* @param n максимальное значение итератора

 

* @param k вводимый коэффициент

 

* @return значение суммы ряда

 

*/

 

double countSum(double n, double k);

 

/**

 

* Функция вывода результата.

 

* @param sum сумма ряда

 

*/

 

void showResult(double sum);

 

int main()

 

{

 

// Объявление переменных.

 

double n, // максимальное значение шага цикла

 

k, // вводимый коэффициент

 

sum; // сумма

 

// Ввод значений

 

getIncomingData(n, k);

 

// Проверка на правильность введенных данных

 

if (!checkIncomingData(n, k))

 

{

 

cout << " The entered arguments are incorrect.\n\n";

 

return 1;

 

}

 

// Вычисление суммы ряда

 

sum = countSum(n, k);

 

// Вывод результата

 

showResult(sum);

 

return 0;

 

}

 

void getIncomingData(double &n, double &k)

 

{

 

cout << "\n----------------- Lab 02 ------------------\n\n";

 

cout << " Counting the sum of a(i);\n a(i) = (n - i) * k^i, k > 1\n i = 0...n\n\n";

 

cout << " Enter the number of iterations (n ≥ 0): "; cin >> n;

 

cout << " Enter the coefficient (k > 1): "; cin >> k; cout << endl;

 

cout << " Entered values: n = " << n << "; k = " << k << "\n";

 

}

 

bool checkIncomingData(double n, double k)

 

{

 

return!(n < 0 || k <= 1);

 

}

 

double countSum(double n, double k)

 

{

 

double i, // шаг цикла

 

sum, // сумма

 

a, // коэффициент рекурентного соотношения

 

f; // член ряда

 

// Значение первого члена ряда, а значит и суммы, равно n. В силу того, что i = 0.

 

f = sum = n;

 

// Переходим к следующему члену ряда

 

i = 1;

 

// примечание: случай i = n можно не рассматривать,

// т.к. при любом n, n-й член ряда будет равен нулю.

while (i < n)

 

{

 

// Вычисление коэффициента рекурентного соотношения происходит на каждом шаге

 

// цикла, т.к. он зависит от i.

 

a = (n - i) * k / (n - i + 1);

 

// Вычисление очередного члена ряда

 

f = f * a;

 

// Прибавление его к сумме

 

sum += f;

 

// Увеличение шага цикла

 

i++;

 

}

 

return sum;

 

}

 

void showResult(double sum)

 

{

 

cout << endl << " The sum is " << sum << endl;

 

cout << "\n--- Thank you for choise our production ---\n\n";

 

}

 

 


Код программы (лабораторная работа №3)

#include <iostream>

 

#include <cmath>

 

using namespace std;

 

/**

 

* Функция вычисляет значение e в степени -p и возвращает его

 

* @param p степень, в отрицательное значение которой будет возведено e

 

* @return число e в степени -p.

 

*/

 

double e_pow_10_p(double p);

 

/**

 

* Функция получения входных данных.

 

* @param p степень, для получения точности вычисления

 

* @param x аргумент ряда и проверочной функции

 

*/

 

void getIncomingData(double &p, double &x);

 

/**

 

* Функция вывода результата.

 

* @param x аргумент проверочной функции

 

* @param sum сумма ряда

 

*/

 

void showResult(double x, double sum);

 

int main()

 

{

 

// Используемые переменные

 

double sum, // сумма

 

u, // слагаемое

 

x, // аргумент

 

p, // показатель степени эпсилон

 

eps; // точность

 

int i = 0; // итератор

 

// Получаем входные данные

 

getIncomingData(p, x);

 

// Вычисляем эпсилон

 

eps = e_pow_10_p(p);

 

// Первый член ряда u(0) = 1. Сумма изначально равна нулю

 

u = 1;

 

sum = 0;

 

// До тех пор пока |u| > eps считаем сумму ряда

 

while (fabs(u) > eps)

 

{

 

// Проверенный в условии член ряда попадает в сумму

 

sum += u;

 

// Вычисляем следующий член ряда

 

// если его модуль окажется меньше либо равен эпсилон, цикл будет завершен

 

// и данный член уже не попадет в сумму, что и требуется.

 

u *= -(double(x*x) / double(i+1));

 

// Увеличиваем шаг цикла

 

i++;

 

// Вывод промежуточных данных

 

cout << "(i = " << i << ")" << " u(" << i << ") = " << u << "; sum = " << sum << endl;

 

}

 

// Выводим результат

 

showResult(x, sum);

 

return 0;

 

}

 

double e_pow_10_p(double p)

 

{

 

double eps = exp(-p * log(10.0));

 

cout << "Epsilon = " << eps << endl;

 

return eps;

 

}

 

void getIncomingData(double &p, double &x)

 

{

 

cout << "Enter epsilon = 10^-p (p > 0); p = "; cin >> p;

 

cout << "Enter argument x; x = "; cin >> x;

 

}

 

void showResult(double x, double sum)

 

{

 

// Выводим сумму

 

cout << "Sum = " << sum << endl;

 

// Для проверки вычислим функцию, равносильную сумме ряда:

 

cout << "exp(-(x^2)) = " << exp(-(x * x)) << endl;

 

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: