1 REM Ins{nd av Leopold Lundstr|m <2694> 1987-12-30 15.36.04 (DUMP) 10 REM +------------------------------- 11 REM ! Program .... SQRROOT 12 REM ! Utg}va 1.1 1986-09-06 13 REM ! av (c) L Lundstr|m <2694> 14 REM ! F|r ABC 80 15 REM ! Minne 16/32 Kbytes 16 REM +------------------------------- 17 REM ! Programmet efterliknar den 18 REM ! algoritm, som f|rr anv{ndes 19 REM ! i skolan f|r att manuellt 20 REM ! ber{kna kvadratr|tter. 21 REM +------------------------------- 97 REM 98 REM DIM / INMATNING 99 REM 100 IF PEEK(65053%)<>128% THEN N%=700% ELSE N%=2800% 110 N2%=N%/2% : DIM P%(N%),S%(N2%),T%(N%),T$=N%,U$=N2%+1%,[$=1%,S$=1%,S$(1%)=3%,A$=5% 120 R%=1% : A8%=1% : S%=78% : A$='' : S$='J' : S$(0)='Ja' : S$(1)='Nej' 130 ; INP(4%);CHR$(12%); 140 ; TAB(PEEK(590%)/2%-16%)'<<< BER[KNING AV KVADRATROT >>>' : ; 150 ; 'Tryck p} < mellanslag > och ber{kningen avbryts' 160 ; 'F|r att avsluta programmet ge "tal" S' 170 ; : ONERRORGOTO 170 : T$='' 180 ; 'Ge ett tal '; 190 GET [$ : E%=ASC([$) 200 IF E%=13% OR (E% AND 95%)=83% THEN GOTO 240 210 IF E%=8% AND N1%>0% THEN GOSUB 300 220 IF E%<46% OR E%>57% THEN GOTO 190 230 ; [$; : T$=T$+[$ : N1%=N1%+1% : GOTO 190 240 IF T$='' OR E%=83% THEN END 250 GOTO 1000 297 REM 298 REM KORRIGERA 299 REM 300 R9%=PEEK(65011%) : K9%=PEEK(65012%)-1% 310 IF K9%<0% THEN K9%=PEEK(590%) : R9%=R9%-1% 320 ; CUR(R9%,K9%);' ';CUR(R9%,K9%); 330 N1%=N1%-1% : T$=LEFT$(T$,N1%) 340 RETURN 997 REM 998 REM "NORMERING" 999 REM 1000 K%=INSTR(1%,T$,'.') : IF K% THEN IF K%=1% THEN T$='0'+T$ : GOTO 1000 ELSE GOTO 1030 1010 IF LEN(T$) AND 1% THEN T$='0'+T$ 1020 K%=LEN(T$) : GOTO 1060 1030 IF LEN(LEFT$(T$,K%-1%)) AND 1% THEN T$='0'+T$ : K%=K%+1% 1040 IF LEN(RIGHT$(T$,K%+1%)) AND 1%=1% THEN T$=T$+'0' 1050 T$=LEFT$(T$,K%-1%)+RIGHT$(T$,K%+1%) 1060 K1%=INT(K%/2%)+1% : K2%=INT(LEN(T$)/2%) : K3%=LEN(T$) 1070 FOR I%=1% TO K3% : T%(I%)=VAL(MID$(T$,I%,1%)) : NEXT I% 1080 FOR I%=1% TO K3% : IF T%(I%)=0% AND T%(I%+1%)=0% THEN A9%=A9%+1% : NEXT I% 1090 ; : ; 'Roten='; 1100 ONERRORGOTO 0 1997 REM 1998 REM F\RSTA FAKTOR 1999 REM 2000 F%=INT(SQR(T%(1%)*10%+T%(2%))) : S%(1%)=F% : GOTO 4000 2997 REM 2998 REM FAKTOR 2999 REM 3000 R%=R%+1% 3010 A%=INT(SQR(R%)+.5) : S=0% : T=0% 3020 IF A9%>R% A%=R% 3030 IF A%T%(I%) THEN T%(I%)=T%(I%)+10% : T%(I%-1%)=T%(I%-1%)-1% 5030 T%(I%)=T%(I%)-P%(I%) : IF T%(I%)<>0% B%=-1% 5040 NEXT I% 5050 IF R%>1% IF T%(R%-1%)<0% OR T%(R%-2%)<0% GOSUB 8000 : F%=F%-1% : S%(R%)=F% : GOTO 4000 5997 REM 5998 REM ADDERA 5999 REM 6000 M%=F% 6010 FOR I%=R% TO 0% STEP -1% 6020 S%(I%)=S%(I%)+M% 6030 M%=INT(S%(I%)/10%) 6040 S%(I%)=S%(I%)-10%*M% 6050 NEXT I% 6997 REM 6998 REM UTSKRIFT SK[RM 6999 REM 7000 IF F%<0% OR F%>9% THEN ; 'FATALT FEL' : STOP 7010 IF R%=K1% THEN U$=U$+'.' : D%=0% : ; '.'; 7020 U$=U$+RIGHT$(NUM$(F%),2%) : D%=D%+1% 7030 ; RIGHT$(NUM$(F%),2%); : C%=C%+1% : IF C%=N2% GOTO 7210 7040 IF (INP(56%) AND 127%)=32% THEN GOTO 7070 7050 IF (B%=0% AND R%>=K2%) OR (R%=N2%) THEN F9%=-1% : GOTO 7070 7060 GOTO 3000 7070 IF R%74% THEN ; CUR(21%,0%)SPACE$(35%);CUR(22%,0%)SPACE$(35%);CUR(R9%,K9%); : GOTO 7060 7197 REM 7198 REM UTSKRIFT PRINTER 7199 REM 7200 A$=' [ND]' : S$='N' : S%=74% : S9%=-1% 7210 ; : ; 'Utskrift p} printer'A$'? ('S$') '; : POKE 65013%,0% : GET [$ 7220 E%=ASC([$) AND 95% : IF E%=83% THEN END 7230 ON (S% AND 4%)/4%+1% GOTO 7240,7250 7240 ; S$((E%=S%)+1%); : IF E%=S% THEN GOTO 7260 ELSE GOTO 7480 : REM 'JA' 7250 ; S$((E%<>S%)+1%); : IF E%=S% THEN GOTO 7480 : REM 'NEJ' 7260 ; : P9%=1% 7270 IF INSTR(1%,U$,'.')=0% THEN D%=0% 7280 OPEN 'PR:' ASFILE P9% 7290 OUT 6%,211% : ; #P9%;CHR$(13%); : OUT 6%,0% 7300 ; #P9%;TAB(10%);'Roten ur '; : L%=59% : L1%=19% 7310 T$=LEFT$(T$,2%*K1%-2%)+'.'+RIGHT$(T$,2%*K1%-1%) 7320 IF ASC(T$)=48% AND ASC(RIGHT$(T$,2%))<>46% THEN T$=RIGHT$(T$,2%) : GOTO 7320 7330 IF ASC(RIGHT$(T$,LEN(T$)))=48% THEN T$=LEFT$(T$,LEN(T$)-1%) 7340 IF ASC(RIGHT$(T$,LEN(T$)))=46% THEN T$=LEFT$(T$,LEN(T$)-1%) : F9%=0% 7350 IF LEN(T$)>L% THEN W$=LEFT$(T$,L%) : T$=RIGHT$(T$,L%+1%) : L%=68% ELSE W$=T$ : T$='' 7360 ; #P9%;TAB(L1%);W$ : W$='' : L1%=10% 7370 IF LEN(T$)<>0% THEN GOTO 7350 7380 ; #P9% : ; #P9%;TAB(10%);'= '; : L%=66% : L1%=12% 7390 IF F9% IF ASC(RIGHT$(U$,LEN(U$)))=48% THEN U$=LEFT$(U$,LEN(U$)-1%) : D%=D%-1% 7400 IF ASC(U$)=48% AND ASC(RIGHT$(U$,2%))<>46% THEN U$=RIGHT$(U$,2%) : GOTO 7400 7410 IF LEN(U$)>L% THEN W$=LEFT$(U$,L%) : U$=RIGHT$(U$,L%+1%) : L%=68% ELSE W$=U$ : U$='' 7420 ; #P9%;TAB(L1%);W$ : W$='' : L1%=10% 7430 IF LEN(U$)<>0% THEN GOTO 7410 7440 IF D% THEN ; #P9% : ; #P9%;TAB(9%);D%;' decimaler ber{knade' 7450 IF S9% ; #P9%;TAB(10%);'Ber{kningen avbruten i f|rtid' 7460 ; #P9%;TAB(10%);STRING$(68%,95%) : ; #P9% 7470 CLOSE P9% 7480 Z%=CALL(3413%) 7997 REM 7998 REM ]TERST[LL 7999 REM 8000 FOR I%=2*R% TO R%-1% STEP -1% 8010 T%(I%)=T%(I%)+P%(I%) : IF T%(I%)>9% THEN T%(I%-1%)=T%(I%-1%)+1% : T%(I%)=T%(I%)-10% 8020 NEXT I% 8030 RETURN >