C64 - I numeri dei salmi, revisited in COMAL
di
pubblicato il 02-07-2020 alle 16:50 (610 Visite)
Riprendiamo il problemino numerico già pubblicato qui per proporre una ulteriore soluzione, stavolta sviluppata in linguaggio COMAL 80 per quello che pare essere uno dei trend più divertenti e seguiti nell'ambito del retroprogramming.
Raccomando come sempre l'articolo completo in PDF e i sorgenti di tutti gli esempi COMAL in formato .d64.
//******************************* // save hymns //******************************* DIM b'digits(10) DIM hymn2$ OF 3 DIM hymn3$ OF 3 DIM t$ OF 6 TIME 0 PAGE PRINT "***************************" PRINT "*** I numeri degli inni ***" PRINT "** Soluzione alternativa **" PRINT "** con array booleano. **" PRINT "***************************" PRINT // Loop esterno: centinaia FOR di2:=1 TO 3 DO b'digits(1+di2):=TRUE // Loop intermedio: decine FOR di1:=0 TO 9 DO IF b'digits(1+di1)=TRUE THEN GOTO next'di1 b'digits(1+di1):=TRUE // Loop interno: unita' FOR di0:=0 TO 9 DO IF b'digits(1+di0)=TRUE THEN GOTO next'di0 b'digits(1+di0):=TRUE hymn1:=100*di2+10*di1+di0 IF hymn1>329 THEN PRINT PRINT "***************************" PRINT "Run time: "; PRINT TIME/60,"s" PRINT "***************************" END "Fine lavoro" ENDIF hymn2$:=STR$(hymn1+hymn1) hymn3$:=STR$(3*hymn1) t$:=hymn2$+hymn3$ j:=1 WHILE j<7 DO i:=1+VAL(t$(j)) IF b'digits(i)=TRUE THEN GOTO undo b'digits(i):=TRUE j:+1 ENDWHILE // Stampa la terna trovata PRINT hymn1,", ",hymn2$,", ",hymn3$ undo: IF j>1 THEN FOR k:=1 TO j-1 DO b'digits(1+VAL(t$(k))):=FALSE ENDFOR k ENDIF b'digits(1+di0):=FALSE next'di0: ENDFOR di0 b'digits(1+di1):=FALSE next'di1: ENDFOR di1 b'digits(1+di2):=FALSE ENDFOR di2