Minimalen und Maximalen Wert bestimmen



  • Interessanter fände ich die Anwort auf die Frage:
    An welcher Stelle ist das Verhalten undefiniert?



  • Die while Schleife mit Überprüfung auf 0 ist wohl nicht so toll, da das ein möglicher Wert für die Eingabe sein kann - denke ich mal.



  • cvcv schrieb:

    Die while Schleife mit Überprüfung auf 0 ist wohl nicht so toll, da das ein möglicher Wert für die Eingabe sein kann - denke ich mal.

    rustyoldguy schrieb:

    Deshalb empfehle ich, die Anzahl der Messwerte einer Stichprobe immer extra in einer Variablen festzuhalten.



  • Bringt nur nix wenn sie in der entsprechenden Schleife nie verwendet wird.


  • Mod

    Alternativvorschlag: Wir sparen uns den Quatsch mit dem Array und machen einfach alles in einem Rutsch. Denn was bringt es uns, die Werte in einem Array zwischenzuspeichern, wenn wir hinterher sowieso nur über das Array iterieren? Das einzige, was uns das spart, ist über die Standardabweichung nachzudenken. Aber ein bisschen Hirnschmalz (oder in diesem Fall zugegebenermaßen: Schlaue Bücher) spart viel Programmieraufwand:

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
      double value;
      unsigned int N = 0;
      double mean = 0;
      double m2 = 0;
      double min, max;
    
      while (scanf("%lf", &value) == 1)
        {
          ++N;
          double delta = value - mean;
          mean += delta / N;
          m2 += delta*(value - mean);
    
          if (N==1) min = max = value;
          else
            {
              if (min > value) min = value;
              if (max < value) max = value;
            }
        }
    
      if (N>0)
        {
          double S2 = m2 / (N - 1); 
          double lg1 = lgamma(0.5*N);
          double lg2 = lgamma((0.5*(N-1)));
          double Kn = sqrt(2./(N-1))*exp(lg1 - lg2);
          double sdev = Kn * sqrt(S2); 
    
          printf("\n\nAnzahl der Messwerte: %u",  N);
          printf("\nDurchschnitt........: %f",  mean);
          printf("\nMinimalwert.........: %f",  min);
          printf("\nMaximalwert.........: %f",  max);
          printf("\nRange...............: %f",  max - min);
          printf("\nStandardabweichung..: %f\n",  sdev);
        } 
    }
    

    edit: Niemals Code von Leuten kopieren, die nicht einmal printf beherrschen...



  • Der length modifier bei Gleitkommazahlen scheint gerade sehr en vogue zu sein... 🙂


  • Mod

    Furble Wurble schrieb:

    Der length modifier bei Gleitkommazahlen scheint gerade sehr en vogue zu sein... 🙂

    Nein, copy&Paste hier aus dem Forum. Ich sollte wohl besser aufpassen, wessen Code ich kopiere. Dass Leute nicht einmal printf richtig können...



  • SeppJ schrieb:

    Furble Wurble schrieb:

    Der length modifier bei Gleitkommazahlen scheint gerade sehr en vogue zu sein... 🙂

    Nein, copy&Paste hier aus dem Forum.

    Das war mir klar, dass das C&P war - ist ja sehr offensichtlich.

    SeppJ schrieb:

    Dass Leute nicht einmal printf richtig können...

    Der modifier ist übrigens auch nur überflüssig und nicht die geheimnisvolle UB...
    ("... has no effect on a following a, A, e, E, f, F, g, or G conversion specifier.")



  • Wie gesagt:

    Furble Wurble schrieb:

    Der modifier ist übrigens auch nur überflüssig und nicht die geheimnisvolle UB...

    while(messwerte[zaehler] != 0)
    


  • cvcv schrieb:

    Wie gesagt:

    Furble Wurble schrieb:

    Der modifier ist übrigens auch nur überflüssig und nicht die geheimnisvolle UB...

    while(messwerte[zaehler] != 0)
    

    Ahh. Ja. Das kann in der Tat zum Problem werden wenn keine 0 im Array ist..,


Anmelden zum Antworten