Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Procedure, Array als Rückgabewert? (https://www.delphipraxis.net/49518-procedure-array-als-rueckgabewert.html)

Jens Schumann 12. Jul 2005 15:39

Re: Procedure, Array als Rückgabewert?
 
Zitat:

Zitat von Hallo_Thomas
...Fehlermeldung:inkompatible Typen :wall: :drunken: :wall:

Wenn Du Dir die Beiträge genau durchliest wirst Du feststellen, dass Sidorion die Lösung geschrieben hat

Hallo_Thomas 12. Jul 2005 15:45

Re: Procedure, Array als Rückgabewert?
 
:coder2: Ein kleines Wort, nur eines :tongue: :witch: :cheers:

Hallo_Thomas 12. Jul 2005 16:17

Re: Procedure, Array als Rückgabewert?
 
Liste der Anhänge anzeigen (Anzahl: 1)
:?: Freu dich bloss nicht zu früh :twisted:
das Programm hängt sich schon auf

Delphi-Quellcode:
procedure TForm1.EinWert(aWert: array of Integer;aStart,aEnd:Integer;Var Wertigkeit:TIntArray);
Var y :Integer ;
begin
  SetLength(Wertigkeit,aEnd);
  for y := aStart to aEnd do
  Wertigkeit[y]:=0;
end;
Keine Ahnung, aber irgendwie hängt sich das Programm jetzt auf?

Luckie 12. Jul 2005 16:25

Re: Procedure, Array als Rückgabewert?
 
Kleines Beispielprogramm ist gut. :roll: Ohne Kommentare oder Hinweise, wo man gucken muss, geschweige denn wie es funktioniert oder was es macht. Zumindest ein klitze kleiner Hinweis wie man es hinbekommt, dass die besagte Prozedur aufgerufen wird, wäre etwas hilfreich. Ich bekomme nämlich schon so eine AccessViolation bei
Delphi-Quellcode:
procedure TForm1.AllSpeedButtons(Sender: TObject);
var
  farbe                 : TColor;
  itag                  : Integer;
begin
  farbe := clRed;
  itag := (Sender as TSpeedButton).Tag;
  meineListe.Insert(0, (IntToStr(itag)));
  AddMyItem(IntToStr(itag), farbe);
end;
Gefunden:
Delphi-Quellcode:
procedure TForm1.EinWert(aWert: array of Integer; aStart, aEnd: Integer; var Wertigkeit: TIntArray);
var
  y                   : Integer;
begin
  SetLength(Wertigkeit, aEnd);
  for y := aStart to aEnd - 1 do
    Wertigkeit[y] := 0;
end;
Dynamische Arrays gehen von 0 bis Länge - 1.

axelf98 12. Jul 2005 16:27

Re: Procedure, Array als Rückgabewert?
 
Zitat:

Zitat von Hallo_Thomas
Delphi-Quellcode:
procedure TForm1.EinWert(aWert: array of Integer;aStart,aEnd:Integer;Var Wertigkeit:TIntArray);
Var y :Integer ;
begin
  SetLength(Wertigkeit,aEnd);
  for y := aStart to aEnd do
  Wertigkeit[y]:=0;
end;

1) Array-Grenzen verletzt: setlength(Array,länge) Zugriff immer nur von Array[0] bis Array[länge-1]!

[edit] zu langsam.. Musste aber auch schon um 5 heute raus..[/edit]

Hallo_Thomas 12. Jul 2005 16:37

Re: Procedure, Array als Rückgabewert?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von axelf98
Zitat:

Zitat von Hallo_Thomas
Delphi-Quellcode:
procedure TForm1.EinWert(aWert: array of Integer;aStart,aEnd:Integer;Var Wertigkeit:TIntArray);
Var y :Integer ;
begin
  SetLength(Wertigkeit,aEnd);
  for y := aStart to aEnd do
  Wertigkeit[y]:=0;
end;

1) Array-Grenzen verletzt: setlength(Array,länge) Zugriff immer nur von Array[0] bis Array[länge-1]!

[edit] zu langsam.. Musste aber auch schon um 5 heute raus..[/edit]




Wie änder ich das ab? Bei mir erscheint immer nur Stack-überlauf.

Luckie 12. Jul 2005 16:53

Re: Procedure, Array als Rückgabewert?
 
Zitat:

Zitat von Hallo_Thomas
Wie änder ich das ab? Bei mir erscheint immer nur Stack-überlauf.

Habe ich dir doch gepostet, inklusive dem gefixten Bug.

Hallo_Thomas 12. Jul 2005 17:04

Re: Procedure, Array als Rückgabewert?
 
Liste der Anhänge anzeigen (Anzahl: 1)
???Programm läuft zwar wieder, aber die Wertigkeiten werden in der Hauptprozedur immer noch nicht auf null gesetzt.


Hauptprozedur:
Delphi-Quellcode:
EinWert(Wertigkeit,0,11,result);
     begin
      Eins :=Wertigkeit[1];
      Zwei :=Wertigkeit[2]+Wertigkeit[8]+Wertigkeit[10];
      Drei :=Wertigkeit[3]+Wertigkeit[9]+Wertigkeit[11];
      Vier :=Wertigkeit[4];
      Fuenf :=Wertigkeit[5]+Wertigkeit[9]+Wertigkeit[10];
      Sechs :=Wertigkeit[6]+Wertigkeit[8]+Wertigkeit[11];
      Sieben:=Wertigkeit[7];

Nebenprocedur:
Delphi-Quellcode:
procedure TForm1.EinWert(aWert: array of Integer;aStart,aEnd:Integer;Var Wertigkeit:TIntArray);
Var y :Integer ;
begin
  SetLength(Wertigkeit,aEnd+1);
  for y := aStart to aEnd do
  Wertigkeit[y]:=0;
end;

leddl 12. Jul 2005 17:23

Re: Procedure, Array als Rückgabewert?
 
Na warum fragst du in deinem Code dann nicht auch dein Ergebnis-Array ab? Du setzt ja danach deine Variablen auf die Werte, die du in die Funktion übergibst (Wertigkeit). Richtig aber wäre es, das Ergebnis zu benutzen (result).

Du müßtest daher nach dem Funktionsaufruf "Wertigkeit" jeweils durch "result" ersetzen.

Hallo_Thomas 12. Jul 2005 17:39

Re: Procedure, Array als Rückgabewert?
 
Mein Ziel ist es bis es erstmal herrauszubekommen wie ich eine Prozedur schreibe, die diese Wertigkeiten zurückgibt, da ich im Orginalprogramm, den Wert Wertigkeit ca.2500 tausend mal abändern dürfte!!! Ich hab über prozeduren eigentlich kaum Erfahrungen, bin aber sicher, dass das gehen müsste was ich vorhab.

Irgendwie muss es doch auch gehen, dass ich diese Wertigkeiten auf null seten kann durch eine Procedure?

Dies dient mir erst mal als Probe, später soll nicht nur der Wert Null zurückgegeb werden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.
Seite 2 von 3     12 3      

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