Il 0% ha trovato utile questo documento (0 voti)
157 visualizzazioni35 pagine

Lezione1 - 2 Informatica

Il documento descrive i concetti di base della programmazione, spiegando cosa si intende per programmazione e delineando le principali fasi del processo di programmazione: specifica del problema, individuazione dell'algoritmo, codifica dell'algoritmo in un linguaggio di programmazione e esecuzione.

Caricato da

Nunzio Iademarco
Copyright
© Attribution Non-Commercial (BY-NC)
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
157 visualizzazioni35 pagine

Lezione1 - 2 Informatica

Il documento descrive i concetti di base della programmazione, spiegando cosa si intende per programmazione e delineando le principali fasi del processo di programmazione: specifica del problema, individuazione dell'algoritmo, codifica dell'algoritmo in un linguaggio di programmazione e esecuzione.

Caricato da

Nunzio Iademarco
Copyright
© Attribution Non-Commercial (BY-NC)
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 35

Concetti di base della programmazione

Cosa ` e?

Cosa intendiamo per programmazione

I calcolatori sono macchine in grado di eseguire velocemente e con precisione sequenze di operazioni elementari. A dierenza di altre macchine automatiche (es. lavatrici, calcolatrici tascabili, registratori di cassa, ecc.) i calcolatori sono programmabili: la funzione svolta di volta in volta dipende dal particolare programma con cui lutente istruisce la macchina per la soluzione di un problema. Un programma ` e una sequenza di operazioni necessarie per risolvere un problema, espressa in un linguaggio di programmazione che il calcolatore ` e in grado di comprendere ed eseguire.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 1 Cosa ` e?

Concetti di base della programmazione

Cosa intendiamo per programmazione

Il procedimento che porta alla denizione dei programmi adatti a risolvere problemi ` e detto programmazione. I concetti che stanno alla base della programmazione si possono spiegare e comprendere senza far riferimento al calcolatore. La programmazione ` e tuttavia divenuta una vera e propria disciplina solo con lavvento dei moderni calcolatori elettronici.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 2

Concetti di base della programmazione

Le fasi della programmazione

Le fasi della programmazione

Ad un primo livello di astrazione lattivit` a della programmazione pu` o essere suddivisa in quattro (macro) fasi principali. 1. Denizione del problema (specica) 2. Individuazione di un procedimento risolutivo (algoritmo) 3. Codica dellalgoritmo in un linguaggio di programmazione (codica) 4. Esecuzione e messa a punto (esecuzione)

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 3

Concetti di base della programmazione

Le fasi della programmazione

Specica

La prima fase della programmazione consiste nel comprendere e denire (specicare) il problema che si vuole risolvere. La specica del problema pu` o essere fatta in maniera pi` u o meno rigorosa, a seconda del formalismo descrittivo utilizzato. La specica di un problema prevede la descrizione dello stato iniziale del problema (dati iniziali, input) e dello stato nale atteso (i risultati, output). La caratterizzazione degli stati iniziale e nale dipende dal particolare problema in esame e dagli oggetti di interesse.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 4

Concetti di base della programmazione

Le fasi della programmazione

Esempi di specica informale

1. Dati due numeri, trovare il maggiore. 2. Dato un elenco telefonico e un nome, trovare il numero di telefono corrispondente. 3. Data la struttura di una rete stradale e le informazioni sui ussi dei veicoli, determinare il percorso pi` u veloce da A a B. 4. Scrivere tutti i numeri pari che non sono la somma di due numeri primi (Congettura di Goldbach). 5. Decidere per ogni programma e per ogni dato in ingresso, se il programma C termina quando viene eseguito su quel dato.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 5

Concetti di base della programmazione

Le fasi della programmazione

Esempi (contd.)

Caratteristiche comuni ai problemi informazioni in ingresso stato iniziale = = informazioni in uscita stato nale

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 6

Concetti di base della programmazione

Le fasi della programmazione

Osservazioni sulla formulazione dei problemi:

la descrizione non fornisce un metodo risolutivo (es. 3

la descrizione del problema ` e talvolta ambigua o imprecisa (es. 2, con ) Mario Rossi che compare pi` u volte per alcuni problemi non ` e noto un metodo risolutivo (es. 4

esistono problemi per i quali ` e stato dimostrato che non pu` o esistere un metodo risolutivo (es. 5 ) Noi considereremo solo problemi per i quali ` e noto che esiste un metodo risolutivo.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 7

Concetti di base della programmazione

Le fasi della programmazione

Algoritmi

Una volta specicato il problema, si determina un procedimento risolutivo dello stesso (algoritmo), ovvero un insieme di azioni da intraprendere per ottenere i risultati attesi. Il concetto di algoritmo ha origini molto lontane: luomo ha utilizzato spesso algoritmi per risolvere problemi di varia natura. Solo in era moderna, tuttavia, ci si ` e posti il problema di caratterizzare problemi e classi di problemi per i quali ` e possibile individuare una soluzione algoritmica e solo nel secolo scorso ` e stato dimostrato che esistono problemi per i quali non ` e possibile individuare una soluzione algoritmica.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 8

Concetti di base della programmazione

Le fasi della programmazione

Algoritmi (cont.)

Utilizziamo algoritmi nella vita quotidiana tutte le volte che, ad esempio, seguiamo le istruzioni per il montaggio di una apparecchiatura, per la sostituzione della cartuccia di una stampante, per impostare il ciclo di lavaggio di una lavastoviglie, per prelevare contante da uno sportello Bancomat, ecc.

Un algoritmo ` e una sequenza di passi che, se intrapresa da un esecutore, permette di ottenere i risultati attesi a partire dai dati forniti.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 9

Concetti di base della programmazione

Le fasi della programmazione

Propriet` a di un algoritmo
La descrizione di un procedimento risolutivo pu` o considerarsi un algoritmo se rispetta alcuni requisiti essenziali, tra i quali: Finitezza: un algoritmo deve essere composto da una sequenza nita di passi elementari. Eseguibilit` a: il potenziale esecutore deve essere in grado di eseguire ogni singola azione in tempo nito con le risorse a disposizione Non-ambiguit` a: lesecutore deve poter interpretare in modo univoco ogni singola azione. Tipici procedimenti che non rispettano alcuni dei requisiti precedenti sono:

le ricette di cucina: aggiungere sale q.b. - non rispetta 3) le istruzioni per la compilazione della dichiarazione dei redditi (!)

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 10

