![]() |
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 |
Re: Primzahlen ermitteln?
Such mal nach dem Sieb des Erathostenes (evtl. noch ein "h" :mrgreen: )
|
Re: Primzahlen ermitteln?
Zitat:
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... |
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 ![]() |
Re: Primzahlen ermitteln?
hier ist mein quelltext:
Delphi-Quellcode:
[edit=Matze]Code in Delphi-Tags eingefasst. Das nächste Mal bitte selbst machen. Mfg, Matze[/edit]
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. |
Re: Primzahlen ermitteln?
Delphi-Quellcode:
// ohh is nur wenn eine Zahl eingegebn ist, aber das umzuändern is sicherlich net schwer!
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; |
Re: Primzahlen ermitteln?
Könntet ihr 2 eure Codes bitte in Delphi-Tags einschließen? :zwinker:
|
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.
|
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. |
Re: Primzahlen ermitteln?
Wie äussert sich der Fehler denn?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz