|
|
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 ' |
|