Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Die ANZAHL Elemente eines BYTE-Feldes sortieren Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 4.04.2022 19:39)
 Als Antwort auf Demoprogramm: Die ANZAHL Elemente eines WORD-Feldes sortieren von Dietmar - 4.04.2022 19:36
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: Die ANZAHL Elemente eines BYTE-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 "om.def"                 'Definitionen f├╝r Open-Micro & Open-Mini
'INCLUDE "omid.def"               'Definitionen f├╝r Open-Midi
'INCLUDE "omac.def"               'Definitionen f├╝r Open-Macro
INCLUDE "omax.def"               'Definitionen f├╝r 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 BYTE 'BYTE-Feld mit ANZAHL Elementen

DIM h  BYTE                      'Hilfsvariable
DIM ^s BYTE                      'Zeiger auf ein BYTE im USER-RAM
DIM ^d BYTE                      'Zeiger auf ein BYTE 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
PRINT "Sortieren"
PRINT "========="

' Initialisierungen:

RANDOMIZE 64   'Zufallsgenerator initialisieren (z.B. RANDOMIZE TIMER)

debug=ON 'OFF  'Sortierschritte anzeigen

' Das Hauptprogramm:

s=^a0          'BYTE-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

Bisherige Antworten: