C 64
Hilfsprogramm

Exsort — Sortieren mit Komfort

Mit Exsort werden sowohl numerische als auch alphanumerische Felder auf-oder und absteigend sehr schnell sortiert. Ein weiterer Clou: Ein zweites Feld kann abhängig vom ersten Feld mitsortiert werden.

Jeder Programmierer ärgert sich irgendwann einmal über das langsame Basic, das vor allem beim Suchen und Sortieren stört. Gute Sortierroutinen, in Assembler geschrieben, kann nicht jeder entwickeln. Viele Sort-Programme sind aber auch sehr einseitig: Entweder sortieren sie nur aufsteigend oder lediglich alphanumerische Felder. Exsort kann beides und noch mehr.

Vorteile:

Nachteile:

Sortierbefehle

1. Befehl »so«

Syntax: so, (feldname), (anfangsindex), (endindex), (sortierungsrichtung)

Dieser Befehl sortiert ein beliebiges eindimensionales Feld innerhalb von zwei Grenzen mit einer vom Benutzer gewählten Sortierungsrichtung.

Beispiel 1:

Das Feld heißt ax$, alphanumerisch aufsteigend sortieren (von Index 100 bis Index 5000).
Befehl: so,ax$,100,5000,1 (1 = aufsteigend)

Beispiel 2:

Das Feld heißt qe%, numerisch absteigend sortieren (von Index 0 bis zu dem Index, der in der Variable »en« enthalten ist).
Befehl: so,qe%,0,en,0 (0 = absteigend)
Option: Manchmal ist es notwendig, daß Daten, die in einem zweiten Feld vorhanden sind, entsprechend dem ersten Feld sortiert werden.
Syntax: so,(feldname 1), (anfangsindex), (endindex), (sortierungsrichtung), (feldname2)

Beispiel: Das Feld fe$ soll alphanumerisch aufsteigend von Index 0 bis Index 10 sortiert werden. Die Daten in dem Realfeld »nr« sollen entsprechend dem ersten Feld sortiert werden.
Befehl: so,fe$,0,10,1,nr

2. Befehl: »se«

Syntax: se,(feldname),(anfangsindex),(endindex),(element)

Dieser Befehl durchsucht ein beliebiges eindimensionales Feld innerhalb von zwei Grenzen nach einem Element.
Beispiel: Es soll die Zahl - 12 in dem Feld rt% von Index 0 bis Index 100 gesucht werden.
Befehl: se,rt%,0,100, - 12

Wenn das Element gefunden wird, enthält die Variable »in« den jeweiligen Index. Wird das Element nicht gefunden, so enthält »in« den Wert -1.

Fehlermeldungen:

Zu den Programmen:

Listing 1

Das Programm »Exsort data« erstellt das Maschinenprogramm aus DATA-Zeilen und speichert es als »Exsort«-Absolutprogramm auf Diskette oder Kassette. Sie können es dann jederzeit durch LOAD »Exsort«, 8,1 absolutladen. Dabei geht ein Basic-Programm nicht verloren (siehe auch Listing 2, Demo-Programm).
Listing 2

Das Programm »Exsort demo« lädt das Absolutprogramm »Exsort« nach und startet es. Danach folgt eine Demonstration der beiden Befehle.

Um »Exsort« zu laden, muß Zeile 0 des Basic-Programms lauten: 0 if k = 0 then k = 1 : load"ex-sort",8,1 (für Diskette) 0 if k = 0 then k = 1 : load"ex-sort",1,1 (für Kassette)

In Zeile 1 muß stehen: 1 sys 49400

Da die Erweiterung nur einmal geladen und gestartet werden muß, kann sie bei späteren Starts des Programms übersprungen werden.