Concetti di base della programmazione

Le fasi della programmazione

Codica

Questa fase consiste nellindividuare una rappresentazione degli oggetti di interesse del problema ed una descrizione dellalgoritmo in un opportuno linguaggio noto allesecutore. Nel caso in cui si intenda far uso di un elaboratore per lesecuzione dellalgoritmo, questultimo deve essere tradotto (codicato) in un opportuno linguaggio di programmazione. Il risultato in questo caso ` e un programma eseguibile al calcolatore. Quanto pi` u il linguaggio di descrizione dellalgoritmo ` e vicino al linguaggio di programmazione scelto, tanto pi` u semplice ` e la fase di traduzione e codica. Se addirittura il linguaggio di descrizione coincide con il linguaggio di programmazione, la fase di traduzione ` e superua.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 11

Concetti di base della programmazione

Le fasi della programmazione

Codica (cont.)
I linguaggi di programmazione forniscono strumenti linguistici per rappresentare gli algoritmi sottoforma di programmi che possano essere compresi da un calcolatore. In particolare dobbiamo rappresentare nel linguaggio di programmazione

lalgoritmo le informazioni iniziali le informazioni utilizzate dallalgoritmo le informazioni nali

= programma

= dati in ingresso = dati ausiliari

= dati in uscita

In questo corso impareremo a codicare algoritmi utilizzando il linguaggio di programmazione denominato C.


Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 12

Concetti di base della programmazione

Le fasi della programmazione

Esecuzione

La fase conclusiva consiste nellesecuzione vera e propria del programma. Spesso questa fase porta alla luce errori che possono coinvolgere ciascuna delle fasi precedenti, innescando un procedimento di messa a punto tale da richiedere la revisione di una o pi u fasi (dalla specica, alla denizione dellalgoritmo, alla codica di questultimo). Nel caso dei linguaggi di programmazione moderni, vengono forniti strumenti (denominati di solito debugger) che aiutano nella individuazione degli errori e nella messa a punto dei programmi.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 13

Concetti di base della programmazione

Le fasi della programmazione

Esempi

Negli esempi che seguono, utilizziamo un linguaggio pseudo-naturale per la descrizione degli algoritmi.

Tale linguaggio utilizza, tra laltro, le comuni rappresentazioni simboliche dei numeri e delle operazioni aritmetiche.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 14

Concetti di base della programmazione

Le fasi della programmazione

Problema 1: Calcolo del prodotto di due interi positivi

Specica Input: due valori interi positivi A e B Output: il valore di AB

Algoritmo Se lesecutore che scegliamo ` e in grado di eettuare tutte le operazioni di base sui numeri, un semplice algoritmo ` e il seguente: Passo 1. Passo 2. Passo 3. Acquisisci il primo valore, sia esso A Acquisisci il secondo valore, sia esso B Ottieni il risultato delloperazione AB

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 15

Concetti di base della programmazione

Le fasi della programmazione

Problema 1 (cont.)
Codica Un esecutore che rispetta le ipotesi precedenti ` e una persona dotata di una calcolatrice tascabile. La codica dellalgoritmo in questo caso pu` o essere allora la seguente: Passo Passo Passo Passo 1. 2. 3. 4. Digita Digita Digita Digita in sequenza le cifre decimali del primo valore il tasto in sequenza le cifre decimali del secondo valore il tasto =

Esecuzione

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 16

Concetti di base della programmazione

Le fasi della programmazione

Problema 1 (cont.)

Supponiamo ora che lesecutore scelto sia in grado di eettuare solo le operazioni elementari di somma, sottrazione, confronto tra numeri. ` necessario individuare un nuovo procedimento risolutivo che tenga E conto delle limitate capacit` a dellesecutore Algoritmo 2 Passo 1. Passo 2. Passo 3. Passo 4. Passo 4.1. Passo 4.2. Passo 5.

Acquisisci il primo valore, sia esso A Acquisisci il secondo valore, sia esso B Associa 0 ad un terzo valore, sia esso C Finch e B>0 ripeti Somma a C il valore A Sottrai a B il valore 1 Il risultato ` e il valore C

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 17

Concetti di base della programmazione

Le fasi della programmazione

Problema 1: (cont.)
Un esecutore che rispetta le ipotesi precedenti ` e un bimbo in grado di eettuare le operazioni richieste (somma, sottrazione e confronto) e di riportare i risultati di semplici calcoli su un quaderno. Codica Passo Passo Passo Passo 1. 2. 3. 4. Scrivi il primo numero nel riquadro A Scrivi il secondo numero nel riquadro B Scrivi il valore 0 nel riquadro C Ripeti i seguenti passi nch e il valore nel riquadro B ` e maggiore di 0: - calcola la somma tra il valore in A e il valore in C - scrivi il risultato ottenuto in C - calcola la dierenza tra il valore in B ed il numero 1 - scrivi il risultato ottenuto in B Il risultato ` e quanto contenuto nel riquadro C.
INFORMATICA 242AA a.a. 2012/13 pag. 18

Passo 5.
Dott. R. Gori

Concetti di base della programmazione

Il concetto di stato

Il concetto di stato
Gli esempi visti nora consentono di fare le seguenti considerazioni di carattere generale:

La specica (astratta) di un problema consiste nella descrizione di uno stato iniziale (che descrive i dati del problema) e di uno stato nale (che descrive i risultati attesi). ` necessario individuare una rappresentazione degli oggetti coinvolti E (e dunque dello stato) che sia direttamente manipolabile dallesecutore prescelto. Un algoritmo ` e una sequenza di passi elementari che, se intrapresi da un esecutore, comportano ripetute modiche dello stato no al raggiungimento dello stato nale desiderato. Le azioni di base che lesecutore ` e in grado di eettuare devono dunque prevedere, tra le altre, azioni che hanno come eetto cambiamenti dello stato.
INFORMATICA 242AA a.a. 2012/13 pag. 19

Dott. R. Gori

Concetti di base della programmazione

Il concetto di stato

Unastrazione dello stato


Introduciamo una possibile astrazione del concetto di stato, di cui faremo spesso uso in seguito.

Stato
Uno stato ` e un insieme di associazioni tra nomi simbolici e valori. In uno stato, ad ogni nome simbolico ` e associato al pi` u un valore. Rappresentiamo una associazione tra il nome simbolico x ed il valore val con la notazione
x val

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 20

Concetti di base della programmazione

Il concetto di stato

Lo stato: esempi

Stati corretti

{nome Antonio, cognome Rossi, eta 25} {importo $1650, tasso 10%, interesse $165 } {a 25, b 3, c 50}

Stati non corretti


{nome Antonio, nome Paolo, eta 25} {b 45, a 150, b 10}

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 21

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Pseudo-linguaggio

Utilizziamo inizialmente uno pseudo-linguaggio con un insieme di costrutti linguistici che costituiscono il nucleo di un qualunque linguaggio di programmazione reale. Senza entrare in eccessivi dettagli formali, nel presentare le notazioni utilizzate (sintassi) diamo anche una descrizione informale (semantica) di ci` o che accade al momento dellesecuzione in corrispondenza dei vari costrutti.

Il linguaggio contiene costrutti per:


rappresentare semplici calcoli attraverso le comuni operazioni logico/aritmetiche (espressioni) modicare le associazioni nello stato (assegnamento e ingresso) controllare lordine di esecuzione delle azioni (controllo) fornire i risultati (produzione in uscita dello stato nale)
INFORMATICA 242AA a.a. 2012/13 pag. 22

Dott. R. Gori

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Espressioni
Espressioni Numeriche Il linguaggio consente di rappresentare semplici calcoli algebrici, attraverso le usuali espressioni costruite a partire dai valori numerici e dalle operazioni di
somma + sottrazione prodotto * divisione intera / resto della divisione intera %.

Il signicato di unespressione ` e il suo valore ottenuto secondo le usuali regole di calcolo. Esempio:
il valore di 3 5 + 6 ` e 21 il valore di 3 (5 + 6) ` e 33
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 23

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Espressioni (cont.)

Oltre ai valori numerici, le espressioni possono contenere nomi simbolici: il calcolo di unespressione che contiene un nome simbolico x dipende dallo stato, e precisamente dal valore associato al nome x nello stato. Esempio: il valore di 3 (5 + x ) ` e

33 in uno stato che contiene lassociazione x 6 18 in uno stato che contiene lassociazione x 1

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 24

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Espressioni (cont.)
Espressioni Booleane Il linguaggio consente poi di rappresentare condizioni ovvero espressioni il cui valore ` e un valore di verit` a (true o false). Le condizioni sono costruite attraverso le usuali operazioni di confronto (==, ! =, <, >, <=, >=) e, come nel caso delle espressioni aritmetiche, il loro valore pu` o dipendere dallo stato. Esempio: il valore di y==x+1 ` e

true in uno stato che contiene le associazioni x 5 e y 6 false in uno stato che contiene le associazioni x 5 e y 9

Condizioni pi` u complesse possono essere costruite attraverso operatori logici quali negazione (simbolo !), congiunzione (simbolo &&) e disgiunzione (simbolo ||).

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 25

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Espressioni (cont.)

