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