Höchstwert / Tiefstwert ermitteln



  • Hi@all

    ich habe 7 Eingabefelder in welche ich einen Wert eingebe, nach Eingabe des letzten Wertes soll automatisch der Höchste und der Niedrigste wert ermittelt werden, es soll die Summe abzüglich dieser beiden Werte berechnet werden und mit den anderen aus der Datenreihe verglichen werden um somit die Beste Wertung zu ermitteln.

    Hintergrund:
    Eingabemaske für eine Sportauswertung mit Punktevergabe durch 7 Kampfrichter (5 gehen in die Wertung)

    Kann mir jemand einen Ansatz dazu geben.

    Ich benutze eine Datentabelle:
    Startnummer|Teilnehmer|Disziplin|W1|W2|W3|W4|W5|W6|W7|Summe|Platz

    Thx@all



  • Hallo

    Teil dein Problem doch erstmal in Teilprobleme auf :
    * Den größten Wert aus einer Reihe bestimmen
    * Den kleinsten Wert aus einer Reihe bestimmen
    * Summe der Werte berechnen, die weder dem größten noch dem größten entsprechen
    * Vergleich Summe mit größtem und kleinstem Wert
    Du wirst sehen das du nur ein paar Schleifen und Bedingungen brauchst.

    Konkrete Hilfe wirst du erst bekommen können, wenn du die konkreten Datentypen deiner Datentabelle angibst und was genau du mit "mit den anderen aus der Datenreihe verglichen werden um somit die Beste Wertung zu ermitteln" meinst.

    bis bald
    akari



  • @akari

    Das ist mir soweit schon klar, aber ich weiß halt nicht so recht wie.

    * Den größten Wert aus einer Reihe bestimmen
    * Den kleinsten Wert aus einer Reihe bestimmen
    * Summe der Werte berechnen, die weder dem größten noch dem größten entsprechen
    * Vergleich Summe mit größtem und kleinstem Wert

    Deshalb wollte ich gern mal einen Ansatz haben.

    was genau du mit "mit den anderen aus der Datenreihe verglichen werden um somit die Beste Wertung zu ermitteln" meinst.

    Es soll eine Platzierung ermittelt werden.

    Thx@all



  • z.B. ganz trivial mit bubble sort



  • Hallo

    Eigentlich solltest du solche trivialen Algorithmen schon beherschen, bevor du mit der hochkomplexen VCL des Builders GUI-Programme für offizielle Wettkämpfe schreibst...

    Ich zeige dir mal das Vorgehen, um die höchste Zahl in einem Array zu finden. Ich hoffe damit kannst du dann doch selbstständig die anderen Punkte angehen.

    int Zahlen[7]; // Array mit sieben Zahlen, aus denen die höchste gezogen werden soll
    ... // Zahlen in das Array zuweisen
    int Max = 0; // In dieser Variable soll die höchste Zahl stehen
    for (int Lv = 0; Lv < 7; Lv++)
      if (Zahlen[Lv] > Max)
        Max = Zahlen[Lv];
    // In Max steht nun die höchste Zahl
    

    (Experten verwenden natürlich std::max, aber gerade du solltest aus der manuellen Methode mehr lernen)

    Und für den letzten Punkt brauchst du nichtmal Bubblesort, ein noch einfacheres Sortieren-durch-Auswählen reicht vollkommen aus.

    bis bald
    akari



  • @akari
    Vielen Dank erst mal, da bin ich schon ein bischen vorangekommen, sicher nicht die feine Art aber, für mich funktioniert es erst mal so.

    // Array mit sieben Zahlen, aus denen die höchste gezogen werden soll
     int Wertung[7];
    
     // Zahlen in das Array zuweisen
     Wertung[0]=Table1->FieldByName("W1")->Value;
     Wertung[1]=Table1->FieldByName("W2")->Value;
     Wertung[2]=Table1->FieldByName("W3")->Value;
     Wertung[3]=Table1->FieldByName("W4")->Value;
     Wertung[4]=Table1->FieldByName("W5")->Value;
     Wertung[5]=Table1->FieldByName("W6")->Value;
     Wertung[6]=Table1->FieldByName("W7")->Value;
    
     int Max 		= 0; 		// In dieser Variable soll die höchste Zahl stehen
     int Min 		= 100; 		// In dieser Variabel soll die niedrigste Zahl stehen
     int Summe 		= 0;		// Ergebnis
     int MaxFeld 	= 0;		// Feld mit MaxWert
     int MinFeld 	= 0;		// Feld mit MinWert
     int Platz 		= 0;		// Platzierung
    
     // Höchst- und Tiefstwert ermitteln
     for (int i = 0; i < 7; i++)
     {
      if (Wertung[i] >= Max)
      {
       Max = Wertung[i]; // In Max steht nun die höchste Zahl
       MaxFeld = i;
      }
      if (Wertung[i] <= Min)
      {
       Min = Wertung[i]; // In Min steht nun die niedrigste Zahl
       MinFeld = i;
      }
      Summe = Summe + Wertung[i]; // Alle Werte Addieren
     }
    
     // Höchst- und Tiefstwert (DBGrid)in der Tabelle markieren
    
     // Höchst- und Tiefstwert in den Eingabefeldern markieren
     if (MaxFeld == 0 || MinFeld == 0) { DBMemo2->Color=clRed; } else { DBMemo2->Color=clBtnFace; }
     if (MaxFeld == 1 || MinFeld == 1) { DBMemo3->Color=clRed; } else { DBMemo3->Color=clBtnFace; }
     if (MaxFeld == 2 || MinFeld == 2) { DBMemo4->Color=clRed; } else { DBMemo4->Color=clBtnFace; }
     if (MaxFeld == 3 || MinFeld == 3) { DBMemo5->Color=clRed; } else { DBMemo5->Color=clBtnFace; }
     if (MaxFeld == 4 || MinFeld == 4) { DBMemo6->Color=clRed; } else { DBMemo6->Color=clBtnFace; }
     if (MaxFeld == 5 || MinFeld == 5) { DBMemo7->Color=clRed; } else { DBMemo7->Color=clBtnFace; }
     if (MaxFeld == 6 || MinFeld == 6) { DBMemo8->Color=clRed; } else { DBMemo8->Color=clBtnFace; }
    
     // Höchst- und Tiefstwert abziehen und Ergebnis ermitteln
     Summe = Summe - Max - Min;
    
     // Ergebnis eintragen
     Table1->FieldByName("Summe")->Value=Summe; // Ergebnis in eintragen
     Panel2->Caption=Summe;
     // Platzierung ermitteln
    
     // Platzierung eintragen
     Table1->FieldByName("Platz")->Value=Platz; // Ergebnis in eintragen
     Panel2->Caption=Platz;
    
     // Eingabefelder sperren
     DBMemo2->Enabled=false;
     DBMemo3->Enabled=false;
     DBMemo4->Enabled=false;
     DBMemo5->Enabled=false;
     DBMemo6->Enabled=false;
     DBMemo7->Enabled=false;
     DBMemo8->Enabled=false;
    

    Frage: Wie kann ich jetzt im DBGrid die Zellen mit dem MAX/MIN Wert ebenso farblich kennzeichnen, wie in den Einagbefeldern und wie kann ich anschließend nun die Platzierung ermitteln ?


Anmelden zum Antworten