Programmazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica

Documenti analoghi
Lezione 1 - Linguaggi per la descrizione di algoritmi

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

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

Corso di Programmazione Linguaggi di Programmazione. Linguaggio. Messaggio

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

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Grammatiche Parse trees Lezione del 17/10/2012

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

Problemi, algoritmi, calcolatore

Dispensa di Informatica II.1

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

Linguaggi di Programmazione

Università degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java

Corso di Programmazione Linguaggi di Programmazione

Algoritmi. Pagina 1 di 5

PROBLEMI ALGORITMI E PROGRAMMAZIONE

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

La codifica digitale

CONCETTI FONDAMENTALI

Sviluppo di programmi

Laboratorio di Programmazione

Il concetto di calcolatore e di algoritmo

Le basi del linguaggio Java

Linguaggi Sintassi e Semantica

Caratteristiche di un linguaggio ad alto livello

L intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Unità Didattica 2 I Linguaggi di Programmazione

La codifica. dell informazione

La "macchina" da calcolo

DISPENSE DI PROGRAMMAZIONE

Le grammatiche formali

Informatica. Informatica. Problema - soluzione. Algoritmi, dati e programmi. Introduzione ai concetti di: Distinguiamo tra: problema

Formalismi per la descrizione di algoritmi

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

DESCRIZIONI RIGOROSE c7

Altrimenti, il M.C.D. di a e b è anche divisore di r (e.g. a=15,b=6,r=3 che è il M.C.D.)

Linguaggi formali e compilazione

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

Concetti di base dell ICT

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

Come ragiona il computer. Problemi e algoritmi

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

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

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1

Espressioni e Comandi

Cosa è l Informatica?

PROBLEMI E ALGORITMI VESPIA CATERINA LICEO CLASSICO AGLI ANGELI

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

Rappresentazione dei numeri interi in un calcolatore

3. Indicare cosa sta a significare la figura geometrica del rombo in un diagramma a blocchi

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Corso di Informatica Modulo T1 1 - Il concetto di problema

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

= < < < < < Matematica 1

Espressività e limitazioni delle grammatiche regolari

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

La codifica. dell informazione

Rappresentazione con i diagrammi di flusso (Flow - chart)

LINGUAGGI DI PROGRAMMAZIONE!

Unità aritmetica e logica

Corso di Linguaggi di Programmazione + Laboratorio

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

LESSICO E SINTASSI DEL PASCAL

Dall algoritmo al programma

CURRICOLO DI ISTITUTO

Principali strumenti per lo sviluppo di algoritmi in pascal-like. concetti universali presenti in tutti i linguaggi di programmazione

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Rappresentazione di Numeri Reali. Rappresentazione in virgola fissa (fixed-point) Rappresentazione in virgola fissa (fixed-point)

Rappresentazione dei Numeri

Somma di numeri binari

Lezione 8. Soluzione di un problema Problema. Soluzione di un problema. Comprensione del Problema. Analisi. Introduzione agli algoritmi

Un po di storia sui linguaggi

Cosa si intende con stato

Diagrammi a blocchi 1

Aritmetica dei Calcolatori Elettronici

Tipi di dato primitivi

Fondamenti di programmazione e Laboratorio di introduzione alla programmazione (modulo 1)

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

Codifica binaria. Rappresentazioni medianti basi diverse

I.4 Rappresentazione dell informazione

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

modificato da andynaz Cambiamenti di base Tecniche Informatiche di Base

Teoria dell Informazione

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

Il linguaggio di programmazione Python

Algoritmi e Programmi

Grammatiche context-free

CORSO DI ELEMENTI DI INFORMATICA

Informatica e Bioinformatica: Algoritmi

Algoritmi e soluzione di problemi

Calcolo letterale. è impossibile (*) x y. per x = -25; impossibile per y= Impossibile. 15 y

Diagrammi a blocchi 1

n Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Analisi e programmazione 1

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

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Transcript:

Programmazione Marco Anisetti Università degli Studi di Milano, Dipartimento di Informatica marco.anisetti@unimi.it http://homes.di.unimi.it/anisetti/ Marco Anisetti - 1 / 40

Riepilogo lezione 1 Ruolo del corso all interno del piano di studi Ruolo della programmazione nella vita lavorativa e spendibilità delle competenze Calcolatore - Programma - Programmazione Algoritmo e sue proprietà, Esecutore, Problema soluzione generale e istanza di una soluzione Esempi di algoritmi e non Relazione algoritmo programma Cenni di computabilità e complessità Marco Anisetti - 2 / 40

Algoritmo riepilogo (1) Un algoritmo è come una ricetta da cucina, un insieme di passi da eseguire per arrivare alla soluzione del problema Un algoritmo viene concretizzato in un programma con un dato linguaggio a seconda dell esecutore che deve comprenderne il linguaggio Le ricette sono scritte per un esecutore umano in linguaggio naturale Nel descrivere un algoritmo anche in linguaggio naturale devo individuare 2 tipologie di operazioni: Le istruzioni operative I controlli del flusso delle istruzioni. Ad esempio una condizione per eseguire una determinata operazione, un salto ad una determinata locazione dell algoritmo Marco Anisetti - 3 / 40

Algoritmo riepilogo (2) A volte questi vengono nascosti dalle tipicità dell esecutore per cui è stato ideato l algoritmo Nel nostro caso essendo sempre algoritmi orientati ad esecutori automatici occorre vestire i panni dell esecutore anche in fase di scrittura dell algoritmo ESERCIZIO Scrivere la ricetta degli spaghetti alla carbonara per un esecutore umano e per un esecutore robotico Occorre qualche cosa di più rigoroso per descrivere un algoritmo per evitare fraintendimenti e per garantire la trasposizione dell algoritmo in un programma in maniera rapida e indolore ed il più possibile indipendente dal linguaggio che si sceglierà Marco Anisetti - 4 / 40

Notazione delle espressioni matematiche (1) Espressioni tipo a b+c sono utilizzate dalla matematica da secoli e risultano a noi familiari Alcuni linguaggi di programmazione cercano di utilizzare una notazione simile per renderla più familiare In generale i linguaggi di programmazione usano dei mix di notazioni differenti Prefissa: l operatore è indicato prima degli operandi +ab Postfissa: l operatore è indicato dopo gli operandi ab+ Infissa: l operatore è indicato tra gli operandi a+b le notazioni prefissa e post fissa non richiedono parentesi per essere eseguite correttamente (nell ordine corretto) Marco Anisetti - 5 / 40

Notazione delle espressioni matematiche (2) Il numero di operandi di un operatore è detto arità Es. notazione prefissa +102030 = 3030 = 900 similmente 10+2030 = 1050 Es. notazione postfissa 1020+30 = 3030 = 900 similmente 102030+ = 1050 La notazione infissa richiede delle regole di precedenza o l uso di parentesi Operatori con la stessa precedenza (e.g. + e -) vengono raggruppati usando nella norma la associazione sinistra Esiste la notazione mista Alcuni varianti della notazione prefissa sono ad esempio le chiamate a funzione tipo max(x,y) dove l arità è variabile dipendente da quello che c è in parentesi Marco Anisetti - 6 / 40

Linguaggi per la descrizione di algoritmi (1) Un algoritmo deve essere descritto utilizzando un opportuno linguaggio che risulti comprensibile da parte dell esecutore. Il linguaggio è un formalismo costituito da: Un insieme di istruzioni primitive ( elementi propri, facenti parte, del linguaggio) Un insieme di tipi di dato primitivi (numeri interi, numeri reali, caratteri, ecc.) Un insieme di operazioni primitive su tali dati (somma e sottrazione per i numeri interi e reali, ecc.) Marco Anisetti - 7 / 40

Linguaggi per la descrizione di algoritmi (2) Linguaggio naturale (ad esempio, l italiano, l inglese), pensato per un esecutore umano Linguaggi grafici, come quello dei diagrammi di flusso o il più recente e generale linguaggio UML (Unified Modeling Language). Anche in questo caso si tratta di linguaggi pensati per un esecutore umano Linguaggi di programmazione, come ad esempio C++, Pascal, Java, VisualBasic, ecc., che sono per loro natura adatti ad un esecutore automatico, specificatamente il calcolatore. Marco Anisetti - 8 / 40

Linguaggio naturale Il linguaggio naturale non si usa per la descrizione di algoritmi perchè è inadatto per una macchina: Ambiguo Vago Complicato Nessuno ha ancora costruito una macchina che capisce l italiano (o l inglese) Marco Anisetti - 9 / 40

