This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM D itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"C
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
D
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
F itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"C itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"D itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"E
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
B
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
B
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
B
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
BA
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
AEBAAFBA\CD\B2
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
BAF
Skip to content
Forecasting Graph
This is a quickload program. It is comprised of a short speed loader in normal ZX81/TS1000 format followed by the actual program in a format similar to the Spectrum and TS2068 tape format.
- FC-Grph.z81 is an EightyOne emulator snapshot of the running program.
- FC-Grph.wav has been edited to remove noise and provide more of a square wave signal.
- FC-Grph.b81 is an EightyOne emulator text listing.
Content
Source Code
10 REM \8D\40\1C\00\00\03\00\03\03\03\03\03\03\03\03\03\03\03\08\03\03\03\03\03\03\03\03\08\05\09\0D\0F\13\16\1C\16\16\14\17\18\1D\22\20\20\1E\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\21\86\40\00\00\2B\2B\00\00\2B\36\40\2B\36\89\3A\87\40\32\88\40\2A\82\40\5E\7B\32\85\40\3A\85\40\47\3A\84\40\4F\16\9B\7A\CD\B2\0B\3A\85\40\4F\0D\79\32\85\40\20\E7\21\84\40\56\14\72\3A\88\40\3D\32\88\40\20\D0\ED\5B\82\40\13\ED\53\82\40\3A\86\40\3D\32\86\40\20\B8\C9\1D\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C\1D\1E\1F\20\21\22\23\24\25\1C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
1010 FOR J=O1 TO OG
1020 LET P(J)=T(I,J)
1030 NEXT J
1099 RETURN
1110 LET SQ=O0
1120 LET SU=O0
1130 FOR J=O1 TO PER
1140 LET SU=SU+T(I,J)
1150 LET SQ=SQ+T(I,J)**O2
1160 NEXT J
1170 LET AV=SU/PER
1180 LET DEV=SQR (SQ/PER-AV**O2)
1199 RETURN
1600 PAUSE OB
1610 POKE OH,OI
1699 RETURN
2010 CLS
2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
2030 FOR K=O1 TO O6
2040 PRINT " ";K;". ";O$(K);,,,
2050 NEXT K
2060 PRINT ,,TAB O5;"ENTER OPTION."
2070 LET Z$=INKEY$
2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
2090 CLS
2100 GOTO VAL Z$*OU+OA
3020 GOSUB OB
3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
3060 INPUT I
3070 IF I>OD THEN GOTO 3060
3100 PRINT AT 18,OD;I
3130 IF T$(I)=M$ THEN GOTO 3200
3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
3150 GOSUB OE
3160 IF Z$="N" THEN GOTO OA
3200 CLS
3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
3220 INPUT Y$
3230 IF LEN Y$>19 THEN GOTO 3220
3280 PRINT AT O6,O2;Y$
3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
3330 INPUT X$
3340 IF LEN X$>O7 THEN GOTO 3330
3380 PRINT AT O9,O2;X$
3400 PRINT ,," ACCEPT ?"
3410 GOSUB OE
3420 IF Z$="N" THEN GOTO 3200
3430 LET T$(I)=Y$
3440 LET P$(I)=X$
3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
3455 FAST
3460 FOR J=O1 TO OG
3470 LET T(I,J)=O0
3480 NEXT J
3485 SLOW
3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
3500 PAUSE OB
3510 POKE OH,OI
3999 GOTO OA
4010 PRINT H$
4015 GOSUB OJ
4020 GOSUB OK
4030 SCROLL
4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
4050 INPUT Y
4060 IF Y>OG THEN GOTO 4050
4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
4110 INPUT STA
4120 IF STA<O1 OR STA>OG THEN GOTO 4110
4200 FOR J=STA TO STA+Y-1
4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
4220 INPUT X
4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
4240 PRINT AT OT,OL;X
4260 PRINT AT OT,18;"ACCEPT ?"
4270 GOSUB OE
4280 IF Z$="N" THEN GOTO 4210
4290 LET T(I,J)=X
4300 LET Y$=" "
4310 LET Z$=STR$ T(I,J)
4320 LET L=LEN Z$
4330 LET Y$(O8-L TO )=Z$
4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
4350 NEXT J
4500 CLS
4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
4520 GOSUB OE
4530 IF Z$="N" THEN GOTO OA
4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
4550 INPUT Y
4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
4570 PRINT AT O9,O0;Y
4590 INPUT X$
4600 IF LEN X$>15 THEN GOTO 4590
4620 PRINT AT O9,O5;X$
4640 PRINT ,,"ACCEPT ?"
4650 GOSUB OE
4660 IF Z$="N" THEN GOTO 4500
4670 LET Q(I)=Y
4680 LET Q$(I)=X$
4999 GOTO OA
5005 CLS
5010 PRINT H$,,TAB OW;"OPTIONS",
5020 FOR K=O7 TO 15
5030 PRINT " ";K-O6;". ";O$(K)
5040 NEXT K
5050 PRINT ,,"ENTER OPTION"
5060 INPUT Z
5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
5092 LET O=Z+6
5095 GOTO Z*OE+OM
5100 GOSUB OJ
5102 IF I>OD THEN GOTO 5100
5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
5106 INPUT PER
5108 IF PER>30 THEN GOTO 5106
5110 PRINT AT O3,O8;PER
5120 FAST
5126 GOSUB ON
5128 FOR J=PER TO OG
5130 FOR K=O1 TO PER
5132 LET P(J)=P(J)+T(I,J-K+O1)
5134 NEXT K
5136 NEXT J
5138 SLOW
5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
5150 GOSUB OX
5199 GOTO OM
5200 GOSUB OP
5204 GOSUB ON
5205 FAST
5206 FOR J=O1 TO OG
5207 IF T(I,J)=O0 THEN LET P(J)=999999
5208 IF T(I,J)=O0 THEN GOTO 5210
5209 LET P(J)=T(A,J)*OE/T(I,J)
5210 NEXT J
5212 SLOW
5214 PRINT "PERCENTAGES";A$
5216 GOSUB OX
5299 GOTO OM
5300 GOSUB OJ
5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
5304 INPUT LAG
5310 PRINT AT O5,27;LAG
5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
5317 FAST
5318 GOSUB ON
5320 FOR J=O1+LAG TO OG
5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
5322 IF NOT T(I,J-LAG) THEN GOTO 5324
5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
5324 NEXT J
5325 SLOW
5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
5328 GOSUB OX
5399 GOTO OM
5400 GOSUB OJ
5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
5404 INPUT Y
5406 IF Y>=OG THEN GOTO 5404
5410 PRINT AT O5,26;Y
5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
5418 LET Z$=INKEY$
5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
5422 IF Z$="<" THEN LET Y=Y*-O1
5424 PRINT AT O8,18;Z$
5426 PRINT ,,"ACCEPT ?"
5428 GOSUB OE
5430 IF Z$="N" THEN GOTO 5400
5431 FAST
5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
5434 LET T(I,J)=T(I,J-Y)
5436 NEXT J
5437 SLOW
5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
5440 GOSUB OX
5499 GOTO OM
5500 GOSUB OP
5502 IF A>OD OR I>OD THEN GOTO 5500
5504 FAST
5506 LET B=I
5508 LET I=A
5509 LET PER=OG
5510 GOSUB OR
5512 LET AA=AV
5514 LET SA=DEV
5516 LET I=B
5518 GOSUB OR
5520 LET AB=AV
5522 LET SB=DEV
5524 LET Z=O0
5526 FOR J=O1 TO OG
5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
5530 NEXT J
5532 LET Z=Z/OG
5533 SLOW
5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
5538 PRINT K$
5540 IF INKEY$="" THEN GOTO 5540
5599 GOTO OM
5600 GOSUB OJ
5602 GOSUB OK
5603 SCROLL
5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
5606 LET Z$=INKEY$
5608 IF Z$="" THEN GOTO 5606
5610 IF Z$="C" THEN COPY
5699 GOTO OM
5700 GOSUB OJ
5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
5704 INPUT Y
5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
5708 FAST
5710 IF Y=O2 THEN GOTO 5716
5712 GOSUB OU
5714 GOTO 5722
5716 FOR J=O1 TO OG
5718 LET T(I,J)=P(J)
5720 NEXT J
5722 PRINT ,,"SERIES COPIED"
5723 SLOW
5724 GOSUB OX
5799 GOTO OM
5800 GOSUB OJ
5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
5804 INPUT PER
5806 IF PER>OG THEN GOTO 5804
5808 PRINT ,PER
5814 FAST
5816 GOSUB OR
5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
5820 SLOW
5828 PRINT K$
5830 IF INKEY$="" THEN GOTO 5830
5899 GOTO OM
5900 GOTO OA
6100 CLS
6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
6120 INPUT STA
6155 PRINT STA
6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
6180 PRINT ,,"NUMBER OF PERIODS ? ";
6190 INPUT PER
6230 PRINT PER
6250 IF STA+PER-O1>OG THEN GOTO 6100
6260 LET Y=P(STA)
6270 LET Z=P(STA)
6280 FOR K=STA TO STA+PER-O1
6290 IF P(K)<Y THEN LET Y=P(K)
6300 IF P(K)>Z THEN LET Z=P(K)
6310 NEXT K
6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
6330 INPUT X
6340 PRINT X
6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
6360 INPUT W
6370 PRINT W
6390 IF X>Y OR W<Z THEN GOTO 6100
6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
6410 GOSUB OE
6420 IF Z$="N" THEN GOTO 6000
6430 CLS
6435 FAST
6440 LET F=(W-X)/36
6450 FOR K=STA TO STA+PER-O1
6460 LET Z=INT ((P(K)-X)/F)
6470 IF Z<O1 THEN LET Z=O1
6480 POKE (16521+K-STA),Z+O2
6490 NEXT K
6500 POKE 16518,PER
6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
6507 POKE 16516,Y
6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
6520 POKE 16519,Z
6525 SLOW
6530 RAND USR 16581
6540 LET X=INT (Y/O2)
6550 IF X<3 THEN GOTO 6630
6560 FOR K=18 TO O0 STEP -O2
6565 LET X$=M$( TO X-O1)
6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
6571 IF LEN Z$>=X THEN GOTO 6574
6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
6573 GOTO 6575
6574 LET X$=Z$( TO X-O1)
6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
6580 PRINT AT K+O3,X-O1;"\@@"
6590 NEXT K
6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
6640 INPUT Z$
6650 LET L=INT ((LEN Z$)/O2)
6660 PRINT AT O0,O0;" "
6670 PRINT AT O0,16-L;Z$
6672 INPUT Z$
6674 PRINT AT OT,O0;Z$
6760 LET Z$=INKEY$
6770 IF Z$="C" THEN COPY
6790 IF CODE Z$<>OV THEN GOTO 6760
6800 GOTO OA
7010 GOSUB OJ
7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
7030 INPUT W
7040 IF W>30 THEN GOTO 7030
7060 PRINT AT O6,O8;W
7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
7100 INPUT PER
7130 PRINT AT O9,OL;PER
7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
7170 INPUT X
7200 PRINT AT OW,OL;X
7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
7240 PRINT "PARAMETERS DO NOT FIT"
7250 GOSUB OX
7265 GOTO 7000
7270 FAST
7280 GOSUB ON
7300 LET FZ=O0
7310 LET FX=O0
7320 FOR K=O1 TO W
7330 LET FZ=FZ+K**O2
7340 LET FX=FX+K
7350 NEXT K
7355 LET Z=I
7360 FOR J=O1 TO W
7370 LET MA=O0
7380 FOR K=O1 TO W
7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
7400 NEXT K
7410 LET P(X-W+J-O1)=MA
7420 NEXT J
7430 FOR I=1 TO PER
7440 LET SY=O0
7450 LET SX=O0
7460 FOR K=O1 TO W
7470 LET SY=SY+P(X+I-W+K-O2)
7480 LET SX=SX+P(X+I-W+K-O2)*K
7490 NEXT K
7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
7510 LET IN=(SY-SL*FX)/W
7520 LET MA=SL*(W+I)+IN
7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
7555 LET SOS=V1+V2+V3
7560 LET MB=MA+SOS
7570 LET P(X+I-O1)=MB
7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
7590 NEXT I
7595 SLOW
7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
7610 PAUSE OB
7620 POKE OH,OI
7630 GOTO OA
8000 PRINT H$,,"SAVE REQUIRED ?"
8010 GOSUB OE
8020 IF Z$="N" THEN GOTO 9999
8030 PRINT "ENTER NAME"
8040 INPUT Z$
8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
8060 IF INKEY$="" THEN GOTO 8060
8070 SAVE Z$
8075 SLOW
8080 GOTO OA
9999 STOP
People
No people associated with this content.
D\E7AD\D0\EDB\EDAD\B8\C9 itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"D itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"F itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"C itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"D itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"E itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"F itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"C itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"D itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"E itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"F itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular computer_media-template-default single single-computer_media postid-58376 wp-custom-logo wp-theme-astra wp-child-theme-astra-child ast-desktop ast-separate-container ast-left-sidebar astra-4.11.0 group-blog ast-blog-single-style-1 ast-custom-post-type ast-single-post ast-inherit-site-logo-transparent ast-hfb-header ast-full-width-primary-header ast-box-layout ast-normal-title-enabled astra-addon-4.11.0"C
15 REM SZX-TSA V2820605
20 GOTO OA
110 LET Z$=INKEY$
120 IF Z$="" OR Z$<>"Y" AND Z$<>"N" THEN GOTO 110
199 RETURN
203 FAST
205 PRINT H$;TAB O8;"%D%E%S%C%R%I%P%T%I%O%N %P%E%R%I%O%D"
210 FOR K=O1 TO OD
220 PRINT TAB O1;K;".";TAB O4;T$(K);" ";P$(K)
230 NEXT K
240 SLOW
299 RETURN
300 FAST
307 PRINT AT O1,O0;I;" ";T$(K);" ";P$(K)
310 FOR J=O1 TO OC
315 FOR L=O0 TO 40 STEP OC
320 LET Z$=" "
325 LET Y$=STR$ T(I,J+L)
330 IF LEN Y$>=O7 THEN GOTO 345
335 LET Z$(O7-LEN Y$ TO O7)=Y$
340 GOTO 350
345 LET Z$=Y$( TO O7)
350 PRINT J+L;
355 IF J+L<10 THEN PRINT " ";
360 PRINT "\##";Z$;
365 IF L<30 THEN PRINT "% ";
370 NEXT L
375 NEXT J
380 SLOW
399 RETURN
410 FOR K=O1 TO OG
420 LET P(K)=O0
430 NEXT K
499 RETURN
510 LET Z$=INKEY$
520 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 THEN GOTO 510
530 LET Y$=Y$+Z$
599 RETURN
610 LET Z$=INKEY$
620 IF Z$="" OR CODE Z$<28 AND Z$<>"." OR CODE Z$>37 AND CODE Z$<>114 AND CODE Z$<>118 THEN GOTO 610
630 IF CODE Z$=114 THEN GOTO 2000
640 IF CODE Z$=118 THEN GOTO 690
650 LET Y$=Y$+Z$
660 RETURN
690 LET L=O7
699 RETURN
705 CLS
720 GOSUB OB
730 PRINT ,,"WHICH TIME SERIES DO YOU WISH TO USE ? \##\##"
740 INPUT Y
750 IF Y>OD THEN GOTO 740
760 PRINT AT OC,O8;Y
770 LET I=Y
780 LET K=Y
790 PRINT "ACCEPT ?"
800 GOSUB OE
810 IF Z$="N" THEN GOTO 700
820 CLS
899 RETURN
910 CLS
920 PRINT H$,,O$(O),,,"ENTER NO. OF SERIES %A"
930 INPUT A
940 IF A>OD THEN GOTO 930
945 PRINT AT O5,OF;A
950 PRINT ,,"ENTER NO. OF SERIES %B"
960 INPUT I
970 IF I>OD THEN GOTO 960
980 PRINT AT O7,OF;I
999 RETURN
\n1010 FOR J=O1 TO OG
\n1020 LET P(J)=T(I,J)
\n1030 NEXT J
\n1099 RETURN
\n1110 LET SQ=O0
\n1120 LET SU=O0
\n1130 FOR J=O1 TO PER
\n1140 LET SU=SU+T(I,J)
\n1150 LET SQ=SQ+T(I,J)**O2
\n1160 NEXT J
\n1170 LET AV=SU/PER
\n1180 LET DEV=SQR (SQ/PER-AV**O2)
\n1199 RETURN
\n1600 PAUSE OB
\n1610 POKE OH,OI
\n1699 RETURN
\n2010 CLS
\n2020 PRINT H$,,TAB OW;"%O%P%T%I%O%N%S"," "
\n2030 FOR K=O1 TO O6
\n2040 PRINT " ";K;". ";O$(K);,,,
\n2050 NEXT K
\n2060 PRINT ,,TAB O5;"ENTER OPTION."
\n2070 LET Z$=INKEY$
\n2080 IF Z$="" OR CODE Z$<29 OR CODE Z$>34 THEN GOTO 2070
\n2090 CLS
\n2100 GOTO VAL Z$*OU+OA
\n3020 GOSUB OB
\n3050 PRINT ,,"ENTER NO. OF SERIES TO BE SET UP"
\n3060 INPUT I
\n3070 IF I>OD THEN GOTO 3060
\n3100 PRINT AT 18,OD;I
\n3130 IF T$(I)=M$ THEN GOTO 3200
\n3140 PRINT "TIME SERIES ";I;" IN USE - PROCEED ?"
\n3150 GOSUB OE
\n3160 IF Z$="N" THEN GOTO OA
\n3200 CLS
\n3210 PRINT H$,," TIME SERIES NUMBER ";I,,," TIME SERIES NAME (MAX 19 CHR$ )",,," ";M$
\n3220 INPUT Y$
\n3230 IF LEN Y$>19 THEN GOTO 3220
\n3280 PRINT AT O6,O2;Y$
\n3310 PRINT ,," PERIOD DEFINITION (MAX 7 CHR$ )"
\n3330 INPUT X$
\n3340 IF LEN X$>O7 THEN GOTO 3330
\n3380 PRINT AT O9,O2;X$
\n3400 PRINT ,," ACCEPT ?"
\n3410 GOSUB OE
\n3420 IF Z$="N" THEN GOTO 3200
\n3430 LET T$(I)=Y$
\n3440 LET P$(I)=X$
\n3450 LET Q$(I)="\##\##\##\##\##\##\##\##\##\##"
\n3455 FAST
\n3460 FOR J=O1 TO OG
\n3470 LET T(I,J)=O0
\n3480 NEXT J
\n3485 SLOW
\n3490 PRINT ,,,," SERIES NOW SET UP WITH 60 BLANK PERIODS"
\n3500 PAUSE OB
\n3510 POKE OH,OI
\n3999 GOTO OA
\n4010 PRINT H$
\n4015 GOSUB OJ
\n4020 GOSUB OK
\n4030 SCROLL
\n4040 PRINT "NO. OF PERIODS DATA TO ENTER? \@@\@@"
\n4050 INPUT Y
\n4060 IF Y>OG THEN GOTO 4050
\n4100 PRINT AT OT,O0;Y;" PERIODS STARTING PERIOD ? \@@\@@"
\n4110 INPUT STA
\n4120 IF STA<O1 OR STA>OG THEN GOTO 4110
\n4200 FOR J=STA TO STA+Y-1
\n4210 PRINT AT OT,O0;"PERIOD ";J;" \##\##\##\##\##\##\##";M$( TO 15)
\n4220 INPUT X
\n4230 IF LEN (STR$ X)>O7 THEN GOTO 4220
\n4240 PRINT AT OT,OL;X
\n4260 PRINT AT OT,18;"ACCEPT ?"
\n4270 GOSUB OE
\n4280 IF Z$="N" THEN GOTO 4210
\n4290 LET T(I,J)=X
\n4300 LET Y$=" "
\n4310 LET Z$=STR$ T(I,J)
\n4320 LET L=LEN Z$
\n4330 LET Y$(O8-L TO )=Z$
\n4340 PRINT AT J-OC*(J>OC)-OC*(J>40),O2+11*(J>OC)+11*(J>40);Y$
\n4350 NEXT J
\n4500 CLS
\n4510 PRINT H$,,"PERIOD ";Q(I);" CURRENTLY IDENTIFIED AS ";Q$(I),"CHANGE THIS ? \@@"
\n4520 GOSUB OE
\n4530 IF Z$="N" THEN GOTO OA
\n4540 PRINT ;,,"ENTER NEW PERIOD AND IDENTIFY",,,"\@@\@@ \@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@\@@"
\n4550 INPUT Y
\n4560 IF LEN (STR$ Y)>O2 THEN GOTO 4550
\n4570 PRINT AT O9,O0;Y
\n4590 INPUT X$
\n4600 IF LEN X$>15 THEN GOTO 4590
\n4620 PRINT AT O9,O5;X$
\n4640 PRINT ,,"ACCEPT ?"
\n4650 GOSUB OE
\n4660 IF Z$="N" THEN GOTO 4500
\n4670 LET Q(I)=Y
\n4680 LET Q$(I)=X$
\n4999 GOTO OA
\n5005 CLS
\n5010 PRINT H$,,TAB OW;"OPTIONS",
\n5020 FOR K=O7 TO 15
\n5030 PRINT " ";K-O6;". ";O$(K)
\n5040 NEXT K
\n5050 PRINT ,,"ENTER OPTION"
\n5060 INPUT Z
\n5070 IF Z<O1 OR Z>O9 THEN GOTO 5060
\n5092 LET O=Z+6
\n5095 GOTO Z*OE+OM
\n5100 GOSUB OJ
\n5102 IF I>OD THEN GOTO 5100
\n5104 PRINT TAB O5;O$(O7),,,"HOW MANY PERIODS IN MOVING AVERAGE ? \@@\@@"
\n5106 INPUT PER
\n5108 IF PER>30 THEN GOTO 5106
\n5110 PRINT AT O3,O8;PER
\n5120 FAST
\n5126 GOSUB ON
\n5128 FOR J=PER TO OG
\n5130 FOR K=O1 TO PER
\n5132 LET P(J)=P(J)+T(I,J-K+O1)
\n5134 NEXT K
\n5136 NEXT J
\n5138 SLOW
\n5140 PRINT ,,"MOVING AVERAGE OF SERIES ";I;A$
\n5150 GOSUB OX
\n5199 GOTO OM
\n5200 GOSUB OP
\n5204 GOSUB ON
\n5205 FAST
\n5206 FOR J=O1 TO OG
\n5207 IF T(I,J)=O0 THEN LET P(J)=999999
\n5208 IF T(I,J)=O0 THEN GOTO 5210
\n5209 LET P(J)=T(A,J)*OE/T(I,J)
\n5210 NEXT J
\n5212 SLOW
\n5214 PRINT "PERCENTAGES";A$
\n5216 GOSUB OX
\n5299 GOTO OM
\n5300 GOSUB OJ
\n5302 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS LAG \@@\@@"
\n5304 INPUT LAG
\n5310 PRINT AT O5,27;LAG
\n5316 IF LAG<O1 OR LAG>58 THEN GOTO 5300
\n5317 FAST
\n5318 GOSUB ON
\n5320 FOR J=O1+LAG TO OG
\n5321 IF NOT T(I,J-LAG) THEN LET P(J)=999999
\n5322 IF NOT T(I,J-LAG) THEN GOTO 5324
\n5323 LET P(J)=T(I,J)*OE/T(I,J-LAG)-OE
\n5324 NEXT J
\n5325 SLOW
\n5326 PRINT ,,"GROWTH RATES COMPUTED AND";A$
\n5328 GOSUB OX
\n5399 GOTO OM
\n5400 GOSUB OJ
\n5402 PRINT H$,,O$(O),,,"ENTER NO.OF PERIODS SHIFT \@@\@@"
\n5404 INPUT Y
\n5406 IF Y>=OG THEN GOTO 5404
\n5410 PRINT AT O5,26;Y
\n5416 PRINT ,,"DIRECTION OF SHIFT?",,"LEFT%< OR RIGHT %> \@@"
\n5418 LET Z$=INKEY$
\n5420 IF Z$<>"<" AND Z$<>">" THEN GOTO 5418
\n5422 IF Z$="<" THEN LET Y=Y*-O1
\n5424 PRINT AT O8,18;Z$
\n5426 PRINT ,,"ACCEPT ?"
\n5428 GOSUB OE
\n5430 IF Z$="N" THEN GOTO 5400
\n5431 FAST
\n5432 FOR J=O0+O1*(Y<O0)+OG*(Y>O0) TO (O1*(Y>O0)+Y*(Y>O0))+(OG+Y)*(Y<O0) STEP -O1*(SGN Y)
\n5434 LET T(I,J)=T(I,J-Y)
\n5436 NEXT J
\n5437 SLOW
\n5438 PRINT ,,"SERIES NO. ";I;" SHIFTED ";Y;" PERIODS"
\n5440 GOSUB OX
\n5499 GOTO OM
\n5500 GOSUB OP
\n5502 IF A>OD OR I>OD THEN GOTO 5500
\n5504 FAST
\n5506 LET B=I
\n5508 LET I=A
\n5509 LET PER=OG
\n5510 GOSUB OR
\n5512 LET AA=AV
\n5514 LET SA=DEV
\n5516 LET I=B
\n5518 GOSUB OR
\n5520 LET AB=AV
\n5522 LET SB=DEV
\n5524 LET Z=O0
\n5526 FOR J=O1 TO OG
\n5528 LET Z=Z+((T(A,J)-AA)/SA)*((T(B,J)-AB)/SB)
\n5530 NEXT J
\n5532 LET Z=Z/OG
\n5533 SLOW
\n5534 PRINT ,,"CORRELATION COEFFICIENT IS ";Z
\n5538 PRINT K$
\n5540 IF INKEY$="" THEN GOTO 5540
\n5599 GOTO OM
\n5600 GOSUB OJ
\n5602 GOSUB OK
\n5603 SCROLL
\n5604 PRINT "PRESS %C TO COPY-ANY TO RETURN"
\n5606 LET Z$=INKEY$
\n5608 IF Z$="" THEN GOTO 5606
\n5610 IF Z$="C" THEN COPY
\n5699 GOTO OM
\n5700 GOSUB OJ
\n5702 PRINT H$,,O$(O),,,"ENTER %1 TO COPY TO OR %2 TO COPY FROM THE UTILITY SERIES"
\n5704 INPUT Y
\n5706 IF Y<O1 OR Y>O2 THEN GOTO 5704
\n5708 FAST
\n5710 IF Y=O2 THEN GOTO 5716
\n5712 GOSUB OU
\n5714 GOTO 5722
\n5716 FOR J=O1 TO OG
\n5718 LET T(I,J)=P(J)
\n5720 NEXT J
\n5722 PRINT ,,"SERIES COPIED"
\n5723 SLOW
\n5724 GOSUB OX
\n5799 GOTO OM
\n5800 GOSUB OJ
\n5802 PRINT H$,,O$(O),"ENTER NUMBER OF RELEVANT PERIODS"
\n5804 INPUT PER
\n5806 IF PER>OG THEN GOTO 5804
\n5808 PRINT ,PER
\n5814 FAST
\n5816 GOSUB OR
\n5818 PRINT ,,"STANDARD DEVIATION IS ";DEV,"MEAN IS ";AV
\n5820 SLOW
\n5828 PRINT K$
\n5830 IF INKEY$="" THEN GOTO 5830
\n5899 GOTO OM
\n5900 GOTO OA
\n6100 CLS
\n6110 PRINT H$,," %G%R%A%P%H% %P%L%O%T",,,"NUMBER OF START PERIOD ? ";
\n6120 INPUT STA
\n6155 PRINT STA
\n6170 IF STA<O1 OR STA>=OG THEN GOTO 6100
\n6180 PRINT ,,"NUMBER OF PERIODS ? ";
\n6190 INPUT PER
\n6230 PRINT PER
\n6250 IF STA+PER-O1>OG THEN GOTO 6100
\n6260 LET Y=P(STA)
\n6270 LET Z=P(STA)
\n6280 FOR K=STA TO STA+PER-O1
\n6290 IF P(K)<Y THEN LET Y=P(K)
\n6300 IF P(K)>Z THEN LET Z=P(K)
\n6310 NEXT K
\n6320 PRINT ,,"MAXIMUM VALUE IN RANGE IS ";Z,"MINIMUM VALUE IN RANGE IS ";Y,"RANGE IS ";Z-Y,,"ENTER BASE VALUE FOR PIXEL 0 ";
\n6330 INPUT X
\n6340 PRINT X
\n6350 PRINT "ENTER TOP VALUE FOR PIXEL 36 ";
\n6360 INPUT W
\n6370 PRINT W
\n6390 IF X>Y OR W<Z THEN GOTO 6100
\n6400 PRINT "%B%A%S%E% %V%A%L%U%E% %I%S ";X,"%M%I%N%I%M%U%M% %V%A%L%U%E% %I%S ";Y,"%M%A%X%I%M%U%M% %V%A%L%U%E% %I%S ";Z,"%T%O%P% %O%F% %G%R%A%P%H% %I%S ";W,"ACCEPT ?"
\n6410 GOSUB OE
\n6420 IF Z$="N" THEN GOTO 6000
\n6430 CLS
\n6435 FAST
\n6440 LET F=(W-X)/36
\n6450 FOR K=STA TO STA+PER-O1
\n6460 LET Z=INT ((P(K)-X)/F)
\n6470 IF Z<O1 THEN LET Z=O1
\n6480 POKE (16521+K-STA),Z+O2
\n6490 NEXT K
\n6500 POKE 16518,PER
\n6505 LET Y=O4+12*(PER<OS)+INT (.5*(OG-PER)*(PER<OG AND PER>25))
\n6507 POKE 16516,Y
\n6510 LET Z=O1*(PER>24)+O2*(PER<OS)+O1*(PER<15)
\n6520 POKE 16519,Z
\n6525 SLOW
\n6530 RAND USR 16581
\n6540 LET X=INT (Y/O2)
\n6550 IF X<3 THEN GOTO 6630
\n6560 FOR K=18 TO O0 STEP -O2
\n6565 LET X$=M$( TO X-O1)
\n6570 LET Z$=STR$ (W-(F*((K*O2)-O1)))
\n6571 IF LEN Z$>=X THEN GOTO 6574
\n6572 LET X$((X-O1)-LEN Z$ TO X-O1)=Z$
\n6573 GOTO 6575
\n6574 LET X$=Z$( TO X-O1)
\n6575 PRINT AT K+O2,O0;X$;TAB X-O1;"\##"
\n6580 PRINT AT K+O3,X-O1;"\@@"
\n6590 NEXT K
\n6630 PRINT AT O0,O0;"%E%N%T%E%R% %T%I%T%L%E"
\n6640 INPUT Z$
\n6650 LET L=INT ((LEN Z$)/O2)
\n6660 PRINT AT O0,O0;" "
\n6670 PRINT AT O0,16-L;Z$
\n6672 INPUT Z$
\n6674 PRINT AT OT,O0;Z$
\n6760 LET Z$=INKEY$
\n6770 IF Z$="C" THEN COPY
\n6790 IF CODE Z$<>OV THEN GOTO 6760
\n6800 GOTO OA
\n7010 GOSUB OJ
\n7020 PRINT H$,," %F%O%R%E%C%A%S%T%I%N%G",,,"ENTER NO. OF PERIODS IN MOVING AVERAGE"
\n7030 INPUT W
\n7040 IF W>30 THEN GOTO 7030
\n7060 PRINT AT O6,O8;W
\n7090 PRINT ,,"ENTER NO. OF PERIODS TO BE FORECAST"
\n7100 INPUT PER
\n7130 PRINT AT O9,OL;PER
\n7160 PRINT ,,"ENTER NO. OF START PERIOD FOR FORECAST"
\n7170 INPUT X
\n7200 PRINT AT OW,OL;X
\n7230 IF X-W*O2>=O1 AND X+PER<=OG THEN GOTO 7270
\n7240 PRINT "PARAMETERS DO NOT FIT"
\n7250 GOSUB OX
\n7265 GOTO 7000
\n7270 FAST
\n7280 GOSUB ON
\n7300 LET FZ=O0
\n7310 LET FX=O0
\n7320 FOR K=O1 TO W
\n7330 LET FZ=FZ+K**O2
\n7340 LET FX=FX+K
\n7350 NEXT K
\n7355 LET Z=I
\n7360 FOR J=O1 TO W
\n7370 LET MA=O0
\n7380 FOR K=O1 TO W
\n7390 LET MA=MA+T(Z,J+X-O2*W+K-O1)
\n7400 NEXT K
\n7410 LET P(X-W+J-O1)=MA
\n7420 NEXT J
\n7430 FOR I=1 TO PER
\n7440 LET SY=O0
\n7450 LET SX=O0
\n7460 FOR K=O1 TO W
\n7470 LET SY=SY+P(X+I-W+K-O2)
\n7480 LET SX=SX+P(X+I-W+K-O2)*K
\n7490 NEXT K
\n7500 LET SL=(SY*FX/W-SX)/((FX**O2)/W-FZ)
\n7510 LET IN=(SY-SL*FX)/W
\n7520 LET MA=SL*(W+I)+IN
\n7530 LET V1=.5*(P(X+I-O2)-(SL*(W+I-O1)+IN))
\n7540 LET V2=.25*(P(X+I-O3)-(SL*(W+I-O2)+IN))
\n7550 LET V3=.25*(P(X+I-O4)-(SL*(W+I-O3)+IN))
\n7555 LET SOS=V1+V2+V3
\n7560 LET MB=MA+SOS
\n7570 LET P(X+I-O1)=MB
\n7580 LET T(Z,X+I-O1)=T(Z,X+I-O1-W)+(P(X+I-O1)-P(X+I-O2))
\n7590 NEXT I
\n7595 SLOW
\n7600 PRINT "FORECAST IS NOW IN SERIES ";Z,"AND MOVING AVERAGE OF FORECAST","IS IN UTILITY ARRAY"
\n7610 PAUSE OB
\n7620 POKE OH,OI
\n7630 GOTO OA
\n8000 PRINT H$,,"SAVE REQUIRED ?"
\n8010 GOSUB OE
\n8020 IF Z$="N" THEN GOTO 9999
\n8030 PRINT "ENTER NAME"
\n8040 INPUT Z$
\n8050 PRINT "%S%T%A%R%T% %T%A%P%E% %T%H%E%N% %P%R%E%S%S% %A%N%Y% %K%E%Y"
\n8060 IF INKEY$="" THEN GOTO 8060
\n8070 SAVE Z$
\n8075 SLOW
\n8080 GOTO OA
\n9999 STOP