26.6.. Konverzije Napisati program za konverziju vrijednosti iz rimskog brojnog sistema u dekadni brojni sistem.

Opis rješenja: Rimski brojni sistem sistem nije pozicioni brojni sistem. Cifre rimskog brojnog sistema su I=1, V=5, X=10, L=50, C=100, D=500, M=1000. Uz svaku cifru je navedena vrijednost cifre. Vrijednost broja se izračunava sabiranjem vrijednosti cifara (LX = 50+10 = 60). Izuzetak je kad se cifra manje vrijednosti nalazi ispred cifre veće vrijednosti, u ovom slučaju se oduzima cifra manje vrijednosti (XL = 50-10 = 40).

Opis programa: Program se sastoji od glavnog program (10-80) i potprograma. Iz glavnog programa se pozivaju potprogrami za postavljanje početnih vrijednosti, ulaz i provjeru cifara te pp za pretvaranje. Poslije postavljanja početnih vrijednosti izvodi se potprogramu za ulaz i provjeru.
Poslije potprograma za ulaz izvodi se provjera pravilnosti učitanih cifara rimskog broja (linije 120-180). Za slučaj da izdvojena cifra učitane vrijednosti rimskog broja (MID$(rb$,1.1)) nije iz skupa cifara rimskog sistema brojeva, traži se ponovno učitavanje rimskog broja (linija 180).
Pretvaranje rimskog broja se izvodi izdvajanjem cifra rimskog broja unazad. U liniji 230 se poredi izdvojena cifra sa mogućim ciframa (ci$(J) >< MIDS(rb$,I,1). Vrijednost izdvojene cifre (vr(j)) se poredi sa vrijednošću prethodno izdvojene cifre (svr). Ako je vrijednost nove cifre manja ili jednaka vrijednosti stare cifre (svr) onda se dodaje vrijednost izdvojene cifre (linja 240), inače se oduzima vrijednost izdvojene cifre (linija 250).
Ispis rimskog broja i izračunate vrijednost dekadnog ekvivalenta (db) se izvodi u glavnom programu.

Spisak varijabli:A$ - pomoćna varijabla (cifra rimskog broja)
ci$ - cifra rimskog brojnog sistema
db - dekadni ekvivalent
rb$ - učitani rimski broj
svr - vrijednost i-te cifre rimskog broja
vr - vrijednost dekadnog ekvivalenta za cifru rimskog brojnog sistema.

Listing programa:

REM 26011450
10 PRINT "PRETVARANJE RIMSKOG BROJA U DEKADNI BROJ": REM RIMSKI BROJ U DEKADNI BROJ
DIM ci$(7)
DIM vr(7)
GOSUB 400: REM Rimski brojevi
20 GOSUB 300: REM postavljanje pocetnih vrijednosti
30 GOSUB 100: REM ulaz i provjera
40 GOSUB 200: REM pretvaranije
49 REM ispis
50 PRINT "Rimski broj = "; rb$
60 PRINT "Dekadni ekvivalent = "; db
70 INPUT "Hoces li jos brojeva (/N) "; da$
80 IF LEFT$(da$, 1) <> "N" AND LEFT$(da$, 1) <> "n" THEN GOTO 20
90 STOP

100 REM Ulaz i provjera
110 INPUT "Ucitati rimski broj "; rb$
120 FOR i = 1 TO LEN(rb$)
    130 a$ = MID$(rb$, i, 1)
    140 FOR j = 1 TO 7
        150 IF ci$(j) = a$ THEN GOTO 180
    160 NEXT j
    170 PRINT "Pogresana cifra "; a$: GOTO 110
180 NEXT i
190 RETURN

200 REM Pretvaranje rimskih u dekadne
210 FOR i = LEN(rb$) TO 1 STEP -1
    220 FOR j = 1 TO 7
        230 IF ci$(j) <> MID$(rb$, i, 1) THEN GOTO 270
        240 IF svr <= vr(j) THEN db = db + vr(j)
        250 IF svr > vr(j) THEN db = db - vr(j)
        260 svr = vr(j)
    270 NEXT j
280 NEXT i
290 RETURN

300 REM Nule
310 db = 0: REM dekadni broj
320 svr = 0: REM stara cifra
330 RETURN

400 REM Pocetne vrijednosti
420 ci$(1) = "M": vr(1) = 1000
430 ci$(2) = "D": vr(2) = 500
440 ci$(3) = "C": vr(3) = 100
450 ci$(4) = "L": vr(4) = 50
460 ci$(5) = "X": vr(5) = 10
470 ci$(6) = "V": vr(6) = 5
480 ci$(7) = "I": vr(7) = 1
490 RETURN

990 END

Ispis na ekranu:

Index