DieSchwarzeHand Geschrieben 23. September 2006 Geschrieben 23. September 2006 Bite helft mir dringend bei meinen Delphi HA, meine mailadresse ist martin3333@web.de da könnte ich euch den quelltext senden. Ich bin völlig verzweifelt...:mod: Zitieren
DieSchwarzeHand Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Delphi Programmauschnitt 1 Funktion (Deklaration). Function mmm (a, b: real): real; Begin if a > b then result := a //Rückgabe a Else result:=b; //Rückgabe b End; Aufruf der Funtion: Zahl1:= 2; Zahl2:= 5.4; Zahl3:= ????????; //Aufruf Programmauschnitt 2 Prozedur (Deklaration) Procedure xxxx (var a,b: real); Var zwspeicher: real; Begin Zwspeicher :=a; a:=b; b:=zwspeicher end; Aufruf der Prozedur: Zahl1:=2; Zahl2:= 5.4; ???????????? 1. Erklären sie genau die Abreitweise der Funktion von Programmauschnitt1 und den Funktionskopf 2. Ergänzen sie die Zeile 3 ??????? 3. Schreiben sie die Funktion von Programmauschnitt1 als Procedure 4. Was ändert sich dann beim Aufruf? Welche werte stehn am ende in Zahl1, Zahl2 und Zahl3? 5. Erklären sie genau die Abreitweise der Funktion von Programmauschnitt2 und den Funktionskopf 6. Kann die Prozedur als Funktion geschrieben werden? (Begründung) 7. schreiben sie ein procedure, die 2 zahlen verdoppelt zurückgibt und außerdem die summe dieser beiden zahlen verdoppelt. Zitieren
grueni Geschrieben 23. September 2006 Geschrieben 23. September 2006 1. Das solltest du selber hinbekommen. 2. zahl3 := mmm(zahl1,zahl2); 3. procedure mmm (a, b: real; var c: real); Begin if a > b then c := a //Rückgabe a Else c:=b; //Rückgabe b End; 4. Das solltest du jetzt auch schaffen 5. http://de.wikipedia.org/wiki/Dreieckstausch Den Unterschied zwischen Wert- und Referenzparametern solltest dir auch mal anschauen: http://de.wikipedia.org/wiki/Call_by_value http://de.wikipedia.org/wiki/Referenzparameter procedure callByValue(a,b: string); ist wie der Name schon sagt "Call by value" und procedure callByReference(var a,b: string); ist wie der Name schon sagt "Call by reference" Zitieren
DieSchwarzeHand Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Erstmal ein großes Dankeschön, aber dieses Call by Value bzw. Reffernce plane ich nicht und die Fragen 6 und 7? Zitieren
DieSchwarzeHand Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Und dann is da noch die Frage: WIE LAUTET DER AUFRUF DER PROCEDURE? WELCHJE WERTE STEHEN ANSCHLIEßEND IN IND ZAHL1 UND ZAHL2????? Zitieren
grueni Geschrieben 23. September 2006 Geschrieben 23. September 2006 Hier mal ein kleines Beispiel: procedure summe(paSummand1,paSummand2: double; var paSumme: double); begin paSumme := paSummand1 + paSummand2; //das wirkt sich nach "außen" aus paSummand2 := 4711; //hat nach außen keine Auswirkung paSummand1 := 42; //hat auch keine Auswirkung nach außen end; var summand1,summand2,ergebnis: double; begin summand1 := 7; summand2 := 3; summe(summand1,summand2,ergebnis); end; paSummand1 und paSummand2 sind Wertparameter, d.h. ich übergebe direkt einen Wert. Innerhalb der Prozedur kann ich mit paSummand1 und paSummand2 machen, was ich will, auf die Variablen summand1 und summand2 wirkt sich das nicht aus. paSumme ist ein Referenzparameter, weise ich in der Prozedur paSumme einen Wert zu, dann verändere ich damit auch den Wert von ergebnis. Bei diesem Beispiel heißt das konkret: In ergebnis steht nach dem Prozeduraufruf 10. In summand1 steht immer noch 7, obwohl ich in der Prozedur paSummand1 den Wert 42 zugewiesen habe. Das gleiche gilt für summand2, d.h. summand2 hat nach Prozedur-Aufruf immer noch den Wert 3. P.S.: Innerhalb von 15min kann man einen Beitrag noch editieren, mußt also keine Doppelposts machen. Großschreibung und der exzessive Gebrauch von Satzzeichen gelten im Übrigen als einigermaßen unhöflich. Zitieren
DieSchwarzeHand Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Ok dankeschön, dass habe ich nun verstanden, was ist denn nun aber der Unterschied zwischen einer Funktion und einer Procedure? wenn ich das wüsste könnte ich nämlich Frage 6 Beantworten. Zitieren
grueni Geschrieben 23. September 2006 Geschrieben 23. September 2006 Eine Funktion gibt einen Wert zurück, bei einer Prozedur geht das nur über einen Referenzparameter. function gibFuenf: Integer; begin result := 5; //result ist der Rückgabewert der Funktion end; var zahl1: integer; begin zahl1 := gibFuenf; Als Prozedur sieht das so aus: procedure gibFuenf(var paZahl: Integer); begin paZahl := 5; end; var zahl: Integer; begin gibFuenf(zahl); Frage 6 find ich einigermaßen doof, da könnte man nämlich durchaus mit "Ja" anworten, obwohl dein Lehrer vermutlich "Nein" hören will. Zitieren
DieSchwarzeHand Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Ok das habe iist nun auch klar, könntest du mir vil. für die doofe Frage 6 Die JA-Antowrt geben? Damit kann ich bestimmt richtig glänzen, wenn er ein NEIN erwartete. Zitieren
grueni Geschrieben 23. September 2006 Geschrieben 23. September 2006 Kleiner Tip: Auch bei einer Funktion kann man mit Referenzparametern arbeiten. Wie würdest du denn das "Ja" begründen? Zitieren
DieSchwarzeHand Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Ja...mmm. Also wenn ich in der Function mit Referenzparametern Arbeite kann ja der veränderte Wert in das Programm übergeben, aber ich danke bei einer Function hat man am ende nur einen Augabewert und nur Procedures können auch mehr als einen Ausgabewert haben, und wir haben doch 2 ausgabewerte? Zitieren
grueni Geschrieben 23. September 2006 Geschrieben 23. September 2006 Dein Lehrer will vermutlich hören, daß man eine Prozedur verwenden soll, weil eine Funktion nur einen Rückgabewert hat, das hast du richtig verstanden. Braucht man mehr als einen Rückgabewert, dann muß man mit Referenzparametern arbeiten. function xxxx (var a,b: real): integer; Var zwspeicher: real; Begin Zwspeicher :=a; a:=b; b:=zwspeicher; result := 1; //kann man auch weglassen, aber dann spuckt der Compiler ne // Warnung aus end; Das funktioniert genau so gut, wie die Prozedur, am Aufruf ändert sich auch nix. Der Rückgabewert ist zwar total sinnlos, aber stört nicht. Also ich würde sagen, die Prozedur kann ganz eindeutig auch als Funktion implementiert werden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.