Il problema di fondo Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Fondamenti di Informatica n Laurea in Ingegneria Civile e Ingegneria per l’ambiente e il territorio Descrizione di un problema þindividuazione di una soluzione q Algoritmi e Programmazione (in C) q q Stefano Cagnoni e Monica Mordonini Quale è il giusto punto di partenza? Cioè, di quali dati abbiamo bisogno ? Quali metodologie o tecniche utilizzare? In quale ordine eseguire le operazioni consentite da tali tecniche ? FI - Algoritmi e Programmazione Algoritmo Algoritmo n Dall'arabo al-Khuwarizmi, a sua volta dal greco arithmós n Un algoritmo è un metodo generale che risolve in un tempo finito e con una sequenza finita di passi qualsiasi istanza di un dato problema di elaborazione. n FI - Algoritmi e Programmazione FI - Algoritmi e Programmazione 4 Programma n Fase di descrizione (scrittura) di un algoritmo attraverso un insieme ordinato di codici (istruzioni), appartenenti a un qualche linguaggio di programmazione, che specificano le azioni da compiere n n n Il prodotto della codifica è un programma FI - Algoritmi e Programmazione Un algoritmo può non essere l’unica soluzione al problema 3 Codifica di un algoritmo n E’ possibile “trovare” algoritmi anche per la risoluzione di problemi non strettamente informatici Esempi: q Spiegare un percorso stradale q Istruzioni per il montaggio di un mobile q Istruzioni per la realizzazione di una torta n n 2 n 5 Testo scritto in accordo alla sintassi e alla semantica di un linguaggio di programmazione Un programma può non essere un algoritmo (basta che la sequenza di mosse non sia finita cioè che il programma non termini)... ... e tuttavia può essere molto utile (es. gestione semafori) Un programma rappresenta l’insieme delle istruzioni che descrivono un processo espresse in un qualche linguaggio Un processo trasforma un insieme di dati iniziali nei risultati finali mediante una successione di azioni elementari FI - Algoritmi e Programmazione 6 1 Esecuzione n n Algoritmo L’esecuzione delle azioni nell’ordine specificato dall’algoritmo consente di ottenere i risultati che risolvono il problema a partire dai dati in ingresso Problema : þ algoritmo þ programma n Un algoritmo deve avere le seguenti proprietà: q q q Metodo risolutivo Codifica in un linguaggio di programmazione FI - Algoritmi e Programmazione q 7 Algoritmo FI - Algoritmi e Programmazione Per definire un algoritmo è necessario: q q q 8 Il crivello di Eratostene n n Finitezza: composto da un numero finito di passi elementari. Non ambiguità (determinismo): i risultati non variano in funzione della macchina/persona che esegue l'algoritmo. Realizzabilità: deve essere eseguibile con le risorse a disposizione. Efficienza (auspicabile): eseguire il numero minimo di operazioni Condurre un'attenta analisi del problema ed eventualmente suddividere il problema in sottoproblemi più piccoli. Individuare i possibili ingressi e precisare le uscite (definizione dei dati). Definire completamente e dettagliatamente la sequenza dei passi che portano alla soluzione. FI - Algoritmi e Programmazione 1. Si costruisca una sequenza ordinata dei numeri fra 2 e n. 2. Si estragga il primo numero dalla sequenza. E’ necessariamente un numero primo. 3. Si eliminino dalla sequenza tutti i multipli del numero estratto al passo 2). 4. Se la sequenza non è vuota si torna la passo 2) altrimenti si termina. 9 Il crivello di Eratostene Si vogliono trovare tutti i numeri primi compresi fra 2 e n (in modo efficiente). FI - Algoritmi e Programmazione 10 Diagrammi di flusso (Flow-Chart) Esempio Sequenza iniziale (da 2 a 20): n 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20 q 2 è primo; lo elimino con tutti i suoi multipli: n 3,5,7,9,11,13,15,17,19 q 3 è primo; lo elimino con tutti i suoi multipli: n 5,7,11,13,17,19 q 5 è primo; lo elimino con tutti i suoi multipli: I diagrammi di flusso sono un formalismo grafico per descrivere gli algoritmi. I diagrammi di flusso scompongono in passi successivi gli algoritmi. Un diagramma di flusso è una descrizione più efficace e meno ambigua di una descrizione a parole. … q 19 è primo, la sequenza e’ vuota, termino. FI - Algoritmi e Programmazione 11 FI - Algoritmi e Programmazione 12 2 Diagrammi di flusso n Diagrammi di flusso Operazioni rappresentabili con un diagramma di flusso n Ingresso/Uscita dati (rappresentate come schede ) q Operazioni sui dati (rappresentate come rettangoli) q q Trasferimento di informazione (Assegnamenti) n Calcolo di espressioni aritmetiche e logiche Assunzione di decisioni (rappresentate come rombi) q Esecuzione di iterazioni, o cicli (combinazioni di Un diagramma di flusso è costituito da due tipi di entità: q Nodi n n q n Possono contenere costanti e variabili FI - Algoritmi e Programmazione Archi orientati n rettangoli e rombi) n rappresentano le operazioni e gli stati di inizio e fine dell’algoritmo rappresentano con frecce il ‘flusso’ dei dati, quindi la sequenza delle operazioni: il risultato prodotto da un nodo è successivamente elaborato dal nodo a cui punta l’arco uscente dal primo nodo Una struttura di questo tipo è detta grafo (orientato) 13 Tipi di Nodi FI - Algoritmi e Programmazione 14 Strutture di Controllo Start Var1 Var1 ← Espr1 Inizio Lettura dati Elaborazione / Assegnamento Stop Var1 Fine Scrittura dati O No C Sì C O1 No O2 C Sì No Sì O Si No Espr1 Espr1 Espr1 Espr1 Espr1 Espr1 = ≠ > ≥ < ≤ Espr2 Espr2 Espr2 Espr2 Espr2 Espr2 While - Do Ripete una stessa operazione O finché la condizione C resta vera Decisione FI - Algoritmi e Programmazione 15 Programmazione Strutturata n n n Repeat - Until Ripete una stessa operazione O finché la condizione C non diventa vera If - Then - Else Se C è vera esegue O1, altrimenti esegue O2 FI - Algoritmi e Programmazione 16 Esempio: Somma di Tre Numeri Si compone di sequenze di azioni, decisioni (if then, if then else) e cicli (while-do, repeat until). Ogni diagramma ha esattamente un ingresso ed una uscita. Ogni azione può essere una operazione semplice q una azione composta da altri diagrammi strutturati Start Var1 Somma ← Var1 +Var2 + Var3 Somma Var2 q FI - Algoritmi e Programmazione Stop Var3 17 FI - Algoritmi e Programmazione 18 3 Esempio: Somma di N Numeri Start No I<N Sì Il Linguaggio C Var N Somma ← Somma + Var I←I+1 I←0 Somma ← 0 Somma Stop FI - Algoritmi e Programmazione 19 Caratteristiche Caratteristiche n Linguaggio sequenziale (lineare), imperativo, strutturato a blocchi n usabile anche come linguaggio di sistema n basato su pochi concetti elementari q q q q q q software di base sistemi operativi compilatori ... FI - Algoritmi e Programmazione q q q 21 Esempio di programma in C FI - Algoritmi e Programmazione 22 Dati n #include <stdio.h> int main() { printf(" Hello World!! "); return 0; } FI - Algoritmi e Programmazione dati (tipi primitivi, tipi di dato) espressioni dichiarazioni/definizioni funzioni istruzioni/blocchi 23 n Un elaboratore è un manipolatore di simboli L’architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati detti tipi primitivi q q q q dominio dei numeri interi dominio dei caratteri dominio dei numeri reali dominio delle stringhe di caratteri FI - Algoritmi e Programmazione 24 4 Tipi di dato primitivi in C n n n n n Variabili Caratteri q char caratteri ASCII (A<->65, {<->123, ..), interi ([0,255], [-127,128] Interi con segno (più lunghi di 8 bit) q short int long Naturali (interi senza segno) q unsigned short unsigned unsigned long Reali q float double long double I dati Booleani non esistono in C come tipo primitivo, si usano gli interi : q 0 indica falso q 1 indica vero (in realtà qualsiasi valore diverso da 0 indica vero) FI - Algoritmi e Programmazione q q q Un nome Un valore modificabile n Il risultato di un’espressione contenente delle variabili, si ottiene sostituendo ad ogni variabile il suo valore. n L’assegnamento (simbolo =) consente di modificare il valore di una variabile FI - Algoritmi e Programmazione n Caratteri q singolo carattere racchiuso fra apici q caratteri speciali n int a = 0, b = 100; char a_capo = ‘\n’; n n n Costanti: è possibile dichiarare un dato come costante; il compilatore rifiuta un qualunque assegnamento effettuato su di esso q n “ciao” FI - Algoritmi e Programmazione n n “hello\n” In C le stringhe sono semplici sequenze di caratteri di cui l’ultimo sempre presente in modo implicito è ‘\0’ (codificato come valore 0 su 8 bit) q a capo tabulazione apice 28 Espressioni Una stringa è una collezione di caratteri delimitata da virgolette q ‘\n’ ‘\t’ ‘\’’ 27 Stringhe n ‘A’ ‘C’ const float Pi_greco = 3.14; FI - Algoritmi e Programmazione n 26 Costanti di tipi primitivi Inizializzazione variabile : è possibile assegnare un valore iniziale ad una variabile al momento della sua dichiarazione (obbligatoria! Non si possono usare variabili che non siano state dichiarate) q n Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da: 25 Variabili e Costanti n n q q “ciao” equivale alla sequenza {‘c’,’i’,’a’,’o’,’\0’} FI - Algoritmi e Programmazione n Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere semplice (una costante, un simbolo di variabile) o composta 29 ogni linguaggio introduce un insieme di operatori che permettono di aggregare altre espressioni (operandi) per formare espressioni composte esempi : 4*8-2arcsin(x) a&&(b||c) FI - Algoritmi e Programmazione 30 5 Classificazione degli operatori n n Operatori aritmetici In base al tipo di operandi (aritmetici, logici,relazionali) In base al numero degli operandi (unari, binari, ternari..) FI - Algoritmi e Programmazione Relazione C Uguaglianza Diversita` Maggiore di Minore di Maggiore o uguale a Minore o uguale a == != > < >= <= ! && || 3 ? 10 : 20 n x ? 10 : 20 q q n in particolare se condiz è vera il valore assunto dall’espressione nel suo complesso è espr1 FI - Algoritmi e Programmazione C Unario Binario Binario n q o il valore denotato da espr1 o quello denotato da espr2 in base al valore della espressione condiz n operatore Not And Or FI - Algoritmi e Programmazione condiz ? espr1 : espr2 l’espressione denota q Connettivo logico 34 Espressioni condizionali : esempi Una espressione condizionale è introdotta dall’operatore ternario q 32 Anche esse denotano un valore intero da interpretare come vero (1) o falso (0) 33 Espressioni condizionali q + * / / % Espressioni e operatori logici FI - Algoritmi e Programmazione n C Unario Binario Binario Binario Binario Binario Binario FI - Algoritmi e Programmazione n q operatore Inversione di segno Somma Differenza Moltiplicazione Divisione fra interi Divisione fra reali Modulo (fra interi) 31 Operatori relazionali n Operazione denota 10 se x è vera (diversa da zero) oppure 20 se x è falsa (x>y) ? x : y q 35 denota sempre 10 (3 è sempre vera) denota il maggiore fra x e y FI - Algoritmi e Programmazione 36 6