Neuling mit einer Frage :)



  • In Zukunft bitte aussagekräftige Topics und [cpp]-Tags.



  • Tim schrieb:

    In Zukunft bitte aussagekräftige Topics und [cpp]-Tags.

    immer die gleiche leier 😉



  • Ist ja auch immer das gleiche Problem 😉



  • tut mir leid für den nicht-aussagekräftigen titel 🙂

    also mein programm läuft soweit, bräuchte nur mal nen tipp, wie ich die anzahl der nachkomma-stellen beeinflussen kann, habe zwar die doku von printf angeguckt, aber verstehe nur bahnhof.

    beispiel:

    ich habe die zahl x=7.348 als float eingegeben und mit fabs(x) wird der absolute betrag berechnet.
    hier mal mein code ausschnittsweise:

    float x,abbet,ln,lg;
    printf("Mathematische Funktionen\n ========================\n");
    printf("x-Wert: ");
    scanf("%f",&x);
    getchar();
    
    abbet = fabs(x);
    printf("absoluter Betrag: %f \n", abbet);
    getchar();
    return 0;
    

    bekomme ich das korrekte ergebnis, allerdings spuckt er mit den wert 7.348000 aus. ebenso bei anderen rechenoperationen.
    ich weiss das der typ float nun 6 stellen einnimmt. einen anderen variablen-typ kann ich nicht nehmen, da ich insgesamt 12 ausgaben machen muss, mit jeweils verschiedene anzahl stellen.
    ich denke also ich würde das am besten mit formatierungsoptionen in printf hinbekommen, nur wie ?? 😕

    danke nochmals



  • Schau mal hierhttp://www.cplusplus.com/reference/clibrary/cstdio/printf.html

    Der Formatierungsparameter, den Du suchst, heißt 'precision' in o.g. Link.
    Somit wäre

    printf("absoluter Betrag: %8.3f \n", abbet);
    

    möglicherweise eine Lösung.
    Damit sollten 8 Stellen insgesamt mit immer 3 Nachkommastellen ausgegeben werden.



  • PERFEKT VIELEN DANK !!

    genau sowas hat mir gefehlt 🙂

    und dann vielleicht die letzte frage, eher mathematisch:

    wie kann ich die dritte wurzel aus x ziehen. habe es versucht mit:

    wurz3=pow(x,(1/3));
    

    und

    wurz3=pow(x,(1/3);
    

    wenn ich

    wurz3=pow(x,0.33);
    

    mache, habe ich das näherungsweise korrekte ergebnis, bedeutet er schluckt mein 1/3 (1 drittel) nicht in der formel.

    aber leider liefert es falsche ergebnisse. jemand ne idee ?



  • 1/3 "schluckt" der Compiler schon - er berechnet den Wert allerdings mit Ganzzahl-Arithmetik (ohne Nachkomma-Stellen). Versuch's mal mit 1.0/3.0 *

    * Es reicht auch aus, wenn einer der Werte eine Gleitkomma-Zahl ist 😉



  • hervorragend, das hat mir schon geholfen...vielen vielen dank!!

    hier mal für alle die es interessiert mein quelltext:

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    //Deklarierung der Variablen als Fliesskommazahl:
    	float x,abbet,ln,lg;
        float wurz,ehoch,xhoch3,xhoch5,wurz3,sns,csn,tng,atng;
    	printf("Mathematische Funktionen\n========================\n");
    	printf("\nx-Wert: ");
    	scanf("%f",&x);
    	getchar();
    
    //Berechnung der einzelnen Werte:
    
    	abbet = fabs(x); ln = log(x); lg=log10(x);
    	wurz=sqrt(x); ehoch=exp(x); xhoch3=pow(x,3);
    	xhoch5=pow(x,5); wurz3=pow(x,1.0/3.0);
    	sns=sin(x); csn=cos(x); tng=tan(x); atng=atan(x);
    
    //Nun Ausgabe der berechneten Werte per printf:
    
    	printf("\nabsoluter Betrag:          %4.3f \n", abbet);
    	printf("natürlicher Logarithmus:   %6.5f \n", ln);
    	printf("Logarithmus zur Basis 10:  %7.6f \n", lg);
    	printf("Quadratwurzel:             %6.5f \n", wurz);
    	printf("e hoch x:                  %6.2f \n", ehoch);
    	printf("x hoch 3:                  %6.3f \n", xhoch3);
    	printf("x hoch 5:                  %6.1f \n", xhoch5);
    	printf("3. Wurzel aus x:           %6.5f \n", wurz3);
    	printf("\ntrigonometrische Funktionen arbeiten mit Bogenmass!!!\n");
    	printf("-----------------------------------------------------\n");
    	printf("Sinus:                     %f \n", sns);
    	printf("Kosinus:                   %f \n", csn);
    	printf("Tangens:                   %6.5f \n", tng);
    	printf("Arcus Tangens:             %6.5f \n", atng);
    	getchar();
    	return 0;
    }
    

    vielleicht hat ja jemand verbesserungsvorschläge oder anmerkungen, nochmals VIELEN dank an alle!

    gruss,
    lalas



  • CStoll schrieb:

    Versuch's mal mit 1.0/3.0 *

    * Es reicht auch aus, wenn einer der Werte eine Gleitkomma-Zahl ist 😉

    Ich dachte der erste ist wichtig, nicht dass es nur einer ist.



  • nö, irgendeiner, es wird sich immer nach dem genauesten datentypen in der berechnung gerichtet...
    langt auch

    1/3.;
    

    also in der theorie 🙂



  • echt? schrieb:

    CStoll schrieb:

    Versuch's mal mit 1.0/3.0 *

    * Es reicht auch aus, wenn einer der Werte eine Gleitkomma-Zahl ist 😉

    Ich dachte der erste ist wichtig, nicht dass es nur einer ist.

    Es ist egal, welcher. Bei einer Operation werden zunächst beide Operanden auf den höherwertigen Datentyp gebracht und dann verrechnet (das heißt, bei "1/3.0" wird die 1 nach double umgewandelt und anschließend folgt eine Gleitkomma-Division).



  • Nice site!


Anmelden zum Antworten