Cosa si intende con stato

Похожие документы
Introduzione alla programmazione

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

Linguaggi, Traduttori e le Basi della Programmazione

PROGRAMMAZIONE STRUTTURATA

Rappresentazione degli algoritmi

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Lezione 6 Introduzione al C++ Mauro Piccolo

Sviluppo di programmi

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Dal Problema all Algoritmo. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

CORSO DI PROGRAMMAZIONE

Rappresentazione con i diagrammi di flusso (Flow - chart)

Laboratorio di Programmazione

Corso di Informatica di Base

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Introduzione agli Algoritmi

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio

1 Esercizi in pseudocodice

Il concetto di calcolatore e di algoritmo

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Corso di Informatica. Problemi ed algoritmi. Ing Pasquale Rota

Problemi, algoritmi, calcolatore

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso

Costanti e Variabili

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Studio degli algoritmi

LA METAFORA DELL UFFICIO

Introduzione agli Algoritmi 4. Problemi. Dal Problema alla Soluzione

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Formalismi per la descrizione di algoritmi

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Dall algoritmo al programma

INFORMATICA. Scienza dei calcolatori elettronici (computer science) Scienza dell informazione (information science)

LA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

STRUTTURE DI CONTROLLO DEL C++

L ELABORATORE ELETTRONICO

Fondamenti di Informatica

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Dal problema a un programma comprensibile dal calcolatore. Il Progetto degli Algoritmi. Dall analisi del problema all esecuzione

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Cosa è l Informatica?

Foglio Elettronico Lezione 1

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione alla programmazione

Introduzione alla programmazione Esercizi risolti

Le strutture di controllo in C++

Introduzione alla programmazione strutturata

5 - Istruzioni condizionali

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Istruzioni Condizionali

Istruzioni iterative. Istruzioni iterative

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Laboratorio di Programmazione Laurea in Bioinformatica

1 Il Paradigma Imperativo

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Matlab. Istruzioni condizionali, cicli for e cicli while.

Le basi del linguaggio Java

Fogli Elettronici. Idoneità Informatica Prof. Mauro Gaspari

Algoritmi e Programmi

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Strutture di Controllo

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Le strutture di controllo

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Espressione composta da: Operatori Operandi (costanti, variabili, )

Il linguaggio di programmazione Python

Elementi di programmazione

Algoritmi e soluzione di problemi

Informatica. Come si risolve un problema?

Транскрипт:

Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando ad un altra configurazione, in funzione dei segnali d ingresso. I Ad esempio, lo stato può rappresentare la posizione dell ascensore ad un certo piano di un edificio. In base allo stato si determina il modo in cui l ascensore si muove: se si intende andare al terzo piano e ci troviamo al primo piano, occorre che l ascensore salga. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 30 Il concetto di stato Il concetto di stato I La specifica (astratta) di un problema consiste nella descrizione di uno stato iniziale (che descrive i dati del problema) e di uno stato finale (che descrive i risultati attesi). I Si deve individuare una rappresentazione degli oggetti coinvolti (e dunque dello stato) direttamente manipolabile dall esecutore. I Un algoritmo è una sequenza di passi elementari che, se eseguiti, comportano ripetute modifiche dello stato fino al raggiungimento dello stato finale desiderato. I Le azioni di base che l esecutore è in grado di e ettuare devono dunque prevedere, tra le altre, azioni che hanno come e etto cambiamenti dello stato. I Possiamo pensare che lo stato sia il contenuto della memoria e che il cambiamento dello stato abbia come e etto il cambiamento di alcune posizioni della memoria. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 31

Il concetto di stato Un astrazione dello stato Dato che il calcolo procede attraverso l elaborazione dello stato, si devono poter esprimere valori dipendenti dallo stato. Astrazione del concetto di Stato Uno stato è un insieme di associazioni tra nomi simbolici e valori. In uno stato, ad ogni nome simbolico è associato al più un valore. Rappresentiamo una associazione tra il nome simbolico x ed il valore val con la notazione x ; val Il valore di x dipende dallo stato corrente, che gli associa un particolare valore val. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 32 Il concetto di stato Lo stato: esempi Stati corretti I {nome ; Antonio, cognome ; Rossi, età ; 25} I {importo ; $1650, tasso ; 10%, interesse ; $165 } I {a ; 25, b ; 3, c ; 50} Stati non corretti I {nome ; Antonio, nome ; Paolo, et a; 25} I {b ; 45, a; 150, b ; 10} C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 33

I Introduciamo inizialmente l insieme di costrutti linguistici che costituiscono il nucleo di un qualunque linguaggio di programmazione reale, usando già la sintassi del C. I Senza entrare in eccessivi dettagli formali, nel presentare le notazioni utilizzate (sintassi) diamo anche una descrizione informale (semantica) di ciò che accade al momento dell esecuzione in corrispondenza dei vari costrutti. Il linguaggio contiene costrutti per: I rappresentare semplici calcoli attraverso le comuni operazioni logico/aritmetiche (espressioni) I modificare le associazioni nello stato (assegnamento e ingresso) I controllare l ordine di esecuzione delle azioni (controllo) I fornire i risultati (produzione in uscita dello stato finale) C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 34 Espressioni Il ruolo delle espressioni è quello di denotare valori (dip. dallo stato). 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 significato di un espressione è il suo valore ottenuto secondo le usuali regole di calcolo. Esempio: il valore di 3 5+6è 21 il valore di 3 (5 + 6) è 33 C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 35

Espressioni (cont.) Oltre ai valori numerici, le espressioni possono contenere nomi simbolici: il calcolo di un espressione 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) è I 33 in uno stato che contiene l associazione x ; 6 I 18 in uno stato che contiene l associazione x ; 1 C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 36 Espressioni (cont.) Espressioni Booleane Il linguaggio consente poi di rappresentare condizioni ovvero espressioni il cui valore è un valore di verità (true o false). Le condizioni sono costruite attraverso le usuali operazioni di confronto (==,!= 2, <, >, <=, >=) e, come nel caso delle espressioni aritmetiche, il loro valore può dipendere dallo stato. Esempio: il valore di y==x+1 è I true in uno stato che contiene le associazioni x ; 5 e y ; 6 I false in uno stato che contiene le associazioni x ; 5 e y ; 9 Condizioni più complesse possono essere costruite attraverso operatori logici quali negazione (simbolo!), congiunzione (simbolo &&) e disgiunzione (simbolo ). 2!=sta per diverso C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 37

Espressioni (cont.) I Significato di! -ilvalorediveritàdi!pè I true se il valore di verità di P è false I false se il valore di verità di P è true I Significato di && -ilvalorediveritàdip&&qè I true se i valori di verità di P e Q sono entrambi true I false altrimenti I Significato di -ilvalorediveritàdip Q è I false se i valori di verità di P e Q sono entrambi false I true altrimenti C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 38 Esempio: I Il valore di (y >= x) &&(x > 5) è - 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 I Il valore di (y >= x) (x > 5) è - 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 C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 39

Modifica dello stato: ASSEGNAMENTO Nella programmazione imperativa, la computazione viene descritta in termini di stato di programma. Il ruolo delle istruzioni è quello di modificare, con la loro esecuzione, lo stato. I Una delle istruzioni che consentono di rappresentare modifiche di stato è l assegnamento. I L assegnamento consente di cambiare un associazione nello stato, ovvero il valore associato nello stato ad un nome simbolico. I Useremo per l assegnamento la seguente notazione x=exp; dove x è un nome simbolico e exp una espressione. I L esecuzione dell assegnamento x = exp;consiste nel (i) calcolare il valore, sia esso val, dell espressione exp (ii) introdurre nello stato l associazione x ; val I Si noti che (ii) comporta la rimozione dallo stato della eventuale associazione già presente per il nome simbolico x (si parla a questo proposito di assegnamento distruttivo). C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 40 ASSEGNAMENTO: esempi Vediamo alcuni esempi, indicando lo stato prima e dopo l esecuzione degli assegnamenti proposti. Le associazioni modificate nello stato finale sono evidenziate in verde. Stato iniziale Assegnamento Stato Finale { x ; 10, y ; 20} x = 5; { x ; 5, y; 20} { x ; 10, y ; 20} x = y*2; { x ; 40, y; 20} { x ; 10, y ; 20} x = x+1; { 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 l associazione da modificare nello stato a seguito dell assegnamento. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 41

Modifica dello stato: INPUT I La seconda istruzione di modifica dello stato consente di acquisire valori dal mondo esterno al momento dell esecuzione. La notazione è scanf(&x); dove x indica un nome simbolico, di cui &x rappresenta l indirizzo in memoria (aspetto su cui torneremo). I L esecuzione consiste nel: (i) Acquisire un nuovo valore, sia esso val (quando viene eseguita il programma si mette in attesa che l utente immetta un valore.) (ii) Introdurre nello stato l associazione x ; val I Come nel caso dell assegnamento, il punto (ii) comporta la rimozione dallo stato dell eventuale associazione già presente per il nome simbolico x I 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 dell esecuzione. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 42 Istruzioni di controllo: SEQUENZA I Negli esempi visti in precedenza gli algoritmi sono stati descritti come sequenze di passi elementari del tipo Passo 1. azione 1 Passo 2. azione 2... I Abbiamo utilizzato una sorta di numerazione per indicare l ordine di esecuzione delle varie azioni: prima azione 1 poi azione 2 poi... I Nel linguaggio che stiamo introducendo, e in C, una sequenza di azioni viene rappresentata mediante un blocco # { istruzione 1 istruzione 2... istruzione n } "! C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 43

SEQUENZA (cont.) I Scriveremo dunque { istruzione 1 istruzione 2... } ad indicare che l ordine di esecuzione dei singoli passi è quello testuale del programma. I Si noti che ogni istruzione viene eseguita a partire dallo stato risultante dall esecuzione dell istruzione che la precede nella sequenza. I Assegnamento e ingresso sono istruzioni semplici il blocco è un istruzione composta. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 44 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} I In tutti gli esempi, lo stato finale si ottiene dall esecuzione del secondo assegnamento nello stato intermedio risultante dall esecuzione del primo assegnamento. I Ad esempio, nel terzo caso: Stato iniziale Prima istruzione Stato Intermedio { x ; 10, y ; 20} x=x+y; { x ; 30, y; 20} Stato intermedio Seconda istruzione Stato Finale { x ; 30, y ; 20} y=x+y; { x ; 30, y ; 50} C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 45

Istruzioni di controllo: CONDIZIONALE I Permette di determinare l azione da intraprendere a seconda del verificarsi o meno di una condizione. La notazione utilizzata è la seguente if (condizione) istruzione1 else istruzione2 dove condizione indica una espressione booleana, e istruzione1 istruzione2 sono istruzioni (semplici o composte). I L esecuzione del condizionale if (C) S1 else S2 consiste nel (i) Calcolare il valore, sia esso val, dell espressione booleana C (ii) Eseguire S1 se val è true, eseguire S2 se val è false. I Si noti che la presenza dell istruzione condizionale non è in conflitto con il requisito di non ambiguità degli algoritmi: l azione da intraprendere è univocamente determinata dal valore di verità della condizione (nello stato dato) e dunque non vi è facoltà di scelta da parte dell esecutore. Possiamo anche avere il solo if (condizione) istruzione1 C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 46 CONDIZIONALE: esempi Stato iniziale Condizionale Stato Finale if (x > y) z=x; else z=y; { x ; 10, y ; 20} { x ; 10, y ; 20, z ; 20} { x ; 10, y ; 5} { x ; 10, y ; 5, z ; 10} C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 47

Istruzioni di controllo: RIPETIZIONE I Consente di ripetere l esecuzione di una istruzione (o sequenza di istruzioni) fino al verificarsi di una certa condizione (cfr. esempio del calcolo del prodotto tra due numeri). while (condizione) Istruzione dove condizione indica una espressione booleana. I Terminologia: in while (C) S, la condizione C è detta guardia e l istruzione S è detta corpo (del ciclo). I L esecuzione di while (C) S consiste nel (i) Calcolare il valore, sia esso val, dell espressione booleana C (ii) Se val è false, terminare l esecuzione. (iii) Se val è true, eseguire S eripeteredalpunto(i). C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 48 RIPETIZIONE Esempio: Riformulazione del passo 4 dell algoritmo per il prodotto (versione 2): while (b>0) { c = c+a; b = b-1; } I Intuitivamente, l esecuzione di while (guardia) corpo corrisponde all esecuzione di una sequenza del tipo { corpo corpo corpo... corpo...} I In tale sequenza, ogni ripetizione dell istruzione corpo viene detta iterazione del ciclo. In generale, non è possibile determinare a priori il numero di iterazioni (che può anche essere 0 nel caso in cui la guardia sia falsa nello stato iniziale). C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 49

RIPETIZIONE I L aspetto più critico è il fatto che l esecuzione di un ciclo può essere fonte di non terminazione dell esecuzione dell intero algoritmo. while (3>0) x = 0; I Un ciclo si atto provoca la non terminazione dell esecuzione, dal momento che il valore di verità della guardia è sempre true edunque l esecuzione corrisponde ad una sequenza infinita x = 0; x = 0;...... ; x = 0;...... I È compito di chi definisce l algoritmo assicurare che i cicli presenti non diano luogo a non terminazione. I La pratica programmativa, ed il buon senso, suggeriscono ad esempio di utilizzare cicli in cui: - il valore di verità della guardia dipende dallo stato; - l esecuzione del corpo comporta modifiche di associazioni nello stato dalle quali dipende il valore di verità della guardia. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 50 RIPETIZIONE I Le indicazioni appena viste non sono tuttavia su cienti a garantire la terminazione dell esecuzione. Si consideri ad esempio il ciclo: while (x>0) x = x+1; che soddisfa entrambi i requisiti richiesti, ma che può non terminare nel caso in cui venga eseguito a partire da uno stato dove il valore associato al nome x è un valore positivo. I A partire dagli anni 70 sono stati sviluppati dei metodi formali per la verifica di correttezza di programmi, che comprendono tecniche per la dimostrazione formale di proprietà di terminazione dei cicli. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 51

Istruzioni di controllo: OUTPUT I Permette di rendere visibile all esterno la parte desiderata dello stato. La notazione utilizzata è printf(x); dove x indica un nome simbolico. I L esecuzione 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. I Questa operazione non comporta la modifica dello stato. Nei linguaggi di programmazione reali, l esecuzione delle operazioni di uscita produce di solito la visualizzazione di valori su supporti fisici quali video, stampanti etc. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 52 Esempi d uso dello pseudo-linguaggio Problema: Calcolo del valore assoluto di un numero Vediamo alcuni esempi di specifica di algoritmi che utilizzano lo pseudo-linguaggio. Specifica: Stato iniziale: { numero ; A } Stato finale: { risultato ; A } dove A indica un (generico) valore intero, diverso da zero. Algoritmo: if (numero > 0) risultato = else risultato = numero; - numero; C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 53

Esempi d uso dello pseudo-linguaggio Problema: scambiare il valore di due variabili Specifica: Stato iniziale: { x ; A, y ; B } Stato finale: { x ; B, y ; A } Algoritmo: temp = x; x = y; y = temp; C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 54 Esempi d uso dello pseudo-linguaggio Problema: scambiare il valore di due variabili (cont.) I Si noti l utilizzo di un nome simbolico aggiuntivo (temp): è essenziale per poter e ettuare correttamente lo scambio tra i valori associati ai due interi (a causa del carattere distruttivo dell assegnamento e della sequenzialità dell esecuzione). I Èfacileverificarecheunasequenzadeltipo x = y; y = x; non consente, in generale, di scambiare i valori associati a x e y. Esempio: Stato iniziale Stato Intermedio { x ; 10, y ; 20} x=y; { x ; 20, y; 20} Stato intermedio Stato Finale { x ; 20, y ; 20} y=x { x ; 20, y ; 20} C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 55

Esempi d uso dello pseudo-linguaggio Problema: ordinare due interi positivi Specifica: Stato iniziale: { num1 ; A, num2 ; B } Stato finale: { num1 ; max(a,b), num2 ; min(a,b) } Algoritmo: if (num1 < num2) { temp = num1 = num2 = } num1; num2; temp; ATTENZIONE: non basta stabilire il massimo e il minimo; occorre anche che, alla fine, il massimo sia associato a num1 eilminimoa num2. C. Bodei Dip.to Informatica FONDAMENTI DI PROGRAMMAZIONE a.a. 16/17 pag. 56