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|PlatzThx@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
-
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 WertDeshalb 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 ?