Um Punktezahlen in einen Schulnoten-System anzeigen zu lassen, fand ich eine Formel:
- (Erreichte Punktzahl * 5) / Gesatmmtpunktzahl - 6
Das Minus sollte man sich weg denken - ich habe es einfach mal duch (-a)-(-b) verschwinden lassen ;D.
Mathe ist nicht deine Stärke
Code:
[Schulnote] = 6 - [Erreichte Punktzahl] / [Gesamtpunktzahl] * 5
Wenn du schon so eine Formel hast, warum schreibst du die dann nicht genau so in Delphi hin?
Delphi-Quellcode:
function GetSchulnote( ErreichtePunktzahl, GesamtPunktzahl : Integer ) : Integer;
begin
Result := 6 - Round( ErreichtePunktzahl / GesamtPunktzahl * 5 );
end;
In deinem Programm integriert dann
Delphi-Quellcode:
// panel22 - Schulnote
// panel5 - Erreichte Punktzahl
// panel6 - Gesamt Punktzahl
panel22.caption:=IntToStr( GetSchulnote( StrToInt( panel5.caption ), StrToInt( panel6.caption ) ) );
und wenn du den Komponenten passende Namen gibst
Delphi-Quellcode:
// Irgendwie keine Kommentare nötig ... toll
Schulnote_Panel.Caption :=
IntToStr(
GetSchulnote(
StrToInt( ErreichtePunktzahl_Panel.Caption ),
StrToInt( GesamtPunktzahl_Panel.Caption ) ) );
und wenn du deiner Form ein paar Properties spendierst
Delphi-Quellcode:
type
TForm1 = class( TForm )
Schulnote_Panel : TPanel;
ErreichtePunkte_Panel : TPanel;
GesamtPunktzahl_Panel : TPanel;
private
FErreichtePunkte : Integer;
FGesamtPunktzahl : Integer;
FSchulnote : Integer;
procedure SetErreichtePunkte( const Value : Integer );
procedure SetGesamtPunktzahl( const Value : Integer );
procedure SetSchulnote( const Value : Integer );
procedure ZeigeDaten;
public
property Schulnote : Integer read FSchulnote write SetSchulnote;
property ErreichtePunkte : Integer read FErreichtePunkte write SetErreichtePunkte;
property GesamtPunktzahl : Integer read FGesamtPunktzahl write SetGesamtPunktzahl;
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.SetErreichtePunkte( const Value : Integer );
begin
FErreichtePunkte := Value;
ZeigeDaten;
end;
procedure TForm1.SetGesamtPunktzahl( const Value : Integer );
begin
FGesamtPunktzahl := Value;
ZeigeDaten;
end;
procedure TForm1.SetSchulnote( const Value : Integer );
begin
FSchulnote := Value;
ZeigeDaten;
end;
procedure TForm1.ZeigeDaten;
begin
ErreichtePunkte_Panel.Caption := IntToStr( ErreichtePunkte );
GesamtPunktzahl_Panel.Caption := IntToStr( GesamtPunktzahl );
if Schulnote < 1 then
Schulnote_Panel.Caption := ''
else
Schulnote_Panel.Caption := IntToStr( Schulnote );
end;
dann brauchst du nur noch
Delphi-Quellcode:
// das ist ja lesbar
Schulnote := GetSchulnote( ErreichtePunktzahl, GesamtPunktzahl );
schreiben und fertig.
Wenn du dann feststellst, dass es für die
Schulnote einen Schlüssel gibt (wieviel Prozent ergibt welche Note), dann änderst du einfach
nur die Funktion zur Ermittlung der Schulnote.
Delphi-Quellcode:
function GetSchulnote_MeineIdee( ErreichtePunktzahl, GesamtPunktzahl : Integer ) : Integer;
begin
Result := 6 - Round( ErreichtePunktzahl / GesamtPunktzahl * 5 );
end;
function GetSchulnote_BerufsKolleg( Prozent : double ) : Integer;
begin
if Prozent < 30/100 then
Result := 6
else if Prozent < 50/100 then
Result := 5
else if Prozent < 67/100 then
Result := 4
else if Prozent < 81/100 then
Result := 3
else if Prozent < 92/100 then
Result := 2
else
Result := 1;
end;
function GetSchulnote( ErreichtePunktzahl, GesamtPunktzahl : Integer ) : Integer;
begin
Result := GetSchulnote_BerufsKolleg( ErreichtePunkte / GesamtPunktzahl );
end;
und bist schon fertig