n00b braucht Hilfe mit Typecast



  • Hallo ihr alle!

    Nun habe ich auch den Weg in C/C++ - Forum gefunden... ich dachte ich würde es alleine schaffen, aber, naja, die Tücken der Sprache 😉

    Ich schreibe im Moment ein Programm und komme einfach nicht mehr weiter. Das im Moment eigentliche Problem ist in folgendem Code-fragment:

    // Berechnung der Wahrscheinlichkeit
    			printf("fakn: %i ", fakn);
    			printf("fakk: %i ", fakk);
    			printf("nminkfak: %i ", nminkfak);
    			double a = (fakn / (fakk * nminkfak));
    			double a1 = (fakk) * (nminkfak));
    			double b = (pow(p, k));
    			double c = (pow(l, (n-k)));
    			printf("a: %d ", a);
    			printf("a1: %d ", a1);
    			printf("b: %d ", b);
    			printf("c: %d ", c);
    

    , wobei fakn = 6, fakk = 2 und nminkfak = 1 und natürl. sind das alles ints.

    Natürlich bringt er als Ausgabe immer nur '0' heraus. Ich habe schon (double) davor geschrieben um einen Typecast zu machen, auch schon vor jede Variable, aber ich bekomme einfach nicht die richtigen (floating-)Werte heraus... Könnt ihr mir helfen? Vielen Dank im Vorraus! 🙂

    P.S.: Wenn ihr mal was zu lachen wollt poste ich mein ganzes Programm. Ihr werdets so schlecht finden 🙂 konnte z.B. ceil nicht anwenden und hab dann das hier gemacht:

    while(i<ktmp) // Da 'ceil' irgendwie nicht geht muss eben anders gerundet werden
    		{ i++; }
    		k = i;
    		printf("k = %i\n\n",k);
    		printf("n = %i\n\n",n);
    

    😃

    P.S.: warum wird v o r r a us ausge'stern't??



  • Hi!

    printf("a: %f ", a); 
    printf("a1: %f ", a1);
    

    Außerden solltest du std::cout verwenden. Man programmiert ja schließlich in C++.
    Und im Voraus (mit einem R) wird zensiert weil du es ganz einfach falsch geschrieben hast...

    grüße



  • Zu deiner Berechnung: eine Möglichkeit wäre es, einen Operanden der Gleichung zu einem double zu casten (auf diese Weise zwingst du den Compiler, von int-Arithmetik auf Gleitkomma-Arithmetik umzuschalten):

    double a = ((double)fakn / (fakk * nminkfak));
    

    Alternativ definierst du die Eingabevariablen auch als double.

    Zweitens solltest du dir mal ansehen, was die einzelnen Formatkennungen für printf() und scanf() für eine Aufgabe haben (%d gibt int-Werte Dezimal aus, %f steht für Gleitkomma-Ausgaben).



  • CStoll schrieb:

    Zu deiner Berechnung: eine Möglichkeit wäre es, einen Operanden der Gleichung zu einem double zu casten (auf diese Weise zwingst du den Compiler, von int-Arithmetik auf Gleitkomma-Arithmetik umzuschalten):

    double a = ((double)fakn / (fakk * nminkfak));
    

    Wobei man in C++ immer mindestens der functional Schreibweise den Vorzug geben sollte.

    double a = double(fakn) / (fakk * nminkfak);
    


  • Danke für eure Hilfe, habs jetzt hinbekommen, auch wenn ich den Fehler im Endeffekt nicht wirklich gefunden habe...

    Ich hab v o r r a u s außerdem mit 2 r geschrieben, was soll daran falsch sein ...

    Naja, was solls. Vielen Dank und bis bald 😉



  • Natural_born_chilla schrieb:

    Ich hab v o r r a u s außerdem mit 2 r geschrieben, was soll daran falsch sein ...

    Genau das ist der Fehler - für nähere Informationen empfehle ich den Duden.


Log in to reply