Delphi-Quellcode:
function pruefen(n: int64):boolean;
var x: int64;
begin
result := true;
x := round(n/2);
if n >= 2
then
begin
while x > 1
do
begin
if (n
mod x) = 0
then
begin
result := false;
break;
end;
dec(x);
end;
end
else
result := false;
end;
procedure zerlegen(n:int64);
var x: int64;
begin
x := 2;
while (n
mod x <> 0)
do
x := x+1;
if length(Form1.Label2.Caption) > 0
then
Form1.Label2.Caption := Form1.Label2.Caption + '
*';
Form1.Label2.Caption := Form1.Label2.Caption + inttostr(x);
if not pruefen(n
div x)
then
zerlegen(n
div x);
m := m*x;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
m := 1;
Label2.Caption := '
';
if pruefen(strtoint(edit1.Text))
then
Label2.Caption := Edit1.Text + '
ist eine Primzahl!'
else
begin
zerlegen(strtoint(edit1.Text));
Label2.Caption := Label2.Caption + '
*' + inttostr(strtoint(edit1.Text)
div m);
end;
end;
So würd ichs machen.
Ich hab mir den Algo an sich nicht angeschaut, wie effektiv und richtig der ist
Was hab ich gemacht: Oben in der zerlegen-Funktion hab ich die Variable p rausgenommen und gleich result verwendet. Dann hab ich alle Einrückungsebenen konsequent durchgezogen, Alle Anfangsbuchstaben von Objekten groß geschrieben, Leerzeichen vor und hinter jedes ":=" gesetzt und auch vor und hinter jedes "+" in den Stringzusammensetzungen.
//edit1: Zusätzlich noch hinter jedem ":" in den Variablendeklarationen und den Parameterangaben ein Leerzeichen eingefügt.
//edit2: Leerzeichen rund um die <, >, <=, >= und <>-Vergleiche eingefügt.
Julian J. Pracht