Problem mit sinus und cosinus



  • hey leute

    ich will cosinus und sinus programmieren ohne c.math zu includieren...
    hat da jemand eine funktionierende lösung bzw ein guter link??

    wär super!!
    vielen dank





  • hey
    vielen dank...hat mich etwas weitergebracht...
    bin aber leider noch blutiger anfänger =-)
    weisst du wo ich eine fertige und funktionierende lösung herbekomme?
    viele grüße


  • Administrator

    Du bekommst die Lösung in <cmath> . Wieso willst du den Header nicht verwenden?
    Ansonsten findest du vielleicht etwas auf www.sf.net.

    Grüssli



  • siehe dravere ^^

    edit: oh - ich seh gerad, dass das ja ganze 10 minuten her war - hab wohl vergessen zu refreshen -.-



  • hallo

    der professor meinte wir sollen es mit schleifen und unterprogramme ...also mit der taylor- reihe versuchen...für anfänger halt =-)

    hab es nun mit der taylorreihe probiert...das programm geht leider noch nicht so wie ich will sieht hier jemand meine fehler??---wäre klasse

    #include <iostream>
    using namespace std;
    unsigned long fak(int wert);
    double potenz(double basis,int hochzahl);
    double cos(double x);

    void main()
    {
    double grad;
    cout<<"Gib einen Winkel in Grad ein: ";
    cin>>grad;
    cout<<"cos("<<grad<< "°) = "<<cos(grad)<<endl;

    char dummy; cin>>dummy;
    };

    unsigned long fak(int wert)
    {
    unsigned long produkt=1;
    for (int i=1;i<=wert;i++)
    produkt=produkt*i;
    return produkt;
    }

    double potenz(double basis,int hochzahl)
    {
    double produkt=1;
    for (int i=1;i<=hochzahl;i++)
    produkt=produkt*basis;
    return produkt;
    }

    double cos(double x)
    {
    while (x<-180||x>-180)
    {
    if (x<-180) x=x+360;
    //else x=x-360;
    if (x>180) x=x-360;
    }

    const double PI=3.141593;
    x=x*PI/180;
    double summe=0;
    int n=0;
    double ntesGlied=1;

    while ((ntesGlied>0.005) || (ntesGlied<-0.005))
    {
    ntesGlied=(potenz(-1,n) / fak(2*n) * potenz(x,2*n) );
    summe=summe+ntesGlied;
    n++;
    }

    return summe;
    }



  • Fabe1987 schrieb:

    sieht hier jemand meine fehler??

    Nein, schon gar nicht bei unformatiertem Code. Verwende [cpp]-Tags.

    Aber versuche doch, dir die Reihenentwicklung auf einem Blatt Papier zu überlegen. Dann setzt du Schritt für Schritt in dein Programm um und schaust jeweils, ob die Ergebnisse übereinstimmen. So kommst du schnell auf den Fehler.

    Und so lernst du auch Programmieren. Debuggen ist nämlich ein nicht unwesentlicher Teil davon.



  • das hier war (bis auf kleine fehler) richtig:

    #include <iostream> 
    using namespace std; 
    
    unsigned long fak(int wert);
    double potenz(double basis, int exponent); //int hochzahl); 
    double cos(double x);
    
    void halte_konsole_offen();
    
    //void main()
    int main()
    { 
      double grad; 
      cout<<"Gib einen Winkel in Grad ein: "; 
      cin>>grad; 
      cout<<"cos("<<grad<< "°) = "<<cos(grad)<<endl; 
    
      halte_konsole_offen();
    }; 
    
    void halte_konsole_offe()
    {
      char dummy;
      cin>>dummy; 
    }
    
    unsigned long fak(int wert) 
    { 
      unsigned long produkt=1; 
    
      for (int i=1; i<=wert; i++) 
        //produkt=produkt*i;
        produkt *= i;
      return produkt; 
    } 
    
    double potenz(double basis,int exponent) 
    { 
      double produkt=1;
      for (int i=1; i<=exponent; i++) 
    //    produkt=produkt*basis; 
        produkt *= basis;
      return produkt; 
    }
    

    Bin ich jetzt gerade zu faul, nachzugucken, wie das richtig geht oder ob es vll so gar schon (fast) richtig ist ^^

    double cos(double x) 
    { 
      while (x<-180||x>-180) 
      { 
        if (x<-180) x=x+360; 
        //else x=x-360; 
        if (x>180) x=x-360; 
      } 
    
      const double PI=3.141593; 
      x=x*PI/180; 
      double summe=0; 
      int n=0; 
      double ntesGlied=1; 
    
      while ((ntesGlied>0.005) || (ntesGlied<-0.005)) 
      { 
        ntesGlied=(potenz(-1,n) / fak(2*n) * potenz(x,2*n) ); 
        summe=summe+ntesGlied; 
        n++; 
      } 
    
      return summe; 
    }
    

    bb


Anmelden zum Antworten