Sortierbasutein mit Any Pointer

Zuviel Werbung?
-> Hier kostenlos registrieren
der speicher is besipielsweise 10 byte groß und dieser speicher wird besipielsweise in 5 Blöcke a 2 byte eingeteilt der rest stimmt was du erzählt hast...


das mitn zwischenspeichern ist ja in meinem programm schon realisiert nur bekomm ich dauern einen Bereichslängenfehler beim lesen beim 2 durchgang... erste tauschdurchgang klappt ja noch


vl siehst du dir ja mal kurz meinen code an lg stefan
 
Ich habe mir den Code schon angesehen und bin da auf den ersten Blick nicht durchgestiegen. Liegt aber vielleicht auch daran, dass ich meinen Schädel in Augenblick auch mit eine Menge anderem Zeug voll habe ...

Aber grundsätzlich (wie wir das weiter vorne schon behandelt haben) :
Das Arbeiten mit ANY-Pointern und dem FC "Block-Move" macht nur dann Sinn, wenn es sich dabei um große Datenblöcke handelt. 2 bis 4 Byte sind in diesem Sinne kein großer Datenblock. Dein Programm benötigt hier mehr Zeit zum Erstellen und Zerlegen des ANY-Pointers als für den eigentlichen Lade-Transfer-Vorgang. Ich verstehe also nicht, warum du wieder dazu übergehst ...

Weiterhin : Was ist der Inhalt von "#iBlockgroesse" ?

Vielleicht solltest du dein diesbezügliches Konzept noch einmal überdenken ..

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
#iBlockgroesse = die Anzahl der Bytes pro Block

im meinem Bsb ist die Blockgroesse 2 >>> sprich der Block besteht aus 2 Byte.
Der Speicher welcher in meinem Beispiel 10 Byte groß ist wird also in 5 Blöcke a 2 Byte eingeteilt. Da mein Programm variabel gestaltet werden soll muss ich Blockmove verwenden da auch größere Blöcke verschoben werden sollen.
Beim sortieren der Blöcke in meinem DB schau ich mir immer nur das erste Byte im Block an und tausche anhand der größe (Wert) die einzelnen Blocke miteinander bis sie der Größe nach sortiert sind. (Bubblesort)


lg stefan
 
... dann schreib doch noch mal, was du in "iStartAdresse" als Werte stehen hast ...
Bitte bedenken, so, wie du ihn einsetzt, muss dort ein Pointerwert drin stehen ... Falls nicht, dann ist das der Fehler ...

Gruß
LL
 
irgendwie find ich den code total wirr. hab auch keine lust mir da jetzt lange gedanken drum zu machen. irgendwie fehlt mir da das bilden des zeigers innerhalb der schleife.

mal in worten:

vorbelegen:
schleifenzähler = 1
bilde zeiger_zwspeicher

anfang:
startadresse berechnen (abhängig vom schleifenzähler und blockgrösse)
bilde zeiger_block1 (startadresse)
bilde zeiger_block2 (startadresse + blockgrösse)
byte der blöcke vergleichen.
wenn byte_block1 > byte_block2 dann tauschen
sonst weiter

tauschen:
block1 -> zwspeicher
block2 -> block1
zwspeicher -> block2
schleifenzähler auf 1 setzen
zum anfang springen

weiter:
schleifenzähler erhöhen
prüfe schleifenzähler ob schon am ende.
wenn nein springe zum anfang

ende:

das ist jetzt kein bubblesort. bubblesort funktioniert ein wenig anders.
ist zwar schneller aber schwieriger zu programmieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim sortieren der Blöcke in meinem DB schau ich mir immer nur das erste Byte im Block an und tausche anhand der größe (Wert) die einzelnen Blocke miteinander bis sie der Größe nach sortiert sind. (Bubblesort)

Hallo Stefan,

hier ist ein Programmbeispiel für die Sortierung der Datenblöcke mit Bubblesort.

Die Datenblöcke bestehen jeweils aus 4 Bytes und werden nach der Größe des ersten Byte im Datenblock sortiert.

Code:
FUNCTION FC 100 : VOID
TITLE =Bubblesort
//14
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : BUBBLE
VERSION : 1.0
 
VAR_INPUT
  DB_NUMMER : INT ; 
  STARTADRESSE : INT ; 
  BLOCKGROESSE : INT ; 
  BLOCKANZAHL : INT ; 
END_VAR
VAR_TEMP
  DB_REGISTER : WORD ; 
  AR1_REGISTER : DWORD ; 
  DATENBLOCK_1 : ANY ; 
  DATENBLOCK_2 : ANY ; 
  SPEICHERBLOCK : ANY ; 
  BEREICHSZEIGER_1 : DWORD ; 
  BEREICHSZEIGER_2 : DWORD ; 
  OFFSET : DWORD ; 
  DB_NUMMER_TEMP : WORD ; 
  SCHLEIFE_1 : INT ; 
  SCHLEIFE_2 : INT ; 
  WERT_1 : INT ; 
  WERT_2 : INT ; 
  RETVAL : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
 
      L     DBNO; // DB-Register
      T     #DB_REGISTER;
 
      TAR1  #AR1_REGISTER; // AR1-Register
 
NETWORK
TITLE =Datenblock 1 (ANY)
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID
      T     B [AR1,P#0.0]; 
 
      L     2; // Datentyp
      T     B [AR1,P#1.0]; 
 
      L     #BLOCKGROESSE; // Anzahl
      T     W [AR1,P#2.0]; 
 
      L     #DB_NUMMER; // DB-Nummer
      T     W [AR1,P#4.0]; 
 
      L     #STARTADRESSE; // Bereichszeiger 1
      ITD   ; 
      SLD   3; 
      T     D [AR1,P#6.0]; 
 
      L     B#16#84; // Operandenbereich
      T     B [AR1,P#6.0]; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger 1
      T     #BEREICHSZEIGER_1; 
 
NETWORK
TITLE =Datenblock 2 (ANY)
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID
      T     B [AR1,P#0.0]; 
 
      L     2; // Datentyp
      T     B [AR1,P#1.0]; 
 
      L     #BLOCKGROESSE; // Anzahl
      T     W [AR1,P#2.0]; 
 
      L     #DB_NUMMER; // DB-Nummer
      T     W [AR1,P#4.0]; 
 
      L     #STARTADRESSE; // Bereichszeiger 2
      L     #BLOCKGROESSE; 
      +I    ; 
      ITD   ; 
      SLD   3; 
      T     D [AR1,P#6.0];
 
      L     B#16#84; // Operandenbereich
      T     B [AR1,P#6.0]; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger 2   
      T     #BEREICHSZEIGER_2; 
 
NETWORK
TITLE =Speicherblock (ANY)
 
      L     P##SPEICHERBLOCK; // Speicherblock (ANY) 
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID
      T     B [AR1,P#0.0]; 
 
      L     2; // Datentyp
      T     B [AR1,P#1.0]; 
 
      L     #BLOCKGROESSE; // Anzahl
      T     W [AR1,P#2.0]; 
 
      L     #DB_NUMMER; // DB-Nummer
      T     W [AR1,P#4.0]; 
 
      L     #BLOCKGROESSE; // Bereichszeiger
      L     #BLOCKANZAHL; 
      *I    ; 
      L     #STARTADRESSE; 
      +I    ; 
      ITD   ; 
      SLD   3; 
      T     D [AR1,P#6.0]; 
 
      L     B#16#84; // Operandenbereich
      T     B [AR1,P#6.0]; 
 
NETWORK
TITLE =Offset (Bereichszeiger)
 
      L     #BLOCKGROESSE; 
      ITD   ; 
      SLD   3; 
      T     #OFFSET; 
 
NETWORK
TITLE =Bubblesort 
 
      L     #DB_NUMMER; // DB-Nummer
      T     #DB_NUMMER_TEMP; 
 
      AUF   DB [#DB_NUMMER_TEMP]; 
 
 
      L     #BLOCKANZAHL; 
      L     1; 
      -I    ; 
M01:  T     #SCHLEIFE_1; 
 
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     #BEREICHSZEIGER_1; // Bereichszeiger 1
      T     D [AR1,P#6.0]; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     #BEREICHSZEIGER_2; // Bereichszeiger 2
      T     D [AR1,P#6.0]; 
 
 
      L     #SCHLEIFE_1; 
M02:  T     #SCHLEIFE_2; 
 
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      LAR1  ; 
 
      L     B [AR1,P#0.0]; // Wert 1
      T     #WERT_1; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      LAR1  ; 
 
      L     B [AR1,P#0.0]; // Wert 2
      T     #WERT_2; 
 
 
      L     #WERT_2; // Wert 2
      L     #WERT_1; // Wert 1    
      >I    ; 
      SPBN  M03; 
 
NETWORK
TITLE =Bubblesort
 
      CALL SFC   20 (
           SRCBLK                   := #DATENBLOCK_1,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #SPEICHERBLOCK);
      NOP   0; 
 
NETWORK
TITLE =Bubblesort
 
      CALL SFC   20 (
           SRCBLK                   := #DATENBLOCK_2,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #DATENBLOCK_1);
      NOP   0; 
 
NETWORK
TITLE =Bubblesort
 
      CALL SFC   20 (
           SRCBLK                   := #SPEICHERBLOCK,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #DATENBLOCK_2);
      NOP   0; 
 
NETWORK
TITLE =Bubblesort 
 
M03:  L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      L     #OFFSET; // Offset
      +D    ; 
      T     D [AR1,P#6.0]; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      L     #OFFSET; // Offset
      +D    ; 
      T     D [AR1,P#6.0]; 
 
 
      L     #SCHLEIFE_2; 
      LOOP  M02; 
 
      L     #SCHLEIFE_1; 
      LOOP  M01; 
 
NETWORK
TITLE =Register wiederherstellen
 
      AUF   DB [#DB_REGISTER]; // DB-Register
 
      LAR1  #AR1_REGISTER; // AR1-Register
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    6,3 KB · Aufrufe: 23
  • FC100.pdf
    12,4 KB · Aufrufe: 22
  • DB200.pdf
    4,4 KB · Aufrufe: 16
  • DB210.pdf
    4,5 KB · Aufrufe: 17
  • Bubbleso.zip
    36,3 KB · Aufrufe: 21
Zuviel Werbung?
-> Hier kostenlos registrieren
ja so ist der kai nun mal. :s1:
der prasentiert immer wieder gern fertige lösungen. (evtl ist er ja auch danke süchtig ;) )

die meisten die dir in dem thread geantwortet haben hätten dir den code liefern können.
ob das aber der sinn der sache ist, lasse ich mal dahingestellt.
WORDS_%7E1.GIF

du solltest verstehen was du da programmierst und nicht einfach irgendeinen code übernehmen.
beim nächsten problem fängt das gleiche spiel hier wieder von vorne an.
 
Ich habe mein Programmbeispiel für die Sortierung der Datenblöcke mit Bubblesort noch einmal etwas überarbeitet.

Hier ist eine leicht verbesserte Programmversion.

Code:
FUNCTION FC 100 : VOID
TITLE =Bubblesort
//14
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : BUBBLE
VERSION : 1.0
 
VAR_INPUT
  DB_NUMMER : INT ; 
  STARTADRESSE : INT ; 
  BLOCKGROESSE : INT ; 
  BLOCKANZAHL : INT ; 
END_VAR
VAR_TEMP
  DB_REGISTER : WORD ; 
  AR1_REGISTER : DWORD ; 
  DATENBLOCK_1 : ANY ; 
  DATENBLOCK_2 : ANY ; 
  SPEICHERBLOCK : ANY ; 
  DB_NUMMER_TEMP : WORD ; 
  BEREICHSZEIGER_1 : DWORD ; 
  BEREICHSZEIGER_2 : DWORD ; 
  OFFSET : DWORD ; 
  SCHLEIFE_1 : INT ; 
  SCHLEIFE_2 : INT ; 
  WERT_1 : INT ; 
  WERT_2 : INT ; 
  RETVAL : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
 
      L     DBNO; // DB-Register
      T     #DB_REGISTER; 
 
      TAR1  #AR1_REGISTER; // AR1-Register
 
NETWORK
TITLE =Datenblock 1 (ANY)
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID
      T     B [AR1,P#0.0]; 
 
      L     2; // Datentyp
      T     B [AR1,P#1.0]; 
 
      L     #BLOCKGROESSE; // Anzahl
      T     W [AR1,P#2.0]; 
 
      L     #DB_NUMMER; // DB-Nummer
      T     W [AR1,P#4.0]; 
 
      L     #STARTADRESSE; // Bereichszeiger
      ITD   ; 
      SLD   3; 
      T     D [AR1,P#6.0]; 
 
      L     B#16#84; // Operandenbereich
      T     B [AR1,P#6.0]; 
 
NETWORK
TITLE =Datenblock 2 (ANY)
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID
      T     B [AR1,P#0.0]; 
 
      L     2; // Datentyp
      T     B [AR1,P#1.0]; 
 
      L     #BLOCKGROESSE; // Anzahl
      T     W [AR1,P#2.0]; 
 
      L     #DB_NUMMER; // DB-Nummer
      T     W [AR1,P#4.0]; 
 
      L     #STARTADRESSE; // Bereichszeiger
      L     #BLOCKGROESSE; 
      +I    ; 
      ITD   ; 
      SLD   3; 
      T     D [AR1,P#6.0]; 
 
      L     B#16#84; // Operandenbereich
      T     B [AR1,P#6.0]; 
 
NETWORK
TITLE =Speicherblock (ANY)
 
      L     P##SPEICHERBLOCK; // Speicherblock (ANY) 
      LAR1  ; 
 
      L     B#16#10; // Syntax-ID
      T     B [AR1,P#0.0]; 
 
      L     2; // Datentyp
      T     B [AR1,P#1.0]; 
 
      L     #BLOCKGROESSE; // Anzahl
      T     W [AR1,P#2.0]; 
 
      L     #DB_NUMMER; // DB-Nummer
      T     W [AR1,P#4.0]; 
 
      L     #BLOCKGROESSE; // Bereichszeiger
      L     #BLOCKANZAHL; 
      *I    ; 
      L     #STARTADRESSE; 
      +I    ; 
      ITD   ; 
      SLD   3; 
      T     D [AR1,P#6.0]; 
 
      L     B#16#84; // Operandenbereich
      T     B [AR1,P#6.0]; 
 
NETWORK
TITLE =Bubblesort 
 
      L     #DB_NUMMER; 
      T     #DB_NUMMER_TEMP; 
 
      AUF   DB [#DB_NUMMER_TEMP]; 
 
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger 1
      T     #BEREICHSZEIGER_1; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger 2
      T     #BEREICHSZEIGER_2; 
 
 
      L     #BLOCKGROESSE; // Offset
      ITD   ; 
      SLD   3; 
      T     #OFFSET; 
 
 
      L     #BLOCKANZAHL; 
      L     1; 
      -I    ; 
M01:  T     #SCHLEIFE_1; 
 
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     #BEREICHSZEIGER_1; // Bereichszeiger 1
      T     D [AR1,P#6.0]; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     #BEREICHSZEIGER_2; // Bereichszeiger 2
      T     D [AR1,P#6.0]; 
 
 
      L     #SCHLEIFE_1; 
M02:  T     #SCHLEIFE_2; 
 
 
      L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      LAR1  ; 
 
      L     B [AR1,P#0.0]; // Wert 1
      T     #WERT_1; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      LAR1  ; 
 
      L     B [AR1,P#0.0]; // Wert 2
      T     #WERT_2; 
 
 
      L     #WERT_2; // Wert 2
      L     #WERT_1; // Wert 1    
      >I    ; 
      SPBN  M03; 
 
NETWORK
TITLE =Bubblesort
 
      CALL SFC   20 (
           SRCBLK                   := #DATENBLOCK_1,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #SPEICHERBLOCK);
      NOP   0; 
 
NETWORK
TITLE =Bubblesort
 
      CALL SFC   20 (
           SRCBLK                   := #DATENBLOCK_2,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #DATENBLOCK_1);
      NOP   0; 
 
NETWORK
TITLE =Bubblesort
 
      CALL SFC   20 (
           SRCBLK                   := #SPEICHERBLOCK,
           RET_VAL                  := #RETVAL,
           DSTBLK                   := #DATENBLOCK_2);
      NOP   0; 
 
NETWORK
TITLE =Bubblesort 
 
M03:  L     P##DATENBLOCK_1; // Datenblock 1 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      L     #OFFSET; // Offset
      +D    ; 
      T     D [AR1,P#6.0]; 
 
 
      L     P##DATENBLOCK_2; // Datenblock 2 (ANY)
      LAR1  ; 
 
      L     D [AR1,P#6.0]; // Bereichszeiger
      L     #OFFSET; // Offset
      +D    ; 
      T     D [AR1,P#6.0]; 
 
 
      L     #SCHLEIFE_2; 
      LOOP  M02; 
 
      L     #SCHLEIFE_1; 
      LOOP  M01; 
 
NETWORK
TITLE =Register wiederherstellen
 
      AUF   DB [#DB_REGISTER]; // DB-Register
 
      LAR1  #AR1_REGISTER; // AR1-Register
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    6,3 KB · Aufrufe: 44
  • FC100.pdf
    12,3 KB · Aufrufe: 54
  • DB200.pdf
    4,4 KB · Aufrufe: 33
  • DB210.pdf
    4,5 KB · Aufrufe: 30
  • Bubbleso.zip
    36,3 KB · Aufrufe: 46
Sortieren auch für DINT-Werte?

Bin beim stöbern auf die Sortierfunktion gestossen und hab ein wenig damit herumgespielt. Ich würde gern ca 50 -100 Datenblöcke, bestehend aus je 2 Dint-Werten sortieren. Das ist mir jedoch nicht gelungen, an welchen Stellen müsste ich hier drehen?
Ich habe die beiden DB-s angepasst und die Paramerierung des FC-100eingestellt auf Blockgrösse 2 und Blockanzahl 10 für den Anfang.
Was fehlt da noch?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Rainer,
die Blockgröße im obigen Fall ist in Byte angegeben. 1 DINT hat eine Größe von 4 Byte (bzw. 2 DINT dann sogar 8 Byte). Hast du das berücksichtigt ?
Darüber hinaus kannst du DINT-Werte allerdings auch direkt vergleichen und sortieren (ohne dabei den Block-Move zum Einsatz zu bringen). Das erspart dir den Einsatz und das Aufbauen eines ANY-Pointers ...

Wenn du Hlfe zu einem von dir verfassten Baustein haben möchtest, dann kann es oft auch ganz praktisch sein, den Baustein hier einzustellen ... ;)

Gruß
LL
 
Bin beim stöbern auf die Sortierfunktion gestossen und hab ein wenig damit herumgespielt. Ich würde gern ca 50 -100 Datenblöcke, bestehend aus je 2 Dint-Werten sortieren.

Hier ist noch einmal ein neues Programmbeispiel für die Sortierung von Datenblöcken mit Bubblesort.

Die Datenblöcke bestehen aus zwei Werten im Datenformat DINT und werden nach der Größe des ersten Wertes im Datenblock sortiert.

Der Datenbaustein, die Startadresse sowie die Anzahl der Datenblöcke ist variabel.

Code:
FUNCTION FC 100 : VOID
TITLE =Bubblesort
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : BUBBLE
VERSION : 1.0
 
VAR_INPUT
  DATENBAUSTEIN : BLOCK_DB ; 
  STARTADRESSE : INT ; 
  BLOCKANZAHL : INT ; 
END_VAR
VAR_TEMP
  DB_REGISTER : WORD ; 
  AR1_REGISTER : DWORD ; 
  BEREICHSZEIGER : DWORD ; 
  SCHLEIFE_1 : INT ; 
  SCHLEIFE_2 : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =Register sichern
 
      L     DBNO; // DB-Register
      T     #DB_REGISTER; 
 
      TAR1  #AR1_REGISTER; // AR1-Register
 
NETWORK
TITLE =Bubblesort
 
      AUF   #DATENBAUSTEIN; // Datenbaustein
 
      L     #STARTADRESSE; // Startadresse
      ITD   ; 
      SLD   3; 
      T     #BEREICHSZEIGER; // Bereichszeiger
 
      L     #BLOCKANZAHL; // Blockanzahl
      L     1; 
      -I    ; 
M01:  T     #SCHLEIFE_1; 
 
      L     #BEREICHSZEIGER; // Bereichszeiger
      LAR1  ; 
 
      L     #SCHLEIFE_1; 
M02:  T     #SCHLEIFE_2; 
 
      L     DBD [AR1,P#8.0]; // Wert 2-1
      L     DBD [AR1,P#0.0]; // Wert 1-1
      >D    ; 
      SPBN  M03; 
 
      L     DBD [AR1,P#0.0]; // Wert 1-1
      L     DBD [AR1,P#8.0]; // Wert 2-1
      T     DBD [AR1,P#0.0]; // Wert 2-1 => Wert 1-1
      TAK   ; 
      T     DBD [AR1,P#8.0]; // Wert 1-1 => Wert 2-1
 
      L     DBD [AR1,P#4.0]; // Wert 1-2
      L     DBD [AR1,P#12.0]; // Wert 2-2
      T     DBD [AR1,P#4.0]; // Wert 2-2 => Wert 1-2
      TAK   ; 
      T     DBD [AR1,P#12.0]; // Wert 1-2 => Wert 2-2
 
M03:  L     P#8.0; 
      +AR1  ; 
 
      L     #SCHLEIFE_2; 
      LOOP  M02; 
 
      L     #SCHLEIFE_1; 
      LOOP  M01; 
 
NETWORK
TITLE =Register wiederherstellen
 
      AUF   DB [#DB_REGISTER]; 
 
      LAR1  #AR1_REGISTER; 
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    6,3 KB · Aufrufe: 20
  • FC100.pdf
    6,9 KB · Aufrufe: 22
  • DB200.pdf
    4,5 KB · Aufrufe: 21
  • DB210.pdf
    4,5 KB · Aufrufe: 18
  • Bubbleso.zip
    36,1 KB · Aufrufe: 34
Zuviel Werbung?
-> Hier kostenlos registrieren
Bubblesort benötigt zum Sortieren einer Datenfolge der Länge n folgende Anzahl von Vergleichen:

Code:
                                           n * (n - 1)
Vergleiche = (n - 1) + (n - 2) + ... + 1 = -----------
                                                2

Bei einer Datenfolge von n = 100 Datenblöcken benötigt Bubblesort also die folgende Anzahl von Durchläufen und Vergleichen:

Code:
Durchläufe = (n - 1) = (100 - 1) = 99

Code:
             n * (n - 1)   100 * (100 - 1)
Vergleiche = ----------- = --------------- = 4950
                  2               2

Gruß Kai
 
Danke, so gehts!

Danke, so funktioniert auch mein Beispiel. Bin zwar noch nicht wirklich dahintergestiegen warum... Wird aber noch.
Allerdings hab ich die Funktion aus den PDFs entnommen, in der Zip-Datei ist ein anderer Baustein.
Die Zeit ist hier nicht wirklich relevant, es wird durch das Sortieren wesentlich mehr Zeit eingespart als verbraucht.
 
Zurück
Oben