(PC-1211) Base Conversion
03-24-2021, 03:44 PM (This post was last modified: 03-24-2021 03:47 PM by SlideRule.)
Post: #1
 SlideRule Senior Member Posts: 1,324 Joined: Dec 2013
(PC-1211) Base Conversion
An excerpt from Science and Engineering Sourcebook, pgs 23-24:

Any Base to Any Base Conversion

Description

Converting numbers between different bases is frequently done by computer programmers, amthematicians, high school and college students. In particular, computer program development requires conversion between binary (2), octal (8), decimal (10) and hexadecimal (16) bases. Number tjeory problems may require conversion between these and other bases.
Conversion between two arbitrary bases a and b is generally a two step procedure, converting first from base a to base 10 and then from base 10 to base b. The unique method presented here for positive integers uses the same algorithm for both conversions, thus saving on programming steps.
To represent a number to base larger than 10, more than one place is necessary to represent one digit in that base. For example 17FE (base 16) would be entered or displayed as <01>, <07>, <15>, <14> or simply 1071514 (1=01, 2=02, …, A=10, B=11, C=12, D=13, E=14, F=15). In general, one place would be reserved per digit for bases 2-10, two places for bases 11-100, etc. The program automatically interprets the entry or display depending on the base. The program has no inherent limitations on the magnitude of the base or the number to be converted. The only limiting factor is the computer's accuracy. For example the 10 digit accuracy of the Pocket Computer limits the input and output to 10 decimal places. A larger number would lead to error.

PROGRAM LISTING
90: "Z"CLEAR : PAUSE "BASE CONVERSION"
100: INPUT "ARGUMENT?";C: F=C: G=110: GOTO 290
110: INPUT "OLD BASE?";D: F=D: G=120: GOTO 290
120: INPUT "NEW BASE?";E: F=E: G=130: GOTO 290
130: IF D<>10 GOTO 150
140: N=C: GOTO 170
150: U=D: GOSUB 280
160: S=C: Q=D: R=V: GOSUB 240
170: IF E<>10 GOTO 190
180: S=N: GOTO 210
190: U=E: GOSUB 280
200: S=N: Q=V: R=E: GOSUB 240
210: BEEP 1: USING "###########"
220: PAUSE C;" BASE";USING "####";D:
PRINT USING "###########";"=";N;" BASE";
USING "####;E
230: PRINT USING "###########";"=";S;" BASE 10":
GOTO 100
240: M=0: N=0: P=S
250: T=P: P=INT (P/R): N=N+INT ((T-P*R)*Q^M+.5)
260: IF P=0 RETURN
270: M=M+1: GOTO 250
280: V=10^(1+INT LOG (U-1)): RETURN
290: IF F=INT ABS F GOTO G
300: G=G-10: BEEP 2: PAUSE "BAD INPUT": GOTO G

INSTRUCTION
Press Shift Z to start the program. Follow the prompts by entering the number to be converted (argument) the old and new base. You can optionally display the argument to base 10 after seeing the argument to the new base by pressing Enter after display of the result. For proper display, change the output format by adding additional "#" if one of the bases is larger than 999.

EXAMPLE
Convert 17C (base 16) to base 2.

KEY-IN          DISPLAY                                REMARKS
Shift Z         BASE CONVERSION
ARGUMENT?                           17C(hex)=10712
10712 Ent     OLD BASE?
16 Ent          NEW BASE?                           Beeps when ready
2 Ent           10712 BASE 16
=101111100 BASE 2
Ent              =380 BASE 10                        Optional step
Ent                                                        Prompt for a new case

BEST!
SlideRule
03-24-2021, 03:57 PM
Post: #2
 toml_12953 Senior Member Posts: 1,855 Joined: Dec 2013
RE: (PC-1211) Base Conversion
(03-24-2021 03:44 PM)SlideRule Wrote:  An excerpt from Science and Engineering Sourcebook, pgs 23-24:

Any Base to Any Base Conversion

Description

Converting numbers between different bases is frequently done by computer programmers, amthematicians, high school and college students. In particular, computer program development requires conversion between binary (2), octal (8), decimal (10) and hexadecimal (16) bases. Number tjeory problems may require conversion between these and other bases.
Conversion between two arbitrary bases a and b is generally a two step procedure, converting first from base a to base 10 and then from base 10 to base b. The unique method presented here for positive integers uses the same algorithm for both conversions, thus saving on programming steps.
To represent a number to base larger than 10, more than one place is necessary to represent one digit in that base. For example 17FE (base 16) would be entered or displayed as <01>, <07>, <15>, <14> or simply 1071514 (1=01, 2=02, …, A=10, B=11, C=12, D=13, E=14, F=15). In general, one place would be reserved per digit for bases 2-10, two places for bases 11-100, etc. The program automatically interprets the entry or display depending on the base. The program has no inherent limitations on the magnitude of the base or the number to be converted. The only limiting factor is the computer's accuracy. For example the 10 digit accuracy of the Pocket Computer limits the input and output to 10 decimal places. A larger number would lead to error.

PROGRAM LISTING
90: "Z"CLEAR : PAUSE "BASE CONVERSION"
100: INPUT "ARGUMENT?";C: F=C: G=110: GOTO 290
110: INPUT "OLD BASE?";D: F=D: G=120: GOTO 290
120: INPUT "NEW BASE?";E: F=E: G=130: GOTO 290
130: IF D<>10 GOTO 150
140: N=C: GOTO 170
150: U=D: GOSUB 280
160: S=C: Q=D: R=V: GOSUB 240
170: IF E<>10 GOTO 190
180: S=N: GOTO 210
190: U=E: GOSUB 280
200: S=N: Q=V: R=E: GOSUB 240
210: BEEP 1: USING "###########"
220: PAUSE C;" BASE";USING "####";D:
PRINT USING "###########";"=";N;" BASE";
USING "####;E
230: PRINT USING "###########";"=";S;" BASE 10":
GOTO 100
240: M=0: N=0: P=S
250: T=P: P=INT (P/R): N=N+INT ((T-P*R)*Q^M+.5)
260: IF P=0 RETURN
270: M=M+1: GOTO 250
280: V=10^(1+INT LOG (U-1)): RETURN
290: IF F=INT ABS F GOTO G
300: G=G-10: BEEP 2: PAUSE "BAD INPUT": GOTO G

INSTRUCTION
Press Shift Z to start the program. Follow the prompts by entering the number to be converted (argument) the old and new base. You can optionally display the argument to base 10 after seeing the argument to the new base by pressing Enter after display of the result. For proper display, change the output format by adding additional "#" if one of the bases is larger than 999.

EXAMPLE
Convert 17C (base 16) to base 2.

KEY-IN          DISPLAY                                REMARKS
Shift Z         BASE CONVERSION
ARGUMENT?                           17C(hex)=10712
10712 Ent     OLD BASE?
16 Ent          NEW BASE?                           Beeps when ready
2 Ent           10712 BASE 16
=101111100 BASE 2
Ent              =380 BASE 10                        Optional step
Ent                                                        Prompt for a new case

BEST!
SlideRule

On some machines you can convert from base 2, 8 or 16 to base 10 by doing this:

VAL("&B"+"11011011")
VAL("&O"+"7413")
VAL("&H"+"CF1A")

and back

PRINT BIN$(74) PRINT OCT$(912)
PRINT HEX\$(65521)

Tom L
Cui bono?
03-24-2021, 08:57 PM
Post: #3
 pyedog Junior Member Posts: 8 Joined: Mar 2021
RE: (PC-1211) Base Conversion
Entering the Hex digits as 2 digit base10 pairs is an interesting way to get around the lack of string functions. I had considered an alternative of entering the digits as characters one by one and having 16 IF statements to convert them to their actual values, but this is much faster - at the cost of having to manually convert A-F in your head when entering the numbers.

Thanks!
03-24-2021, 09:44 PM
Post: #4
 Dave Britten Senior Member Posts: 2,074 Joined: Dec 2013
RE: (PC-1211) Base Conversion
(03-24-2021 08:57 PM)pyedog Wrote:  Entering the Hex digits as 2 digit base10 pairs is an interesting way to get around the lack of string functions.

That was always the typical way to do it if you look at base conversion programs for the HP 65, 67, 15C, TI-59, etc. Not surprising to see the tradition carried on here before decent string handling was available.
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)