Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Function(Matrix:TArray) mit Arrays unterschiedlicher Länge ? (https://www.delphipraxis.net/64636-function-matrix-tarray-mit-arrays-unterschiedlicher-laenge.html)

EccoBravo 6. Mär 2006 14:22


Function(Matrix:TArray) mit Arrays unterschiedlicher Länge ?
 
Hallo,

sicherlich ist die Frage schon oft gestellt worden, habe auf die Schnelle aber nichts gefunden:

Es ist das leidige Problem mit der Übergabe eines Arrays unterschiedlicherLänge in der Parameterliste einer Procedure / Function.

Ich möchte ein Array mit einer bestimmten Länge in der Parameterliste einer Funktion (diese kann in einem anderen Unit / Komponente programmiert sein) übergeben.
Wenn die Arrays im Funktionenaufruf und im Function-Code nicht genau des selben Typs sind gibt es Type-Missmatch.

Ich will aber in einer Unit-Bibliothek ganz allgemeine Functions schreiben, die mit Arrays von dieser oder jenen Länge aufgerufen werden können.

Danke für Hilfe

E. B.

Angel4585 6. Mär 2006 14:24

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
Delphi-Quellcode:
type
 TArrayTyp : array of String

function (AArray : TArrayTyp):Boolean;
meinst du sowas? :dance:

EccoBravo 6. Mär 2006 14:35

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
Hallo, ich meine so etwas:

Delphi-Quellcode:
...
interface

type
    TMatrix = array of array of single:

var
    AMat : TMatrix;
    BMat : array[1..5, 1..7] of single;
    ...

function Matrixsumme(Matrix:TMatrix);
begin
    ....
end;
...
...

// Hauptprogramm Code
begin
    ...
    SetLength(AMat,512,512);
    Matrixsumme(AMat);
    ...
    MatrixSumme(BMat);
    ...
end;

end.
Danke,

E. B.

Angel4585 6. Mär 2006 14:39

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
warum machst du nicht beides als TMatrix? musst halt beim zweiten die Länge entsprechen setzen.

EccoBravo 6. Mär 2006 14:51

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
und genau das habe ich versucht

Delphi-Quellcode:
...
interface

type
    TMatrix = array of array of single:

var
    AMat, BMat : TMatrix;
    ...

function Matrixsumme(x, y:integer; Matrix:TMatrix):single;
begin
    setLength(Matrix, x, y);
    ...
end;
...
...

// Hauptprogramm Code
begin
    ...
    //(AMat,5,7);
    A:=Matrixsumme(5,7,AMat);
    ...
    //(BMat,512,512);    
    B:=MatrixSumme(512,512,BMat); // und an dieser Stelle gibts Probleme, denn Matrix in Matrixsumme ist 5,7
    ...
end;

end.
Danke

E. B.

Angel4585 6. Mär 2006 15:02

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
geht es jetzt oder nicht?

versuche mal Matrix als var-Parameter(var Matrix : TMatrix)

Flocke 6. Mär 2006 15:39

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
Versuche mal den Typ direkt anzugeben (nur an dieser Stelle):
Delphi-Quellcode:
function Matrixsumme(x, y:integer; Matrix: array of array of single):single;

shmia 6. Mär 2006 15:57

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
Mal ganz grundsätzlich: "normale" Array und dynamische Arrays sind als Übergabeparameter
nicht kompatibel.
Delphi-Quellcode:
type
    TMatrix = array of array of single:
var
    AMat : TMatrix;
    BMat : array[1..5, 1..7] of single;
// es ist mit Delphi nicht möglich, eine Procedure zu bauen, die sowohl
// AMat als auch BMat als Parameter verarbeiten kann !!

EccoBravo 6. Mär 2006 15:59

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
Danke, und was machen wir da am besten?

Danke

E. B.

Flocke 6. Mär 2006 16:11

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
 
@shmia: nicht ganz - bei einfacher Indizierung sind dynamische und 0-basierte Arrays kompatibel, Beispiel:
Delphi-Quellcode:
type
  TVektor = array of single;

var
  VektorA: TVektor;
  VektorB: array [0 .. 7] of single;

function Bla(X: array of single): single;
begin
  ...
end;
In diesem Fall kann man Bla mit beiden Variablen aufrufen (zumindest in D2K6).

Bei höheren Dimensionen geht das allerdings nicht mehr. Mein Vorschlag von oben ergibt direkt einen Syntaxfehler in der Parameterdeklaration.

@EccoBravo: Du kannst halt die Variable nicht direkt initialisieren, sondern musst das einmal beim Start machen mit "SetLength(MatrixB, 6, 8)" - dynamische Arrays sind immer Null-basiert, fangen also nicht mit 1 an.

Noch was (ist mir gerade aufgefallen): wieso machst du ein SetLength mit einem by-value Parameter?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz