DEF
Aus C64-Wiki
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl DEF unter BASIC V2 des Commodore 64.
Typ: Anweisung Allgemeine Programmier-Syntax: DEF FN <Funktionsname>(<Variable>)=<mathematischer Ausdruck>
Der BASIC-Befehl DEF ist dafür da, damit man mathematische Funktionen (FN) innerhalb von BASIC-Programmen selber definieren kann, die aus einer beliebigen mathemathischen Gleichung bestehen können. Die mathematische Gleichung darf neben Zahlenwerten und den mathematischen Zeichen auch mathematische Funktionen oder Ausleseanweisungen, die einen Zahlenwert zurückgeben, wie z.B. ABS(), AND, ATN(), ASC(), COS(), EXP(), FN<Funktionsname>(), FRE(), INT(), LEN() LOG(), NOT, PEEK(), POS(), OR, RND(), SGN(), SIN(), SQR(), STATUS bzw. ST, TAN(), TIME bzw. TI oder VAL().
In der DEF-Zeile wird die Funktion einmal komplett nachgebildet und kann nachher mit dem BASIC-Befehl FN <Funktionsname>(<Variable>) aufgerufen werden. Der Funktionsname muss mindestens aus einem Zeichen bestehen, davon ist das erste Zeichen stets ein Buchstabe (A-Z) und die nachfolgenden Zeichen dürfen entweder aus Buchstaben (A-Z) oder aus Zahlen (0-9) bestehen. Es kann auch eine Funktion überschrieben werden, wenn diese den gleichen Funktionsnamen besitzt wie eine schon definierte! Ist der Funktionsname länger als zwei Zeichen, werden die restlichen Zeichen ignoriert; d.h. FNTEST0 wird durch die Definition von FNTEST1 überschrieben, da der eigentliche Funktionsname FNTE ist.
Wenn der BASIC-Befehl nicht im Programmmodus ausgeführt wird, so erscheint die BASIC-Fehlermeldung ?ILLEGAL DIRECT ERROR. Wird der falsche Variablentyp benutzt, so erscheint entweder die BASIC-Fehlermeldung ?SYNTAX ERROR in Zeilennummer (bei Integer- bzw. Ganzzahlvariablen) ?TYPE MISMATCH ERROR in Zeilennummer (bei dem Versuch Zeichenkettenvariablen oder falsche Funktionen zu nutzen) oder ?ILLEGAL QUANTITY ERROR in Zeilennummer durch falsche Kombinationen (z.B. Zeichenkettenfunktionen, die eine Zeichenkette wiedergeben).
[bearbeiten] Beispiele
Zum Start eine einfache Definition, die die Variable X verdreifacht.
10 DEF FN FTEST1(X) = X*3 20 INPUT "Geben Sie ein Zahl ein:"; A 30 PRINT FN FTEST1(A): PRINT 40 IF A<>64 THEN 20
Im folgenden Fall muss zwar eine Zahl übergeben werden, die aber nicht berücksichigt wird, da ausschliesslich die Variablen A und B berechnet werden.
10 A=10: B=11 20 DEF FN C(X)= 3+(A*B)/2 30 D = FN C(0): PRINT D
In diesem Beispiel wird in Zeile 10 die Berechnung des 10er Logarithmus definiert und in Zeile 30 wird die neue Logarithmusfunktion LO10 aufgerufen.
10 DEF FN LO10(X) = LOG(X)/LOG10 20 Y = 10 30 Y = Y * 10 : PRINT FN LO10(Y); " "; 40 IF Y<1E38 THEN 20
Dieses Beispiel zeigt was u.a. möglich ist. Es sind hier mehrere mathematische Funktionen und Ausleseanweisungen zusammengefasst.
10 A$="12.12.1964 SAMSTAGABEND" 20 DEF FN F1(X) = ( LEN(A$)/VAL(A$) ) *PEEK (53280) 30 PRINT FN F1(0) 40 DEF FN F2(X) = INT( ABS( FN F1(X)* 1E+8) / ASC(A$) ) 50 PRINT FN F2(1)
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT
