Corso di Informatica di Base A.A. 2011/2012 Algoritmi e diagrammi di flusso Luca Tornatore
Cos è l informatica? Calcolatore: esecutore di ordini o automa Programma: insieme di istruzioni che possono essere eseguite da un elaboratore elettronico Programmatore: colui che individua la sequenza di ordini per risolvere un problema (c è differenza tra programmatore e Informatico?!?) Informatica: Informazione + Automazione Si riferisce ai processi e alle tecnologie che rendono possibile l immagazzinamento e l elaborazione dell informazione mediante macchine
Modello Semplificato(grezzo) Dati in Ingresso Dati in Uscita Operazioni sui dati
Abbiamo detto che L Informatica è la Scienza della Rappresentazione e dell Elaborazione dell Informazione Secondo la ACM (Association for Computing Machinery) L Informatica è lo Studio sistematico degli algoritmi che descrivono e trasformano l Informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione.
Risoluzione di un problema: Esecuzione Automatica Problema L uomo descrive l algoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma Linguaggio Macchina La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C) Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero codice binario (ad esempio dal compilatore) Input Macchina Output
Cosa è un algoritmo? Dato un problema, un algoritmo è una procedura, cioè una sequenza di passi, che può essere eseguita automaticamente da una macchina in modo da risolvere il problema dato. Non tutti i problemi sono risolvibili. Un problema risolvibile con un algoritmo si dice computabile
Esempio di Algoritmo La torta al cioccolato 1. Abbiamo gli ingredienti (uova, farina, latte, ecc..) con le giuste quantità 2. Seguiamo la ricetta 3. Serviamo la torta
Esempio L Algoritmo della Somma 1. Sposta una pallina da sinistra a destra della prima riga e una da destra a sinistra nella terza riga 2. Ripeti 1. fino ad esaurire la prima riga 3. Sposta una pallina da sinistra a destra della seconda riga e una da destra a sinistra nella terza riga 4. Ripeti 3. fino ad esaurire la seconda riga. Il risultato è il numero di palline a sinistra sulla terza riga
Risoluzione di un problema Algoritmo Input Esecutore Output Generalmente la risoluzione di un problema consiste nel prendere alcuni dati iniziali (input) relativi al problema e nel fornire un risultato (output) che risolve quest ultimo
Esecutore Infatti Problema Risolutore Algoritmo la risoluzione automatica prevede una notevole componente umana!!! Processo di Esecuzione
Definizione di algoritmo (Formale) Un algoritmo è una sequenza ordinata e finita di passi (azioni o istruzioni) che producono un ben determinato risultato in un tempo finito
Caratteristiche di un algoritmo 1. Azioni eseguibili e non ambigue 1. Non sono ammessi un pò e a piacere, che non sono termini adatti ad una macchina 2. Deterministico 1. Fatto un passo, il successivo è uno ed uno solo, ben determinato. Alternative sono possibili, ma la scelta deve essere unica 3. Numero finito di passi 4. Terminazione 1. L esecuzione prima o poi deve finire e produrre un risultato in tempo finito 2. Osservazione: la 3 non implica la 4
Esempio di non terminazione Stampare tutti i numeri successivi ad N 1. Si consideri il numero N 2. Scrivere il numero successivo ad N 3. Ripetere il passo precedente Trova il più grande numero primo Non esiste un programma che riesce a dare una risposta in tempo finito (Numero finito di passi)
Codifica dell Algoritmo Affinchè una macchina riesca a comprendere ed eseguire i passi specificati da un algoritmo, quest ultimo deve essere prima codificato in un opportuno programma scritto in un linguaggio ad alto livello (che verrà successivamente compilato/interpretato) Algoritmo Traduzione Programma
Descrizione di un algoritmo Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi. La descrizione avviene mediante: Pseudo-Codice, oppure Diagramma di flusso
Diagramma di Flusso I diagrammi di flusso permettono di descrivere in modo grafico le azioni che costituiscono un algoritmo e il loro flusso di esecuzione. Ogni azione elementare è rappresentata da un blocco. Esistono diversi tipi di blocchi Prenderemo in esame solo 4 tipi di blocchi
Istruzioni di inizio e fine Inizio Fine In degree: 0 Out degree: 1 In degree: 1 Out degree: 0
Operazioni di input e output Leggi Dato Scrivi Dato In degree: 1 Out degree: 1 In degree: 1 Out degree: 1
Istruzioni imperative Azioni oppure operazioni In degree: arbitrario Out degree: 1 Calcola: 10+2
Connettori I singoli diagrammi devono essere uniti tramite i connettori. L esecuzione delle istruzioni deve essere fatta sequenzialmente, ovvero seguendo i connettori. Quando si scrive l algoritmo bisogna fare molta attenzione alla direzione del flusso di esecuzione.
Istruzione di Assegnamento Una variabile numerica è una entità caratterizzata da Un nome, e Un valore (contenuto) Può cambiare nel tempo Una costante numerica è una entità caratterizzata da Un nome, e Un valore (contenuto) Non può cambiare nel tempo
Istruzione di Assegnamento Un espressione è una combinazione di operatori aritmetici, costanti e variabili che può essere calcolata generando un singolo valore numerico ES: X, X+1 X+(Y*3) Istruzione di assegnamento: Variabile Espressione ES: Z 3 Z X+3
Somma di due numeri Inizio Leggi X Leggi Y Z X+Y Leggo il valore di x e y Calcolo la somma e la pongo in Z Stampo il valore contenuto in z Scrivi Z Fine
Scambio di 2 variabili Inizio Leggi X Leggi Y Aux Y X Aux Scrivi X Scrivi Y Fine Leggo il valore di x e y Copio il valore di y i una variabile d apoggio Copio x in y (sovrascrivo y) Copio aux in x Stampo il valore di x e y Y X
Flusso di esecuzione Si possono avere casi in cui nel flusso di esecuzione si deve scegliere tra diverse direzioni La direzione da scegliere è subordinata al verificarsi di una condizione La condizione può assumere due stati: Vero, Falso In questi casi si parla di istruzione condizionale
Istruzioni condizionali In degree: arbitrario Out degree: 2 Condizione Vero Falso I connettori Out Sono etichettati
Massimo tra 2 numeri Inizio Leggi X Leggi Y Vero X>Y Falso Scrivi X Scrivi Y Fine
Strutture di controllo If-then-else Si No Do-While While No Si Si No
Somma Iterativa Inizio Leggi X X=0 No Z Z+1 X X-1 Si Y=0 No Z Z+1 Y Y-1 Leggi Y Z 0 Scrivi Z Fine
Gli Array Gli array o vettori sono una struttura dati Gli elementi di una array sono tutti dello stesso tipo (es. numeri) La dimensione della struttura è definita a priori A[1..10] indica un array chiamato A composto da 10 elementi. A[1], A[2],., A[10].
Gli Array L elemento generico lo posso indicare con A[i] con 1 i 10 i indica quindi la posizione A[i] il contenuto A[1] A[i] A[10]
Riempire un Array End No Start i=1 i 10 Si Leggi A[i] i++ i=1 indica la posizione di partenza i 10 indica la posizione finale i++ indica di incrementare la posizione di una unità Per 1 i 10 leggi A[i]
Stampare un Array Si End Start i=1 No i 10 Scrivi A[i] i++ i=1 indica la posizione di partenza i 10 indica la posizione finale i++ indica di incrementare la posizione di una unità Per 1 i 10 leggi A[i]
Stampare gli elementi di posto pari Si End Start i=2 i 10 Scrivi A[i] i=i+2 i=2 indica la posizione di partenza (la prima posizione pari) i 10 indica la posizione finale La posizione dovrà essere incrementata di 2 unità Per 1 i 10 scrivi A[i]
Stampare la 2 a metà di un Array End Start i=6 No i 10 Si Scrivi A[i] i++ i=6 indica la posizione di partenza i 10 indica la posizione finale i++ indica di incrementare la posizione di una unità Per 1 i 10 leggi A[i]
Calcolare la media di un Array M=S/10 Scrivi M End No Start i=1 S=0 i 10 S=S+A[i] i++ Si i=1 indica la posizione di partenza S=0 inizializzo la somma i 10 indica la posizione finale i++ indica di incrementare la posizione di una unità Per ogni ciclo sommo A[i] alla somma S Terminato il ciclo calcolo e stampo la media
Trovare il max di un Array Scrivi Max End No Start Max= A[1] i=2 i 10 A[i]> Max Si Max=A[i] i++ Si No Assumpo che il max è quello contenuto nella prima posizione i=2 indica la posizione di partenza i 10 indica la posizione finale i++ indica di incrementare la posizione di una unità Per ogni ciclo sommo A[i] Terminato il ciclo calcolo e stampo la media
Array bidimensionale o Matrice Sino ad ora abbiamo trattato array o vettori monodimensionali Potremmo lavorare con array bidimensionali Dove abbiamo righe e colonne L elemento generico lo indicheremo con A[i,j] con 1 i max colonne e con 1 j max righe Gli array bidimensionali vengono anche chiamati matrici Le immagini sono delle matrici (una per ciascun piano RGB)
A[1,1] A[1,2] A[1,3] A[1,maxC] A[2,1] A[2,2] A[i,j] A[maxR,1] A[maxR, maxc]