Signicato di ! - il valore di verit` a di ! P ` e


true se il valore di verit` a di P ` e false false se il valore di verit` a di P ` e true

Signicato di && - il valore di verit` a di P && Q ` e


true se i valori di verit` a di P e Q sono entrambi true false altrimenti

Signicato di || - il valore di verit` a di P || Q ` e


false se i valori di verit` a di P e Q sono entrambi false true altrimenti

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 26

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Esempio: Il valore di (y >= x) &&(x > 5) ` e


- true in uno stato che contiene le associazioni x 15 e y 30 - false in uno stato che contiene le associazioni x 3 e y 30

Il valore di (y >= x) || (x > 5) ` e

- true in uno stato che contiene le associazioni x 2 e y 30 - false in uno stato che contiene le associazioni x 3 e y 1

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 27

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Modica dello stato: ASSEGNAMENTO


Listruzione che consente di rappresentare modiche di stato ` e usualmente nota come assegnamento. Lassegnamento consente di cambiare unassociazione nello stato, ovvero il valore associato nello stato ad un nome simbolico. Useremo per lassegnamento la seguente notazione
x = exp;

dove x ` e un nome simbolico e exp una espressione. Lesecuzione dellassegnamento x = exp; consiste nel
(i) calcolare il valore, sia esso val, dellespressione exp (ii) introdurre nello stato lassociazione x val

Si noti che (ii) comporta la rimozione dallo stato della eventuale associazione gi` a presente per il nome simbolico x (si parla a questo proposito di assegnamento distruttivo).
INFORMATICA 242AA a.a. 2012/13 pag. 28

Dott. R. Gori

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

ASSEGNAMENTO: esempi
Vediamo alcuni esempi, indicando lo stato prima e dopo lesecuzione degli assegnamenti proposti. Le associazioni modicate nello stato nale sono evidenziate in verde. Stato iniziale { x 10, y 20} { x 10, y 20} { x 10, y 20} Assegnamento x = 5; x = y*2; x = x+1; Stato Finale { x 5, y 20} { x 40, y 20} { x 11, y 20}

Si noti come, nel terzo esempio, lo stesso nome simbolico x giochi un duplice ruolo:
- a destra del simbolo = indica un valore (il valore associato ad x nello stato iniziale) - a sinistra del simbolo = indica lassociazione da modicare nello stato a seguito dellassegnamento.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 29

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Modica dello stato: INPUT

La seconda istruzione di modica dello stato consente di acquisire valori dal mondo esterno al momento dellesecuzione. La notazione utilizzata ` e

Input(x);

dove x indica un nome simbolico. Lesecuzione consiste nel:

(i) Acquisire un nuovo valore, sia esso val (ii) Introdurre nello stato lassociazione x val

Come nel caso dellassegnamento, il punto (ii) comporta la rimozione dallo stato delleventuale associazione gi` a presente per il nome simbolico x La presenza di tale istruzione permette di descrivere algoritmi generali in cui non tutti i dati sono noti a priori, ma lo saranno solo al momento dellesecuzione.
INFORMATICA 242AA a.a. 2012/13 pag. 30

Dott. R. Gori

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Istruzioni di controllo: SEQUENZA

Negli esempi visti in precedenza gli algoritmi sono stati descritti come sequenze di passi elementari del tipo
Passo 1. Passo 2. ... azione 1 azione 2

Abbiamo utilizzato una sorta di numerazione per indicare lordine di esecuzione delle varie azioni: prima azione 1 poi azione 2 poi .... Nel linguaggio che stiamo introducendo, secondo le convenzioni sintattiche del C, una sequenza di azioni viene rappresentata mediante un blocco { istruzione 1 istruzione 2 ... istruzione n }

Dott. R. Gori

Concetti di base della programmazione

INFORMATICA 242AA a.a. 2012/13

Pseudo-linguaggio per la specica di algoritmi

pag. 31

SEQUENZA (cont.)

Scriveremo dunque { istruzione 1 istruzione 2 ... } ad indicare che lordine di esecuzione dei singoli passi ` e quello testuale del programma. Si noti che ogni istruzione viene eseguita a partire dallo stato risultante dallesecuzione dellistruzione che la precede nella sequenza. Assegnamento e ingresso sono istruzioni semplici il blocco ` e unistruzione composta.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 32

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

SEQUENZA: esempi
Stato iniziale Sequenza Stato Finale { x 10, y 20} { x = 5; x = x+y; } { x 25, y 20} { x 10, y 20} { x = x+1; y = x+1; } { x 11, y 12} { x 10, y 20} { x = x+y; y = x+y; } { x 30, y 50} In tutti gli esempi, lo stato nale si ottiene dallesecuzione del secondo assegnamento nello stato intermedio risultante dallesecuzione del primo assegnamento. Ad esempio, nel terzo caso: Stato iniziale Prima istruzione { x 10, y 20} x = x+y; Stato intermedio Seconda istruzione { x 30, y 20} y = x+y;

Stato Intermedio { x 30, y 20} Stato Finale { x 30, y 50}


pag. 33

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Istruzioni di controllo: CONDIZIONALE

Permette di determinare lazione da intraprendere a seconda del vericarsi o meno di una condizione. La notazione utilizzata ` e la seguente

