Gli algoritmi
Architettura di un elaboratore
Un elaboratore è l'insieme di componenti che compongono il sistema di input e output, CPU e elaborazione, in particolare le componenti di memoria. In realtà, le componenti sembrano coincidere: nell'architettura dell'input output, macchina di Von Neumann parliamo di e mentre in una risoluzione di un problema parliamo di dato iniziale e risultato.
Abbiamo sicuramente la necessità di far capire all'elaboratore quale sia il problema, scrivendolo mediante un algoritmo, il quale sarà svolto dal calcolatore; infine, ci sarà una componente chiamata esecutore, il quale ci permetterà di partire da un dato iniziale per poi calcolare il risultato. Non ci basta però, perché in realtà dobbiamo trasformare quello che rappresenta il dato iniziale in veri e propri dati che saranno l'input dell'algoritmo. In una memoria si hanno dati e programmi, e in particolare, quello che era la CPU, il nostro esecutore, era colui che si occupava del ciclo vitale che compie per ogni istruzione una serie di operazioni.
Algoritmo vitale
Si può parlare di algoritmo vitale quando si ha come scopo quello di eseguire algoritmi. Un algoritmo scritto con una certa codifica può essere il dato di un altro algoritmo.
Cos'è una memoria?
Spazio definito e diviso in parti uguali le cui parti hanno un nome detto indirizzo in cui è possibile inserire delle informazioni che possono essere reperite in un secondo. In realtà, se volessimo dare una risposta canonica, la memoria potrebbe essere definita come uno spazio definito, partizionato e indirizzabile in cui è possibile inserire informazioni e reperirle attraverso un indirizzo.
Definizione di macchina
Macchina = strumento che parla un linguaggio non ambiguo (insieme delle istruzioni); per poterla usare è necessario imparare il linguaggio non ambiguo che parla tale strumento. Esistono dei problemi, esiste la necessità di renderli in una forma tale per cui la macchina, mediante un linguaggio non ambiguo, possa interpretarli e possa far eseguire quello che necessita il problema attraverso un esecutore.
Esempio: distributore = è una macchina in cui noi inseriamo monete, selezioniamo il prodotto da prelevare in una sequenza di numeri e, in molti casi, otteniamo oltre al prodotto il resto. In realtà, il funzionamento di questa macchina (generico) prevede:
- Un dato problema
- Qualcosa che sa tradurre il problema (linguaggio non ambiguo)
- Sa cosa fare
Risoluzione problemi
Come facciamo a spiegare a una macchina, dato un problema, qual è l'algoritmo che risolve tale problema e quindi l'esecuzione di questo algoritmo che ci fornisce il risultato? Analizziamo i due seguenti tipi di conoscenza:
- Procedurale: usata per programmare macchine; quella che dobbiamo usare per rappresentare, attraverso un linguaggio non ambiguo, il problema da risolvere.
- Dichiarativa: usata raramente per programmare macchine.