Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Primzahlenfinder (https://www.delphipraxis.net/135431-primzahlenfinder.html)

KahPee 10. Jun 2009 17:24


Primzahlenfinder
 
Hallo,
im Rahmen eines Schulprojektes haben wir die Aufgabe gehabt einen Primzahlenfinder zu programmieren, dass habe ich auch schon geschafft (also ich versuche nicht mir hier meine Hausaufgaben machen zu lassen!!!), allerdings habe ich jetzt rein hobbymäßig überlegt, diesen Primzahlenfinder so zu programmieren, dass er schneller zum Ergebnis kommt, daher ein paar Modifikationen, allerdings schmeisst er mir jetzt nicht mehr das gewünschte Ergebnis aus. Unten mal den kommentierten Code, ich hoffe ihr könnt den Fehler finden.
Vielen Dank schon mal im Vorraus.

EDIT: hab im Code noch nen bisschen was geändert.. der macht allerdings noch Fehler der erste ist die ausgegebene "25"...
Delphi-Quellcode:
procedure TForm1.BstartClick(Sender: TObject);
var primzahl: array of integer;
    arrlength,a,zahl,rest,anzahl:integer;
    prim: boolean;
begin
 stop:=false;
 LBprimzahlen.Items.Clear;
 setlength(primzahl,10000);
 arrlength:=9999;
 anzahl:=0;
 primzahl[0]:=1;
 primzahl[1]:=2;
 a:=-1;
 zahl:=2;
 repeat

  a:=-1;
   repeat

     a:=a+1;
     prim:=true;
     showmessage('a:'+InttoStr(a)+' primzahl[a]:'+InttoStr(primzahl[a])+' zahl:'+Inttostr(zahl));
     {diese zeile ist nur zum Fehlerfinden wichtig, beim endgültigen Programm soll sie auskommentiert werden}

      if (zahl=primzahl[a]) or (zahl<primzahl[a]) or (primzahl[a]=1) then
        begin
         showmessage('zahl ist gleich primzahl[a] oder zahl ist kleiner primzahl[a]');    //auch diese Zeile nur zum Fehlerfinden
        end
       else
        begin
         rest:=zahl MOD primzahl[a];
         if rest=0 then                 //wenn der rest=0 ist handelt es sich nicht um eine Primzahl
          begin
           prim:=false;
           break;
         end;
      end;
      {bis hier muss sich die Schleife mit allen gepspeicherten Primzahlen wiederholen,
      nur wenn der Rest nie 0 ist handelt es sich um eine Primzahl}
    until primzahl[a]>=sqrt(zahl);
    {wenn die höchste getestete Zahl kleiner als die Wurzel der getesteten Zahl ist kann die Abfrage
    abgebrochen werden}

   if prim=true then   //wenn es eine Primzahl ist..
   begin
    LBprimzahlen.Items.add(InttoStr(zahl)); //.. die Zahl der Liste zuweisen
    anzahl:=anzahl+1;                       //.. den Counter der Primzahlenanzahl erhöhen
    Lamount.Caption:=InttoStr(anzahl);      //.. die Primzahlenanzahl ausgeben
    if arrlength=anzahl+1 then
     begin
      arrlength:=arrlength+10000;
      SetLength(primzahl,arrlength);
    end;                                    //.. die Primzahl dem Array der Primzahlen zuweisen
    primzahl[a+1]:=zahl;
   end;


   if zahl>2 then
   //falls Zahl höher als zwei nur noch bei ungeraden Zahlen testen
    begin
     zahl:=zahl+2;
    end
   else if zahl=2 then
    begin
     zahl:=zahl+1;
   end;
   application.processmessages;          //Zugriff eines anderen Buttons ermöglichen welcher Stop auf True setzt
 until stop=true;

end;

Klaus01 10. Jun 2009 20:22

Re: Primzahlenfinder
 
Guten Abend,

vergleiche einmal Dein Array PrimZahlen mit der Ausgabe
in der Listbox. In dem Primzahlenarray sind nicht alle
Primzahlen vorhanden.

Grüße
Klaus

KahPee 11. Jun 2009 08:51

Re: Primzahlenfinder
 
Ah VIelen Dank

ich hab den Fehler gefuden ich muss einfach diese Zeile:
Delphi-Quellcode:
primzahl[a+1]:=zahl;
durch
Delphi-Quellcode:
primzahl[anzahl]:=zahl;
dann noch anzahl noch nen bisschen anpassen. Vielen Dank jetzt läuft es.

mgf KahPee


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz