-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring_lab.bas
More file actions
106 lines (106 loc) · 2.54 KB
/
Copy pathstring_lab.bas
File metadata and controls
106 lines (106 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
10 REM STRING LABORATORY
20 REM EXERCISES: MID$, ASC, CHR$, LEN, INSTR,
30 REM VAL, STR$, CLS, SQR, HEX$,
40 REM MULTI-STATEMENT COLONS, ON...GOSUB, PRIVATE
50 CLS
60 PRINT "*** STRING LABORATORY ***"
70 PRINT
80 PRINT "1) CAESAR CIPHER"
90 PRINT "2) WORD COUNTER"
100 PRINT "3) NUMBER BASE CONVERTER"
110 PRINT "4) QUIT"
120 INPUT "CHOOSE"; C
130 ON C GOSUB 200, 500, 800
140 IF C = 4 THEN END
150 GOTO 50
200 REM === CAESAR CIPHER ===
205 PRIVATE I, A, T$, S, R$, CH$, D$
210 INPUT "ENTER TEXT"; T$
220 INPUT "SHIFT (1-25)"; S
230 R$ = ""
240 FOR I = 1 TO LEN(T$)
250 CH$ = MID$(T$, I, 1)
260 A = ASC(CH$)
270 IF A >= 65 AND A <= 90 THEN
280 A = A + S
290 IF A > 90 THEN A = A - 26
300 R$ = R$ + CHR$(A)
310 ELSE
320 R$ = R$ + CH$
330 ENDIF
340 NEXT I
350 PRINT "ENCODED: "; R$
360 REM DECODE BY SHIFTING BACK
370 D$ = ""
380 FOR I = 1 TO LEN(R$)
390 CH$ = MID$(R$, I, 1)
400 A = ASC(CH$)
410 IF A >= 65 AND A <= 90 THEN
420 A = A - S
430 IF A < 65 THEN A = A + 26
440 D$ = D$ + CHR$(A)
450 ELSE
460 D$ = D$ + CH$
470 ENDIF
480 NEXT I
490 PRINT "DECODED: "; D$
495 RETURN
500 REM === WORD COUNTER ===
505 PRIVATE I, T$, W, SP, P, WL, BEST
510 INPUT "ENTER SENTENCE"; T$
520 W = 1
530 FOR I = 1 TO LEN(T$)
540 IF MID$(T$, I, 1) = " " THEN W = W + 1
550 NEXT I
560 PRINT "WORD COUNT: "; W
570 REM FIND LONGEST WORD USING INSTR
580 BEST = 0
590 P = 1
600 WHILE P <= LEN(T$)
610 SP = INSTR(P, T$, " ")
620 IF SP = 0 THEN SP = LEN(T$) + 1
630 WL = SP - P
640 IF WL > BEST THEN BEST = WL
650 P = SP + 1
660 WEND
670 PRINT "LONGEST WORD: "; BEST; " LETTERS"
680 RETURN
800 REM === NUMBER BASE CONVERTER ===
805 PRIVATE I, J, N, P, T, B$, H$, V$
810 INPUT "ENTER A NUMBER (0-255)"; N
820 IF N < 0 OR N > 255 THEN
830 PRINT "OUT OF RANGE"
840 RETURN
850 ENDIF
860 REM CONVERT TO BINARY USING SUCCESSIVE DIVISION
870 B$ = ""
880 T = N
890 FOR I = 7 TO 0 STEP -1
900 P = 1
910 FOR J = 1 TO I
920 P = P * 2
930 NEXT J
940 IF T >= P THEN
950 B$ = B$ + "1"
960 T = T - P
970 ELSE
980 B$ = B$ + "0"
990 ENDIF
1000 NEXT I
1010 PRINT "DECIMAL: "; N
1020 PRINT "BINARY: "; B$
1030 REM CONVERT TO HEX USING HEX$ FUNCTION
1040 H$ = HEX$(N)
1050 IF LEN(H$) < 2 THEN H$ = "0" + H$
1060 PRINT "HEX: "; H$
1220 REM SHOW CHARACTER IF PRINTABLE
1230 IF N >= 32 AND N <= 126 THEN
1240 PRINT "ASCII: "; CHR$(N)
1250 ENDIF
1260 REM VERIFY WITH VAL AND STR$
1270 V$ = STR$(N)
1280 PRINT "STR$: "; V$
1290 PRINT "VAL: "; VAL(V$)
1300 REM COMPUTE SQUARE ROOT FOR FUN
1310 PRINT "SQR: "; SQR(N)
1320 RETURN