AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Primzahlenfinder

Ein Thema von KahPee · begonnen am 10. Jun 2009 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
Benutzerbild von KahPee
KahPee

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

Primzahlenfinder

  Alt 10. Jun 2009, 18:24
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;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Primzahlenfinder

  Alt 10. Jun 2009, 21:22
Guten Abend,

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

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

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

Re: Primzahlenfinder

  Alt 11. Jun 2009, 09:51
Ah VIelen Dank

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

mgf KahPee
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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