coole sache, ich kann auch mal helfen!
ich bin auch recht neu in delphi und hab mir 'just for fun'
die aufgabe gestellt sowas zu programmieren. Habs sogar geschafft !
also, du kannst dir den quellcode gerne mal anschauen, ich bin mir aber sicher er ist nicht perfekt, und optimiert erst recht nicht,
außerdem hab ich das für mich gemacht also sind die variablen wahrscheinlich für andere sehhr wenig aussagekräftig, aber wie gesagt es funktioniert.
öhm, in deinem ansatz sieht es so aus als wolltest du die primzahlen in einem memo anzeigen?
Bei mir ist es so das er sie in einer textdatei speichert, in dem ordner in dem sich auch das prog befindet!(erst wenn man das prog beendet)
hoffe ich konnte helfen
Spiderpig
PS nochwas, das prog berechnet die primzahlen von 0-x und nicht von x-y!
Delphi-Quellcode:
unit PrimzahlenI;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 =
class(TForm)
Edit1: TEdit;
Button1: TButton;
Panel1: TPanel;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Memo2: TMemo;
Panel2: TPanel;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Edit2: TEdit;
Button2: TButton;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
maxzahl:integer;
nr, zahl,test:integer;
prim:
array[1..1000001]
of boolean;
//Arrays sind alle false
speicherdat: tstringlist;
pfad:
string;
prufzahl,divv:integer;
janein:boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
try
maxzahl:=strtoint(edit1.text);
//Bereich ist von 0 bis Maxzahl;
repeat //
inc(nr);
// Arrays sind jetzt true
prim[nr]:=true;
// true = Primzahl
until nr=1000001;
//
repeat
inc(zahl);
// Zahl die auf Primzahl sein geprüft werden soll
divv:=1;
// der Teiler der die zahl durch alle kleineren Zahlen als Zahl teilt
repeat
inc(divv);
if zahl
mod divv = 0
then
prim[zahl]:=false;
//false bedeutet ist keine Primzahl mehr
if zahl = 1
then // Ausnahme für die Eins
prim[1] := false;
// Eins wird false zugeordnet da 1 keine Primzahl ist
if zahl = 2
then
prim[2] := true;
until ((divv) > (zahl/2))
or ((zahl = 1 )
and (divv = 2))
or ((zahl = 2)
and (divv=2));
until zahl=maxzahl;
speicherdat.add('
Copyright by Int3g3r');
speicherdat.add('
');
repeat
inc(test);
if prim[test] = true
then
speicherdat.add(inttostr(test));
until test = maxzahl;
pfad:='
Primzahlen zwischen 1 und ' + inttostr(maxzahl) + '
.txt';
label1.caption:='
Die Datei wurde angelegt';
label2.caption:='
und wird in dem Ordner' ;
label3.caption:='
gespeichert in dem sich' ;
label4.caption:='
dieses Programm befindet.';
except
edit1.text:='
Nur ganze Zahlen!';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
speicherdat:= tstringlist.create;
divv:=1;
end;
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
try
speicherdat.Add('
');
speicherdat.Add('
Im Bereich von 0 bis ' + inttostr(maxzahl));
speicherdat.add('
sind ' + inttostr(speicherdat.count - 4) + '
Primzahlen.');
speicherdat.add('
');
speicherdat.add('
--------------------');
speicherdat.savetofile(pfad);
except form1.Close;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
janein:=true;
divv:=1;
try
prufzahl:=strtoint(edit2.text);
except
edit2.text:='
Nur ganze Zahlen!';
end;
if (prufzahl=1)
or (prufzahl=2)
then
janein:=true
else
begin
repeat
inc(divv);
if prufzahl
mod divv = 0
then
janein:=false;
until divv = prufzahl - 1;
end;
if janein
then
edit2.text:='
Die Zahl ' + inttostr(prufzahl) + '
ist eine Primzahl.'
else
edit2.Text:='
Die Zahl ' + inttostr(prufzahl) + '
ist keine Primzahl.' ;
end;
end.