Числа Фибоначчи. Золотое сечение

Числа Фибоначчи (Леонардо Пизанский [1180 - 1240]) – числовая последовательность [1228], каждый член которой равен сумме двух его предыдущих членов.

Рекуррентная формула:

Золотое сечение – гармоническое деление отрезка длины точкой на две части в соотношении: . Решение этого уравнения: . Решение также приближенно равно где ­− числа последовательности Фибоначчи.

Программа: /* Последовательность Фибоначчи. Золотое сечение. */

#include<stdio.h>

#include<windows.h>

#include <math.h>

int main()

{

int i, n;

double a, a1=1, a2=1;

char cStr[]="Введите число членов последовательности:\n";

CharToOem(cStr,cStr);

printf("%s",cStr);

scanf("%d",&n);

for(i=3; i<=n;i++)

{

a=a1+a2;

printf("i=%d\t\t\ta=%d\t\t\tx=%9.8f\n",i, (int)a, a/a2);

a1=a2;

a2=a;

}

printf("\n\nx=%9.8f\t\ta/x=%9.8f\t\t",(sqrt(5)-1)/(double)2,1/((sqrt(5)-1)/(double)2));

printf("x:(1-x)=%9.8f\n",((sqrt(5)-1)/(double)2)/(1-(sqrt(5)-1)/(double)2));

return 0;

}

// Результаты программы, связанные с золотым сечением:

// x=0.61803399 a/x=1.61803399 x:(1-x)=1.61803399

Пример: // Метод Монте-Карло

#include<stdio.h>

#include<stdlib.h>

#include<windows.h>

#include<time.h>

#define P 3.14159265

#define R 1

int main()

{

struct coord{

double x;

double y;} z;

long i,j,n, n1=10000000;

double S,Sr=0;

srand((unsigned)time(NULL));

char cStr1[]="Введите число циклов моделирования:";

CharToOem(cStr1,cStr1);

printf("%s\n",cStr1);

scanf("%d",&n);

time_t beg_t,end_t;

beg_t=time(NULL);

for(j=0;j<n;j++){

S=0;

for(i=0;i<n1;i++)

{

z.x=(double)rand()/(double)RAND_MAX;

z.y=(double)rand()/(double)RAND_MAX;

z.x-=0.5;

z.y-=0.5;

if ((z.x*z.x+z.y*z.y) <= 0.25)

S++;

}

S/=(double)n1;

printf("S=%lf\n",S);

Sr+=S;

}

end_t=time(NULL);

printf("T=%f sec\n",difftime(end_t,beg_t));

printf("Int=%f\tPi=%f\n",Sr/(double)n,4*Sr/(double)n);

// Вычисление площади сектора S=(P/360)*Fi*R*R

int k,*pInt;

float* pFloat;

char cStr2[]="\nВведите количество секторов:";

CharToOem(cStr2,cStr2);

char cStr3[]="\nВведите размер угла (в градусах):";

CharToOem(cStr3,cStr3);

printf("%s\n",cStr2);

scanf("%d",&k);

pInt=new int[k];

pFloat=new float[k];

for(i=0;i<k;i++){

printf("Sector %d.\t%s\n",i+1,cStr3);

scanf("%d",&pInt[i]);

pFloat[i]=(P/360)*R*R*pInt[i];

}

for(i=0;i<k;i++)

printf("S[%d]=%f\t Procent[%d]=%f% \n",i+1,pFloat[i],i+1,pFloat[i]/(P*R*R)*100);

return 0;

}

Пример: // Использование локальных переменных

// "скрытие" переменной внешнего блока

#include<stdio.h>

int main(void)

{

int a=5, b=10;

if(a==5){

int a=25;

printf("a=%d\tb=%d\n",a,b); // внутренняя переменная а

}

printf("a=%d\tb=%d\n",a,b); // внешняя переменная а

return 0;

}

//Передача матрицы в функцию с дальнейшим ее преобразованием

#include<stdio.h>

int pr(int**,int,int);

int main(void)

{

int **A;

int n=3,k=3,i,j;

A=new int* [n];

for(i=0;i<n;i++)

A[i]=new int[k];

for(i=0;i<n;i++)

for(j=0;j<k;j++)

A[i][j]=i+j;

for(i=0;i<n;i++)

for(j=0;j<k;j++)

printf("A[%d][%d]=%d\n",i,j,A[i][j]);

// Вызов функции, в которой в качестве аргумента - матрица

pr(A,n,k);

for(i=0;i<n;i++)

for(j=0;j<k;j++)

printf("A[%d][%d]=%d\n",i,j,A[i][j]);

return 0;

}

int pr(int **c,int n,int k) // передаем матрицу и ее размерности

{

for(int i=0;i<n;i++)

for(int j=0;j<k;j++)

c[i][j]*=c[i][j];

return 0;

}

Пример: /*Вычисление значений функции sin(x) через разложение в ряд Тейлора(1685-1731) (Маклорена(1698-1746)) */

Рекуррентная формула:

.

Замечание: Радиус сходимости рассматриваемого ряда: , так как , а

#include<stdio.h>

#include<windows.h>

#include<math.h>

void main()

{

char cStr[]="Введите аргумент функции в радианах:";

CharToOem(cStr,cStr);

double eps=1.e-6,x,s,r,n=0.0,degree;

printf("%s\n",cStr);

scanf("%lf",&x);

s=r=x;

while(fabs(r)>eps)

{

r*=((-1)*(x*x)/((2*++n)*(2*n+1)));

s+=r;

printf("n=%f\tr=%f\ts=%f\n",n,r,s);

}

degree=(180/3.14159265)* fmod(x,6.2831853)

printf("f(x)=sin(x)=sin(%f)=sin(%f)=%e\n",x,degree,s);

}

Замечание: Обратить внимание на работу функций (fabs(r)) и fmod.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: