Autor Beitrag
Trazom
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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
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: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: So 24.02.08 16:57 
Hallo,

Dir wird ein Zeiger auf ein array übergeben.
Wozu musst Du denn dieses dann noch kopieren?.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  tMesswert =single;
  tFeld = array[0..0of tMesswert;
  tpFeld = ^tFeld;
var
  Messdaten : tpFeld;
  wert : tMesswert;
...proc/func...
begin
  Messdaten := tpFeld(ÜbergebenerZeiger);

  for i := 0 to ??? {sollte irgendwie bekanntsein}  do
    begin
    //Switch range check Off , pleaze Meist ohnehin der Fall
    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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: So 24.02.08 17:27 
user profile iconBenBE 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.