mit Parameterübergabe, ohne Rückgabewert

Werbung
H
F-XC A N GE
H
F-XC A N GE
c u-tr a c k
N
y
bu
to
k
lic
Arbeits-/Infoblatt
Datum:
.d o
Unterrichtseinheit: Unterprogramme
(mit Parameterübergabe, ohne Rückgabewert)
Hier ist ein a für dich,
liebe Sub Berechnung!
Manchmal ist es notwendig, dass eine Prozedur an eine andere
etwas übergibt. Zum Beispiel dann, wenn die Eingabe in einer
Prozedur erfolgt und die Werte in der Prozedur für die Verarbeitung und/oder die Ausgabe wieder gebraucht werden.
Ich bin die Hauptprozedur!
So ist das z.B. hier der Fall: Modul LokaleLösung
Option Explicit
Sub Start()
Dim Preis As Currency
Dim Einkommen As Currency
Preis = InputBox(Prompt:="Bitte geben Sie den Preis " & _
"für das Haus ein!")
Einkommen = InputBox(Prompt:="Bitte geben Sie Ihr Einkommen
ein!")
'Aufruf der Sub Mietkosten mit Übergabe
Call Mietkosten(Preis, Einkommen)
End Sub
Sub Mietkosten(P As Currency, E As Currency)
If 2.5 * E <= 0.8 * P Then
MsgBox Prompt:="Dieses Haus ist viel zu teuer!"
Else
MsgBox Prompt:="Dieses Haus ist finanzierbar!"
End If
End Sub
Private Sub Start()
…
Call Mietkosten(Preis, Einkommen)
…
…
End Sub
Private Sub Mietkosten(P as Currency, E as
Currency)
…
…
End Sub
o
.c
m
C
m
w
o
.d o
w
w
w
w
w
C
lic
k
to
bu
y
N
O
W
!
PD
O
W
!
PD
c u-tr a c k
.c
H
F-XC A N GE
H
F-XC A N GE
c u-tr a c k
N
y
bu
to
k
lic
Arbeits-/Infoblatt
Datum:
Unterrichtseinheit: Unterprogramme
(mit Parameterübergabe, ohne Rückgabewert)
Das funktioniert so:
Bei der Definition einer Prozedur wird ein Übergabebereich für Daten vorgesehen, auf welche
die Prozedur bei der Ausführung Zugriff hat (sog. Parameter). Die bei Aufruf der Prozedur als
Argument angegebenen Werte (im Beispiel Preis und Einkommen) werden in diesen Bereich
kopiert (also in P und in E). Für jedes bei Aufruf zu übergebendes Argument sind der Datentyp sowie der Name festgelegt.
Man hätte das Ganze aber auch einfacher lösen können, nämlich so:
Option Explicit
Dim Preis As Currency
Dim Einkommen As Currency
Sub Main()
Eingabe
Verarbeitung
End Sub
Sub Eingabe()
Preis = InputBox(Prompt:="Bitte geben Sie den Preis " & _
"für das Haus ein!")
Einkommen = InputBox(Prompt:="Bitte geben Sie Ihr Einkommen
ein!")
End Sub
Sub Mietkosten()
If 2.5 * Einkommen <= 0.8 * Preis Then
MsgBox Prompt:="Dieses Haus ist viel zu teuer!"
Else
MsgBox Prompt:="Dieses Haus ist finanzierbar!"
End If
End Sub
Wo liegt der Unterschied?
Der Unterschied liegt an dem Ort, an dem die Variablen deklariert sind.
In Lösung 1 sind die Variablen lokal deklariert, das bedeutet innerhalb einer bestimmten
Prozedur. Dann kennt nur die Prozedur selbst die Variablen, den anderen Prozeduren kennen
sie nicht und können auch nicht auf sie zugreifen.
In Lösung 2 sind die Variablen global deklariert, das bedeutet auf Modulebene, außerhalb
der Prozeduren selbst. Das hat zur Folge, dass alle Prozeduren dieses Moduls auf sie zugreifen
können. Das bedeutet aber auch, dass jede Prozedur sie verändern kann.
In der Programmierung wird effektiv nicht mit globalen Variablen gearbeitet. Denn oftmals
arbeiten die Programmierer an verschiedenen Prozeduren und da wäre es sehr müßig, sich
immer erkundigen zu müssen, welche globalen Variablen es gibt. Man würde auch den Überblick verlieren. Man arbeitet daher mit lokalen Variablen und schafft Schnittstellen zu anderen
Prozeduren, die Übergabeparameter.
Öffnen Sie nun die Arbeitsmappe ABX_Uebungen und studieren Sie Übung2. Machen Sie
daraus eine Lösung mit Haupt- und Unterprogrammen
a) nach der Methode mit den lokalen Variablen
b) nach der Methode mit den globalen Variablen
.d o
o
.c
m
C
m
w
o
.d o
w
w
w
w
w
C
lic
k
to
bu
y
N
O
W
!
PD
O
W
!
PD
c u-tr a c k
.c
Herunterladen