```FLORIDA HIGH SCHOOLS COMPUTING COMPETITION '83
BASIC PROGRAM SOLUTIONS

'1.1
' This program will round a number to nearest whole number.
'
INPUT "Enter number: "; N
PRINT INT(N + .5)

'1.2
' This program will display 5 numbers in descending order.
'
FOR I = 1 TO 5
INPUT "Enter number: "; A(I)
NEXT I
FOR I = 1 TO 4
FOR J = I + 1 TO 5
IF A(I) < A(J) THEN SWAP A(I), A(J)
NEXT J
NEXT I
FOR I = 1 TO 5: PRINT A(I): NEXT I

'1.3
' This program will print the factors of a given number.
'
INPUT "Enter number: "; N
FOR I = 1 TO N
IF N MOD I = 0 THEN PRINT I
NEXT I

'1.4
' This program will produce a birthday card w/name centered.
'
INPUT "Enter name: "; N\$
FOR I = 1 TO 5
PRINT
IF I = 1 OR I = 5 THEN FOR J = 1 TO 12: PRINT "*"; : NEXT J
IF I = 2 THEN PRINT "*   HAPPY  *";
IF I = 3 THEN PRINT "* BIRTHDAY *";
IF I = 4 THEN
PRINT "*"; : L = LEN(N\$)
SP = INT((10 - L) / 2 + .5)
PRINT SPACE\$(SP); N\$; SPACE\$(10 - L - SP); "*";
END IF
NEXT I

'1.5
' This program will print a ? in random locations.
'
CLS : RANDOMIZE TIMER
FOR I = 1 TO 6
C = INT(RND(3) * 80) + 1:  R = INT(RND(3) * 23) + 1
LOCATE R, C: PRINT "?";
FOR J = 1 TO 3000 * 5: NEXT J
NEXT I

'1.6
' This program will print a B for a, C for B, ... Z for A.
'
INPUT "Enter character: "; CH\$
IF CH\$ < "Z" THEN PRINT CHR\$(ASC(CH\$) + 1) ELSE PRINT "A"

'1.7
' This program will print 4 distinct rectangles in corners.
'
CLS
R = 1: C = 1:   GOSUB DrawRec
R = 1: C = 65:  GOSUB DrawRec
R = 19: C = 1:  GOSUB DrawRec
R = 19: C = 65: GOSUB DrawRec
END
DrawRec:
FOR I = R TO R + 3
IF I <> R + 1 AND I <> R + 2 THEN
LOCATE I, C
FOR J = 1 TO 10: PRINT "*"; : NEXT J
END IF
LOCATE I, C: PRINT "*"
LOCATE I, C + 9: PRINT "*"
NEXT I
RETURN

'1.8
' This program will count the number of E's in a sentence.
'
INPUT "Enter sentence: "; S\$
FOR I = 1 TO LEN(S\$)
C\$ = MID\$(S\$, I, 1)
IF C\$ = "E" THEN E = E + 1
NEXT I
PRINT E

'1.9
' This program will calculate the average socre for a person.
'
DATA JOHN,20,70,32
DATA BILL,71,40,30
DATA MARY,80,42,73
INPUT "Enter name: "; N\$
FOR I = 1 TO 3
IF B\$ = N\$ THEN PRINT (A + B + C) / 3
NEXT I

'1.10
' This program will reverse the digits of a 4 digit number.
'
INPUT "Enter number: "; N\$
FOR I = 4 TO 1 STEP -1
PRINT MID\$(N\$, I, 1);
NEXT I

'2.1
' This program will calculate the area of a regular hexagon.
'
INPUT "Enter perimeter: "; P
S = P / 6
PRINT SQR(3) * S / 2 * S / 2 * 6

'2.2
' This program will convert a base 8 num to a base 2 num.
'
INPUT "Enter number: "; N\$:  L = LEN(N\$)
FOR I = 1 TO L
N = VAL(MID\$(N\$, I, 1))
FOR J = 2 TO 0 STEP -1
X = INT(N / 2 ^ J): PRINT USING "#"; X;
N = N - X * 2 ^ J
NEXT J
NEXT I: PRINT

'2.3
' This program will add several items with tax (5%).
'
INPUT "Enter item: "; IT
WHILE IT <> -999
T = T + IT
INPUT "Enter item: "; IT
WEND
PRINT "SUBTOTAL = \$"; T
TAX = INT((T * .05) * 100 + .5) / 100
PRINT "TAX      = \$  "; TAX
PRINT "TOTAL    = \$"; T + TAX

'2.4
' This program will divide the screen into 4 rectangles.
'
INPUT "Enter character: "; N\$
CLS
FOR I = 1 TO 24
IF I <> 12 THEN PRINT SPACE\$(39); N\$
IF I = 12 THEN FOR J = 1 TO 79: PRINT N\$; : NEXT J
NEXT I

'2.5
' This program will print the greatest and least in a set.
'
MAX = -900: MIN = 900
INPUT "Enter number: "; NUM
WHILE NUM <> -999
IF NUM < MIN THEN MIN = NUM
IF NUM > MAX THEN MAX = NUM
INPUT "Enter number: "; NUM
WEND
PRINT "GREATEST = "; MAX
PRINT "LEAST = "; MIN

'2.6
' This program will print the sum, mean, median.
'
FOR I = 1 TO 10
INPUT "Enter number: "; A(I):  S = S + A(I)
NEXT I
FOR I = 1 TO 9
FOR J = I + 1 TO 10
IF A(I) > A(J) THEN SWAP A(J), A(I)
NEXT J
NEXT I
PRINT "SUM ="; S
PRINT "MEAN ="; S / 10
PRINT "MEDIAN ="; (A(5) + A(6)) / 2

'2.7
' This program will reverse the words in a sentence.
' Assume 1 space between each word.
'
INPUT "Enter sentence: "; A\$: NUM = 1
FOR I = 1 TO LEN(A\$)
C\$ = MID\$(A\$, I, 1)
IF C\$ <> " " THEN W\$(NUM) = W\$(NUM) + C\$ ELSE NUM = NUM + 1
NEXT I
FOR I = NUM TO 1 STEP -1: PRINT W\$(I); " "; : NEXT I

'2.8
' This program will convert cubic feet to cubic meters.
'
INPUT "Enter cubic feet: "; CF
C3 = CF * (12 * 2.54) ^ 3
CM = C3 / 100 / 100 / 100
PRINT USING "###.#### CUBIC METERS"; CM

'2.9
' This program will find sum of Ys and Xs for Y=2(X+5).
'
INPUT "Enter a, b: "; A, B
FOR X = A TO B: S = S + 2 * (X + 5): NEXT X
PRINT "SUM ="; S

'2.10
' This program will print 1 char. for 10 sec, 2 for 10 sec...
'
INPUT "Enter character: "; A\$: CLS
FOR I = 1 TO 10
FOR J = 1 TO I: PRINT A\$; : NEXT J
FOR J = 1 TO 2500 * 10: NEXT J
CLS
NEXT I

'3.1
' This program converts a number from one base to another.
'
INPUT "NUMBER"; N\$
INPUT "BASE"; B
INPUT "CONVERT TO BASE"; C
L = LEN(N\$)
FOR I = 1 TO L
X = VAL(MID\$(N\$, I, 1))
S = S + X * B ^ (L - I)
NEXT I
J = INT(LOG(S) / LOG(C))
FOR I = J TO 0 STEP -1
Y = INT(C ^ I + .1)
X = INT(S / Y): NUM = NUM + X * 10 ^ I
S = S - X * Y
NEXT I
PRINT NUM

'3.2
' This program will determine what triangle is made w/3
points.
'
INPUT "Enter X1, Y1: "; X1, Y1
INPUT "Enter X2, Y2: "; X2, Y2
INPUT "Enter X3, Y3: "; X3, Y3
D1 = SQR((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2))
D2 = SQR((X2 - X3) * (X2 - X3) + (Y2 - Y3) * (Y2 - Y3))
D3 = SQR((X3 - X1) * (X3 - X1) + (Y3 - Y1) * (Y3 - Y1))
IF (D1 + D2 = D3) OR (D1 + D3 = D2) OR (D2 + D3 = D1) THEN
PRINT "NOT A TRIANGLE": END
END IF
IF (D1 = D2) AND (D2 = D3) THEN PRINT "EQUILATERAL": END
IF (D1 = D2) OR (D2 = D3) OR (D1 = D3) THEN
PRINT "ISOSCELES"
ELSE
PRINT "SCALENE"
END IF

'3.3
' This program randomly selcts an X, Y in 10 x 10 grid.  User
' guesses numbers; if guess is wrong, a direction is given.
'
RANDOMIZE TIMER
X = INT(RND(4) * 9) + 1: Y = INT(RND(4) * 9) + 1
WHILE (A <> X) OR (B <> Y)
INPUT "Enter X, Y:"; A, B
IF A = X AND B < Y THEN PRINT "UP"
IF A = X AND B > Y THEN PRINT "DOWN"
IF A > X AND B = Y THEN PRINT "LEFT"
IF A < X AND B = Y THEN PRINT "RIGHT"
IF A < X AND B < Y THEN PRINT "UP AND RIGHT"
IF A < X AND B > Y THEN PRINT "DOWN AND RIGHT"
IF A > X AND B < Y THEN PRINT "UP AND LEFT"
IF A > X AND B > Y THEN PRINT "DOWN AND LEFT"
WEND

'3.4
' This program will divide 1st number by 2nd out to N places.
'
INPUT "FIRST NUMBER"; N
INPUT "SECOND NUMBER"; D
INPUT "NUMBER OF DECIMAL PLACES"; P
X = INT(N / D):   PRINT USING "#."; X;
N = N - X * D
FOR I = 1 TO P
N = N * 10: X = INT(N / D): PRINT USING "#"; X;
N = N - X * D
NEXT I: PRINT

'3.5
' This program will display numbers 1-8 and a blank in a
' 3 x 3 array.  When a digit is pressed, it moves into the
' blank (if possible).
'
RANDOMIZE TIMER
'  Assign numbers in array sequentially then scramble them
FOR I = 1 TO 3
FOR J = 1 TO 3
A(I, J) = (I - 1) * 3 + J - 1
NEXT J
NEXT I
FOR I = 1 TO 3
FOR J = 1 TO 3
R1 = INT(RND(3) * 3) + 1: R2 = INT(RND(3) * 3) + 1
X = A(I, J): A(I, J) = A(R1, R2): A(R1, R2) = X
NEXT J
NEXT I
'
WHILE (DIG <> 9)
'     Display Array
CLS
FOR I = 1 TO 3
FOR J = 1 TO 3
IF A(I, J) > 0 THEN PRINT A(I, J); " ";
IF A(I, J) = 0 THEN PRINT "    "; : BX = I: BY = J
NEXT J: PRINT
NEXT I
'     Accept valid digit or 9 (to end)
VALID = 0
WHILE (VALID = 0) AND (DIG <> 9)
A\$ = "": WHILE A\$ = "": A\$ = INKEY\$: WEND
DIG = VAL(A\$)
FOR I = 1 TO 3
FOR J = 1 TO 3
IF DIG = A(I, J) THEN IX = I: IY = J
NEXT J
NEXT I
IF ABS(BX - IX) + ABS(BY - IY) = 1 THEN VALID = 1
WEND
'
IF VALID THEN
'     Move digit into blank space
X = A(IX, IY): A(IX, IY) = A(BX, BY): A(BX, BY) = X
END IF
WEND

'3.6
' This program will store a list of words and provide options.
'
WHILE OP <= 3
PRINT
PRINT "1. ADD A WORD TO THE LIST"
PRINT "2. DELETE A WORD FROM THE LIST"
PRINT "3. DISPLAY THE ENTIRE LIST"
INPUT OP
IF OP = 1 THEN
NUM = NUM + 1:  INPUT "Enter word: "; W\$(NUM)
ELSEIF OP = 2 THEN
INPUT "Enter word: "; DEL\$:  I = 1
WHILE (I <= NUM) AND (W\$(I) <> DEL\$)
I = I + 1
WEND
FOR J = I TO NUM - 1: W\$(J) = W\$(J + 1): NEXT J
NUM = NUM - 1
ELSEIF OP = 3 THEN
FOR I = 1 TO NUM:  PRINT W\$(I): NEXT I
END IF
WEND

'3.7
' This program will solve crytorithms with two 2-letter
' and a 3-letter sum, using only the letters A, B, C, D, and
E.
'
INPUT "Enter first addend: "; S1\$
INPUT "Enter second addend: "; S2\$
INPUT "Enter sum: "; S3\$
L\$ = S1\$ + S2\$ + S3\$
'  Store in FL() the index of the first occurence
FOR I = 1 TO 7
CH\$ = MID\$(L\$, I, 1)
J = 1: WHILE MID\$(L\$, J, 1) <> CH\$: J = J + 1: WEND
FL(I) = J
IF J = I THEN NL = NL + 1: UL(NL) = I  'A new letter
NEXT I
'
FOR N1 = 10 TO 98           'N1 must be 2 digits, >9
FOR N2 = 100 - N1 TO 98   'N2 must be 2 digits, >9
SUM = N1 + N2           'Sum must be 3 digits >99
N1\$ = MID\$(STR\$(N1), 2)
N2\$ = MID\$(STR\$(N2), 2)
SUM\$ = MID\$(STR\$(SUM), 2)
NS\$ = N1\$ + N2\$ + SUM\$
I = 1:  SOL = 1
'      Check if similar letters correspond to similar #s
WHILE (I <= 7) AND (SOL = 1)
CH\$ = MID\$(NS\$, I, 1)
IF CH\$ <> MID\$(NS\$, FL(I), 1) THEN SOL = 0
I = I + 1
WEND
'      Check if unique letters correspond to unique digits
FOR I = 1 TO NL - 1
FOR J = I + 1 TO NL
C1\$ = MID\$(NS\$, UL(I), 1)
C2\$ = MID\$(NS\$, UL(J), 1)
IF C1\$ = C2\$ THEN SOL = 0
NEXT J
NEXT I
'       Display Solution
IF SOL > 0 THEN
FOR I = 1 TO NL
PRINT MID\$(L\$, UL(I), 1); " = "; MID\$(NS\$, UL(I), 1),
NEXT I
PRINT : TOT = TOT + 1: END
END IF
NEXT N2
NEXT N1
IF TOT = 0 THEN PRINT "NO SOLUTION POSSIBLE"

'3.8
' This program will simulate random frog jumps on nine pads.
'
RANDOMIZE TIMER
CLS
FOR I = 1 TO 10
LOCATE 1, 1: PRINT SPACE\$(40);
LOCATE 2, 1: PRINT "- - - - - - - - -"
F = 5
LOCATE 1, F * 2 - 1: PRINT "F": NUM = 0
WHILE (F > 1) AND (F < 9)
IF INT(RND(3) * 2) = 1 THEN F = F + 1 ELSE F = F - 1
LOCATE 1, 1: PRINT SPACE\$(40);
LOCATE 1, F * 2 - 1: PRINT "F"
FOR J = 1 TO 25: NEXT J
NUM = NUM + 1
WEND
LOCATE 5, I * 3: PRINT NUM
NEXT I

'3.9
' This program will allow a user to position a cursor under a
' sentence using the L and R keys.  Space bar deletes letter.
'
CLS : INPUT "Enter sentence:"; S\$: COL = 18
WHILE (CH\$ <> CHR\$(27)) AND (LEN(S\$) > 1)
LOCATE 2, COL, 1
DO: CH\$ = INKEY\$: LOOP UNTIL CH\$ > ""
IF CH\$ = "R" THEN COL = COL + 1
IF CH\$ = "L" THEN COL = COL - 1
IF CH\$ = " " THEN
L = LEN(S\$)
S\$ = LEFT\$(S\$, COL - 18) + RIGHT\$(S\$, L - (COL - 17))
END IF
LOCATE 1, 18: PRINT S\$; " "
WEND

'3.10
' This program will simulate the movement of a pool ball on a
' rectangular pool table.  It moves in a 45 degree angle.
'
INPUT "Enter Width, Length: "; W, L
CLS : SCREEN 1
WI = 8: LI = 8
FOR I = 0 TO W: LINE (0, I * WI)-(L * LI, I * WI): NEXT I
FOR I = 0 TO L: LINE (I * LI, 0)-(I * LI, W * WI): NEXT I
X = 0: Y = W * WI: XD = 1: YD = -1
WHILE FI = 0
PSET (X, Y), 0
X = X + XD: Y = Y + YD
PSET (X, Y), 1
IF X = 0 OR X = L * LI THEN XD = -1 * XD
IF Y = 0 OR Y = W * WI THEN YD = -1 * YD
FINISHED = 1: LOCATE 20, 1
IF X = 0 AND Y = 0 THEN PRINT "LEFT-TOP":           FI = 1
IF X = 0 AND Y = W * WI THEN PRINT "LEFT-BOTTOM":   FI = 1
IF X = L * LI AND Y = 0 THEN PRINT "RIGHT-TOP":     FI = 1
IF X = L * LI AND Y = W * WI THEN PRINT "RIGHT-BOTTOM": FI =
1
WEND
DO: A\$ = INKEY\$: LOOP UNTIL A\$ <> ""
SCREEN 0: WIDTH 80: CLS

```