AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Länge zwei dimensionaler, dynamischer Arrays bestimmen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

Ein Thema von Andy386 · begonnen am 8. Mai 2008 · letzter Beitrag vom 13. Mai 2008
Antwort Antwort
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#1

Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 8. Mai 2008, 11:13
Hallo,
ich habe ein dynamisches Array gemacht:
Delphi-Quellcode:
dynMatrix = array of array of double;
....
SetLength(dynmat^, xdim, ydim);
und würde in einer anderen Funktion, ohne die Parameter übergeben zu müssen oder in dem Array zu speichern, xdim und ydim herausbekommen.

Length(dynmat^) liefert nur einen double-wert zurück...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 8. Mai 2008, 11:16
Spalte auf

Delphi-Quellcode:
TZeile = array of double;
TDynMatrix = array of TZeile;
Markus Kinzler
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#3

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 8. Mai 2008, 11:17
Ach so !
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 8. Mai 2008, 12:45
Hallo,

erst die Zeilen, dann die Spalten indizieren - und keine Dereferenzierung:

Delphi-Quellcode:
type
  TDoubleMatrix = array of array of Double;
var
  mat: TDoubleMatrix;
  xDim, yDim: Integer;
begin
  SetLength(mat, 42, 17);
  yDim := Length(mat);
  xDim := Length(mat[Low(mat)]);
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#5

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 8. Mai 2008, 14:13
Das ist natürlich noch schöner !
Vielen Dank !

Die Dereferenzierung muss aber scheinbar schon sein, ich habe das oben vergessen zu schreiben, ich habe für die Funktionen nur Pointer zu den Arrays übergeben.
Sorry wegen eventueller Missverständnisse
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 8. Mai 2008, 17:32
Statt eines Pointers könntest du die Matrix auch als var-Parameter übergeben.
Das wäre dann Call-By-Reference nach Pascal Art.

Delphi-Quellcode:
procedure MatrixMultiply(var mat: TDoubleMatrix; scalar: Double);
var
  yDim, xDim: Integer;
begin
  for yDim := Low(mat) to High(mat) do
    for xDim := Low(mat[yDim]) to High(mat[yDim]) do
      mat[yDim, xDim] := mat[yDim, xDim] * scalar;
end;


procedure Test;
var
  yDim, xDim: Integer;
  mat: TDoubleMatrix;
begin
  SetLength(mat, 3, 3);
  for yDim := Low(mat) to High(mat) do
    for xDim := Low(mat[yDim]) to High(mat[yDim]) do
      mat[yDim, xDim] := 1;
  MatrixMultiply(mat, 2);
  ShowMessage(FloatToStr(mat[0, 0]));
  SetLength(mat, 0, 0);
end;
Getippt und nicht getestet.
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#7

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 13. Mai 2008, 14:21
Aber das ist dann intern dasselbe, oder wird die ganze Matrix dabei kopiert?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Länge zwei dimensionaler, dynamischer Arrays bestimmen ?

  Alt 13. Mai 2008, 15:17
Arrays mit statischen Grenzen (array [n..m{, x..y}]) sind Datenblöcke - bei einem "var" oder "const"-Parameter werden Referenzen übergeben, ansonsten wird kopiert.
Dynamische Arrays sind aber an sich schon Referenzen, der Geschwindigkeitsvorteil gegenüber den statischen Arrays ist also bei CallByRef nicht gegeben - dafür kann man aber *sicher* das übergebene Array bearbeiten (var) ohne es zu kopieren, oder man *darf* es nicht bearbeiten (const).
  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 06:15 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