1 / 73

Gli algoritmi

Gli algoritmi. 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

Télécharger la présentation

Gli algoritmi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gli algoritmi

  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, non ambigua, generale, di azioni elementari che descrivono la soluzione di un problema in modo completo e deterministico. • Ogni algoritmo è un insieme finito di azioni e deve terminare dopo un numero finito di istruzioni. • Non ambiguo, univoco cioè ogni azione deve essere definita nei suoi effetti e senza ambiguità per l’esecutore • Generale: l’algoritmo deve essere valido non solo per un particolare problema ma per tutti i problemi della stessa classe. • Completo: deve considerare tutti i casi possibili che si possono verificare durante l’esecuzione e per ogni caso può indicare la soluzione da seguire. • Deterministico: partendo dagli stessi dati iniziali, l’esecuzione dell’algoritmo deve fornire sempre gli stessi risultati

  4. Definizione di Algoritmo • Un algoritmo è corretto se perviene alla soluzione del compito cui è preposto • Un algoritmo è efficiente se perviene alla soluzione del problema nel modo più veloce possibile e/o usando la minor quantità di risorse fisiche (memoria, tempo di esecuzione, ecc.) • Gli algoritmi devono essere formalizzati per mezzo di appositi linguaggi, dotati di precise strutture linguistiche (sintassi e semantica)

  5. Analisi e programmazione • Un algoritmo non può essere eseguito direttamente dall’elaboratore • Programma insieme di istruzioni (dette anche direttive o comandi) che traducono l’algoritmo e sono direttamente comprensibili, pertanto eseguibili, da parte di un elaboratore Un programma può essere anche considerato come l’ unione di istruzioni e dati ed è strutturato in: - una parte di dichiarazione in cui si dichiarano tutte le variabili del programma e il loro tipo (Dim … As …) - una parte che descrive l’algoritmo risolutivo utilizzato, mediante istruzioni del linguaggio di programmazione scelto. • Linguaggio di programmazione  linguaggio che permette la formalizzazione di un algoritmo in un programma traducendolo con un insieme di istruzioni (codice)

  6. Compiti del Programmatore • Analizzare il problema riducendolo in termini astratti, eliminando ogni componente non indispensabile e formulando un modello del problema. • Individuare una strategia risolutiva e ricondurla ad un algoritmo. • Codificare l’algoritmo in modo tale da renderlo comprensibile al calcolatore (programma). • Analizzare il risultato dell’elaborazione evidenziando eventuali errori nella formulazione del problema, nella strategia risolutiva, nella codifica dell’algoritmo (debugging, errori di sintassi o logici)

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

  8. 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 +)/2ax2 = (b )/2a • Comunicare i valori x1, x2 • Fine

  9. Valore Nome Rappresentazione di una variabile Dati su cui opera un Algoritmo:Costanti e variabili • I dati su cui opera un algoritmo sono costanti e variabili • Una costante è una locazione di memoria che mantiene lo stesso valore per tutta la durata dell'esecuzione del programma. • Una variabileidentifica una parte 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 (in Visual Basic: integer, single, double, string, boolean).

  10. 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; le variabili sono indeterminate (per lo più sono = 0) in fase di definizione dell’algoritmo, ma corrispondono a 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)

  11. Assegnazione • L’istruzione di assegnazione definisce il valore di una variabile, che resta inalterato fino all’assegnazione successiva • L’assegnazione si rappresenta con il simbolo “”: nome di variabile  espressione che si legge “assegna alla variabile nome di variabile il valore di espressione”;l’espressione a destra di  è costituita da variabili, costanti e operatori aritmetici, logici,ecc. • I nomi delle variabili possono essere scelti in modo arbitrario, ma è opportuno selezionare nomi significativi del contenuto della variabile (senza spazi o caratteri speciali)

  12. 10 4 6 Dopo l’assegnazione c a b Assegnazione • Esempi 4 6 a b+c Prima dell’assegnazione c b 14 x x+3 Prima dell’assegnazione x 17 Dopo l’assegnazione x

  13. Le istruzioni • Istruzioni operative, che producono risultati • 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 o messaggi fra l’algoritmo risolutivo e l’ambiente esterno • Istruzioni di inizio/fine esecuzione, che indicano l’inizio/la fine dell’algoritmo

  14. 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 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, ecc.) • I blocchi sono collegati tra loro da linee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari

  15. vero falso C fine scrivi X Blocco finale Blocco di controllo Blocco di scrittura I diagrammi a blocchi inizio leggi x A Blocco iniziale Blocco di elaborazione Blocco di lettura scrivi x Blocchi elementari

  16. 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

  17. inizio Leggi a,b,c delta  b2  4ac Falso Vero delta<0 Falso Vero delta=0 x1 (b+sqrt(delta))/2a x1 b/2a x2 (bsqrt(delta))/2a x2 b/2a scrivi x1 e x2 scrivi “non ci sono radici reali” fine I diagrammi a blocchi  5 Diagramma a blocchi dell’algoritmo per il calcolo delle radici dell’equazione di 2° grado ax2 + bx + c = 0

  18. 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

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

  20. 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 ... ….

  21. 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.

  22. Sintassi La condizione è sempre un'espressione di tipo booleano (VERO/FALSO). Il ramo ELSE (corrispondente all'alternativa falsa) può essere omesso. If condizione Then Istruzione1 Istruzione2 ……….. Else istruzioni End If Esempio: If valore > 0 Then Label1.Caption= "Il valore è positivo“ Else Label1.Caption= "Il valore è minore o uguale a zero“ End If

  23. 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.

  24. Il ciclo con controllo alla fine Do istruzioni Loop Until condizione (La condizione è una espressione di tipo booleano). Esempio: Somma di N numeri Dim numero, somma As Single Do numero = Val(InputBox("Inserisci un numero (zero per finire)", "Inserimento")) somma = somma + numero Loop Until numero = 0 Label1.Caption = CStr(somma)

  25. 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.

  26. Il ciclo con controllo all'inizio Do While condizione Istruzioni Loop (La condizione è una espressione di tipo booleano). Esempio: Somma N numeri Dim numero, somma As Single Do While numero <> -1 numero = Val (InputBox("Inserisci un numero (-1 per finire)", "Inserimento")) somma = somma + numero Loop Label1.Caption = CStr(somma)

  27. 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

  28. Il ciclo con contatore FOR For contatore = minimo To massimo Istruzioni Next (La variabile contatore è sempre di tipo numerico intero) Esempio Dim cont As Integer For cont = 1 To 10 Print "Il valore di CONT è: " + CStr(cont) Picture1.Print "Il valore di CONT è: " + CStr(cont) ‘con PictureBox Next

  29. Ciclo Enumerativo 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

  30. Fine

  31. Proposizioni e predicati • Una proposizione è un costrutto linguistico del quale si può asserire o negare la veridicità • Esempi • “Roma è la capitale della Gran Bretagna”falsa • “3è un numero intero”vera • Il valore di verità di una proposizione è il suo essere vera o falsa • Una proposizione è un predicato se il suo valore di verità dipende dall’istanziazione di alcune variabili • Esempi • “la variabile età è minore di 30” • “la variabile base è maggiore della variabile altezza”

  32. Proposizioni e predicati • La valutazione di un predicatoè l’operazione che permette di determinare se il predicato è vero o falso, sostituendo alle variabili i loro valori attuali • I valori vero e falso sono detti valori logici o booleani • Proposizioni e predicati possono essere espressi concisamente per mezzo degli operatori relazionali: = (uguale)  (diverso) > (maggiore) < (minore)  (maggiore o uguale) (minore o uguale) • I predicati che contengono un solo operatore relazionale sono detti semplici

  33. Proposizioni e predicati • Dato un predicato p, il predicato notp, detto opposto o negazione logica di p, ha i valori di verità opposti rispetto a p • Dati due predicati p e q, la congiunzione logica di p e q, p and q, è un predicato vero solo quando p e q sono entrambi veri, e falso in tutti gli altri casi • Dati due predicati p e q, la disgiunzione logica di p e q, p or q, è un predicato falso solo quando p e q sono entrambi falsi, e vero in tutti gli altri casi • I predicati nei quali compare almeno uno fra gli operatori logici not, and, or sono detti composti • La tavola di verità di un predicato composto specifica il valore del predicato per ognuna delle possibili combinazioni dei suoi argomenti

  34. Proposizioni e predicati • Esempio Le tavole di verità per i predicati pand q e p or q sono le seguenti:

  35. Proposizioni e predicati • Esempio • not (base>altezza) • è vero solo quando il valore di base è minore o uguale del valore di altezza • età > 30and età < 50 • è vero solo quando il valore di età è compreso tra 30 e 50 • base > altezza or base > 100 • è vero quando il valore di base è maggiore del valore di altezza, o quando il valore di base è maggiore di 100, o quando entrambe le condizioni sono verificate

  36. Note sullo schema di iterazione enumerativa 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

  37. 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

  38. 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

  39. Ciclo con controllo in testa Ciclo con controllo in coda 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 • Lacondizione 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)

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

  41. 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

  42. 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

  43. 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

  44. I vettori • Le variabili, definite come coppie <nome, valore>, sono scalari • Una coppia <nome, insieme di valori> è una variabile vettore o array e può essere immaginata come un contenitore diviso in scomparti; ciascun scomparto può contenere un valore, detto elemento o componente del vettore • Ciascuna componente è individuata dal nome del vettore, seguito dal relativo numero progressivo, racchiuso fra parentesi tonde: l’indicedel vettore • La dimensione di un vettore è il numero dei suoi elementi • I vettori sono particolarmente utili per collezionare dati fra loro correlati, sui quali devono essere effettuate le stesse operazioni

  45. I vettori • 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 v(1) v(2) v(3) v(4) Vettore v, costituito dai 4 elementi v(1),v(2),v(3),v(4)

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

  47. 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

  48. I vettori • Esempio: Algoritmo per il calcolo del massimo elemento di un vettore vero

  49. La pseudocodifica 1 • La pseudocodifica è un linguaggio per la descrizione di algoritmi • La descrizione di un algoritmo mediante pseudocodifica si compone di due parti... • la dichiarazione delle variabili usate nell’algoritmo • la descrizione delle azioni dell’algoritmo

  50. La pseudocodifica 2 • Tipo delle variabili • Il tipo di una variabile indica l’insieme dei valori che possono essere assegnati a quella variabile • Su costanti e variabili di un tipo è possibile effettuare le operazioni che sono proprie di quel tipo e tutte le operazioni di confronto (utilizzando gli operatori relazionali) • Sono permessi i seguenti 4 tipi: integer, single, double, boolean, string

More Related