A seguito del post su Dijkstra e di un paio di telefonate mi è venuta voglia di farvi vedere com’era il codice quando ho iniziato a lavorarci io. In realtà sto barando: con il Fortran 77 l’if era ormai multilinea, come if/then/else ma i vecchi (di allora) continuavano a usare il IV e lo imponevano.

L’immagine che illustra il crivello di Eratostene che in questi giorni circola su G+ (credo sia di John Baez Skopp (vedi commento, grazie Annarita!)) è l’ideale per implementare un programmino nel Fortran delle origini. Eccolo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
C ERAHOSTHENES DIMENSION NUMERI(20), LPRIMI(10) C NUMERI CONTIENE I NUMERI CHE POSSONO ESSERE PRIMI DO 10, I = 1, 20 10 NUMERI(I) = I NUMERI(1) = 0 C NPRIMI = IL NUMERO DI PRIMI TROVATI NPRIMI = 0 NTROV = 2 C QUANDO NE TROVO UNO LO AGGIUNGO ALLA LISTA DEI PRIMI 20 NPRIMI = NPRIMI + 1 LPRIMI(NPRIMI) = NTROV C ELIMINO I SUOI MULTIPLI NELLA LISTA DEI NUMERI J = 1 30 J = J + 1 NT = NTROV * J IF(NT .GT. 20) GOTO 40 NUMERI(NT) = 0 GOTO 30 C PASSO ALL ESAME DEL CANDIDATO SUCCESSIVO 40 N = NTROV 41 N = N + 1 IF(N .GT. 20) GOTO 60 IF(NUMERI(N) .EQ.0) GOTO 41 50 NTROV = N GOTO 20 C FINE DELL ESAME DELLA LISTA 60 DO 65 I = 1, NPRIMI 65 WRITE(*, 90) I, LPRIMI(I) 90 FORMAT(2I4) END |

Nello spirito del tempo ho scritto tutto in maiuscolo
Però non ce l’ho fatta a non lasciare spazi: allora si sarebbe scritto tutto come J = J + 1. E un’altra cosa ancora: la riga a cui l’esecuzine saltava a seguito di un GOTO era tipicamente del tipo:
50 CONTINUE
essendo quest’istruzione segnaposto fatta proprio apposta per questo. Ma il mio programma sarebbe diventato troppo lungo, inutilmente.
Un’altra cosa: è quasi immediata l’ottimizzazione considerando che 2 è l’unico primo pari, dimezzando il numero di numeri da testare ma il codice si allunga, lasciato come esercizio.
Ecco, allora si programmava così. Non ho più il libro ma nel testo che si usava al Poli c’era scritto: “finito di perforare le schede fai una stampa del listato e controllala attentamente prima di provare l’esecuzione“, vero anche perché a me al primo tentativo è successo questo:

Avevo sbagliato il numero di una label.
Bon! Nostalgia OFF!
L’URL è relativa a un pezzo del solito E.W. Dijkstra, in particolare 





























Oggi concludo la
Sì newLISP converte anche le lettere non ASCII
OK, c’è stata una lunga pausa nell’esame di Ruby. L’ultima puntata è stata questa, tanto tempo fa: 





















OK, lo so che non serve a niente ma voglio relazionarvi. Si continua dal post precedente:
ahemmm, sì, ma posso smettere quando voglio, dai 

