Autor Beitrag
Kroni
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 720

Win 98, Win ME, Win2k, Win XP
D3 Pro
BeitragVerfasst: Di 23.11.04 18:21 
Hallo.

Ich habe ein Primzahlgeneratorprogramm geschrieben. Jedoch ist ja bei Delphi die Ausgabe in Memos so ein bisschen langsam. Nun könnte man ja normal, während der Rechner rechnet die Primzahlen speichen.
In ein dynamische Array geht nicht, weil ich Delphi 3 habe, sonst würde ich ja diese Variante benutzen.
Wäre das mit nem TStringList Sinnvoll?
Wenn ja, wie genau muss ich das verwenden? werd aus den anderen antworten noch nich schlau
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Di 23.11.04 19:38 
Sinnvoller wäre eine Liste für Integertypen, da du dir so die Umwandlung sparst. Entweder leitest du sie von TList ab, oder du implementierst sie selbst mit Pointern von einem Listeneintrag zum nächsten. (Stichwort "einfach/doppelt verkettete Liste")

Gruß,
Jörg

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 23.11.04 19:43 
Ach.. es geht auch direkt mit ner TList..! Einfach nur die Integers in einen Pointer casten.. ;)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 23.11.04 19:48 
Nur mal zum Verständnis:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type
  PItem = ^TItem;
  TItem = record
    NextItem: PItem;
    Value: Integer;
  end;
Das ist eine einfach verkettete Liste, oder? Was ist dann eine mehrfach verkettete Liste?

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 23.11.04 19:56 
Eine doppelt verkette Liste hat 2 Zeiger -> einen zum Vorgänger und einen zum Nachfolger. Dadurch kann die Liste in beide Richtungen durchlaufen werden...

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Kroni Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 720

Win 98, Win ME, Win2k, Win XP
D3 Pro
BeitragVerfasst: Di 23.11.04 22:13 
oder wäre nich vlt. doch sinnvoller, auf delphi 6 umzusteiegen und ein variables array zu nehmen??
klingt für mich n bissl einfacher....
na ja, ansonsten mal warten, bis unser Lehrer uns das erklärt.....haben noch nicht mal prozeduren und funktionen gelernt *selbst beigebrach hat*
na ja.....immer diese langsamen schüler im kurs^^
aber denen kann man dann ja helfen......
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 23.11.04 22:29 
Naja, wenn schon kein dynamisches Array geht, kann man trotzdem den Delphi-Compiler dazu bringen, so etwas ähnliches zu erzeugen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
    TDynMemArray = array[0..0] of Integer;
    PDynMemArray = ^TDynMemArray;
var
    PrimList : PDynMemArray;
begin
    GetMem(PrimList, 1024 * 1024 * SizeOf(TDynMemArray));
    While not PrimListIsVoll do
        SuchePrimZahl;
    FreeMem(PrimList);
end;


Zugreifen kannst du auf die einzelnen Elemente von PrimList durch PrimList^[ElementIndex].
Obwohl dies zwar offensichtlich den Index überschreitet erlaubt Delphi dieses Konstrukt, da es bei Zeigertypen keine Prüfung auf die Array-Grenzen durchführt.

Das ist zum einen schneller als TList\TStringList und kann zum anderen mit ReallocMem schnell vergrößert werden.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Mi 24.11.04 00:06 
Kroni hat folgendes geschrieben:
oder wäre nich vlt. doch sinnvoller, auf delphi 6 umzusteiegen und ein variables array zu nehmen??

Nein! Denn so lernst du wenigstens was.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 24.11.04 00:38 
Übrigens: Die Variante mit GetMem \ ReallocMem und FreeMem kann als "dynamisches Array" angesehen werden, ist aber nicht so komfortabel, wie die dynamischen Arrays aus D4++, da du dich um die Bereichsprüfung, Speicherreservierung und die anderen Dinge selber kümmern musst.

BTW: Hab auf die Art uns weise ohne ASM mal ein Primzahlsuchprogramm geschrieben, dass die ersten 10,000,000 Primzahlen mit einer Geschwindigkeit von 400,000 Zahlen je Sekunde prüft. Allerdings dürfte dieses Programm auf D3 leider net laufen, da es Int64 nutzt und dieser IIRC auf D3 nicht verfügbar ist.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Kroni Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 720

Win 98, Win ME, Win2k, Win XP
D3 Pro
BeitragVerfasst: Mi 24.11.04 16:29 
ok....stimmt schon, aber ich befinde mich ja noch im Anfang meiner Informatiklaufbahn....aber ich denke, dass ich das von BenBE soweit verstanden habe....
Aber 400.000 Zahlen pro Sekunde? *staunz*
Na ja.....quartalsnote heute bekommen und ne eins...so kanns weiter gehen=)
danke an euch...muss nämlich noch viel lernen und bald n referat über die programmiersprachen und typen halten.