Thema: Primzahlen

Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#12

AW: Primzahlen

  Alt 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)
  Mit Zitat antworten Zitat