Autor |
Beitrag |
Trazom
Hält's aus hier
Beiträge: 10
|
Verfasst: So 24.02.08 16:22
Hallo zusammen,
ich hab mal wieder ein Riesenarray zu verarbeiten. Der Datentyp ist Single. Es geht darum, dass die Funktion einer Messsoftware ein Array mit den Messwerten übergeben bekommt, genauer: Die Adresse eines Arrays, darum kann ich nur ein statisches benutzen.
Im Extremfall enthält das Array 32 Millionen Einträge ungleich Null und davor noch evtl. sehr viel mehr Nulleinträge, also veranschaulicht:
0, 0, 0, <dies ein paar zig Millionen mal>, 0, 0, 0, 5.8, 4.9, <dies maximal 32.000.000 mal>, 7.9, 14.6
Ich sehe es als Verschwendung an, ein statisches Array zu deklarieren, dass so viele Einträge hat und es dann auch noch ständig mit Nullen zu füllen (die Anzahl kann schwanken). Das Problem ist wie gesagt die Forderung, nur den Zeiger darauf zu übergeben, weshalb es nicht dynamisch gemacht werden kann (meines Wissens nach).
Gibt es da noch einen Trick?
VIelen Dank und viele Grüße,
Trazom
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: So 24.02.08 16:33
Hi,
Was spricht dagegen, die Werte z.B. in einem String zu übergeben?
Dann ein spezielles Kürzel für ein Feld mit Nullen, dazu die Anzahl an Nullen:
9,5,3,5,6,444,2,56,345345,456,<<<||6563545637356||>>>,435,57,563,6,465345
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 24.02.08 16:47
Ein dynamisches Array ist auch nur ein Zeiger auf den ersten Eintrag des Feldes ...
Muss aber u.U. nicht mit ArrayName sondern mit @ArrayName[0] an die Funktion übergeben werden.
Problem bleibt hier aber weiterhin, dass die Zielfunktion keine brauchbare Methode zum Entgegennehmen einer vernünftigen Darstellung bestitzt ...
Oder hast Du auf die Zielfunktion\Anwendung Einfluss?
_________________ 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.
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: So 24.02.08 16:57
Hallo,
Dir wird ein Zeiger auf ein array übergeben.
Wozu musst Du denn dieses dann noch kopieren?.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type tMesswert =single; tFeld = array[0..0] of tMesswert; tpFeld = ^tFeld; var Messdaten : tpFeld; wert : tMesswert; ...proc/func... begin Messdaten := tpFeld(ÜbergebenerZeiger);
for i := 0 to ??? do begin Wert := Messdaten^[i]; rechne.. |
Gruß Horst
Edit
Ein dynamisches array ala Messdaten : array of tMesswert speichert aber auch Angaben über die Größe des Feldes und würde es bei Bedarf vergrößern und auch eine Zugriffsfehler melden, wenn man auf ein Element ausserhalb der aktuelle Größe zugreifen will.
|
|
Trazom 
Hält's aus hier
Beiträge: 10
|
Verfasst: So 24.02.08 17:27
BenBE hat folgendes geschrieben: | Oder hast Du auf die Zielfunktion\Anwendung Einfluss? |
Leider eben nicht und mit Zeigern auf dynamische Arrays hab ich mich eine Woche rumgequält und es nicht hinbekommen.
|
|
|