![]() |
Niedrigsten Werte in Array finden
Hallo,
wir haben in Informatik ein Projekt, was ein Abitur-Rechner/Planer werden soll. Nun haben wir eine Form, welche aus 11(Fächer)x4(Semester in der Oberstufe) SpinEdits besteht. Unser Ziel ist es, die 4 Semester mit der schlechtesten Note (die Noten gehen von 0-15 Punkten), rot zu färben (die SpinEdit). Nur haben wir überhaupt keine Ahnung, wie man diese Werte findet. Die Werte sollen ja nicht verschoben werden (dh immer noch in den SpinEdits stehen). Eine zusätzliche Regel ist, das pro Fach maximal 2 der 4 Semester gestrichen werden dürfen. Wir bitten um eure Hilfe! :oops: |
AW: Niedrigsten Werte in Array finden
Hallo und Willkommen in der DP :dp:,
nicht sehr schön, sollte aber funktionieren: erstellt Euch ein Array oder eine Liste der SpinEdits und sortiert diese nach ihrem Inhalt. Die ersten (oder letzten, je nach Sortierung) 4 könnt Ihr dann direkt ansprechen. |
AW: Niedrigsten Werte in Array finden
Soweit waren wir schon. Die Frage ist ja, woher weiß ich dann hinterher,
in welcher SpinEdit die Werte standen? |
AW: Niedrigsten Werte in Array finden
Die stehen doch im Array?
|
AW: Niedrigsten Werte in Array finden
Wie mach ich das?
Ich weiß nicht wie man das sortiert, und dann anspricht -.- |
AW: Niedrigsten Werte in Array finden
Delphi-Quellcode:
Den einzelnen Array-Elementen weist Du nun z.B. im FormCreate die entsprechenden SpinEdits zu. Auf Knopfdruck oder wann auch immer sortierst Du nun das Array. Angedeuteter Bubblesort:
type
TSpinEditArray = array[0..10] of TSpinEdit; TDeinForm = class(TForm) ... private FSpinEdits: TSpinEditArray; ... end;
Delphi-Quellcode:
for i := Low(FSpinEdits) to High(FSpinEdits) - 1 do
if FSpinEdits[i].Value > FSpinEdits[i + 1].Value then |
AW: Niedrigsten Werte in Array finden
Vieleicht reden wir aneinander Vorbei.
In der Praxis sieht es so aus (beispielsweise): Mathematik: 12 / 10 / 9 / 12 Geschichte: 9 / 10 / 7 / 5 Englisch: 11 / 7 / 13 / 11 Physik: 11 / 5 / 6 / 9 Nun soll das Programm die 4 geringsten Werte finden, und diese rot einfärben. Dabei dürfen in jeder "Zeile" bzw. einem Fach NUR bis zu 2 Bewertungen gestrichen werden. Das Ergebnis sollte dann so in der Richtung aussehen: Mathematik: 12 / 10 / 9 / 12 Geschichte: 9 / 10 / 7 / 5 Englisch: 11 / 7 / 13 / 11 Physik: 11 / 5 / 6 / 9 |
AW: Niedrigsten Werte in Array finden
Sortieren ist fast schon Overkill.
Pseudocode:
Code:
So findest du das Minimum. Jetzt solltest du dir zusätzlich zum minimalen Wert natürlich noch den Index des Elements merken, um das zugehörige Edit zu rauszufinden.
MinWert := Wert des 1. Element
Gehe alle Elemente durch: Wenn Wert des aktuellen Elements < MinWert: MinWert := Wert des aktuellen Elements Anschließend entfernst du das gefundene Element und führst den Algorithmus erneut aus, um das „zweitminimalste“ Element zu finden. Edit: Oder du implementierst einen Selection-Sort, der nach dem 4. Durchlauf abgebrochen wird. Ist eigentlich fast dasselbe... |
AW: Niedrigsten Werte in Array finden
Ich habe das eher so verstanden für jedes Fach das schlechteste Semester zu finden.
Wenn nur 1 aus n gefragt ist, kann man sich das sortieren auch sparen:
Delphi-Quellcode:
procedure MarkiereSchlechtesteNote(const AEditArr: array of TSpinEdit);
var i: Integer; Item: TSpinEdit; begin Item := nil; for i := Low(AEditArr) to High(AEditArr) do begin if (Item = nil) or (Item.Value > AEditArr[i].Value) then Item := AEditArr[i]; AEditArr[i].Color := clWindow; end; if Assigned(Item) then Item.Color := clRed; end; {Fach1} MarkiereSchlechtesteNote([SpinEditFach1Semester1, SpinEditFach1Semester2, SpinEditFach1Semester3, SpinEditFach1Semester4]); {Fach2} MarkiereSchlechtesteNote([SpinEditFach2Semester1, SpinEditFach2Semester2, SpinEditFach2Semester3, SpinEditFach2Semester4]); {usw.} |
AW: Niedrigsten Werte in Array finden
Naja es ist so in Thüringen,
das wir am Ende das Abis 4 Semester "streichen" müssen. Logischerweise streicht man die schlechtesten Bewertungen. Da wir hier 4 Semester pro Fach haben (2 Jahre Oberstufe), und man nicht ein Fach komplett streichen darf, gibt es die Regel, das man pro Fach nur maximal 2 Semester streichen kann. Es kann natürlichauch nur eins gestrichen werden. Die effektivste "Streichung" habe ich unten mal an einem Beispiel demonstriert. Zitat:
Fazit: *schlechtesten Fächer sollen gestrichen werden *11 Fächer mit je 4 Semestern (Halbjahresnoten) *nur maximal 2 Semester pro Fach "streichbar" *Ziel: maximale Gesamtpunktzahl :shock::shock::shock::shock::shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 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