(Marcus Rickert/gk)
0 ifk=0thenk=1:load"exsort?",8,1:rem laden von exsort
1 sys49400:rem starten von exsort
100 rem ***********************
110 rem ***   exsort demo   ***
120 rem ***********************
130 rem
140 rem ******************
150 rem * 1.befehl: "so" *
160 rem ******************
165 print"{clr}Erster Befehl: 'so'"
170 input"{down}Zahl der zu sortierenden Elemente";a
175 print"{down}Anfuellen des Feldes 'za' mit Zufalls-    zahlen"
180 dimza(a)
190 rem *** das feld za wird mit zufallszahlen belegt ***
200 fors=1toa
210 :za(s)=rnd(1)*10000-5000
220 nexts
230 it=ti:rem zeit speichern
240 print"{down}Sortierbeginn"
250 rem
260 rem *** aufruf des befehls "so" ***
270 so,za,1,a,1
280 rem   so   =   befehl
290 rem   za   =   feldname
300 rem   1    =   anfangsindex
310 rem   a    =   endindex
320 rem   1    =   sortierungsrichtung(aufsteigend)
330 rem
340 it=ti-it
350 print"{down}Sortierende"
355 fors=1to1000:nexts
360 rem *** ausgabe der sortierten elemente ***
370 fors=1toa
380 :prints,tab(6)za(s)
390 nexts
400 print"{down}Zeit:"it/60"sec"
410 print"{down}bitte Taste druecken"
420 gett$:ift$=""then420
430 rem
440 rem ******************
450 rem * 2.befehl: "se" *
460 rem ******************
470 rem
480 clr:dimfe$(10000)
485 print"{clr}Zweiter Befehl 'se'"
490 rem ** in 50 beliebige elemente  **
500 rem ** des feldes fe$ wird das   **
510 rem ** wort "hallo" geschrieben  **
520 rem
525 print"{down}In 50 beliebige Elemente von fe$ wird   'hallo' geschrieben"
530 fors=1to50
540 :fe$(rnd(1)*10000)="hallo"
550 nexts
560 print"{down}In folgendem elementen steht 'hallo':"
570 rem
580 rem ** ausdrucken jedes indexes **
590 rem ** in dem "hallo" steht     **
600 rem
610 in=-1:it=ti
620 rem ** aufruf des befehls "se" **
630 se,fe$,in+1,10000,"hallo"
640 rem  se      =   befehl
650 rem  fe$     =   feldname
660 rem  in+1    =   anfangsindex
670 rem  10000   =   endindex
680 rem  "hallo" =   element
690 rem ** bei rueckkehr aus "se"  **
700 rem ** enthaelt "in" den index **
710 rem ** oder (wenn das element  **
720 rem ** nicht gefunden wurde)   **
730 rem ** den wert -1             **
740 ifin=-1orin=10000then760
750 printin,:goto630
760 print:print"{down}Zeit:"(ti-it)/60"sec"
770 print"{down}bitte Taste druecken"
780 gett$:ift$=""then780
790 rem
800 rem ****************************
810 rem * 1.befehl 'so' mit option *
820 rem ****************************
830 rem
835 print"{clr}Erster Befehl mit option"
840 datanull,zwei,vier,sechs,acht,zehn,eins,drei,fuenf,sieben,neun
850 data0,2,4,6,8,10,1,3,5,7,9
860 clr:dimnr(10),nr$(10)
870 rem ** einlesen in feld nr$ **
880 fors=0to10
890 :readx$:nr$(s)=x$
900 nexts
910 rem ** einlesen in feld nr  **
920 fors=0to10
930 :readx:nr(s)=x
940 nexts
950 rem ** ausgabe feld vor sortierung **
960 print"{down}Index nr$ vorher nr * nr$ nachher nr"
970 fors=0to10
980 :prints;tab(6)nr$(s)tab(16)nr(s)
990 nexts
1000 rem ** aufruf des befehl "so" mit option **
1010 so,nr$,0,10,0,nr
1020 rem so   =   befehl
1030 rem nr$  =   feldname 1
1040 rem 0    =   anfangsindex
1050 rem 10   =   endindex
1060 rem 0    =   sortierungsrichutng(absteigend)
1070 rem nr   =   feldname 2
1080 rem
1090 print"{down}Sortieren von nr$ absteigend"
1095 print"{down}nr wird entsprechend mitsortiert"
1097 print"{down}bitte Taste druecken"
1098 gett$:ift$=""then1098
1100 rem ** ausgabe feld nach sortierung **
1110 print"{home}{down}{down}{down}";
1120 fors=0to10
1130 :printtab(22)nr$(s)tab(33)nr(s)
1140 nexts
1150 print"{down}{down}{down}{down}{down}{down}"
Listing 1. »Exsort.demo«. Bitte beachten Sie die Hinweise zum Abtippen auf Seite 16.
PROGRAMM : EXSORT.        C0F8 C6AC
-----------------------------------
C0F8 : A9 03 8D 08 03 A9 C1 8D   27
C100 : 09 03 60 A0 01 B1 7A C9   D2
C108 : 53 F0 03 4C E4 A7 C8 B1   30
C110 : 7A C9 45 D0 03 4C DA C5   64
C118 : C9 4F D0 EF 20 73 00 20   99
C120 : 73 00 20 73 00 20 FD AE   60
C128 : 20 EC C4 20 24 C3 4C 58   36
C130 : C1 20 FD AE 20 8A AD 20   A4
C138 : F7 B7 A5 14 8D 00 C0 A5   1E
C140 : 15 8D 01 C0 20 FD AE 20   61
C148 : 8A AD 20 F7 B7 A5 14 8D   C4
C150 : 02 C0 A5 15 8D 03 C0 60   73
C158 : 20 31 C1 20 FD AE 20 9E   98
C160 : B7 8E 04 C0 E0 02 90 07   E6
C168 : A2 78 A0 C5 4C FA C4 20   17
C170 : C7 C3 8E 06 C0 8C 07 C0   8B
C178 : 8D 08 C0 A0 00 B1 7A F0   A7
C180 : 04 C9 3A D0 08 A9 00 8D   FA
C188 : 0B C0 4C A2 C1 20 FD AE   CD
C190 : 20 EC C4 20 24 C3 20 C7   CC
C198 : C3 8E 09 C0 8C 0A C0 8D   34
C1A0 : 0B C0 A9 00 8D 05 C0 A0   BB
C1A8 : 00 20 3C C5 A0 02 20 3C   93
C1B0 : C5 A9 00 8D F6 C0 8D F7   97
C1B8 : C0 A0 12 20 50 C5 90 03   CC
C1C0 : 4C AE A7 A0 10 20 50 C5   30
C1C8 : A2 10 A0 12 20 2A C5 8E   64
C1D0 : 14 C0 8C 15 C0 A2 14 A0   BD
C1D8 : F6 20 9A C4 F0 DB 30 D9   80
C1E0 : AD 10 C0 8D 0C C0 AD 11   17
C1E8 : C0 8D 0D C0 AD 12 C0 8D   54
C1F0 : 0E C0 AD 13 C0 8D 0F C0   62
C1F8 : 20 EF C3 A0 06 AE 08 C0   8C
C200 : E8 8A A2 0C 20 01 C5 20   B9
C208 : 2F C4 F0 17 48 AD 04 C0   3C
C210 : D0 06 68 10 0E 4C 1B C2   35
C218 : 68 30 08 A2 0C 20 E3 C4   CA
C220 : 4C FB C1 A0 06 AE 08 C0   66
C228 : E8 8A A2 0E 20 01 C5 20   21
C230 : 2F C4 F0 17 48 AD 04 C0   64
C238 : D0 06 68 30 0E 4C 43 C2   01
C240 : 68 10 08 A2 0E 20 D1 C4   B9
C248 : 4C 23 C2 A2 0C A0 0E 20   69
C250 : 9A C4 F0 02 10 67 A0 06   94
C258 : AE 08 C0 E8 8A A2 0C 20   86
C260 : 01 C5 86 FB 84 FC A0 06   24
C268 : AE 08 C0 E8 8A A2 0E 20   9E
C270 : 01 C5 86 FD 84 FE AC 08   B8
C278 : C0 20 69 C5 AD 0B C0 F0   73
C280 : 26 A0 09 AE 0B C0 E8 8A   7E
C288 : A2 0C 20 01 C5 86 FB 84   E2
C290 : FC A0 09 AE 0B C0 E8 8A   64
C298 : A2 0E 20 01 C5 86 FD 84   FB
C2A0 : FE AC 0B C0 20 69 C5 A2   79
C2A8 : 0C 20 E3 C4 A2 0E 20 D1   14
C2B0 : C4 A2 0E A0 0C 20 9A C4   13
C2B8 : 30 03 4C FB C1 A2 0E A0   A7
C2C0 : 10 20 2A C5 8E 14 C0 8C   C9
C2C8 : 15 C0 A2 12 A0 0C 20 2A   67
C2D0 : C5 8E 16 C0 8C 17 C0 A2   44
C2D8 : 14 A0 16 20 9A C4 10 22   1A
C2E0 : A2 0C A0 12 20 9A C4 10   FD
C2E8 : 0A A0 0C 20 3C C5 A0 12   E2
C2F0 : 20 3C C5 AD 0E C0 8D 12   97
C2F8 : C0 AD 0F C0 8D 13 C0 4C   78
C300 : C8 C1 A2 10 A0 0E 20 9A   84
C308 : C4 10 0A A0 10 20 3C C5   E9
C310 : A0 0E 20 3C C5 AD 0C C0   C2
C318 : 8D 10 C0 AD 0D C0 8D 11   C2
C320 : C0 4C C8 C1 A9 04 8D 14   8A
C328 : C0 A2 00 86 03 86 04 20   BF
C330 : 73 00 F0 3F C9 3A F0 3B   70
C338 : C9 24 F0 14 C9 25 F0 18   8C
C340 : C9 2C F0 2F 15 03 95 03   07
C348 : E0 02 F0 20 E8 4C 2F C3   9F
C350 : A9 02 8D 14 C0 4C 63 C3   64
C358 : A9 01 8D 14 C0 A5 03 09   BF
C360 : 80 85 03 A5 04 09 80 85   AE
C368 : 04 4C 2F C3 A2 9E A0 C5   04
C370 : 4C FA C4 A5 2F 85 FB A5   79
C378 : 30 85 FC 4C A4 C3 A0 00   1E
C380 : B1 FB C5 03 D0 0A C8 B1   E4
C388 : FB C5 04 D0 03 4C B7 C3   7A
C390 : A0 02 18 A5 FB 71 FB AA   7D
C398 : 08 C8 28 A5 FC 71 FB 85   19
C3A0 : FC 8A 85 FB A5 FB C5 31   76
C3A8 : D0 D4 A5 FC C5 32 D0 CE   BA
C3B0 : A2 8F A0 C5 4C FA C4 A0   EC
C3B8 : 04 B1 FB C9 01 D0 01 60   28
C3C0 : A2 B9 A0 C5 4C FA C4 18   FF
C3C8 : A0 06 B1 FB ED 02 C0 08   59
C3D0 : 88 B1 FB 28 ED 03 C0 B0   90
C3D8 : 07 A2 00 A9 12 4C 3B A4   1F
C3E0 : 18 A5 FB 69 07 AA A5 FC   4D
C3E8 : 69 00 A8 AD 14 C0 60 18   2A
C3F0 : AD 10 C0 6D 12 C0 AA AD   B0
C3F8 : 11 C0 6D 13 C0 4A 8D 15   E6
C400 : C0 8A 6A 8D 14 C0 AE 08   64
C408 : C0 E8 8A A0 06 A2 14 20   F9
C410 : 01 C5 86 28 84 29 AD 08   F3
C418 : C0 C9 04 D0 04 8A 4C A2   E3
C420 : BB AE 08 C0 8A A8 B1 28   51
C428 : 95 61 CA 88 10 F8 60 86   89
C430 : 28 84 29 AD 08 C0 C9 02   4C
C438 : F0 09 C9 01 F0 41 8A 20   C3
C440 : 5B BC 60 A0 01 B1 28 85   6F
C448 : 03 C8 B1 28 85 04 A0 00   1C
C450 : 4C 62 C4 B1 03 D1 62 F0   5F
C458 : 08 B0 03 A9 01 60 A9 FF   68
C460 : 60 C8 98 A0 00 D1 28 F0   70
C468 : 08 C5 61 F0 04 A8 4C 53   27
C470 : C4 B1 28 C5 61 F0 05 B0   E3
C478 : E5 4C 5B C4 A9 00 60 A5   5A
C480 : 61 8D 15 C0 A5 62 8D 14   D1
C488 : C0 A0 00 B1 28 8D 17 C0   9B
C490 : C8 B1 28 8D 16 C0 A2 14   07
C498 : A0 16 BD 00 C0 D9 00 C0   0F
C4A0 : D0 0B BD 01 C0 D9 01 C0   E6
C4A8 : D0 03 4C 7C C4 BD 01 C0   5C
C4B0 : 30 17 B9 01 C0 30 A4 38   8B
C4B8 : BD 00 C0 F9 00 C0 BD 01   E4
C4C0 : C0 F9 01 C0 90 98 4C 5B   8B
C4C8 : C4 B9 01 C0 10 90 4C B7   E7
C4D0 : C4 38 BD 00 C0 E9 01 9D   BA
C4D8 : 00 C0 BD 01 C0 E9 00 9D   5E
C4E0 : 01 C0 60 FE 00 C0 D0 03   89
C4E8 : FE 01 C0 60 A5 7A 38 E9   86
C4F0 : 01 85 7A A5 7B E9 00 85   19
C4F8 : 7B 60 86 22 84 23 4C 47   AA
C500 : A4 85 28 BD 00 C0 85 71   28
C508 : BD 01 C0 85 72 A9 00 85   A6
C510 : 29 98 48 20 57 B3 86 28   19
C518 : 84 29 68 A8 18 A5 28 79   A2
C520 : 00 C0 AA A5 29 79 01 C0   C3
C528 : A8 60 38 B9 00 C0 FD 00   44
C530 : C0 48 B9 01 C0 FD 01 C0   24
C538 : A8 68 AA 60 AE 05 C0 B9   54
C540 : 00 C0 9D 19 C0 B9 01 C0   8A
C548 : 9D 88 C0 E8 8E 05 C0 60   4B
C550 : AE 05 C0 CA 10 02 38 60   BD
C558 : BD 19 C0 99 00 C0 BD 88   13
C560 : C0 99 01 C0 8E 05 C0 18   89
C568 : 60 B1 FB AA B1 FD 91 FB   3E
C570 : 8A 91 FD 88 10 F3 60 FF   75
C578 : 57 52 4F 4E 47 20 53 4F   F7
C580 : 52 54 49 4E 47 20 44 49   32
C588 : 52 45 43 54 49 4F CE 41   A5
C590 : 52 52 41 59 20 4E 4F 54   E1
C598 : 20 46 4F 55 4E C4 57 52   67
C5A0 : 4F 4E 47 20 41 52 52 41   5F
C5A8 : 59 20 4E 41 4D C5 57 52   D2
C5B0 : 4F 4E 47 20 49 4E 44 45   9F
C5B8 : D8 4F 4E 4C 59 20 4F 4E   C5
C5C0 : 45 20 44 49 4D 45 4E 53   2E
C5C8 : 49 4F 4E 20 41 52 52 41   C3
C5D0 : D9 00 FF 00 FF 00 FF 20   E9
C5D8 : FF 00 20 73 00 20 73 00   1D
C5E0 : 20 73 00 20 FD AE 20 EC   6E
C5E8 : C4 20 24 C3 20 31 C1 20   11
C5F0 : C7 C3 8E 06 C0 8C 07 C0   0B
C5F8 : 8D 08 C0 20 FD AE 20 9E   D0
C600 : AD A2 02 A0 00 20 9A C4   88
C608 : 10 07 A2 AE A0 C5 4C FA   7A
C610 : C4 AD 08 C0 C9 02 F0 14   5E
C618 : 20 8D AD AD 08 C0 C9 04   D6
C620 : F0 17 20 AA B1 85 61 84   CF
C628 : 62 4C 39 C6 20 A3 B6 85   DC
C630 : 61 A5 22 85 62 A5 23 85   88
C638 : 63 AE 08 C0 E8 8A A0 06   7E
C640 : A2 00 20 01 C5 8E 09 C0   81
C648 : 8C 0A C0 AE 09 C0 AC 0A   3D
C650 : C0 20 2F C4 F0 2A A2 00   70
C658 : A0 02 20 9A C4 F0 1A A2   D6
C660 : 00 20 E3 C4 38 AD 09 C0   98
C668 : 6D 08 C0 8D 09 C0 AD 0A   1C
C670 : C0 69 00 8D 0A C0 4C 4B   05
C678 : C6 A9 FF A0 FF 4C 86 C6   31
C680 : AD 01 C0 AC 00 C0 20 91   1D
C688 : B3 A9 00 85 0D 85 0E A9   49
C690 : 49 85 45 A9 4E 85 46 20   8D
C698 : E7 B0 A6 47 A4 48 20 D4   21
C6A0 : BB 4C AE A7 FF 00 FF FF   22
C6A8 : C9 20 F0 0D               06
Listing 2. »Exsort.«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →