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