Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Программа, которая находит числа Фибоначчи в заданном диапазоне.
Числа Фибоначчи вычисляются по следующему правилу: 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 - количество цифр после точки), int k=0; while (e < 1) { e*=10; ++k; } // устанавливает точность вывода манипулятор setprecision(), // при использовании манипуляторов не забывайте подключать к программе 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; }
Date: 2016-08-30; view: 315; Нарушение авторских прав |