Diagrammi di flusso (Flow chart) I diagrammi di flusso sono un formalismo grafico di descrizione degli algoritmi. I diversi tipi di istruzioni che caratterizzano questo formalismo sono rappresentati tramite blocchi di varia forma, connessi da frecce. Orientato principalmente ad un esecutore umano Ha il pregio di mettere ben in evidenza il control flow (la presenza di cicli, di salti, di biforcazioni, ecc..) Marco Anisetti - 10 / 40

Flow chart Assegnamenti racchiusi in rettangoli Decisioni racchiuse in rombi Una ripetizione è indicata da un loop, ovvero una sequenza ciclica di istruzioni contenente almeno una decisione che determina la fine del loop Esempi tratti dal Wirth Marco Anisetti - 11 / 40

Esempio 1: Problema - algoritmo - Flow chart Problema: Moltiplicare due numeri naturali, considerando un esecutore che sappia fare solo somme x, r, y denotano delle variabili ovvero un identificativo per un oggetto che è appunto variabile. l assegnamento avviene espresso con il simbolo Formalizzazione del problema: r x y Passo 1: r 0; Passo 2: r r +x; y y 1; finchè y = 0; Per verificare la correttezza dell algoritmo proposto è possibile fare delle prove e valutarne la tabella contenente le successioni dei risultati assegnati alle variabili (detta traccia). Esistono numerose varianti per risolvere lo stesso problema Marco Anisetti - 12 / 40

Diagramma di flusso: moltiplicazione per somme ESERCIZI Scrivere la ricetta della carbonara per esecutore robotico usando il flow chart Trovare delle formulazioni alternative più efficienti per la moltiplicazione per somme Marco Anisetti - 13 / 40

Esercizio:soluzione Marco Anisetti - 14 / 40

Esempio 2: Problema - algoritmo - Flow chart Problema: Dividere un numero naturale x per un numero naturale y, ricavando il quoziente intero q e il resto r Formalizzazione del problema tramite l istruzione: (q,r) x div y Supponiamo che l esecutore non sia in grado di eseguire l operazione complessa div allora va scomposta in un programma che utilizza sottrazioni ripetute Passo 1: q 0; r x; Passo 2: fintanto che r y ripetere q q +1; r r y; Questo esempio come il precedente descrive un processo sequenziale. Gli unici processi trattati in questo corso sono processi sequenziali Marco Anisetti - 15 / 40

Diagramma di flusso: operazione div ESERCIZO Scrivere il Flow Chart per l algoritmo dell operazione div descritto in precedenza Marco Anisetti - 16 / 40

Diagramma di flusso: operazione div ESERCIZO Scrivere il Flow Chart per l algoritmo dell operazione div descritto in precedenza Marco Anisetti - 16 / 40

Considerazioni Un programma descrive delle trasformazioni di stato delle proprie variabili Tali trasformazioni di stato ne definiscono il processo (programma in esecuzione) Il formalismo dei Flow Chart evidenzia dei costrutti che sono alla base della programmazione strutturata Permette di definite facilmente la traccia del programma per seguire l evolversi del processo relativo al programma Generalmente contiene operazioni definite in un linguaggio di programmazione formalizzato Marco Anisetti - 17 / 40

Linguaggio di programmazione (1) Un repertorio di segni convenzionali e di regole per combinarli in enunciati più complessi ed un insieme di regole che permettano di associare un significato a ciascun enunciato. Si distinguono 3 livelli Sintattico: regole che specificano in quali modi i segni possano essere combinati per formare enunciati; Semantico: regole che permettono di associare a ciascun segno e a ciascun enunciato il loro significato; Pragmatico: implicazioni pratiche e le conseguenze di un enunciato. Marco Anisetti - 18 / 40

Linguaggio di programmazione (2) Alfabeto o vocabolario Σ: Il repertorio di segni convenzionali di cui sono costruiti gli enunciati di un linguaggio. E un insieme finito di elementi, chiamati simboli o token. Simboli o token: sono gli atomi di cui è costituito un enunciato in un linguaggio Parola w su un alfabeto: una sequenza di lunghezza finita di simboli dell alfabeto. Si può definire la parola vuota, ǫ come sequenza di zero simboli comune ad ogni alfabeto. Σ denota l insieme di tutte le parole composte da elementi di Σ, compresa ǫ. Per esempio, se Σ = {0,1}, Σ = {ǫ,0,1,00,01,10,11,...}. Marco Anisetti - 19 / 40

Linguaggio di programmazione (3) Un linguaggio L è un sottoinsieme delle parole costruibili su un alfabeto Σ, L Σ. Data una parola (stringa o frase a seconda) w Σ, ci sono due possibilità: w appartiene al linguaggio, w L, cioè rappresenta un enunciato di L w non appartiene al linguaggio, w / L, cioè non rappresenta un enunciato valido di L. L contiene un numero infinito di parole cioè di possibili enunciati. Marco Anisetti - 20 / 40

Linguaggio di programmazione (4) Approccio basato sul riconoscimento: rappresentare L attraverso la definizione di un algoritmo che, per ogni parola w Σ, termina con il risultato si se w L e no altrimenti. Approccio generativo: consiste nel definire una procedura in grado di generare sistematicamente tutte le parole w di L, una dopo l altra. Un importantissima classe di sistemi generativi, che sono di fatto impiegati per descrivere in modo finito linguaggi infiniti, tra cui i linguaggi di programmazione, sono le grammatiche. Marco Anisetti - 21 / 40

Grammatica (1) G = (N,Σ,R,S) N insieme dei simboli non terminali, o metasimboli, cioè che non possono comparire negli enunciati del linguaggio ma che ci servono per denotare elementi di un enunciato N Σ = Σ alfabeto del linguaggio costituito da simboli terminali. R insieme finito delle regole di produzione nella forma α β con α N \{ǫ} e β (N Σ). Quando la regola viene applicata, un istanza di una stringa α può essere riscritta in una istanza della stringa β S simbolo non terminale speciale, S N ed è il punto di partenza che denota un enunciato valido. Marco Anisetti - 22 / 40

Grammatica (2) Relazione di produzione e derivazione Produzione: G (N Σ) (N Σ) : γ G δ sse δ si ottiene da γ mediante l applicazione di una singola regola di produzione di R nella grammatica G. Derivazione: G : γ G δ sse δ si ottiene da γ mediante l applicazione di zero o più regole di produzione di R nella grammatica G Linguaggio generato da G denominato L(G) L insieme di tutte le sequenze di simboli terminali ottenibili applicando le regole di produzione dell insieme R, a partire dal simbolo iniziale S. L(G) = {w : w Σ S G w} Marco Anisetti - 23 / 40

Esempio (1) Linguaggio delle espressioni aritmetiche Σ = {0,1,2,3,4,5,6,7,8,9,+,?,,/,(,)} E simbolo di partenza A sta per argomento, O per operazione, N per numero naturale, I per cifra iniziale di un numero naturale, M per sequenza delle eventuali cifre successive di numero naturale, e C denota una qualsiasi cifra decimale. Marco Anisetti - 24 / 40

Esempio (2) Esempio di derivazione Si ricava che E 2 (3+4) quindi 2 (3+4) appartiene al linguaggio. Marco Anisetti - 25 / 40

Esercizio (1) Data la seguente grammatica: S CVRT C T C R C h V a V i V u T p T t T k R n R l R r Marco Anisetti - 26 / 40

Esercizio (2) Quale delle seguenti espressioni fa parte del linguaggio? tank tar bin leak Marco Anisetti - 27 / 40

Formato di Backus e Naur BNF(1) Formalismo utilizzato nell Informatica. Il BNF fu impiegato per la prima volta per definire la sintassi del linguaggio Algol 60 delle regole viene sostituita da ::= I simboli non terminali sono rappresentati mediante stringhe alfanumeriche racchiuse tra parentesi angolari (ad esempio <espressione>) I simboli terminali, o token del linguaggio, sono di norma racchiusi tra virgolette ( o ) Notazione compatta per più regole con lo stesso membro sinistro <cifra iniziale> ::= 1 2 3 4 5 6 7 8 9 Marco Anisetti - 28 / 40

Formato di Backus e Naur BNF(2) Esistono alcune varianti a seconda dell autore (esempio Extended BNF) Gli elementi opzionali sono spesso racchiusi tra parentesi tonde o quadre, mentre le parentesi graffe sono usate praticamente in tutte le varianti del BNF per denotare elementi che possono essere ripetuti zero o più volte ESERCIZIO Ridefinire in BNF la grammatica dell esempio delle espressioni visto in precedenza Marco Anisetti - 29 / 40

Esercizio:soluzione < espr >::=< num > ( < espr > ) < espr >< op >< espr > < espr > = < espr > < num >::=< cifra > < num >< cifra > < cifra >::= 0 1... 9 < op >::= + / Marco Anisetti - 30 / 40

Esempio: numero reale Il simbolo ::= può essere letto come può essere e il simbolo come oppure < real number >::=< integer part >. < fraction > < integer part >::=< digit > < integer part >< digit > < fraction >::=< digit > < digit >< fraction > < digit >::= 0 1 2 3 4 5 6 7 8 9 Marco Anisetti - 31 / 40

Esercizio Si consideri la seguente definizione in BNF di un linguaggio: < expr >::=< const > < fn > ( < args > ) < args >::=< expr > < expr >, < args > < const >::= a b c d e < fn >::= f g h Quale delle seguenti espressioni fa parte del linguaggio? a e(f,h) g(a) g() g Marco Anisetti - 32 / 40

Abstract Syntax Tree (AST) Evidenzia i componenti più significativi di un linguaggio e li mostra nella forma di un albero ESERCIZIO Disegnare l AST delle espressioni nelle forme prefissa +ab infissa a+b e postfissa a b+ Marco Anisetti - 33 / 40

Abstract Syntax Tree (AST) Evidenzia i componenti più significativi di un linguaggio e li mostra nella forma di un albero ESERCIZIO Disegnare l AST delle espressioni nelle forme prefissa +ab infissa a+b e postfissa a b+ L AST è indipendente dalla notazione usata ESERCIZIO Disegnare l AST dell espressione b b 4ac Marco Anisetti - 33 / 40

AST soluzioni Marco Anisetti - 34 / 40

Esempio BNF linguaggio naturale (1) Σ = {il,lo,la,cane,mela,gatto,mangia,graffia,,} (2) N = {frase, soggetto, verbo, complemento, articolo, nome} (3) P, regole espresse in BNF (forma di Backus-Naur): frase ::= soggetto verbo complemento soggetto ::= articolo nome articolo ::= il la lo nome ::= cane mela gatto verbo ::= mangia graffia complemento ::= articolo nome articolo nome, complemento (4) S = frase. Esempio tratto dal Pighizzini, Ferrari: Dai fondamenti agli oggetti Marco Anisetti - 35 / 40

Parse tree E un albero ordinato con radice, che rappresenta la struttura sintattica di una stringa relativamente ad una grammatica formale Si differenzia dall AST perchè i suoi elementi riflettono più concretamente la sintassi di un linguaggio in input Una grammatica per un linguaggio impone un parse tree sui programmi scritti in quel linguaggio Marco Anisetti - 36 / 40

Esempio di produzione (Parse tree) frase soggetto verbo complemento articolo nome graffia articolo nome, complemento lo mela lo gatto articolo nome il cane Marco Anisetti - 37 / 40

Carte sintattiche Le carte sintattiche sono dei diagrammi che esprimono le regole di una grammatica in forma grafica. Per specificare una grammatica mediante carte sintattiche, si deve fornire un diagramma per ciascun simbolo non terminale In una carta sintattica: I rettangoli indicano simboli non terminali (che andranno espansi con le carte sintattiche corrispondenti) Gli ovali o rettangoli con gli angoli arrotondati, indicano simboli terminali, che quindi non devono essere espansi ulteriormente Le frecce sono definite in modo tale che, seguendo i percorsi da esse delineati, sia possibile ricostruire una sequenza lecita di simboli Ogni biforcazione indica un alternativa Marco Anisetti - 38 / 40

Carte sintattiche esempio Pighizzini, Ferrari frase soggetto verbo complemento soggetto articolo nome complemento articolo nome, articolo verbo lo la il graffia mangia nome gatto mela cane Marco Anisetti - 39 / 40

Carte sintattiche esempio espressione ESERCIZIO Definire la grammatiche dell esempio delle espressioni usando il formalismo delle carte sintattiche Marco Anisetti - 40 / 40

Carte sintattiche esempio espressione ESERCIZIO Definire la grammatiche dell esempio delle espressioni usando il formalismo delle carte sintattiche Marco Anisetti - 40 / 40