Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Brauche Drigend Hilfe Bei Delphi Ha

Empfohlene Antworten

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:

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.

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"

Erstmal ein großes Dankeschön, aber dieses Call by Value bzw. Reffernce plane ich nicht und die Fragen 6 und 7?

Und dann is da noch die Frage:

WIE LAUTET DER AUFRUF DER PROCEDURE? WELCHJE WERTE STEHEN ANSCHLIEßEND IN IND ZAHL1 UND ZAHL2?????

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.

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.

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. ;)

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.

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?

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. :D

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.