Visualizza il feed RSS

Titolo provvisorio...

C64 - Il numero di Sarah... reloaded. In COMAL!

Valuta questo inserimento
di pubblicato il 14-06-2020 alle 14:37 (73 Visite)
Riprendiamo il simpatico problemino già trattato in questo articolo per proporre una nuova versione della soluzione, questa volta usando il linguaggio COMAL 80 (in particolare la versione 2.01 su cartridge) per Commodore 64.

Il codice è altamente leggibile e decisamente "moderno", a maggior ragione considerando che si tratta di un linguaggio concepito in pieni anni Settanta. Il confronto con l'equivalente BASIC sarà un ottimo esercizio per i lettori di ogni livello d'esperienza.

Articolo completo in PDF (caldamente raccomandato) e sorgenti di tutti gli esempi COMAL in formato .d64.

codice:
//********************************
//** save Sarah
//********************************

DATA "Julie","Ken","Morris","Naomi"
DIM conditions(7,4)
DIM solution$(7) OF 4
DIM name$(4) OF 6
DIM phone$ OF 4

PAGE
PRINT "************************"
PRINT "** 11: Sarah's Number **"
PRINT "************************"
PRINT "####       J   K   M   N"
PRINT "------------------------"

sol:=1
i:=1
WHILE NOT EOD DO
  READ name$(i)
  i:+1
ENDWHILE 

FOR n:=0 TO 99 DO
  phone$:=STR$(n)
  IF n<10 THEN phone$:="0"+phone$
  phone$:+phone$(2)+phone$(1)
  number:=VAL(phone$)
  FOR i:=1 TO 4 DO conditions(sol,i):=FALSE
  cond'cnt:=0
  
  //** Condizione 1 (J)
  IF phone$(1)="9" OR phone$(2)="9" THEN
    cond'cnt:=1
    conditions(sol,1):=TRUE
  ENDIF 
  
  //** Condizione 2 (K)
  IF number>5000 THEN
    cond'cnt:+1
    conditions(sol,2):=TRUE
  ENDIF 
  
  //** Condizione 3 (M)
  IF number/2=number DIV 2 THEN
    cond'cnt:+1
    conditions(sol,3):=TRUE
  ENDIF 
  
  //** Condizione 4 (N)
  d'sum:=1+((number-1) MOD 9)
  IF d'sum=9 THEN
    cond'cnt:+1
    conditions(sol,4):=TRUE
  ENDIF 
  
  IF cond'cnt=3 THEN
    solution$(sol):=phone$
    PRINT phone$;"     ";
    FOR i:=1 TO 4 DO
      PRINT conditions(sol,i);" ";
    ENDFOR i
    PRINT 
    sol:+1
  ENDIF 
ENDFOR n

//**************************
//** Stampa dei risultati **
//**************************

FOR c:=1 TO 4 DO
  cond'cnt:=0
  FOR r:=1 TO 7 DO
    IF conditions(r,c)=FALSE THEN
      cond'cnt:+1
      rs:=r
    ENDIF 
  ENDFOR r
  IF cond'cnt=1 THEN
    PRINT 
    PRINT "Il numero di Sarah e'";
    PRINT solution$(rs)," e"
    PRINT name$(c)," ha sbagliato!"
    END "** Fine lavoro **"
  ENDIF 
ENDFOR c

aggiornamento da 18-06-2020 a 17:28 di M.A.W. 1968

Categorie
Libri , Programmazione