'**************************************************************************** ' GLOBLVAR.BAS = Variablen in Haupt- und Unterprogrammen gemeinsam verwenden ' ============ ' Dieses QBasic-Programm demonstriert die Verwendung von Globalen Variablen ' Globale Variable sind Variable, die sowohl in einem Unterprogramm als auch ' im Hauptprogramm und/oder anderen Unterprogrammen zug„nglich sind. ' Es gibt zwei Varianten fr die Deklaration globaler Variablen, die im vor- ' liegenden Programm demonstriert werden (Fr und Wider: siehe auch {11/125}): ' ' Variante 1: Global-Deklaration im Hauptprogramm (Normalvariante) ' --------------------------------------------------------------------------- ' Variablen des Hauptprogramms, die auch in einer SUB zug„nglich sein sollen, ' werden im Haptprogramm als Globalvariable deklariert. Dies ist die am h„u- ' figsten verwendete Variante. ' - Untenstehendes Beispiel "Wurzelberechnung": ' Die Variablen n% und m# sowie das Feld array# sind im Hauptprogramm mit ' SHARED und COMMON SHARED als Globalvariable deklariert und somit auch in ' der Subroutine 'Wurzel' zugreifbar. ' - Vorteile: ' - Alle Globalvariablen sind in bersichtlicher Form zentral aufgelistet. ' - Einfacheres Handling, weiniger Programmieraufwand ' - Auch statische (fest dimensionierte) Felder und anwenderdefinierte ' Felder mit TYPE..END TYPE sind m”glich ' - Nachteile: ' - Globalvariable sind in allen SUBs/ FUNCTIONs zugreifbar, auch wenn ' sie dort garnicht ben”tigt werden. Dies kann zum unbeabsichtigten ' Žndern von Variablen fhren und die Fehlertr„chtigkeit bei groáen ' Softwareprojekten erh”hen. ' ' Variante 2: Global-Deklaration in der SUB/FUNCTION (Spezialvariante) ' -------------------------------------------------------------------------- ' Variablen einer SUB/FUNCTION, die auch im Hauptprogramm zug„nglich sein ' sollen, werden in der SUB/FUNCTION als Globalvariable deklariert. ' (Umgekehrung von Variante 1; nur gelegentlich verwendet) ' - Untenstehendes Beispiel "Potenzberechnung": ' Die Variablen z% und q& sowie das Feld feld& sind in der Subroutine ' 'Quadrat' mit SHARED als Globalvariable deklariert und somit auch im ' Hauptprogramm zugreifbar. ' - Vorteile: ' - Variablen sind nur in denjenigen SUBs/FUNCTIONs bekannt, die auch ' ben”tigen: Dies kann in groáen Softwareprojekten Fehler vermeiden ' helfen. ' - Allgemeine SUBs/FUNCTIONs, die in vielen Programmen einsetzbar sind, ' lassen sich einfacher in ein neues Programm einfgen, da die DIM ' SHARED-Deklaration im Hauptprogramm entf„llt. ' - Nachteile: ' - Sollen die globalen Variablen und Felder auch in anderen SUBs/FUNC- ' TIONs verwendet werden, so mssen sie dort ebenfalls erneut mit ' SHARED deklariert werden {11/124f}. Im Hauptprogramm ist dies nicht ' erforderlich. ' - Nur dynamische Felder (ohne Dimensionierung) m”glich ' ' Verwendete Befehle: SHARED, COMMON SHARED, DIM SHARED ' ' ' \ (c) Thomas Antoni, 25.09.99 - 28.7.05 ' \ /\ Mailto:thomas@antonis.de ' ( ) http://www.antonis.de ' .( o ). ' ----==== Hottest QBasic Stuff on Earth !!! ====---- ' '**************************************************************************** DECLARE SUB Wurzel () DECLARE SUB Quadrat () '-----Deklaration der Globalvariablen des Hauptprogramms fr Variante 1 ----- COMMON SHARED n%, m# 'hier k”nnte man ', array#()' anfgen, wenn array# ein 'dynamisches Feld w„re DIM SHARED array(1 TO 3) AS DOUBLE '-------- Variante 1 -------------------------------------------------------- DO CLS PRINT "Teil 1: Wurzelberechnung" PRINT "========================" INPUT "gib Zahl ein "; n% CALL Wurzel PRINT "Die Quadratwurzel lautet:"; m# PRINT "Die Kubikwurzel lautet:"; array#(1) PRINT "Die 4. Wurzel lautet:"; array#(2) PRINT "Die 5. Wurzel lautet:"; array#(3) PRINT '-------- Teil 2 ------------------------------------------------------------ PRINT "Teil 2: Potenzberechnung" PRINT "========================" INPUT "gib Zahl 1...73 ein "; z% CALL Quadrat PRINT "Die Quadratzahl lautet:"; q& PRINT "Die Kubikzahl lautet:"; Feld&(1) PRINT "Die 4. Potenz lautet:"; Feld&(2) PRINT "Die 5. Potenz lautet:"; Feld&(3) PRINT '-------- Schluádialog ------------------------------------------------------ PRINT PRINT "Wiederholen... [beliebige Taste] Beenden... [Esc]" DO: taste$ = INKEY$: LOOP WHILE taste$ = "" LOOP WHILE taste$ <> CHR$(27) END SUB Quadrat SHARED z%, q&, Feld&() q& = z% * z% Feld&(1) = z% ^ 3 Feld&(2) = z% ^ 4 Feld&(3) = z% ^ 5 END SUB SUB Wurzel m# = n% ^ (.5) array#(1) = n% ^ (1 / 3) array#(2) = n% ^ (1 / 4) array#(3) = n% ^ (1 / 5) END SUB