Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
24
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать
  1. Программа, которая находит значение квадратного корня из за­данного числа, используя рекуррентное соотношение:

Обозначим как y1 и y2, а заданную точность как eps.

Взяв в качестве начального значения x/2, будем повторять следующие действия: y1 делаем равным y2, а у2 вычисляем по заданной формуле. При этом пара y1и y2 будет перемещаться по числовой оси, приближаясь к значению . Процесс вычислений можно закончить, когда будет выполняться соотношение: |y1-y2| < , при этом будет выполнено требуемое отношение: | | <= .

#include<iostream>

#include <math.h>

#include <conio.h>

#include <windows.h>

using namespace std;

int main()

{

//Настройки шрифтов и региональных стандартов

if(SetConsoleCP(1251)==0

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

double x, eps;

//выполняем ввод данных с проверкой их на допустимость

do

{

cout<< "Задайте x >= 0 ";

cin>> x;

} while (x < 0);

do

{

cout<< "Введите точность > 0 и <1 ";

cin>> eps;

} while (eps <= 0 || eps >= 1);

//выполняем вычисления, используя рекуррентное соотношение:

double y1, y2=x/2;

do

{

y1 = y2;

y2 = y1 + (x/y1 - y1) / 2;

} while (fabs(y2-y1)>=eps);

cout<< "Вычисленное значение корня "<< y2 << endl;

cout<< "контрольное значение " << sqrt(x) << endl;

_getch();

return 0;

}

  1. Программа, которая вычисляет сумму ряда с заданной точностью.

Выражение n! называется факториалом числа n и равно .

Обозначим сумму ряда как s, а очередной элемент ряда (слагаемое) как sl. Начальные значения s и sl нужно взять равными первому члену ряда, а дальше для их вычисления использовать рекуррентные соотношения.

Для вычисления очередного слагаемого используем соотношение:

, где z = 1, 2, 3… Проверьте, что при использовании этого соотношения действительно получаются нужные члены ряда и в знаменателе автоматически образуется факториал. Обратите внимание, что отдельно факториал вычислять не нужно.

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

using namespace std;

int main()

{

setlocale(LC_ALL,"rus_rus.1251");

//!!! Настройки шрифтов и региональных стандартов взять от ОС

double e, sl=1, s=1, z=1,x;

cout<<"Введите x ";

cin>>x;

do

{

cout << "Введите точность > 0 ";

cin >> e;

} while (e <= 0);

// выполняем вычисления:

/* повторяем пока не выполнится условие: | s l | <= , при этом сумма ряда будет отличаться от не более чем на */

do

{

sl = sl*x*x / z; // вычисляем очередное слагаемое

s += sl; // добавляем его к сумме

z += 1; // увеличивае z на 1

} while ( fabs(sl) >= e);

// повторяем, пока не выполнится условие: | s l | <= , при этом сумма ряда будет

// отличаться от не более чем на .

do

{

sl = sl*x*x / z; // вычисляем очередное слагаемое

s += sl; // добавляем его к сумме

z += 1; // увеличивае z на 1

} while ( fabs(sl) >= e);

k

0.001

0

0.01

1

0.1

2

1

3

// Определим точность вывода результа ( k - количество цифр после точки),
// например если точность вычислений = 0.001, то результат должен выводиться с
// тремя знаками после точки. Для вычисления k используем следующий алгоритм: пока // меньше 1, повторяем следующие действия: увеличиваем в 10 раз, k увеличиваем // на 1, например:

int k=0;

while ( e < 1 )

{

e*=10; ++k;

}

// устанавливает точность вывода манипулятор setprecision(),

// при использовании манипуляторов не забывайте подключать к программе // заголовочный файл <iomanip>

cout<< "Сумма = " << setprecision(k+1) << s << endl;

cout<< "Контрольное значение : " << exp(x*x)<<endl; _getch();

return 0;

}