Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

MAC: pari o dispari

Precedente
SUPERIORE
Successiva

Problema: dato un numero naturale (0, 1, 2, ...) decidere se è pari o dispari.

Analisi con esempi: si applica l'algoritmo delle sottrazioni successive...

Se N=10 allora 10-2=8 --> 8-2=6 --> 6-2=4 --> 4-2=2 --> 2-2=0  STOP, è pari!
Se N=9  allora  9-2=7 --> 7-2=5 --> 5-2=3 --> 3-2=1 --> 1-2=-1 STOP, è dispari!

Diagramma di flusso: ...

Programma:

PROG   RUN       '
       INP N     '
       LDA N     '
SU     JEQ PARI  ' SE(ACC = 0) PC <-- PARI
       JLT DISP  ' SE(ACC < 0) PC <-- DISP
       SUB #2    '
       JMP SU    '
DISP   LDA #0    '
       STA RISP  '
PARI   OUT RISP  '
       ALT       '
N      DAT 0     '
RISP   DAT 1     '
       END       '

Invece di rispondere con 1/0 possiamo accordarci su 0/-1 (il contenuto dell'accumulatore allo STOP...).

PROG   RUN       '
       INP N     '
       LDA N     '
SU     JLE FINE  ' SE(ACC <= 0): PC<--FINE
       SUB #2    '
       JMP SU    '
FINE   STA N     '
       OUT N     '
       ALT       '
N      DAT 0     '
       END       '

Da 14 a 11 righe... (-21%)

Utilizziamo un altro algoritmo: N è pari se N=(N/2)*2 (in MACL la divisione è solo intera)

Esempio: 10/2=5, 5*2=10 invece 11/2=5, 5*2=10

PROG   RUN       '
       INP N     '
       LDA N     '
       DIV #2    '
       MUL #2    '
       SUB N     '
       STA N     '
       OUT N     '
       ALT       '
N      DAT 0     '
       END       '

MAC: pari o dispari - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva