Codifica degli algoritmi Università degli studi di Parma Dipartimento di Ingegneria dell’Informazione Informatica – a.a. 2012/13 Algoritmo formulato per essere comunicato tra esseri umani – chiaro, sintetico e intuitivo – codificato in linguaggi informali o semi-formali (linguaggio naturale, diagrammi di flusso, …) Informatica Facoltà di Medicina Veterinaria a.a. 2012/13 prof. Stefano Cagnoni Algoritmo formulato per essere eseguito automaticamente – preciso ed eseguibile – codificato in linguaggi formali comprensibili dagli esecutori automatici (linguaggio macchina o linguaggio di programmazione di alto livello) La formalizzazione dell’informazione: Dati e Diagrammi di Flusso Informatica 2012/2013 Algoritmo = dati + istruzioni Dati e istruzioni Composto da Algoritmo Dati Iniziali Informatica 2012/2013 Tipi di dati – – – – – Dati Finali (soluzione) Dati -2- Numeri naturali, interi, reali Caratteri alfanumerici Dati logici o booleani Array o vettori di n elementi Matrici di mxn elementi Informatica 2012/2013 -3- ) Istruzioni – Operazioni di Input/Output – Operazioni Aritmetico-logiche – Strutture di controllo Istruzioni che operano sui dati (1, -2, 0.34) (A, B, -,^,3) (Vero, Falso) ({1,2,3}) ( 123 456 (es. leggi, scrivi) (es. max = A + B) (es. SE, RIPETI ) -4- Pag. 1 1 Criteri di classificazione dei dati Operazioni elementari Visibilità da parte dell’utente – visibile (di ingresso o uscita) – trasparente (dati temporanei di supporto) – Es. C (A + B) Variabilità nel tempo – costanti – variabili (acquisizione dall’esterno o assegnazione) 2. Diagramma di flusso “Stampa B” -6- Rappresentare gli algoritmi Linguaggio naturale - Sollevare il ricevitore - Attendere il segnale di linea libera - Comporre il numero -… DF Inizio Lettura aeb Pseudo codice Input A,B 3. Pseudo-codice Tot 0 4. Linguaggio di programmazione Tot Tot + B Passo P0 Passo P1 ca– b Sì While A!=0 Do oppure Informatica 2012/2013 -5- Rappresentazione degli Algoritmi 1. Linguaggio naturale Lettura e scrittura di variabili – “Leggi A” – elementari o scalari (interi, alfanumerici, booleani, …) – strutturati (array, matrici, …) Condizioni sul valore di singole variabili – se (A > B) allora … altrimenti … Struttura Informatica 2012/2013 Operazioni aritmetiche e assegnamenti di valori a singole variabili c> 0? Scrittura “max è a” Ling. programmazione #include <stdio.h> No Passo P2 Scrittura “max è b” Fine Int main (void){ puts(“ciao mondo!”); AA–1 return Exit_success; Output Tot } Informatica 2012/2013 Informatica 2012/2013 -7- -8- Pag. 2 2 Diagrammi di flusso Diagrammi di flusso I blocchi sono collegati fra loro da archi orientati: – L’arco identifica la sequenza delle operazioni Inizio Fine Operazioni di ingresso/uscita – La freccia identifica il flusso della esecuzione Sì predicato No I circoletti indicano la ricongiunzione di diversi ‘percorsi’, MAI una biforcazione (lo fa la selezione a due vie) NO SI’ Elaborazione Selezione a due vie Informatica 2012/2013 Sottoprogramma Informatica 2012/2013 -9- Il maggiore fra 2 numeri interi x, y - 10 - Diagramma di Flusso di max Inizio Algoritmo max 1. Leggi i valori di x e y dall’esterno Leggi x e y 2. Calcola la differenza d fra x e y (d=x-y) d=x-y 3. Se d è maggiore di 0 vai al passo 5 altrimenti prosegui in sequenza Si 4. Stampa ‘il massimo è …’ seguito dal valore di y e vai a 6 Scrivi ‘max è x’ 5. Stampa ‘il massimo è …’ seguito dal valore di x 6. Termina l’esecuzione Informatica 2012/2013 d>0? No Scrivi ‘max è y’ Fine Informatica 2012/2013 - 11 - - 12 - Pag. 3 3 Diagramma di Flusso di max Determinare il massimo fra N numeri interi Inizio Algoritmo max_N 1. Leggi il valore di N dall’esterno Leggi x e y Passo 1 d=x-y Passo 2 3. Trova il maggiore m fra i primi due numeri (con max) Passo 3 4. Finchè (hai esaminato meno di N numeri) 2. Leggi i primi due numeri Si Passo 5 No d>0? Scrivi ‘max è x’ a. Scrivi ‘max è y’ b. Passo 4 c. 5. Stampa ‘il massimo è…’ ed il valore di m e termina Passo 6 Fine Informatica 2012/2013 Informatica 2012/2013 - 13 - DF per il massimo di N numeri (versione 1) Supponiamo N fissato Inizio m = max(a,b) Si Ancora numeri da esaminare ? Leggi il nuovo numero in a Informatica 2012/2013 I DF sono un primo passo verso la formalizzazione di un algoritmo in modo non ambiguo Per ottenere una codifica interpretabile direttamente dalla macchina dobbiamo però specificare molti più dettagli: – trasformare tutte le ‘frasi’ in variabili e modifiche su di esse: No • Scrivi ‘max è m’ m = max(a,m) - 15 - DF e programmi (1) Leggi i primi due numeri x1 e x2 e memorizzali nelle variabili a e b sottoprogramma Leggi un nuovo numero x Trova il maggiore fra m e x con l’algoritmo max Assegna il valore del maggiore a m Fine es : ‘ancora numeri da esaminare’ deve essere tradotto in qualcosa di calcolabile dalla macchina usando solo le operazioni elementari Informatica 2012/2013 - 16 - - 17 - Pag. 4 4 DF per il massimo di N numeri (versione 2) Supponiamo N >= 2 DF e programmi (2) Inizio Leggi N e i primi due numeri a e b I=2 – decidere come codificare l’informazione m = max(a,b) Si I=I+1 I<N Leggi il nuovo numero in a Per ottenere una codifica interpretabile direttamente dalla macchina dobbiamo anche : • No – scrivere il tutto con una codifica ‘leggibile’ dalla macchina Scrivi ‘max è m’ • m = max(a,m) Informatica 2012/2013 Fine - 19 - Diagrammi di flusso e programmi: max in C main() /* calcola max */ { int x, y, d; … soluzione…. – usare linguaggi di ‘livello’ più alto (linguaggi di programmazione ad alto livello) – usare dei programmi appositi per far tradurre i nostri programmi in linguaggio macchina (i compilatori) … ma la macchina lavora molto a basso livello (linguaggio macchina, codificato mediante bit) !!!! Informatica 2012/2013 - 18 - DF e programmi (3) non banale in esempi più complessi del nostro, ad esempio se voglio codificare un’immagine o un video Inizio Leggi x e y d=x-y scanf ("%d %d”, &x, &y) ; d=x-y; if (d > 0) printf (”il max è %d”, x) ; else printf (”il max è %d”, y) ; return ; Importante: – I tipici linguaggi (C, Java, Fortran, Basic…) permettono di definire sequenze di operazioni e strutture di controllo del tutto analoghe a quelle contenute nei diagrammi di flusso che abbiamo visto finora Si d>0? Scrivi ‘max è x’ No Scrivi ‘max è y’ Fine } Informatica 2012/2013 Informatica 2012/2013 - 20 - - 21 - Pag. 5 5 DF e programmi : max_N in C (1) DF e programmi : max_N in C (2) main() /* calcola max_N */ { unsigned int m, i, a, b; i=2; scanf ("%d %d”, &a, &b); m = max(a,b); while (i < N) { scanf ("%d ”, &a) ; m = max(a,m); i=i+1; } printf (”il max è %d”, m) ; return ; } int max(int x, int y) /* sottoprogramma che calcola max */ { int d; d=x-y; if (d > 0) return x; else return y; } Informatica 2012/2013 Informatica 2012/2013 - 22 - - 23 - …. Fine per oggi… Informatica 2012/2013 Pag. 6 6