Fondamenti 17/10/2013

  • 485 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
485
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
30
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. PROGRAMMAZIONE I Algoritmo FONDAMENTI DI PROGRAMMAZIONE Problemi, Algoritmi, Diagrammi di flusso 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. Gianluca Cincotti • Un problema risolvibile mediante un algoritmo si dice computabile. ( Lezione I ) Dipartimento di Matematica e Informatica Università di Catania e-mail : cincotti@dmi.unict.it G.Cincotti Esempio di algoritmo Un altro esempio di algoritmo - Procuriamo il kit e gli strumenti; - Abbiamo gli ingredienti (pollo, olio, mandorle, cipolla, - Apriamo la scatola; sale, pepe, etc.) con le giuste quantità; - Leggiamo le istruzioni; - Seguiamo la ricetta; - Mettiamo insieme i pezzi. - Serviamo il piatto a tavola. Programmazione I Fondamenti di Programmazione, pag. 2 La costruzione di un kit di montaggio: Il pollo alle mandorle: G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 3 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 4 Risoluzione di un problema Ma … Algoritmo Non è così facile come sembra ! • Per scrivere la giusta “sequenza di passi” Input Esecutore Output bisogna essere un bravo cuoco o un bravo costruttore ! Generalmente, la risoluzione di un dato problema consiste nel prendere alcuni dati iniziali (input) relativi al problema e nel fornire un risultato (output) che risolve quest’ultimo. G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 5 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 6 1
  • 2. Infatti … Risolutore Algoritmo Un algoritmo è una sequenza ordinata e Esecutore Problema finita di passi (azioni o istruzioni) che Uomo … la risoluzione automatica prevede comunque una notevole componente umana !!! Macchina producono un ben determinato risultato in un tempo finito. Processo di esecuzione Programmazione I G.Cincotti Definizione di algoritmo Fondamenti di Programmazione, pag. 7 Caratteristiche di un algoritmo 1. Azioni eseguibili e non ambigue. • Non ambigue, inoltre non sono ammessi “un pò” e “a piacere”, che non sono termini adatti ad una macchina. Fatto un passo, il successivo è uno ed uno solo, ben determinato. Alternative sono possibili, ma la scelta deve essere univoca. 3. Numero finito di passi. 4. Terminazione. • • Fondamenti di Programmazione, pag. 8 Esempio di “non terminazione” 1. Si consideri un numero N; 2. Scrivere N; 2. Determinismo. • Programmazione I G.Cincotti 3. Scrivere il numero successivo; 4. Ripetere il passo precedente. L’esecuzione prima o poi deve finire e produrre il risultato in tempo finito. Osservazione : la 3 non implica la 4. Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 9 Programmazione I G.Cincotti Ancora un esempio Fondamenti di Programmazione, pag. 10 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 di alto livello. Ricerca di un nominativo in un elenco. • Non ordinato. – Es.: Una lista di firme. • Ordinato. Algoritmo – Es.: Elenco telefonico. G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 11 G.Cincotti Traduzione Programmazione I Programma Fondamenti di Programmazione, pag. 12 2
  • 3. L’esecuzione automatica Uomo Pseudo-codice Macchina G.Cincotti Programmazione I Output Fondamenti di Programmazione, pag. 13 Mescolare fino a quando il pollo sarà ben dorato; Aggiungere del pepe; Rosolare con vino bianco fino a quando il pollo è cotto; 6. Esecuzione Unire le mandorle pelate al soffritto; 5. Traduttore 2. 4. Programma Preparare il soffritto ed aggiungervi il pollo; 3. Linguaggio di alto livello Input Ricetta del pollo alle mandorle: 1. Algoritmo Linguaggio macchina Scomposizione in sottoproblemi Aggiungere olio q.b.; 7. Se preferisci salato, allora aggiungi sale; Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 14 Scomposizione in sottoproblemi Descrizione di un algoritmo La ricetta precedente è un esempio di cosa significa scomporre un problema in sottoproblemi. Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi. Ogni sottoproblema può essere scomposto in problemi via via più elementari. La descrizione avviene mediante : • pseudo-codice, oppure • diagramma di flusso. Top-down vs. Bottom-Up G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 15 Programmazione I G.Cincotti Diagrammi di flusso Fondamenti di Programmazione, pag. 16 Diagrammi di flusso (1) I diagrammi di flusso permettono di descrivere in modo grafico le azioni che costituiscono un algoritmo e il loro flusso di esecuzione. Istruzioni di inizio e fine. Inizio • Ogni azione elementare è rappresentata da un blocco. Fine – Esistono 4 tipi di blocchi. G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 17 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 18 3
  • 4. Diagrammi di flusso (2) Diagrammi di flusso (3) Operazioni di lettura (input) o scrittura (output). Leggi il dato G.Cincotti Programmazione I Istruzioni imperative (azioni oppure operazioni). Calcola : 20+34 Scrivi il dato Fondamenti di Programmazione, pag. 19 Programmazione I G.Cincotti Connettori Istruzione di assegnamento Una variabile numerica è un’entità caratterizzata : I singoli diagrammi devono essere uniti tramite i connettori. L’esecuzione delle istruzioni deve essere fatta sequenzialmente, ovvero seguendo i connettori. • da un nome, e • da un valore (o contenuto) – che può cambiare nel tempo … Un’espressione è una combinazione di operatori aritmetici, costanti e variabili che può essere calcolata generando un singolo valore numerico. • Quando si scrive l’algoritmo bisogna fare molta attenzione alla direzione del flusso di esecuzione. • Es.: X, Programmazione I Fondamenti di Programmazione, pag. 21 X + 1, X + (Y * 3). Istruzione di assegnamento : “←” • Variabile ← Espressione; – Es.: G.Cincotti Fondamenti di Programmazione, pag. 20 Z ← 3; Esempio Z ← X + 3; Programmazione I G.Cincotti X ← X + 1; Fondamenti di Programmazione, pag. 22 Diagramma di flusso : Somma Inizio Descrivere, mediante diagramma di flusso, un algoritmo che calcoli la somma di due numeri letti in input. Z ← X+Y Leggi X Stampa Z Leggi Y G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 23 G.Cincotti Programmazione I Fine Fondamenti di Programmazione, pag. 24 4
  • 5. Esempio Diagramma di flusso: Scambio Inizio Descrivere, mediante diagramma di flusso, un algoritmo che scambi i valori di due variabili lette in input. Aux ← X Leggi X Scrivi X X←Y Leggi Y Scrivi Y Y ← Aux Fine Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 25 Programmazione I G.Cincotti Variazioni nel flusso di esecuzione Fondamenti di Programmazione, pag. 26 Diagrammi di flusso (4) Istruzioni condizionali. Ci sono dei momenti in cui il flusso di esecuzione può scegliere tra diverse direzioni; Es.: In genere, questi salti sono subordinati al verificarsi di una condizione (che può risultare Condizione vera o falsa); Falso Falso Più sale ? Si parla di istruzioni condizionali. Vero Vero G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 27 Programmazione I G.Cincotti Esempio Fondamenti di Programmazione, pag. 28 Diagramma di flusso : Max Inizio Descrivere, mediante diagramma di flusso, un algoritmo che determini il massimo tra due numeri letti in input. X>Y Leggi X Vero Falso Stampa Y Stampa X Leggi Y Fine G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 29 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 30 5
  • 6. Esempio Diagramma di flusso : Pari o… Inizio Descrivere, mediante diagramma di flusso, un algoritmo che determini se un numero letto in input è pari o dispari. Resto = 0 Leggi N Vero Falso Scrivi : “N è dispari” Scrivi : “N è pari” Dividi N per 2 Fine G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 31 G.Cincotti Esercizio Programmazione I Fondamenti di Programmazione, pag. 32 Ripetizione o “ciclo” … Scrivere la ricetta del pollo alle mandorle utilizzando i diagrammi di flusso. • Nota: dove è richiesta una ripetizione – ad esempio fino a quando – utilizzare un’istruzione condizionale del tipo mostrato nella prossima diapositiva. Il pollo è cotto? Falso Rosolare con vino Vero … G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 33 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 34 PROGRAMMAZIONE I FONDAMENTI DI PROGRAMMAZIONE ( Lezione II ) Fine Notazione Lineare Strutturata Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail : cincotti@dmi.unict.it G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 35 6
  • 7. Esempio Esempio : Fattoriale Inizio Descrivere, mediante diagramma di flusso, un algoritmo che calcoli il fattoriale di un numero intero positivo letto in input. Fatt ← Fatt * M Leggi N M ← M +1 Fatt ← 1 VERO M←1 M>N FALSO Scrivi Fatt Fine Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 37 Programmazione I G.Cincotti Considerazioni Fondamenti di Programmazione, pag. 38 Notazione Lineare Strutturata I diagrammi a blocchi si rivelano : Tre costrutti fondamentali : • poco pratici, • Sequenza, • soggetti a errori, • Selezione, • illeggibili se di notevole complessità. • Iterazione. Per ovviare a tali inconvenienti si adotta la Notazione Lineare Strutturata (NLS) o pseudocodice. Programmazione I G.Cincotti Fondamenti di Programmazione, pag. 39 Inoltre, esiste un unico punto d’ingresso ed un unico punto d’uscita. Programmazione I G.Cincotti Sequenza Fondamenti di Programmazione, pag. 40 Selezione (o condizione) if (Condizione) then Istruzione 1 Falso Istruzione 1; Istruzione 2 ≡ … Condizione Istruzione 2; ≡ else Blocco 2; … Istruzione n; end if Blocco 2 Blocco 1 La clausola “else” può anche essere assente. Istruzione n G.Cincotti Blocco 1; Vero Programmazione I Fondamenti di Programmazione, pag. 41 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 42 7
  • 8. Ricapitolando ... Iterazione (o ciclo) Falso Condizione while (Condizione) do Vero ≡ Blocco; end while; Blocco G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 43 Programmazione I G.Cincotti Risultato fondamentale Fondamenti di Programmazione, pag. 44 Esempio : Somma Inizio TEOREMA (Böhm-Jacopini) : Z ← X+Y • I tre costrutti fondamentali della NLS sono sufficienti a descrivere qualunque algoritmo. Leggi X Stampa Z Leggi Y G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 45 Fine Programmazione I G.Cincotti Esempio : Somma in NLS Fondamenti di Programmazione, pag. 46 Esempio : Max Inizio Inizio Leggi X Leggi Y Z←X+Y Stampa Z Fine X>Y Leggi X Vero Falso Stampa Y Stampa X Leggi Y Fine G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 47 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 48 8
  • 9. Esempio : Max in NLS Esempio : Numeri da 1 a N Inizio Leggi X Leggi Y if (X > Y) then Stampa X else Stampa Y end if Fine G.Cincotti Programmazione I Inizio Leggi N M←0 while (M < N) do M←M+1 Stampa M end while Fine Fondamenti di Programmazione, pag. 49 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 50 Esempio : Esempio : Somma dei primi N numeri Somma dei numeri pari minori di N Inizio Leggi N i←0 S←0 while (i < N) do i←i+1 S←S+i end while Stampa S Fine G.Cincotti Programmazione I Inizio Leggi N i←2 S←0 while (i < N) do S←S+i i← i+2 end while Stampa S Fine Fondamenti di Programmazione, pag. 51 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 52 Algoritmo di Euclide per il m.c.m. Inizio Leggi A, B MA ← A MB ← B while (MA <> MB) do if (MA > MB) then MB ← MB + B else MA ← MA + A end if end while Stampa “mcm =” MA Fine G.Cincotti Programmazione I Es.: m.c.m. (3, 7) = 21 MA 3 6 9 MB 7 Fine 14 12 15 21 18 21 Fondamenti di Programmazione, pag. 53 G.Cincotti Programmazione I Fondamenti di Programmazione, pag. 54 9