Einzelnen Beitrag anzeigen

Jan13490

Registriert seit: 10. Mai 2007
3 Beiträge
 
#5

Re: Primzahlen ermitteln?

  Alt 10. Mai 2007, 16:03
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]
  Mit Zitat antworten Zitat