FLORIDA HIGH SCHOOLS COMPUTING COMPETITION '84
BASIC PROGRAM SOLUTIONS
'1.1
' This program will produce a table of Fahrenheit for Celcuis.
'
PRINT "CELCIUS", "FAHRENHEIT"
FOR C = 50 TO 200 STEP 25
PRINT C, INT(1.8 * C + 32 + .5)
NEXT C
'1.2
' This program will determine time a person slept in seconds.
'
INPUT "WHAT TIME DID YOU GO TO BED (H, M, S)"; H1, M1, S1
INPUT "WHAT TIME DID YOU GET UP (H, M, S)"; H2, M2, S2
T = (11 - H1) * 3600 + (59 - M1) * 60 + (60 - S1)
PRINT "YOU SLEPT FOR"; T + H2 * 3600 + M2 * 60 + S2; "SECONDS"
'1.3
'This program will display distance/height of a golf ball.
'
PRINT "T", "H", "V"
WHILE (V > 0) OR (T < 1)
H = 120 * T: V = 120 * T - 16 * T * T
PRINT T, H, V
T = T + .5
WEND
'1.4
' This program will produce table of mice population and food.
'
PRINT "NUMBER OF YEARS", "POPULATION", "FOOD SUPPLY FOR"
Y = 0: P = 10: F = 100
PRINT Y, , P, F
WHILE P < F
Y = Y + 1: P = P * 2: F = F + 40
PRINT Y, , P, F
WEND
'1.5
' This program will determine time that a savings doubles.
'
INPUT "Enter amount, %"; N, P
X = N: Y = 0
WHILE X < 2 * N
X = X * (1 + P / 100)
Y = Y + 1
WEND
PRINT Y; "YEARS"
'1.6
' This program will determine name at beginning and end.
'
MIN$ = "ZZZZZ": MAX$ = "AAAAAA"
FOR I = 1 TO 5
INPUT NM$
IF NM$ < MIN$ THEN MIN$ = NM$
IF NM$ > MAX$ THEN MAX$ = NM$
NEXT I
PRINT "NAME CLOSEST TO BEGINNING: "; MIN$
PRINT "NAME CLOSEST TO END: "; MAX$
'1.7
' This program will determine longest run of heads of tosses.
'
RANDOMIZE TIMER
INPUT "N: "; N: H = 0: MAX = 0
FOR I = 1 TO N
X = RND(2): IF X < .5 THEN H = H + 1
IF X >= .5 THEN IF H > MAX THEN MAX = H: H = 0 ELSE H = 0
NEXT I
IF H > MAX THEN MAX = H
PRINT MAX; "CONSECUTIVE HEADS"
'1.8
' This program will display numbers with 7s zapped.
'
FOR I = 1 TO 100
T = INT(I / 10): O = I - T * 10: D7 = (I / 7 = INT(I / 7))
IF (T = 7 OR O = 7) AND D7 THEN
PRINT "ZAPZAP",
ELSEIF (T = 7 OR O = 7) THEN
PRINT "ZAP",
ELSE
PRINT I,
END IF
NEXT I
'1.9
' This program will print the # of double letters.
'
INPUT "Enter text: "; A$
FOR I = 1 TO LEN(A$)
C$ = MID$(A$, I, 1)
IF C$ = LC$ THEN D = D + 1
LC$ = C$
NEXT I
PRINT D
'1.10
' This program will display sevens multiplication facts.
'
FOR I = 0 TO 9
W = 0
DO
PRINT I; "X 7 = "; : INPUT ANS
IF ANS <> I * 7 THEN
IF W = 0 THEN
W = 1
ELSE
PRINT I * 7: W = 2
END IF
END IF
LOOP UNTIL (I * 7 = ANS) OR (W = 2)
NEXT I
'2.1
' This program will print number of vowels in text.
'
INPUT "Enter text: "; A$
FOR I = 1 TO LEN(A$)
C$ = MID$(A$, I, 1)
IF C$ = "A" OR C$ = "E" OR C$ = "I" OR C$ = "O" OR C$ = "U"
THEN
V = V + 1
END IF
NEXT I
PRINT V; "VOWELS"
'2.2
' This program sorts rational numbers in increasing order.
'
INPUT "Enter N, M: "; N, M
WHILE N > 0 AND M > 0
S = S + 1: A$(S) = STR$(N) + "/" + STR$(M): V(S) = N / M
INPUT "Enter N, M: "; N, M
WEND
FOR I = 1 TO S - 1
FOR J = I + 1 TO S
IF V(I) > V(J) THEN SWAP V(I), V(J): SWAP A$(I), A$(J)
NEXT J
NEXT I
FOR I = 1 TO S: PRINT A$(I): NEXT I
'2.3
' This program displays #s that sum of cubes of digits= #.
'
FOR I = 1 TO 9
FOR J = 0 TO 9
FOR K = 0 TO 9
NUM = I * 100 + J * 10 + K
IF NUM = I * I * I + J * J * J + K * K * K THEN PRINT
NUM
NEXT K
NEXT J
NEXT I
'2.4
' This program will print a triangle of #s by an algorithm.
'
INPUT "Enter # of rows: "; N
FOR I = 1 TO N
PRINT SPACE$(N - I);
FOR J = I TO 2 * I - 1
X = J - INT(J / 10) * 10
PRINT MID$(STR$(X), 2);
NEXT J
IF I > 1 THEN
FOR J = 2 * I - 2 TO I STEP -1
X = J - INT(J / 10) * 10
PRINT MID$(STR$(X), 2);
NEXT J
END IF
PRINT
NEXT I
'2.5
' This program will display a page of multipilcation drills.
'
RANDOMIZE TIMER: CLS
PRINT " MULTIPLICATION DRILL"
FOR I = 1 TO 6
H = INT((I - 1) / 3): V = I - H * 3: H = H * 20 + 1
X = INT(RND(3) * 90 + 10): Y = INT(RND(3) * 9 + 1)
LOCATE V * 5, H: PRINT MID$(STR$(I), 2); ". "; X
LOCATE V * 5 + 1, H: PRINT " X"; Y
LOCATE V * 5 + 2, H: PRINT " ----"
NEXT I
'2.6
' This program will simulate throwing darts.
'
RANDOMIZE TIMER: INPUT "Enter N: "; N
FOR I = 1 TO N
X = INT(RND(3) * 5): Y = INT(RND(3) * 5)
A(X, Y) = 1
NEXT I
FOR I = 0 TO 4
FOR J = 0 TO 4
IF A(I, J) THEN PRINT "* "; : S = S + 1 ELSE PRINT ". ";
NEXT J: PRINT
NEXT I
PRINT "NUMBER OF THROWS ="; N
PRINT "NUMBER OF HITS ="; S
'2.7
' This program will determine if text is palindrome.
'
PRINT "Enter text: "; : A$ = ""
WHILE A$ <> CHR$(13)
DO: A$ = INKEY$: LOOP UNTIL A$ <> ""
PRINT A$; : IF A$ >= "A" AND A$ <= "Z" THEN S$ = S$ + A$
WEND
L = LEN(S$)
FOR I = 1 TO L / 2
IF MID$(S$, I, 1) <> MID$(S$, L - I + 1, 1) THEN
PRINT "NOT A PALINDROME": END
END IF
NEXT I
PRINT "A PALINDROME"
'2.8
' This program will display the frequency of letters.
'
DIM A(26): INPUT "Enter sentence:"; A$: L = LEN(A$)
FOR I = 1 TO L
C$ = MID$(A$, I, 1)
IF C$ >= "A" AND C$ <= "Z" THEN
X = ASC(C$) - ASC("A") + 1: A(X) = A(X) + 1: T = T + 1
END IF
NEXT I
PRINT "LETTER", "FREQUENCY", "PERCENT"
FOR I = 1 TO 26
IF A(I) > 0 THEN
PRINT CHR$(I + 64), A(I), INT(A(I) / T * 100 + .5)
END IF
NEXT I
PRINT "TOTAL"; T
'2.9
' This program will print longest word in sentence.
'
INPUT "Enter sentence:"; A$: A$ = A$ + " ": L = LEN(A$)
FOR I = 1 TO L
C$ = MID$(A$, I, 1)
IF C$ <> " " THEN
W$ = W$ + C$
ELSE
IF LEN(W$) > LEN(MAX$) THEN MAX$ = W$
W$ = ""
END IF
NEXT I
PRINT MAX$
'2.10
' This program will play rock, scissors, and paper.
'
RANDOMIZE TIMER
INPUT "Enter R, S, P, or Q: "; A$
WHILE A$ <> "Q"
X = INT(RND(3) * 3)
IF X = 0 AND A$ = "R" THEN
T = T + 1: PRINT "TIE"
ELSEIF X = 1 AND A$ = "S" THEN T = T + 1: PRINT "TIE"
ELSEIF X = 2 AND A$ = "P" THEN T = T + 1: PRINT "TIE"
ELSEIF X = 0 AND A$ = "P" THEN W = W + 1: PRINT "YOU WIN"
ELSEIF X = 1 AND A$ = "R" THEN W = W + 1: PRINT "YOU WIN"
ELSEIF X = 2 AND A$ = "S" THEN W = W + 1: PRINT "YOU WIN"
ELSE
L = L + 1: PRINT "I WIN"
END IF
INPUT "Enter R, S, P, or Q: "; A$
WEND
PRINT T; "TIES"
PRINT W; "WINS (YOURS)"
PRINT L; "LOSSES (MINE)"
'3.1
' This program will display a random trail of asterisks.
' The program description is poorly worded and ambiguous.
' The judging criteria is also described poorly.
'
RANDOMIZE TIMER
DIM A(24, 80)
DO
CLS : FOR I = 1 TO 24: FOR J = 1 TO 80: A(I, J) = 0: NEXT J,
I
V = 12: H = 40: A(V, H) = 1
LOCATE V, H: PRINT "S": SAMERUN = -1
WHILE SAMERUN
DO
X = INT(RND(3) * 4)
LOOP UNTIL (X - 2 <> Y) AND (Y - 2 <> X)
H = H + (X = 0) - (X = 2)
V = V + (X = 1) - (X = 3)
IF A(V, H) OR V = 0 OR V = 23 OR H = 0 OR H = 80 THEN
LOCATE 22, 1: PRINT "THE MAXIMUM DISTANCE FROM START =
";
PRINT ABS(40 - H) + ABS(12 - V)
DO: A$ = INKEY$: LOOP UNTIL A$ <> ""
SAMERUN = 0
ELSE
A(V, H) = 1: LOCATE V, H: PRINT "*": Y = X
END IF
WEND
LOOP UNTIL A$ = "Q"
'3.2
' This program will decode a message with frequent letters.
'
DIM A$(32), A(32), B$(32)
B$ = "ETAOINSHRDLU"
INPUT "Message: "; A$: L = LEN(A$)
FOR I = 1 TO L: A$(I) = MID$(A$, I, 1): NEXT I
FOR I = 1 TO L
K = 0
WHILE (A$(K) <> A$(I)) AND (K <= I - 1)
K = K + 1
WEND
' Found 1st occurence of a letter, count occurences after it
IF K = I THEN
FOR J = I TO L
IF A$(I) = A$(J) THEN A(I) = A(I) + 1
NEXT J
IF A(I) > G THEN G = A(I)
END IF
NEXT I
' Replace letters in message
FOR I = G TO 1 STEP -1
J = 1
WHILE (A(J) <> I) AND (J <= L)
J = J + 1
WEND
IF J <= L THEN
S = S + 1
FOR K = J TO L
IF A$(K) = A$(J) THEN B$(K) = MID$(B$, S, 1)
NEXT K
END IF
NEXT I
FOR I = 1 TO L: PRINT B$(I); : NEXT I
'3.3
' This program will produce the digital product root.
'
INPUT "ORIGINAL VALUE (1 TO 7 DIGITS): "; N
PRINT N
WHILE N > 9
A$ = MID$(STR$(N), 2): L = LEN(A$): N = 1
FOR I = 1 TO L
X = VAL(MID$(A$, I, 1))
IF X > 0 THEN N = N * X
NEXT I
PRINT N
WEND
'3.4
' This program will display twin primes.
'
INPUT "Enter N: "; N
PRINT "TWIN PRIMES NOT GREATER THAN"; N
FOR I = 3 TO N - 2
FOR J = 2 TO SQR(I)
IF I MOD J = 0 THEN GOTO NextPrime
NEXT J
T = I + 2
FOR J = 2 TO SQR(T)
IF T MOD J = 0 THEN GOTO NextPrime
NEXT J: PRINT I, T
NextPrime: NEXT I
'3.5
' This program will print subsets of m people.
'
DIM A(26), A$(26): INPUT "INPUT NUMBER, CAPACITY"; L, M
FOR I = 1 TO M: A(I) = M - I + 1: NEXT I
FOR I = 1 TO L: A$(I) = CHR$(64 + I): NEXT I
N = 1: A(1) = A(1) - 1
WHILE N <= M
A(N) = A(N) + 1
IF N > 1 THEN
FOR I = N - 1 TO 1 STEP -1: A(I) = A(I + 1) + 1: NEXT I
END IF
IF A(N) <= L - N + 1 THEN
FOR I = M TO 1 STEP -1: PRINT A$(A(I)); : NEXT I: PRINT ,
S = S + 1: N = 0
END IF
N = N + 1
WEND
PRINT : PRINT "THERE ARE"; S; "SUBSETS"
'3.6
' This program will display histogram of letter frequency.
'
DIM A(256): CLS
DATA "THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG."
DATA "THIS IS AN EXAMPLE OF HOW"
DATA "TO TEST YOUR HISTOGRAM PROGRAM. YOU"
DATA "CAN USE THIS EXAMPLE."
DATA "*END*"
READ A$
WHILE A$ <> "*END*"
FOR I = 1 TO LEN(A$)
X = ASC(MID$(A$, I, 1))
IF X >= 65 AND X <= 90 THEN A(X) = A(X) + 1
IF A(X) > G THEN G = A(X)
NEXT I
READ A$
WEND
FOR I = G TO 1 STEP -1
FOR J = 65 TO 90
IF A(J) >= I THEN
LOCATE G - I + 1, J - 64: PRINT "*";
END IF
NEXT J: PRINT
NEXT I
FOR I = 65 TO 90: PRINT CHR$(I); : NEXT I
'3.7
' This program will display a repeating decimal.
'
DIM R(100)
INPUT "Enter N, D: "; N, D
PRINT N; "/"; D; "= "; : X = INT(N / D)
IF X > 0 THEN PRINT MID$(STR$(X), 2);
PRINT ".";
DO
I = I + 1: R = N - D * X
IF R = 0 THEN PRINT A$: END
R(I) = R: N = R * 10: X = INT(N / D)
' Display decimal if remainder repeats itself
FOR J = 1 TO I - 1
IF R(J) = R THEN
PRINT LEFT$(A$, J - 1); "("; RIGHT$(A$, I - J); ")": END
END IF
NEXT J
A$ = A$ + MID$(STR$(X), 2)
LOOP
'3.8
' This program will print # of round numbers less than N.
'
INPUT "INPUT NUMBER"; N
FOR I = 2 TO N
M = I: S = 0: K = INT(LOG(M) / LOG(2))
FOR J = K TO 0 STEP -1
X = INT(M / 2 ^ J)
S = S + X: M = M - X * 2 ^ J
NEXT J
IF S + S = K + 1 THEN T = T + 1
NEXT I
PRINT "THERE ARE"; T; "ROUND NUMBERS LESS THAN OR EQUAL TO"; N
'3.9
' This program will provide automated price increases.
'
INPUT "Enter %"; P: P = P / 100
READ A$
WHILE A$ <> "*END*"
L = LEN(A$): I = 0
DO
WHILE (I < L) AND (X$ <> "$")
I = I + 1: X$ = MID$(A$, I, 1): PRINT X$;
WEND
IF X$ <> "$" THEN
PRINT
ELSE
J = I: X = 50
'
WHILE (J < L) AND (X$ = "." OR (X > 47 AND X < 58)) AND PER
< 2
J = J + 1: X$ = MID$(A$, J, 1): X = ASC(X$)
IF X$ = "." THEN PER = PER + 1
WEND
'
T = VAL(MID$(A$, I + 1, J - I))
T = T + T * P: T = INT(T * 100 + .5) / 100
PRINT MID$(STR$(T), 2);
I = J - 1: PER = 0
END IF
LOOP UNTIL I >= L
READ A$
WEND
DATA "THE CURRENT COST OF BUCKLES IS"
DATA "3 FOR $2.50, OR $10.00 A DOZEN."
DATA "*END*"
'3.10
' This program will simulate tennis sets between 2 players.
'
RANDOMIZE TIMER
INPUT "NUMBER OF SETS ="; N
INPUT "% CHANCE A WINS A POINT="; P
DO
IF RND(2) < P / 100 THEN A = A + 1 ELSE B = B + 1
IF A > 3 AND A > B + 1 THEN
PRINT "A"; : AG = AG + 1: A = 0: B = 0
END IF
IF B > 3 AND B > A + 1 THEN
PRINT "B"; : BG = BG + 1: A = 0: B = 0
END IF
IF AG > 5 AND AG > BG + 1 THEN
PRINT " (A)": W = W + 1: AG = 0: BG = 0
END IF
IF BG > 5 AND BG > AG + 1 THEN
PRINT " (B)": L = L + 1: AG = 0: BG = 0
END IF
LOOP UNTIL W + L = N
IF W > L THEN PRINT "PLAYER 'A' WON"; W; "SETS OUT OF"; N: END
PRINT "PLAYER 'B' WON"; L; "SETS OUT OF"; N