Algoritmi

Guida a Perl
di M. Liverani

Un computer è una macchina costituita da un insieme di componenti elettroniche: è facile immaginare quindi, come tutto il funzionamento della macchina dipenda da un flusso continuo di segnali elettrici, sincronizzati da un clock, che codificano, in notazione binaria, le informazioni immagazzinate ed elaborate all'interno della macchina stessa.

Per quanto possa essere complessa e sofisticata l'architettura di un elaboratore elettronico, questo potrebbe sembrare non molto dissimile da un qualsiasi altro elettrodomestico presente nella nostra casa. Tuttavia esiste una differenza sostanziale tra un computer ed una lavatrice: per quanto moderna e dotata di sofisticati meccanismi elettronici, una lavatrice potrà sempre e solo lavare dei panni, mentre il computer può essere istruito per svolgere compiti anche molto differenti tra di loro.

Come si istruisce un computer? Mediante un programma, ossia tramite una sequenza ben definita di istruzioni che la macchina è in grado di tradurre in funzioni elementari facilmente eseguibili. Schematicamente possiamo dire che le caratteristiche principali di un calcolatore sono:

Come rovescio della medaglia di queste caratteristiche ``positive'', possiamo individuare alcune caratteristiche ``negative'' di cui è bene tenere conto:

Riassumendo, possiamo dire che il calcolatore è un esecutore di ordini impartiti dall'utente-programmatore, assai preciso ed efficiente, ma un po' stupido, si limita cioè ad eseguire ciò che gli viene chiesto, a prescindere dalla correttezza di quanto gli viene ordinato di compiere ai fini della soluzione del problema (in un certo senso si può dire che è un po' cieco).

Per capire meglio quanto è stato detto vediamo un esempio elementare di programma per un calcolatore elettronico. Supponiamo che il problema da risolvere sia quello di effettuare la media aritmetica tra 5 numeri forniti dall'utente. Il calcolatore deve leggere in input i cinque numeri, sommarli, memorizzando la somma da qualche parte nella sua memoria ed infine dividere per cinque la somma totale e stampare il risultato. Una codifica di questo algoritmo risolutore potrebbe essere la seguente:

  1. assegna ad n il valore 0
  2. assegna ad s il valore 0
  3. leggi un numero in input ed assegnalo ad a
  4. incrementa di 1 il valore di n
  5. somma a ed s ed assegna il risultato ad s
  6. se n è minore di 5 vai al passo 3 altrimenti prosegui
  7. dividi s per 5 ed assegna il risultato ad m
  8. visualizza il valore di m.
  9. fermati

Eseguendo in sequenza le istruzioni del programma (che sono evidentemente molto elementari), il calcolatore è in grado di risolvere il problema che noi ci eravamo posti. Naturalmente l'algoritmo è 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 codifica binaria su cui il computer è 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 paragrafi precedenti. È bene saperlo, anche se magari non ci si troverà mai a dover scrivere un programma, perché questo può aiutarci a capire che quasi sempre, quando il calcolatore non esegue ciò che noi vorremmo, a meno di guasti hardware non è lui che sbaglia, ma siamo noi ad aver fornito delle istruzioni incomplete o fuorvianti che non lo portano a raggiungere la soluzione cercata.

© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /perl/algoritmi.asp?print=ok