Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
! ПОСЛЕДНЯЯ ВЕРСИЯ задачи по инфе. улучшеные и...doc
Скачиваний:
7
Добавлен:
01.05.2025
Размер:
118.78 Кб
Скачать

// 1.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;

void _tmain(int argc, _TCHAR* argv[])

{

printf ("Oleg frolov. Zada4a po informatike 1 \n Sin(x) razlojenie v rid Tejlora");

cin.get();

system ("cls"); // очистака экрана

const double p =3.14159265358979323; // число пи

double x; // переменная

printf ("x=");

scanf ("%lf", &x);

double E; // точность (эпсилон)

printf ("E=");

scanf ("%lf", &E);

double s, d, sum; // s и sum - сумма и переменная необходимая для её выражения, d- что-то типа добавочного члена определяющего точность.

// (на самом деле хз как там и что, так как формула разложения содержит фактариалы, а я не особо понял как мы её упростили,

// но в полученой формуле нужны таки евот преобразования..)

while (x>p/2) // в целом тоже ересь. связана с отрезками. т.е. пределом где мы определяем синус

x = x - 4*p;

while (x<p/2) // аналогично.

x = x + 4*p;

int i=1; // счетчик

s = x;

sum = x;

do

{

s= - (s*x*x)/((2*i+1)*(2*i)); // вот оно! та самая ересь. формула которую я не понял на метематическом уравне, где сократились факториалы.

i = i + 1;

sum = sum + s;

d = (s*x)/(2*i); // вторая ересь про которую я говорил..откуда эта формула..я хз.

//cout<<sum<<endl; // эта фишка особо не нужна, выводит на экран все действия в цикле

}

while (fabs (d) > E); // условие выхода. фабс - модуль числа. (про d смотрим выше)

printf (" sin(%lf)=%lf",x, sum); // ну тут понятно. вывод на экран результата цикла. там где первое lf это переменная, вторая - это сумма

cin.get();

cin.get();

}

// 2.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;

Void _tmain(int argc, _tchar* argv[])

{

printf ("Oleg frolov, zda4a 2. Vi4islit' eksponenty");

cin.get();

system ("cls");

double x,a=1,b,ost=1,eps;

int i;

printf ("x=");

scanf ("%lg",&x);

printf ("eps=");

scanf ("%lg",&eps);

b=3; // ограниченность функции вводим

double sum=0;// скалдываем, так что =0

a=1;// так как перемножаем =1

i=1; // надо вернуть значение после предыдущего цикла =1

while(fabs(ost)>eps)

{

a=a*x/i;

sum=sum+a;

ost=a*b;

i=i+1;

}

printf("f=%lg",sum);

cin.get();

cin.get();

}

// проверка. x=2 => e*e => f=7.38905609

// 3.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;

double f(double x) // вводим функцию

{

return cos(x) - x*x*x ; // пишем что за функция

// для проверки ответ 0.86547

// х0 = 0.5

}

double H(double x)

{

return -1*sin(x) - 3*x*x; // производная

}

Void _tmain(int argc, _tchar* argv[])

{

printf ("Oleg frolov, zada4a 3. najti koren' f(x)=0 na [a,b] N'uton"); // фишка такая..есть куча условий когда вообще применим этот метод..так что я их писать не буду. но они есть.

cin.get();

system ("cls");

// примечание. когда я писал прогу преподавателю, то выяснилось что всё проще. задаем только два параметра

double x,e,x0;

printf ("e="); // точность

scanf ("%lg", &e);

printf ("x0="); // приближение

scanf ("%lg", &x0);

do // интерационный процесс

{

x = x0 - f(x0)/H(x0); // собственно считаем корень

x0=x;

//cout<<x<<"\t"; // см. ниже

//cout<<x0<<endl; //если интересно просмотреть все шаги цикла

}

while (fabs(f(x)) > e ); // иначе можно записать как модуль х-х0 < Е

printf ("x=%lg",x);

cin.get();

cin.get();

}

// 4.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;

double f(double x)

{

return x*x*x; // вводим функцию. Вроде работает...

}

Void _tmain(int argc, _tchar* argv[])

{

printf ("Oleg Frolov, zada4a 4. metod delenia po palam");

cin.get();

system ("cls");

double a,b,n, d; // d- это то, что ищем. переменная + d- длина отрезка

// а и b отрезок и n - точность

printf ("n=");

scanf ("%lf", &n);

printf ("a=");

scanf ("%lf", &a);

printf ("b=");

scanf ("%lf", &b);

d= (a+b)/2; // вынесли из цикла, тчобы считал быстрее

if (f(a)* f(b) < 0)

{

while ( fabs(f(d)) > n) // цикл. ну смысл в том, что тут точность должна быть больше чем, то значение которое нашли. по модулю (нафиг по модулю? ну мы же не идиоты и пониаем, что значение может и отрицательным быть..)

{d= d/2;

if (f(a)*f(d) > 0) // так..ну тут сложнее. фишка в том, что если у нас функция изменила знак, то она прошла через искомую нами точку..так вроде..)

{

a=d;

}

else

b=d;

}

printf ("f(x)=%lf ",d);

}

else // условие если метод не выполним, т.е функция не меняет знак на отрезки ab или обращается в 0 на конце отрезка.

{

printf ("Metod ne rabotaet");

}

cin.get();

cin.get();

}

// 5.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include "iostream"

using namespace std;