Algoritmi
Un computer e una macchina costituita da un insieme di componenti elettroniche:
e facile immaginare quindi, come tutto il funzionamento della macchina dipenda
da un usso continuo di segnali elettrici, sincronizzati da un clock, che codicano,
in notazione binaria, le informazioni immagazzinate ed elaborate all’interno della
macchina stessa. Per quanto possa essere complessa e sosticata l’architettura di un elaboratore elettronico, questo potrebbe sembrare non molto dissimile da un qualsiasi altro
elettrodomestico presente nella nostra casa. Tuttavia esiste una dierenza sostanziale tra un computer ed una lavatrice: per quanto moderna e dotata di sosticati meccanismi elettronici, una lavatrice potra sempre e solo lavare dei panni, mentre il computer puo essere istruito per svolgere compiti anche molto dierenti tra di loro.
Come si istruisce un computer? Mediante un programma, ossia tramite una sequenza ben denita di istruzioni che la macchina e in grado di tradurre in funzioni elementari facilmente eseguibili. Schematicamente possiamo dire che le caratteristiche principali di un calcolatore sono:
- velocita: e rapidissimo nell’eseguire i compiti che gli vengono assegnati;
- precisione: e estremamente preciso nell’eseguire calcoli matematici e logici;
- adabilita: svolge con rigore e puntualita i compiti assegnati dall’utente;
- duttilita: e in grado (se programmato correttamente) di svolgere lavori assai
diversi.
Come rovescio della medaglia di queste caratteristiche \positive”, possiamo individuare alcune caratteristiche \negative” di cui e bene tenere conto:
- e privo di \buon senso” e di intuizione;
- e incapace di vericare se c’e corrispondenza tra quanto sta facendo e gli
obbiettivi del programmatore.
Riassumendo, possiamo dire che il calcolatore e un esecutore di ordini impartiti
dall’utente-programmatore, assai preciso ed eciente, ma un po’ stupido, si limita
cioe ad eseguire cio che gli viene chiesto, a prescindere dalla correttezza di quanto
gli viene ordinato di compiere ai ni della soluzione del problema (in un certo senso
si puo dire che e un po’ cieco). Per capire meglio quanto e stato detto vediamo un esempio elementare di programma per un calcolatore elettronico. Supponiamo che il problema da risolvere sia quello di eettuare la media aritmetica tra 5 numeri forniti dall’utente. Il calcolatore deve leggere in input i cinque numeri, sommarli, memorizzando la sommada qualcheparte nella sua memoria ed inne dividere per cinque la somma totale e stampare il
risultato. Una codica di questo algoritmo risolutore potrebbe essere la seguente:
- assegna ad n il valore 0
- assegna ad s il valore 0
- leggi un numero in input ed assegnalo ad a
- incrementa di 1 il valore di n
- somma a ed s ed assegna il risultato ad s
- se n e minore di 5 vai al passo 3 altrimenti prosegui
- dividi s per 5 ed assegna il risultato ad m
- visualizza il valore di m.
- fermati
Eseguendo in sequenza le istruzioni del programma (che sono evidentemente molto elementari), il calcolatore e in grado di risolvere il problema che noi ci eravamo posti. Naturalmente l’algoritmo e espresso in lingua italiana: per essere capito dal computer sarebbe stato necessario tradurlo in linguaggio macchina (un linguaggio assai ostico ed innaturale, basato essenzialmente sulla codica binaria su cui il computer e in grado di operare). Il linguaggio macchina ed il nostro linguaggio naturale sono estremamente distanti fra di loro: quest’ultimo pieno di ambigue sfumature, estremamente coinciso e criptico il primo; per raggiungere un buon compromesso tra le due parti che si devono comprendere (noi e la macchina) sono stati progettati numerosi linguaggi di programmazione ad alto livello, ovvero un insieme di parole chiave e di regole sintattiche, non troppo distanti dal nostro linguaggio naturale, ma facilmente traducibili (in modo automatico, mediante un programma chiamato compilatore) in istruzioni di linguaggio macchina. Ogni programma per un calcolatore elettronico, utilizza la logica ed i concetti
espressi (in estrema sintesi) nei paragra precedenti. E bene saperlo, anche se
magari non ci si trovera mai a dover scrivere un programma, perche questo puo
aiutarci a capire che quasi sempre, quando il calcolatore non esegue cio che noi
vorremmo, a meno di guasti hardware non e lui che sbaglia, ma siamo noi ad aver
fornito delle istruzioni incomplete o fuorvianti che non lo portano a raggiungere la
soluzione cercata.