home *** CD-ROM | disk | FTP | other *** search
/ Action! Club Magazin 4B / Action_Club_Magazin_4_1987_Action_User_Group_Side_B.atr / arrays.krs next >
Text File  |  2023-02-26  |  5KB  |  1 lines

  1. ARRAYS.KRS¢*************************************¢*                                   *¢*                                   *¢*     >>>    A R R A Y S    <<<     *¢*                                   *¢*      (Felder,Strings u.s.w.)      *¢*                                   *¢*  (c) 1987 by Action! User Group   *¢*                                   *¢*************************************¢¢¢¢Arrays, das sind Datenfelder, also ¢Variablen mit mehreren Elementen.Das¢koennen Zahlenfelder oder aber auch¢Zeichenketten (Strings) sein.¢¢Die Array muessen aehnlich wie die¢normalen Variablen am Anfang des ¢Programms oder nach einem 'MODULE'¢Befehl definiert werden. Natuerlich¢koennen die Arrays auch lokale Var-¢iablen oder Parameter sein. Doch dazu¢spaeter.¢Aus den vorangegangenen Kapiteln     ¢kennen wie ja bereits die Definitions-¢art fuer Variablen. In Action! muss¢nach dem Variablentypen (Byte,Card   ¢u.s.w...) 'Array' stehen:¢z.B.:¢¢BYTE ARRAY FELD,¢CARD ARRAY CFELD(20),¢BYTE ARRAY FELD=$5000,¢BYTE ARRAY FELD="STRING KONSTANTE",¢BYTE ARRAY FELD=[ 1 2 3]¢¢Nun gut...die Erklaerungen folgen ja:¢¢BYTE ARRAY FELD ¢¢Mit dieser Definition wird nun das ¢Array 'FELD' vereinbart. Das merk-   ¢wuerdige daran ist sicherlich, dass es¢keinerlei Hinweise auf die Laenge des¢Feldes gibt. Aber das ist in Action!¢moeglich, falls man nicht genau weiss,¢wie gross ein Feld sein soll. Aller-  ¢dings sollte man diese Methode nicht ¢waehlen. Aber in den meisten Faellen¢ist ja sowieso klar, wie gross ein ¢Feld sein soll. Zu den Spezialfaellen¢kommen wir gleich...¢¢Bevor wir weitermachen, noch etwas zur¢internen Darstellung der Felder:¢Im Beispiel oben haben wir 'FELD' als¢Namen fuer das Array. Wir koennen ¢'FELD' aber auch als normale Variable¢benutzen. In ihr steht naemlich die¢Startaddresse des Arrays. Es ist klar,¢dass dies eine CARD Variable sein muss¢   ¢Um die Startadresse eines Feldes fest-¢zustellen, koennte man folgendes ¢schreiben:¢¢BYTE ARRAY FELD(20)¢¢PROC MK_DEMO1()¢  PUTE()¢  PRINTE("Startadresse von 'FELD'")¢  PRINTCE(FELD)¢RETURN¢¢                  ¢In dem Beispiel steht schon die ¢naechste Definietionsart: Felder mit¢bestimmter Laenge. Im Beispiel wurde¢Feld auf maximal 20 Elemente ausgelegt.¢¢Dazu noch ein Hinweis: Ist die max-¢imale Feldgroesse KLEINER 256, dann ¢benutzt der Action! Compiler bei jedem¢Zugriff auf das Array die schnelle¢indiziert indizierte Addressierungs-¢art des 6502 Prozessors:¢        (z.B.: LDA (203),y)¢Das ist natuerlich platzsparender und¢wesentlich schneller. Anderenfalls¢werden die einzelnen Elemente eben ¢alle normal berechnet, was aber auch¢nicht tragischer ist.¢¢Wie man auf die einzelnen Elemente¢eines Arrays zugreift ist genauso ein-¢fach wie in Basic oder anderen Pro-¢grammiersprachen wie Pascal o.aeh.¢Natierlichen mit Klammern hinter dem¢Feldnamen:¢¢A=FELD(10)... schreibt das 10. Element¢¢von 'FELD' nach 'A'.¢¢Dazu noch ein simples Beispiel:¢¢BYTE ARRAY FELD(20)¢¢PROC MK_DEMO2()¢BYTE A,I¢ FOR I=1 TO 20  ¢  DO¢   FELD(I)=I   ; FELD MIT ZAHLEN VON¢  OD           ; 1 BIS 20...¢¢ I=20 ¢ DO ¢  A=FELD(I)    ; UND RUECKWAERTS ¢  PRINTBE(A)   ; WIEDER AUSGEBEN¢  I==-1¢ UNTIL I=0¢ OD¢¢RETURN¢¢Im obigen Beispiel bestand das Array¢aus BYTE Zahlen. Diese BYTE Arrays¢kann man aber auch als Zeichenketten¢(Strings) verwenden:¢¢BYTE ARRAY FELD(30)¢¢PROC MK_DEMO3()¢¢PRINTE("GEBE DEINEN NAMEN EIN")¢¢INPUTS(FELD) ; EINGEGEBENEN TEXT IN¢             ; IN FELD SPEICHERN¢¢PRINT("Hallo ")¢PRINTE(FELD)¢RETURN¢¢¢Natuerlich kann man auch hier wieder¢auf einzelne Elemente zugreifen. Bei ¢'STRINGS' sei aber noch gesagt, dass¢Element #0 immer die Laenge des¢Strings beinhaltet. Bei allen anderen¢Arrays kann Element #0 ganz normal¢benutzt werden.¢¢Die naechste Array-art:¢¢BYTE ARRAY FELD=$5000 ¢¢Hier wird das Array auf Adresse $5000¢gesetzt. Element #0 ist also in ¢Adresse $5000. Natuerlich kann man ¢auch hier die maximale Laenge def-¢inieren:¢BYTE ARRAY FELD(20)=$5000 ¢¢Das man die Arrays auf bestimmte ¢Speicheraddressen sezten kann, er- ¢moeglicht natuerlich wieder eine ganze¢Reihe von Anwendungen. Wie man ja ¢wissen sollte, kann man normale Var-¢iablen auch auf bestimmte Speichen¢addressen setzen. z.B:¢BYTE COLOR2=710¢Schreibt mann unter dieser Verein-¢barung irgendwo im Programm:¢¢COLOR2=0, so wird Speicheradresse 710¢gleich 0(In Graphics 2 Modus wird der¢Hintergrund dann schwarz.)¢¢Definieren wir aber z.B. ein Array¢wie diesen hier:¢¢BYTE ARRAY FARBEN(0)=708 ¢¢so koennen wir alle Farben auf ein-¢fachste Weise setzen(SETCOLOR oder¢POKE Routine ist langsamer, kostet¢mehr Speicherplatz und ist sowieso  ¢in einem Action! Programm uner-¢wuenscht!!!)¢Dazu ein Beispiel:¢¢BYTE ARRAY FARBEN(0)=708¢¢PROC MK_DEMO4()¢GRAPHICS(0)¢FARBEN(2)=0¢FARBEN(1)=15¢RETURN¢¢¢Es geht weiter mit :¢¢           ARRAYS2.KRS¢¢