Zu 1. Schreib eine Funktion myrand() die ungefähr so aussueht,
wobei (..) den Bereich definieren, multiplizieren mit 4 verletzt ev. den Bereich, also lieber gleich an der Basis ansetzen.
Delphi-Quellcode:
funtion myrand(..): integer;
begin
repeat
result := random(...);
until result mod 4 = 0;
end.
Das Laufzeit-Verhalten dieser Funktion ist vom Zufall abhängig. Die
Terminiertheit kann für diese Funktion nicht bewiesen werden. Damit birgt sie die theoretische Gefahr eines Programm-Absturzes. In der Praxis wird sie meist in Sekundenbruchteilen ein korrektes Ergebnis liefern. In größeren Systemen sollten derartige Algorithmen vermieden werden. Stattdessen kann die Funktion auch mit konstantem Laufzeitverhalten (O(1)) implementiert werden:
Delphi-Quellcode:
funtion MyRand(Range: Integer): Integer;
var
DividedRange: Integer;
begin
DividedRange := Range div 4;
Result := Random(DividedRange) * 4;
end;