Autor Beitrag
recci
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 09.03.05 18:12 
hallo
auch auf auf die gefahr hin, dass ihr mich auslacht aber ich würde gerne mal wissen wie ich eine procedure aufrufen kann an die mehrere parameter übergeben werden sollen und die mehrere werte zurück liefern soll.
könnt ihr mal den code ansehen und sagen wo mein fehler liegt? als fehlermeldung beim compilieren erhalte ich nicht genügend parameter was ich aber nich verstehe...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var d, e, f : real;

procedure rechnen(a,b,c:real;var umfang,flaeche:real);
var s : real;
begin
umfang:=a+b+c;
s:=(umfang/2);
flaeche:=Sqrt(s*(s-a)*(s-b)*(s-c));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
d:=StrToFloat(edit1.Text);
e:=StrToFloat(edit2.Text);
f:=StrToFloat(edit3.Text);
rechnen(d, e, f);
label6.Caption:=FloatToStr(Flaeche);
label7.Caption:=FloatToStr(Umfang);
end;


end.


ich danke euch!

ps: hab nix in der suche gefunden... so blöde wie ich is halt keiner :oops:


Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Mi 09.03.2005 um 18:22
Smikey
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 45

Win XP, kUbuntu 6.06
Delphi 2005 Architect
BeitragVerfasst: Mi 09.03.05 18:25 
ich bin mir net ganz sicher, aber wenn du parameter übergeben willst,
muss du doch "function" statt "procedure" nehmen oder net?

_________________
Bloß weil du nicht paranoid bist, heißt das nicht, dass sie nicht hinter dir her sind.
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 09.03.05 18:29 
deine Prozedur erwartet 5 Parameter: a,b,c,Umfang,Fläche
aber du gibst im Aufruf nur 3 an: d,e,f

d.h. es fehlen dir 2 Stück
ausblenden Delphi-Quelltext
1:
rechnen(d,e,f,Flaeche,Umfang);					
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 09.03.05 18:34 
Wenn du mehrere Parameter übergeben möchtest, musst du die Prozedur entsprechend definieren.
Beispiel für 3 Parameter:
ausblenden Delphi-Quelltext
1:
procedure xyz (para1:Integer; para2: String; para3: Word);					


Wenn du mehrere Rückgabewerte haben willst musst du Parameter als Var definieren:
ausblenden Delphi-Quelltext
1:
procedure xyz (var para1:Integer; para2: String; var para3: Word);					

Jetzt würdest du in para1 und para3 Rückgabewerte bekommen können.

Wenn du nur einen Rückgabewert benötigst, nimmst du eine Funktion.
recci Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 09.03.05 18:50 
hm also so ganz seh ich da noch nich durch...
ich dachte die zeile  procedure rechnen(a,b,c:real;var umfang,flaeche:real); besagt, dass ich ne procedure hab die a b und c als paramater haben will und mir umfang und fläche zurück gibt oder is das jezz falsch?
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 09.03.05 19:00 
falsch, in Klammern stehen die Parameter. Die mit var gekennzeichneten Parameter behalten den in der Prozedur veränderten Wert. ZB

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure rechnen(a,b,c:Integer; var erg: Integer);
begin
  erg := a*b*c;
End;


wenn du nun aufrufst

ausblenden Delphi-Quelltext
1:
2:
3:
4:
begin
rechnung := 0;
rechnen(1,2,3,rechnung);
end;


dann hat rechnung nach der Prozedur den Wert 6, auch wenn die Variable Rechnung gar nicht in der Prozedur vorkam.

Andererseits kannst du Funktionen deklarieren

ausblenden Delphi-Quelltext
1:
2:
3:
4:
function rechnen(a,b,c: integer):integer;
begin
  result := a*b*c;
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
begin
rechnung := 0;
rechnung := rechnen(a,b,c);
end;


das ist genau das gleiche, aber du kannst nur einen rückgabewert einstellen (result=reservierter Ausdruck)
recci Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 09.03.05 19:05 
danke danke :)
das war sehr gut erklärt so habe sogar ich es verstanden und es funktioniert auch

vielen dank!