This program implements a 15-question weighted scoring questionnaire to help evaluate whether a particular stock is worth purchasing. The user answers each question by entering a numeric point value directly, covering criteria such as stock price, P/E ratio, trading volume, dividends, broker commission, exchange listed, years in business, and current market conditions. A preliminary question about company deficit status acts as a gating condition — answering “YES” immediately routes to a rejection message. A cumulative score of 27 or more triggers a purchase recommendation, while a lower score outputs a “NOT RECOMMENDED” verdict with “NOT” rendered in inverse video for emphasis. The program uses two shared subroutines (lines 1610 and 1660) to handle point entry and running score display, called in sequence for each of the 15 questions.
Program Analysis
Program Structure
The program is organized into three broad regions: an introduction and preliminary gating question (lines 140–310), the 15-question scoring loop (lines 320–1600), and shared subroutines plus outcome blocks (lines 1610–1800). There is no formal loop construct driving the 15 questions; instead, each question is handled by a block of PRINT statements followed by two GOSUB calls, repeated sequentially from line 360 to line 1510.
Subroutine Design
Two subroutines handle all interactive scoring mechanics:
- Line 1610 — Prints a prompt, accepts a point value into variable
S, adds it to the running totalS1, then clears the screen withCLSbefore returning. - Line 1660 — Prints the current running total
S1with surrounding blank lines, then returns.
These two subroutines are called as a pair after every question, making the pattern highly regular and easy to extend. The CLS at line 1641 clears the screen immediately after input, so the user sees only the running score and the next question — a clean, paged interface.
Gating Logic
The preliminary question (lines 260–310) checks whether the company is in a deficit. Entering 1 (YES) immediately jumps to line 1740 — the rejection subroutine. Entering 0 (NO) advances to the questionnaire. Any other value loops back to line 230 to re-display the preliminary question, providing basic input validation.
Scoring and Decision
The accumulator variable S1 is initialised to zero at line 350 and incremented by S after each question at line 1640. After all 15 questions, line 1550 compares S1 against the threshold of 27. Scores below 27 branch to the rejection message at line 1740; scores of 27 or above fall through to the acceptance message. The program relies entirely on the user entering the correct point value for each criterion rather than computing it from raw data inputs — the questionnaire is advisory rather than automated.
Scoring Criteria Summary
| # | Category | Max Points |
|---|---|---|
| 1 | Stock Price | 4 |
| 2 | Price Fluctuation (6 months) | 2 |
| 3 | P/E Ratio | 4 |
| 4 | Volume Sold | 3 |
| 5 | Dividends | 4 |
| 6 | Earnings Trend | 2 |
| 7 | Recent News | 2 |
| 8 | Investment Type | 2 |
| 9 | Recent Splits | 4 |
| 10 | Broker Commission | 2 |
| 11 | Exchange Traded On | 4 |
| 12 | Years in Business | 4 |
| 13 | Size of Business | 4 |
| 14 | Earnings & Dividend Ranking | 4 |
| 15 | Stock Market Conditions | 2 |
| Maximum Possible | 47 | |
The recommendation threshold of 27 represents approximately 57% of the maximum possible score of 47, providing a moderate bar for investment approval.
Notable Techniques and Anomalies
- Line 130 contains
REM GOSUB 1710— this subroutine (lines 1710–1730) implements a simple delay loop counting from 1 to 900, but it is never actually called during normal execution since theGOSUBis inside aREMstatement. - Line 1770 uses inverse video characters (
%N%O%T) to visually emphasise “NOT” in the rejection message, a common display technique for drawing attention to critical output. - Line 1790 uses
GOTO 1600which lands onSTOP, sharing the same termination point as the acceptance path — a minor but tidy convergence. - There is a typographical error in line 190: “ARECOMMENDATION” is missing a space (should be “A RECOMMENDATION”). Similarly, line 200 contains an extra space before “QUESTION” at line 220’s preceding text.
- The program trusts the user to enter only valid point values for each question; there is no range checking or input validation beyond the preliminary question’s 0/1 guard.
- Lines 1800–1810 (
SAVEandRUN) appear afterSTOPat line 1600 and are unreachable during normal execution; they are utility lines for saving and restarting the program.
Content
Source Code
50 REM %S%T%O%C%K% %B%U%Y%I%N%G% %G%U%I%D%E
130 REM GOSUB 1710
140 PRINT "USE THE FOLLOWING QUESTIONNAIRE TO ";
150 PRINT "HELP DETERMINE IF A PARTICULAR STOCK ";
160 PRINT "WILL BE A GOOD INVESTMENT. THERE ARE ";
170 PRINT "15 QUESTIONS WITH DIFFERENT "
180 PRINT "POINT VALUES FOR EACH ANSWER. A TOTAL SCORE ";
190 PRINT "OF 27 OR BETTER IS ARECOMMENDATION ";
200 PRINT "TO INVEST IN THE STOCK. THE PRELIMINARY ";
210 PRINT "QUESTION MUST BE ANSWERED WITH A ""NO"""
220 PRINT "TO ALLOW ENTRY INTO THE QUESTIONNAIRE."
230 PRINT
240 PRINT "PRELIMINARY QUESTION"
250 PRINT
260 PRINT "IS THE COMPANY IN A DEFICIT?"
270 PRINT "1=YES//0=NO"
280 INPUT A
290 IF A=1 THEN GOTO 1740
300 IF A=0 THEN GOTO 320
310 GOTO 230
320 CLS
330 PRINT "STOCK BUYING GUIDE"
340 PRINT
350 LET S1=0
360 PRINT "1-STOCK PRICE"
370 PRINT
380 PRINT "$6 TO $30 = 4 POINTS"
390 PRINT "GREATER THAN $30 = 2 POINTS"
400 PRINT "LESS THAN $6 = 0"
410 GOSUB 1610
420 GOSUB 1660
430 PRINT "2-PRICE FLUCTUATION"
440 PRINT "(LAST 6 MONTHS)"
450 PRINT
460 PRINT "UP=2 POINTS"
470 PRINT "DOWN=0"
480 PRINT "NO CHANGE=1 POINT"
490 GOSUB 1610
500 GOSUB 1660
510 PRINT "3-PE RATIO"
520 PRINT
530 PRINT "4/1 TO 8/1=4 POINTS"
540 PRINT "9/1 TO 13/1=3 POINTS"
550 PRINT "14/1 TO 17/1=2 POINTS"
560 PRINT "18/1 TO 24/1=1 POINT"
570 PRINT "25/1 AND ABOVE= 0"
580 GOSUB 1610
590 GOSUB 1660
600 PRINT "4-VOLUME SOLD,LAST(HUNDREDS)"
610 PRINT
620 PRINT "0 TO 300=0 POINTS"
630 PRINT "301 TO 600=1"
640 PRINT "601 TO 1000=2"
650 PRINT "1001 AND GREATER=3"
660 GOSUB 1610
670 GOSUB 1660
680 PRINT "5-DIVIDENDS"
690 PRINT
700 PRINT "NONE=0 POINTS"
710 PRINT "1 TO 2 PCT.=1"
720 PRINT "2.1 TO 3 PCT.=2"
730 PRINT "3.1 TO 6 PCT.=3"
740 PRINT "6.1 TO 12 PCT.=4"
750 PRINT "12.1 PCT AND ABOVE=2"
760 GOSUB 1610
770 GOSUB 1660
780 PRINT "6-EARNINGS"
790 PRINT
800 PRINT "UP=2 POINTS"
810 PRINT "DOWN= 0"
820 PRINT "NO CHANGE=1"
830 GOSUB 1610
840 GOSUB 1660
850 PRINT "7-RECENT NEWS ABOUT COMPANY"
860 PRINT
870 PRINT "NO NEWS = 1"
880 PRINT "GOOD NEWS=2"
890 PRINT "BAD NEWS=0"
900 GOSUB 1610
910 GOSUB 1660
920 PRINT "8-INVESTMENT TYPE"
930 PRINT
940 PRINT "SHORT TERM=2"
950 PRINT "LONG TERM=1"
960 GOSUB 1610
970 GOSUB 1660
980 PRINT "9-RECENT SPLITS"
990 PRINT
\n1000 PRINT "YES=4"
\n1010 PRINT "NO=0"
\n1020 GOSUB 1610
\n1030 GOSUB 1660
\n1040 PRINT "10-BROKER COMMISSION"
\n1050 PRINT
\n1060 PRINT "3 PCT. OR LESS=2 POINTS"
\n1070 PRINT "3.1 TO 4 PCT.=1"
\n1080 PRINT "4.1 OR GREATER=0"
\n1090 GOSUB 1610
\n1100 GOSUB 1660
\n1110 PRINT "11-EXCHANGE TRADED ON"
\n1120 PRINT
\n1130 PRINT "NEW YORK=4"
\n1140 PRINT "AMERICAN=2"
\n1150 PRINT "OTHERS = 0"
\n1160 GOSUB 1610
\n1170 GOSUB 1660
\n1180 PRINT "12-NR YRS IN BUSINESS"
\n1190 PRINT
\n1200 PRINT "0 TO 6=0"
\n1210 PRINT "7 TO 20=1"
\n1220 PRINT "21 TO 30=2"
\n1230 PRINT "31 TO 40=3"
\n1240 PRINT "41 AND ABOVE=4"
\n1250 GOSUB 1610
\n1260 GOSUB 1660
\n1270 PRINT "13-SIZE OF BUSINESS"
\n1280 PRINT
\n1290 PRINT "LARGE CORP/CO=4"
\n1300 PRINT "MEDIUM SIZE=2"
\n1310 PRINT "SMALL=0"
\n1320 GOSUB 1610
\n1330 GOSUB 1660
\n1340 PRINT "14-EARNINGS AND DIVIDEND RANKING"
\n1350 PRINT
\n1360 PRINT "A+=4 POINTS"
\n1370 PRINT "A = 3"
\n1380 PRINT "A-=3"
\n1390 PRINT "B+=2"
\n1400 PRINT "B=2"
\n1410 PRINT "B-=1"
\n1420 PRINT "C=0"
\n1430 PRINT "D=0"
\n1440 GOSUB 1610
\n1450 GOSUB 1660
\n1460 PRINT "15-STOCK MARKET CONDITIONS"
\n1470 PRINT
\n1480 PRINT "UP=2 POINTS"
\n1490 PRINT "DOWN/NO CHANGE=0"
\n1500 GOSUB 1610
\n1510 GOSUB 1660
\n1520 PRINT
\n1530 PRINT "FINAL POINT SCORE IS ";S1
\n1540 PRINT
\n1550 IF S1<27 THEN GOTO 1740
\n1560 PRINT
\n1570 PRINT "THE STOCK IS ACCEPTABLE"
\n1580 PRINT
\n1590 PRINT "IT IS RECOMMENDED FOR PURCHASE"
\n1600 STOP
\n1610 PRINT
\n1620 PRINT "ENTER POINT VALUE"
\n1630 INPUT S
\n1640 LET S1=S+S1
\n1641 CLS
\n1650 RETURN
\n1660 PRINT
\n1670 PRINT "POINTS SO FAR = ";S1
\n1680 PRINT
\n1690 PRINT
\n1700 RETURN
\n1710 FOR A=1 TO 900
\n1720 NEXT A
\n1730 RETURN
\n1740 PRINT
\n1750 PRINT "THE STOCK IS NOT ACCEPTABLE"
\n1760 PRINT
\n1770 PRINT "IT IS %N%O%T RECOMMENDED FOR PURCHASE"
\n1790 GOTO 1600
\n1800 SAVE "1002%8"
\n1810 RUN
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
