1 REM Ins{nd av Leopold Lundstr|m <2694> 1986-10-23 12.29.45 (DUMP) 40 REM ++++++++++++++++++++++++ 41 REM Program ... SORTERA1.BAS 42 REM Av L Lundstr|m <2694> 43 REM Version .. 1.0 44 REM Bygger p} ..... Sortera.bas 45 REM Version 1.0 84-09-23 46 REM av S Nilsson <3018> 47 REM 48 REM Prog stl ... 5.6 Kbyte 49 REM Variabler 17.2 Kbyte 50 REM 51 REM Testad p} f|ljande maskiner 52 RE ABC80 11273 av <2694> 86-21-10 53 REM Speciella tillbeh|r kr{vs 54 REM Utbyggt minne .. Ja 55 REM 56 REM Anv{nder : 57 REM POKE ... Ja (65013,annullera tangenttryck) 58 REM ------------------------------ 59 REM Beskrivning : 60 REM Programmet inneh}ller endast stommen 61 REM till ett program f|r j{mf|relse av 62 REM sorteringsalgoritmer. Det {r t{nkt 63 REM att anv{ndas tillsammans med de 64 REM algoritmer, som Anders Sandberg 65 REM beskriver i ABC-bladet 3.86.39ff 66 REM Dessa }terfinns i s{rskild fil 67 REM SORT4104.BAS 68 REM 100 DIM A$(600%)=7%,B$(600%)=7%,T$(11%)=10%,S$(11%)=24%,L%(10%),R%(10%) 101 REM Stackniv}pekarna L() och R() dimensionerade h{r f|r att ej f} ERR 0 105 DEFFNK=(PEEK(65010%) XOR 255%)*1310.72+(PEEK(65009%) XOR 255%)*5.12+(PEEK(65008%) XOR 255%)/50 110 S$(0%)="Samtliga metoder" : S$(1%)="Falsk BUBBLE sort" : S$(2%)="BUBBLE sort var.1" 115 S$(3%)="BUBBLE sort var.2" : S$(4%)="SELECTION sort" : S$(5%)="SELECTION sort - delayed" 120 S$(6%)="INSERTION sort" : S$(7%)="BATCHER's sort" : S$(8%)="SHELL's sort var.1" 125 S$(9%)="SHELL's sort var.2" : S$(10%)="QUICK sort" : S$(11%)="HEAP sort" : C$(0%)='Tryck tangent' 130 C$(1%)=' OSORTERADE' : C$(2%)=' R[TTV[NT sorterade' : C$(3%)=' OMV[NT sorterade' : C$(4%)=' LIKALYDANDE' 135 IF PEEK(590%)=40% THEN T1%=1% : T2%=0% : T3%=0% : T4%=6% : T5%=29% 140 IF PEEK(590%)=80% THEN T1%=9% : T2%=7% : T3%=14% : T4%=20% : T5%=37% 145 REM RANDOMIZE 150 ; CHR$(12%) : ONERRORGOTO 150 155 ; ' Sorteringstest.' 160 ; ' ==============' 165 ; : ; 'Med detta program kan Du direkt under-' : ; 's|ka skillnaden '; 170 ; 'i snabbhet mellan olika' : ; 'sorteringsalgoritmer.' 175 ; : ; '({ven med listor som redan {r sorterade)' 180 ; : ; 'Programmet tar sj{lv tid p} sorterings-' : ; 'proceduren.' 185 ; : ; 'F|rst skapas ett antal slumpvis bildade "ord" ' 190 ; : ; 'Hur m}nga ord skall sorteras ?' : ; '(Max 600)' 195 FOR C%=1% TO 11% : T$(C%)=' 0 0.0' : NEXT C% : C0%=0% 200 IF N1%<>0% ; : ; '(om samma ord skall anv{ndas igen' : ; 'mata in 0 (noll)' 205 INPUT N% : IF N%>600% OR N%=1% THEN 150 ELSE IF N%<>0% THEN N1%=N% ELSE IF N1%=0 THEN 150 210 ONERRORGOTO 210 215 ; : ;"'Skall utg}ngslistan vara osorterad (1)' : ; 'r{ttv{nd (2), omv{nd (3) eller best} av samma ord (4) '; 220 GET C$ : C1%=ASC(C$)-48% 225 IF C1%<1% OR C1%>4% THEN 210 230 REM 235 REM ++ Bilda ord att sortera ++ 240 REM 245 ; : ; : ; 'V [ N T A ! Ordf|rr}det byggs upp.' 250 IF N%=0% THEN N%=N1% : GOTO 265 255 FOR I%=1% TO N% : A$="" : FOR J%=1% TO 7% : A$=A$+CHR$(RND*28%+65%) : NEXT J% 260 A$(I%)=A$ : B$(I%)=A$ : NEXT I% : ; 265 ON C1% GOSUB 510,1916,1916,510 270 ON C1% GOSUB 510,510,515,520 275 ON C1% GOTO 280,285,285,285 280 FOR I%=1% TO N% : B$(I%)=A$(I%) : NEXT I% 285 ONERRORGOTO 285 : ; CHR$(12%) 290 ; N%;C$(C1%)' ord att sortera' : ; 295 ; TAB(29%+T1%)'Min Sek' 300 FOR I%=0% TO 11% : ; TAB(T1%); : IF I%<10% ; I%'. '; ELSE ; ' 'CHR$(I%+55%)'. '; 305 ; S$(I%);TAB(T1%+28%)T$(I%) : NEXT I% 310 ; : ; TAB(T1%)' C. Ny omg}ng ord' : ; : ; TAB(T1%)' D. Avsluta/Avbryta' 315 ; : ; TAB(T1%)' E. Utskrift p} printer' 320 IF C0%>0% AND C0%<16% THEN ; CUR(C0%,T2%)'*'; 325 IF C2%=-1% AND C%<11% THEN C%=C%+1% : GOTO 360 330 ; CUR(23%,0%)'V[LJ METOD (0-B) 'CHR$(8%); : INPUTLINE C$ : C%=ASC(C$)-48% : IF C%=19% ; CHR$(12%) : GOTO 190 335 IF C%=0% THEN C2%=-1% : C%=1% : GOTO 360 ELSE C2%=0% 340 IF C%<0% OR C%>21% THEN GOTO 285 345 IF C%>9% AND C%<17% THEN GOTO 285 350 IF C%=20% 505 ELSE IF C%=21% GOSUB 540 : GOTO 330 355 IF C%>9% C%=C%-7% 360 ; CHR$(13%);CUR(23%,0%)'S O R T E R I N G P ] G ] R !'; 365 C0%=C%+4% : ; CUR(C0%,T2%)CHR$(127%) : IF C2% ; CUR(4%,T2%)CHR$(127%) 370 REM 375 REM ++ KLOCKAN AVL[SES ++ 380 REM 385 T1=FNK 390 REM 395 ON C% GOSUB 1030,1130,1230,1330,1430,1530,1630,1730,1830,1916,2015 400 REM 405 REM ++ SLUTTID - TIDBER[KNING ++ 410 REM 415 T=FNK-T1 420 T1=INT(T/60) : T2=T-T1*60 : T1$=SPACE$(3%-LEN(NUM$(T1)))+NUM$(T1) : T2$=RIGHT$(NUM$(T2),2%) 425 T2$=ADD$(T2$,'0',1%) : IF VAL(T2$)<1% THEN T2$='0'+T2$ 430 T$(C%)=T1$+SPACE$(5%-LEN(T2$))+T2$ 435 IF C2%<>0% AND C%<11% AND (INP(56%) OR 128%)<>196% THEN ; CHR$(7%) : GOTO 265 ELSE C2%=0% : POKE 65013%,0% 440 ; CHR$(12%,7%)CUR(6%,T4%)S$(C%) : ; CUR(10%,T4%)'Sorteringen tog :';T;' sekunder' 445 REM 450 REM ++ VISUELL KONTROLL ++ 455 REM 460 ; CUR(14%,T4%)'Vill Du se orden som sorterats?' : ; CUR(16%,T4%)C$(0%)' J ' 465 FOR F=1 TO 1500 : IF (INP(56%) AND 95%)=74% THEN 475 ELSE IF INP(56%)=141% THEN 265 470 NEXT F : GOTO 265 475 L%=0% : POKE 65013%,0% : ; CHR$(12%) 480 K%=PEEK(590%)/8% : FOR I%=1% TO N% STEP K% : FOR J%=0% TO K%-1% : ; B$(I%+J%); 485 IF J%0% ; : ; ,C$(0%); : GET C$ 500 GOTO 265 505 ; CUR(23%,0%)SPACE$(20);CUR(21%,0%); : END 510 RETURN 515 FOR I%=1% TO N%/2% : A$=B$(N%-I%+1%) : B$(N%-I%+1%)=B$(I%) : B$(I%)=A$ : NEXT I% : RETURN 520 FOR I%=1% TO N% : B$(I%)='Likaord' : NEXT I% : RETURN 525 REM 530 REM Printerutskrift 535 REM 540 P9%=1% : OPEN "PR:" ASFILE P9% 545 ; #P9%TAB(9%)N%C$(C1%)' ord'TAB(40%)'Min Sek' : ; #P9%TAB(10%)STRING$(38%,45%) 550 FOR I%=1% TO 11% : ; #P9%TAB(10%)S$(I%)TAB(39)T$(I%) : NEXT I% : ; #P9% : CLOSE P9% : RETURN 1917 GOTO 1932