Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatik Vorkurs Programmieren.pdf
Скачиваний:
13
Добавлен:
19.03.2016
Размер:
2.38 Mб
Скачать

168

Lektion 9 Lokale und globale Variablen

Statt TEST3 :ADD ruft man im Programm SPIRT das Unterprogramm TEST4 :ADD :UM auf.

An dieser Stelle kann man nun fragen, ob es nicht manchmal verwirrend ist, den gleichen Namen für die Variablen des Unterprogramms und des Hauptprogramms zu verwenden. Natürlich kann man versuchen, solche Situationen zu vermeiden. Dies ist aber nicht immer leicht und manchmal kann es sogar unerwünscht sein. Wenn wir so bei einem größeren modularen Entwurf vorgehen, kann es auch mühsam sein, bei den vielen Variablen darauf zu achten. Manchmal kommen auch Situationen vor, wie wir sie oft bei der Verwendung von Parametern angetroffen haben, in denen wir durch einen gleichen Namen den Zusammenhang und die gleiche Bedeutung für das zu zeichnende Bild ausdrücken wollten. Das Ganze zeigt aber deutlich, dass man bei der modularen Herstellung von umfangreichen Programmen immer die Übersicht behalten muss. Aber die Art, wie der Rechner mit lokalen Variablen umgeht, ist für uns vorteilhaft. Sie schätzt uns vor unangenehmen Überraschungen, die dadurch entstehen können, dass man unbeabsichtigt den gleichen Namen für eine globale Variable verwendet, die schon vor langer Zeit in irgendeinem fast vergessenen Unterprogramm verwendet wurde.

Zusammenfassung

Globale Variablen sind alle Variablen eines Programms, die im Programm in der to-Zeile oder später mittels make definiert werden. Wenn ein Programm keine Unterprogramme hat, gibt es nur globale Variablen. Die globalen Variablen von Unterprogrammen eines Hauptprogramms sind die lokalen Variablen des Hauptprogramms. Wir nennen sie lokal, weil sie nur angesprochen und geändert werden können, während der Rechner das Unterprogramm ausführt.

Der Rechner speichert Variablennamen immer zusammen mit dem Namen des Programms, in welchem sie definiert wurden. Wenn man den gleichen Variablennamen in mehreren unterschiedlichen Programmen verwendet, handelt es sich immer um unterschiedliche Variablen. Aus der Sicht des Rechners hat jede Variable einen Namen, der aus zwei Teilen besteht. Der erste Teil entspricht dem eigenen Namen. Der zweite Teil ist der Name des Programms, in welchem die Variable definiert (global) wurde. Dadurch ordnet der Rechner Variablen mit identischem Namen, die in unterschiedlichen Programmen definiert wurden, in unterschiedliche Register ein. Ihre Werte können sich also unabhängig voneinander verändern.

Der Befehl print :A verursacht, dass der Wert der Variablen :A auf dem Bildschirm

169

angezeigt wird. Das kann man zur Kontrolle der korrekten Arbeit eines Programms gut verwenden. Mit print [ . . . ] kann man beliebige Texte oder Zahlenfolgen ausdrucken.

Kontrollfragen

1.Was sind globale Variablen eines Programms? Wie kann man sie definieren?

2.Was sind lokale Variablen eines Programms? Warum heißen sie lokal?

3.Welche Art von Variablen hat ein Programm ohne Unterprogramme?

4.Was alles „merkt sich“ der Rechner bei der Definition einer neuen Variable?

5.Was passiert, wenn unterschiedliche Programme Variablen mit gleichem Namen verwenden?

6.Was sind deiner Meinung nach die Vorteile des verwendeten Umgangs mit Variablen gegenüber der Identifizierung aller Variablen mit gleichem Namen? Warum ist es nicht vorteilhafter, gleiche Namen zu verbieten?

7.Wie funktioniert der Befehl print? Was alles kann man mittels print darstellen lassen?

Kontrollaufgaben

1.Welche Unterschiede gibt es zwischen den folgenden drei Programmen VIELQ1, VIELQ2 und VIELQ3?

to VIELQ1 :GR :AN

repeat :AN [ QUADRAT :GR make "GR :GR+10 ] end

to VIELQ2 :GR :AN

repeat :AN [ QUADRAT :GR ] end

to VIELQ3 :GR :AN

repeat :AN [ QUADRAT :GR WACHSE10 :GR ] end

170

Lektion 9 Lokale und globale Variablen

to WACHSE10 :GR make "GR :GR+10 end

Simuliere alle drei Programme mit Aufrufen für :GR = 100 und :AN = 3 und beschreibe die Entwicklung der Speicherinhalte jeweils nach der Ausführung eines einzelnen Befehls in einer Tabelle. Füge print Befehle in die Programme ein, um die Richtigkeit deiner Tabelle zu dokumentieren.

2.Das folgende Programm kann man verwenden, um schwarze Dreiecke zu zeichnen, deren Höhe ebenso groß ist wie die Breite (Abb. 9.2).

:A

:A

:A

:A

Abbildung 9.2

to SCHWDR :A

rt 90

repeat :A/2 [ fd :A rt 180 fd 0.5 rt 90 fd 1 lt 90 make "A :A1

fd :A rt 180 fd 0.5 lt 90 fd 1 rt 90 make "A :A1 ]

end

Verwende das Programm SCHWDR als Unterprogramm eines Programms STRASSE :AN :A zum Zeichnen einer wählbaren Anzahl :AN von Häusern (Abb. 9.2) mit einer frei wählbaren Breite :A. Bestimme die Werte der Variablen nach jedem Aufruf von SCHWDR :A und direkt nach der Ausführung des Unterprogramms SCHWDR durch den Aufruf STRASSE 70 4.

3.Das Programm SCHWDR hat in seiner Schleife eine lange Folge von Befehlen. Diese kannst du fast halbieren, wenn du eine Variable für eine beliebige frei wählbare Drehung einführst. Weißt du, wie es geht?

171

4.Zeichne eine beliebig lange Folge von Häusern wie in Abb. 9.2 auf der vorherigen Seite, jedoch mit dem Unterschied, dass der Wert der Variable :A von Haus zu Haus immer um 10 wächst.

5.Entwirf ein Programm zum Zeichnen beliebiger, farbig gefüllter, gleichschenkliger Dreiecke mit wählbarer Basis :A und wählbarer Höhe :H.

6.Betrachte das folgende Programm

to PFLANZE :LANG :HOCH :STEP :SUBL :SUBH repeat :HOCH [ fd :STEP NADEL :LANG rt 3

make "LANG :LANG:SUBL

make "STEP :STEP:SUBH ]

end

mit dem Teilprogramm

to NADEL :LANG

lt 45 fd :LANG bk :LANG rt 90 fd :LANG bk :LANG lt 45

end.

Welche Variablen sind Parameter? Welche Variablen des Hauptprogramms PFLANZE sind global und welche lokal?

Rufe PFLANZE 100 50 15 2 0.3 auf. Erstelle eine Tabelle mit den Variablenwerten für die ersten drei Durchläufe der Schleife repeat des Hauptprogramms. Füge print-Befehle so ein, dass man die Entwicklung der Variablenwerte :LANG und :STEP beobachten kann.

7.Würde sich etwas in der Auswirkung des Programms PFLANZE aus der Kontrollaufgabe 6 ändern, wenn man den Befehl

make "LANG :LANG :SUBL

aus dem Hauptprogramm löschen und als letzten Befehl in das Unterprogramm NADEL schreiben würde? Begründe deine Antwort.

8.Zeichne einen Strauss von Pflanzen durch das mehrfache Verwenden des Programms PFLANZE. Die Anzahl der Pflanzen soll 5 sein und die Farbe sowie alle anderen Charakteristika jeder einzelnen Pflanze sollen frei wählbar sein. Zusätzlich soll der Winkel, unter welchem die einzelnen Pflanzen aus dem Boden wachsen, frei wählbar sein.

Eine Möglichkeit ist es, die Pflanzen an unterschiedlichen Stellen wachsen zu lassen.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]