Числа Фибоначчи (Леонардо Пизанский [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.