26.6.. Konverzije Napisati program koji omogućuje pretvaranje decimalnih brojeva u binarne i obratno.

Opis rješenja:

Opis programa: Program omogućuje da biramo način pretvaranja:
1. binarni u decimalni broj
2. decimalni u binarni broj.
Pretvaranje binarnog u decimalnog broj se izvodi na sljedeći način. Cifre binarnog broja se izdvajaju s desna u lijevo u liniji 450. Uvećavanje stare vrijednosti decimalnog broja (DB=DB+ CI*TK) je u liniji 460.
Težinski faktor se uvećava u liniji 470 (TK=TK*2 ). Ispis binarnog broja i njegovog decimalnog ekvivalenta je na kraju programa.
Pretvaranje decimalnog u binarni broj se izvodi na sljedeći način. Cifre binarnog broja se generišu s lijeva u desno. Izračunavanje vrijednosti binarne cifre se izvodi u linijama 80 i 90. U liniji 100 se izvodi uvećavanje stare vrijednosti binarnog broja (BB=BB+ CI* TK ). Težinski faktor se uvećava u liniji 110 (TK=TK*10 ). Ispis decimalnog broja i njegovog binarnog ekvivalenta je na kraju programa.
Glavni program poziva pp za izbor (MENU) a zatim na osnovu izabrane vrijednosti varijable IZ izvodi pretvaranje binarnog broja u dekadni ili obratno.
Potprogram 100 ispisuje moguće tipove pretvaranja:
1. Binarni u decimalni broj
2. Decimalni u binarni broj
3. Kraj
Vrijednost varijable IZ predstavlja izbor korisnika.
Pp 200 izvodi pretvaranje binarnog broja u decimalni. Prvo se učitava binarni broj BB. Provjera cifara binarnog broja se izvodi u pp 300. Ako nisu sve cifre odgovarajuće ponavlja se učitavanje. Pretvaranje izvodi pp 400. Ispis je u liniji 260.
Provjera cifara binarnog broja se izvodi u pp 300. Izdvaja se svaka cifra binarnog broja i poredi da li je 0 ili 1.
Pretvaranje binarnog broja u decimalni se izvodi u pp 400. Iz binamog broja se izdvajaju cifre (linija 450). Izdvojena cifra se množi vrijednošću težinskog faktora TK i dodaje na staru vrijednost decimalnog broja (linija 460).
Potprogramom 500 se učitava decimalni broj DB. Zatim se poziva pp 600 za pretvaranje u binarni broj. Ispis se izvodi u linijama 540 i 550. U pp 600 se pretvara decimalni broj u binarni. Decimalni broj se dijeli sa 2 (linija 640). Ako je ostatak 0 ili 1. Ovo je cifra binarnog broja. Dobivena cifra se uvećava za vrijednost težinskog faktora TK i dodaje na staru vrijednost binarnog broja BB.

Spisak varijabli:
iz - izbor tipa pretvaranja
a - pomoćna varijabla
da$ - ponavljanje pretvaranja
A- pomoćna varijabla
BB - binaran broj
Cl - cifra
D - pomoćna varijabla
DB - decimalan broj
TK - težinski faktor

Listing programa:

REM 26011470
1 REM DECIMALNI <--> BINARNI BROJEVI
10 REM Glavni program
20 GOSUB 100: REM menu
30 ON iz GOSUB 200, 500, 50: REM bin. u dek., dek. u bin. broj, kraj
40 GOTO 20
50 STOP

100 REM Menu
110 CLS: PRINT TAB(10); "IZBOR"
120 PRINT: PRINT
130 PRINT "1. Binarni u decimalni broj"
140 PRINT "2. Decimalni u binarni broj"
150 PRINT "3. Kraj"
160 PRINT: PRINT: PRINT
170 PRINT TAB(20);: INPUT "Vaš izbor "; iz
190 RETURN

200 REM Binarni broj u decimalni broj
210 INPUT "Ucitati binarni broj "; bb
220 GOSUB 300: REM provjera cifara binarnog broja
230 IF sem = 1 THEN GOTO 210
240 GOSUB 400 REM pretvaranje binarni u decimalni
250 REM ispis
260 PRINT "Binarni broj "; bb; " decimalni ekvivalent "; db
270 INPUT "Hoces li novi broj "; da$
280 INPUT "Dalje (/N) "; DA$: REM dalje/kraj
50 IF LEFT$(DA$, 1) <> "N" AND LEFT$(DA$, 1) <> "n"  THEN GOTO 210
290 RETURN

300 REM Provjera cifara binarnog broja
310 sem = 0: REM indikator greške
320 a = bb
330 d = INT(a / 10)
340 ci = a - d * 10: REM cifra binarnog broja
350 IF ci > 0 AND ci <> 1 THEN sem = 1: PRINT "GRESKA": GOTO 370
360 IF a > 0 THEN a = d: GOTO 330
370 RETURN

400 REM Pretvaranje binarni u decimalni
410 db = 0: REM decimalni broj
420 tk = 1: REM početna vrijednost težinskog faktora
430 a = bb
440 d = INT(a / 10)
450 ci = a - d * 10: REM cifra binarnog broja
460 db = db + ci * tk: REM decimalni broj
470 IF a > 0 THEN a = d: tk = tk * 2: GOTO 440
480 RETURN

500 REM Decimalni broj u binarni broj
510 INPUT "Ucitati decimalni broj "; db
520 GOSUB 600: REM pretvaranje binarnog u decimalni broj
530 REM ispis
540 PRINT "Decimalni broj = "; db; " binarni ekvivalet = "; bb
550 INPUT "Hoces li novi broj "; da$
560 IF LEFT$(da$, 1) > "N" OR LEFT$(da$, 1) > "n" THEN GOTO 510
570 RETURN

600 REM Pretvaranje decimalnog u binarni
610 bb = 0: REM binarni broj
620 tk = 1: REM početna vrijednost težinskog faktora
630 a = db
640 d = a / 2
650 IF d = INT(d) THEN ci = 0: REM cifra binarnog broja
660 IF d <> INT(d) THEN ci = 1: REM cifra binarnog broja
670 bb = bb + ci * tk: REM binarni broj
680 IF a > 1 THEN a = INT(d): tk = tk * 10: GOTO 640
690 RETURN

Ispis na ekranu:

Index