Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Primzahlen ermitteln? (https://www.delphipraxis.net/91830-primzahlen-ermitteln.html)

Jan13490 10. Mai 2007 15:04


Primzahlen ermitteln?
 
Hi Leute,
wollte mal ein Programm basteln, was Primzahlen finden kann.(Bin delphi anfänger)
Ich wollte es so machen, dass ich eine Kleinste und eine größte Zahl variabel eingeben kann und der PC sucht mir dann die Primzahlen zwischen den beiden Zahlen heraus.
Nur leider weiß ich überhaupt nicht wie ich das machen könnte.
Hat einer vllt sowas schon mal programmiert? Hat einer den quelltext?

Gruß jan

fLaSh11 10. Mai 2007 15:07

Re: Primzahlen ermitteln?
 
Such mal nach dem Sieb des Erathostenes (evtl. noch ein "h" :mrgreen: )

sakura 10. Mai 2007 15:07

Re: Primzahlen ermitteln?
 
Zitat:

Zitat von Jan13490
wollte mal ein Programm basteln, was Primzahlen finden kann.(Bin delphi anfänger)...Hat einer den quelltext?

Was bringt Dir der fertige Quelltext, welchen Du über die Suche im Forum als auch bei Google oft genug suchst?

Ansonsten sage uns doch mal wie weit Du bist und wo es genau Probleme gibt.

...:cat:...

P.S.: Hört sich sehr nach Hausaufgaben an...

Gremlin 10. Mai 2007 15:11

Re: Primzahlen ermitteln?
 
Hi,

mit Quelltext wird es schwierig werden.
Lieber selbst (am Anfang) schlecht gemacht als gut kopiert.

Für den Anfang benötigst du zwei Eingabefelder für die Bereichseingabe.
Dann könntest du ein Schleifenkonstrukt verwenden, um alle Zahlen des Bereichs zu überprüfen.
Sollte im Prüfvorgang eine Primzahl entdeckt worden sein, dann gib diese aus.

Grüsse G.

PS: Hier sind Informationen über Primzahlen

Jan13490 10. Mai 2007 16:03

Re: Primzahlen ermitteln?
 
hier ist mein quelltext:

Delphi-Quellcode:
unit UNT_Primzahl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFRM_Primzahlenfinder = class(TForm)
    BTN_Rechnen: TButton;
    EDT_zeitausgabe: TEdit;
    LBL_zeitausgabe: TLabel;
    LBX_Prim: TListBox;
    LBL_Primzahlen: TLabel;
    LBL_Primzahl: TLabel;
    BTN_Close: TButton;
    EDT_UG: TEdit;
    EDT_OG: TEdit;
    LBL_UG: TLabel;
    LBL_OG: TLabel;
    procedure BTN_CloseClick(Sender: TObject);
    procedure BTN_RechnenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FRM_Primzahlenfinder: TFRM_Primzahlenfinder;

implementation

{$R *.dfm}

var zeit, uG, oG : longint;
    h,m,s,ms : word;
    sieb: array [2..1000000] of boolean;

//function teileranzahl(zahl:longint):integer;
//var teiler, partnerteiler : longint;
//    anzahl               : integer;
//begin
//  anzahl := 2;
//  teiler := 2 ;partnerteiler := zahl div teiler;
//  while teiler < partnerteiler do
//    begin
//      if zahl mod teiler = 0 then
//        anzahl := anzahl+2;
//      inc(teiler); partnerteiler := zahl div teiler;
//    end;
//  if teiler*teiler = zahl then inc(anzahl);
//  teileranzahl := anzahl;
//end;

//function prim_1(zahl:longint):boolean;
//begin
//  prim_1 := teileranzahl(zahl) = 2;
//end;

procedure TFRM_Primzahlenfinder.BTN_CloseClick(Sender: TObject);
begin
close;
end;

procedure eratosthenes(obG:longint);
var index: longint;

procedure streiche_vielfache(i : longint); {lokal deklarierte procedure, die nur                
                                                                          in der procedure eratosthenes
                                                                          verwendet werden kann }
var k : longint;
begin
  k := i+i;
  while k <= oG do
    begin
      sieb[k] := false;
      k := k+i;
    end;
end;

begin    {eratosthenes}
  for index := 2 to oG do sieb[index] := true;   {initialisieren}
  index := 2;
  while index*index <= oG do
    begin
      if sieb[index] = true then streiche_vielfache(index);
      inc(index);
    end;
end;      {eratosthenes}



procedure TFRM_Primzahlenfinder.BTN_RechnenClick(Sender: TObject);
var //zahl, teiler : integer;
    uG, oG, index : longint;
begin
decodetime(time,h,m,s,ms);
zeit := 1000*(3600*h+60*m+s)+ms;
LBX_Prim.Items.clear;
uG := strtoint(EDT_UG.Text);
oG := strtoint(EDT_OG.Text);

eratosthenes(oG);
for index := uG to oG do
if sieb[index] = true then ;
LBX_Prim.Items.add(inttostr(index));

decodetime(time,h,m,s,ms);
zeit := 1000*(3600*h+60*m+s)+ms-zeit;
EDT_zeitausgabe.text := inttostr(zeit);
end;

end.
[edit=Matze]Code in Delphi-Tags eingefasst. Das nächste Mal bitte selbst machen. Mfg, Matze[/edit]

gekkorist 10. Mai 2007 16:09

Re: Primzahlen ermitteln?
 
Delphi-Quellcode:
Var
prime, x: Integer;
begin

prime := StrToInt(Edit1.text);
x := 1;
//größer als 1 = beginnen
If prime > 1 then
begin
Repeat
x := x + 1;
//gucken ob x einen rest von 0 hat und durch eine zahl die größer als "eingabe" teilbar is"
Until (x > prime div x) or (prime Mod x = 0) ;

if x> prime div x
then
begin
Label1.Caption:=Edit1.text+ ': Ja, Primzahl.' ;
label1.Color :=clgreen;
end

else
begin
Label1.Caption:=Edit1.text +': Nein, keine Primzahl.';
label1.Color :=clred;
end;
end
 // 1 und 0
else
begin
if prime = 1 then
begin
Label1.Caption:='1: Nein, keine Primzahl.' ;
label1.Color :=clred;
end;
if prime=0 then
begin
Label1.Caption:='0 weiss ich nicht :).';
label1.Color :=clred;
end;
end;
// ohh is nur wenn eine Zahl eingegebn ist, aber das umzuändern is sicherlich net schwer!

leddl 10. Mai 2007 16:12

Re: Primzahlen ermitteln?
 
Könntet ihr 2 eure Codes bitte in Delphi-Tags einschließen? :zwinker:

Nikolas 10. Mai 2007 16:13

Re: Primzahlen ermitteln?
 
sieht doch ganz gut aus. Du musst beim Sieb aber nur bis zur Hälfte der Zahlen gehen, weil sonst die vielfach über deiner oberen Grenze liegen. Auch ist das hardgecodete Array nicht schön. Schau dir doch mal dynamische Array an.

Jan13490 10. Mai 2007 16:18

Re: Primzahlen ermitteln?
 
Nur leider blick ich fast selbst durch mein programm nicht mehr durch.
Irgendwo muss da ein Fehler sein, nur ich find den nicht.

Gremlin 10. Mai 2007 21:47

Re: Primzahlen ermitteln?
 
Wie äussert sich der Fehler denn?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:02 Uhr.
Seite 1 von 3  1 23      

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