AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Function(Matrix:TArray) mit Arrays unterschiedlicher Länge ?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von EccoBravo · begonnen am 6. Mär 2006 · letzter Beitrag vom 6. Mär 2006
Antwort Antwort
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#1

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

  Alt 6. Mär 2006, 14:22
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.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 14:24
Delphi-Quellcode:
type
 TArrayTyp : array of String

function (AArray : TArrayTyp):Boolean;
meinst du sowas?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 14:35
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.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 14:39
warum machst du nicht beides als TMatrix? musst halt beim zweiten die Länge entsprechen setzen.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 14:51
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.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 15:02
geht es jetzt oder nicht?

versuche mal Matrix als var-Parameter(var Matrix : TMatrix)
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 15:39
Versuche mal den Typ direkt anzugeben (nur an dieser Stelle):
function Matrixsumme(x, y:integer; Matrix: array of array of single):single;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 15:57
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 !!
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#9

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 15:59
Danke, und was machen wir da am besten?

Danke

E. B.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län

  Alt 6. Mär 2006, 16:11
@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?
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  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 08: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