La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Dal problema all’ algoritmo

Presentazioni simili


Presentazione sul tema: "Dal problema all’ algoritmo"— Transcript della presentazione:

1 Dal problema all’ algoritmo

2 Analisi e programmazione
Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere formulato in modo opportuno, perché sia possibile utilizzare un elaboratore per la sua soluzione. Per analisi e programmazione si intende l’insieme delle attività preliminari atte a risolvere problemi utilizzando un elaboratore, dalla formulazione del problema fino alla predisposizione dell’elaboratore Scopo dell’analisi: definire un algoritmo Scopo della programmazione: tradurre l’algoritmo in un programma utilizzando un linguaggio di programmazione

3 Definizione di Algoritmo
Un algoritmo è sequenza finita di azioni elementari che descrivono la soluzione di un problema in modo completo Ogni algoritmo è un insieme finito di azioni e deve terminare dopo un numero finito di istruzioni. Completo: deve considerare tutti i casi possibili che si possono verificare durante l’esecuzione e per ogni caso può indicare la soluzione da seguire.

4 Programma=algoritmo + dati
Un algoritmo non può essere eseguito direttamente dall’elaboratore Programma  insieme di istruzioni (o comandi) che traducono l’algoritmo in un linguaggio comprensibile ed eseguibile da parte di un elaboratore Un programma è strutturato in: - una parte di dichiarazione in cui si dichiarano tutte le variabili del programma e il loro tipo (intero, reale, stringa, ecc.) - una parte che descrive l’algoritmo risolutivo utilizzato Linguaggio di programmazione  linguaggio che permette la formalizzazione di un algoritmo in un programma traducendolo con un insieme di istruzioni (codice)

5 Le fasi del procedimento di analisi e programmazione
Problema ANALISI Algoritmo PROGRAMMAZIONE Programma ELABORAZIONE Dati Risultati

6 Dati su cui opera un Algoritmo: Costanti e variabili
I dati su cui opera un algoritmo sono costanti e variabili Una costante è una locazione (cella) di memoria che mantiene lo stesso valore per tutta la durata dell'esecuzione del programma. Una variabile identifica una locazione (cella) di memoria destinata a contenere dei dati, che possono essere modificati nel corso dell'esecuzione di un programma. Una variabile è caratterizzata da un nome (una sequenza di caratteri e/o cifre) e da un tipo di variabile numerica, alfabetica o alfanumerica (in Visual Basic: integer, double, string). Rappresentazione di una variabile Nome Valore

7 nome di variabile  espressione
Assegnazione L’istruzione di assegnazione definisce il valore di una variabile, che resta inalterato fino all’assegnazione successiva Es. A  5 (a=5) L’assegnazione si rappresenta con il simbolo “” nome di variabile  espressione Es. A  5 si legge “assegna alla variabile A il valore di 5 I nomi delle variabili possono essere scelti in modo arbitrario, ma è opportuno selezionare nomi significativi del contenuto della variabile (senza spazi o caratteri speciali)

8 Assegnazione Esempi a = b*c b c a  b*c c a b x = x+3 x x  x+3 x 6 4
Prima dell’assegnazione a  b*c 4 c a 24 b 6 Dopo l’assegnazione 14 x = x+3 Prima dell’assegnazione x x  x+3 17 x Dopo l’assegnazione

9 Le istruzioni Le Istruzioni operative in un programma possonono essere: Istruzioni di controllo, che controllano il verificarsi di condizioni specificate e, in base al risultato del controllo, determinano il flusso di istruzioni da eseguire Esistono tre tipi di istruzioni di controllo: sequenza, selezione (alternativa), ripetizione (ciclo) Istruzioni di ingresso/uscita, che specificano come debba essere effettuata una trasmissione di dati tra l’algoritmo risolutivo e l’ambiente esterno Istruzioni di inizio/fine esecuzione, che indicano l’inizio/la fine dell’algoritmo

10 I diagrammi a blocchi (flowchart)
Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi; il diagramma a blocchi, o flowchart, è una rappresentazione grafica dell’algoritmo Un diagramma a blocchi definisce il flusso sequenziale di operazioni da eseguire per realizzare la soluzione del problema, descritta nell’algoritmo Ogni istruzione è rappresentata all’interno di un blocco la cui forma grafica è determinata dal tipo di istruzione (blocco di elaborazione, di lettura o di scrittura, di scelta, ecc.) I blocchi sono collegati tra loro da linee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari

