Thema: Delphi Programm Optimierung

Einzelnen Beitrag anzeigen

DeathsShadow

Registriert seit: 26. Apr 2008
22 Beiträge
 
#1

Programm Optimierung

  Alt 9. Jan 2009, 18:18
Hi ihr ,

Ich habe ein Programm zum Herausfiltern von Primzahlen geschrieben . Allerdings ist dieses recht langsam und ich wollte mal fragen, ob irgendjemand eine Idee hat, wie ich dieses Programm zu Gunsten der Geschwindigkeit verändern bzw. optimieren kann.

Hier der Code:


Delphi-Quellcode:
unit Primzahlen_Generator;

interface

uses ExtCtrls, Math, SysUtils, Classes;

type
  TPrimzahlen_Generator = class

  private
    A_Zahlen : Array of Integer;
    Zahlengrenze : Integer;

  private
    procedure Filtern (Panel: TPanel; Grenze : Integer); virtual;
    procedure Loeschen_Aufruecken (Pos: Integer); virtual;
    procedure Speichern (Speicherort: String); virtual;
    procedure Werte_Uebernehmen (Grenze: Integer); virtual;

  public
    procedure Ausfuehren (Grenze: Integer; Speicherort: String; Anzeigepanel: TPanel); virtual;

   end;

implementation

procedure TPrimzahlen_Generator.Filtern (Panel: TPanel;Grenze : Integer);
var i, j : Integer;
begin
  for j := 2 to round(power(Grenze+1,1/2)) do
  begin
    for i := Length(A_Zahlen)-1 downto j-1 do
    begin
      if (A_Zahlen[i] mod j = 0) and (A_Zahlen[i] <> j) then Loeschen_Aufruecken(i);
      if i mod 100 = 0 then
      begin
        Panel.Caption := 'Noch: '+inttostr(round(power(Length(A_Zahlen)-1,1/2)+1)-j);
        Panel.Update;
      end;
    end;
  end;
  Panel.Caption := 'Fertig!';
end;

procedure TPrimzahlen_Generator.Loeschen_Aufruecken (Pos: Integer);
var i : Integer;
begin
  for i := pos to length(A_Zahlen)-2 do
  begin
    A_Zahlen[i] := A_Zahlen[i+1];
  end;
  setlength(A_Zahlen,length(A_Zahlen)-1);
end;

procedure TPrimzahlen_Generator.Speichern (Speicherort: String);
var
    Datei: TextFile;
    i : Integer;
begin
  AssignFile(Datei, Speicherort + 'Primzahlen von 2 bis '+inttostr(Zahlengrenze)+'.txt');
  Rewrite(Datei);
  try
    WriteLn(Datei,inttostr(Length(A_Zahlen)));
    for i := 0 to Length(A_Zahlen)-1 do
    begin
    WriteLn(Datei,inttostr(i)+' - '+inttostr(A_Zahlen[i]) );
    end;
  finally
    CloseFile(Datei);
  end;
end;

procedure TPrimzahlen_Generator.Werte_Uebernehmen (Grenze: Integer);
var i : Integer;
begin
  setlength(A_Zahlen,Grenze-1);
  for i := 2 to length(A_Zahlen)-1 do
  begin
    A_Zahlen[i-2] := i;
  end;
Zahlengrenze := Grenze;
end;

procedure TPrimzahlen_Generator.Ausfuehren (Grenze: Integer; Speicherort: String; Anzeigepanel: TPanel);
begin
  Werte_Uebernehmen(Grenze);
  Filtern(Anzeigepanel,Grenze);
  Speichern(Speicherort);
end;

end.
_______________
Lg Florian
Florian S.
  Mit Zitat antworten Zitat