' +JJJJ ?\>m0M='+l> /+l   d']6@5L&]655]6LF%5 & "L}"BB5L&]6 X  `6 77777777777JJJJx 77L? L7877777777 776i 7 7867 7`77 777777`x =(`(8`5775I7`B` 76`77`>J><;VU<)?<`8'x0|<&HhHh 8 8 8 8V&` aI꽌ɪVɭ&Y:&<&Y:&;: 꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`+*xS&x'8*3Ixix&& 8 9: :' 9: :& :x)*++`FG8`0($ p,&"ųųೳŪŪųųij  !"#$%&'()*+,-./0123456789:;<=>?8  1 '" *"( (9"1 ( ,.(0# 2  /#0/#0 *?'#07#000'#07#0:"4<*55**5*%5)1)1)1)'#0/#0*5*75**5*:5/#0/#0'#07#0:::*::'#07#0"):$(%"%:$(%"%$$2%4%$$2%4%$(2()!)E(!8b $!H(+ "@H !D)"E` @ $ C ` DQ &J80^݌Hh < <݌ < < h < < < <`HJ>݌h Hh݌`葠葠ȔЖȔЖȠHIHHHHhHH݌hHhHh݌H6 (G FG HZXj 80x D9$xxH` >( Z>h Z>L=.xxH >hh@(LH>9L>HH/Hh/ H?-З( 8(& 8$8 H` *8HNx`* >x$50x*$50xL9JJJJ`HHjf5 >h $50x`HA>VD;;P >(ED Z> ?$0x8x D9- 8DD# H8`?E Vˆʎ55L $ 5 55555 &a*5`*5` "L&5_*b*JL%u**Lz%`** $  Q(lXJ̥KlV $  Q(lV eօ3L e3L &%R*L &%Q*L d' "L4% N'e*)n*5 5 &`@-e*f*f* 5 "L# "5f*`L %.* *t*Q*L$ %L&*L` "O**P**u** d' "L% N'e*)n*o*o*n* &8ɍ` ^&f\*555L& ^&NR* & "R*ΩL&)\*Z* ʽ LH*v 3h`0h8` " ['L & N'С55 &5`*A*@` +5L^6L65`  \* ?*0 '\* '  Q( ^&\*lZl^?*c*q)H c*h`f*5h*5j*555@O*AP*`u*@`@5&`Q*R*`E 'Ls' ' ' @DAE@u*`8` %@ @A@`@`**@*A`M5 ) "L&`8@AW*c*@8@-@HAȑ@hHȑ@ȑ@hHȑ@Ȋ@c*h8&ȑ@Hȑ@Ah@L'Hȑ@ȑ@* htphso`hMhL`9V*8U*897T*6S*67`INILOASAVRUCHAIDELETLOCUNLOCCLOSREAEXEWRITPOSITIOOPEAPPENRENAMCATALOMONOMOPRINMAXFILEFINBSAVBLOABRUVERIF!pppp p p p p`" t""#x"p0p@p@@@p@!y q q p@  LANGUAGE NOT AVAILABLRANGE ERROWRITE PROTECTEEND OF DATFILE NOT FOUNVOLUME MISMATCI/O ERRODISK FULFILE LOCKESYNTAX ERRONO BUFFERS AVAILABLFILE TYPE MISMATCPROGRAM TOO LARGNOT DIRECT COMMANč$3>L[dmx- (   ՠ734@~3!+,W,o,*--,,9,-.-~3~3,,,,~3~3,,,,~3_*3 j.5 *H*H`Lc3 (+L3 +55555 1^3_* )3J Q*L_3Ls3443 D23455545554 70 / 7 :/354545455454555535L^/5-5I5555 55` / 4/ 2-5! / 08555454 70L3 (+50+5B5C3 2 70L35 *H*H`Lg3L{3505 *H*H` 3 ,5L3 3 1 ,H 1hBL, 0 BH [1 1h`Lo3 35 ,L3 3 1B , 1L,H 0hB@ 55 [1L133 (+34) 34 70L3 3L3 (+ 055L- (+34L{33454445 70 ^/* / 3B0 HȱBh -355 -8 /L38 25` +5 /3 /. /. 3 E7D B. /. /. 0]34S0J4 4) 3 4D4E B. 4  /. 02L3 Ν3 3`HD٤33DEEhiHLG.h ` /5B5-` /5B-` + X05I33383 33DH /4 E03744Ȍ7 X040 7 J7L35B5C`,5p` / R0-55`50` K/ R0-55`575755` 4/ K/ /( 55L/BȱBL/58` D2BH5BH :/ 75Bȭ5Bhh55 R0B5m55ȱB5m55` /LR0557755`*7*75LR0 E0(33 48`433 R0` E033LR0*7*7`777 555I7575757577** 7757`7 L35555f /55555555 ^/`855 i /B58` 41L 15ȱB5 /5555 /5`3 D23ȑB55B5 / 7 55`5555555555 5555`555`55BC55`5555`L3 /5B5C355 0Q340"B4 3` 02۰Ϭ33B438`3i#`3ЗLw35!50>5555`53 /3m3 3 3733i35 3583 /35ЉLw35`H /5h 25L/~43 533`55555555J5m55m5jn5n5n5ۭ55m5555m55m55`"L? 585H ~.(3` # d ֠z# u*` L":" 380 NEXT I":" 390 RETURN"::21700:"LINE 360. IF I = 2 THEN IT'S FEBRUARY."::" WE PREVIOUSLY SET L = 0 NORMALLY, AND"\'"L = 1 FOR LEAP YEARS.":21000::"THUS, WE FORCE N TO 28 OR 29 AS NEEDED.":21100:"LINE 380. THE 'NEXT I' ENDS THGET THE ALTERNATING 30/31 PATTERN.":21100:" < >"::" (I>7) ACCOUNTS FOR THE LACK OF A 30":"DAY MONTH BETWEEN JULY AND AUGUST."::" IN LINE 352, N IS SET TO EITHER 30 OR"& "31, DEPENDING ON THE MONTH (I).":21100:" 360 IF I = 2 THEN N = 28 + 350 X = I + (I>7) : B = 2 : GOSUB 400";:" 352 N = 30 + R":21700:" < >"::"LOOK AT LINES 350 AND 352.":21000::" THE CURRENT MONTH (I) HAS EITHER 30 OR";:"31 DAYS (WE'LL GET TO FEBRUARY).":% " USING THE MODULAR ARITHMETIC OF 400,":"WE ATED NUMBER OF DAYS":"SINCE SUNDAY."# 21100:" < >"::"THE WEEKDAYS REPEAT IN A 7 DAY CYCLE."::" HERE IS ANOTHER APPLICATION OF MODULAR";:"ARITHMETIC.":21000::" 'GOSUB 400' KEEPS THE WEEKDAY NUMBER":"(D) IN THE RANGE 0 TO 6.":21100$4 "40 AND 342.":21100:" < >"::" IN LINE 340, X IS THE SUM OF THE"%# "WEEKDAY COUNTER (D) AND THE NUMBER OF":"DAYS (N) IN THE PREVIOUS MONTH.":21000::" FOR JANUARY THERE IS NO PRIOR MONTH,":"SO WE SET N TO 0 IN LINE 320."::" X IS THE ACCUMULLL COMPUTE THE NUMBER OF DAYS.":21000::" THIS ENABLES US TO FIGURE OUT WHICH":"DAY OF THE WEEK STARTS THE MONTH.":21100E"M " 340 X = D + N : B = 7 : GOSUB 400":" 342 D = R":21700:" < >":" 380 NEXT I":" 390 RETURN"::"LOOK AT LINES 3ROM":"JAN 1 TO THE FIRST OF MONTH M.":21100:" 330 FOR I = 1 TO M":21700:" < >":" 380 NEXT I":" 390 RETURN"::" LINE 330 BEGINS A LOOP WHERE I"}! "SIMULATES THE PASSING OF THE MONTHS."::" FOR EACH MONTH UP TO THE CURRENT ONE,":"IT WIAY, D COUNTS THE NUMBER OF"{ "WEEKDAYS AFTER SUNDAY.":21100:" < >"::" THE (Y + 3) / 4 ACCOUNTS FOR LEAP":"YEARS PRIOR TO THIS YEAR.":21000::" N IS SET TO 0 IN PREPARATION FOR THE":"NEXT PROCESS.": " N WILL COUNT THE NUMBER OF DAYS F21700:" < >":" 390 RETURN"::" REMEMBER - JAN 1, 1900 WAS A SUNDAY"< "AND EACH YEAR AFTER BEGINS A DAY LATER."::"LEAP YEARS ADVANCE AN EXTRA DAY.":21000::" LINE 320. D IS SET ACCORDING TO THE":"FIRST DAY OF THE YEAR Y."::" IN THIS W21000::" IF Y IS A LEAP YEAR, THE 'GOSUB 400'":"SETS R = 0, OTHERWISE R IS 1, 2, OR 3."::"L IS THEN SET TO 'NOT R'."L 21000::" L WILL EQUAL 1 FOR LEAP YEARS, AND":"EQUAL 0 FOR NORMAL YEARS.":21100:" 320 D = Y + INT((Y + 3) / 4) : N = 0":SULT) OF THE DIVISION":"IS NOT IMPORTANT IN THIS PROGRAM.":21000::" BY RETURNING ONLY THE REMAINDER,":"'GOSUB 400' DOES 'MODULAR ARITHMETIC'.":21100{ " < >"::" WE'LL USE 'GOSUB 400' RIGHT AWAY AND":"AND BUILD THE SUBROUTINE ITSELF LATER.":N."::" WE WILL CREATE A '400 SUBROUTINE' TO":"DO THIS.":21100:" < >"::" PRIOR TO 'GOSUB 400', WE MUST SET TWO":"VALUES: X AND B.":21000::" THE '400 SUBROUTINE' WILL DIVIDE"j "X BY B AND RETURN THE REMAINDER IN R."::" THE QUOTIENT (RE L = NOT R":21700 " < >":" 390 RETURN"::"LET'S DEAL WITH LEAP YEARS."::" IF WE DIVIDE THE YEAR (Y) BY 4 AND THE";:"REMAINDER IS 0, IT'S A LEAP YEAR.":21000::" IT MAKES SENSE TO USE A SUBROUTINE TO" "FIND THE REMAINDER OF A DIVISIOPOSE.":21000::" A 'RETURN' IS REQUIRED AT THE END OF" "EVERY SUBROUTINE."::"WE PUT IN LINE 390 NOW.":21000::" THE '< >' SYMBOL INDICATES WHERE WE'LL";:"PLACE THE STATEMENTS AS WE WRITE...":21100:" 310 X = Y : B = 4 : GOSUB 400":" 312ULATE":" 302 REM D - WEEKDAY, 1ST OF MONTH":" 304 REM N - NO. OF DAYS IN MONTH"9/ 21700:" < >":" 390 RETURN"::" WE WILL BUILD THIS SUBROUTINE A FEW":"LINES AT A TIME."::" THE FIRST THREE STATEMENTS ARE 'REM'":"TO INDICATE OUR PURDS THE DAY OF THE":"WEEK FOR FIRST OF THE MONTH."::" IT RETURNS WITH D = 0 FOR SUNDAY,":"D = 1 FOR MONDAY AND SO ON...":Y" UP TO D = 6 FOR SATURDAY.":21000::" N IS RETURNED WITH THE NUMBER OF DAYS":"IN THE MONTH.":21100:" 300 REM CALC IS TIME TO WRITE THE SUBROUTINE";:"TO PERFORM THE CALCULATIONS.":21000::" BEFORE 'GOSUB 300' IS EXECUTED, M MUST";:"BE SET TO THE MONTH, AND Y TO THE YEAR.":~"M MUST RANGE FROM 1 TO 12."::"Y MUST BE 0 TO 99.":21000::" THIS SUBROUTINE FININT THE HEADING FOR THE CALENDAR.":21000:%" FINALLY, WE PLAN A SUBROUTINE AT 500":"TO ACTUALLY PRINT THE CALENDAR DAYS.":21000::"THE 'REM' STATEMENTS EXPLAIN IT ALL.":21600:21100:DE1:DM4:30000]10:"CALCULATION SUBROUTINE"::" NOW ITS.":21100:" WE WILL WRITE A SUBROUTINE AT LINE 300";:"WHICH WILL PERFORM THE ARITHMETIC.":+" THE NUMBER OF DAYS IN THE MONTH AND":"THE WEEKDAY OF THE FIRST DAY ARE NOW":"ESTABLISHED.":21100:" WE INTEND TO CREATE A '600 SUBROUTINE'";:"TO PR" ONCE AGAIN, WE PARTITION THE JOB INTO":"SMALLER, EASIER TO HANDLE UNITS.":21000::" IT IS OFTEN DESIREABLE TO CALL OTHER"_"SUBROUTINES FROM WITHIN A SUBROUTINE."::" IN THIS CASE, WE DIVIDE THE TASK OF":"PRINTING THE CALENDAR INTO THREE PARTREM PRINT CALENDAR":" 220 GOSUB 300 : REM CALCULATE":" 240 GOSUB 600 : REM PRINT TITLE":" 260 GOSUB 500 : REM PRINT DAYS":" 280 RETURN"::21700:21000}" THIS IS THE '200 SUBROUTINE' THAT":"MANAGES THE PRINTING OF THE CALENDAR."::ED TO VERIFY";"THAT THE MONTH AND YEAR ARE IN RANGE.":21100:"WHEN THE 'RETURN' EXECUTES...":21000::"M WILL RANGE FROM 1 TO 12."::"Y WILL HAVE A VALUE FROM 0 TO 99.":21600:21100:DE1:DM3:3000009:"PRINT CALENDAR SUBROUTINE"::" 200 12 THEN 120":" 160 IF Y < 0 OR Y > 99 THEN 120"" 180 RETURN"::21700:21000:" WE PROMPT FOR MONTH AND YEAR, AND":"ACCEPT TWO NUMBERS."::" LINE 130 ENSURES THAT BOTH M AND Y ARE";:"INTEGER VALUES.":21000::" TWO 'IF' STATEMENTS ARE US DISTRACTION."::"WE WILL WRITE THEM ONE AT A TIME..."ZB21600:21100:DE1:DM2:300003W13:"INPUT SUBROUTINE"::" 100 REM GET MONTH, YEAR":" 120 INPUT "QQ$"MONTH, YEAR: "QQ$"; M,Y":" 130 M = INT(M) : Y = INT(Y)":" 140 IF M < 1 OR M >HE IMPORTANT THING FOR NOW IS THAT WE";:"HAVE SIMPLIFIED THE ENTIRE TASK.":21000:7" WE HAVE LOGICALLY DIVIDED IT INTO":"WORKABLE MODULES.":21100:"THE MAIN ROUTINE IS DONE.":21000::" NOW WE CAN THINK ABOUT EACH SUBROUTINE";:"IN TURN WITHOUTPUT DATA.":21000::" A SECOND SUBROUTINE IS USED TO PRINT":"THE CALENDAR."::" WE HAVE PROVIDED AN 'END' STATEMENT"T"SINCE NO FURTHER STEPS ARE NEEDED.":21100:" SOON, WE WILL WRITE THE SUBROUTINES":"THAT ARE TO BEGIN AT 100 AND 200."::" TSUB 100 : REM GET MONTH, YEAR":5:"30 GOSUB 200 : REM PRINT CALENDAR":5:"90 END"::21700:" HERE IS OUR FIRST CUT AT THE MAIN":"ROUTINE.":21000:y w"THERE ARE TWO MAJOR DIVISIONS."::" FIRST, WE 'GOSUB' TO A SUBROUTINE THAT";:"ACCEPTS THE IN0):I; &KK1:K6K0:" :I, D::H X PRINT CALENDAR TITLEv bM$"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" l:8 v(M$,M32,3),1900Y :"SUN MON TUE WED THU FRI SAT":  : *7:"WRITING THE CALENDAR PROGRAM"::5:"20 GO:400 8LR% @DY((Y3)4):N00 JI1MC TXDN:B7:400K VDRb ^XI(I7):B2:400m `N30R} hI2N28L |I   SET R TO REMAINDER OF X/B RX(XB)B   PRINT CALENDAR DAYS KD I1N K42(I1AR: ";M,Y M(M):Y(Y)- M1M12120? Y0Y99120E [ PRINT CALENDARp 300: CALCULATE 600: PRINT TITLE 500: PRINT DAYS  , CALCULATE . D - WEEKDAY, 1ST OF MONTH 0 N - NO. OF DAYS IN MONTH 6XY:B4EG 20992MM98d::255:QQ$(34):768,160:769,0:770,76:771,44:772,254:2120032500:DM1:DE1:30000(222)255Ĭ  100: GET MONTH, YEAR200: PRINT CALENDARZd GET MONTH, YEAR x"MONTH, YE                        " THIS STATEMENT WILL PLOT THE POINTS":"(2,3) AND (6,7) AND THE LINE BETWEEN.":21000::" BY USING 'HPLOT TO' WE CAN EASILY DRAW";:"STRAIGHT LINES ANYWHERE."::" IF YOU DRAW MANY SHORT, STRAIGHT":"LINES, YOU CAN CREATE A CURVED LINE.":21100:"), (11,81), AND";:"(12,82) HAVE BEEN PLOTTED.":21100:"'TEXT' CLEARS THE SCREEN...":21600:21000:::SV021200:DE1:DM3:30000W11:"DRAWING HI-RES LINES"::" 'HPLOT' IS USED TO PLOT LINES AS WELL":"AS POINTS."::" HPLOT 2,3 TO 6,7":: ":255:20:(4);"RUN MENU"+D255:" BANKS & JAMES S. COAN"::21700:DM0:30800C~10:17:"COPYRIGHT (C) 1982 BY"::8:"HAYDEN BOOK COMPANY, INC."::11:"ALL RIGHTS RESERVED":23:11:"PRESS THE SPACE BAR":21600:21100:C32760 D21200:11:7:90:"E N D O F L E S S O N "LESSON ELEVEN":1Bax"1) 'GOSUB' AND 'RETURN'"OBrx"2) 'RETURN' IS SPECIAL"uBx"3) ARE YOU SURE IT WAS SUNDAY?"Bx"4) DESIGNING A CALENDAR PROGRAM"ByDMĺ:"YOU ARE IN SECTION "DMBy,C~" HOW TO PROGRAM IN APPLESOFT(TM) BASIC"::7:"SCOTT30012,30013,30014,32700$A;uDE1000JAuDE4045,4318,4402,4479,4598,4682AuDQ30211,30212,30213AvAN3058,2946,2981,3170AvAN3926,3975,4017AvAN4402,4479,4682,4598BPx:14:15:II(16336)(16336)(16336)(16336)::k@xi30800::"WHICH SECTION? ";:22000:(IN$)127020@iII(IN$)48:II0IIMMİ21200:DMII:DE1:29000@i::"NOT ONE OF THE SECTIONS":25200:25005@HqSV0:SLġ:SLSL1:29000A0uDM30011,0?a25200:25000?>b" OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::"C ... CONTINUE FROM WHERE YOU LEFT OFF"?Hb:"T ... TABLE OF CONTENTS FOR THIS LESSON"::"S ... SELECT NEXT SECTION DESIRED"::"Q ... QUIT THIS LESSON":2@pbJJ1";>a22000:IN$""25000P>aIN$(IN$,1):21200:IN$"R"IN$"r"DE1:29000>aIN$"C"IN$"c"Ĺ34,SW:SH:SV:60,0:61,82:62,255:63,85:66,0:67,4:768:SV0:>aIN$"T"IN$"t"İ30800:25005>aIN$"S"IN$"s"27000?aIN$"Q"IN$"q"327067,82:768=Z(=]DQ$"YOUR CHOICE?"_=]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020=]1:868:27:IN$" NOT VALID";:25200:24010=]AN(IN$)47:AN1ANNR24012=]::30200=a21600:21200:25150>a22:"LET'S TALK - YOUR OPTION? 28:KK023100! " AFTER EVERY ::" EVERY 'RETURN' USES THE MOST RECENT":"LIST ENTRY AND THEN ERASES IT.":21100* G " THE 'RETURN' LIST HAS ROOM FOR 25 LINE";:"NUMBERS."::" THIS MEANS THAT A SUBROUTINE MAY CALL":"A SUBROUTINE...":21000:5:"WHICH CALLS A SUBROUTINE...":210000:"WE HAVE 2 SUBROUTINES, 50 AND 80."::" THE SUBROUTINE AT 50 HAPPENS TO CALL":"THE ONE AT 80."::" THIS DOES NOT CONFUSE THE APPLE, AS IT";T "KEEPS A LIST OF LINES TO 'RETURN' TO.":21000::" EVERY 'GOSUB' ADDS A LINE NUMBER TO":"THE LIST."" AT THE SAME TIME, THE 'GOSUB' IS":"NULLIFIED."::"A SECOND 'RETURN' WOULD CAUSE AN ERROR.":21100:" 10 GOSUB 50":" 20 END":" 50 GOSUB 80":" 60 PRINT "QQ$"THERE"QQ$:" 70 RETURN" " 80 PRINT "QQ$"HELLO "QQ$";":" 90 RETURN"::210ST HAVE":"BEEN A 'GOSUB'.":21000:= " IF 'RETURN' IS ENCOUNTERED WITH NO":"PRIOR 'GOSUB', AN ERROR OCCURS:"::" ?RETURN WITHOUT GOSUB ERROR"::21000:" WHEN THE 'RETURN' IS EXECUTED, CONTROL";:"GOES TO THE LINE FOLLOWING THE 'GOSUB'.":| ":21000::"IT'S THE BEST WAY.":21600:21100:DE1:DM2C30000$12:"'RETURN' IS SPECIAL"::" 'RETURN' IS MEANINGFUL ONLY WHEN IT IS";:"PRECEDED BY A 'GOSUB' STATEMENT."::" THE 'RETURN' MAY BE EXECUTED LONG":"AFTER THE 'GOSUB', BUT THERE MUTING THE":"MAIN PROGRAM."::" NEXT, WE CONCENTRATED ON WRITING THE":"PLOTTING SUBROUTINE."821100:" IT MAKES SENSE TO REDUCE THE TASK OF":"WRITING A PROGRAM TO MANAGEABLE PIECES."::" THIS WELL KNOWN APPROACH ALWAYS WORKS":"TO YOUR ADVANTAGE.USED IN OTHER PROGRAMS.":21100::" 200 REM PLOT 3 BY 3 AT (X,Y)":" 210 FOR I=X-1 TO X+1":" 220 VLIN Y-1,Y+1 AT I"^H" 230 NEXT I":" 240 RETURN"::21700:"WE WROTE THE SUBROUTINE INDEPENDENTLY.":21000::" FIRST, WE CONCENTRATED ON WRI::" THE VALUES OF X AND Y, ALONG WITH THE":"COLOR, ARE SET BEFORE EACH 'GOSUB'."::" THIS ENABLES US TO 'PACKAGE' THE PLOT":"SUBROUTINE.":21000:| " ONCE THE ROUTINE HAS BEEN WRITTEN, IT":"WILL BE AVAILABLE FOR USE AGAIN."::"IT CAN EVEN BE N LIGHT BLUE":" 50 X=5 : Y=21 : COLOR=7 : GOSUB 200":" 60 END":21700:21000::" THIS PROGRAM USES A SUBROUTINE AT LINE";:"200 TO PERFORM THE PLOTTING."::" THE SUBROUTINE PLOTS 3 BLOCKS BY 3""BLOCKS, SUCH THAT (X,Y) IS THE CENTER.":21000 ANYWHERE IN A PROGRAM.":7"AND AS MANY TIMES AS DESIRED.":21000::" ALSO, WE CAN HAVE MORE THAN ONE":"SUBROUTINE IN A PROGRAM.":21600:21100:" 10 GR":" 20 REM PLOT USING RED":" 30 X=5 : Y=7 : COLOR=1 : GOSUB 200"}" 40 REM NOW IAND AGAIN"::21700:21000:" THE SUBROUTINE IS CALLED 3 TIMES BY 3""DIFFERENT 'GOSUB 70' STATEMENTS."::" EACH TIME, THE 'RETURN' GOES BACK,":"JUST AFTER THE CALLING 'GOSUB'.":21100:" THUS, WE HAVE THE ABILITY TO EXECUTE A";:"SUBROUTINE FROM":" 70 PRINT "QQ$"AGAIN"QQ$:" 80 RETURN"::21700:21000:" HERE IS ANOTHER PROGRAM THAT CONTAINS":"A SUBROUTINE.":E"LINES 70 AND 80 FORM THE SUBROUTINE.":21100:" ]RUN":" SUBROUTINES LIKE TO BE CALLED":" AGAIN":" AND AGAIN":" :" 'RETURN' AT LINE 70 SIGNALS THE END OF";:"THE SUBROUTINE.":21600:21100:" 10 PRINT "QQ$"SUBROUTINES LIKE TO BE":7:"CALLED"QQ$:" 20 GOSUB 70"|e" 30 PRINT "QQ$"AND "QQ$"; : GOSUB 70":" 40 PRINT "QQ$"AND "QQ$"; : GOSUB 70":" 50 END"LIKE TO BE CALLED.":21000:" THE PART OF THE PROGRAM FROM LINES 50":"TO 70 IS A SUBROUTINE.":21000:II2:JJ1:18000:II3:JJ1:18000:II4:JJ1:18000::" LINE 50 BEGINS THE SUBROUTINE BECAUSE"&"IT IS THE LINE TRANFERRED TO BY 'GOSUB'.";:NE 20.":21000::" 'RETURN' RESUMES EXECUTION AT THE LINE";"THAT FOLLOWED 'GOSUB'.":21000::" UPON EXECUTING THE 'RETURN', THE NEXT":"STATEMENT TO BE PROCESSED IS LINE 20."::"LINE 20 ENDS THIS PROGRAM.":21100:" ]RUN":" SUBROUTINES":6:50 AND 60 DO THEIR THING.":21000::" FOLLOWING THE PRINTING, WE ENCOUNTER":"'RETURN' AT LINE 70."=T21100:" 'GOSUB' DID SOMETHING SPECIAL JUST":"BEFORE IT WENT TO LINE 50."::" 'GOSUB' MADE A NOTATION THAT THE NEXT":"LINE OF THE PROGRAM WAS LIETURN"::21700:" THE 'GOSUB' AT LINE 10 IS THE FIRST":"STATEMENT EXECUTED."::" 'GOSUB 50' BRANCHES TO 50 JUST LIKE":"'GOTO 50'."e21000::" BUT THERE IS A DIFFERENCE, AND WE'LL":"SEE IT SOON.":21000::"LINE 50 IS EXECUTED NEXT."::"LINES " THE BASIC STATEMENTS 'GOSUB' AND":"'RETURN' WORK TOGETHER."::" LET'S SEE HOW THEY ARE USED TO FORM":"SUBROUTINES...":21100:" 10 GOSUB 50":" 20 END"" 50 PRINT "QQ$"SUBROUTINES"QQ$:" 60 PRINT "QQ$" LIKE TO BE CALLED."QQ$:" 70 RRETURN'"::" IN THIS SECTION, WE WILL BE LEARNING":"HOW TO USE SUBROUTINES.":21000::" SIMPLY STATED, A SUBROUTINE IS AN":"ISOLATED PART OF A PROGRAM."::" THIS ABILITY TO ISOLATE PARTS OF A"f"PROGRAM HELPS US TO BE MORE EFFICIENT.":21000::2 RP$"YEAR (0-99): ":900:N0N99İ980:850C pYN::200:g 1:P$;:22000:N0:(IN$)950 I1(IN$):X((IN$,I))48:X0X9950 NN10X:I: N1: 36,0:868:27:IN$;" NOT VALID";:25200: : 11:"'GOSUB' AND '0):I; &KK1:K6K0:" :I, D::H X PRINT CALENDAR TITLEv bM$"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" l:8 v(M$,M32,3),1900Y :"SUN MON TUE WED THU FRI SAT":  P$"MONTH (1-12): ":900:N1N12İ980:800 HMN::400 8LR% @DY((Y3)4):N00 JI1MC TXDN:B7:400K VDRb ^XI(I7):B2:400m `N30R} hI2N28L |I   SET R TO REMAINDER OF X/B RX(XB)B   PRINT CALENDAR DAYS KD I1N K42(I1AR: ";M,Y M(M):Y(Y)- M1M12120? Y0Y99120E [ PRINT CALENDARp 300: CALCULATE 600: PRINT TITLE 500: PRINT DAYS  , CALCULATE . D - WEEKDAY, 1ST OF MONTH 0 N - NO. OF DAYS IN MONTH 6XY:B4,< 20992MM48d::255:QQ$(34):768,160:769,0:770,76:771,44:772,254:2120032500:DM1:DE1:30000(222)255Ĭ  100: GET MONTH, YEAR200: PRINT CALENDARZd GET MONTH, YEAR x"MONTH, YE                    "::" WITH HI-RES, HOWEVER, YOU HAVE MUCH":"MORE FLEXIBILITY.":21000::" YOU SHOULD USE YOUR IMAGINATION AND":"EXPERIMENT WITH THIS PROGRAM.":  "TRY OTHER FORMULAS AND SCALING FACTORS.":21600:21100:DE1:DM5:30000!8 11:"HI-RES DEMONSTRAT.":21000:@f 02988N X IS 75, Y IS 5625, WHICH IS NOT":"BETWEEN 0 AND 159."::" DIVIDING Y BY 40 SCALES IT INTO THE":"RANGE 0 TO 140, WHICH FITS NICELY.":21100:" LIKE THE LO-RES VERSION, THIS GRAPH IS"; "SHIFTED, DISTORTED, AND UPSIDE-DOWN.3":" 20 FOR X = -75 TO 75":" 30 Y = X ^ 2":" 40 HPLOT X + 95, Y / 40" f " 80 NEXT X"::21700:" IN LINE 40, ADDING 95 TO X SHIFTS THE":"GRAPH TO RIGHT."::" THIS ALLOWS THE PARABOLA TO FIT WITHIN";:"THE HORIZONTAL SCREEN LIMITS 0 TO 279L ADJUSTMENTS TO":"TAKE ADVANTAGE OF THIS PLOTTING POWER.":21000::"LET'S RUN THIS...":21100:SV1:230,32:3086::3:21:" ]RUN":21700L 21200:21200:X7575:YX2:X95,Y40:X96,Y40:X:21600:21000:::SV0:21200:" 10 HGR : HCOLOR= PLOT X + 95, Y / 40":" 80 NEXT X"::" WITH HI-RES, THE HORIZONTAL VALUE MUST";:"BE IN THE RANGE 0 TO 279."::"THE VERTICAL RANGE IS 0 TO 159.":21000::" THIS GIVES FAR MORE PLOTTED POINTS" "THAN WE HAD WITH LO-RES."::" WE HAVE MADE SEVERAEC" l:8& v(M$,M32,3),1900YM :"SUN MON TUE WED THU FRI SAT":S  MI2N28L |I 8  SET R TO REMAINDER OF X/BI RX(XB)BO j  PRINT CALENDAR DAYSr KD} I1N K42(I10):I; &KK1:K6K0: :I D:: X PRINT CALENDAR TITLE bM$"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVD600: PRINT TITLE* 500: PRINT DAYS0 @ , CALCULATEa . D - WEEKDAY, 1ST OF MONTH 0 N - NO. OF DAYS IN MONTH 6XY:B4:400 8LR @DY((Y3)4):N0 JI1M TXDN:B7:400 VDR ^XI(I7):B2:400 `N30R hU:10:"... HERE I AM"%0,1+ F100: GET MONTH, YEAR`200: PRINT CALENDARfZ}d GET MONTH, YEARx"MONTH, YEAR: ";M,YM(M):Y(Y)M1M12120Y0Y99120 PRINT CALENDAR300: CALCULATE    10:"PROGRAMMING WITH HI-RES"::" REMEMBER THE PROGRAM WE USED TO PLOT A";:"PARABOLA WITH LO-RES GRAPHICS."::" LET'S MODIFY THAT PROGRAM TO USE":"HI-RES...":21100:" 10 HGR : HCOLOR= 3":" 20 FOR X = -75 TO 75"c " 30 Y = X ^ 2":" 40 HF THE WAY IN WHICH":"THE COLOR IS ENCODED IN THE TV SIGNAL." 21000::" THERE IS A SIMPLE WAY TO ALWAYS PLOT":"THE COLOR OF YOUR CHOICE."::" WHENEVER YOU PLOT THE POINT (X,Y),":"ALSO PLOT THE POINT (X+1,Y) AS WELL.":21100:DE1:DM4:30000 NS THAT":"ARISE WHEN USING HI-RES COLORS."::" IN FACT, IF YOU HAVE A COLOR TV, YOU"; "MAY HAVE NOTICED 'WHITE' ISN'T ALWAYS":"WHITE.":21000::" THERE IS AN INTERACTION BETWEEN THE":"COLOR AND THE HORIZONTAL COORDINATE."::" THIS IS BECAUSE O TO 276,81":6:"TO 140,0 TO 20,100":21000:0,0279,159276,81140,020,100:21:"HAS BEEN EXECUTED.":21600:21000:::SV0:21200U` " WE HAVE ONLY TOUCHED UPON THE":"FUNDAMENTALS OF APPLE HI-RES GRAPHICS.":21000::" THERE ARE SEVERAL COMPLICATIOE SEGMENT.":21000:"LET'S DRAW SOME LINES...":21100:SV1:230,32:3086::3:21:21700:"HPLOT 2,3 TO 6,7":21000:2,36,7::" HAS BEEN EXECUTED.":21100:"HPLOT TO 30,1":21000:30,1: " HAS BEEN EXECUTED.":21100:"HPLOT 0,0 TO 279,159 HPLOT TO 6,7"::" THIS VERSION OF 'HPLOT' DRAWS A LINE"]"FROM THE LAST PLOTTED POINT.":21000::" HPLOT 2,3 TO 6,7 TO 30,1"::" WE ARE ALLOWED TO 'HPLOT TO' ANY":"NUMBER OF ADDITIONAL POINTS."::" EACH ADDITIONAL 'TO' DRAWS ANOTHER":"LINTED.":21100:" FOR I = 2 TO 4 : VLIN 12,21 AT I":" : NEXT I":21000:I24:12,21I::"HAS BEEN EXECUTED.":21100:" COLOR= 0":21000:0c1~" HAS BEEN EXECUTED, SHOWING NO EFFECT":"YET.":21100:" BY PLOTTING THE BOX AGAIN WITH":"COLOR= 0, WE 2,370/2,3739:"HAS BEEN EXECUTED.":21100:" VLIN 2,37 AT 0 : VLIN 2,37 AT 39":21000:2,370:2,3739:"HAS BEEN EXECUTED.":34,20:21100:" FOR I = 20 TO 38 : VLIN I,I+1 AT I-20":" : NEXT I":210000I2038:I,I1I20::"HAS BEEN EXECUTATEMENT:":21700:" PLOT 0,0":21000:0,0:"HAS BEEN EXECUTED.":21100/Q" PLOT 39,39":21000:39,39:"HAS BEEN EXECUTED.":21100:" PLOT 0,39 : PLOT 39,0":21000:0,39:39,0:"HAS BEEN EXECUTED.":21100:" HLIN 2,37 AT 0 : HLIN 2,37 AT 39":21000:TICAL POSITION OF THE LINE IS Y.":21000-:" 'VLIN' AND 'HLIN' ARE CONVENIENT WAYS":"TO CONSTRUCT LINES.":21100:DE1:DM6:30000F.12:"GRAPHICS EXPOSITION":::" WE NOW PRESENT A SERIES OF GRAPHICS":"EXAMPLES...":21100:SV1::15::"THE SINCLUDED, A BROKEN LINE APPEARS.":21100:"THE RELATED STATEMENT:":&-j" 20 HLIN J1,J2 AT Y"::"MAKES IT EASY TO GRAPH HORIZONTAL LINE":"SEGMENTS.":21000::" THIS PARTICULAR 'HLIN' STATEMENT DRAWS";:"A HORIZONTAL LINE FROM J1 TO J2."::"THE VERSPACE BAR":21600:21100:$+32760y+21200:11:7:90:"E N D O F L E S S O N ":255:20:(4);"RUN MENU"+255:9 AT 23"::" THIS ROUTINE WILL PLOT TWO VERTICAL":"SEGMENTS, BOTH AT 23."::" BECAUSE THE POINT (23,19) IS NOT":":"YOU ARE IN SECTION "DM*y*~" HOW TO PROGRAM IN APPLESOFT (TM) BASIC"::7:"SCOTT BANKS & JAMES S. COAN"::21700:DM0:30800+~10:17:"COPYRIGHT (C) 1982 BY"::8:"HAYDEN BOOK COMPANY, INC."::11:"ALL RIGHTS RESERVED":23:11:"PRESS THE uDE1994)>uDE2582!)?uDE31285)uDQ30211,30212O)Px:15:"LESSON TEN":s)ax"1) BEGINNING HI-RES GRAPHICS")rx"2) PLOTTING HI-RES POINTS")x"3) DRAWING HI-RES LINES")x"4) PROGRAMMING WITH HI-RES")x"5) HI-RES DEMONSTRATION"*yDMĺ00::"WHICH SECTION? ";:22000:(IN$)127020e(iII(IN$)48:II0IIMMİ21200:DMII:DE1:29000(i::"NOT ONE OF THE SECTIONS":25200:25005(HqSV0:SLġ:SLSL1:29000(0uDM30011,30012,30013,30014,30015,32700(;uDE1000(b" OPTIONS AVAILABLE:"::"R ..%]DQ$"YOUR CHOICE?"J%]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020{%]1:868:27:IN$" NOT VALID";:25200:24010%]AN(IN$)47:AN1ANNR24012%]::30200%a21600:21200:25150%a22:"LET'S TALK - YOUR OPTION? ";&a22000:IN$6)1:TV(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:23010p$"GREAT! HERE WE GO.":21100:DE2:30000a>"THAT'S ALL FOLKS.":21100:DE1:DM9:30000s>.I11500::>D/S1:I018:0,39I::>/S2:I06:S0,S0I)S112220>/S0(I3),S06(I3)S0I:>/? 0I120:J15:15((J).3):0,31:12400:12300:0=33,35:12300:0:30,35:12300:0:30,31:12300:0:33,31:12300:12300:SV1::21200:"MAYBE YOU CAN PROGRAM THE SUNRISE!":21000::SV0:21200>I"WOULD YOU LIKE TO SEE THE SUNSET AGAIN?"::"1) NO"::"2) YES"::DQ4:NR3:234,3726:30,31:30,35:33,31:33,35:S00:12200:12000:S04:12100:12200:12000:S08:S16:S29:12100:12200:12000:S013=#12100:12200:12000:S016:S12:S21:12100:12200:12000:0:I039:0,39I::5:37,382:37,383:13:30,35:33,35:33,31:3, THE GOOD OLD-TIME MOVIES":"WERE IN BLACK AND WHITE.":21100B;:;SV1:::S17:S213:12100:4:I1939:0,39I::8:30,375:26,2814:12:I2629:31I,I21I::14,24:13,1525:5:I2228:52I,I8I::1z<{I2937:24,36I::0:22,2634:PHICS DISPLAY"::" MANY INTERESTING AND PLEASING EFFECTS":"CAN BE ACHIEVED USING COLOR GRAPHICS."::" JUST FOR FUN, WE HAVE PREPARED A":"DEMONSTRATION.":21000::" EVEN IF YOU AREN'T USING A COLOR TV"<;"MONITOR, PROCEED ANYWAY."::" AFTER ALL21200::5:"A P P L E C O L O R C H A R T":21100::" HERE ARE THE VALUES USED TO GENERATE":"THESE COLORS.":2110096:"0 2 4 6 8 10 12 14":8:"1 3 5 7 9 11 13 15":21000::SV0:21200:DE1:DM8:30000:210:"COLOR GRA4) DARK GREEN 12) GREEN"::" 5) GRAY 13) YELLOW"::" 6) MEDIUM BLUE 14) AQUA"::" 7) LIGHT BLUE 15) WHITE":21100:SV1::15:2,370:2,3739:0,392x90,3937:I015:I:2,372I4:2,372I5:: YOUR 'APPLESOFT"7"PROGRAMMING REFERENCE MANUAL'."::"HERE'S THE LIST:"::" 0) BLACK 8) BROWN"::" 1) MAGENTA 9) ORANGE"::" 2) DARK BLUE 10) GRAY"::" 3) PURPLE 11) PINK":8K" H 15, INCLUSIVE.":21000::" AS WE HAVE SEEN, 0 REPRESENTS BLACK"7"AND 15 REPRESENTS WHITE."::" THE VALUES 1 THROUGH 14 ARE USED TO":"PLOT THE BLUES, GREENS, AND OTHER TINTS.";:21100:" ALL THE COLORS, ALONG WITH THEIR":"VALUES, ARE LISTED IN POSSIBLE ONLY WHEN":"A COLOR TV MONITOR IS BEING USED."::" IF YOU ARE WORKING WITH A BLACK AND"A6y"WHITE MONITOR, YOU WILL SEE VARIOUS":"SHADES OF GRAY.":21000::" SIXTEEN COLORS ARE AVAILABLE IN LO-RES";:"GRAPHICS MODE."::"THEY ARE 0 THROUG AGAIN?"::"1) NO."::"2) YES."::DQ3:NR3:24000a4"OK."::"HERE WE GO!":21100:DE1:300004"FINE.":21100:DE1:DM7:30000b5315:"LO-RES COLOR"::" YOUR APPLE COMPUTER IS CAPABLE OF":"GENERATING COLOR GRAPHICS."::" OF COURSE, THIS IS4,20:25200:21200:35,3828:35,3829:0:I3538:I12,I11I:3h"WHOOOOOOOPS!":25200::"WELL, NOBODY'S PERFECT.":21100:" FINALLY, THE 'TEXT' STATEMENT IS":"EXECUTED:":21000::SV0:2120024" DO YOU WANT TO SEE THE 'GRAPHICS":"EXPOSITION'0:"HIT THE SPACE BAR.":21700:21100240:I511:20,24I::15:I1012:20,29I::21100:0:I1012:20,29I::15:I1117:26,30I::21100:0:I1117:26,30I::15?3I1517:25,34I::21100:0:I1517:25,34I::15:I2127:35,38I::3CAN ERASE THE IT.":21100:" FOR I = 2 TO 4 : VLIN 12,21 AT I":" : NEXT I":21000:I24:12,21I#2:"THE BOX IS GONE.":21100:" CONTINUING THIS PROCESS, WE CAN CREATE";:"THE APPEARANCE OF MOTION.":21000:15:I511:20,24I::"LIKE SO.":2110:30000CRSL2+CR18:": : :";:SH(36)1KCR23000:KK27İ25000:21020eC&RKK32ĺ(7);:21020tC0R1:958:ClRSL3:21010CR:JJ1330::C`T34,0:CT34,(37):CUIN$"":IH(36)1DVIN$;::(32((IN$)3));::" ";:IH:23000: THE FOLLOWING GRAPHICS DEMONSTRATION":"ILLUSTRATES A VARIETY OF EFFECTS...":21100:21:"STANDBY FOR..."::SV1:230,32:3086:100:25200:" FOG WARNING!":25200C 21000:::SV0:21200:"THIS DEMONSTRATION CONCLUDES THE LESSON.";:21100:DE1:DM6ITH HI-RES, HOWEVER, YOU HAVE MUCH":"MORE FLEXIBILITY.":21000::" YOU SHOULD USE YOUR IMAGINATION AND":"EXPERIMENT WITH THIS PROGRAM.":A "TRY OTHER FORMULAS AND SCALING FACTORS.":21600:21100:DE1:DM5:30000B8 11:"HI-RES DEMONSTRATION"::"@ " WHEN X IS 75, Y IS 5625, WHICH IS NOT":"BETWEEN 0 AND 159."::" DIVIDING Y BY 40 SCALES IT INTO THE":"RANGE 0 TO 140, WHICH FITS NICELY.":21100:" LIKE THE LO-RES VERSION, THIS GRAPH IS";A "SHIFTED, DISTORTED, AND UPSIDE-DOWN."::" W":21600:21100:L32760pL21200:11:7:90:"E N D O F L E S S O N ":255:20:(4);"RUN MENU"{L255:E IN SECTION "DMKy|K~" HOW TO PROGRAM IN APPLESOFT (TM) BASIC"::7:"SCOTT BANKS & JAMES S. COAN"::21700:DM0:30800L~10:17:"COPYRIGHT (C) 1982 BY"::8:"HAYDEN BOOK COMPANY, INC."::11:"ALL RIGHTS RESERVED":23:11:"PRESS THE SPACE BAR J>uDE2582J?uDE3128,JuDQ30211,30212FJPx:15:"LESSON TEN":jJax"1) BEGINNING HI-RES GRAPHICS"Jrx"2) PLOTTING HI-RES POINTS"Jx"3) DRAWING HI-RES LINES"Jx"4) PROGRAMMING WITH HI-RES"Jx"5) HI-RES DEMONSTRATION"KyDMĺ:"YOU ARICH SECTION? ";:22000:(IN$)127020\IiII(IN$)48:II0IIMMİ21200:DMII:DE1:29000Ii::"NOT ONE OF THE SECTIONS":25200:25005IHqSV0:SLġ:SLSL1:29000I0uDM30011,30012,30013,30014,30015,32700I;uDE1000Ib" OPTIONS AVAILABLE:"::"R ... REPEAT OUR CHOICE?"AF]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020rF]1:868:27:IN$" NOT VALID";:25200:24010F]AN(IN$)47:AN1ANNR24012F]::30200Fa21600:21200:25150Fa22:"LET'S TALK - YOUR OPTION? ";Fa22000:IN$""25000(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:23010gEuDE3457F?uDE4150F@uDE4570,5550,5613,5655FAuDE5683FBuDE6194,6306,6985,7041,7069N":@EpbJJ115:II(16336)(16336)(16336)(16336)::yExi30800::"WHICH SECTION? ";:22000:(IN$)127020EiII(IN$)48:II0IIMMİ21200:DMII:DE1:29000Ei::"NOT ONE OF THE SECTIONS":25200:25005EHqSV0:SLġ:SLSL1:29000aIN$"Q"32700!Da25200:25000D>b" OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::"C ... CONTINUE FROM WHERE YOU LEFT OFF"EHb:"T ... TABLE OF CONTENTS FOR THIS LESSON"::"S ... SELECT NEXT SECTION DESIRED"::"Q ... QUIT THIS LESSO600:21200:251508Ca22:"LET'S TALK - YOUR OPTION? ";QCa22000:IN$""25000~CaIN$(IN$,1):21200:IN$"R"DE1:29000CaIN$"C"Ĺ34,SW:SH:SV:60,0:61,82:62,255:63,85:66,0:67,4:768:SV0:CaIN$"T"İ30800:25005CaIN$"S"27000D8:SW(34):SV(37)1:60,0:61,4:62,255:63,7:66,0:67,82:768GBZ^B]DQ$"YOUR CHOICE?"B]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020B]1:868:27:IN$" NOT VALID";:25200:24010B]AN(IN$)47:AN1ANNR24012B]::30200Ca2122020AYII6000:16368,0DAYIIII1:KK(16384)128:KK023100RAYII23010AZTH(36)1:TV(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:23010A"GREAT! HERE WE GO.":21100:DE2:30000a>"THAT'S ALL FOLKS.":21100:DE1:DM9:30000s>.I11500::>D/S1:I018:0,39I::>/S2:I06:S0,S0I)S112220>/S0(I3),S06(I3)S0I:>/? 0I120:J15:15((J).3):S%31:12400:12300:0=33,35:12300:0:30,35:12300:0:30,31:12300:0:33,31:12300:12300:SV1::21200:"MAYBE YOU CAN PROGRAM THE SUNRISE!":21000::SV0:21200>I"WOULD YOU LIKE TO SEE THE SUNSET AGAIN?"::"1) NO"::"2) YES"::DQ4:NR3:2404,3726:30,31:30,35:33,31:33,35:S00:12200:12000:S04:12100:12200:12000:S08:S16:S29:12100:12200:12000:S013=#12100:12200:12000:S016:S12:S21:12100:12200:12000:0:I039:0,39I::5:37,382:37,383:13:30,35:33,35:33,31:30,THE GOOD OLD-TIME MOVIES":"WERE IN BLACK AND WHITE.":21100B;:;SV1:::S17:S213:12100:4:I1939:0,39I::8:30,375:26,2814:12:I2629:31I,I21I::14,24:13,1525:5:I2228:52I,I8I::1z<{I2937:24,36I::0:22,2634:3ICS DISPLAY"::" MANY INTERESTING AND PLEASING EFFECTS":"CAN BE ACHIEVED USING COLOR GRAPHICS."::" JUST FOR FUN, WE HAVE PREPARED A":"DEMONSTRATION.":21000::" EVEN IF YOU AREN'T USING A COLOR TV"<;"MONITOR, PROCEED ANYWAY."::" AFTER ALL, 200::5:"A P P L E C O L O R C H A R T":21100::" HERE ARE THE VALUES USED TO GENERATE":"THESE COLORS.":2110096:"0 2 4 6 8 10 12 14":8:"1 3 5 7 9 11 13 15":21000::SV0:21200:DE1:DM8:30000:210:"COLOR GRAPH DARK GREEN 12) GREEN"::" 5) GRAY 13) YELLOW"::" 6) MEDIUM BLUE 14) AQUA"::" 7) LIGHT BLUE 15) WHITE":21100:SV1::15:2,370:2,3739:0,392x90,3937:I015:I:2,372I4:2,372I5::21OUR 'APPLESOFT"7"PROGRAMMING REFERENCE MANUAL'."::"HERE'S THE LIST:"::" 0) BLACK 8) BROWN"::" 1) MAGENTA 9) ORANGE"::" 2) DARK BLUE 10) GRAY"::" 3) PURPLE 11) PINK":8K" 4)15, INCLUSIVE.":21000::" AS WE HAVE SEEN, 0 REPRESENTS BLACK"7"AND 15 REPRESENTS WHITE."::" THE VALUES 1 THROUGH 14 ARE USED TO":"PLOT THE BLUES, GREENS, AND OTHER TINTS.";:21100:" ALL THE COLORS, ALONG WITH THEIR":"VALUES, ARE LISTED IN YOSSIBLE ONLY WHEN":"A COLOR TV MONITOR IS BEING USED."::" IF YOU ARE WORKING WITH A BLACK AND"A6y"WHITE MONITOR, YOU WILL SEE VARIOUS":"SHADES OF GRAY.":21000::" SIXTEEN COLORS ARE AVAILABLE IN LO-RES";:"GRAPHICS MODE."::"THEY ARE 0 THROUGH GAIN?"::"1) NO."::"2) YES."::DQ3:NR3:24000a4"OK."::"HERE WE GO!":21100:DE1:300004"FINE.":21100:DE1:DM7:30000b5315:"LO-RES COLOR"::" YOUR APPLE COMPUTER IS CAPABLE OF":"GENERATING COLOR GRAPHICS."::" OF COURSE, THIS IS P20:25200:21200:35,3828:35,3829:0:I3538:I12,I11I:3h"WHOOOOOOOPS!":25200::"WELL, NOBODY'S PERFECT.":21100:" FINALLY, THE 'TEXT' STATEMENT IS":"EXECUTED:":21000::SV0:2120024" DO YOU WANT TO SEE THE 'GRAPHICS":"EXPOSITION' A"HIT THE SPACE BAR.":21700:21100240:I511:20,24I::15:I1012:20,29I::21100:0:I1012:20,29I::15:I1117:26,30I::21100:0:I1117:26,30I::15?3I1517:25,34I::21100:0:I1517:25,34I::15:I2127:35,38I::34,N ERASE IT.":21100:" FOR I = 2 TO 4 : VLIN 12,21 AT I":" : NEXT I":21000:I24c112,21I#2:"THE BOX IS GONE.":21100:" CONTINUING THIS PROCESS, WE CAN CREATE";:"THE APPEARANCE OF MOTION.":21000:15:I511:20,24I::"LIKE SO.":21100:D.":21100:" FOR I = 2 TO 4 : VLIN 12,21 AT I":" : NEXT I":21000:I24:12,21I::"HAS BEEN EXECUTED.":21100:" COLOR= 0":21000:0V1~" HAS BEEN EXECUTED, SHOWING NO EFFECT":"YET.":21100:" BY PLOTTING THE BOX AGAIN WITH":"COLOR= 0, WE CA,370/2,3739:"HAS BEEN EXECUTED.":21100:" VLIN 2,37 AT 0 : VLIN 2,37 AT 39":21000:2,370:2,3739:"HAS BEEN EXECUTED.":34,20:21100:" FOR I = 20 TO 38 : VLIN I,I+1 AT I-20":" : NEXT I":210000I2038:I,I1I20::"HAS BEEN EXECUTETEMENT:":21700:" PLOT 0,0":21000:0,0:"HAS BEEN EXECUTED.":21100/Q" PLOT 39,39":21000:39,39:"HAS BEEN EXECUTED.":21100:" PLOT 0,39 : PLOT 39,0":21000:0,39:39,0:"HAS BEEN EXECUTED.":21100:" HLIN 2,37 AT 0 : HLIN 2,37 AT 39":21000:2CAL POSITION OF THE LINE IS Y.":21000-:" 'VLIN' AND 'HLIN' ARE CONVENIENT WAYS":"TO CONSTRUCT LINES.":21100:DE1:DM6:30000F.12:"GRAPHICS EXPOSITION":::" WE NOW PRESENT A SERIES OF GRAPHICS":"EXAMPLES...":21100:SV1::15::"THE STACLUDED, A BROKEN LINE APPEARS.":21100:"THE RELATED STATEMENT:":&-j" 20 HLIN J1,J2 AT Y"::"MAKES IT EASY TO GRAPH HORIZONTAL LINE":"SEGMENTS.":21000::" THIS PARTICULAR 'HLIN' STATEMENT DRAWS";:"A HORIZONTAL LINE FROM J1 TO J2."::"THE VERTITHE ABOVE EXAMPLE CAUSES";:"THE LINE TO BE DRAWN AT HORIZONTAL":"POSITION 5.":21000::" 20 VLIN 0,18 AT 23"B,$" 30 VLIN 20,39 AT 23"::" THIS ROUTINE WILL PLOT TWO VERTICAL":"SEGMENTS, BOTH AT 23."::" BECAUSE THE POINT (23,19) IS NOT":"INST THIS PURPOSE:"::" 20 VLIN 0,39 AT 5"::21000:"THIS WILL PRODUCE THE SAME RESULT.":21100:" 20 VLIN 0,39 AT 5"::"'VLIN' DRAWS A VERTICAL LINE."q+21000::" '0,39' DEFINES THE VERTICAL STARTING":"AND STOPPING POINTS."::" THE 'AT 5' IN VERTICAL AND HORIZONTAL LINES"::" WE COULD PLOT A VERTICAL LINE WITH THE";:"FOLLOWING ROUTINE:"::" 10 GR : COLOR= 15":" 20 FOR I = 0 TO 39":" 30 PLOT 5,I":" 40 NEXT I"::21000*" APPLESOFT PROVIDES A SPECIAL BASIC":"STATEMENT FOR JURRECT THIS BY CHANGING LINE 40 TO:"::" 40 PLOT X + 19, 39 - Y / 10"::21000("EXPERIMENT WITH THIS PROGRAM YOURSELF."::" YOU CAN CHANGE THE COLOR, SHIFTING AND";:"SCALING FACTORS, AND EVEN THE FORMULA.":21600:21100:DE1:DM5:30000)67:"00::" HOWEVER, 'Y / 10' IS A SCALING FACTOR":"AND CHANGES THE SHAPE OF THE PARABOLA."::" WE ACCEPT THIS DISTORTION IN ORDER TO"P("GET MORE OF THE GRAPH ON THE SCREEN.":21100:" YOU MAY HAVE NOTICED THAT THE PARABOLA";:"IS UPSIDE-DOWN."::"COz #<     ήI Ҡ͠ ԠҠΰՠή3ήHήJ!ήD ήFή>"LINE 550. INCREMENT THE VALUE OF K."::" IF K IS GREATER THAN 6, WE HAVE JUST":"DISPLAYED A SATURDAY DATE."::"IN THIS CASE, K IS RESET TO 0 (SUNDAY)."::" SUNDAY BEGINS A NEW WEEK, WHICH GOES"v1"ON A NEW LINE - THEREFORE WE 'PRINT'.":21100:"UMN,";:"THEN THE DATE (I) IS PRINTED.":/" AS K GOES FROM 0 TO 6, 'K * 4 + 2'":"LOCATES THE DESIRED 4-CHARACTER COLUMN.":21000::" ADDING (I < 10) POSITIONS THE CURSOR":"ONE ADDITIONAL SPACE TO THE RIGHT FOR":"SINGLE DIGIT DATES.":211000H DAY IS PRINTED, K WILL ADVANCE";:"0, 1, 2, 3, 4, 5, 6, 0, 1, AND SO ON.":21100)/n" LINE 530. THE 'FOR' LOOP SETS UP TO":"PRINT THE RIGHT NUMBER OF DAYS (N).":21100:" LINE 540. 'HTAB' IS USED TO POSITION":"THE CURSOR IN THE PROPER WEEKDAY COL 520. WE WILL USE K TO STAND FOR":"THE CURRENT DAY OF THE WEEK."::"K WILL ALWAYS BE IN THE RANGE 0 TO 6.":R.6"0 MEANS SUNDAY, 1 MEANS MONDAY, ETC.":21100:" WE INITIALIZE K TO D BECAUSE THAT IS":"THE WEEKDAY VALUE OF THE FIRST DAY."::" AS EACTH.":21100:" EVERY DAY OF THE WEEK BELONGS IN A":"SPECIFIC COLUMN.":21000::" WE MUST PLACE THE FIRST DAY OF THE":"MONTH BASED ON ITS DAY OF THE WEEK.":o-" EACH DAY THEREAFTER MUST BE PRINTED IN";:"THE PROPER ROW AND COLUMN.":21100:" LINE+r" 570 NEXT I":" 580 PRINT : PRINT : RETURN"::21700:" BEFORE THIS SUBROUTINE CAN BE CALLED":"WITH A 'GOSUB', TWO VALUES MUST BE SET.":21000::"D MUST BE THE WEEKDAY OF THE FIRST DAY.":," N MUST EQUAL THE NUMBER OF DAYS IN THE";:"MONNORES IT.":21100:DE1:DM6:30000*,11:"PRINT DAYS SUBROUTINE"::" 500 REM PRINT CALENDAR DAYS":" 520 K = D":" 530 FOR I = 1 TO N":" 540 HTAB K * 4 + 2 + (I < 10)":8:": PRINT I;":" 550 K = K + 1 : IF K > 6 THEN K = 0":8:": PRINT"INT(X / B) * B":" 490 RETURN"::" THIS IS THE MODULAR ARITHMETIC":"SUBROUTINE CALLED BY 'GOSUB 400'.":21000:"*" LINE 410 CALCULATES THE REMAINDER OF":"THE DIVISION OF X BY B."::" SINCE THE VALUE OF X / B IS NOT":"REQUIRED, THIS ROUTINE IGR MONTH M."::" LINE 390. THIS SUBROUTINE RETURNS"(}"WITH D AND N SET PROPERLY.":21000::"SUBROUTINE 300 HAS DONE ITS JOB.":21600:21100:DE1:DM5:30000t)11:"REMAINDER SUBROUTINE"::" 400 REM SET R TO REMAINDER OF X/B":" 410 R = X - E LOOP."::" FOR EACH ITERATION OF THE LOOP, N IS":"THE NUMBER OF DAYS IN THE MONTH I.":5(L" THIS IS NEEDED TO ADJUST THE WEEKDAY":"NUMBER IN LINE 340 FOR THE NEXT MONTH.":21100:" WHEN THE LOOP IS COMPLETE, N WILL HOLD";:"THE NUMBER OF DAYS FOLESSON.09",0@ *N 10,"10) HI-RES GRAPHICS","BLOAD LESSON.10",80 +N 11,"11) SUBROUTINES - CALENDAR DESIGN","RUN LESSON.11",0 ,N 12,"12) WRITING THE CALENDAR PROGRAM","RUN LESSON.12",0 N 99,"99) QUIT","FP",0MΠ ϠƠΤӢҠΤΠƠΤѢҠΤΠŠήˠήΤԤΤ²ƠΤҢҠΤΠŽϠƠΤâҠΤ㢠ΠŠ׺ Ⱥ ֺŠŠŠŠŠŠֽ̠΍ƠΤԢҠΤŠֽ̠΍ƠΤԢҠΤΠ ϠƠΤӢҠΤΠƠΤѢҠΤΠŠήˠήˠήĠήΠìɬύƠΨΤΠìɬύң΍ĠήԍĠήԍĠήԍĠήԍĠήԍĠήԍ00DQ2:NR4:24000"OF COURSE NOT!"::" THE WEIGHT OF AN ELEPHANT HAS NOTHING":"TO DO WITH ANYTHING DISCUSSED SO FAR.":21000::" REMEMBER THAT '0' IS TO BE ENTERED":"WHEN YOU ARE CONFUSED AND NEED HELP.": "TRY IT AGAIN. PLEASE TYPE FOR EXAMPLE, A QUESTION MAY BE":"PRESENTED WHICH IS TOTALLY CONFUSING...":21100V" WHAT IS THE WEIGHT OF A GRAY ELEPHANT":"ON A RAINY DAY?"::"1) 3000 KNOUBLES"::"2) TWICE THE WEIGHT ON A SUNNY DAY"::"3) TOO MUCH IF HE'S ON YOUR FOOT!"::217 OF '0' (ZERO)";:"MAY BE ENTERED."::" THE LESSON WILL THEN OFFER SOME":"ADDITIONAL EXPLANATION.":21000:R" NEXT, YOU WILL USUALLY GET ANOTHER":"CHANCE AT THE SAME QUESTION."::" THIS ALLOWS YOU TO SOLVE THE PROBLEM":"YOURSELF.":21000::" UT":"HAPPEN TO GUESS THE RIGHT ANSWER, YOU'LL";:"MISS THE EXTRA EXPLANATION.":21000::"BESIDES, THERE'S NO NEED TO GUESS...":21100:DE1:DM4:30000n11:"NEED HELP? ENTER '0'"::" ALTHOUGH IT WILL NOT BE ONE OF THE":"CHOICES LISTED, A RESPONSEHOULD YOU ENTER A WRONG RESPONSE,":"MORE INFORMATION WILL BE PRESENTED."::" THEN YOU WILL USUALLY HAVE ANOTHER":"CHANCE TO ANSWER THE QUESTION BEFORE":"MOVING AHEAD.":21000::"GUESSING IS NOT A GOOD IDEA.":" IF YOU REALLY DON'T UNDERSTAND BHE COURSE.":21600:21100:DE1:DM3:3000010:"HOW TO ANSWER QUESTIONS"::" WHEN A QUESTION APPEARS, MAKE YOUR":"BEST EFFORT TO ENTER THE CORRECT ANSWER.";::" IF YOUR ANSWER IS RIGHT, YOU WILL":"CONTINUE ON WITH THE LESSON.":21000:E" SN THOUGH WE'VE RAMBLED ON, THE":"GROCERY LIST REMAINS ON THE SCREEN."::" WE'LL BE USING THIS TECHNIQUE OFTEN IN";:"THESE LESSONS.":21100:"BY THE WAY, DON'T FORGET THESE ITEMS.":*" WE'LL REQUIRE THEM FOR THE PICNIC":"SCHEDULED AT THE END OF T21000:^" WE HAVE MUCH TO SAY ABOUT IT, AND SOON";:"WE WILL RUN OUT OF ROOM ON THE SCREEN."::" SO, THE SCREEN WORKS IN A SPECIAL WAY":"TO HANDLE SITUATIONS LIKE THIS.":21100:" SEE THAT THE GROCERY LIST IS STILL":"THERE?"21000::" EVELL PROCEED TO THE NEXT";:"TOPIC.":21100:DE1:DM2:3000010:"--- GROCERY LIST ---"::13:"APPLE COMPUTER":13:"BRUSSELS SPROUTS":13:"CORNED BEEF":13:"DILL PICKLES":13:"EGGPLANT":13:"FRESH FRUIT"::21700:"LOOK AT THIS GROCERY LIST.":NSWER:":DQ1:NR3:24010i ~"SORRY, NOT ONE OF THE CHOICES."::"LET'S DO IT AGAIN.":21100:DE2:30000 "GLAD TO OBLIGE!":21100:DE1:30000:" YOU HAVE ENTERED THE RESPONSE FOR "QQ$"NO"QQ$;:"TO HAVE REACHED THIS POINT."::" THEREFORE, WE WIU.":21100 " TO SELECT ONE OF THE RESPONSES, JUST":"TYPE THE CORRESPONDING NUMBER AND THEN":"PRESS THE 'RETURN' KEY.":21000::"TRY THIS EXAMPLE:"::" DO YOU WANT TO SEE THIS DISCUSSION":"PRINTED AGAIN?"::"1) YES"::"2) NO": wDQ$"YOUR AATIONS OF" "VARIOUS IDEAS."::" FROM TIME TO TIME, A MULTIPLE CHOICE":"QUESTION WILL BE PRESENTED.":21000::" THESE QUESTIONS ARE INTENDED TO HELP":"YOU TO MEASURE YOUR UNDERSTANDING."::" THE POSSIBLE RESPONSES WILL BE" "NUMBERED FOR YOPRESS THE SPACE":"BAR, NEW TEXT WILL APPEAR.":21000: t"AND...":21100:" SOMETIMES AFTER YOU PRESS THE SPACE":"BAR, THE SCREEN WILL BE CLEARED."::" FOLLOWING THIS, NEW MATERIAL WILL":"APPEAR AT THE TOP.":21000::" YOU WILL BE READING EXPLANR LESSONS.";::" WE HAVE PRESENTED A SCREEN OF TEXT":"FOLLOWED BY 3 COLONS (: : :).":7 '" NOW YOU HAVE AN OPPORTUNITY TO READ":"THE MATERIAL."::" WHEN YOU ARE READY TO CONTINUE, SIMPLY";:"PRESS THE SPACE BAR.":21000::" SOMETIMES AFTER YOU 1 20992MM78d::255:QQ$(34):768,160:769,0:770,76:771,44:772,254:2120032500:DM1:DE1:30000(222)255Ĭ Y 15:"INTRODUCTION"::" THE PURPOSE OF THIS LESSON IS TO TEACH";:"YOU HOW TO LEARN FROM THE OTHE                1 ABOVE, IS THE":"PROPER ANSWER.":21100:DE10:30000N&3"CORRECT.":21100&H" WHAT IS DISPLAYED WHEN THE LESSON":"WAITS FOR YOU TO PRESS THE SPACE BAR?"::DQ6:NR9:24000&k"WRONG.":25200:21100M'" ITEM 5 ABOVE, 'THREE COLONS', IS THE": ADDITIONAL":"INFORMATION TO HELP YOU UNDERSTAND.":21100J%DE6:30000_%"RIGHT!":21100%" WHAT SPECIAL AREA OF INTEREST DOES":"PRESSING 'ESC' ALLOW YOU TO USE?"::DQ5:NR9:24000%"NO."::25200:210007&" "QQ$"LET'S TALK,"QQ$" ITEMU'RE":"CONFUSED?"::DQ$"WHICH LIST ITEM?":DQ4:NR9:24010X$E"WRONG.":25200:21100:%a"THE ANSWER IS ITEM 4 ABOVE."::" WHEN YOU ARE CONFUSED, YOU ARE":"SUPPOSED TO TYPE A ZERO IN RESPONSE TO":"THE QUESTION.":21000::" THIS WILL PROVIDE SOME::" LIST OF ANSWERS - SELECT BY NUMBER"::" 1) LET'S TALK 5) THREE COLONS"::" 2) ESCAPE KEY 6) A PICKLE"::" 3) ONE THRU EIGHT 7) HELP"::" 4) ZERO (0) 8) MUSTARD"#:21700<$"" WHAT SHOULD YOU TYPE WHEN YO"YOU REALLY SHOULD EXERCISE THIS FEATURE!";::"PRESS 'ESC' AT THIS TIME.":21100:DE2:30000" "SUPER!"::" NOW LET'S SEE IF YOU HAVE A GOOD":"WORKING KNOWLEDGE OF HOW TO USE THIS":"LEARNING METHOD.":21100:DE1:DM6:30000# 15:"SURPRISE QUIZ"K FOR HELP WHEN":"YOU NEED IT.":21000::" WE ARE DISCUSSING THE USE OF THE":"ESCAPE KEY."::" BY PRESSING 'ESC', YOU WILL BE ABLE TO";:"GET INTO "QQ$"LET'S TALK"QQ$".":21000:!I "LET'S GO OVER THE DETAILS ONCE AGAIN...":21100:DE1:30000]"^ NING.":21000::"EXPERIMENT WITH THIS LESSON."::" BE SURE YOU CAN USE THIS FEATURE TO":"YOUR BEST ADVANTAGE."} 21100 :"DID YOU TRY "QQ$"LET'S TALK"QQ$"?"::"1) NO"::"2) YES"::DQ3:NR3:24000! "GOOD!"::" IT'S IMPORTANT TO AS USE THE 'ESC' KEY TO";:"ACCESS "QQ$"LET'S TALK"QQ$" AT ANY TIME."::" HOWEVER, WHEN A GRAPHICS EXAMPLE IS":"PRESENTED, 'ESC' WILL NOT FUNCTION."r T 21000::" THE ABILITY TO CONTROL YOUR PROGRESS":"THROUGH THE LESSONS IS ESSENTIAL FOR":"SELF-LEARIS TO TRY IT,":"JUST FOR FUN.":21000::"PRESS 'ESC' AFTER YOU READ THIS."::" TRY THE 'T' OPTION TO LOOK AT THE":"'TABLE OF CONTENTS'."::" THEN BE SURE TO TYPE 'C' TO CONTINUE" "YOUR PROGRESS FROM HERE ON.":21600:21100:" NORMALLY, YOU MAYTENTS' AND THEN ALLOW YOU TO SELECT":"ONE OF THE SECTIONS."::" LESSON MATERIAL WILL RESUME AT THE":"START OF THE SECTION YOU SELECT.":21100:"Q ... QUIT THIS LESSON"::21700:::"TO QUIT A LESSON, ENTER 'Q'." 21100:" THE ONLY THING LEFT NOW :" THE 'TABLE OF CONTENTS' WILL BE". "DISPLAYED WHEN YOU ENTER 'T'."::" THIS IS THE SAME TABLE AS THAT SHOWN":"AT THE BEGINNING OF THE LESSON.":21100:"S ... SELECT NEXT SECTION DESIRED"::21700:::" 'S' WILL DISPLAY THE 'TABLE OF"{ "CONARE":"IN WILL BE STARTED AGAIN.":21100:"C ... CONTINUE WHERE YOU LEFT OFF"::21700::% " 'C' WILL CONTINUE THE PRESENTATION OF":"THE LESSON MATERIAL FROM WHERE YOU":"PRESSED 'ESC'.":21100:"T ... TABLE OF CONTENTS FOR THIS LESSON"::21700::... CONTINUE WHERE YOU LEFT OFF"::"T ... TABLE OF CONTENTS FOR THIS LESSON"::"S ... SELECT NEXT SECTION DESIRED"::"Q ... QUIT THIS LESSON"::::Zc :::::"LET'S TALK - YOUR OPTION?":SV1:21100:SV0:::" IF YOU ENTER 'R', THE SECTION YOU SCAPE, THE LESSON WILL":"PRINT THE QUESTION:"::" "QQ$"LET'S TALK - YOUR OPTION?"QQ$::"ALONG WITH A MENU OF OPTIONS AVAILABLE.":21000::"HERE'S WHAT IT LOOKS LIKE:":21100 6:"OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::21700:"C Y 21100:DE1:DM5:30000g 11:"ESCAPE TO LET'S TALK"::" AT ANY TIME, YOU MAY USE THE ESCAPE":"KEY TO GAIN CONTROL OF THE LESSON."::" THE ESCAPE KEY, LOCATED AT THE UPPER":"LEFT OF THE KEYBOARD, IS MARKED 'ESC'.":21000: " IF YOU PRESS E '0' (ZERO).":21100:DE2:30000 " YOU ARE WISE TO ASK FOR HELP BY TYPING";:"ZERO.":21000::" IT IS CLEAR THAT THE QUESTION CANNOT":"BE ANSWERED WITH THE INFORMATION":"PROVIDED."::" IN FACT, '0' IS THE ONLY REASONABLE":"RESPONSE.":21600,4080,4122,4164,4227!6AuDE4297S6uDQ30211,30212,30213,30214,30215,30216,30217j6vAN1406,1448,14766vAN2309,2218,2218,22186vAN3303,3422,34646vAN3681,3653,3653,3653,3765,3653,3653,3653,36537vAN3856,3891,3821,3821,3821,3821,3821,3800:50uDM30011,30012,30013,30014,30015,30016,30017,32700[5;uDE1000,1294,1406,1448,1476h5uDE1987,2204,2218,23095?uDE2407,3240,3303,3422,34646@uDE3520,3618,3653,3681,3765,3786,3821,3856,3891,3912,3947,3975,4024,4045SSON":C4pbJJ115:II(16336)(16336)(16336)(16336)::|4xi30800::"WHICH SECTION? ";:22000:(IN$)1270204iII(IN$)48:II0IIMMİ21200:DMII:DE1:290004i::"NOT ONE OF THE SECTIONS":25200:250055HqSV0:SLġ:SLSL1:290"Q"IN$"q"32700$3a25200:250003>b" OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::"C ... CONTINUE FROM WHERE YOU LEFT OFF"4Hb:"T ... TABLE OF CONTENTS FOR THIS LESSON"::"S ... SELECT NEXT SECTION DESIRED"::"Q ... QUIT THIS LEK - YOUR OPTION? ";,2a22000:IN$""25000a2aIN$(IN$,1):21200:IN$"R"IN$"r"DE1:290002aIN$"C"IN$"c"Ĺ34,SW:SH:SV:60,0:61,82:62,255:63,85:66,0:67,4:768:SV0:2aIN$"T"IN$"t"İ30800:250052aIN$"S"IN$"s"270003aIN$,255:63,7:66,0:67,82:768"1Z91]DQ$"YOUR CHOICE?"p1]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)1240201]1:868:27:IN$" NOT VALID";:25200:240101]AN(IN$)47:AN1ANNR240121]::302001a21600:21200:251502a22:"LET'S TAL1:KK(16384)128:KK023100-0YII230100ZTH(36)1:TV(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:230100" FOR EXAMPLE, SUPPOSE WE WISH TO PRINT":"THE CALENDAR FOR AN ENTIRE YEAR."::" WE NEED ONLY REPLACE THE MAIN ROUTINE":"WITH A NEWNT WITH":"THE ACTUAL PROGRAM."::" YOU MAY RUN THE PROGRAM AND MAKE ANY" 6 THEN K = 0N = 0":" 330 FOR I = 1 TO M"88" 340 X = D + N : B = 7 : GOSUB 400":" 342 D = R":" 350 X = I + (I>7) : B = 2 : GOSUB 400";:" 352 N = 30 + R":" 360 IF I = 2 THEN N = 28 + L":" 380 NEXT I":" 390 RETURN":21000:9w" 400 REM SEOSUB 500 : REM PRINT DAYS":" 280 RETURN":21100:" 300 REM CALCULATE"8" 302 REM D - WEEKDAY, 1ST OF MONTH":" 304 REM N - NO. OF DAYS IN MONTH":" 310 X = Y : B = 4 : GOSUB 400":" 312 L = NOT R":" 320 D = Y + INT((Y + 3) / 4) : " 130 M = INT(M) : Y = INT(Y)":" 140 IF M < 1 OR M > 12 THEN 120":" 160 IF Y < 0 OR Y > 99 THEN 120":" 180 RETURN":21000:L7" 200 REM PRINT CALENDAR":" 220 GOSUB 300 : REM CALCULATE":" 240 GOSUB 600 : REM PRINT TITLE":" 260 G:" WE'LL LIST THE PROGRAM, PAUSING FOR":"EACH SUBROUTINE...":21100:5:"20 GOSUB 100: REM GET MONTH, YEAR":5:"30 GOSUB 200: REM PRINT CALENDAR":5:"90 END":210006:" 100 REM GET MONTH, YEAR":" 120 INPUT "QQ$"MONTH, YEAR: "QQ$"; M,Y":.";:21000::"THE YEAR IS DISPLAYED AS 1900 PLUS Y.":21100:" LINE 640. PRINT A BLANK LINE, THE":"WEEKDAY HEADER LINE, AND A BLANK LINE."::"AS EXPECTED, LINE 680 RETURNS."4C21600:21100:DE1:DM8:300005X6:"THE COMPLETED CALENDAR PROGRAM":AR.":21000:3" LINE 610. THE MONTH NAMES ARE STORED":"AS 3 CHARACTER GROUPS IN M$.":21100:" LINE 620. PROVIDE A BLANK LINE AND":"'HTAB' TO COLUMN 8."::" LINE 630. A THREE CHARACTER SUBSTRING";4"OF M$ IS DISPLAYED BASED ON THE MONTH MQ$:" 620 PRINT : HTAB 8":" 630 PRINT MID$(M$, M * 3 - 2, 3),":8:"1900 + Y" 3" 640 PRINT : PRINT "QQ$"SUN MON TUE WED":8:"THU FRI SAT"QQ$" : PRINT":" 680 RETURN"::21700:" THE CALENDAR TITLE REQUIRES THE NAME":"OF THE MONTH AND THE YELINE 570. CLOSE THE LOOP.":21000::" LINE 580. PRINT 2 BLANK LINES AND":"RETURN.":21600:21100:DE1:DM7:30000R2U10:"PRINT TITLE SUBROUTINE"::" 600 REM PRINT CALENDAR TITLE":" 610 M$ = "QQ$"JANFEBMARAPRMAYJUNJULAUG":8:"SEPOCTNOVDEC"QDEN BOOK COMPANY, INC."::11:"ALL RIGHTS RESERVED":23:11:"PRESS THE SPACE BAR":21600:21100:o932760921200:11:7:90:"E N D O F L E S S O N ":255:20:(4);"RUN MENU"9255:x"5) ESCAPE TO LET'S TALK".8x"6) SURPRISE"@8x"7) SUMMARY"c8yDMĺ:"YOU ARE IN SECTION "DMi8y8~" HOW TO PROGRAM IN APPLESOFT(TM) BASIC"::7:"SCOTT BANKS & JAMES S. COAN"::21700:DM0:30800c9~10:17:"COPYRIGHT (C) 1982 BY"::8:"HAY21,3821<7vAN3975,3947,3947,3947,3947,4024,3947,3947,3947q7 vAN4164,4080,4080,4080,4080,4080,4122,4080,42277Px:15:"LESSON ZERO":7ax"1) INTRODUCTION"7rx"2) GROCERY LIST"7x"3) HOW TO ANSWER QUESTIONS"7x"4) NEED HELP? ENTER '0'"8MAXIMUM:"::5:"M = (N1 + N2 + ABS(N1 - N2)) / 2":21600:21100:DE1:DM2:30000%7:"THE GREATEST INTEGER IS INT()"::" INT(X) RETURNS THE INTEGER PORTION OF":"THE VALUE X."::"FOR EXAMPLE, INT(3.4) EQUALS 3."::"INT(6) IS SIMPLY 6.":21000::""3: = ( 3 - 9 ) / 2":21000::"4: = ( -6 ) / 2":21000::"FINALLY, M = -3":21100Q" THE ABOVE FORMULA WILL FIND THE":"MINIMUM OF N1 AND N2.":21000::" ANOTHER USE OF ABS() ENABLES US TO":"FIND THE " M IS CALCULATED BY EVALUATING LINE 20":"AFTER REPLACING N1 AND N2 WITH 6 AND -3.";::"THE RESULT IS -3.":21100:"HERE'S THE ARITHMETIC:"::"1: M = (6 + (-3) - ABS(6 - (-3))) / 2":21000:O"2: = ( 3 - ABS( 9 )) / 2":21000::LLER OF THE TWO IS ALWAYS THE":"ANSWER.":" THIS FORMULA PRODUCES THE 'MINIMUM' OF";:"TWO INTEGERS.":21000::" WE'LL DO THE SAME PROBLEM WITH OTHER":"NUMBERS...":21100:" IF N1 = 6 AND N2 = -3, WHAT IS THE":"VALUE OF M?"::21700:21000 ) / 2":21000::"FINALLY, M = 2":21600:21100:DE6:30000_L"YOU GOT IT!":21600:21100+h" 20 M = (N1 + N2 - ABS(N1 - N2)) / 2"::21700:"THERE'S MORE TO THIS THAN MEETS THE EYE.";:21000::" FOR EVERY PAIR OF VALUES, N1 AND N2,":"THE SMA"AFTER REPLACING N1 AND N2 WITH 2 AND 5.":21100:"HERE'S THE ARITHMETIC:"::"1: M = (2 + 5 - ABS(2 - 5)) / 2":21000::"2: = ( 7 - ABS( -3 )) / 2":21000:>"3: = ( 7 - 3 ) / 2":21000::"4: = ( 4 BS().":21100W" 20 M = (N1 + N2 - ABS(N1 - N2)) / 2"::" IF N1 = 2 AND N2 = 5, WHAT IS THE":"VALUE OF M?"::21700:"1) 2 2) 5 3) 7 4) 3";::DQ1:NR5:24000"INCORRECT.":" M IS CALCULATED BY EVALUATING LINE 20":AY TO FIND THE ABSOLUTE":"VALUE WITHOUT USING ABS().":21000: "LINE 20 IS ALL IT TAKES."::"IF N IS NEGATIVE, ITS SIGN IS CHANGED."::" AS YOU CAN SEE, THE ABS() FUNCTION IS":"REALLY JUST A CONVENIENCE.":21000::"LET'S SEE A PRACTICAL USE OF A (OR":" ZERO), THEN SIMPLY RETURN THE INPUT":" VALUE."::"2) IF THE INPUT VALUE IS NEGATIVE, THEN"?" REVERSE THE SIGN AND RETURN THE":" RESULT.":21600:21100:" 10 INPUT N":" 20 IF N < 0 THEN N = -N":" 30 PRINT N"::" HERE'S A WHAT 'GOES INTO' ABS(),":"WE CAN PREDICT WHAT 'COMES OUT'."::" EVERY FUNCTION HAS A RULE THAT IT":"APPLIES TO THE INPUT VALUE IN ORDER TO"i~"OBTAIN THE RETURN VALUE.":21100:"THE RULE FOR ABS() IS AS FOLLOWS:"::"1) IF THE INPUT VALUE IS POSITIVE 0"::21000:" NOTICE THAT THE 5 APPEARS, JUST AS IT":"WAS INPUT TO THE ABS() FUNCTION."::" THE COMPUTER PRINTED A 3 BECAUSE THAT":"IS THE DEFINITION OF THE ABSOLUTE VALUE" 8"OF -3."::"FOR ABS(0), 0 WAS DISPLAYED.":21000::" FOR ANYTHING T NUMBER IS PASSED AS AN":"ARGUMENT, THE SIGN IS CHANGED TO PLUS":"AND THE POSITIVE NUMBER IS RETURNED.":21000::"FINALLY, ABS(0) IS EQUAL TO ZERO."::"THIS FUNCTION IS NAMED 'ABSOLUTE VALUE'.";:21100 " ]RUN":" 5 3 RS";:"WITHIN PARENTHESES.": {" THIS IS A NUMERIC VALUE THAT ACTS AS":"AN INPUT TO THE FUNCTION.":21000::" IF THE ARGUMENT PASSED TO ABS() IS":"POSITIVE, THE VALUE OF THE FUNCTION IS":"THE VALUE OF THE ARGUMENT.":21000: " IF A NEGATIVEUCES A RESULT."::"ABS() IS A FUNCTION.":21000::"HERE'S A WAY TO USE IT:":21100 5" 10 PRINT ABS(5), ABS(-3), ABS(0)"::21700:" ABS() IS A PREDEFINED PROCESS THAT":"CALCULATES ABSOLUTE VALUE.":21000::" THE 'ARGUMENT' OF THE FUNCTION APPEAF 20992MM78d::255:QQ$(34):768,160:769,0:770,76:771,44:772,254:2120032500:DM1:DE1:30000(222)255Ĭ T 9:"ABS() - A SIMPLE FUNCTION"::" A FUNCTION TAKES A VALUE, FOLLOWS A":"SET OF RULES, AND PROD                         ROLLED THE DICE...":21100:DE1:30000'"NICE GOING!":21000::" YOU MAY REALIZE THAT BOTH CHOICE (3)":"AND (4) ARE CORRECT ANSWERS."::" THEY BOTH PRODUCE INTEGERS IN THE":"RANGE 1 TO 13, INCLUSIVE.":21000::" WE CAN LET 1 REPRESENT THE ACE, :DE2:30000%h" RND(1) PRODUCES RANDOM NUMBERS WHICH":"ARE >= 0 BUT ALWAYS < 1.":21000::"THERE ARE 13 PLAYING CARDS IN A SUIT."::" WE ARE AIMING TO HAVE THE COMPUTER":"GENERATE A RANDOM NUMBER FROM 1 TO 13.":21000:&&"LET'S REVIEW HOW WE ... ALMOST."::" THIS FORMULA RETURNS A NUMBER THAT IS":"GREATER THAN OR EQUAL TO 1, BUT LESS":"THAN 14.":21000::" THE NUMBER WOULD RARELY BE AN INTEGER,";:"AND CONSEQUENTLY NOT ALWAYS USEFUL.": %S"IT'S BETTER TO PRODUCE INTEGERS HERE.":21100 = INT(RND(1) * 13 + 1)"::DQ3:NR5/# 24000# "NO.":21000::" THE VALUE OF THE POSITIVE ARGUMENT, 13";:"IN THIS CASE, DOESN'T MATTER."::" C WILL ALWAYS BE ZERO BECAUSE EVERY":"RANDOM NUMBER WILL BE LESS THAN 1.":21100:DE2:30000$"WELLHE RND()";:"FUNCTION TO ADD VARIETY AND FAIRNESS.":21600:21100$#^ " CHOOSE THE FORMULA WHICH WILL APPEAR":"TO "QQ$"DEAL"QQ$" A CARD FROM ACE TO KING."::"1) C = INT(RND(13))"::"2) C = RND(1) * 13 + 1"::"3) C = INT(RND(1) * 13) + 1"::"4) CUMBER WILL BE":"EITHER 0, 1, 2, 3, 4, OR 5.":21000::" ADDING ONE GIVES US A NUMBER THAT IS":"IN THE RANGE 1 TO 6.":21100A"& " IN ADDITION TO THE MANY GAME PROGRAMS":"AVAILABLE, YOU CAN WRITE YOUR OWN.":21000::" NEARLY ALL GAME PROGRAMS USE TER FROM 1 TO 6.";::" RND(1) RETURNS A VALUE WHICH IS":"GREATER THAN OR EQUAL TO ZERO, BUT LESS":"THAN ONE.":21000::" MULTIPLYING BY 6 RESULTS IN A NUMBER"! "WHICH IS GREATER THAN OR EQUAL TO 0, BUT";:"LESS THAN 6."::" THE INTEGER OF THIS N1000:" ]RUN":" 3 4":i 21700:21000:" THIS PROGRAM USES RND() TO SIMULATE":"THE ROLLING OF DICE.":21000::"ONE MORE LINE AND WE'LL OPEN A CASINO!":21100:" LINE 20 IS A FORMULA THAT TRANSFORMS" "THE RND() VALUE TO A NUMB RND() WITH A NEGATIVE INPUT":"ESTABLISHES A REPEATABLE PATTERN.":21000:) " FOR NOW, WE WILL ONLY USE RND() WITH A";:"POSITIVE VALUE. WE WILL USE 1.":21600:21100:" 10 FOR K = 1 TO 2":" 20 PRINT INT( RND(1) * 6 ) + 1,":" 40 NEXT K"::2 WE HAVE USED 1 FOR THE ARGUMENT OF THE";:"RND() FUNCTION."::" ANY POSITIVE VALUE WOULD HAVE THE SAME";K "EFFECT - TO RETURN A RANDOM NUMBER.":21000::" RND(0) IS SPECIAL - IT RETURNS THE":"LAST VALUE PRODUCED BY AN RND().":21000::" CALLINGRND(1)":" 30 NEXT K"::21700:" FIVE RANDOM NUMBERS WILL BE DISPLAYED":"BY THIS PROGRAM.":21000::" ]RUN":K15:4);(1)::k " DIFFERENT NUMBERS ARE PRINTED EVERY":"TIME THE PROGRAM IS RUN BECAUSE THESE":"NUMBERS ARE RANDOM.":21100:" " IF X REPRESENTS MONEY, WE HAVE ROUNDED";:"X TO THE NEAREST PENNY."::" ONE OF THE CHIEF USES OF INT() IS TO":"PERFORM ROUNDING CALCULATIONS.":21600:21100:DE1:DM3:30000' 9:"RANDOM NUMBERS FROM RND()"::" 10 FOR K = 1 TO 5":" 20 PRINT "2: INT( 564.7 + .5) / 100":21000: "3: INT( 565.2 ) / 100":21000::"4: 565 / 100":21000::"5: 5.65"::"THIS SORT OF GIVES IT AWAY, EH?":21600:21100:DE2:30000 "WELL DONE."::NE, SO":"NO ERROR WILL RESULT."::"STEP THROUGH THE FORMULA IN DETAIL.":21600:21100:DE2:30000s+ "WRONG.":.@ " LET'S PERFORM EACH STEP OURSELVES IN":"THE SAME WAY THE COMPUTER WOULD...":21100:"1: INT(5.647 * 100 + .5) / 100":21000::RSE." 21100 " PRINT INT(X * 100 + .5) / 100"::"FOR X = 5.647, WHAT WILL BE DISPLAYED?"::21700:"1) 5 3) 5.65"::"2) 5.64 4) AN ERROR MESSAGE"::DQ2:NR5:24000c "WRONG."::" THERE IS NO PROBLEM WITH THE LI THE RESULT OF INT(X) IS ALWAYS THE"= "LARGEST INTEGER NOT GREATER THAN X."::"THUS, INT(-4.33) EQUALS -5.":21000::" IT ISN'T -4 BECAUSE -4 IS GREATER THAN";:"-4.33."::"-5 IS THE GREATEST INTEGER THAT WORKS.":21000::"INT(-12) IS -12, OF COUIT TURNS OUT THAT THE 'THEN' PART IS":"EXECUTED IF X IS NON-ZERO."::"SINCE X IS 1, LINE 30 PRINTS 'HELLO'.":21100:"LINE 30 ABOVE ACTS JUST AS:"::" 30 IF T < T1 THEN PRINT "QQ$"HELLO"QQ$:7" THE 'IF' STATEMENT TREATS THE VALUE OF";:"X IN THE HELLO"::21700:210005" AT LINE 20, X TAKES THE VALUE OF":"'T < T1'."::"BECAUSE 'T < T1' IS TRUE, X BECOMES 1.":21000::"THE 'IF...THEN' LOOKS DIFFERENT SOMEHOW!";:21000::" RATHER THAN A LOGICAL EXPRESSION, ALL":"WE SEE IS X.":6I" 1000::"'T = T1' IS FALSE, SO ITS VALUE IS ZERO.";:21000:5" THE THIRD NUMBER IS ALSO ZERO BECAUSE":"THE LAST LOGICAL EXPRESSION IS FALSE.":21100:" 10 T = 5 : T1 = 23":" 20 X = T < T1":" 30 IF X THEN PRINT "QQ$"HELLO"QQ$::" ]RUN":" T1, T > T1"::" ]RUN":" 1 0 0"::"NOTICE THAT THREE NUMBERS ARE PRINTED.":21000:<4[" THE FIRST NUMBER IS THE VALUE OF THE":"EXPRESSION 'T < T1'."::" THIS EXPRESSION IS TRUE AND THEREFORE":"A ONE IS PRINTED.":2L EXPRESSION HAS A NUMERIC";:"VALUE ASSOCIATED WITH IT.":21000::" IF THE LOGICAL EXPRESSION IS TRUE,":"THIS VALUE IS 1."::" IN THE EVENT THE EXPRESSION IS FALSE,"u3"ITS VALUE IS ZERO.":21100:" 10 T = 5 : T1 = 23":" 20 PRINT T < T1, T = ED IN THIS"1"CASE TO PRODUCE THE EFFECT DESCRIBED.":21000::" NOTE THAT YOU MAY USE PARENTHESES AT":"ANY TIME IF YOU FEEL THEY IMPROVE":"READABILITY OR ILLUSTRATE YOUR PURPOSE.":21100:DE1:DM6:30000214:"LOGICAL VALUES"::" EVERY LOGICA" HERE THE ENTIRE EXPRESSION IS TRUE IF" 1<"TWO CONDITIONS ARE MET.":21000::" THE FIRST CONDITION IS THAT X MUST BE":"NON-ZERO.":21000::" THE SECOND CONDITION IS SATISFIED IF":"T EQUALS T2 OR IF T EQUALS T3."::" THE PARENTHESES ARE REQUIR'AND' & 'OR'."::" THE RELATIONAL OPERATORS USED HERE ARE";:"'<>' AND '>'."*021100:" 10 IF X <> 0 AND (T = T2 OR T = T3)":7:"THEN 40"::21000:" PARENTHESES MAY BE USED TO ALTER THE":"SEQUENCE OF OPERATION TO GIVE ANY RESULT";:"DESIRED.":::" IN THE LINE ABOVE, THE EXPRESSION IS":"TRUE IF X IS NON-ZERO."::" IT WOULD ALSO BE TRUE IF N1 WAS"N/"GREATER THAN N2 AND N2 GREATER THAN N3.":21000::" NOTE THAT IN ANY EVENT, THE RELATIONAL";:"OPERATORS ARE ALWAYS PROCESSED BEFORE":"THE R N1 > N2 AND N2 > N3":7:"THEN 40"::" LIKE THE ARITHMETIC '+' AND '*'":"OPERATIONS, THE ORDER OF EXECUTION IS":"GOVERNED BY DEFINITE RULES."k.j21000::"ALL 'AND' OPERATORS ARE APPLIED FIRST."::"THEN ANY 'OR' OPERATIONS ARE PERFORMED.":21000:OF THE":"TWO CONDITIONS ARE REQUIRED FOR 'THEN'":"TO EXECUTE.":21000::"IF BOTH ARE TRUE, THAT'S OK."::"BUT, ONE IS SUFFICIENT.":21000::" YOU CAN USE 'AND' & 'OR' FREELY TO"-2"MAKE ANY NEEDED COMPOUND LOGICAL TEST.":21100:" 10 IF X <> 0 OTWO OR"+"MORE LOGICAL EXPRESSIONS."::" THEY MUST ALL BE TRUE IN ORDER FOR THE";:"ENTIRE EXPRESSION TO BE TRUE.":21100:" 10 IF N1 > N2 OR N2 > N3 THEN 40"::"RATHER THAN 'AND', 'OR' IS USED HERE.":21000:," JUST AS 'OR' IMPLIES, EITHER TED."::"IF FALSE, THE 'THEN' SECTION IS SKIPPED.";:21100+Y" 10 IF N1 > N2 AND N2 > N3 THEN 40"::" NOW TWO LOGICAL EXPRESSIONS ARE":"TESTED."::" BOTH MUST BE TRUE FOR THE 'THEN' TO":"TAKE EFFECT.":21000::" 'AND' MAY BE USED TO SEPARATE TO TRUTH."::"EXPRESSIONS ARE EITHER TRUE OR FALSE.":21000::"FOR EXAMPLE,"::" 10 IF N1 > N2 THEN 40":;*"IS CONCERNED WITH THE TRUTH OF THE":"EXPRESSION 'N1 > N2'.":21000::" IF THIS LOGICAL EXPRESSION IS TRUE,":"THE 'THEN' CLAUSE IS EXECU THE -1 IS RETURNED.":21000:(" THE 0 IS RETURNED ONLY IN THE EVENT OF";:"A ZERO INPUT.":21000::"FOR POSITIVE NUMBERS, SGN() RETURNS 1.":21100:DE1:DM5:30000n)11:"THE LOGICAL OPERATORS"::" IN PROGRAMMING, THE TERM 'LOGICAL'":"REFERS 2-10"L'"BE THEMSELVES, AND 11-13 BE FACE CARDS.":21100:DE1:DM4:30000(312:"THE SGN() FUNCTION"::" SGN() RETURNS ONE OF THE FOLLOWING":"THREE VALUES:"::14:"-1 0 1"::21000:" IF THE ARGUMENT OF THE SGN() FUNCTION":"IS NEGATIVE,(16336)::KK27Č958:SW(34):SV(37)1:60,0:61,4:62,255:63,7:66,0:67,82:768^FZuF]DQ$"YOUR CHOICE?"F]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020F]1:868:27:IN$" NOT VALID";:25200:24010G]AN(IN$)47:AN1ANNR24012020E,VIN$IN$(KK):220202EYII6000:16368,0[EYIIII1:KK(16384)128:KK023100iEYII23010EZTH(36)1:TV(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:23010EY"AN EXPRESSION, PARENTHESES MUST BE USED.";:21600:21100?n" 10 IF X <> 0 THEN...":" 20 IF X THEN...":" 30 IF X = 0 THEN...":" 40 IF NOT X THETHING ELSE.":21100:" IF THE PARENTHESES WERE OMITTED, WE":"WOULD HAVE THIS:"::" 40 IF NOT X = Y THEN..."::21000:"WHICH WOULD ACT LIKE:":]>" 40 IF (NOT X) = Y THEN..."::21000:"AND THIS DOES SOMETHING VERY DIFFERENT.":21000::" 'NOT' $:<21700:" LINE 30 AND LINE 40 BEHAVE IN EXACTLY":"THE SAME MANNER."::" THE 'NOT' REVERSES THE LOGIC OF THE":"RELATIONAL COMPARISON.":21000::"WE MUST USE THE PARENTHESES IN LINE 40.":=" THIS IS BECAUSE 'NOT' IS EXECUTED":"BEFORE ANY HAS ANY NON-ZERO VALUE, THEN 0"<3"WILL APPEAR.":21000::"'NOT' ACTS ON A SINGLE VALUE."::" THE ACTION OF 'NOT' IS TO REVERSE THE":"LOGICAL VALUE.":21100:" 30 IF X <> Y THEN PRINT "QQ$"BINGO"QQ$:" 40 IF NOT (X = Y) THEN PRINT "QQ$"BINGO"QQ21100:DE2:30000<:"GOOD WORK.":21100:DE1:DM7:30000 ;12:"THE 'NOT' OPERATOR"::" THERE'S ONE MORE LOGICAL OPERATOR":"WHICH MAY COME IN HANDY.":21000::" 10 PRINT NOT X"::" IF X HAPPENS TO BE ZERO, 1 WILL BE":"DISPLAYED."::" IF XEN EXECUTE.":21000::" 'AND' TIES TOGETHER TWO EXPRESSIONS,":"BUT ONLY ONE EXISTS IN YOUR CHOICE.":21100:DE2:300009v"WRONG."::" TRY REPLACING W1 AND W2 IN THE 'IF'":"WITH THEIR LOGICAL EXPRESSIONS."::"DON'T EVALUATE, JUST SUBSTITUTE.":":" 20 IF W1 AND W2 THEN..."::"REPLACE THE ABOVE WITH ONE OF THESE:"::"1) IF P3 = P5 AND THEN..."::"2) IF P3 = P4 AND P4 = P5 THEN..."::"3) IF P3 <> P4 AND P4 <> P5 THEN...":8)DQ4:NR4:24000y90"INCORRECT."::"THIS STATEMENT WON'T EV SAME WAY IT HANDLES 'T < T1'.":21000::" X HAPPENS TO BE SET BY THE RESULT OF A";:"RELATIONAL EXPRESSION."::" THE 'IF' DOESN'T CARE HOW X GETS"7"ASSIGNED, IT JUST TRIGGERS ON NON-ZERO.":21600:211008" 10 W1 = (P3 = P4) : W2 = (P4 = P5)32ĺ(7);:21020!E0R1:958:1ElRSL3:21010EER:JJ1330::QE`T34,0:aET34,(37):wEUIN$"":IH(36)1EVIN$;::(32((IN$)3));::" ";:IH:23000:KK27İ25000:22000E VKK13Č958:IN$;:FVKK8IN$(IN$,1,(IN$)((IN$)0) NORMALLY"::"2) LOAD THE WORKING CALENDAR PROGRAM SO":" THAT YOU MAY EXPERIMENT YOURSELF."::DQ1:NR3:24000D:216,0:(4);"RUN CALENDAR PROGRAM"DDE1:DM10:30000DRSL2DR18:": : :";:SH(36)1DR23000:KK27İ25000:21020E&RKKADINGS ARE DESIRED.":21000::" WE MIGHT NEED TO LOOK AT ALL THE":"MONTHS OF MARCH FOR A RANGE OF YEARS.":21000::"YOU MAY HAVE SOME IDEAS OF YOUR OWN.":21100rD"THIS IS THE END OF THE LESSON.":21000::"WOULD YOU LIKE TO:"::"1) END THIS LESSONENDAR GENERATION PROGRAMS.":BA" WE COULD EMPLOY SUBROUTINE 300, THE":"CALCULATION ROUTINE, IF WE NEED ONLY THE";:"STARTING AND ENDING DAYS OF A MONTH.":21000::" WE COULD MODIFY OR DISPOSE OF THE":"TITLE PRINTING SUBROUTINE IF SPECIAL"Cr"HE":"DISPLAY AN ENTIRE YEAR."::" SINCE THE COMPLEX CALENDAR PRINTING"B "SUBROUTINES ARE AVAILABLE AND FLEXIBLE,":"THIS MODIFICATION IS EASY.":21600:21100:" THE SUBROUTINES WE HAVE DEVELOPED HERE";:"ARE NOW AVAILABLE FOR USE IN ANY FUTURE":"CAL00:" 100 REM GET YEAR":" 120 INPUT "QQ$"YEAR"QQ$",Y":" 130 Y = INT(Y)":" 160 IF Y<0 OR Y>99 THEN 120":" 180 RETURN":GA" THIS VERSION OF THE 100 ROUTINE ONLY":"ACCEPTS A VALUE FOR Y.":21000::" HERE ARE ALL THE CHANGES REQUIRED TO REM PRINT CALENDAR":5:"50 NEXT M":5:"90 END"::21700:"THIS IS THE NEW MAIN ROUTINE.":21000::" THE MAJOR EFFORT HERE IS THE ADDITION":"OF THE MONTH LOOP.":@" THE YEAR(Y)IS SET BY 'GOSUB 100', THEN";:"ALL TWELVE MONTHS ARE PRINTED.":211 VERSION THAT LOOPS THRU ALL":"12 MONTHS.":21000:> " ALSO, WE MUST MODIFY THE INPUT ROUTINE";:"SO THAT IT REQUESTS 'YEAR' ONLY.":21000::"LET'S TRY IT...":21100:5:"10 GOSUB 100 : REM GET YEAR":5:"30 FOR M = 1 TO 12"?E5:"40 GOSUB 200 :3:11:"PRESS THE SPACE BAR":21600:21100:8N32760N21200:11:7:90:"E N D O F L E S S O N ":255:20:(4);"RUN MENU"N255:bOPERATOR",MyDMĺ:"YOU ARE IN SECTION "DM2MyM~" HOW TO PROGRAM IN APPLESOFT(TM) BASIC"::7:"SCOTT BANKS & JAMES S. COAN"::21700:DM0:30800,N~10:17:"COPYRIGHT (C) 1982 BY"::8:"HAYDEN BOOK COMPANY, INC."::11:"ALL RIGHTS RESERVED":2,6397,6110&LPx:14:"LESSON SEVEN":JLax"1) ABS() - A SIMPLE FUNCTION"rLrx"2) THE GREATEST INTEGER IS INT()"Lx"3) RANDOM NUMBERS FROM RND()"Lx"4) THE SGN() FUNCTION"Lx"5) THE LOGICAL OPERATORS"Lx"6) LOGICAL VALUES" Mx"7) THE 'NOT' 31(K@uDE4801,5333,5424,5494,5515,5564IKAuDE5592,5998,6110,6131,6397oKuDQ30211,30212,30213,30214,30215KvAN1714,1868,1693,1693,1693KvAN2624,2603,2603,2778,2533KvAN3688,3513,3590,3786,3786KvAN5515,5424,5564,5494 LvAN6131,6110E OF THE SECTIONS":25200:25005>JHqSV0:SLġ:SLSL1:29000vJ0uDM30011,30012,30013,30014,30015,30016,30017,32700J;uDE1000,1623,1693,1714,1868,1896JuDE3891K?uDE40:"S ... SELECT NEXT SECTION DESIRED"::"Q ... QUIT THIS LESSON":IpbJJ115:II(16336)(16336)(16336)(16336)::Ixi30800::"WHICH SECTION? ";:22000:(IN$)127020IiII(IN$)48:II0IIMMİ21200:DMII:DE1:29000 Ji::"NOT ONT"IN$"t"İ30800:250053HaIN$"S"IN$"s"27000NHaIN$"Q"IN$"q"32700`Ha25200:25000H>b" OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::"C ... CONTINUE FROM WHERE YOU LEFT OFF"CIHb:"T ... TABLE OF CONTENTS FOR THIS LESSON":G]::30200(Ga21600:21200:25150OGa22:"LET'S TALK - YOUR OPTION? ";hGa22000:IN$""25000GaIN$(IN$,1):21200:IN$"R"IN$"r"DE1:29000GaIN$"C"IN$"c"Ĺ34,SW:SH:SV:60,0:61,82:62,255:63,85:66,0:67,4:768:SV0:HaIN$"ORANCE IS BLISS"QQ$:" 20 B$ = "QQ$"LOVE IS BLIND"QQ$:" 30 PRINT LEFT$(B$,8);":" 40 PRINT RIGHT$(A$,5); "QQ$", TOO"QQ$::21700:"WHAT WILL THIS PROGRAM DISPLAY?"::"1) LOVE IS BLISS, TOO":"2) IGNORANCE IS BLIND, TOO"::"3) LOVE IS TOO BLIN"QQ$:21100:"LINE 130 IS AN EXAMPLE OF RIGHT$()."::" IT PERFORMS SIMILARLY TO LEFT$() BUT""USES CHARACTERS FROM THE RIGHT END."::" WE HAVE SUPPLIED 3 FOR THE NUMERIC IN":"ORDER TO PRODUCE: "QQ$"SAT"QQ$:21600:21100:" 10 A$ = "QQ$"IGN:"THE FIRST ARGUMENT IS THE SOURCE STRING.";::" THE SECOND ARGUMENT IS THE NUMBER OF":"THE FIRST CHARACTER TO CONSIDER.":21000:_"THE FINAL NUMBER TELLS HOW MANY."::" IN THIS CASE, WE BEGIN AT CHARACTER 4":"AND PRODUCE 3 CHARACTERS: "QQ$"MOHARACTERS";:"OF A$ ARE DISPLAYED: "QQ$"SUN"QQ$:21000::" THE MID$() AND RIGHT$() FUNCTIONS ALSO";:"ARE USED TO BREAK OFF PIECES OF STRINGS.";::"LET'S SEE HOW THEY WORK...":21100" IN LINE 120, REFER TO THE MID$() WHICH";:"USES 3 ARGUMENTS.":Q$"SUNMONTUEWEDTHUFRISAT"QQ$" 110 PRINT LEFT$(A$,3)":" 120 PRINT MID$(A$,4,3)":" 130 PRINT RIGHT$(A$,3)"::" ]RUN":" SUN":" MON":" SAT"::21700:21000:"LINE 100 ASSIGNS A STRING TO A$.":Z" AT LINE 110, THE LEFTMOST 3 CE DISPLAYED.":21000::QQ$"CONNECT"QQ$" IS THE OUTPUT OF THE LEFT$().":" LEFT$(A$,N) RETURNS THE LEFT PART OF":"A$, FROM CHARACTER 1 TO CHARACTER N."::" BY SPECIFYING N, YOU TELL APPLESOFT":"WHERE TO BREAK THE STRING.":21100:" 100 A$ = "QTRINGS."::" THE LEFT$() FUNCTION REQUIRES TWO":"ARGUMENTS: A STRING AND A NUMERIC."::"THE RESULT IS A STRING.":21000:I" ]PRINT LEFT$("QQ$"CONNECTICUT"QQ$",7)":" CONNECT"::" THE FIRST 7 CHARACTERS OF THE STRING":QQ$"CONNECTICUT"QQ$" ARETWEEN THE QUOTES.":21000::"LINE 50 IS EXACTLY THE SAME AS LINE 30."::" IT PRODUCES A DIFFERENT RESULT BECAUSE";"H7$ HAS CHANGED.":21600:21100:DE1:DM2:30000};13:"BREAKING STRINGS"::" APPLESOFT ENABLES US TO DEAL WITH":"PIECES OF SRUN":" ABCDEFGHI":" ABCGHI"::21700:21000:"FIRST, H7$ STORES 'DEF'."::" WHEN LINE 30 PRINTS, H7$ HELPS TO FORM";:"THE BEGINNING OF THE ALPHABET."v21100:"AT LINE 40, H7$ IS REDEFINED."::"IT BECOMES A NULL STRING."::"THERE IS NOTHING BRTANT FEATURE."::" THE TERM 'NULL STRING' APPLIES TO ANY":"STRING WITH A LENGTH OF ZERO.":21100:" 20 H7$ = "QQ$"DEF"QQ$:" 30 PRINT "QQ$"ABC"QQ$"; H7$; "QQ$"GHI"QQ$:" 40 H7$ = "QQ$QQ$~" 50 PRINT "QQ$"ABC"QQ$"; H7$; "QQ$"GHI"QQ$::" ] 20 PRINT K1$; A7": " THE CHARACTERS OF THE STRING MUST BE":"ENCLOSED WITHIN QUOTES.":21000::"MAXIMUM STRING SIZE IS 255 CHARACTERS."::"THE MINIMUM LENGTH IS ZERO.":21000::" THE FACT THAT A STRING MAY HAVE A ZERO"; F"LENGTH IS AN IMPOBLE."::" STRING VARIABLE NAMES MUST END WITH A" "DOLLAR SIGN ($).":21000::"SOME EXAMPLES OF STRING VARIABLES:"::" K1$ X$ T5$ R$ A9$"::"WE READ K1$ AS "QQ$"KAY ONE DOLLAR."QQ$:21100:" 10 K1$ = "QQ$"THE ANSWER IS "QQ$:" 100:" STRING VARIABLES STORE STRINGS JUST AS";:"NUMERIC VARIABLES STORE NUMBERS.":2 t" OF COURSE, WE CANNOT DO ARITHMETIC":"DIRECTLY ON STRING VALUES.":21000::" THE APPLE CAN STORE A STRING, SUCH AS":QQ$"THE ANSWER IS "QQ$", IN A STRING VARIAAND EVEN SENTENCES."::" IN BASIC, A COLLECTION OF LETTERS AND":"OTHER SYMBOLS IS CALLED A 'STRING'.":21000:V ."WE HAVE ALREADY USED STRINGS:"::" 10 PRINT "QQ$"THE ANSWER IS "QQ$"; A7"::" ANYTHING ENCLOSED IN QUOTES DEFINES A":"STRING.":21sH 20992MM88d::255:QQ$(34):768,160:769,0:770,76:771,44:772,254:2120032500:DM1:DE1:30000(222)255Ĭ q 10:"INTRODUCTION TO STRINGS"::" THE APPLE CAN DO WONDEROUS THINGS WITH";:"CHARACTERS, WORDS,                          L-G, WHICH SOUNDS THE BELL, HAPPENS";:"TO BE 7.":21100:" 10 R$ = "QQ$"CATS ARE NICE"QQ$:'S" 20 PRINT ASC(R$), ASC(MID$(R$,2,1))"::"THIS PROGRAM DISPLAYS TWO NUMBERS."::" ASC() RETURNS THE ASCII VALUE OF THE":"FIRST CHARACTER IN THE STRING."FOR EXAMPLE, THE CODES FOR THE":"NUMERALS "QQ$"0"QQ$" THROUGH "QQ$"9"QQ$" ARE 48 TO 57."::" THE CODES FOR THE LETTERS "QQ$"A"QQ$" THROUGH"\& QQ$"Z"QQ$" ARE 65 TO 90.":21000::" EACH CHARACTER ON THE APPLE KEYBOARD":"HAS A UNIQUE CODE."::" CTR" ASC() TELLS US THE INTERNAL CODE WHICH";:"THE APPLE USES TO REPRESENT CHARACTERS."::" THIS CODE IS CALLED 'ASCII' AND IS A":"STANDARD USED BY COMPUTERS EVERYWHERE.":% " NORMALLY, WE WILL USE VALUES IN THE":"RANGE OF 0 TO 127.":21000::" TRING, THE LENGTH IS ZERO."::" ]H3$ = "QQ$QQ$:" ]PRINT LEN(H3$)":" 0"::21000:" LEN() IS A FUNCTION THAT ACCEPTS A"#z "STRING AND RETURNS A NUMERIC VALUE FROM":"0 TO 255.":21100:DE1:DM5:30000$ 6:"THE ASC() AND CHR$() FUNCTIONS"::DESIRABLE TO KNOW HOW MANY";:"CHARACTERS A STRING CONTAINS."::"THIS IS DONE WITH THE LEN() FUNCTION.":21000::" ]X$ = "QQ$"ABC123"QQ$:" ]PRINT LEN(X$)":" 6":#& " AS YOU CAN SEE, X$ HAS A LENGTH OF 6":"CHARACTERS.":21000::"FOR A NULL SY WILL SHOW "QQ$"3"QQ$" IMMEDIATELY":"FOLLOWED BY "QQ$"4"QQ$".":! "LET'S REVIEW STRING CONCATENATION...":21100:DE1:30000! "HURRAY!"::"THAT IS EXACTLY WHAT WILL HAPPEN.":21100:DE1:DM4:30000" 12:"THE LEN() FUNCTION"::" IT IS OFTEN ":21000::" THE '+' IN LINE 30 IS AN INSTRUCTION":"TO JOIN A$ AND V8$."::"NOW TRY IT..":21100t ? DE2:30000B!F "A$ IS "QQ$"3"QQ$" AND V8$ IS "QQ$"4"QQ$"."::" THE '+' IN LINE 30 IS AN INSTRUCTION":"TO JOIN A$ AND V8$.":21000::" THE DISPLANE 30 IS AN INSTRUCTION":"TO JOIN A$ AND V8$."::"THE '+' SIGN IS NOT DISPLAYED.":21000::"TRY IT AGAIN...":21100:DE2:30000d "WRONG."::" CLEARLY, YOU TOOK THE '+' SIGN TO MEAN";:"ARITHMETIC ADDITION."::"WITH STRINGS, '+' DOESN'T MEAN THIS.211005 " 10 A$ = "QQ$"3"QQ$:" 20 V8$ = "QQ$"4"QQ$:" 30 PRINT A$ + V8$"::"WHAT WILL THIS PROGRAM DISPLAY?"::"1) 3 + 4 2) 34 3) 7"::DQ2:NR4:24000{ "NO."::"A$ IS "QQ$"3"QQ$" AND V8$ IS "QQ$"4"QQ$"."::" THE '+' IN LIHARACTERS";:"AND THE REST CAME FROM "QQ$"COMMUNICATION"QQ$".":21000: " WE CAN CONCATENATE MORE STRINGS AND":"MIX ALL KINDS OF STRING EXPRESSIONS:"::" ]PRINT K1$ + "QQ$" "QQ$" + LEFT$(K2$,3)":11:"+ "QQ$"PUTER"QQ$:21000:" APPLE COMPUTER":"COMMUNICATION"QQ$:" 30 T7$ = LEFT$(K1$,4) + RIGHT$(K2$,7)";:" 40 PRINT T7$"::" HERE WE SEE STRING CONCATENATION USED"G "ALONG WITH LEFT$() AND RIGHT$().":21000::" ]RUN":" APPLICATION"::21000:" "QQ$"APPLE"QQ$" SUPPLIED THE LEFT 4 CTHE PLUS SIGN IS USED TO ACHIEVE THIS,";:"AND DOESN'T MEAN ARITHMETIC ADDITION.":21000::" ]PRINT C$":" OUTSTANDING"::21000:" THE PROCESS OF JOINING STRINGS IS"x "CALLED CONCATENATION.":21100:" 10 K1$ = "QQ$"APPLE"QQ$:" 20 K2$ = "QQ$14:"MAKING STRINGS"::" WE CAN EASILY MAKE A NEW STRING OUT OF";:"TWO OLD STRINGS:"::" 10 A$ = "QQ$"STANDING"QQ$:" 20 B$ = "QQ$"OUT"QQ$:" 30 C$ = B$ + A$"::21000:" IN LINE 30, C$ IS A NEW STRING FORMED"+ "BY JOINING A$ AND B$."::" : "QQ$"BLISS"QQ$::"LINE 40 ALSO DISPLAYS: "QQ$", TOO"QQ$:21000::" SINCE A SEMICOLON IS USED, ALL THE":"OUTPUT APPEARS ON ONE LINE AS:": " LOVE IS BLISS, TOO":21600:21100:DE1:DM3:30000 "CORRECT.":21600:21100:DE1:DM3:30000 PROGRAM AS IT RUNS...":21100:" LINES 10 AND 20 ASSIGN STRING VALUES":"TO BOTH A$ AND B$."::" LINE 30 DISPLAYS THE LEFTMOST EIGHT":"CHARACTERS OF B$: "QQ$"LOVE IS "QQ$:21000:Y " THE FIVE RIGHTMOST CHARACTERS OF A$":"ARE DISPLAYED BY LINE 40ND"::DQ1:NR4:24000c"NO."::"YOU MUST HAVE LEFT CONFUSED WITH RIGHT.":21000::DE5:30000"WRONG."::" WE CAN RULE THIS ONE OUT RIGHT AWAY":"BECAUSE LINE 40 CLEARLY MUST PRINT":QQ$", TOO"QQ$" AT THE END.":21000: "LET'S FOLLOW THIS"THAT DOESN'T START WITH THE LETTER 'Y',":"INSTRUCTIONS ARE PROVIDED.":6" NOTICE HOW THE LEFT$() FUNCTION IS":"USED TO LOOK AT ONLY THE FIRST CHARACTER";:"OF THE RESPONSE STRING.":211007 " 1000 INPUT "QQ$"PURGE OLD DATA? "QQ$"; A$":" 10" 30 PRINT "QQ$"HERE'S HOW TO PLAY..."QQ$:" 40 REM - MORE PRINT STATEMENTS":" 50 REM - ETC..."I6" 90 REM - NOW THE GAME BEGINS..."::" THIS MIGHT BE THE BEGINNING OF A GAME":"PROGRAM.":21000::" IF THE USER RESPONDS WITH ANYTHING":$',":"CAUSING THE 'THEN' TO TAKE EFFECT IF THE";:"STRINGS ARE UNEQUAL."::" THE USE OF THE '<' AND '>' RELATIONAL":"OPERATORS IS ALSO ALLOWED.":21100j5" 10 INPUT "QQ$"NEED INSTRUCTIONS? "QQ$"; X$":" 20 IF LEFT$(X$,1) <> "QQ$"Y"QQ$" THEN 90":00:DE1:DM7:30000313:"STRING COMPARISON"::" WE MAY USE 'IF...THEN' TO COMPARE TWO":"STRINGS."::" THIS WILL DETERMINE WHETHER OR NOT TWO";:"STRINGS ARE IDENTICAL:"::" 30 IF A$ = B$ THEN 200"::210004T" OR WE MIGHT TEST FOR 'A$ <> BOMPT MESSAGE:":2" 10 INPUT "QQ$"ENTER YOUR NAME- "QQ$"; A$":" 20 PRINT "QQ$"HAVE A NICE DAY, "QQ$"; A$":21000::" ]RUN":21700:" ENTER YOUR NAME-":21100:" ENTER YOUR NAME- WILLIAM":210003" HAVE A NICE DAY, WILLIAM":21600:211: "QQ$"; A$":21000::" ]RUN":21700:" ?":21100:" ?THE BOSTON MARATHON":210002_" YOU ENTERED: THE BOSTON MARATHON"::21000:" AS YOU CAN SEE, 'INPUT' WORKS FOR":"STRINGS JUST AS IT DOES FOR NUMERICS.":21000::"WE MAY ALSO INCLUDE A PR ARE GOING TO REVIEW THE ASC()":"AND CHR$() FUNCTIONS...":21600:21100X0DE1:300000"INDEED."::"THAT IS THE RIGHT ANSWER.":21600:21100:DE1:DM6:30000X17:"'INPUT' WITH STRING VARIABLES"::" 10 INPUT A$":" 20 PRINT "QQ$"YOU ENTERED" BECAUSE THE 'PRINT' STATEMENT ENDS":"WITH ';', ALL THE CHARACTERS APPEAR ON":"THE SAME LINE.":21000:H0q"LET'S RUN THE PROGRAM...":21100:" ]RUN":" ABCDEFGHIJKLMNOPQRSTUVWXYZ":::"AS YOU CAN SEE, THE ALPHABET APPEARS.":21000::" NOW WEBY LINE 20."::"WHEN C IS 65, CHR$(65) IS DISPLAYED."::" WE KNOW THAT 65 IS THE ASCII CODE FOR":QQ$"A"QQ$" BECAUSE WE REFERRED TO THE CHART.":21100l/9" AS C INCREASES, THE LETTERS "QQ$"B"QQ$" TO "QQ$"Z"QQ$;:"ARE DISPLAYED AFTER THE "QQ$"A"QQ$::0:21100:DE3:30000-"LET'S STEP THROUGH THE PROGRAM...":21100:" THE 'FOR' LOOP AT LINE 10 CAUSES C TO":"TAKE ON THE VALUES 65 THROUGH 90."::" LINE 20 WILL BE EXECUTED 26 TIMES,":"ONCE FOR EACH VALUE OF C.":21000:."CHR$(C) IS DISPLAYED 00:" BUT, IT IS NOT THE CHARACTER "QQ$"C"QQ$" THAT":"IS DISPLAYED.":-|" RATHER, THE CHARACTER WHOSE ASCII CODE";:"IS THE NUMBER STORED IN THE VARIABLE C.":21000::"26 DIFFERENT CHARACTERS ARE DISPLAYED."::"HERE IS THE QUESTION AGAIN...":2160RODUCES STRING":"CHARACTERS, NOT NUMERIC VALUES.":21000::"GIVE IT ANOTHER TRY.":21600:21100:DE3:30000H,(21700:"WRONG ANSWER."::" THE 'FOR...NEXT' LOOP CAUSES LINE 20":"TO BE EXECUTED 26 TIMES."::"C TAKES ON THE VALUES 65 THROUGH 90.":211= 65 TO 90":" 20 PRINT CHR$(C);":" 30 NEXT C"::21700:"WHAT WILL THIS PROGRAM DISPLAY?"::"1) ABCDEFGHIJKLMNOPQRSTUVWXYZ"::"2) 65 66 67... 88 89 90"::"3) CCCCCCCCCCCCCCCCCCCCCCCCCC"::DQ3:NR4*24000m+"NO."::" THE CHR$() FUNCTION P"ARE SET TO THE STRING "QQ$"A"QQ$"."::" SINCE 65 IS THE ASCII CODE FOR "QQ$"A"QQ$",":"CHR$(65) IS THE SAME THING AS "QQ$"A"QQ$".":21000::" WE HAVE A QUESTION COMING UP - YOU MAY";:"WANT TO GET OUT YOUR ASCII CHART...")k21100*r" 10 FOR C :"CHART IN THE LESSON GUIDE.")(21100(12:"THE CHR$() FUNCTION"::" 10 X$ = "QQ$"A"QQ$:" 20 Y$ = CHR$(65)"::" CHR$() ACCEPTS A NUMERIC ARGUMENT AND":"RETURNS ONE STRING CHARACTER.":21000::" IN THE PROGRAM ABOVE, BOTH X$ AND Y$")3:21000::" SINCE "QQ$"C"QQ$" IS THE FIRST CHARACTER IN"("R$, ASC(R$) EQUALS 67."::" MID$(R$,2,1) IS THE SAME AS "QQ$"A"QQ$", AND":"THE ASC("QQ$"A"QQ$") IS 65.":21000::"67 AND 65 ARE PRINTED.":21000::" WE HAVE INCLUDED AN ASCII CHARACTER"30::F`T34,0:"FT34,(37):8FUIN$"":IH(36)1FVIN$;::(32((IN$)3));::" ";:IH:23000:KK27İ25000:22000F VKK13Č958:IN$;:FVKK8IN$(IN$,1,(IN$)((IN$)0)):22020FV(IN$)3KK33KK126ĺ(7);:22020 G,VIN$IN$THAT IS ASSIGNED TO A$."::" STR$() SIMPLY RETURNS THE SAME STRING":"THAT 'PRINT' DOES.":21100:DE1:DM9:30000|ERSL2ER18:": : :";:SH(36)1ER23000:KK27İ25000:21020E&RKK32ĺ(7);:21020E0R1:958:ElRSL3:21010FR:JJ13ACCEPTS A NUMBER AND RETURNS A":"STRING.":D"IT DOES THE OPPOSITE JOB OF VAL().":21000::" 10 A$ = STR$(45) + "QQ$"3"QQ$:" 20 PRINT A$"::" ]RUN":" 453"::21000:" THE STRING "QQ$"45"QQ$" IS JOINED TO THE"sE"STRING "QQ$"3"QQ$" AND 0"QQ$"."::" VAL() PROCESSES THIS STRING AND FINDS":"THE NUMBER .03 THERE.":21000:,D2" THE LEADING AND TRAILING ZEROES DON'T":"AFFECT THE NUMERIC VALUE IN ANY WAY."::"SO, .03 IS DISPLAYED.":21600:21100:12:"THE STR$() FUNCTION"::" STR$() ANNED."::" VAL() STOPS SCANNING AS SOON AS IT":"HITS THE "QQ$"D"QQ$".":21000::" SINCE NO NUMBERS HAVE BEEN SCANNED UP"WC"TO THIS POINT, THE RESULT IS 0.":21100:" LINE 40 FORMS THE STRING "QQ$"0.030"QQ$" BY":"JOINING "QQ$"0.0"QQ$" AND "QQ$"3HEN":"IT COMES TO THE LETTER "QQ$"D"QQ$".":21000::" THE LETTER "QQ$"D"QQ$" DOESN'T FIT THE PATTERN";:"OF ANY VALID NUMBER."::"SPACES ARE IGNORED BY VAL().":21100~B" LINE 30 COMES UP ZERO BECAUSE THE":"STRING "QQ$" DAYS HATH JUNE30"QQ$" IS SC 30, AND 40."@(21100:" ]RUN":" 30":" 0":" .03"::21700:21000:" LINE 20 CAUSES VAL() TO OPERATE ON THE";:"STRING "QQ$"30 DAYS HATH JUNE"QQ$"."::" VAL() SEES THE "QQ$"30"QQ$" FIRST AND FORMS"A|"THE NUMERIC 30, BUT STOPS SCANNING WN SCANS THE SOURCE":"STRING FOR NUMBERS." @:" IT STOPS SCANNING UPON REACHING THE":"FIRST CHARACTER WHICH DOES NOT FIT THE":"NUMERIC PATTERN.":21000::"LINE 10 ASSIGNS STRING VALUES."::" LET'S SEE HOW VAL() HANDLES THE":"STRINGS IN LINES 20, WE CANNOT ADD THE NUMBER 2 TO THE":"STRING "QQ$"7.5"QQ$".":21100*?" 10 A$ = "QQ$"30"QQ$" : B$ = "QQ$" DAYS HATH JUNE"QQ$;:" 20 PRINT VAL(A$ + B$)":" 30 PRINT VAL(B$ + A$)":" 40 PRINT VAL("QQ$"0.0"QQ$" + A$)"::21700:" THE VAL() FUNCTIOTRING":"AND RETURNS A NUMERIC VALUE."::" 10 N$ = "QQ$"7.5"QQ$:" 20 PRINT VAL(N$) + 2":21000::" ]RUN":" 9.5"::21000C>y" THE VAL() FUNCTION CONVERTED THE":"STRING "QQ$"7.5"QQ$" TO THE NUMERIC 7.5,":"ALLOWING APPLESOFT TO ADD 2."::" TS."::"A GOOD PROGRAMMING HABIT!":21000::" AS A BONUS, THE EXPERIENCED USER IS"<"ALLOWED TO SIMPLY TYPE THE WIDELY USED":"CONVENTION OF 'Y' OR 'N'.":21600:21100:DE1:DM8:30000=13:"VAL() AND STR$()"::" THE VAL() FUNCTION ACCEPTS A STION:":;o" YES OR NO, PURGE OLD DATA?"::" IN THIS CASE, THE USER IS REMINDED":"THAT IT IS A YES/NO QUESTION.":21600:21100:DE2:30000U<"SURE...":21100:"THIS IS A VERY THOROUGH ROUTINE."::" IT IS DESIGNED TO PREVENT UNEXPECTED":"RESUL00004: "NO, BUT IT MAY LOOK HARDER THAN IT IS.":;""HERE'S THE EXPLANATION...":21100:"THE USER IS GIVEN THE OPTION TO PURGE."::" ANY ANSWER STARTING WITH 'Y' OR 'N'":"WILL BE TAKEN AS 'YES' OR 'NO'.":21000::"ANY OTHER RESPONSE ASKS THE QUESED."::" WE DON'T HAVE TO WORRY ABOUT THIS CASE";:"BECAUSE LEFT$(A$,1) WILL ALSO BE NULL."::" SINCE THAT'S NEITHER "QQ$"Y"QQ$" NOR "QQ$"N"QQ$",":"YOU'LL GET ANOTHER CHANCE TO RESPOND.":21000::"TRY THIS QUESTION AGAIN...":21600:21100:DE2:3ITH IT?"::"1) IT'S TOO COMPLICATED TO ANSWER"::"2) THERE'S NO PROVISION FOR NULL INPUT"::"3) NOTHING"::DQ4:NR4824000_9"WRONG ANSWER. THAT DOESN'T MATTER...":21100:" IT IS TRUE THAT A$ WILL BE A NULL":"STRING IF JUST 'RETURN' IS ENTER10 IF LEFT$(A$,1) = "QQ$"Y"QQ$" THEN 1200":" 1020 IF LEFT$(A$,1) = "QQ$"N"QQ$" THEN END":" 1030 PRINT "QQ$"YES OR NO, "QQ$";":" 1040 GOTO 1000"w84" 1200 REM * BEGIN PURGE OF OLD DATA"::21700:"THIS IS PART OF A PROGRAM."::"WHAT IS WRONG WMMİ21200:DMII:DE1:29000NKi::"NOT ONE OF THE SECTIONS":25200:25005lKHqSV0:SLġ:SLSL1:29000K0uDM30011,30012,30013,30014,30015,30016,30017,30018,30019,32700K;uDE1000KuDE2141K?uDE3758K@uDE3884 :"T ... TABLE OF CONTENTS FOR THIS LESSON"::"S ... SELECT NEXT SECTION DESIRED"::"Q ... QUIT THIS LESSON":JpbJJ115:II(16336)(16336)(16336)(16336)::Jxi30800::"WHICH SECTION? ";:22000:(IN$)127020KiII(IN$)48:II0II,255:63,85:66,0:67,4:768:SV0:FIaIN$"T"IN$"t"İ30800:25005aIaIN$"S"IN$"s"27000|IaIN$"Q"IN$"q"32700Ia25200:25000I>b" OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::"C ... CONTINUE FROM WHERE YOU LEFT OFF"qJHb5200:24010.H]AN(IN$)47:AN1ANNR24012=H]::30200VHa21600:21200:25150}Ha22:"LET'S TALK - YOUR OPTION? ";Ha22000:IN$""25000HaIN$(IN$,1):21200:IN$"R"IN$"r"DE1:29000#IaIN$"C"IN$"c"Ĺ34,SW:SH:SV:60,0:61,82:62368,0:SVKK27KK0GFZJJ13:II(16336)(16336)::KK27Č958:SW(34):SV(37)1:60,0:61,4:62,255:63,7:66,0:67,82:768GZG]DQ$"YOUR CHOICE?"G]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020 H]1:868:27:IN$" NOT VALID";:2):220201FV(IN$)3KK33KK126ĺ(7);:22020JF,VIN$IN$(KK):22020`FYII6000:16368,0FYIIII1:KK(16384)128:KK023100FYII23010FZTH(36)1:TV(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:23010GNx"3) MAKING STRINGS"[Nx"4) THE LEN() FUNCTION"Nx"5) THE ASC() AND CHR$() FUNCTIONS"Nx"6) 'INPUT' WITH STRING VARIABLES"Nx"7) STRING COMPARISON"Nx"8) VAL() AND STR$()"OyDMĺ:"YOU ARE IN SECTIuDE4612/MAuDE4864,5130,5270,5389,5410,5536uDE3275L?uDE3478,3814,3954,4059,4136,4290,4563 M@EXT SECTION DESIRED"::"Q ... QUIT THIS LESSON":nKpbJJ115:II(16336)(16336)(16336)(16336)::Kxi30800::"WHICH SECTION? ";:22000:(IN$)127020KiII(IN$)48:II0IIMMİ21200:DMII:DE1:29000Li::"NOT ONE OF THE SECTIONS:25005"JaIN$"S"IN$"s"27000=JaIN$"Q"IN$"q"32700OJa25200:25000J>b" OPTIONS AVAILABLE:"::"R ... REPEAT CURRENT SECTION"::"C ... CONTINUE FROM WHERE YOU LEFT OFF"2KHb:"T ... TABLE OF CONTENTS FOR THIS LESSON"::"S ... SELECT NIa21600:21200:25150>Ia22:"LET'S TALK - YOUR OPTION? ";WIa22000:IN$""25000IaIN$(IN$,1):21200:IN$"R"IN$"r"DE1:29000IaIN$"C"IN$"c"Ĺ34,SW:SH:SV:60,0:61,82:62,255:63,85:66,0:67,4:768:SV0:JaIN$"T"IN$"t"İ308007Č958:SW(34):SV(37)1:60,0:61,4:62,255:63,7:66,0:67,82:768MHZdH]DQ$"YOUR CHOICE?"H]1:DQ$" ";:SL2:SH(36)1:22000:(IN$)124020H]1:868:27:IN$" NOT VALID";:25200:24010H]AN(IN$)47:AN1ANNR24012H]::30200(KK):22020!GYII6000:16368,0JGYIIII1:KK(16384)128:KK023100XGYII23010GZTH(36)1:TV(37)1:24:24:958:25200:"(ARE YOU THERE?)";:25200:TV:TH:II1:23010G