![]() |
AW: Niedrigsten Werte in Array finden
[OT]komplett gestrichen[/OT]
Gruß K-H |
AW: Niedrigsten Werte in Array finden
Die ganze Prozedur ist allerdings noch nicht eindeutig für einen Algorithmus spezifiziert! Warum wird zB nicht die 7 in Geschichte sondern die in Englisch gestrichen? Weiter: Wie soll der Fall behandelt werden, wenn in den 11 Fächern zB 5-mal der Minimalwert in verschiedenen Fächern vorkommt?
|
AW: Niedrigsten Werte in Array finden
Scheint egal zu sein, wenn es nur darum geht die Gesamtpunktzahl zu maximieren.
1. Nimm von jedem Fach die beiden schlechtesten Semester. 2. Bilde eine Gesamtmenge aus den Ergebnissen von 1. 3. Wähle die vier schlechtesten aus dieser Gesamtmenge.
Delphi-Quellcode:
type
TSpinArr = array of TSpinEdit; procedure Tausche(var A, B: TSpinEdit); var T: TSpinEdit; begin T := A; A := B; B := T; end; function ErmittleSchlechteste(const AEditArr: TSpinArr; ACount: Integer): TSpinArr; var i1, i2, n: Integer; Item: TSpinEdit; begin SetLength(Result, ACount); n := 0; for i1 := Low(AEditArr) to High(AEditArr) do begin Item := AEditArr[i1]; if n < ACount then begin Result[n] := Item; Inc(n); end else begin for i2 := 0 to ACount - 1 do begin if Item.Value < Result[i2].Value then Tausche(Item, Result[i2]); end; end; end; SetLength(Result, n); end; function Gesamtmenge(const A1, A2: TSpinArr): TSpinArr; var i, n1, n2: Integer; begin n1 := Length(A1); n2 := Length(A2); SetLength(Result, n1 + n2); for i := 0 to n1 - 1 do Result[i] := A1[i]; for i := 0 to n2 - 1 do Result[n1 + i] := A2[i]; end; var FFach: array of record Name: string; Semester: TSpinArr; end; X1, X2: TSpinArr; i: Integer; begin SetLength(FFach, 11); FFach[0].Name := 'Mathematik'; SetLength(FFach[0].Semester, 4); FFach[0].Semester[0] := SpinEditFach1Semester1; FFach[0].Semester[1] := SpinEditFach1Semester2; FFach[0].Semester[2] := SpinEditFach1Semester3; FFach[0].Semester[3] := SpinEditFach1Semester4; {usw.} SetLength(X1, 0); for i := Low(FFach) to High(FFach) do begin X2 := ErmittleSchlechteste(FFach[i].Semester, 2); X1 := Gesamtmenge(X1, X2); end; X1 := ErmittleSchlechteste(X1, 4); end; |
AW: Niedrigsten Werte in Array finden
Ich würde die eine Liste aller SpinEdits erstellen und sortieren und dann einfach die SpinEdits, von unten beginnend, so lange den Regeln entsprechend (maximal 2 pro Fach) einfärben, bis 4 eingefärbt sind.
Delphi-Quellcode:
Die Funktion 'KannStreichen' prüft, ob in einem Fach nicht schon zwei Edits gestrichen wurden.
Gestrichen := 0;
for i := low(SpinEditListe) to high(SpinEditListe) do if KannStreichen(SpinEditListe[i]) then begin FaerbeDasSpinEditEin(SpinEditListe[i]); inc(Gestrichen); if Gestrichen = 4 then break; end; |
AW: Niedrigsten Werte in Array finden
Warum haltet Ihr Euch mit diesen SpinEdits auf?
Die Daten
Delphi-Quellcode:
gehören in eine Liste oder Array und gut ist.
tMyrec=record
Fach : string[20]; Lfnr : integer; Punkte: integer; end; Da kann man sortieren und strichen wie man lustig ist, und hinterher gibt man in Superduperklickibuntlistenspindoctor aus. Auch wenn es "nur" für die Schule ist, die Trennung von Daten und Oberfläche kann man nicht früh genug lernen. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz