Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kasatkin_S__Ratkevich_I__Travova_N_-_Laborato.doc
Скачиваний:
93
Добавлен:
15.02.2016
Размер:
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);

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

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

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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]