AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi N-Dimensionales array über single index ansteuern
Thema durchsuchen
Ansicht
Themen-Optionen

N-Dimensionales array über single index ansteuern

Ein Thema von Memnarch · begonnen am 14. Apr 2012 · letzter Beitrag vom 14. Apr 2012
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 15:51
Nabend.

Ich habe gerade nen mathematischen hänger.

Ich habe ein n-dimensionales array. Ich kenne die größe jeder dimension. Jede Dimension weißt nur eine größe auf(ist also nicht wie bei dyn-arrays unterschiedlich). Der array ist ein zusammenhängender speicherblock, den man auch seriel durchgehen könnte.
für ein 2d array würde es so gehen:

Delphi-Quellcode:
array[i, k]
array[i*maxd1 + k]
und jetzt hängts bei mir gerade wie ich das nach n dimensionen ausweiten kann.
Kann mir jemand auf die sprünge helfen?

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 17:04
Array[0..x-1]:
Array[a]

Array[0..x-1, 0..y-1]:
Array[a*x + b]

Array[0..x-1, 0..y-1, 0..z-1]:
Array[a*x + b*y + c]

Usw Usf.. wie du siehst..
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (14. Apr 2012 um 17:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 17:18
ahh danke^^
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 17:24
Array[0..x-1, 0..y-1, 0..z-1]:
Array[a*x + b*y + c]
Das das ist falsch.

Sei zB. x = y = z = 5, dann ist dann hat Element [2,3,1] den gleichen Index wie [3,2,1]: 26.

Besser kann man das Rekursiv lösen:
mathtex.png
Dabei ist n die Anzahl der Dimensionen und s_i die Größe der i-ten Dimension mit 0 < x_i < s_i

//EDIT:
Ich sehe gerade das die Reihenfolge der Indizes bei mir anders ist als bei dem, was bei Mamnarch funktioniert. Eventuell ist die Reihenfolge der Indizes also anders herum. Das Prinzip sollte aber das richtige sein

Geändert von BUG (14. Apr 2012 um 18:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 19:07
wäre dann die antwort für ein 3darray:

array[maxX][MaxY][MaxZ]

array[a*MaxY*MaxZ + B*MaxZ + C]

MFG
Memnarch
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 19:12
Ja, das sollte funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#7

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 19:45
Ja nach genauerem überlegen haste recht...
(z Achse: 2 -> bedeutet zwei x * y Scheiben..; ich muss räumlicher denken, sry )

Delphi-Quellcode:
function getNDimensional1DArrayIndex(const Dimensions, Indices: Array of Integer): Integer;
var
  i: Integer;
  s: Integer;
begin
  Result := 0;
  if Length(Dimensions) <> Length(Indices) then Exit;
  s := 1;
  for i := High(Dimensions) downto 0 do // 1: so
  for i := 0 to High(Dimensions) do // 2: oder so
  begin
    inc(Result, Indices[i] * s);
    s := s * Dimensions[i];
  end;
end;
(sofern keine Fehler vorhanden...)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (14. Apr 2012 um 20:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#8

AW: N-Dimensionales array über single index ansteuern

  Alt 14. Apr 2012, 19:56
so hab ich mein werk für heute getan. Mein Compiler kann jetzt mit array definitionen umgehen
Danke Bug und Aphton
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz