
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
![]() ' =========================================================================== ' Demoprogramm: SymbolrĂ€tsel erstellen/generieren ' In OCBASIC 1.12a_e1 fĂŒr Open-Maxi von Dietmar Harlos am 30. April 2022 ' =========================================================================== ' In diesem Programm wird unter anderem demonstriert, wie Felder und Arrays ' auf der Open-Maxi realisiert werden können. ' Ein SymbolrĂ€tsel ist eine Anordnung von Symbolen und Rechenzeichen. FĂŒr ' Symbole mĂŒssen einstellige Zahlen gesucht werden, so daĂ sechs ineinander ' verschachtelte Gleichungen erfĂŒllt sind: ' ACE + DAC = JFD ' - + - ' AAA - HFC = GI ' = = = ' AH + III = JBJ ' Gleiche Symbole bedeuten auch gleiche Zahlen, verschiedene Symbole ' verschiedene Zahlen. ' SymbolrĂ€tsel sind in Deutschland bekannt und beliebt. Es gibt eine Reihe ' von Zeitschriften wie STERN, GONG oder HĂRZU, die regelmĂ€Ăig ein RĂ€tsel ' dieser Art abdrucken. ' Mit dem folgenden Programm kann man die RĂ€tsel lösen. Es verwendet einen ' "Brute Force"-Algorithmus, bei dem alle Permutationen geprĂŒft werden: ' https://www.meister-fiete.de/raetsel/kzrl.zip ' --- Definitionen ---------------------------------------------------------- INCLUDE "omax.def" 'Definitionen fĂŒr die Open-Maxi DEFINE feld &h2aa 'Array an 1. Adresse hinter dem USER-RAM DIM bitarray BYTE 'ein Bitarray DIM debug BIT[1] OF bitarray 'ist HIGH, wenn Debugging aktiv DIM ziffer BIT[2] OF bitarray 'ist HIGH, wenn Ziffer bereits ausgegeben DIM a,b,c BYTE 'temporĂ€re Variablen ' vol+vom=vor 'Berechnungsvorschrift ' + + + ' vml+vmm=vmr ' = = = ' vul+vum=vur DIM vol WORD 'oberste Zeile DIM vom WORD DIM vor WORD DIM vml WORD 'mittlere Zeile DIM vmm WORD DIM vmr WORD DIM vul WORD 'untere Zeile DIM vum WORD DIM vur WORD DIM w WORD 'temporĂ€re Variable ' --- Hauptprogramm --------------------------------------------------------- 'PrintSpc=ON 'Bei PRINT dezimale Zahlen mit fĂŒhrendem Leerzeichen ausgeben End2Host=ON 'Bei Programmende (siehe END) gleich in den Host-Modus wechseln ' Titel: PRINT "Symbolraetsel" PRINT "=============" ' Initialisierungen: debug=ON 'OFF 'ON 'Lösung anzeigen RANDOMIZE 64 'Zufallsgenerator initialisieren (z.B. RANDOMIZE TIMER) ' Das Hauptprogramm: ' Obere Zeile vol=(((RAND SHR 1)+16384) MOD 9000)+1 '1..9000 REPEAT vom=(((RAND SHR 1)+16384) MOD (9800-vol))+1 '1..9800-vol vor=vol+vom UNTIL vor>2 AND vor<=9800 ' Mittlere Zeile REPEAT vml=(((RAND SHR 1)+16384) MOD 9900)+1 '1..9900 REPEAT vmm=(((RAND SHR 1)+16384) MOD (9990-vml))+1 '1..9990-vml vmr=vml+vmm UNTIL vmr>2 AND vmr<=9990 vur=vor+vmr UNTIL vur>0 AND vur<10000 ' Untere Zeile vul=vol+vml vum=vom+vmm IF debug THEN anzeigeloesung:? initfeld anzeige ?:?"Programmende." END 'ZurĂŒck in den Hostmodus. Neustart mit RETURN-Taste. ' --- Subroutinen und Funktionen -------------------------------------------- ' Anzeige der Lösung PROCEDURE anzeigeloesung spaces(vol):?vol"+";:spaces(vom):?vom"=";:spaces(vor):?vor ?" + + +" spaces(vml):?vml"+";:spaces(vmm):?vmm"=";:spaces(vmr):?vmr ?" = = =" spaces(vul):?vul"+";:spaces(vum):?vum"=";:spaces(vur):?vur RETURN END PROCEDURE ' Leerzeichen vor der Zahl je nach GröĂe PROCEDURE spaces(w) IF w<10 THEN PUT " " IF w<100 THEN PUT " " IF w<1000 THEN PUT " " RETURN END PROCEDURE ' Feld mit den Symbolen initialisieren PROCEDURE initfeld FOR a=0 TO 9 REPEAT b=((RAND SHR 1)+16384)/3277 '0..9 UNTIL PEEK(feld+b)=0 POKE feld+b,ASC("A")+a NEXT a RETURN END PROCEDURE ' Anzeige des RĂ€tsels PROCEDURE anzeige digits(vol):PUT "+":digits(vom):PUT "=":digits(vor):? ?" + + +" digits(vml):PUT "+":digits(vmm):PUT "=":digits(vmr):? ?" = = =" digits(vul):PUT "+":digits(vum):PUT "=":digits(vur):? RETURN END PROCEDURE ' Die einzelnen Ziffern der Zahl als Symbole ausgeben PROCEDURE digits(w) spaces w ziffer=OFF IF w/1000 THEN PUT PEEK(feld+w/1000) : ziffer=ON : w=w MOD 1000 IF w/100 OR ziffer THEN PUT PEEK(feld+w/100) : ziffer=ON : w=w MOD 100 IF w/10 OR ziffer THEN PUT PEEK(feld+w/10) : ziffer=ON : w=w MOD 10 PUT PEEK(feld+w) RETURN END PROCEDURE ' --- Programmende --------------------------------------------------------- Passender Link: Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |