






Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Il testo è un'esplorazione avvincente nel mondo complesso e affascinante degli algoritmi. Scritto in modo accessibile anche per i non addetti ai lavori, il testo offre una panoramica completa su cosa siano gli algoritmi.
Tipologia: Schemi e mappe concettuali
1 / 11
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!







Per arrivare a definire il concetto di algoritmo partiamo da quello di “ programma ”. Il significato di questo termine legato al funzionamento di un computer. Essendo il computer una macchina non intelligente, ma un mero esecutore di ordini impartiti dall’esterno, necessita di una serie di istruzioni, scritte in un opportuno codice detto linguaggio di programmazione , che costituiscono, appunto, il programma. Prima però di poter scrivere un programma, il programmatore deve analizzare il problema da risolvere, definire gli obiettivi da raggiungere, individuare i dati iniziali e finali e descrivere tutti i passi necessari per ottenere il risultato voluto. Affinché il computer sia in grado di eseguire con successo i compiti ad esso assegnati, è necessario che la descrizione del procedimento sia accurata; è opportuno che alla macchina non venga indicato come risolvere un singolo problema, ma tutta una classe di problemi che differiscono per i dati iniziali. Tutto ciò sottende al concetto di algoritmo. Il termine “ algoritmo ” prende la sua origine dal nome del matematico arabo Al-Khwarizmi, vissuto nell’800 d.C., ritenuto, storicamente, l’ideatore del procedimento che consente di effettuare il calcolo della moltiplicazione tra due numeri tramite l’incolonnamento delle cifre (lo stesso algoritmo che utilizziamo ancora oggi). Nel senso più ampio della parola, un "algoritmo" è una sequenza finita di operazioni, come ad esempio una ricetta di cucina o le istruzioni di funzionamento di una lavatrice. In informatica, con il termine algoritmo si intende: una sequenza ordinata e finita di passi, ripetibili e non ambigui, che se eseguita con determinati dati in ingresso (input), produce in uscita (output) un risultato ovvero la soluzione di una classe di problemi. Un algoritmo, per essere tale, deve avere le seguenti proprietà: essere finito : la sequenza di istruzioni deve essere finita e portare ad un risultato;
Affinché un algoritmo sia interpretato ed eseguito correttamente da un’altra persona o da una macchina, è necessario rappresentare i comandi (o istruzioni ) che lo compongono in modo preciso e non ambiguo. Considerando che l’algoritmo da dare al computer subirà un successivo passaggio ( codifica ) che lo convertirà da algoritmo a programma, in fase di progettazione del procedimento risolutivo, è importante utilizzare un linguaggio appropriato, che rappresenti in modo efficace l’algoritmo e ne faciliti la successiva traduzione. Per soddisfare questo requisito, abbiamo due opzioni per descrivere un algoritmo: Diagramma di Flusso o flow-chart Pseudolinguaggio di programmazione o linguaggio di pseudo codifica
Per descrivere algoritmi in modo chiaro, ordinato e corretto si fa uso del linguaggio di pseudo codifica, in cui si devono effettuare in ordine le seguenti fasi: Intestazione: riga iniziale che assegna un nome all’algoritmo. Si usa la parola Algoritmo seguita da un nome a piacere che lo identifica. Ad esempio, supponiamo di volere effettuare la somma di 2 numeri, un nome appropriato per l’algoritmo può essere Algoritmo Somma Fase dichiarativa: prima di iniziare l’algoritmo è necessario dichiarare i dati che entrano in gioco specificando il nome e il tipo di dato. I dati si distinguono in dati variabili e dati costanti. Si usa la parola dichiara seguita dal nome o nomi del dato e dal loro tipo. Nel caso dell’algoritmo per la somma si ha: Variabili Dichiara X, Y somma come numeri interi
Fase esecutiva: in cui si eseguono in ordine le istruzioni che partendo dai dati di input ci permettono di ottenere i risultati in output. Questa fase inizia con la parola chiave inizio e termina sempre con la parola chiave fine. Nella fase esecutiva si devono effettuare nell’ordine le seguenti azioni:
o Facciamo un esempio: pensiamo ai passi da fare quando prepariamo una camomilla:
Camomilla pronta FINE
Ciò che da sempre spinge l’uomo alla progettazione di nuove macchine è l’esigenza di facilitare il proprio lavoro. Il computer è stato progettato inizialmente per sostituire l’umo nella soluzione di problemi numerici complessi ma, con l’introduzione dei calcolatori general-purpose (capaci di risolvere un’ampia classe di problemi) nasce l’esigenza di “guidarli” nella risoluzione dei problemi per mezzo di istruzioni appartenenti ad un linguaggio a loro comprensibile: nasce la programmazione. Con la nascita della programmazione, sorge l’esigenza di creare degli strumenti che consentano la comunicazione uomo-macchina: i linguaggi di programmazione. Un linguaggio di programmazione è costituito da un alfabeto di simboli con cui vengono costruite le parole e le frasi e da un insieme di regole lessicali e sintattiche per l’uso corretto delle parole. In particolare, i linguaggi di programmazione sono analoghi ai linguaggi naturali, come questi infatti sono caratterizzati dall’avere: Lessico: insieme di regole formali per la scrittura di parole in un linguaggio; Sintassi: insieme di regole formali per la scrittura di frasi in un linguaggio che, stabiliscono la grammatica del linguaggio stesso; Semantica: insieme di significati da attribuire alle frasi, sintatticamente corrette, costruite nel linguaggio.
Saltare una cella di memoria e passare alla successiva; Svolgere un’operazione logico-aritmetica, etc… Essendo un linguaggio strettamente legato all’architettura del calcolatore, ha come grande svantaggio, quello che un programma scritto in linguaggio macchina per un'architettura, non funziona in un'altra architettura.
Per ovviare alle problematiche presentate dal linguaggio macchina, sono stati introdotti i linguaggi di basso livello che risultano essere comunque linguaggi orientati alla macchina ma con un linguaggio più elementare. Un esempio di linguaggio a basso livello è il linguaggio assembly. Tale linguaggio consente al programmatore di ignorare il formato binario del linguaggio macchina, sostituendo ogni codice operativo del linguaggio macchina con una sequenza di caratteri che lo rappresenta in forma mnemonica; per esempio, il codice operativo per la somma potrebbe essere trascritto come ADD e quello per il salto come JMP. Dal momento che le istruzioni sono molto semplici, per raggiungere un buon grado di astrazione è necessaria una grossa mole di istruzioni, che rendono il programma molto lungo e di difficile comprensione per un programmatore; per questo motivo, in un programma a basso livello è molto più difficile effettuare i controlli sugli errori e la manutenzione del codice.
Un linguaggio di alto livello è un linguaggio più vicino al linguaggio umano che permette al programmatore di scrivere programmi che sono più o meno indipendenti da un particolare tipo di computer.
Poiché un programma scritto in un qualsiasi linguaggio ad alto livello è molto più vicino all’uomo che alla macchina, per essere compreso da quest’ultima deve essere “tradotto” in linguaggio macchina. Per fare la “traduzione” si utilizzano i seguenti programmi: Compilatore: traduce l’intero codice sorgente di un programma nel linguaggio macchina prima che sia eseguito. Interprete: elabora il codice sorgente di un programma mentre questo è in esecuzione, e funge da interfaccia tra quel programma e il processore. A differenza del compilatore, l’interprete esamina un’istruzione alla volta, realizzandone la traduzione e l’esecuzione. Alcuni linguaggi ad altro livello più conosciuti sono Java, PHP, C, C++ e così via.