Программа, которая находит числа Фибоначчи в заданном диапазоне.

 

Числа Фибоначчи вычисляются по следующему правилу:

F1 = 1, F2 = 1, Fi = Fi-1 + Fi-2.

Обозначим Fi, Fi-1 и Fi-2 как F1, F2 и F3.

Начнем с того, что присвоим начальные значения, равные 1, F2 и F3, а дальше будем повторять следующие действия: F1 = F2; F2 = F3; F3 = F1 + F2. При этом тройка чисел будет смещаться по числовой оси вправо пока не выйдет за правую границу за­дан­ного отрезка.

Вычисление чисел Фибоначчи начинается c двух единиц, но выводить будем только те числа, которые попадают в заданный диапазон.

 

#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;

}

long a, b, f1, f2 = 1, f3 = 1;

cout<< "Задайте границы отрезка \n";

cin>> a >> b;

cout<< "Числа Фибоначчи на этом отрезке:\n";

while (f2 <= b) // вычисляем, пока не вышли за правую границу отрезка

{

if (f2 >= a) cout<< f2 << " ";

// выводим, если число не меньше левой границы отрезка

f1 = f2;

f2 = f3;

f3 = f1 + f2;

}

cout<< endl;

_getch();

return 0;

}

5. Программа, которая находит значение квадратного корня из за­данного числа, используя рекуррентное соотношение:

Обозначим как 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;

}

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

Выражение 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.01
0.1

// Определим точность вывода результа ( 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;

}

7. Пример – программа, которая вычисляет сумму ряда для заданного количества слагаемых.

В этой программе не требуется вводить x и заданную точность, точность определяется количеством слагаемых: чем больше n, тем выше точность вычисления суммы ряда. Для решения этой задачи лучше всего подходит цикл for, поскольку здесь требуется использовать счетчик.

 

#include <iostream>

#include <iomanip>

#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;

}

 

long double s = 1, sl = 1;

long double n;

cout<<"Введите количество слагаемых ";

cin>>n;

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

for (long double i =1; i <= n; i++)

{

sl /= i;

/* при использовании рекуррентных соотношений факториал вычисляется автоматически */

s += sl;

}

cout<<"Сумма=" << setprecision(16) << s;

cout<<"\n e=" << exp(1.0) << endl;

_getch();

return 0;

}