/*
C Lab 4.hafta Sali Grubu Sorulari Icin Ornek Programlar:
soru 1 : sin(x) fonksiyonunu taylor serileri yardimi ile hesaplayan programi yaziniz.
taylor serisi acilimi icin formul :
http://www.wolframalpha.com/input/?i=taylor+series+sin+x
soru 2 : cos(x) fonksiyonunu taylor serileri yardimi ile hesaplayan programi yaziniz.
taylor serisi acilimi icin formul :
http://www.wolframalpha.com/input/?i=taylor+series+cos+x
soru 3 : e^x fonksiyonunu taylor serileri yardimi ile hesaplayan programi yaziniz.
taylor serisi acilimi icin formul :
http://www.wolframalpha.com/input/?i=taylor+series+e%5Ex&lk=4&num=1&lk=4&num=1
soru 4 : log(x) fonksiyonunu taylor serileri yardimi ile hesaplayan programi yaziniz.
taylor serisi acilimi icin formul :
http://www.wolframalpha.com/input/?i=taylor+series+log
*/
#include <stdio.h>
#include <conio.h>
/*
fonksiyon prototipleri : programci tarafindan yazilan fonksiyonlarin nasil
kullanilacaklarini bildirir */
double my_sinfunc( double angle_rad );
double my_cosfunc( double angle_rad );
double my_expfunc( double x);
double my_logfunc( double x);
double my_absfunc(double a);
double my_deg2rad(double deg);
long double my_factfunc(int n);
long double my_powfunc(double a, int n);
int main(void)
{
/* main fonksiyonu icin yerel degiskenler */
double deg, x, log_val;
printf("Derece cinsinden bir aci degeri giriniz : ");
scanf("%lf", &deg);
printf("sin(%lf) = %lf ", deg, my_sinfunc( my_deg2rad(deg) ) );
printf("\n");
printf("cos(%f) = %f ", deg, my_cosfunc( my_deg2rad(deg) ) );
printf("\n\n");
printf(" e^x icin bir x degeri giriniz : ");
scanf("%lf", &x);
printf("\n");
printf("e^%lf = %f ", x, my_expfunc( x ));
do /* istenen x kosulunu saglayan bir deger girilene kadar kullanicidan veri girisi
ister */
{
printf("\n\n");
printf("log(x) icin bir x degeri giriniz : ");
scanf("%lf", &x);
log_val = my_logfunc( x );
if(log_val != -6666) /* my_logfunc( x ) fonksiyonundan geri donen deger anlamli mi?
*/
{
printf("\n");
printf("log(%lf) = %f ", x, log_val);
}
}while(log_val == -6666);
getch();
}
long double my_powfunc(double a, int n)
{
/* a^n degerini hesaplar */
/* fonksiyon blogu icin yerel degiskenler */
int i;
long double result = 1.0f;
if(n < 0) /* us negatif mi? */
{
for(i=n; i<=-1; i++)
result *= a;
return (1.0f / result);
}
else
{
for(i=1; i<=n; i++)
result *= a;
}
return result;
}
long double my_factfunc( int n)
{
/* n! degerini hesaplar */
/* fonksiyon blogu icin yerel degiskenler */
int i;
long double result = 1.0f;
if(n == 0) /* n sayisi "0" ya da negatif mi? */
{
return 1;
}
else if(n < 0)
{
printf(" Eksi isaretli sayinin faktoriyeli hesaplanamadi ");
return -6666; /* eger istenmeyen bir sonuc olusursa bunu belirtmek icin
kullanilacak konuyla ilgisiz bir sayi */
}
else
{
for(i=1; i<=n; i++)
result *= i;
}
return result;
}
double my_absfunc(double a)
{
if(a < 0)
a = -1*a;
return a;
}
double my_deg2rad(double deg)
{
/* derece cinsinden gelen değeri radyana cevirir */
/* fonksiyon blogu icin yerel degiskenler */
double rad_val;
double pi = 3.14159;
while ( deg >= 360.0f)
deg -= 360.0f;
while ( deg < 0.0)
deg += 360;
rad_val = (deg*pi) / 180.0f;
return rad_val;
}
double my_sinfunc( double angle_rad )
{
/* fonksiyon blogu icin yerel degiskenler */
int k;
double result = 0.0f;
for(k=0; k<10; k++)
{
result += my_powfunc(-1, k ) * my_powfunc(angle_rad, 1 + 2*k) /
my_factfunc(1 + 2*k);
}
return result;
}
double my_cosfunc( double angle_rad )
{
/* fonksiyon blogu icin yerel degiskenler */
int k;
double result = 0.0f;
for(k=0; k<10; k++)
{
result += my_powfunc(-1, k ) * my_powfunc(angle_rad, 2*k) /
my_factfunc(2*k);
}
return result;
}
double my_expfunc(double x)
{
/* fonksiyon blogu icin yerel degiskenler */
int k;
double result = 0.0f;
for(k=0; k<20; k++)
{
result += my_powfunc(x, k) / my_factfunc(k);
}
return result;
}
double my_logfunc(double x)
{
/* |-1 + x| < 1 oldugu durumlar icin dogru sonuc uretir */
/* fonksiyon blogu icin yerel degiskenler */
int k;
double result = 0.0f;
if( my_absfunc( -1 + x ) >= 1 )
{
printf(" girdiginiz deger |-1 + x| < 1 kosulunu saglamadi ");
return -6666; /* eger istenmeyen bir sonuc olusursa bunu belirtmek icin
kullanilacak konuyla ilgisiz bir sayi */
}
for(k=1; k<=30; k++)
{
result += my_powfunc(-1, k) * my_powfunc(-1 + x , k) / k;
}
return -1*result;
}
Download

Güçlü çözüm ortağınız