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