Da Problema a Programmazione • Quale e’ il legame tra i linguaggi di programmazione e i programmi (o software) ? Linguaggi di Programmazione problema algoritmo programma soluzione Rapporto tra i tre concetti Algoritmo sequenza di passi che portano alla realizzazione di un compito. Programma sequenza di istruzioni scritte in un opportuno linguaggio comprensibile al calcolatore Linguaggio di Programmazione permette di codificare un algoritmo per renderlo comprensibile al calcolatore. Algoritmo La definizione più o meno formale del processo per la soluzione di un problema. Esempi di algoritmi presenti nella vita quotidiana: Montare mobili Ricercare un numero telefonico Riempire una valigia Algoritmo::Origini Euclide (400 BC): per primo ha definito un algoritmo per determinare il massimo comun divisore tra due numeri interi positivi Questo termine deriva dal nome del matematico persiano Abu Ja'far Mohammed ibn Mâsâ al-Khowârizmî (825 d.C.). Esercitò la professione nella città di Baghdad, dove insegnava, e introdusse nel mondo arabo i numeri indiani. La sua opera "Il calcolo degli indiani" venne successivamente tradotta in latino da un monaco europeo, con il titolo Liber algarismi - (Il libro di al-Khwarizmi). Algoritmo::Un esempio Operazioni per svolgere la somma di due numeri mediante il pallottoliere: 1) Si sposti una pallina dalla sinistra alla destra della prima riga e se ne sposti una dalla destra alla sinistra della terza riga 2) Si ripeta l’operazione precedente finché non si è svuotata la parte sinistra della prima riga 3) Si sposti una pallina dalla sinistra alla destra della seconda riga e se ne sposti una dalla destra alla sinistra della terza riga 4) Si ripeta l’operazione precedente finché non si è svuotata la parte sinistra della seconda riga. 5) Il numero di palline che si trova alla sinistra della terza riga al termine delle operazioni è il risultato cercato Algoritmo:: soluzione automatica Il precedente algoritmo consiste nell’esecuzione ripetuta di operazioni elementari: - selezione di una riga - spostamento di una pallina - controllo se una riga sia vuota Una volta costruito un esecutore meccanico delle operazioni elementari potremo utilizzarlo per risolvere qualsiasi problema la cui soluzione possa essere descritta mediante un algoritmo che faccia uso solo di tali operazioni Algoritmo::Costruzione Costruire un algoritmo equivale a: - esaminare una specifica realtà (il problema) - costruirne un’astrazione - immaginare una rappresentazione più o meno formale di tale astrazione - scrivere un insieme di istruzioni che opportunamente eseguite risolvano il problema Algoritmo:: Rappresentazione La pseudocodifica in un linguaggio il più vicino possibile a quello naturale. Esempio di pseudocodifica Somma = 0; Contatore = 0; Leggi( valore_utente ) Finché valore_utente è vuoto Ripeti Somma = ( Somma + valore_utente ) …. Algoritmo:: Rappresentazione Schema a blocchi (Flow Chart) Algoritmo::Istruzioni Ricorrenti Istruzioni ricorrenti nella formulazione degli algoritmi sono: 1. Istr. Sequenziali: tutte le azioni che devono essere in successione 2. Istr. Condizionali: gestiscono possibilità di scelta fra procedimenti alternativi (se allora altrimenti) 3. Istr. Ripetitive: quando un’azione o un gruppo di azioni deve essere ripetuto un numero prestabilito di volte o finché si verifichi un evento (ripeti per n volte, ripeti finché) Algoritmo:: Requisiti • Deve terminare in un numero finito di passi • Deve essere deterministico: un’unica soluzione • Deve essere accurato: risultato esatto con errore minimo • Deve essere efficiente: consumare relativamente poco in tempo e spazio Programma 1. Definiti gli algoritmi usati per risolvere il mio problema. 2. Definito il linguaggio di programmazione da usare. Posso finalmente scrivere il mio programma. Programma::Requisiti I La codifica di un algoritmo nel linguaggio prescelto deve rispettare alcuni vincoli affinché il programma codificato rispetti alcuni requisiti essenziali: • Corretto: deve risolvere effettivamente il problema per cui è stato creato • Affidabile: deve mantenere la sua correttezza nel tempo • Modificabile: deve essere facile modificarlo cosi da poter adeguarsi a nuove esigenze dell’utente o dei cambiamenti hw. Programma::Requisiti II • Comprensibile e leggibile: i non autori devono poterlo comprendere • Efficiente: deve ottimizzare le risorse di tempo d’esecuzione e di memoria impegnata • Portabile: deve essere eseguibile su diversi sistemi Tutti questi requisiti fanno di un programma un buon programma. Linguaggi di programmazione • Un linguaggio di programmazione è un linguaggio definito da una sintassi precisa e la cui semantica è in ultima analisi definita da regole di traduzione in linguaggio macchina • I linguaggi di programmazione hanno – sintassi molto diverse – sono semanticamente equivalenti – hanno pragmatiche molto diverse