if (condizione) istruzione1 else istruzione2

dove condizione indica una espressione booleana, e istruzione1 istruzione2 sono istruzioni (semplici o composte). Lesecuzione del condizionale if (C) S1 else S2 consiste nel
(i) Calcolare il valore, sia esso val, dellespressione booleana C (ii) Eseguire S1 se val ` e true, eseguire S2 se val ` e false.

Si noti che la presenza dellistruzione condizionale non ` e in conitto con il requisito di non ambiguit` a degli algoritmi: lazione da intraprendere ` e univocamente determinata dal valore di verit` a della condizione e dunque non vi ` e facolt` a di scelta da parte dellesecutore.
INFORMATICA 242AA a.a. 2012/13 pag. 34

Dott. R. Gori

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

CONDIZIONALE: esempi

Stato iniziale

Condizionale if (x > y) z=x; else z = y ;

Stato Finale

{ x 10, y 20} { x 10, y 5}

{ x 10, y 20, z 20} { x 10, y 5, z 10}

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 35

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Istruzioni di controllo: RIPETIZIONE

Consente di ripetere lesecuzione di una istruzione (o sequenza di istruzioni) no al vericarsi di una certa condizione (cfr. esempio del calcolo del prodotto tra due numeri).

while (condizione) Istruzione

dove condizione indica una espressione booleana.


Terminologia: in while (C) S , la condizione C ` e detta guardia e lstruzione S ` e detta corpo (del ciclo). Lesecuzione di while (C) S consiste nel
(i) Calcolare il valore, sia esso val, dellespressione booleana C (ii) Se val ` e false, terminare lesecuzione. (iii) Se val ` e true, eseguire S e ripetere dal punto (i).

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 36

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

RIPETIZIONE
Esempio: Riformulazione del passo 4 dellalgoritmo per il prodotto (versione 2): while (b>0) { c = c+a; b = b-1; } Intuitivamente, lesecuzione di while (guardia) corpo corrisponde allesecuzione di una sequenza del tipo { corpo corpo corpo ... corpo ...} In tale sequenza, ogni ripetizione dellistruzione corpo viene detta iterazione del ciclo. In generale, non ` e possibile determinare a priori il numero di iterazioni (che pu` o anche essere 0 nel caso in cui la guardia sia falsa nello stato iniziale).
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 37 Concetti di base della programmazione Pseudo-linguaggio per la specica di algoritmi

RIPETIZIONE

Laspetto pi` u critico ` e il fatto che lesecuzione di un ciclo pu` o essere fonte di non terminazione dellesecuzione dellintero algoritmo. while (3>0) x = 0;

Un ciclo siatto provoca la non terminazione dellesecuzione, dal momento che il valore di verit` a della guardia ` e sempre true e dunque lesecuzione corrisponde ad una sequenza innita x = 0; x = 0; . . . . . . ; x = 0; . . . . . . ` compito di chi denisce lalgoritmo assicurare che i cicli presenti E non diano luogo a non terminazione. La pratica programmativa, ed il buon senso, suggeriscono ad esempio di utilizzare cicli in cui:
- il valore di verit` a della guardia dipende dallo stato; - lesecuzione del corpo comporta modiche di associazioni nello stato dalle quali dipende il valore di verit` a della guardia.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 38

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

RIPETIZIONE

Le indicazioni appena viste non sono tuttavia sucienti a garantire la terminazione dellesecuzione. Si consideri ad esempio il ciclo: while (x>0) x = x+1; che soddisfa entrambi i requisiti richiesti, ma che pu` o non terminare nel caso in cui venga eseguito a partire da uno stato dove il valore associato al nome x ` e un valore positivo.

A partire dagli anni 70 sono stati sviluppati dei metodi formali per la verica di correttezza di programmi, che comprendono tecniche per la dimostrazione formale di propriet` a di terminazione dei cicli.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 39

Concetti di base della programmazione

Pseudo-linguaggio per la specica di algoritmi

Istruzioni di controllo: OUTPUT

Permette di rendere visibile allesterno la parte desiderata dello stato. La notazione utilizzata ` e

Output(x);

dove x indica un nome simbolico. Lesecuzione di questa istruzione consiste nel:


(i) Recuperare il valore, sia esso val, associato nello stato al nome simbolico x. (ii) Produrre in uscita tale valore.

Questa operazione non comporta la modica dello stato. Nei linguaggi di programmazione reali, lesecuzione delle operazioni di uscita produce di solito la visualizzazione di valori su supporti sici quali video, stampanti etc.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 40

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Problema: Calcolo del valore assoluto di un numero


Vediamo alcuni esempi di specica di algoritmi che utilizzano lo pseudo-linguaggio. Specica: Stato iniziale: { numero A } Stato nale: { risultato |A| } dove A indica un (generico) valore intero. Algoritmo: if (numero > 0) risultato = numero; else risultato = - numero;

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 41

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Problema: Ordinare due interi positivi


Specica: Stato iniziale: Stato nale: Algoritmo: if (num1 < num2) { temp = num1; num1 = num2; num2 = temp; } else ; { num1 A, num2 B } { num1 max(A,B), num2 min(A,B) }

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 42

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Problema: Ordinare due interi positivi (cont.)

Si noti lutilizzo di un nome simbolico aggiuntivo (temp): ` e essenziale per poter eettuare correttamente lo scambio tra i valori associati ai due interi (a causa del carattere distruttivo dellassegnamento e della sequenzialit` a dellesecuzione). ` facile vericare che una sequenza del tipo E x = y; y = x; non consente, in generale, di scambiare i valori associati a x e y.

Esempio: Stato iniziale { x 10, y 20} Stato intermedio { x 20, y 20}


Dott. R. Gori Concetti di base della programmazione

x = y; y=x

Stato Intermedio { x 20, y 20} Stato Finale { x 20, y 20}


INFORMATICA 242AA a.a. 2012/13 pag. 43 Esempi duso dello pseudo-linguaggio

Problema: Elevamento a potenza


Specica: Stato iniziale: { base A, esponente B } con A>0 e B 0 Stato nale: { risultato AB } Lalgoritmo si basa sulla seguente, ben nota, denizione di elevamento a potenza. A0 = 1 AB = A A . . . A B volte (se B > 0)

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 44

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Algoritmo: risultato = 1; while (esponente > 0) { risultato = risultato * base; esponente = esponente - 1; } Nellalgoritmo, si assume che i valori iniziali di base ed esponente soddisno i requisiti della specica.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 45

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Input/Output

Nei problemi visti no ad ora non ci siamo preoccupati di acquisire i dati iniziali n e di produrre in uscita i risultati nali. Esempio: Ordinare due valori interi acquisiti in input e stampare i valori ordinati. Algoritmo:
Input(num1); Input(num2);, if num1 < num2 { temp = num1; num1 = num2; num2 = temp; } else ; Output(num1); Output(num2);

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 46

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Problema: Calcolare quoziente e resto della divisione tra due numeri naturali non nulli.
Specica: Stato iniziale: Stato nale: {x A, y B} con A,B > 0 {x A, y B, q Q, r R} con A = Q B + R e 0 R < B Supponiamo un esecutore in grado di eseguire solo le operazioni elementari di somma e sottrazione. Algoritmo: q = 0; r = x; while (r y) { q = q + 1; r = r - y; }
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 47 Concetti di base della programmazione Esempi duso dello pseudo-linguaggio

Supponiamo di avere lo stesso problema ma un esecutore piu potente.


Specica: Stato iniziale: Stato nale: {x A, y B} con A,B > 0 {x A, y B, q Q, r R} con A = Q B + R e 0 R < B Supponiamo adesso un esecutore in grado di eseguire anche loperazione di moltiplicazione ma non di divisione. Algoritmo: c = 1; r = 0; while ((c*y) x) { c = c + 1; } r=x-((c-1)*y); q=c-1;
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 48

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Calcolare il MCD con lalgoritmo di Euclide

Dati due naturali non nulli si calcola il MCD utilizzando le seguenti propriet` a: MCD (x , x ) = x MCD (x , y ) = MCD (x y , y ) MCD (x , y ) = MCD (x , y x ) Specica: Stato iniziale: Stato nale: se x > y se y > x

{x A, y B} con A,B > 0 {x MCD(A,B)}

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 49

Concetti di base della programmazione

Esempi duso dello pseudo-linguaggio

Calcolare il MCD con lalgoritmo di Euclide (cont.)

Algoritmo: while (x = y) { if (x > y) x = x - y; else y = y - x; }

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 50

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Lo stato

Insieme di associazioni tra nomi e valori. x5 Nelle speciche, si vogliono spesso indicare valori costanti ma generici. Utilizziamo le seguenti convenzioni:

usiamo lettere minuscole per i nomi simbolici utilizzati nello stato e negli algoritmi; usiamo lettere maiuscole per indicare costanti generiche

Laddove necessario, possiamo specicare condizioni al contorno sul dominio di appartenenza di tali costanti. Esempio: {naturale A, base 2} con A 0 Al nome simbolico naturale ` e associato un generico valore naturale (A 0), mentre al nome simbolico base ` e associata la costante 2.

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 51

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

ATTENZIONE: allinterno degli algoritmi non ` e possibile utilizzare esplicitamente le costanti generiche. Esempio: Elevamento a potenza Specica: Stato iniziale: { base A, esponente B } Stato nale: { risultato AB }

con A>0 e B0

Algoritmo:

risultato = 1; while (esponente > 0) { risultato = risultato * A; esponente = esponente - 1; }

NO!

Le espressioni non possono contenere costanti generiche (proprio perch e tali!).


Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 52

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Esempi
Esempio:
Stato iniziale: Stato nale: Algoritmo Passo 1. Passo 2.

Ordinare tre valori interi distinti tra loro

x A, y B, z C con A,B,C distinti tra loro x max({A,B,C}), y max({A,B,C} \ {max({A,B,C})}), z min({A,B,C})

Passo 3.

Ordiniamo x e y, portandoci nello stato intermedio x max(A,B), y min(A,B), z C Stato 1: Ordiniamo x e z, portandoci nello stato intermedio x max({A,B,C}), y min(A,B), Stato 2: z min(max(A,B), C) Ordiniamo y e z, portandoci nello stato nale desiderato

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 53

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione nello pseudo-linguaggio


if (x < y) { temp = x; x = y; y = temp; } else ; x max(A,B), y min(A,B), z C if (x < z) { temp = x; x = z; z = temp; } else ; x max({A,B,C}), y min(A,B), z min(max(A,B), C) if (y < z) { temp = y; y = z; z = temp; } else ; Stato finale
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 54

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Esempio:

Calcolo del fattoriale di un numero naturale. Ricordiamo che: 1 1 2 . . . (n 1) n se n = 0 se n > 0

n! =

Specica: Stato iniziale: n N con N 0 Stato nale: n N, fatt N! Attenzione: la specica impone che il valore di n non deve cambiare!

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 55

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione: fatt = 1; i = 1; while (i <= n) { fatt = fatt * i; i = i + 1; }

i viene spesso chiamata variabile di controllo del ciclo, dal momento che lesecuzione di ogni iterazione dipende dal valore di i. Viene incrementata di 1 alla ne di ogni iterazione = per ogni valore di i [1,N] . . . . . .

Ad ogni iterazione del ciclo, vale la seguente propriet` a: i 1 fatt = j = (i-1)! ( )


j= 1

Al termine del ciclo, quando cio` e i=N+1, la () diventa fatt = N!, ovvero lo stato nale desiderato.
INFORMATICA 242AA a.a. 2012/13 pag. 56

Dott. R. Gori

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Sequenze: nomi simbolici con indice


Consentiamo anche luso di nomi simbolici con indice, per rappresentare sequenze. c[i] 5 dove i ` e un valore naturale. Ad esempio: {i K, c[0] 0, . . . , c[K 1] 0} K0 Nello stato sono presenti:

unassociazione per il nome simbolico i, al quale ` e associato un valore naturale K. K associazioni per i nomi simbolici c[0], c[1], . . . , c[K-1], a ciascuno dei quali ` e associato il valore 0.

Allinterno degli algoritmi, consentiamo di riferire nomi simbolici con indice nella forma c[exp ] dove exp deve essere una espressione a valori naturali. Anche in questo caso exp non deve contenere costanti generiche (nellesempio, non ` e lecito un assegnamento del tipo c[K-1] = 5, mentre ` e lecito c[i-1] = 5).
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 57 Pseudo-linguaggio: Algoritmi Semplici algoritmi

Esempio: Calcolare il numero di elementi pari in una sequenza data. Stato iniziale: {dim K, c[0] V1 , . . . , c[K-1] VK-1 } con K > 0 Stato nale: {count #{ j | j [0,K-1] Vj pari} }

Dobbiamo calcolare

0 j dim-1 c[j ] pari

Di nuovo, utilizziamo un ciclo controllato da una variabile di controllo i che assume tutti i valori nellintervallo [0,dim-1 ]. Facciamo in modo che, ad ogni iterazione, valga la seguente propriet` a count = 1
0 j i-1 c[j ] pari

Se, alla ne del ciclo, i=dim, abbiamo quanto desiderato e cio` e count = 1
0 j dim-1 c[j ] pari
INFORMATICA 242AA a.a. 2012/13 pag. 58

Dott. R. Gori

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione:

count = 0; i = 0; punto 1 while (i <dim) { if (c[i] % 2 == 0) count = count + 1; else ; i = i + 1; }

Nello stato iniziale del while, al punto (1), count 0, i 0 e dunque 1= 1 = 0 = count
1 j i-1 cj pari 0 j -1 cj pari

il corpo del while mantiene vera la propriet` a count = 1


0 j i-1 cj pari
INFORMATICA 242AA a.a. 2012/13 pag. 59

Dott. R. Gori

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Considerazioni generali

In molti problemi ` e necessario operare allo stesso modo su tutti gli elementi di un intervallo dato per ogni j [a,b] OPj b esempio: expj
j=a

in tutti questi casi si ricorre a cicli in cui una variabile di controllo permette di scandire tutto lintervallo di interesse i = a; while (i <= b) { operazione in funzione di i i = i+1; }
INFORMATICA 242AA a.a. 2012/13

Dott. R. Gori

pag. 60

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Esercizi proposti
Problema 1: Calcolare il numero di occorrenze di un valore dato in una sequenza data Stato iniziale: {dim K, val V, c[0] V0 , . . . , c[K-1] VK-1 } con K > 0 Stato nale: {occ #{ j | j [0,K-1] Vj = V} } Problema 2: Calcolare il massimo e il minimo di una sequenza data di interi Stato iniziale: {dim K, c[0] V0 , . . . , c[K-1] VK-1 } con K > 0 Stato nale: {massimo max({V0 ,. . . ,VK-1 }), minimo min({V0 ,. . . ,VK-1 })} Problema 3: Calcolare il numero di occorrenze del valore massimo in una sequenza di interi Stato iniziale: ? Stato nale: ? Problema 4: Calcolare il numero di occorrenze di una cifra nella rappresentazione decimale di un numero naturale

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 61

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione problema 1: Stato iniziale: {dim K, val V, c0 V0 , . . . , cK-1 VK-1 } con K > 0 Stato nale: {occ #{ j | j [0,K-1] Vj = V} } occ = 0; i = 0; while (i < dim) { if (c[i] == val) occ = occ + 1; else ; i = i + 1; }

Ad ogni iterazione del ciclo vale la propriet` a: occ = #{ j | j [0,i) c[j] = val}

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 62

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione problema 2
Stato iniziale: Stato nale:

{dim K, c0 V0 , . . . , cK-1 VK-1 } con K > 0 {massimo max({V0 ,. . . ,VK-1 }), minimo min({V0 ,. . . ,VK-1 })}

Preoccupiamoci prima di calcolare il massimo Scorriamo lintera sequenza, attraverso una variabile di controllo i, facendo in modo che, ad ogni scansione, valga la propriet` a massimo = max c[j] | j [0, i)

massimo = c[0]; i = 1; while (i < dim) { qui massimo = max c[0], ..., c[i-1] if (c[i] > massimo) massimo = c[i]; else ; i = i + 1; anche qui massimo = max c[0], ..., c[i-1] }
INFORMATICA 242AA a.a. 2012/13 pag. 63 Semplici algoritmi

Dott. R. Gori

Pseudo-linguaggio: Algoritmi

Il calcolo del minimo ` e analogo. Otteniamo: massimo = c[0]; minimo = c[0]; i = 1; while (i <dim) { if (c[i] > massimo) massimo = c[i]; else ; if (c[i] < minimo) minimo = c[i]; else ; i = i + 1; }

calcolo del massimo

calcolo del minimo

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 64

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Usiamo un algoritmo piu eciente: diminuiamo il numero di confronti. massimo = c[0]; minimo = c[0]; i = 1; while (i < dim) { if (c[i] > massimo) massimo = c[i]; else if (c[i] < minimo) minimo = c[i]; else ; i = i + 1; }

calcolo del massimo

calcolo del minimo

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 65

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione problema 3 Stato iniziale: dim K, c[0] V0 , . . . , cK-1 VK-1 Stato nale: occ #{j | j [0,K-1] Vj = max {V0 , . . . , VK-1 }}

Un algoritmo ingenuo:

Calcoliamo il valore massimo come nel problema 2 Scandiamo nuovamente la sequenza per contare il numero di occorrenze del massimo

Comporta una duplice scansione della sequenza Un algoritmo che comporta una singola scansione si ottiene adattando quello visto per il calcolo del massimo

Dott. R. Gori

INFORMATICA 242AA a.a. 2012/13

pag. 66

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

massimo = c[0]; i = 1; occ = 1; while (i < dim) { if (c[i] > massimo) { massimo = c[i]; occ = 1; } else if (c[i] == massimo) occ = occ + 1; else ; i = i + 1; }
Dott. R. Gori INFORMATICA 242AA a.a. 2012/13 pag. 67

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Soluzione problema 4 Stato iniziale: { numero N, cif C} con N > 0 Stato nale: occ #{ j | j [0,K] Cj = C} dove N = (CK . . . C0 )10

Analogo al problema 1, ma questa volta dobbiamo anche calcolare gli elementi della sequenza La lunghezza della sequenza non ` e nota a priori
n = numero; occ = 0; while (n != 0) { nuova cifra = n % 10; if (nuova cifra == cif) occ = occ + 1; else ; n = n / 10; }

questa volta la variabile di controllo ` en


INFORMATICA 242AA a.a. 2012/13 pag. 68

Dott. R. Gori

Pseudo-linguaggio: Algoritmi

Semplici algoritmi

Variante: acquisire un numero naturale ed una cifra decimale, contare il numero di occorrenze di questultima nella rappresentazione decimale del numero letto, e produrlo in uscita.
Input(numero); Input(cif); n = numero; occ = 0; while (n != 0) { ... if (nuova cifra == cif) ... } Output(occ);

da uno stato iniziale che non contiene associazioni, o meglio su cui non facciamo alcuna ipotesi, ci portiamo in uno stato che corrisponde allo stato iniziale del problema precedente nello stato nale, produciamo in uscita il risultato calcolato
INFORMATICA 242AA a.a. 2012/13 pag. 69

Dott. R. Gori

Potrebbero piacerti anche