Mittelwert berechnen



  • sscanf() kann diese Umwandlung für dich übernehmen. Lies dir DirkBs Vorschlag noch mal durch. Und ja, poste bitte mal deinen bisherigen Code.



  • char Zeile[300], zei[5], c[20], *z, *p, *w;
    float arr1[10];
    float arr2[10];
    float erg;
    
    sscanf (Zeile, "%g %g", &arr1[q], &arr2[y]);
    

    Die arr1-Felder laufen durch...Habe schon ein wenig rumprobiert wegen der Umwandlung, durch folgendem Post hier aus dem Forum:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int main()
    {  
        const char* AlsString = "3.14";
        float d = 0;
        // ACHTUNG! sscanf erwartet ein float. Kein double!
        sscanf(AlsString, "%g", &d);
        cout << d << endl;
    }
    

    http://www.c-plusplus.net/forum/39488



  • Warum haben arr1 und arr2 unterschiedliche Indizes (q und y)

    %g list ein float ein, %d ine int, %lg oder %lf oder %le lesen double ein.
    Von welchem Typ ist den jetzt dein Zahlenwert.

    Bei "%g %g" dürfen dann aber nur die nackten Zahlenwerte in Zeile stehen (ohne T3=). Z.B.: "3.141 1.414"
    Wie sehen deine Zeilen aus. Ist die Reihenfolge von T3= und T4= beliebig.? Sind da noch andere Tx=?



  • stimmt die Indizes q und y bei arr könnten gleich sein...

    die Werte die ich einlese werden vorher bearbeitet und sehen dann wie folgt aus:

    Vorher:
    "T3=20.325 T4=3232"
    
    Nachher:
    "20.325 3232"
    

    mit der Zeile gehts zum sscanf...andere Tx= gibt es nicht, nur die Anzahl der Zeilen differiert.

    und so wollte ich testweise was ausrechnen:

    float erg;
    	float erg1;
    	float erg2;
    erg2 = arr1[0] + arr1[1];
    fprintf(fpOut,"\nTges=%d", erg2);
    

    Heraus bekomme ich aber:

    Tges=-2147483648



  • KlausH schrieb:

    und so wollte ich testweise was ausrechnen:

    float erg;
    	float erg1;
    	float erg2;
    erg2 = arr1[0] + arr1[1];
    fprintf(fpOut,"\nTges=%d", erg2);
    

    Heraus bekomme ich aber:

    Tges=-2147483648

    Das liegt daran, dass du %d als Formatbezeichner benutzt, aber ein float übergibst. fprintf() "weiß" nicht, dass der übergebene Wert ein float ist und behandelt ihn dem Format entsprechend als int. Willst du erg2 wirklich als Ganzzahl ausgeben, musst du also explizit nach int casten.

    Erklärung ist, dass variable Argumentlisten in C nicht typsicher sind. Falls dich der Hintergrund interessiert, kannst du dich mal mit stdarg.h beschäftigen.



  • Du hast ja auch nach dem Mittelwert gefragt.

    Welchen denn? (T3+T4)/2 oder den Mittelwert von allen T3 und allen T4 getrennt?

    Und vergiss float, nimm double.



  • @scimansix

    Leider verstehe ich das mit dem casten nicht ganz.Wenn ich unsigned definiere:

    float erg;
    float erg1;
    float erg2;
    erg2 = arr1[0] + arr1[1];
    fprintf(fpOut,"\nTges=%d", (unsigned)erg2);
    

    bekomme ich nur ganze Werte raus. Nicht aber die Kommastellen.

    @DirkB

    (T3+T4)/2



  • Wenn du Fließkommazahlen ausgeben willst, musst du auch printf sagen das da eine kommt. Dazu ist der Formatstring da und für Fließkommazahlen gibt es %f oder %e oder %g (je nach gewünschtem Format).

    float erg;
    float erg1;
    float erg2;
    erg2 = (arr1[0] + arr1[0])/2.0;
    fprintf(fpOut,"\nTges=%f", erg2);
    

    unsigned ist nur eine Abkürzung für unsigned int.
    Und Integer sind Ganzzahlen, die haben keine Nachkommastellen.



  • Danke euch...Jetzt hat es geklappt !!



  • nochmals:

    Hier rät man Dir dazu, den Typ double statt float zu verwenden.


Anmelden zum Antworten