Registriert seit: 31. Mai 2009
1.198 Beiträge
Turbo Delphi für Win32
|
AW: Primzahlen
15. Okt 2010, 16:29
Um bei deinem Code zu bleiben und weiters da du noch am Lernen der Sprache bist, hier ein paar nützliche Tipps
Delphi-Quellcode:
function IsPrime(a: integer): Boolean;
var
b, i: integer;
begin
if a <= 1 then
Result := False // Anmerkung: Result entspricht "IsPrime" (Funktionsname) und ist somit der Rückgabewert (hence result!)
else
begin
b := a;
Result := True;
while b > 2 do // hier lag der Fehler, der dir ja schon aufgefallen ist...
begin
b := b - 1;
i := a mod b;
if i = 0 then // setzt den Rückgabewert wieder auf null (ist keine Primzahl) wenn ohne Rest teilbar
begin
Result := False;
Break; // break bricht die aktuelle Schleife ab; Exit verlässt eine Function/Procedure
end;
end;
end;
end;
Delphi-Quellcode:
(* Mein Senf; musst du dir nicht geben... *)
function IsPrime2( X: Integer ): Boolean;
var
D: Integer;
begin
{
Die Wahrscheinlichkeit, dass bei einer Divison mit einem kleinen Divisor der Rest 0 ist, ist größer
als bei einem großen Divisor - folglich lassen wir denn Divisor von 2 bis (x-1) steigen und nicht umgekehrt
@Forum - Kann einer diesen Gedankenvorgang bestätigen, bin mir iwie gar nicht mehr so sicher =|
(7 Dosen Energydrinks.. Konzentration lässt nach xD)
}
Result := False;
if X > 2 then
begin
D := 2;
repeat
if X mod D = 0 then
Exit; // Brich die ganze Funktion ab (Rückgabewert ist False -> Siehe erste Zeile)
inc( D ); // inc macht folgendes --> "D := D + 1" (ist eine Procedure, die eine Variable entgegen nimmt)
until D = X;
Result := True;
end;
end;
MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
Geändert von Aphton (15. Okt 2010 um 16:32 Uhr)
|