home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / basic / egbas.lbr / CONV.BZS / CONV.BAS
BASIC Source File  |  1988-01-24  |  3KB  |  99 lines

  1. 0 REM 02-02-85zed & corrected 6/16 Bug corrected 7/18
  2. 10 PRINT CHR$(26)
  3. 20 PRINT"Eric Gans"
  4. 30 PRINT"French Department UCLA"
  5. 40 PRINT"Los Angeles, CA 90024"
  6. 50 PRINT"02/02/85"
  7. 60 REM rewritten by E. Gans 6/16/84
  8. 70 PRINT:PRINT TAB(35)"CONV":PRINT
  9. 80 PRINT"                    Generalized Base Conversion"
  10. 90 PRINT:PRINT"   This program will convert numbers from & to any base up to 30."
  11. 100 PRINT"   Digits >9 are expressed as letters: a=10, b=11 etc."
  12. 110 PRINT
  13. 120 PRINT"   For the most common bases (Decimal, Binary, Hexadecimal), separate"
  14. 130 PRINT"   commands are available; otherwise just input old & new bases."
  15. 140 DIM B(30),NN(30)
  16. 150 PRINT:PRINT
  17. 160 INPUT "Enter dh,db,bd for Dec/Hex/Bin; x=other; q=quit";D$
  18. 170 IF D$="q" THEN END
  19. 180 IF D$="x" THEN 620
  20. 190 IF D$="db" OR D$="dh" GOTO 230
  21. 200 IF D$="bd" OR D$="bh" GOTO 380
  22. 210 IF D$="hd" OR D$="hb" GOTO 490
  23. 220 PRINT CHR$(7):GOTO 160
  24. 230 INPUT "Decimal #";D
  25. 240 IF D$="dh" THEN PRINT"Hex is "HEX$(D):PRINT:GOTO 170
  26. 250 I=1
  27. 260 WHILE D>=1
  28. 270 B=INT(D/2)
  29. 280 IF B=D/2 THEN B(I)=0 ELSE B(I)=1
  30. 290 D=B
  31. 300 I=I+1
  32. 310 WEND
  33. 320 PRINT"Binary is: ";
  34. 330 FOR J=I-1 TO 1 STEP-1
  35. 340 PRINT USING"#";B(J);
  36. 350 NEXT
  37. 360 PRINT:PRINT
  38. 370 GOTO 160
  39. 380 REM bin->dec
  40. 390 INPUT "Binary #";B$
  41. 400 D=0
  42. 410 FOR I=1 TO LEN(B$)
  43. 420 IF MID$(B$,I,1)<>"1" AND MID$(B$,I,1)<>"0" THEN PRINT CHR$(7):GOTO 390
  44. 430 D=D+VAL(MID$(B$,LEN(B$)-I+1,1))*2^(I-1)
  45. 440 NEXT
  46. 450 PRINT"Decimal equivalent is"D
  47. 460 IF D$="bh" THEN PRINT"Hex is "HEX$(D)
  48. 470 PRINT
  49. 480 GOTO 160
  50. 490 REM hex
  51. 500 D=0
  52. 510 INPUT "Hex #";H$
  53. 520 FOR I=LEN(H$) TO 1 STEP-1
  54. 530 H$(I)=MID$(H$,I,1)
  55. 540 IF ASC(H$(I))>102 OR ASC(H$(I))<48 OR (ASC(H$(I))>57 AND ASC(H$(I))<97) THEN PRINT CHR$(7):GOTO 490
  56. 550 IF ASC(H$(I))<58 THEN H(I)=VAL(H$(I)) ELSE H(I)=ASC(H$(I))-87
  57. 560 D=D+H(I)*16^(LEN(H$)-I)
  58. 570 NEXT
  59. 580 PRINT"Decimal equivalent is"D
  60. 590 IF D$="hb" GOTO 250
  61. 600 PRINT
  62. 610 GOTO 160
  63. 620 REM generalized base conversion
  64. 630 PRINT
  65. 640 INPUT "Old base";OB
  66. 650 IF OB<2 OR OB>30 THEN PRINT CHR$(7):GOTO 640
  67. 660 INPUT "New base";NB
  68. 670 IF NB<2 OR NB>30 THEN PRINT CHR$(7):GOTO 660
  69. 680 IF NB=OB THEN PRINT CHR$(7):GOTO 660
  70. 690 IF OB=10 THEN INPUT "Number";N:GOTO 820
  71. 700 INPUT "Number";N$
  72. 710 N=0
  73. 720 IF LEN(N$)=0 OR LEN(N$)>30 THEN PRINT CHR$(7):GOTO 700
  74. 730 FOR I=LEN(N$) TO 1 STEP-1
  75. 740 IF ASC(MID$(N$,I,1))<48 OR (ASC(MID$(N$,I,1))>57 AND ASC(MID$(N$,I,1))<97) THEN PRINT CHR$(7):GOTO 700
  76. 750 IF OB<11 THEN IF VAL(MID$(N$,I,1))>OB-1 THEN PRINT CHR$(7):GOTO 700
  77. 760 IF OB>10 THEN IF ASC(MID$(N$,I,1))>86+OB THEN PRINT CHR$(7):GOTO 700
  78. 770 IF ASC(MID$(N$,I,1))<58 THEN N=N+VAL(MID$(N$,I,1))*OB^(LEN(N$)-I)
  79. 780 IF ASC(MID$(N$,I,1))>96 THEN N=N+(ASC(MID$(N$,I,1))-87)*OB^(LEN(N$)-I)
  80. 790 NEXT
  81. 800 PRINT"Decimal equivalent is"N
  82. 810 IF NB=10 THEN PRINT:N=0:GOTO 170
  83. 820 J=0
  84. 830 WHILE N>=1
  85. 840 J=J+1
  86. 850 NN(J)=N-NB*INT(N/NB)
  87. 860 N=INT(N/NB)
  88. 870 WEND
  89. 880 PRINT"Number to base"NB"is ";
  90. 890 FOR I=J TO 1 STEP-1
  91. 900 IF NN(I)<10 THEN PRINT CHR$(NN(I)+48);
  92. 910 IF NN(I)>10 THEN PRINT CHR$(NN(I)+87);
  93. 920 NEXT
  94. 930 PRINT:PRINT
  95. 940 N=0
  96. 950 GOTO 160
  97. )<10 THEN PRINT CHR$(NN(I)+48);
  98. 910 IF NN(I)>10 THEN PRINT CHR$(NN(I)+87);
  99. 920 N