11 Blocco di scrittura (output)
I diagrammi a blocchi inizio leggi x Elaborazione Blocco iniziale Blocco di elaborazione Blocco di lettura (input) fine Blocco finale Blocco di scrittura (output) scrivi X Blocco di controllo falso vero Condizione scrivi x Blocchi elementari

12 I diagrammi a blocchi Un diagramma a blocchi è un insieme di blocchi elementari composto da: un blocco iniziale un blocco finale un numero finito di blocchi di elaborazione e blocchi di lettura/scrittura un numero finito di blocchi di controllo

13 maggiore

14 Costanti e variabili Il valore di una variabile deve appartenere all’insieme di definizione, su cui si opera (numeri interi, reali o stringhe). Una variabile è caratterizzata dal nome e dal suo valore che è = 0 in fase di definizione dell’algoritmo, ma assume poi valori ben precisi durante ogni esecuzione Esempio: Nell’algoritmo di risoluzione delle equazioni di 2° grado, a, b, c non corrispondono a nessun valore finché non si esegue l’algoritmo per trovare le soluzioni di una specifica equazione: ad esempio x29x4=0: in fase di esecuzione il valore delle variabili a,b,c sarà: a=1, b= 9, c= 4 e nell’istruzione =b24ac viene calcolato il valore della variabile  (discriminante)

15 Esempio  Radici di equazioni di 2° grado
Problema: Calcolo delle radici reali dell’equazione di secondo grado ax2+bx+c=0 Algoritmo: Acquisire i coefficienti a,b,c Calcolare  = b24ac Se <0 non esistono radici reali, eseguire l’istruzione 7) Se = 0, x1= x2 = b/2a, poi eseguire l'istruzione 6) Calcolare x1 = (b +)/2a x2 = (b )/2a Comunicare i valori x1, x2 Fine

16 I diagrammi a blocchi Algoritmo (pseudocodifica):
fine Leggi a,b,c delta  b2  4ac delta=0 delta<0 x2 (bsqrt(delta))/2a x1 (b+sqrt(delta))/2a x2 b/2a x1 b/2a scrivi x1 e x2 “non ci sono radici reali” inizio Vero Falso Diagramma a blocchi dell’algoritmo per il calcolo delle radici dell’equazione di 2° grado ax2 + bx + c = 0 Algoritmo (pseudocodifica): 1. Acquisire i coefficienti a,b,c 2. Calcolare  = b24ac 3. Se <0 non esistono radici reali, eseguire l’istruzione 7 4. Se = 0, x1= x2 = b / 2a, poi eseguire l'istruzione 6 5. Calcolare x1 = (b +) / 2a Calcolare x2 = (b ) / 2a 6. Stampare i valori x1, x2 7. Fine

17 ALGORITMI e PROGRAMMI Algoritmo
Un algoritmo non può essere eseguito direttamente dall’elaboratore Codifica dell’algoritmo  Programma Programma: sequenza ordinata di istruzioni, scritte in un determinato linguaggio di programmazione, che specificano le azioni da compiere dall’esecutore (il computer). Algoritmo Programma

18 Programma = algoritmo + dati
Un programma è strutturato in: - una parte dichiarativa in cui si dichiarano tutte le variabili del programma e il loro tipo (intero, reale, stringa, ecc.) - una parte che descrive l’algoritmo risolutivo utilizzato Linguaggio di programmazione  linguaggio che permette la formalizzazione di un algoritmo in un programma traducendolo con un insieme di istruzioni (codice)

19 ALGORITMI e PROGRAMMI PROBLEMA ALGORITMO PROGRAMMA linguaggio di
programmazione metodo risolutivo

20 LINGUAGGI: SINTASSI E SEMANTICA
Sintassi: l’insieme delle regole che consentono di scrivere parole e frasi riconoscibili come appartenenti ad un determinato linguaggio. (collegamento ordinato delle parole nel discorso) Semantica : la disciplina che studia il significato delle parole e delle frasi.

21 LINGUAGGI a BASSO e ALTO LIVELLO
Linguaggi di Programmazione a basso livello impostano la soluzione di un problema a partire da “passi elementari”: risolvono il problema con efficienza ma sono molto vasti per risolvere algoritmi complesssi. Esempio: Assembly Linguaggi di Programmazione ad alto livello (di astrazione) le istruzioni corrispondono ad operazioni più complesse esempi: Pascal, Basic, C, C++, Java, Visual Basic ASTRAZIONE: processo di aggregazione di informazioni e dati per costruire un modello del mondo esterno.

22 Linguaggi di programmazione
Problema Risultati Dalla formulazione del problema alla sua soluzione Elaborazione Algoritmo Programma sorgente Programma traduttore Programma oggetto

23 Evoluzione dei Linguaggi
Esistono numerosi linguaggi differenti per funzionalità e tecnologia Linguaggi di Programmazione Imperativa Linguaggi Ibridi Linguaggi Orientati agli Oggetti anni ‘60 COBOL metà anni ’60 BASIC 1974 C 1994 Java 1991 VB 1968 Pascal 1990 C++ 2000 Java metà anni ’50 FORTRAN

24 Programma sorgente Programma sorgente
L’algoritmo risolutivo viene trasformato in un programma che può contenere: Programma sorgente Istruzioni di dichiarazione Istruzioni di input e output Istruzioni di controllo Istruzioni di assegnazione Richiedono l’ingresso o l’uscita di una informazione da una periferica alla memoria centrale e viceversa Descrivono le variabili utilizzate dal programma, definendone tipo e struttura Consentono di assegnare alle variabili un valore Strutture alternativa e strutture di ripetizione o cicli

25 Programma La traduzione da Linguaggio di programmazione a Linguaggio macchina viene fatta da un programma traduttore di linguaggio Due diversi approcci alla traduzione basata su interprete basata su compilatore I linguaggi di programmazione che richiedono un interprete sono definiti linguaggi interpretati, mentre quelli che richiedono un compilatore sono chiamati linguaggi compilati

26 Linguaggi Interpretati
Programma Linguaggi Interpretati La traduzione avviene per mezzo di un interprete, che traduce una riga del programma per volta, ed la esegue immediatamente, Analogia: gli interpreti simultanei nelle trasmissioni televisive o nei congressi Vantaggi: controllo del codice è immediato Svantaggi: i programmi scritti con linguaggi interpretati, per essere eseguiti, hanno bisogno dell'interprete (es. Visual Basic, Java) Linguaggi Compilati La traduzione avviene per mezzo di un compilatore, che traduce per intero il programma in un nuovo oggetto Analogia: i traduttori di libri o riviste Vantaggi: generano un eseguibile, che può essere eseguito senza bisogno di altri supporti (es. C) Svantaggi: correggere gli errori richiede più tempo

27 Linguaggi interpretati Linguaggi interpretati e compilati
Linguaggi compilati C, C++, Fortran Linguaggi interpretati Perl, PHP, Visual Basic Linguaggi interpretati e compilati Java

28 Compilazione codice sorgente es:primo.c Compilazione codice oggetto
(ling. macchina) es: primo.obj Compilatore librerie esterne precompilate es: stdio.h Collegamento codice eseguibile es: primo.exe Linker

29 Ambiente di sviluppo E’ necessario disporre di vari strumenti
Scrittura del codice del programma editor di testi (es: Blocco Note, Kate, Emacs) Ambiente di sviluppo: Compilatore e Linker delle librerie DevC++, CodeBlocks Linux gcc (C), g++ (C++)

30 Struttura di Base di un Programma
#include <stdio.h> <altre eventuali direttive> int main(){ <dichiarazioni> <operazioni> }

31 Calcolo area rettangolo
#include <stdio.h> int main() { int base, altezza, area; printf("AREA RETTANGOLO\n\n"); printf("Valore base: "); scanf("%d", &base); //Input printf("Valore altezza: "); scanf("%d", &altezza); //Input area = base*altezza; printf("Base: %d\n", base); printf("Altezza: %d\n", altezza); printf("Area: %d\n", area); // Output }

32 Direttive di preprocessore
servono ad “includere” nel programma codice già scritto (librerie) in particolare: #include <stdio.h> include il codice relativo alle operazioni di lettura e stampa dei dati da console è necessaria un’operazione di collegamento tra le librerie incluse ed il codice del programma (linker)

