Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




 

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

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;

}

 





Поделиться с друзьями:


Дата добавления: 2016-11-24; Мы поможем в написании ваших работ!; просмотров: 857 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2498 - | 2247 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.