10 REM ++++++++++++++++++++++++++++++++ 20 REM ! Program .... PLANTOPT 30 REM ! Utg}va 1 82-03-06 40 REM ! av (c) Sten Fr|din 50 REM ! Minne 16 Kbytes 60 REM ++++++++++++++++++++++++++++++++ 70 PRINT CHR$(12) 80 ; ' Programmet anv{nds f|r att best{mma ' 90 ; 'hur man ska plantera gr|nsaker i sin ' 100 ; 'tr{dg}rd.En gr|nsakssort kan trivas' 110 ; 'b{ttre eller s{mre med en annan.L|k ' 120 ; 'trivs t.ex. bra n{ra mor|tter men s{mre' 130 ; 'vid {rter. Om man ska plantera ett' 140 ; 'tiotal olika rader kan det vara sv}rt' 150 ; 'att v{lja b{sta ordningsf|ljd. F|r att' 160 ; 'avg|ra detta skulle man kunna g} igenom' 170 ; 'alla m|jliga kombinationer av de' 180 ; 'aktuella gr|nsakerna,n}got som i' 190 ; 'allm{nhet skulle ta l}ng tid. Ist{llet' 200 ; 'v{ljer datorn slumpm{ssigt ut ett' 210 ; 'planteringsschema, ber{knar en po{ng' 220 ; 'f|r detta, provar att v{xla ett par' 230 ; 'rader, vilka som helst och ber{knar en' 240 ; 'ny po{ng. Om den nya po{ngen {r l{gre' 250 ; '{n den gamla v{xlar programmet' 260 ; 'tillbaka, annars beh}lls det nya' 270 ; 'schemat. D{refter nya slumpm{ssiga' 280 ; 'v{xlingar tills man n|jer sig.' 290 ; 300 PRINT 'Tryck p} tangent d} Du har l{st klart.' 310 GET Q$ 320 DATA 0,-1,0,0,0,0,0,-1,1,0,0,-1,-1,1,1,0,0,-1 330 DATA -1,0,0,0,0,0,0,0,1,0,0,0,0,0,-1,0,0,0 340 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 350 DATA 0,0,0,0,1,0,0,1,-1,1,0,0,0,1,-1,0,1,0 360 DATA 0,0,0,1,0,-1,0,1,0,0,0,1,1,1,1,0,0,1 370 DATA 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 380 DATA 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 390 DATA -1,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0 400 DATA 1,1,0,-1,0,0,0,0,0,1,0,0,0,0,1,0,0,0 410 DATA 0,0,0,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1 420 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 430 DATA -1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0 440 DATA -1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0 450 DATA 1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0 460 DATA 1,-1,0,-1,1,0,0,1,1,0,0,0,0,0,0,0,1,0 470 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 480 DATA 0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0 490 DATA -1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0 500 P0%=-1000 510 REM P0% {r po{ngen f|r det gamla planteringsschemat. S{tts till ett stort negativt tal vid start. 520 DIM R%(50) 530 REM R%(I%) {r typnummer f|r plantan som s}s i rad I%. 540 DIM A$(17) 550 REM A$(J%) inneh}ller namnet p} plantan med typnummer J%. 560 DIM B%(17,17) 570 REM B%(R%,K%) anger hur planttyp R% trivs med planttyp K%. B%()=1 inneb{r att planta R% trivs bra,-1 d}ligt. 580 DIM V1%(17) 590 REM V1%() {r antal rader av viss planttyp. 600 DIM V%(17) 610 REM V%()=V1%()- antal redan planterade rader av denna sort. 620 REM B%(,) s{tts lika med matrisv{rdena : 630 FOR I%=0 TO 17 640 FOR J%=0 TO 17 650 READ B%(I%,J%) 660 NEXT J% 670 NEXT I% 680 RANDOMIZE 690 A$(0)=" Gurka" 700 A$(1)=" Potatis" 710 A$(2)=" Svartrot" 720 A$(3)=" L|k" 730 A$(4)=" Morot" 740 A$(5)=" Dill" 750 A$(6)=" Persilja" 760 A$(7)=" R{disor" 770 A$(8)=" B|nor" 780 A$(9)=" Brysselk}l" 790 A$(10)=" Mangold" 800 A$(11)=" Citronmeliss" 810 A$(12)=" Basilika" 820 A$(13)=" Sallat" 830 A$(14)=" [rter" 840 A$(15)=" Palsternacka" 850 A$(16)=" K}lrot" 860 A$(17)=" K|rvel" 870 ; CHR$(12) 880 PRINT "S[TT UT ANTAL RADER (totalt max 22)" 890 ; 900 FOR I%=0 TO 17 910 PRINT A$(I%) 920 NEXT I% 930 ; 940 FOR J%=0 TO 17 950 PRINT CUR(J%+3,17); 960 ONERRORGOTO 1470 970 INPUT V1%(J%) 980 N%=N%+V1%(J%) 990 LET V%(J%)=V1%(J%) 1000 NEXT J% 1010 REM F|rsta f|rslaget v{ljs godtyckligt : 1020 FOR I%=1 TO N% 1030 LET R%(I%)=FIX(18*RND) 1040 LET V%(R%(I%))=V%(R%(I%))-1 1050 IF V%(R%(I%))<0 THEN GOTO 1030 : REM Slut p} denna sort. 1060 NEXT I% 1070 LET P%=0 1080 REM Po{ngber{kning : 1090 FOR I%=1 TO N%-1 1100 LET P%=P%+B%(R%(I%),R%(I%+1)) 1110 NEXT I% 1120 FOR I%=2 TO N% 1130 LET P%=P%+B%(R%(I%),R%(I%-1)) 1140 NEXT I% 1150 Q%=INP(56) : REM Tillf{lligt stopp vid mellanslag. 1160 IF Q%=32 THEN GOSUB 1400 : REM Tryck p} tangent f|r forts{ttning. 1170 REM Byt tillbaka om nya po{ngen {r l{gre : 1180 IF P%>=P0% THEN GOTO 1240 1190 REM ]terbyte om f|rslaget {r d}ligt : 1200 LET D%=R%(C1%) 1210 LET R%(C1%)=R%(C2%) 1220 LET R%(C2%)=D% 1230 GOTO 1340 1240 LET P0%=P% 1250 PRINT CHR$(12) 1260 PRINT P0%;" po{ng" 1270 FOR I%=1 TO N% 1280 PRINT "Rad ";I%;A$(R%(I%)) 1290 NEXT I% 1300 PRINT CUR(2,23);'Tryck p}' 1310 PRINT CUR(3,23);'mellanslag f|r ' 1320 PRINT CUR(4,23);'tillf{lligt stopp' 1330 REM Prova med tv} rader v{xlade. 1340 LET C1%=FIX(N%*RND+1) : REM Slumpm{ssigt valt radnummer. 1350 LET C2%=FIX(N%*RND+1) : REM Slumpm{ssigt valt radnummer. 1360 LET D%=R%(C1%) 1370 LET R%(C1%)=R%(C2%) 1380 LET R%(C2%)=D% 1390 GOTO 1070 1400 REM V{ntrutin 1410 PRINT CUR(3,23);'] f|r }terstart. ' 1420 PRINT CUR(4,23);'P ger utskrift. ' 1430 PRINT CUR(5,23); 1440 GET Q$ 1450 IF Q$='p' OR Q$='P' THEN GOSUB 1500 1460 RETURN 1470 REM Felrutin 1480 IF ERRCODE=12 THEN GOTO 950 1490 GOTO 10 1500 REM Printerutskrift 1510 OPEN 'PR:' ASFILE 10 1520 FOR I%=1 TO N% 1530 PRINT #10,'Rad ';I%;A$(R%(I%)) 1540 NEXT I% 1550 CLOSE 10 1560 RETURN