Hallo Leidensgenossen!
Ich hab mal wieder ein mir unerklärliches Problem!
Ich habe folgendes in der Hauptform deklariert:
Delphi-Quellcode:
type MyMatrix = array of array of integer;
.
.
.
var SMatrix : MyMatrix;
Später initialisiere ich die SMatrix folgendermaßen:
SetLength(SMatrix, n, n);
In einer zweiten Form (
unit) habe ich folgendes definiert:
Delphi-Quellcode:
unit Tourenberechnung;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, Buttons, Start;
type
TSortArr =
record
X : integer;
Y : integer;
end;
type
TTouren =
class(TForm)
GB_Touren: TGroupBox;
G_Tour: TStringGrid;
GB_Infos: TGroupBox;
L_Summe: TLabel;
L_Menge: TLabel;
L_Laenge: TLabel;
L_Kapazitaet: TLabel;
L_MaxLaenge: TLabel;
L_MaxLaenge2: TLabel;
L_Kapazitaet2: TLabel;
L_Summe2: TLabel;
L_Menge2: TLabel;
L_Laenge2: TLabel;
L_Depot: TLabel;
L_Depot2: TLabel;
BB_Berechnung: TBitBtn;
GB_Ablauf: TGroupBox;
M_Ablauf: TMemo;
procedure FormShow(Sender: TObject);
procedure Touren_Ausgangsloesung_erstellen;
procedure Grid_Index;
procedure Saving_Algorithmus;
procedure BB_BerechnungClick(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Touren : TTouren;
StartT : TTourDef;
EndeT : TTourDef;
SortArr : TSortArr;
procedure get_TopValue (MM : MyMatrix);
implementation
.
.
.
Jetzt mache ich in einer Prozedur folgendes:
Delphi-Quellcode:
procedure TTouren.Saving_Algorithmus;
var SMatrix2 : MyMatrix;
i : integer;
E : integer;
y,z : TTourDef;
w,x : TKnotenDef;
Kap : integer;
begin
SetLength(SMatrix2, n, n);
SMatrix2 := SMatrix;
get_TopValue(SMatrix2);
.
.
.
...d.h., SMatrix2 wird eine exakte Kopie von SMatrix (die ja global definiert ist). Dann führe ich die Prozedur "get_TopValue" aus und übergebe die KOPIE dieser Prozedur.
Diese Prozedur sucht dann das grösste Element in der Matrix, speichert die Koordinaten des grössten Elements in der globalen Variable "SortArr.X" und "SortArr.Y", und überschreibt den gefundenen Wert mit "- unendlich", was eine globale Konstante ist (-32000).
Delphi-Quellcode:
procedure get_TopValue ( MM : MyMatrix);
var i,j,k : integer;
begin
SortArr.X := 0;
SortArr.Y := 0;
k := -unendlich;
for i := 0 to n-2 do
begin
for j := i+1 to n-2 do
begin
if MM[i,j] > k then // höherer Wert gefunden
begin
SortArr.X := i+1;
SortArr.Y := j+1;
k := MM[i,j];
end;
end;
end;
MM[SortArr.X-1,SortArr.Y-1] := -unendlich;
end;
So. Nun mein Problem:
Sobald dies alles geschehen ist, verlasse ich die Form (also auch die
Unit). Wenn ich jetzt erneut in diese
Unit springe (wird vom Benutzer ausgelöst), dann ist meine SMatrix gleich der Kopie "SMatrix2", obwohl ich das nirgends so gemacht habe. Eigentlich wird ja nur die SMatrix2, die ich der Prozedur "get_TopValue" übergebe, verändert und nicht die globale Variable SMatrix! Wieso ist das so?
Ich hoffe, ich konnte das Problem halbwegs schildern...sonst fragt mich doch bitte, falls ihr noch mehr wissen wollt...
Danke im Voraus und Gruß,
Björn
Eine Katze fällt immer auf ihre Pfoten, ein Butterbrot immer auf die Butterseite. Was passiert, wenn man einer Katze ein Butterbrot auf den Rücken bindet?