![]() |
Procedure, Array als Rückgabewert?
Ich habe folgende Procedure geschrieben
Delphi-Quellcode:
So sollte eigentlich der Übergabebefehl aussehen, stellte ich mir vor.
procedure EinWert(aWert: array of Integer; aStart,aEnd:Integer ;Var Wert:array of Integer);
Delphi-Quellcode:
Fehlermeldung, nicht genügend Parameter
EinWert(Wert,0,1418)
Mit:
Delphi-Quellcode:
wollte ich eigentlich ein Rückgabeparameter schreiben.
Var Wert:array of Integer
Was mache ich hier verkehrt? |
Du hast in
Delphi-Quellcode:
4 Parameter definiert und versuchst die Funktion mit 3 Parametern aufzurufen.
procedure EinWert(aWert: array of Integer; aStart,aEnd:Integer ;Var Wert:array of Integer);
|
Re: Procedure, Array als Rückgabewert?
Bin hier noch nicht ganz so gut, wo liegt mein Fehler? wie siehts richtig aus?
|
Re: Procedure, Array als Rückgabewert?
Nachdem Delphi sich etwas affig hat mit typen von var-parametern solltest Du Dir vorher einen Typ deklarieren:
Delphi-Quellcode:
Dann sieht dann Dein Prozedurkopf so aus:
TIntArray=Array of Integer;
Delphi-Quellcode:
..und der Aufruf so:
procedure EinWert(aWert: array of Integer; aStart,aEnd:Integer ;Var Wert:TIntArray);
Delphi-Quellcode:
Var
result: TIntArray; Begin EinWert(Wert,0,1418,result); End; |
Re: Procedure, Array als Rückgabewert?
Hi,
wenn Du einen Rückgabewert willst - warum nimmst Du dann ne Prozedur und nicht einfach ne Funktion?? Gruß Stephan :dance: |
Re: Procedure, Array als Rückgabewert?
Siehe überschrift, ich wollte ne ganze array zurückgeben.
|
Re: Procedure, Array als Rückgabewert?
Jo, ich habs jetzt mal so umgeschrieben wie Sidorion gesagt hat.
Delphi-Quellcode:
Jetzt meint man, das, ich hier ne zugriffsverletzung habe.
procedure TForm1.EinWert(aWert: array of Integer;aStart,aEnd:Integer;Var WERT:array of Integer);
Var y :Integer ; begin for y := aStart to aEnd do Wert[y]:=0; end;
Delphi-Quellcode:
Wert[y]:=0;
|
Re: Procedure, Array als Rückgabewert?
Geht doch auch mit einer Funktion. Du musst dir nur einen eigenen Typen deklarieren, wie oben schon mal beschrieben.
Delphi-Quellcode:
type
TMyIntArray = array of Integer; var Form1: TForm1; implementation {$R *.dfm} function foo(len: Integer): TMyIntArray; var i: Integer; begin SetLength(result, len); for i := 0 to Length(result) - 1 do result[i] := i; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; IntArray: TMyIntArray; begin IntArray := foo(5); for i := 0 to length(IntArray) - 1 do Listbox1.Items.Add(IntToStr(IntArray[i])); end; |
Re: Procedure, Array als Rückgabewert?
Zitat:
|
Re: Procedure, Array als Rückgabewert?
Wahrscheinlich häng ich hier an einem ganz einfacehn Problem,
(Sehr vereinfacht, soll nur dazu dienen um Problem darzusellen Procedure1 Hauptberechnung hier wird auch die Array Wert mit einem Wert versehen Nun soll in Procedure Werteins die Array Wert auf null gesetzt werden.
Delphi-Quellcode:
procedure TForm1.EinWert(aWert: array of Integer;aStart,aEnd:Integer;Var Wert:array of Integer);
Var y :Integer ; begin SetLength(Wert,1500); for y := aStart to aEnd do Wert[y]:=0; end;
Delphi-Quellcode:
Fehlermeldung:inkompatible Typen :wall: :drunken: :wall:
SetLength(Wert,aEnd);
|
Re: Procedure, Array als Rückgabewert?
Zitat:
|
Re: Procedure, Array als Rückgabewert?
:coder2: Ein kleines Wort, nur eines :tongue: :witch: :cheers:
|
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:
Keine Ahnung, aber irgendwie hängt sich das Programm jetzt auf?
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; |
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:
Gefunden:
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;
Delphi-Quellcode:
Dynamische Arrays gehen von 0 bis Länge - 1.
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; |
Re: Procedure, Array als Rückgabewert?
Zitat:
[edit] zu langsam.. Musste aber auch schon um 5 heute raus..[/edit] |
Re: Procedure, Array als Rückgabewert?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Wie änder ich das ab? Bei mir erscheint immer nur Stack-überlauf. |
Re: Procedure, Array als Rückgabewert?
Zitat:
|
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; |
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. |
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! |
Re: Procedure, Array als Rückgabewert?
Falls es dir darum geht das übergene Array umzuwandeln (Das wird mir aus deiner Prozedur nicht ganz klar, da das Array aWert dort nicht benutzt wird), dann übergib doch einfach genau dieses Array als Var-Parameter.
//Edit: Sprich, es könnte so aussehen:
Delphi-Quellcode:
//Edit2:
procedure TForm1.EinWert(aStart,aEnd:Integer;Var Wertigkeit:TIntArray);
Var y :Integer ; begin for y := aStart to aEnd do Wertigkeit[y]:=0; end; //Aufruf: EinWert(0,11,Wertigkeit); SetLength aus dem Code entfernt. Das hat da jetzt wirklich nix mehr zu suchen :oops: |
Re: Procedure, Array als Rückgabewert?
Wie kann das aussehen?
|
Re: Procedure, Array als Rückgabewert?
Siehe mein Edit. Das schöne an VAR-Parametern ist ja, daß du in einer Variablen Parameter und Rückgabewert hast. Daher ist das ja für deinen Fall prädestiniert. (Falls du es eben so brauchst. Ganz hab ichs immer noch nicht kapiert)
|
Re: Procedure, Array als Rückgabewert?
Liste der Anhänge anzeigen (Anzahl: 1)
Fehlermeldung erscheint:"Die tatsächlichen und formalen var-Paarameter müssen übereinstimmen
Delphi-Quellcode:
EinWert(1,11,Wertigkeit);
Delphi-Quellcode:
procedure TForm1.EinWert(aStart,aEnd:Integer;Var Wertigkeit:TIntArray);
Var y :Integer ; begin SetLength(Wertigkeit,aEnd+1); for y := aStart to aEnd do Wertigkeit[y]:=0; end; |
Re: Procedure, Array als Rückgabewert?
@leddl
Ich möchte später einmal, eine Array durchlaufen, und alle bis auf einen einzigen bestimmten auf null setzten |
Re: Procedure, Array als Rückgabewert?
Ja, wahrscheinlich ist dein Wertigkeit eben nicht vom Typ TIntArry. Daran hab ich nicht gedacht. Aber das kriegst du auch noch hin, oder?
PS: Du kannst auch über den Button http://www.delphipraxis.net/template.../icon_edit.gif deinen Beitrag editieren. |
Re: Procedure, Array als Rückgabewert?
Verdammt noch mah, datt war, ne schwere Geburt! :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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