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;