Problem - keine Ausgabe bei etwas komplizierterem Programm (für mich zumindestens^^)



  • Moin,
    habe nun folgendes Problem:
    Ich soll etwas programmieren, das nach Wahl des Users entweder den

    1. sin(x) mit der Formel sin(x) = x-(x³/3!) + (x5/5!)-(x7/7!) +...
    2. cos(x) = 1-(x²/2!)+ (x^4/4!) - ....+....
    3. e^x = 1+x+x²/2! +x³/3! + ....

    bis die nächste Komponente in der Rechnung kleiner als eine einzugebende genauigkeitsschranke wird.

    Mein Quelltext sieht bisher so aus:

    #include <math.h>
    #include <stdio.h>
    
    int main ()
        { float sin,e,cos,sinx,cosx,ex,fak,zahl,i,z,genau;
          int x;
        printf ("Bitte wählen sie eine Funktion\n");
        printf ("Druecken sie die 1 fuer Sin(x)\n");
        printf ("Druecken sie die 2 fuer cos(x)\n");
        printf ("Druecken sie die 3 fuer e^(x)\n");
        scanf ("%d",&x);
        printf ("Bitten geben sie eine Genauigkeit ein\n");
        scanf ("%e",&genau);
        sinx =3;
        cosx = 2;
        ex = 2;
        sin = x;
        cos =1;
        e = 1+x;
       z =-1;
    
        switch (x)
        { case 1: 
               fak = 6;
                i=3;
                  do 
                     { zahl =  (pow (x,sinx))/fak; 
                       sin =sin +(z*zahl);
                       sinx=sinx +2;
                       fak = fak *(i+1)*(i+2);
                       i=i+2;
                       z=z*(-1); }
                  while (genau >= fak);
                  printf ("Das Ergebnis Sin (%e) ist %e\n",x,sin);
        break;
        case 2:
             fak = 2;
             i=2;
                  do 
                     { zahl =  (pow (x,cosx))/fak;
                       cos =cos +(z*zahl);
                       cosx=cosx +2;
                       fak = fak *(i+1)*(i+2);
                       i=i+2;
                       z=z*(-1); }
                  while (genau >= fak);
                  printf ("Das Ergebnis cos (%e) ist %e\n",x,cos);
             break;
        case 3:
              fak = 2;
              i=2;
                  do 
                     { zahl = (pow (x,ex))/fak;
                       e =e +zahl;
                       ex=ex +1;
                       fak = fak *(i+1);
                       i=i+1; }
                  while (genau >= fak);
        printf ("Das von e^x ist %e\n",e);
        break;
    }
    return (0);
    }
    

    Ich habe die Startwerte im VOrraus festgelegt, die variable i sorgt für die passenden Vorzeichen und passenden Fakultäten.

    Das Problem ist nun, ich bekomme keine Ausgabe. WO liegt da der Fehler?



  • Ich hab mir alles noch garnicht so genau angeschaut und auch die Berechnung jetzt nicht geprüft.
    Aber was mir auffällt, ist: Du verwendest die Eingabe zur Auswahl des Menupunktes für deine Berechnungen (Variable x). Kann mir gerade nicht vorstellen, dass das gewollt ist 😕



  • Du darfst auch gerne in deinem Programm printf in die Schleifen packen.
    Dann kannst du den aktuellen Zustand der Variablen ausdrucken und sehen was schief läuft.
    Dazu ist zwar der Debuger da, aber mit dem print sieht man auch die Historie.



  • @basic: jau, seh ich rgad auch, das kommt davon, wenn man sich zu teif mit nem algorithmus beschätfigt, dann fäält das net mehr auf^^
    @dirk: Jo gute idee, ich werds mal damit veruschen


Anmelden zum Antworten