Скачиваний:
7
Добавлен:
25.12.2018
Размер:
225.28 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

      1. Федеральное государственное автономное образовательное учреждение высшего образования

«Санкт-Петербургский государственный университет аэрокосмического приборостроения»

КАФЕДРА № 2

Преподаватель

доцент, к.т.н. Куртяник Д.В.

Отчёт

по лабораторной работе №5

по дисциплине Информатика

на тему: « Суммирование рядов»

Работу выполнил

студент гр. 4616 Павлов А.В.

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

Цель лабораторной работы: изучение концепций и освоение технологии процедурного программирования, приобретение навыков программирования на языке C/С++ циклических вычислений при решении задач суммирования рядов.

Задание на программирование: используя технологию процедурного программирования разработать программу вычисления суммы ряда с заданной точностью в заданном интервале допустимых значений аргумента.

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

Порядок выполнения работы:

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

2) Разработать математическую модель:

- вывести рекуррентную формулу для расчета очередного слагаемого;

- описать начальные установки номера слагаемого, слагаемого, суммы;

- описать процесс накопления суммы.

3) Построить схему алгоритма. Обосновать выбор циклических управляющих структур.

4) Составить программу на языке C/С++.

5) Входные данные вводить с клавиатуры по запросу.

6) Выходные данные выводить на экран в форме таблицы с графами:

аргумент, сумма, количество слагаемых, контрольное значение суммы.

7) Использовать форматированный ввод/вывод в стиле языка C.

8) Проверить и продемонстрировать преподавателю работу программы, при этом значение суммы должно совпадать с соответствующим контрольным значением (с заданной точностью). Выходная таблица должна содержать от 5 до 10 строк.

9) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, текст программы, контрольные примеры.

1-3)

Вариант 10

ex(1+x) = , |x| < 2.4.

Ввод x и проверка на условие x<2.4 дальше ввод точности EPS =>

(y1-y0)>eps => //вычисление y0=y1; y1=y0+step(x,n)*(n+1)/fraktal(n); n++; => Используется прием при котором точность слагаемых понижается после определенного числа, используется чтобы уменьшить время расчета значений.

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

/*Вычислить e^x*(1+x)=1+2*x/1!+3*x^2/2!+4*x^3/3!+... , |x|<2.4

Результаты представить в виде таблицы:

аргумент, сумма, количество слагаемых, контрольное значение*/

#include <stdio.h>

#include <locale.h>

#include <math.h>

using namespace std;

int INTMAX=13; //количество слагаемых после которых точность будет ниже

long fraktal(int n);

float riad(float,float,float,int&);

int main(){

setlocale(LC_ALL,"Russian") ;

int var; //вид действия

float x,xk,eps,h,xn,e,rez; //изначальные данные

int i,n;

while(true){

//Выбор вида действия

printf("\nВид действия:\n1 - вывести таблицу значений\n2 - завершения задачи\nвведите вид действия -> ");

scanf("%d",&var);

switch(var){

case 1:

//Ввод исходных данных

printf(" Введите начальное значение степени: ");

scanf("%f", &xn);

printf(" Введите конечное значение степени: ");

scanf("%f", &xk);

if (xk <= xn)

{

printf("\n Ошибка! Значение xk д.б. > xn");

return 1;

}

printf(" Введите шаг изменения степени: ");

scanf("%f", &h);

if (h <= 0)

{

printf("\n Ошибка! Значение д.б. >0");

return 1;

}

printf(" Введите точность вычисления: ");

scanf("%f", &eps);

if (eps <= 0)

{

printf("\n Ошибка! Значение д.б. >0");

return 1 ;

}

//Вывод заголовка

for(i = 0 ; i < 50 ; i++) printf("-") ;

printf("\n|Степень | Сумма |Кол.слаг.|Контрольное значение|\n") ;

for(i = 0 ; i < 50 ; i++) printf("-") ;

x = xn;

do{

n = 0 ;

e=exp(x)*(x+1);

rez = riad(x, e, eps, n);

printf("\n|%6.2f |%8.4f|%6d |%14.4f |\n", x, rez, n, e);

for(i = 0 ; i < 50 ; i++) printf("-");

x += h ;

}while(x <= xk) ;

break;

case 2:return 0;

}//switch

}//while

}

float riad(float x,float e,float eps,int &n)

{

float rez = 0 ;

n = 0 ;

while (fabs(e-rez) > eps)

{

n++;

if(n>=INTMAX){

printf("\nТочность измерения не достигнута");

n--;

return rez;}

rez += n*pow(x,(n-1))/fraktal(n-1);

}

return rez ;

}

long fraktal(int n)

{

long rez=1;

if(n==0||n==1)return rez;

for(int i=2;i<=n;i++)rez*=i;

return rez;

}

Примеры.

Соседние файлы в предмете Основы программирования и алгоритмизации