home *** CD-ROM | disk | FTP | other *** search
/ Action! Club Magazin 3B / Action_Club_Magazin_3_1987_Action_User_Group_Side_B.atr / func.krs < prev    next >
Text File  |  2023-02-26  |  4KB  |  1 lines

  1. FUNC.KRS¢*************************************¢*                                   *¢*                                   *¢*      Die   F u n k t i o n        *¢*                                   *¢*                                   *¢*************************************¢¢So. Da waeren wir also bei den ¢Funktionen.¢Wer erinnert sich denn noch an den¢Mathe-Unterricht. Da war ja auch ¢immer von Funktionen u.s.w. die Rede.¢¢Action! kenn sie auch...¢¢Funktionen werden ja immer dann ein-¢setzt, wenn irgendwelche Ergebnisse¢herauskommen sollen.¢z.B.:¢¢X=P*P¢¢Nehmen wir an, dass 'P' irgendeine¢beliebige Zahl ist. Nach X=P*P ist¢X also immer das Quadrat von 'P'.¢Um die Funktionen zu erklaeren das¢Beispiel:¢¢CARD FUNC QUADRAT(CARD P1)¢RETURN (P1*P1)¢¢PROC MAIN()¢CARD I¢I=QUADRAT(2)¢PRINTCE(I)¢RETURN¢¢Sehen wir uns zunaechst nur die ¢PROC MAIN an:¢¢Nach dem Vereinbarungsteil          ¢PROC MAIN() wird 'I' als lokale¢Variable definiert.¢Danach steht I=QUADTRAT(2), d.h.¢dass die Funktion Quadrat mit Para-¢meter '2' aufgerufen wird. Den Wert,¢die diese FUNC ergibt, wird in 'I'¢gespeichert. 'I' ist also gleich¢das QUADRAT von '2'.¢¢In der FUNC passiert nun folgendes:¢hier nocheinmal die 'FUNC':¢    CARD FUNC QUADRAT(CARD P1)¢    RETURN (P1*P1)¢¢Zunaechst muss vereinbart werden, was¢fuer einen Wert die FUNC herausgeben-¢soll. In diesem Fall ist das ein Wert¢vom Typ 'CARD'. Dann steht 'FUNC', um¢dem Compiler mitzuteilen, dass eine¢FUNCtion vereinbart wird. Dann folgt¢der Functionsname und dann schliess-¢lich der Parameter-Teil.¢Auch die FUNC wird wie in einer PROC¢mit RETURN abgeschlossen. Dabei muss¢aber hinter RETURN in Klammern stehen¢was rausgegeben werden soll. Im Bei-¢spiel also P1*P1. Die Parameter¢werden also quadriert.¢Das Beispiel ist aber kein gutes.¢Ausser Werte rauszugeben kann in¢einer FUNC alles stehen, wie auch¢in einer PROC. z.B:¢¢CARD FUNC QUADRAT(CARD P1)¢¢ IF P1>255 THEN ¢   PRINTE("ZAHL ZU GROSS")¢   RETURN (0)  ¢ FI¢¢ RETURN (P1*P1)¢¢¢Sollte das Parameter groesser als 255¢sein, so wird eine '0' zurueckge-¢geben, da 256*256 nicht mehr mit¢einer CARD Variable darzustellen sind.¢Ansonsten wird das Quadrat zurueckge-¢geben.¢¢Anderes Beispiel: ¢                ¢¢BYTE FUNC LOBYTE(CARD P1)¢         ; >>>***  CARD UEBERGEBEN *¢ RETURN (P1)¢¢BYTE FUNC HIBYTE(BYTE P1,P2)¢  ; >>>*** TROTZDEM CARD UEBERGEBEN *¢ RETURN (P2) ¢¢PROC MAIN()¢BYTE LO,HI  CARD I¢DO¢ PUTE()¢ PRINTE("GEBE ZAHL EIN")¢ I=INPUTC()¢¢ LO=LOBYTE(I)¢ HI=HIBYTE(I)¢ PRINTB(LO)¢ PRINT("  ,  ") ¢ PRINTBE(HI)¢¢OD¢¢RETURN¢¢¢¢Da Programm fragt nach einer Zahl,¢die dann in Lo-und Hi-byte Werten¢ausgegeben wird.      ¢¢Die Funktionen scheinen etwas wider-¢spruechlich zu sein, da jedesmal ein¢BYTE Wert rausgegeben werden soll,¢aber z.B.: bei der LOBYTE FUNC eine¢CARD als Parameter uebergeben werden¢muss. Da die Function aber als BYTE¢FUNC vereinbartwurde, wird auch nur¢ein BYTE Wert ausgegeben. Man kann¢hinter RETURN auch einfach die CARD¢schreiben. Nur die ersten acht Bytes,¢also der BYTE Wert wird dann rausge-¢geben.¢¢Bei HIBYTE muss auch eine CARD als¢Parameter uebergeben werden. Diese¢CARD wird dann aber in zwei BYTE¢Parameter eingelesen. Das 2. BYTE¢Parameter ist dabei das Hibyte und¢kann daher als Funktionswert zu-¢rueckgegeben werden.¢¢Selbstverstaendlich koennen auch ¢konstante Werte an die FUNC Para-¢meter uebergeben werden.¢z.B.so:¢¢¢ LO=LOBYTE(256)¢ HI=HIBYTE(256)¢            ^¢            ^¢        konstante Werte.¢¢¢Als Parameter kann man aber auch Aus-¢druecke nehmen: z.B.:¢¢ LO=LOBYTE(10*10)¢¢oder¢¢ HI=HIBYTE(10*I) ¢    ¢¢Es gibt eine Reihe 'eingebauter'¢FUNCs im Action! System.¢z.B.: INPUTC()¢Schreibt man :¢¢ I=INPUTC()¢¢so wird in der FUNC INPUT eine zahl¢von der Tastatur eingelesen und in¢'I' gespeichert.¢¢¢Der Kurs geht weiter mit:¢¢¢           ARRAYS.KRS¢¢¢