nu merge.


  1. #1
    Rocker jonny_u's Avatar jonny_u reprezinta o cantitate neglijabila
    Data de inscriere
    19-09-2006
    Varsta
    35
    Sex
    M
    Mesaje
    33
    Mesaje bazar
    68
    Putere Reputatie
    36
    Reputatie
    10
    Puncte CF
    17.5
    Usergroups:

    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.

  2. #2
    Linux user cmcx_linux reprezinta o cantitate neglijabila
    Data de inscriere
    05-10-2005
    Sex
    M
    Mesaje
    218
    Mesaje bazar
    113
    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).
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

  3. #3
    Rocker jonny_u's Avatar jonny_u reprezinta o cantitate neglijabila
    Data de inscriere
    19-09-2006
    Varsta
    35
    Sex
    M
    Mesaje
    33
    Mesaje bazar
    68
    Putere Reputatie
    36
    Reputatie
    10
    Puncte CF
    17.5
    Usergroups:
    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

  4. #4
    Member outkast's Avatar outkast reprezinta o cantitate neglijabila
    Data de inscriere
    28-02-2006
    Varsta
    39
    Sex
    M
    Mesaje
    106
    Putere Reputatie
    37
    Reputatie
    10
    Puncte CF
    0.0
    Usergroups:
    Cat de mult difera? doar ultimele zecimale sau diferenta e foarte mare?
    In libraria standard se poate ca algoritmul sa fie implementat altfel, depinde de compilator..

    Daca diferenta este mica atunci e acceptabila.. daca e mare atunci ai gresit ceva..

    PS: valabil si pentru altii .. puneti sursa indentata.. si in taguri [ CODE ] [ /CODE ] pentru a fi mai usor de citit.. si in cazul tau poti pune si rezultatul programului.. nu o sa ma apuc sa compilez programul doar ca sa vad ca rezultatul difera de la a 3-a zecimala
    Remember the difference between a boss and a leader: a boss says "Go" a leader says "Let's go"



  5. #5
    Rocker jonny_u's Avatar jonny_u reprezinta o cantitate neglijabila
    Data de inscriere
    19-09-2006
    Varsta
    35
    Sex
    M
    Mesaje
    33
    Mesaje bazar
    68
    Putere Reputatie
    36
    Reputatie
    10
    Puncte CF
    17.5
    Usergroups:

    Smile

    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.

  6. #6
    Junior Undertaker reprezinta o cantitate neglijabila
    Data de inscriere
    26-01-2006
    Varsta
    41
    Sex
    M
    Mesaje
    62
    Mesaje bazar
    15
    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.
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

Google+

Cautati logo-ul CraiovaForum?

Iata cateva variante: