Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Modulo im KC85-Basic » Themenansicht

Autor Thread - Seiten: -1-
000
04.05.2024, 11:00 Uhr
Bert



Hallo Forum!

gibt es im KC82-BASIC eine schöne Funktion um den Rest einer Division (=Modulo) zu ermitteln?

Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
04.05.2024, 14:48 Uhr
u-held



Mir fällt da nur das Naheliegende ein:

Quellcode:
m - INT(m/n) * n



Aber wirklich schön ist das nicht.
--
Kompetenz simulieren
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
04.05.2024, 22:46 Uhr
ggrohmann



Hallo Bert!

Auch wenns nicht elegant ist, kannst du dir das mit DEF FN ja als eigene Funktion definieren.

Guido
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
05.05.2024, 09:24 Uhr
Bert



Für das Modulo von 2er-Potenzen und positiven Zahlen kann man auf die AND-Funktion zurückgreifen:

Quellcode:
10 INPUT "Zahl?:";Z
20 PRINT "mod 2:"; Z AND 1
30 PRINT "mod 4:"; Z AND 3
40 PRINT "mod 8:"; Z AND 7




Dafür habe ich entdeckt, das die RESTORE-Funktion nur mit Konstanten und nicht mit Variablen funktioniert :-(
Dabei wollte ich sowas machen:

Quellcode:

90 V=3
100 RESTORE 1000+V
110 READ A, B
120 PRINT A;B
999 END
1000 DATA 1, 2
1001 DATA 3, 4
1002 DATA 5, 6
1003 DATA 7, 8



Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
05.05.2024, 21:00 Uhr
maleuma




Zitat:
Bert schrieb
Dafür habe ich entdeckt, das die RESTORE-Funktion nur mit Konstanten und nicht mit Variablen funktioniert :-(


Sonst könnte RENUMBER die Zeilennummern wie auch z.B. auch nach GOTO nicht mit aktualisieren.
--
Mario.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
06.05.2024, 06:33 Uhr
ralle



Restore macht nichts anderes als den Zeiger auf dem Anfang zu setzen. Also bei Read/Data-Spielerein. Eine recht praktische Geschichte.
--
Gruß Ralle

Wenn Sie dazu neigen, Bedienungsanleitungen zusammen mit dem Verpackungsmaterial wegzuwerfen, sehen Sie bitte von einem derart drastischen Schritt ab!...
... Nachdem Sie das Gerät eine Weile ausprobiert haben, machen Sie es sich am besten mit dieser Anleitung und ihrem Lieblingsgetränk ein oder zwei Stunden lang in Ihrem Sessel bequem. Dieser Zeitaufwand wird Sie dann später belohnen...

aus KENWOOD-Bedienungsanleitung TM-D700
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
06.05.2024, 09:50 Uhr
Bert




Zitat:
ralle schrieb
Restore macht nichts anderes als den Zeiger auf dem Anfang zu setzen.


Leider. Wenn man das variabel haben möchte, artet es etwas aus:


Quellcode:
140 ON V+1 GOSUB 1000,1001,1002,1003,1004,1005,1006,1007
...
1000 RESTORE 2000:GOTO 1500
1001 RESTORE 2001:GOTO 1500
1002 RESTORE 2002:GOTO 1500
1003 RESTORE 2003:GOTO 1500
1004 RESTORE 2004:GOTO 1500
1005 RESTORE 2005:GOTO 1500
1006 RESTORE 2006:GOTO 1500
1007 RESTORE 2007:GOTO 1500

1500 REM mache was
1520 RETURN



Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
06.05.2024, 10:06 Uhr
ggrohmann



Uärks. 1 RETURN für 8 GOSUB. Das ist fast schon wie "IF HUNGER GOSUB ALDI ELSE RETURN" (aus Murphys Computergesetze).

Guido
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
06.05.2024, 15:29 Uhr
Bert




Zitat:
ggrohmann schrieb
Uärks. 1 RETURN für 8 GOSUB.


Das hab ich mir von Assembler abgeguckt :-)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
06.05.2024, 17:31 Uhr
kaiOr

Avatar von kaiOr

Für positive Zahlen evtl. noch:


Quellcode:
10 ? "REST DER DIVISION"
20 INPUT "X=";X
30 INPUT "Y=";Y
40 GOSUB 1000
50 ? "REST:";Z
60 END

1000 IF X<Y THEN Z=X:RETURN:ELSE X=X-Y:GOTO 1000

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
07.05.2024, 15:20 Uhr
kaiOr

Avatar von kaiOr

Aus der "Kleincomputer-Fibel":

a mod b -> DEF FNF(A) = INT((A/B-INT(A/B))*B+0.005)*SGN(A/B)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
28.05.2024, 14:00 Uhr
Dresdenboy




Zitat:
kaiOr schrieb
Für positive Zahlen evtl. noch:


Quellcode:
10 ? "REST DER DIVISION"
20 INPUT "X=";X
30 INPUT "Y=";Y
40 GOSUB 1000
50 ? "REST:";Z
60 END

1000 IF X<Y THEN Z=X:RETURN:ELSE X=X-Y:GOTO 1000



Das ist aber eine teure Schleife!

Ich habe es mal schnell im BIC-Emulator ausprobiert:
RE = Y - INT(Y/X)*X
für pos. Zahlen sollte in den meisten Fällen reichen.
Falls SGN doch dazu muss, könnte es auch durch SGN(A*B) ermittelt werden, falls die Funktion vorhanden ist.
--
___________________________________
Demoscene-Produktionen: https://demozoo.org/sceners/64936/, YT-Kanal: https://www.youtube.com/@4lpha0ne/videos
Coding-Historie seit 1986: KC85/3 (BASIC), LC-80 (ASM), C64 (BASIC, ASM), KC87/1 (ASM), A5105 BIC (Turbo Pascal), A1200HD (BlitzBASIC, 68k ASM), IBM RS/6000 (C), DEC Alpha (C), NeoGeo (68k ASM), Mega 65 (BASIC, ASM), 286+ (TP, ASM, C, C++, Java, Javascript, Rust, Lua, Perl, PHP, Scheme etc.), div. µC auf Steuergeräten (C, ASM)
HW: BIC A5105 komplett, KC85/2+M006, KC85/4, C64s, C64Cs, C16, Plus/4s, A500s, A1200HD+1240, ESP32s, RasPis, PCs, Laptops, MR 610, ...
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek