Zitat:
Delphi-Quellcode:
repeat
iSilber := Random(6)
until iSilber > 0; // Nullwert verhindern
Mach das lieber so:
iSilber := Random(6) + 1;
, dann brauchst Du keine Schleife.
Ansonsten würde ich mir einen Record für die Währungen definieren sowie 2 Umrechnungsfunktionen, ausgehend von der kleinsten Währung. Das könnte dann so aussehen:
Delphi-Quellcode:
(* Im Normalfall genügt es, diese Typdefinition direkt unter "implementation" zu schreiben.
Es handelt sich hierbei um eine Struktur mit 4 Feldern für die jeweilige Währung.
Angesprochen werden können diese Felder über die Punkt-Notation (s.u.) *)
type
TMoneyRec = record
iKreuzer,
iHeller,
iSilber,
iDukaten: Cardinal;
end;
//Rechnet die angegebenen Kreuzer in Währungen um und gibt das Ergebnis als Record zurück
function KreuzerToMoneyRec(cKreuzer: Cardinal): TMoneyRec;
begin
//Beispiel: 1234 wurden übergeben
Result.iKreuzer := cKreuzer mod 10; // = 4 Kreuzer (Rest bei Teilung durch 10)
//jetzt wird erst durch 10 geteilt (= 123)
//und davon wieder der Rest bei erneuter Teilung durch 10 ermittelt (= 3 Heller)
Result.iHeller := cKreuzer div 10 mod 10;
//nun analog das Gleiche, allerdings wird jetzt durch 100 geteilt
Result.iSilber := cKreuzer div 100 mod 10;
//zum Schluss brauchen wir keinen Rest mehr, das Ergebnis der Division ergibt die Dukaten
Result.iDukaten := cKreuzer div 1000;
end;
//Rechnet den übergebenen Record wieder in Kreuzer zurück
//Rechenweg umgekehrt zu oben
function MoneyRecToKreuzer(aRec: TMoneyRec): Cardinal;
begin
Result := aRec.iKreuzer +
aRec.iHeller * 10 +
aRec.iSilber * 100 +
aRec.iDukaten * 1000;
end;
P.S.: Willkommen in der
DP