33 Elementi Sintattici di Base
Il codice è composto di istruzioni dichiarazioni dei dati (costanti, variabili e loro tipo) operazioni sui dati In C e C++ tutte le istruzioni si concludono con il punto e virgola ;

34 Commenti Testi che forniscono informazioni sul programma
ignorati dal compilatore Esempi: 1. // primo esercizio 2. /* Dichiarazioni su più righe */ 3. // // Dichiarazioni //

35 Variabili e costanti Parole chiave: int float double char bool string
Dichiarazione di variabili Esempi: int x, y; float a; double b; char a; Parole chiave: int float double char bool string Dichiarazione di costanti Parola chiave: const Esempio: const int N=10; const float pigreco = 3.14;

36 Operatori e Funzioni Predefinite
Principali operatori: Aritmetici : * / % Logici: && || ! (AND,OR,NOT) Relazionali o di confronto == > >= < <= != Principali funzioni predefinite: (#include <math.h> pow() sqrt() exp() log()

37 Istruzioni di Assegnazione
Esempio: int x,y; x = 3; x = x+1; x = pow(y,2); z = (x>y) && (y <=10); char segno = ‘X’;

38 Fine

39 Esempio di diagramma a blocchi
inizio Somma di una sequenza di N numeri N S =  Ritorno alla diapositiva 10 A S= S+A N=N-1 NO SI N=  S FINE

40

41

42

43 La programmazione strutturata
È stato dimostrato (Teorema fondamentale della programmazione strutturata di Jacopini e Böhm) che ogni programma può essere codificato attenendosi esclusivamente a tre strutture fondamentali: Sequenziale Condizionale o alternativa Iterativa o di ripetizione v f

44 Le strutture di controllo
La sequenza Struttura condizionale o alternativa Il ciclo con controllo alla fine Il ciclo con controllo all'inizio Il ciclo con contatore

45 La sequenza È una struttura di controllo che permette di inserire una successione di elaborazioni che saranno eseguite una di seguito all'altra. Sintassi Le istruzioni vengono scritte una di seguito all'altra, una per riga: istruzione1 istruzione2 ... ….

46 Strutture di controllo
Mediante i blocchi fondamentali, è possibile costruire delle strutture tipicamente utilizzate per il controllo del flusso di esecuzione dell’algoritmo: • Selezione • Iterazione o cicli Selezione Esprime la scelta tra due possibili azioni

47 La Struttura alternativa
È una struttura di controllo che permette di inserire una scelta tra due possibilità, che porteranno a due elaborazioni distinte (ovvero due distinti percorsi nel diagramma di flusso). Se la condizione risulterà vera, saranno eseguite le istruzioni del ramo VERO, se invece risulta falsa, saranno eseguite le istruzioni del ramo FALSO.

48 Struttura di controllo iterativa o ciclo
Il ciclo con controllo alla fine È una struttura di controllo che permette di ripetere un blocco di istruzioni finché la condizione indicata è falsa. L'uscita dal ciclo si ha solo quando la condizione diventa vera. In questo tipo di ciclo il blocco delle istruzioni viene sempre eseguito almeno una volta.

49 Ciclo Enumerativo Ciclo Indefinito
Un ciclo è detto enumerativo quando è noto a priori il numero di volte che deve essere eseguito si usa la tecnica del contatore per controllarne l’esecuzione: si usa cioè una variabile detta contatore del ciclo che viene incrementata (o decrementata) fino a raggiungere un valore prefissato Un ciclo è indefinito quando non è noto a priori il numero di volte che deve essere eseguito Questo accade quando la condizione di fine ciclo dipende dal valore di una o più variabili contenute nell’interazione. Ciclo Indefinito

50 Struttura di controllo iterativa o ciclo
Il ciclo con controllo all'inizio È una struttura di controllo che permette di ripetere un blocco di istruzioni fintanto che la condizione indicata risulta vera. L'uscita dal ciclo si ha solo quando la condizione diventa falsa. In questo tipo di ciclo il blocco delle istruzioni può non essere mai eseguito, a seconda della condizione impostata.

51 Strutture di controllo
Strutture di ripetizione o cicli Esprime la ripetizione di una sequenza di istruzioni. Nel caso piu` generale, e` costituita da: Inizializzazione: assegnazione dei valori iniziali alle variabili caratteristiche del ciclo (viene eseguita una sola volta); Corpo: esecuzione delle istruzioni fondamentali del ciclo che devono essere eseguite in modo ripetitivo; Modifica: modifica dei valori delle variabili che controllano l'esecuzione del ciclo (eseguito ad ogni iterazione); Controllo: determina se il ciclo deve essere ripetuto o meno. può essere svolto in testa o in coda alle istruzioni

52 Schema di iterazione E’costituito da una sequenza di azioni di assegnazione dette istruzioni di inizializzazione e una iterazione (ripetizione) di una sequenza di azioni per un numero specificato di volte

53 Struttura di ripetizione (ciclo) con controllo in coda
Do While /* File: media_numeri.c */ #include <stdio.h> int main() { int numero ; int conta ; float somma ; float media ; somma = 0 ; /* INIZIALIZZA LE VARIABILI */ conta = 0 ; printf("Inserire una serie di numeri. Zero per finire \n") ;

54 Struttura di ripetizione (ciclo) con controllo in coda
Do While printf("Inserisci numero: ") ; scanf ("%d", &numero) ; do {somma += numero; //somma=somma + numero; conta = conta + 1 ; scanf ("%d", &numero); }while ( numero != 0 ); media = somma/conta ; printf("\nNumeri inseriti %d, Somma %.2f, Media %.2f \n", conta, somma, media); }

55 Struttura di ripetizione (ciclo) con controllo in testa
While /* File: media_numeri.c */ #include <stdio.h> int main() { int numero ; int conta ; float somma ; float media ; somma = 0 ; /* INIZIALIZZA LE VARIABILI */ conta = 0 ;

56 Struttura di ripetizione (ciclo) con controllo in testa
While printf("Inserire una serie di numeri. Zero per finire \n") ; printf("Inserisci numero: ") ; scanf ("%d", &numero) ; while ( numero != 0 ) {somma = somma + numero ; conta = conta + 1 ; scanf ("%d", &numero); } media = somma/conta ; printf("\nNumeri inseriti %d, Somma %.2f, Media %.2f \n", conta, somma, media);

57 Il ciclo con contatore FOR
È una struttura di controllo che permette di ripetere un blocco di istruzioni un numero prestabilito di volte. La variabile contatore verrà inizializzata con il valore minimo (I=0) e, alla fine di ogni ripetizione (NEXT), la variabile verrà incrementata di uno. Solo quando la variabile assume un valore superiore al massimo previsto si uscirà dal ciclo. I=0 I=0 ISTRUZIONI I<NUM I=I+1 ISTRUZIONI I>NUM I=I+1

58 Struttura di sequenza Fra tutti i possibili schemi di flusso ne esistono alcuni che sono detti schemi fondamentali di composizione Schema di sequenza: è uno schema elementare o uno schema di sequenza inizio A fine

59 Struttura di selezione
Schema di selezione: un blocco di controllo subordina l’esecuzione di due possibili schemi di flusso al verificarsi di una condizione Nel primo caso, lo schema S viene eseguito solo se la condizione C è vera; se C è falsa, non viene eseguita alcuna azione Nel secondo caso, viene eseguito solo uno dei due schemi Sv o Sf, in dipendenza del valore di verità della condizione

60 Struttura iterativa o di ripetizione
Il ciclo o loop è uno schema di flusso per descrivere, in modo conciso, situazioni in cui uno gruppo di operazioni deve essere ripetuto più volte La condizione di fine ciclo viene verificata ogni volta che si esegue il ciclo; se la condizione assume valore vero (falso), le istruzioni vengono reiterate, altrimenti si esce dal ciclo La condizione di fine ciclo può essere verificata prima o dopo l’esecuzione dell’iterazione Le istruzioni di inizializzazione, assegnano valori iniziali ad alcune variabili (almeno a quella che controlla la condizione di fine ciclo) Ciclo con controllo in coda Ciclo con controllo in testa

61 Gli algoritmi iterativi
Problema: Calcolare la somma di tre interi consecutivi( es ) Note: La fase di inizializzazione riguarda la somma e l’indice del ciclo Il controllo di fine ciclo viene effettuato in coda

62 Gli algoritmi iterativi  4
Un ciclo è definito quando è noto a priori il numero di iterazioni: un ciclo definito è detto anche enumerativo Un contatore del ciclo tiene memoria di quante iterazioni sono state effettuate; può essere utilizzato in due modi: incremento del contatore: il contatore viene inizializzato ad un valore minimo (ad es. 0) e incrementato ad ogni esecuzione del ciclo; si esce dal ciclo quando il valore del contatore eguaglia il numero di iterazioni richieste decremento del contatore: il contatore viene inizializzato al numero di iterazioni richiesto e decrementato di uno ad ogni iterazione; si esce quando il valore del contatore raggiunge 0

63 Gli algoritmi iterativi  5
Un ciclo è indefinito quando non è possibile conoscere a priori quante volte verrà eseguito La condizione di fine ciclo controlla il valore di una o più variabili modificate da istruzioni che fanno parte dell’iterazione Comunque, un ciclo deve essere eseguito un numero finito di volte, cioè si deve verificare la terminazione dell’esecuzione del ciclo

64 Gli algoritmi iterativi
Problema: Calcolo della media di un insieme di numeri; non è noto a priori quanti sono i numeri di cui deve essere calcolata la media I numeri vengono letti uno alla volta fino a che non si incontra un x = 0, che segnala la fine dell’insieme

65 Fine

66 I vettori v(1) v(2) v(3) v(4) Vettore v, costituito dai 4 elementi v(1), v(2), v(3), v(4) L’utilizzo di variabili vettoriali, in un algoritmo, presuppone la dichiarazione esplicita della loro dimensione La dimensione del vettore costituisce un limite invalicabile per la selezione delle componenti del vettore Esempio: v(100) asserisce che il vettore v è costituito da 100 elementi; possono essere selezionati v(12), v(57), v(89), ma non v(121) o v(763), che non esistono

67 I vettori Esempio: Calcolare il vettore somma di due vettori di uguale dimensione n a(4) a(1) a(2) a(3) 3 5 7 b(4) b(1) b(2) b(3) 5 6 9 1 c(4) c(1) c(2) c(3) 8 11 16 1

68 I vettori Esempio: algoritmo per calcolare il vettore somma di due vettori Note: L'utilità dei vettori consiste nel-l’impiego della tecnica iterativa in modo da effettuare la stessa operazione su tutti gli elementi del vettore Usando la variabile contatore di un ciclo come indice degli elementi di un vettore è possibile considerarli tutti, uno alla volta, ed eseguire su di essi l’operazione desiderata

69 I vettori Esempio: Algoritmo per il calcolo del massimo elemento di un vettore vero

70 Esempio  Radici di equazioni di 2° grado
Problema: Calcolo delle radici reali dell’equazione di secondo grado ax2+bx+c=0 Algoritmo: Acquisire i coefficienti a,b,c Calcolare  = b24ac Se <0 non esistono radici reali, eseguire l’istruzione 7) Se = 0, x1= x2 = b/2a, poi eseguire l'istruzione 6) Calcolare x1 = (b +)/2a x2 = (b )/2a Comunicare i valori x1, x2 Fine

71 I diagrammi a blocchi Algoritmo (pseudocodifica):
fine Leggi a,b,c delta  b2  4ac delta=0 delta<0 x2 (bsqrt(delta))/2a x1 (b+sqrt(delta))/2a x2 b/2a x1 b/2a scrivi x1 e x2 “non ci sono radici reali” inizio Vero Falso Diagramma a blocchi dell’algoritmo per il calcolo delle radici dell’equazione di 2° grado ax2 + bx + c = 0 Algoritmo (pseudocodifica): 1. Acquisire i coefficienti a,b,c 2. Calcolare  = b24ac 3. Se <0 non esistono radici reali, eseguire l’istruzione 7 4. Se = 0, x1= x2 = b / 2a, poi eseguire l'istruzione 6 5. Calcolare x1 = (b +) / 2a Calcolare x2 = (b ) / 2a 6. Stampare i valori x1, x2 7. Fine


Scaricare ppt "Dal problema all’ algoritmo"

Presentazioni simili


Annunci Google