|
|
|
Startseite News   NDR-NKC Geräte Z80 Geräte 68000 Geräte 8088NKC Emulator Z80 Section Baugruppen ROM's Software68000 Section Baugruppen ROM's PASCAL/S Software CP/M 68K8088 Section Baugruppen DownloadsBussysteme Stromversorgung Input / Output Grafikkarten Speicherkarten Massenspeicher Weitere Baugruppen Projekte Dokumentation Datenblätter Glossar Portraits Links Impressum |
Definieren eigener Funktionen und ProzedurenIn diesem Beitrag wird die Definition eigener Funktionen und Methoden erläutert. CBASIC erlaubt das Definieren einzeliger Funktionen oder mehrzeiliger Funktionen und Prozeduren. Wenn eigene Funktionen mit DEF oder DEF FEND deklariert werden, müssen die Definitionen im Quelltext vor der ersten Verwendung umgesetzt werden. Häufig genutzte Funktionen können in einer separaten Datei abgelegt werden und am Anfang des eigentlichen Programms mit der Compilerdirektive %INCLUDE eingebunden werden. Die Include-Datei muss nicht getrennt übersetzt werden, dieser Schritt wird automatisch bei der Kompilierung des Hauptprogramms ausgeführt. Grundsätzlich sollte man versuchen, ein Problem mit den Bordmitteln von CBASIC zu lösen. Funktionen, die mit DEF oder DEF FEND umgesetzt werden sind deutlich langsamer als integrierte Funktionen und Methoden. Weitere BeiträgeVor- und Nachteile des CBASIC Compilers MATH.INC - mathematische FunktionenZur Demonstration habe ich einige nützliche Mathematische Funktionen zusammengestellt, die so in CBASIC nicht direkt verfügbar sind. Der folgende Quelltext wird in der Datei MATH.INC abgelegt. REM Konstanten MATH.PI = 3.141592653589793 MATH.E = 2.718281828459045 REM Einzeilige Funktionen DEF MATH.DEG(X) = X * (180/MATH.PI) DEF MATH.RAD(X) = X * (MATH.PI/180) DEF MATH.LOG10(X) = LOG(X)/LOG(10) DEF MATH.SINH(X) = (EXP(X)-EXP(-X))/2 DEF MATH.COSH(X) = (EXP(X)+EXP(-X))/2 DEF MATH.TANH(X) = (EXP(X)-EXP(-X))/(EXP(X)+EXP(-X)) REM Mehrzeilige Funktionen DEF MATH.MAX(A,B) IF A>B THEN MATH.MAX=A ELSE MATH.MAX=B FEND DEF MATH.MIN(A,B) IF A>B THEN MATH.MIN=B ELSE MATH.MIN=A FEND DEF MATH.EVEN(X) IF X/2=INT(X/2) THEN MATH.EVEN=-1 ELSE MATH.EVEN=0 FEND DEF MATH.ODD(X) IF X/2=INT(X/2) THEN MATH.ODD=0 ELSE MATH.ODD=-1 FEND DEF MATH.ROUND(X,N) RND.X2 = X * 10^N IF X>=0 THEN RND.X2=INT(RND.X2+0.5) ELSE RND.X2=-INT(-RND.X2+0.5) MATH.ROUND = RND.X2 / 10^N FEND DEF MATH.FAK(X) FAK.TMP = 1 FOR FAK.CNT=2 TO X : FAK.TMP=FAK.TMP*FAK.CNT : NEXT FAK.CNT MATH.FAK = FAK.TMP FEND Verwenden der FunktionenUm die definierten Funktionen in eigenen Programmen verwenden zu können, muss die Datei MATH.INC in den Quelltext importiert werden. Das geschieht am besten in der ersten Zeile des Programms. %IMPORT MATH.INC PRINT MATH.MAX(100,200) PRINT MATH.FAK(5) ![]() Weitere nützliche FunktionenInteger als Hexadezimalzahl ausgebenWandelt eine Integer-Zahl in einen String mit der hexadezimalen Darstellung um. Es kann eine Mindestanzahl an Zeichen für den sedezimalen Wert angegeben werden. Wie für CBASIC üblich wird der Buchstabe "H" angehängt und bei Bedarf eine führende "0" hinzugefügt.
String in Kleinbuchstaben wandelnIm Gegensatz zu der Funktion UCASE$ bietet CBASIC nicht das Gegenstück dieser Funktion. Hier eine Lösung
|