- EUR
- 4,9762
-
nu merge.
vreau sa implementez si eu functia sinus ca sa ma invat sa definesc functii si sa le apelez in c/c++. stiu ca e deinita in math.h dar vreau sa imi mearga si mie.din ce-am mai prins pe la facultate, am scris-o si arata cam asa:
# include <stdio.h>
#include<math.h>
int fact(int n)
{
if(n==1) return 1;
else return n*fact(n-1);
}
float sinus(float x, int k)
{
int i;
float rez = 0;
for(i=0;i<k;i++)
if(i%2) rez = rez-1/fact(2*i+1)*pow(x, 2*i+1);
else rez = rez+1/fact(2*i+1)*pow(x, 2*i+1);
return rez;
}
void main(void)
{
float x;
int k;
printf("dati x");
scanf("%f\a",&x);
printf("dati numarul de termeni");
scanf("%d\a",&k);
printf("sinus(%f)=%f\n",x,sinus(x,k));
}
de mentionat ca sinusul il calculez printr-o dezvoltare in serie de puteri:
sin(x)= (1/1!)*x^1-(1/3!)*x^3+(1/5!)*x^5-.... pun cati termeni vreau,depinde cat de exact vreau sa fie rezultatul.e o eroare logica pe undeva si nu-mi dau seama unde.
-
Linux user
- Putere Reputatie
- 39
- Reputatie
- 10
- Puncte CF
- 40.0
- Usergroups:
Incearca sa rescrii fact sub forma iterativa. Problema poate fi din cauza apelurilor recursive, deoarece pentru un n destul de mic iti da o depasire de stiva ( pe care calculatorul nu ti-o raporteaza).
-
ok. am definit alta functie factorial. mi-am adus aminte ca sinusul se calculeaza in radiani deci argumentul ar fi trebuit sa fie in radiani.am definit inca o functie care converteste gradele sexagesimale in radiani. am inclus in program si functia sin din math.h ca sa pot compara rezultatele. si ele difera
noul program e acesta:
# include <stdio.h>
#include<math.h>
# include <stdio.h>
double convert(double x)
{
const double pi=3.1415;
double rad;
rad=x*pi/180;
return rad;
}
int fact(int m)
{
int rez=1;
int i;
for(i=1;i<=m;i++) rez=rez*i;
return rez;
printf("%d", rez);
}
double sinus(float x, int k)
{
int i;
double rez = 0;
for(i=0;i<k;i++)
if(i%2) rez = rez-1/fact(2*i+1)*pow(convert(x), 2*i+1);
else rez = rez+1/fact(2*i+1)*pow(convert(x), 2*i+1);
return rez;
}
void main(void)
{
float x;
int k;
printf("dati x");
scanf("%f",&x);
printf("dati numarul de termeni");
scanf("%d",&k);
printf("sinus(%f)=%f\n",x,sinus(x,k));
printf("%f\n",sin(x));}
sa fie diferenta data de inexactitatea lui pi?am pus 4 zecimale ca doar p'astea le mai tin minte
-
-
diferenta e de ordinul zecimilor, oricum destul de aproape. deocamdata mi-e de ajuns, macar acum merge.inainte daca dadeam sa calculeze sinus(x) rezultatul era tot x.
-
Junior
- Putere Reputatie
- 38
- Reputatie
- 10
- Puncte CF
- 20.0
Declari PI double si il lasi cu doar 4 zecimale ?
Iar in math.h nu e calculat cu metoda asta, care e mult prea lenta.