10 REM ++++++++++++++++++++++++++++++++
20 REM ! Program .... RETUR01.BAS
30 REM ! Utg}va 1.0 12.08.84
40 REM ! av (c) Thor Kristoffersen
50 REM ! 4196
60 REM ! Minne 10 Kbytes
70 REM ! REVIDERT JULI 1986
80 REM ++++++++++++++++++++++++++++++++
90 REM
100 A$="======" : FOR I%=1% TO 12% : A$=A$+"======" : NEXT I%
110 DIM A%(10%,10%),B%(0%,50%),C$(15%),D$(1%) : D$="-" : DIM B1$(80%)
120 ONERRORGOTO 120 : ; CHR$(12%) : ; : ; : T=0 : T1%=1% : T2%=0% : A%=1% : T3%=0% : T4%=0% : T5%=0% : T6%=0%
130 T7%=0% : T8%=0%
140 ; CHR$(12%)
150 ; " Har du program i DR0: og ledig skive i DR1: ?"
160 ; " Er printeren klar ."; : GET V$
170 IF V$="N" OR V$="n" THEN 1310
180 IF V$="J" OR V$="j" THEN 190 ELSE 150
190 ONERRORGOTO 190 : ; CHR$(12%); : ; : ; : ; : ; : ; : ; : ; : ; TAB(5%)"Antall punkt-----<4-9>."
200 ; TAB(5%)"Forklaring--------<10>."
210 ; TAB(5%)"Avslutte-----------<0>."
220 ; TAB(5%)"Velg kode---------."; : INPUT A1%
230 IF A1%>=4% AND A1%<=9% THEN 260
240 IF A1%=10% THEN 1330
250 IF A1%=0% THEN 1310 ELSE 120
260 ; CHR$(12%) : ;
270 ONERRORGOTO 270 : ; "Rute nr."; : INPUT A2% : ;
280 ; "Hvilke "A1%" navn har du." : ;
290 FOR L%=1% TO A1%
300 ONERRORGOTO 300 : ; "Punkt "L%" .Navn "L%; : INPUT C$(L%)
310 IF C$(L%)="" THEN 300
320 C$(L%)=C$(L%)+"-"
330 NEXT L%
340 ; CHR$(12%) : N%=A1%*(A1%-1%)/2%
350 ; A1%" PUNKT." : ;
360 ; N%" DISTANSER" : ;
370 FOR I%=1% TO A1%
380 FOR J%=1% TO A1%
390 IF I%=J% THEN 440
400 A%(I%,J%)=A%(J%,I%)
410 IF A%(J%,I%)>0% THEN 440
420 T2%=T2%+1%
430 ONERRORGOTO 430 : ; "DISTANSE "T2%":"C$(I%)" TIL "C$(J%); : INPUT A%(I%,J%)
440 NEXT J%
450 NEXT I%
460 ONERRORGOTO 1310
470 ; CHR$(12%)
480 OPEN "PR:" ASFILE 100%
490 ; #100%;A$
500 GOSUB 1540
510 IF A1%=4% THEN 580
520 IF A1%=5% THEN 670
530 IF A1%=6% THEN 770
540 IF A1%=7% THEN 880
550 IF A1%=8% THEN 1000
560 IF A1%=9% THEN 1140
570 REM **** FIRE PUNKTER **** ************************************************
580 FOR B%=2% TO 4% : FOR C%=2% TO 4% : IF B%=C% THEN 640 : FOR D%=2% TO 4%
590 IF B%=D% OR C%=D% THEN 640 : B%(0%,T1%)=A%(A%,B%)+A%(B%,C%)+A%(C%,D%)+A%(D%,A%) : T=T+1 : IF T=1 THEN 610
600 IF B%(0%,T1%)<=B%(0%,T1%-1%) THEN 610 ELSE 640
610 GOSUB 1690
620 B1$=C$(A%)+C$(B%)+C$(C%) : B2$=C$(D%)+C$(A%) : B5$=B1$+B2$
630 GOSUB 1830
640 NEXT D% : NEXT C% : NEXT B%
650 GOTO 1740
660 REM ***** FEM PUNKT ***** *************************************************
670 FOR B%=2% TO 5% : FOR C%=2% TO 5% : IF B%=C% THEN 740 : FOR D%=2% TO 5% : IF B%=D% THEN 740
680 IF C%=D% THEN 740 : FOR E%=2% TO 5% : IF B%=E% OR C%=E% OR D%=E% THEN 740
690 B%(0%,T1%)=A%(A%,B%)+A%(B%,C%)+A%(C%,D%)+A%(D%,E%)+A%(E%,A%) : T=T+1
700 IF T=1 THEN 710 : IF B%(0%,T1%)<=B%(0%,T1%-1%) THEN 710 ELSE 740
710 GOSUB 1690
720 B1$=C$(A%)+C$(B%)+C$(C%) : B2$=C$(D%)+C$(E%)+C$(A%) : B5$=B1$+B2$
730 GOSUB 1830
740 NEXT E% : NEXT D% : NEXT C% : NEXT B%
750 GOTO 1740
760 REM ****** SEKS PUNKT ****** **********************************************
770 FOR B%=2% TO 6% : FOR C%=2% TO 6% : IF B%=C% THEN 850 : FOR D%=2% TO 6%
780 IF B%=D% OR C%=D% THEN 850 : FOR E%=2% TO 6%
790 IF B%=E% OR C%=E% OR D%=E% THEN 850 : FOR F%=2% TO 6% : IF B%=F% OR C%=F% OR D%=F% THEN 850
800 IF E%=F% THEN 850 : B%(0%,T1%)=A%(A%,B%)+A%(B%,C%)+A%(C%,D%)+A%(D%,E%)+A%(E%,F%)+A%(F%,A%) : T=T+1
810 IF T=1 THEN 820 : IF B%(0%,T1%)<=B%(0%,T1%-1%) THEN 820 ELSE 850
820 GOSUB 1690
830 B1$=C$(A%)+C$(B%)+C$(C%) : B2$=C$(D%)+C$(E%)+C$(F%) : B5$=B1$+B2$+C$(A%)
840 GOSUB 1830
850 NEXT F% : NEXT E% : NEXT D% : NEXT C% : NEXT B%
860 GOTO 1740
870 REM ******* SYV PUNKTER ******* **********************************
880 FOR B%=2% TO 7% : FOR C%=2% TO 7% : IF B%=C% THEN 970 : FOR D%=2% TO 7%
890 IF B%=D% OR C%=D% THEN 970 : FOR E%=2% TO 7% : IF B%=E% OR C%=E% OR D%=E% THEN 970 : FOR F%=2% TO 7%
900 IF B%=F% OR C%=F% OR D%=F% OR E%=F% THEN 970 : FOR G%=2% TO 7% : IF B%=G% OR C%=G% OR D%=G% THEN 970
910 IF E%=G% OR F%=G% THEN 970
920 B%(0%,T1%)=A%(A%,B%)+A%(B%,C%)+A%(C%,D%)+A%(D%,E%)+A%(E%,F%)+A%(F%,G%)+A%(G%,A%) : T=T+1
930 IF T=1 THEN 940 : IF B%(0%,T1%)<=B%(0%,T1%-1%) THEN 940 ELSE 970
940 GOSUB 1690
950 B1$=C$(A%)+C$(B%)+C$(C%) : B2$=C$(D%)+C$(E%)+C$(F%) : B3$=C$(G%)+C$(A%) : B5$=B1$+B2$+B3$
960 GOSUB 1830
970 NEXT G% : NEXT F% : NEXT E% : NEXT D% : NEXT C% : NEXT B%
980 GOTO 1740
990 REM ******** ]TTE PUNKTER ******** ******************************
1000 FOR B%=2% TO 8% : FOR C%=2% TO 8% : IF B%=C% THEN 1110 : FOR D%=2% TO 8%
1010 IF B%=D% OR C%=D% THEN 1110 : FOR E%=2% TO 8% : IF B%=E% OR C%=E% OR D%=E% THEN 1110 : FOR F%=2% TO 8%
1020 IF B%=F% OR C%=F% OR D%=F% OR E%=F% THEN 1110 : FOR G%=2% TO 8% : IF B%=G% OR C%=G% OR D%=G% THEN 1110
1030 IF E%=G% OR F%=G% THEN 1110
1040 FOR H%=2% TO 8% : IF B%=H% OR C%=H% OR D%=H% OR E%=H% OR F%=H% OR G%=H% THEN 1110
1050 B%(0%,T1%)=A%(A%,B%)+A%(B%,C%)+A%(C%,D%)+A%(D%,E%)+A%(E%,F%)+A%(F%,G%)+A%(G%,H%)+A%(H%,A%) : T=T+1
1060 IF T=1 THEN 1070 : IF B%(0%,T1%)<=B%(0%,T1%-1%) THEN 1070 ELSE 1110
1070 GOSUB 1690
1080 B1$=C$(A%)+C$(B%)+C$(C%) : B2$=C$(D%)+C$(E%)+C$(F%)
1090 B3$=C$(G%)+C$(H%)+C$(A%) : B5$=B1$+B2$+B3$
1100 GOSUB 1830
1110 NEXT H% : NEXT G% : NEXT F% : NEXT E% : NEXT D% : NEXT C% : NEXT B%
1120 GOTO 1740
1130 REM ********* NI PUNKTER ********* ******************************
1140 FOR B%=2% TO 9% : FOR C%=2% TO 9% : IF B%=C% THEN 1280
1150 FOR D%=2% TO 9% : IF B%=D% OR C%=D% THEN 1280 : FOR E%=2% TO 9% : IF B%=E% OR C%=E% OR D%=E% THEN 1280
1160 FOR F%=2% TO 9% : IF B%=F% OR C%=F% OR D%=F% OR E%=F% THEN 1280 : FOR G%=2% TO 9% : IF B%=G% THEN 1280
1170 IF C%=G% OR D%=G% THEN 1280
1180 IF E%=G% OR F%=G% THEN 1280 : FOR H%=2% TO 9% : IF B%=H% OR C%=H% OR D%=H% OR E%=H% OR F%=H% THEN 1280
1190 IF G%=H% THEN 1280
1200 FOR K%=2% TO 9% : IF B%=K% OR C%=K% OR D%=K% OR E%=K% OR F%=K% OR G%=K% OR H%=K% THEN 1280
1210 B%(0%,T1%)=A%(A%,B%)+A%(B%,C%)+A%(C%,D%)+A%(D%,E%)+A%(E%,F%)+A%(F%,G%)+A%(G%,H%)+A%(H%,K%)+A%(K%,A%)
1220 T=T+1
1230 IF T=1 THEN 1240 : IF B%(0%,T1%)<=B%(0%,T1%-1%) THEN 1240 ELSE 1280
1240 GOSUB 1690
1250 B1$=C$(A%)+C$(B%)+C$(C%) : B2$=C$(D%)+C$(E%)+C$(F%)
1260 B3$=C$(G%)+C$(H%)+C$(K%) : B4$=B1$+B2$+B3$ : B5$=B4$+C$(A%)
1270 GOSUB 1830
1280 NEXT K% : NEXT H% : NEXT G% : NEXT F% : NEXT E% : NEXT D% : NEXT C% : NEXT B%
1290 GOTO 1740
1300 REM **************************************************************
1310 ; "SLUTT" : END
1320 REM **************************************************************
1330 ; CHR$(12%) : ;
1340 ; " Distansetabell"
1350 ; "=======================================" : ; : ;
1360 ; TAB(6%)" ! 1 !"
1370 ; TAB(6%)" ---!---!"
1380 ; TAB(6%)" 1 !XXX! 2 !"
1390 ; TAB(6%)" ---!---!---!"
1400 ; TAB(6%)" 2 !876!XXX! 3 !"
1410 ; TAB(6%)" ---!---!---!---"
1420 ; TAB(6%)" 3 !154!279!XXX! 4 !"
1430 ; TAB(6%)" ---!---!---!---!---!"
1440 ; TAB(6%)" 4 !998!137!567!XXX! 5 !"
1450 ; TAB(6%)" ---!---!---!---!-------!"
1460 ; TAB(6%)" 5 !764!543!382!843!XXX!"
1470 ; TAB(6%)" ___!___!___!___!___!___!"
1480 ; : ; "Gj|r tabellen over alle distanser"
1490 ; "ferdig f|r input.Det letter arbeidet."
1500 ; "Dette er et eksempel."
1510 ; "Tast return."; : GET V$ : GOTO 120
1520 REM ****************************************************************
1530 ; #100%;STRING$(79%,45%) : T5%=T5%+1% : IF T5%=16% THEN 1550 : RETURN
1540 IF T6%=0% THEN 1560
1550 ; #100%;CHR$(12%) : ; #100%;A$ : T5%=0%
1560 T6%=T6%+1%
1570 ; #100%"Tabell over alternative reiseruter for "A1%" reisem}l:Rute Nr."A2%" : side "T6% : ; #100%;A$
1580 RETURN
1590 REM ***************************************************************
1600 T3%=0% : T4%=0% : OPEN "PR:" ASFILE 100%
1610 FOR I%=T1% TO 1% STEP -1%
1620 T3%=T3%+1%
1630 IF B%(0%,T1%-T3%)=B%(0%,T1%-1%) THEN 1640 ELSE 1650
1640 T4%=T4%+1%
1650 NEXT I%
1660 ; #100%;"Det er "T4%" optimale ruter......";B%(0%,T1%-1%)
1670 ; #100%;A$ : ; #100%;CHR$(12%) : RETURN
1680 REM **************************************************************
1690 M$="DR1:MILES" : T$=NUM$(T1%)
1700 PREPARE M$+T$+".DAT" ASFILE T1%
1710 ; "Fil "M$+T$" opprettet :"B%(0%,T1%) : ; CHR$(7%)
1720 RETURN
1730 REM **************************************************************
1740 OPEN "PR:" ASFILE 100%
1750 FOR M%=(T1%-1%) TO 1% STEP -1%
1755 T8%=T8%+1%
1760 M$="DR1:MILES" : T$=NUM$(M%)
1770 OPEN M$+T$+".DAT" ASFILE M%
1780 INPUTLINE #M%,B5$ : INPUT #M%,B%(0%,T1%)
1785 IF T8%=1% THEN 1800
1790 IF B%(0%,M%)=B%(0%,T1%-1%) THEN 1800 ELSE 1960
1800 ; #100%;B5$ : ; #100%;B%(0%,T1%) : CLOSE M% : GOSUB 1530
1820 NEXT M% : GOTO 1960
1830 REM ************************************************************
1840 ; #T1%,B5$ : ; #T1%,B%(0%,T1%) : CLOSE T1% : T1%=T1%+1% : T7%=T7%+1% : RETURN
1850 REM ************************************************************
1960 GOSUB 1600
1962 CLOSE 100%
1965 FOR J%=T7% TO 1% STEP -1%
1970 T$=NUM$(J%)
2000 KILL M$+T$+".DAT" : ; M$+T$+".DAT"; : ; " slettes." : ; CHR$(7%)
2030 NEXT J%
2040 GOTO 1310