home *** CD-ROM | disk | FTP | other *** search
/ Inside Multimedia 1995 July / IMM0795.ISO / demo / optix / optxfpac.set / VARIABLE.INF < prev    next >
Text File  |  1995-01-18  |  13KB  |  337 lines

  1.  
  2. Variablen
  3.  
  4. Variablen haben in einem Programm dieselbe Funktion, wie wir sie aus der 
  5. Mathematik kennen. Sie werden als Platzhalter für Größen oder Ausdrücke 
  6. (numerische oder alphanumerisch) eingesetzt, deren Inhalte erst im Programm-
  7. verlauf ermittelt und zugewiesen werden und sich im weiteren Programm ständig 
  8. verändern können. Wir wissen also entweder zum Zeitpunkt der Programmentwicklung
  9. nur, 'daß' etwas in diesen Variablen abgelegt wird, aber noch nicht 'was', oder
  10. wir weisen ihnen im Programmlisting Inhalte zu, die wir an den gegebenen Stellen
  11. für notwendig halten.
  12.  
  13. Um keine Mißverständnisse aufkommen zu lassen, auf eine Art wissen wir im 
  14. ersten Fall schon, 'was' diese Variablen aufzunehmen haben (Texte oder Werte), 
  15. wir wissen nur nicht, welcher konkrete Inhalt es sein wird. Eine Entscheidung 
  16. hat man also von vorneherein selbst zu treffen. Nämlich, welcher Variablentyp 
  17. einzusetzen ist.
  18.  
  19. Es gibt zwei grundlegend verschiedene Typen von Variablen. Das eine sind die 
  20. numerischen, bzw. Werte-Variablen und das andere die alphanumerischen, bzw. 
  21. Text- oder auch Stringvariablen genannt.
  22.  
  23. Numerische Variablen haben die Aufgabe, Werte zu speichern.
  24.  
  25.  
  26.     NumVar:=(22+13/3)*36
  27.  
  28.  
  29. Das Ergebnis dieser Berechnung wird der Variablen 'NumVar' zugewiesen. Solange 
  30. keine weiteren Werte an diese Variable übergeben werden, enthält sie nun also
  31. das Ergebnis der rechtsstehenden Berechnung. Dieser Wert kann im Laufe des 
  32. Programms beliebig oft erfragt oder auch durch Neuzuweisungen verändert werden.
  33.  
  34. Bei arithmetischen Operationen ist zu beachten, daß OPTIX200 vorerst nicht über 
  35. Realberechnung verfügt. Diese Entscheidung wurde getroffen, da in einem 
  36. Animationssystem eine interne Realarithmetik den größten Teil aller 
  37. arithmetischen Vorgänge bis zum Faktor 20 langsamer werden lassen würde, 
  38. wodurch ein erheblicher Teil der Animationsdynamik zunichte gemacht werden 
  39. würde. Da die internen Zwischenrechnungen ebenfalls mit Integerwerten 
  40. durchgeführt werden, ist darauf zu achten, daß so - abhängig von der 
  41. Klammerstellung und von der Reihenfolge der Operationen - aus einem 
  42. arithmetischen Ausdruck mehrere Ergebnisse folgen können:
  43.  
  44.     13/3*36  ergibt    144        (Integer(13/3)    =4)*36
  45.     13*36/3  ergibt    156        (Integer(13*36)=468)/3
  46.  
  47. Daraus ergibt sich, daß z.B. bei möglichst genau  gewünschten Interpolations-
  48. ergebnissen zuerst zu multiplizieren und dann zu dividieren ist.
  49.  
  50.  
  51. OPTIX verfügt über den numerischen Variablentyp LONG-INTEGER. Erlaubt sind 
  52. also nur Ganzzahlen, die intern als vorzeichenbehaftetes Longformat mit 4 Byte 
  53. Länge im Wertebereich von ca. -2.7Mrd. bis  ca. +2.7Mrd. abgespeichert werden. 
  54. Integerzahlen sind Zahlen, die keine Nachkommastellen beinhalten können. 
  55.  
  56. In Text-, bzw. Stringvariablen (String; engl.: Kette / Reihe / Schnur / Saite) 
  57. werden dagegen keine Werte, sondern Textzeichen abgelegt. Genaugenommen sind 
  58. diese Zeichen ebenfalls Werte, wie wir es an anderer Stelle schon kennengelernt
  59. haben (ASCII-Zeichen). Nur bei dieser Art der Variablen 'weiß' OPTIX200, daß es 
  60. die hier abgelegten Werte nicht als Zahlen, sondern als ASCII-Zeichen zu 
  61. interpretieren hat. Vorausgesetzt, es wurde ihm klargemacht, daß es sich hier 
  62. um eine Stringvariable handelt. Das tut man, indem man durch den DEFS-Befehl 
  63. am Programmanfang den Namen der Variablen bei OPTIX200 anmeldet (deklariert).
  64. In OPTIX200 ist es zwar nicht zwingend notwendig, aber als bessere Kennzeichnung 
  65. (zum Zwecke der eindeutigen Identifikation) innerhalb des Programms empfiehlt 
  66. es sich - wie auch z.B. in BASIC-Dialekten üblich, dem Variablennamen ein '$' 
  67. (Dollarzeichen - z.B. Var$) anzuhängen. Dieses ist dann nicht zu verwechseln 
  68. mit dem anführenden Dollarzeichen von Hexadezimal-werten (z.B. $A1F7)
  69.  
  70. Eine Stringvariable kann in OPTIX200 eine Zeichenkette mit einer Anzahl von bis 
  71. zu 255 einzelner Textzeichen aufnehmen. Die Länge, die eine solche Variable 
  72. speicherintern annimmt, hängt jeweils davon ab, wieviele Zeichen zugeordnet 
  73. wurden. 
  74.  
  75.         A$ :='OPTIX'
  76.         LEN(A$,Ln)
  77.  
  78.  
  79. Die Funktion LEN liefert Ihnen in der num. Rückgabevariablen (hier: Ln) die 
  80. tatsächlich Zeichenlänge des übergebenen Textstrings (in diesem Fall den 
  81. Wert 5). Wenn Sie den ganzen Variableninhalt auf dem Bildschirm sehen wollen, 
  82. geben Sie
  83.  
  84.         PRINT(A$)
  85.  
  86. ein und der String wird auf dem Bildschirm ausgegeben.
  87.  
  88. Wie bereits gesagt, muß eine Variable vor dem eigentlichen Beginn des Programms
  89. definiert werden, d.h. bevor die Variable zum erstenmal benutzt wird, muß sie 
  90. dem Compiler/Encoder bekannt sein:
  91.  
  92.         DEF(ZEIT, 100)
  93.         BEGIN
  94.            CLEARSCREEN(8)
  95.            PAUSE(1000)
  96.            SETCOLOR(14)
  97.            LINE(0,0,639,479,Zeit)
  98.            LINE(639,0,0,479,Zeit)
  99.            PAUSE(0)
  100.         END
  101.  
  102. Der Befehl DEF definiert einen numerischen Variablenbezeichner. Dieser 
  103. Variablenname hat 16 signifikante Stellen, d.h. nur die ersten 16 Buchstaben 
  104. werden  zur Erkennung ausgewertet. Zulässig sind die Buchstaben A bis Z und @ 
  105. als erstes Zeichen, sowie die Sonderzeichen $, %, & als mögliche Kennung 
  106. verschiedener Variablentypen (num. oder String). Für alle weiteren Zeichen 
  107. dürfen auch die Ziffern  0 bis 9 verwendet werden. Groß- oder Kleinschreibung 
  108. ist hierbei unerheblich.
  109.  
  110.     Beispiel:
  111.             DEF(A)
  112.             DEF(ABC)        (entspr.  DEF(abc))
  113.             DEF(X0)
  114.             DEF(PUNKT23, 320)
  115.             DEF(I, -15)
  116.             DEF(K, $A0)        (hexadezimale Eingabe mit
  117.                          vorangestelltem $)
  118.             DEFS(Var)
  119.             DEFS(A_2$)
  120.             DEFS(Text$,'ABCabc123')
  121.  
  122. Optional kann hinter dem Variablenbezeichner ein Wert eingetragen werden. 
  123. Dieser Wert wird der Variable als Anfangswert zugewiesen. Wird kein Wert 
  124. angegeben, wird als Anfangswert Null eingesetzt. Weitere Wertzuweisungen 
  125. innerhalb des Programms sind mit folgendem Ausdruck möglich:
  126.  
  127.         ZEIT    :=    100
  128.         Text$    :=    'XYZxyz'
  129.  
  130. Alternativ könnte unser Programm dann folgendermassen aussehen:
  131.  
  132.         DEF(ZEIT)
  133.         DEFS(Text$)
  134.         BEGIN
  135.            ZEIT := 100
  136.            STR(ZEIT,4,Text$)
  137.            CLEARSCREEN(8)
  138.             ....
  139.            LINE(0,0,xmax,ymax,Zeit)
  140.             LINE(xmax,0,0,ymax,Zeit)
  141.             ....
  142.            PRINTAT(100,100,Text$)
  143.         END
  144.  
  145. Es gelten folgende Werte-Systemvariablen intern als vorab definiert:
  146.  
  147.         ON für 1
  148.         und 
  149.         OFF für 0 (hier nicht verwendet; z.B. KEY(ON) )
  150.  
  151.     oder:
  152.  
  153.         TRUE für ungleich Null
  154.         und 
  155.         FALSE für 0 (z.B. IF Flag=FALSE)
  156.  
  157.  
  158. Matritzen und Vektoren
  159.  
  160. OPTIX ist ein Programmiersystem, daß auch komplexe Multimedia-Anwendungen 
  161. ermöglichen soll. In einem solchen System kommt man ohne eine weitere Gattung 
  162. der Variablentypen nicht aus. Man nennt sie FELDER oder ARRAYS ('array'; 
  163. engl.: Aufstellung/Reihe/Ordnung).
  164.  
  165. Wer in der Schule gut aufgepaßt hat, weiß, daß man zur Berechnung einer 
  166. Funktionskurve mindestens zwei Größen benötigt. In den meisten Fällen werden 
  167. dies die Größen 'X' und 'Y' gewesen sein. Der Berechnungsvorgang ist der, 
  168. daß zu jeder angenommenen Größe 'X' anhand einer Funktionsgleichung die 
  169. Größe 'Y' zu ermitteln war. Aus den Schnittpunkten dieser beiden Größen 
  170. ergaben sich dann die Punkte der Kurve. Diese beiden Werte stellten auf die 
  171. jeweilige Funktion bezogen ein KOORDINATENPAAR dar. Um nun mit den jeweils 
  172. zusammengehörenden Ordinaten-Werten nicht durcheinanderzukommen, kann man 
  173. sich ein Feld einrichten.
  174.  
  175. Dieser Vorgang ist nichts anderes, als das, was wohl die meisten unter dem 
  176. Begriff WERTETABELLE kennen. Solch ein zweidimensionales Feld wird auch als 
  177. MATRIX bezeichnet, wovon jede einzelne Dimension einen VEKTOR darstellt.
  178.  
  179.  
  180.  
  181.  
  182.             MATRIX-Grafik  (im Handbuch)
  183.  
  184.  
  185.  
  186.  
  187. Ein VEKTOR (hier im Sinne von 'Einheitsvektor') ist dagegen im allgemeinen 
  188. Verständnis ein Feld, das nur eine Dimension besitzt und meist dazu verwendet 
  189. wird, um mehrere Werte, die zu einer bestimmten Gruppe gehören, unter einer 
  190. gemeinsamen 'Überschrift' (dem Variablennamen) zusammenfassen und ordnen zu 
  191. können.
  192.  
  193.  
  194. Aufbau eines mehrdimensionalen Feldes
  195.  
  196. Stellen Sie sich bitte einen Schrank vor. Dieser Schrank wird nun in zwei 
  197. Hälften geteilt. Eine rechte und eine linke Hälfte. Innerhalb der Hälften 
  198. sind Schubladen untergebracht. Nehmen wir an, jede Hälfte besitzt zwei 
  199. Schubladen. Diese Schubladen werden nun wiederum in einzelne Fächer 
  200. unterteilt. In unserem Beispielfall erhält jede Schublade vier Fächer, 
  201. die jedes wiederum ein Register mit 50 Elementen enthält.
  202.  
  203. Wir haben nun also einen Schrank mit insgesamt 800 Register-Elementen 
  204. (2*2*4*50) eingerichtet. Die entsprechende Dimensionierung dazu:
  205.  
  206.            DEFAI(Schrank,2,2,4,50) 
  207.  
  208. Wir nehmen hier an, daß uns ein Datenformat in Wortbreite (2 Byte = -32.768 
  209. bis +32.767) ausreicht (deshalb DEFAI) woraus sich ein Speichergesamtbedarf 
  210. für dieses Feld von 800*2 = 1.600 Byte ergibt. 
  211.  
  212. Angesichts der Tatsache, daß sich alle numerischen OPTIX-Felder den momentan 
  213. verbleibenden DOS-Arbeitsspeicher teilen können, wird erkennbar, daß es ohne 
  214. weiteres möglich ist, mehrere derartige Felder parallel zu verwalten. Bei 
  215. verbleibenden 64 KB RAM wären in unserem Beispielfall 40 Felder bei gleicher 
  216. Dimensionierung gleichzeitig möglich (64.000/1.600=40). 
  217.  
  218. In diesem Schrank sollen nun verschiedene 'Dinge' untergebracht werden. In
  219. unserem Fall sind dies Zahlen (hier z.B. : Datenbank-Index).
  220.  
  221. Zur besseren Orientierung ordnen wir den beiden Schrankseiten ersteinmal 
  222. Begriffe zu:
  223.  
  224.  
  225.  linke Seite    =>  'Bilder'     (Index der 1.Dim = Schrank(1,...)
  226.  rechte Seite    =>  'Texte'        (Index der 1.Dim = Schrank(2,...)
  227.  
  228.  
  229. Den beiden Schubladen der 'Bilder'-Seite geben wir die Aufschriften:
  230.  
  231.  
  232.   1. Schublade    =>  'Photos'      (Index der 2.Dim = Schrank(1,1,..)
  233.   2. Schublade    =>  'Grafiken'  (Index der 2.Dim = Schrank(1,2,..)
  234.  
  235.  
  236. Die Schubladen der 'Texte'-Seite bekommen die Namen:
  237.  
  238.  
  239.  1. Schublade      =>  'Prosa'     (Index der 2.Dim = Schrank(2,1,..)
  240.  2. Schublade    =>  'Gedichte'    (Index der 2.Dim = Schrank(2,2,..)
  241.  
  242.  
  243.  
  244.             Grafik:Schrank1  (im Handbuch)
  245.  
  246.  
  247.  
  248. Nun erhalten die einzelnen Elementen ebenfalls einen Namen:
  249.  
  250.  
  251.  
  252.             Grafik:Schrank2 (im Handbuch)
  253.  
  254.  
  255.  
  256. Bis hierhin mag es manchem als übertrieben erscheinen. Der Sinn der Sache ist 
  257. aber der, daß nun anhand von sogenannten 'Indizes'  auf jedes einzelne 'Blatt' 
  258. der untersten Ebene zugegriffen werden kann.
  259.  
  260. Unter 'Index' versteht man allgemein ein Unterscheidungsmerkmal bzw. eine 
  261. Kennzeichnung gleichartiger Größen, die dann statt durch ihren Namen durch 
  262. einen ihnen zugewiesen Tabellenwert (Tabellenposition = 'Index') identifiziert 
  263. werden können.
  264.  
  265.   z.B.  Oberbegriff 'Tier'
  266.  ----------------------------------
  267.  
  268.            1 = 'Haus-'
  269.            2 = 'Nutz-'
  270.            3 = 'Raub-'
  271.            4 = 'Schalen-'
  272.            5 = 'Stachel-'
  273.  
  274. Statt des Begriffs 'Raubtier' könnte man nun auch 'Tier(3)' sagen und dann - 
  275. um die Bedeutung von (3) zu erfahren - in der Tabelle unter dem Index 3 
  276. nachschauen.
  277.  
  278. In unserem Fall hat jedes Fach der dritten Dimension noch 50 'Unter-Elemente' 
  279. zugewiesen bekommen, die nun belegt werden können. Die Titel der oberen 
  280. Dimensionen (Prosa, Erotik etc.) sind Sinnbegriffe, die die Orientierung 
  281. erleichtern sollen. 
  282.  
  283. Um diesen Sinnbegriffen 'echte' Begriffe zuzuordnen -  also um die 
  284. Identifikation der einzelnen Schrankseiten, Schubladen und der darin 
  285. enthaltenen Fächer zu vereinfachen - kann man Variablen definieren, die den 
  286. mit dem Begriff verbundenen Index speichern:
  287.  
  288.     Bilder:=1
  289.             Photos:=1
  290.                     Erotik:=1
  291.                     Landschaft:=2
  292.                     Makros:=3
  293.                     Portrait:=4
  294.             Grafiken:=2
  295.                     Layouts:=1
  296.                     Raytrace:=2
  297.                     Logos:=3
  298.                     Skizzen:=4
  299.     Texte:=2
  300.             Prosa=1
  301.                     Drama:=1
  302.                     Tragödie:=2
  303.                     Komödie:=3
  304.                     Essay:=4
  305.             Gedichte:=2
  306.                     Aphorismen:=0
  307.                     Balladen:=1
  308.                     Klassik:=2
  309.                     Humor:=4
  310.  
  311. Jetzt fällt es natürlich leicht, z.B. gezielt  in Erfahrung zu bringen, 
  312. welchen Datenbank-Zugriffsindex das 41. Blatt der Abteilung 'Logos' im 
  313. Fach 'Grafiken' der Schublade 'Bilder'im Feld 'Schrank' hat. Anhand dieser 
  314. Index-Variablen sind nun z.B. Ausdrücke folgender Art denkbar:
  315.  
  316.  
  317.                  Index:=Schrank[Bilder,Grafiken,Logos,41]
  318.             Readdbentry(Index)
  319.             Readdbpic....
  320.             etc.
  321.  
  322.  
  323. Mit diesem Ausdruck würde der Eintrag mit dem Index 41 (im übertragenen Sinn: 
  324. das 41. Blatt) aus der Abteilung 'Logos' des Faches 'Grafiken' der Schublade 
  325. 'Bilder' im Feld 'Schrank' an die allgemeine Variable 'Index' zugewiesen.
  326.  
  327.     oder:
  328.          IF Schrank(Texte,Prosa,Komödie,1]=0
  329.                   PRINT "Haben Sie nichts zu lachen??'
  330.               ENDIF
  331.  
  332.     oder durch 
  333.  
  334.         Schrank[Bilder,Photos,Erotik,6]:=286
  335.  
  336. kann natürlich auch etwas in dem Schrank abgelegt werden.
  337.