![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' =========================================================================== ' Demoprogramm: Die ANZAHL Elemente eines WORD-Feldes sortieren ' In OCBASIC 1.12a_e1 von Dietmar Harlos am 20. Februar 2022 ' =========================================================================== ' Dieses Programm nutzt den BubbleSort-Algorithmus von der folgenden Webside: ' https://homepages.bluffton.edu/~nesterd/apps/SortingDemo.html ' Dieses Beispielprogramm demonstriert Zeiger, Felder und Arrays auf der OM. ' An dieser Stelle möchte ich mich bei Dirk von "das |_ Team" und bei Norbert ' für ihre Unterstützung bedanken. In Memoriam Norbert Klein. ' --- Definitionen ---------------------------------------------------------- 'INCLUDE "omac.def" 'Definitionen für die Open-Macro INCLUDE "omax.def" 'Definitionen für die Open-Maxi DIM bitarray BYTE 'ein Bitarray DIM debug BIT[1] OF bitarray 'ist HIGH, wenn Debugging aktiv DEFINE ANZAHL 8 'Anzahl der Elemente des Feldes DIM a,b,c,i,j BYTE 'temporäre Bytevariablen DIM a0,a1,a2,a3,a4,a5,a6,a7 WORD 'WORD-Feld mit ANZAHL Elementen DIM h WORD 'Hilfsvariable DIM ^s WORD 'Zeiger auf ein Word im USER-RAM DIM ^d WORD 'Zeiger auf ein Word im USER-RAM ' --- 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 "Sortieren" PRINT "=========" ' Initialisierungen: RANDOMIZE 64 'Zufallsgenerator initialisieren (z.B. RANDOMIZE TIMER) debug=ON 'OFF 'Sortierschritte anzeigen ' Das Hauptprogramm: s=^a0 'WORD-Feld mit Zufallswerten laden FOR a=1 TO ANZAHL @s=RAND ADD s,1 NEXT a ?:?"Feldinhalt vor dem Sortieren:"; ?a0;a1;a2;a3;a4;a5;a6;a7 IF debug THEN ? BubbleSort 'Sortierung durchführen ?:?"Feldinhalt nach dem Sortieren:"; s=^a0 FOR a=1 TO ANZAHL ?@s; ADD s,1 NEXT a ? ?:?"Programmende." END 'Zurück in den Hostmodus. Neustart mit RETURN-Taste. ' --- Subroutinen und Funktionen -------------------------------------------- ' Das Feld a0,a1,a2,... sortieren. Es hat ANZAHL Elemente. PROCEDURE BubbleSort 'COMPILE ' BubbleSort(size) { ' for (i=size-1; i > 0; i--) ' { ' for (j=0; j < i; j++) ' { ' if (a[j] > a[j+1]) ' swap a[j] and a[j+1]; ' } ' } ' } ' /* DONE */ i=ANZAHL-1 WHILE i>0 s=^a0 'Zeiger mit USER-RAM-Adressen laden d=^a0+1 j=0 WHILE j<i IF @s > @d THEN IF debug THEN ?"Vertausche Element";j;" und";j+1;", also";@s;" und";@d;"." END IF h=@s 'Zwei Elemente des Feldes tauschen @s=@d @d=h END IF ADD s,1 'Zeiger inkrementieren ADD d,1 ADD j,1 WEND SUB i,1 WEND RETURN END PROCEDURE ' --- Programmende --------------------------------------------------------- Passender Link: Offizielle Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |