Esercitazioni di Informatica 3

Documenti analoghi
Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Informatica 3. LEZIONE 2: Sintassi e semantica

Scope, Memoria e Tabella dei Simboli

Ottenere una modifica del parametro attuale

Funzioni, Stack e Visibilità delle Variabili in C

Un esempio di compilatore realizzato con flex e bison

Capitolo 5 - Funzioni

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

PREPARAZIONE PER SECONDA PROVA IN ITINERE Esercizio 1 SULLA MODELLAZIONE DEI DATI

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Gestione della Memoria

Linguaggio C: le funzioni. Introduzione e sintassi

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Linguaggi e Ambienti di Programmazione

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Istruzioni Condizionali

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Evoluzione del FORTRAN 14/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 15 IL LINGUAGGIO FORTRAN

Mini-Corso di Informatica

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

Tempo di vita e scope delle variabili

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

CORSO DI LAUREA IN INGEGNERIA ELETTRICA

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

Le strutture di controllo

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Corso sul linguaggio Java

PROGRAMMAZIONE STRUTTURATA

FONDAMENTI DI INFORMATICA

Modularizzazione del software

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione agli Algoritmi

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

PROGRAMMAZIONE: Le strutture di controllo

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Introduzione alla programmazione

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

Analizzatore Lessicale Parte I Scanner

Sviluppare un programma in FORTRAN

Istruzioni condizionali di diramazione in Fortran 90

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 21 Gennaio 1998

Implementazione di (ambiente e) memoria nel linguaggio imperativo

Linguaggio C: le funzioni. Introduzione e sintassi

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Strutture dati nel supporto a run time

Le basi del linguaggio Java

Esercitazioni di Elementi di Informatica

Perché il linguaggio C?

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

Fondamenti di Informatica T. Linguaggio C: Stack e Ricorsione

Allocazione dinamica della memoria

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Esercitazioni di Fondamenti Informatica - Modulo A 1

Linguaggio C. Esercizio 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, Dipartimento di Informatica Università degli Studi di Bari

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Basi di Dati: Corso di laboratorio

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

Dall algoritmo al programma

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Programmazione con Java

Programmazione con il linguaggio LibreOffice Basic

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Lezione 8. Visibilità degli identifcatori e tempo di vita degli oggetti

Esercizi Strutture dati di tipo astratto

INFORMATICA. Strutture iterative

Argomenti della lezione. Introduzione agli Algoritmi e alle Strutture Dati. Lista Lineare. Lista Lineare come Tipo di Dato Astratto

Grammatiche Parse trees Lezione del 17/10/2012

Fondamenti di Programmazione Recupero Primo Parziale 30 Gennaio 2008 Traccia A

3. La sintassi di Java

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

Il sistema operativo LINUX Esercitazione 3. Esercizio 1. Esercizio 2. Esercizio 5 - Soluzione. Il sistema operativo LINUX Esercitazione 4.

Istruzioni semplici e strutturate

Strutture di iterazione

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Corso di Fondamenti di Informatica

Definizione di metodi in Java

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

Esercitazione 4. Comandi iterativi for, while, do-while

Politecnico di Milano Facoltà di Ingegneria Milano Leonardo A.A. 2007/08

Strategie di programmazione

Visibilità e tempo di vita delle variabili. (più sintesi di alcuni concetti della prima parte del corso)

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri

Strutture di iterazione

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Strutturare il codice: sottoprogrammi

PILE E CODE. Pile (stack):

Capitolo 7 I puntatori in C

Linguaggi, Traduttori e le Basi della Programmazione

Gestione della memoria

Puntatori Passaggio di parametri per indirizzo

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Definizioni syntax-directed

Transcript:

Esercitazioni di Informatica 3 Part I: Programming Languages Syntax and semantics Laurea in Ingegneria Informatica Politecnico di Milano Polo di Milano Leonardo

Esercizio 1: EBNF Utilizzando il linguaggio descritto dalla seguente EBNF: <program> ::= { <statement>* } <statement> ::= <assignment> <loop> <assignment>::= <identifier> = <expr>; <loop> ::= while <expr> { <statement>+ } <expr> ::= <identifier> <number> ( <expr> ) <expr> <op> <expr>!<expr> <op> ::= == <= >=!= && dove <identifier> e <number> rappresentano rispettivamente gli identificatori C e i numeri interi scrivere una funzione in grado di predire se la radice di un numero è reale o immaginaria

Problema La soluzione immediata sarebbe molto semplice: IF x>=0 THEN REALE ELSE IMMAGINARIO Ma il costrutto if non appartiene ai costrutti permessi

Soluzione aux=0; while ((x>=0)&&(aux==0)){ in questo caso la radice e` reale aux=1; } while ((x<0)&&(aux==0)) { in questo caso la radice e` immaginaria aux=1; }

Esercizio 2: SIMPLESEM 1.program A{ 2. integer b,y; 3. routine alfa() { 4. integer a,x,w; 5. routine beta () { 6. integer z,g; 7. a=z+x+b+w; 8. };. 9. x=a+y;. 10.}; 11.routine gamma() { 12. integer a,x,z,w;. 13. }; 14.} Considerata la seguente catena di chiamate: A gamma alfa beta gamma Mostrare lo stato della macchina astratta inclusi: link statici link dinamici Mostrare la rappresentazione delle variabili con <d,o> a seconda di scope statico o dinamico quando viene eseguita le istruzioni 7 e 9

Soluzione: SNT A alfa gamma beta

Soluzione: stato dello stack A: gamma: alfa: beta: gamma: IND. RITORNO LINK DINAMICI LINK STATICI b y IND. RITORNO LINK DINAMICI LINK STATICI a x z w IND. RITORNO LINK DINAMICI LINK STATICI a x w IND. RITORNO LINK DINAMICI LINK STATICI z g IND. RITORNO LINK DINAMICI LINK STATICI a x z w

Soluzione: regole di scope statico Linea 7: a=z+x+b+w; a=<1,3> z=<0,3> x=<1,4> b=<2,3> w=<1,5> Linea 9: x=a+y; x=<0,4> a=<0,3> y=<1,4>

Soluzione: regole di scope dinamico Linea 7: a=z+x+b+w; a=<1,3> z=<0,3> x=<1,4> b=<3,3> w=<1,5> Linea 9: x=a+y; x=<0,4> a=<0,3> y=<2,4>

Esercizio 3: passaggio dei parametri 1. program esempio; 2. var x:integer 3. procedure p(y:integer) 4. begin 5. x:=5; 6. y:=y+x; 7. end; 8. begin 9. x:=10; 10. p(x); 11. write(x); 12. end Analizzare il valore stampato a seconda della tipologia di passaggio di parametri considerata

Soluzione: call by reference I parametri formali e i parametri attuali dividono la stessa area di memoria # Riga x y 9 10 3 10 10 5 5 5 6 10 10 11 10

Soluzione: call by value I parametri attuali sono copiati in quelli formali # Riga x y 9 10 3 10 10 5 5 10 6 5 15 11 5

Soluzione: call by result Il parametro formale viene copiato in quello attuale al termine della procedura # Riga x y 9 10 3 10 0 5 5 0 6 5 5 11 5

Soluzione: call by value-result # Riga x y 9 10 3 10 10 5 5 10 6 5 15 11 15

Soluzione: call by name Nel testo della procedura i par. formali sostituiscono quelli attuali # Riga x y 9 10 3 10 10 5 5 5 6 10 10 11 10

Esercizio 5: SIMPLESEM program pippo var a,b,c:integer procedure p(procedure x) var a,b,d:integer; procedure q var b,e:integer;... end q; if c=0 then begin c:=c+1; x(q); end else x; end p;... c:=0; p(p); end; Disegnare lo stato della macchina astratta, tracciando link statici e dinamici, fino a quando q viene chiamata per la prima volta.

Soluzione: catena di chiamate Pippo pone c=0 e chiama p(p) In p(p) si entra nel ramo then dell if ponendo quindi c=1 e chiamando p(q) In p(q) si entra nel ramo else dell if quindi si chiama q Quindi la sequenza delle chiamate e : pippo p(p) p(q) q

Soluzione: SNT pippo p q

Soluzione: stato dello stack link dinamici link statici pippo: p(p): p(q): q: x x `IND. RIT. LINK DIN. LINK STAT. a b c IND. RIT. LINK DIN. LINK STAT. a b d Pointer Code p LINK STAT. IND. RIT. LINK DIN. LINK STAT. a b d Pointer Code q LINK STAT. IND. RIT. LINK DIN. LINK STAT. b e inoltre servono le dim. del record di attivazione di x

Esercizio 6: SIMPLESEM program pippo var l,m,n:real; procedure q(procedure w) procedure p var r,s:real;... end if n>0 then w else begin n:=n+1.77; w(p); end... n:= -0.5; q(q); end Disegnare lo stato della macchina astratta, tracciando link statici e dinamici, fino alla chiamata di w effettuata nel ramo then della procedura q Si scriva inoltre come viene tradotto l accesso alla variabile n in termini della coppia (distanza, offset) [scope statico].

Soluzione: catena di chiamate Pippo pone n=-0.5 e chiama q(q) In q(q) si entra nel ramo else dell if ponendo quindi n=-0.5+1.77=1.27 e chiamando q(p) In q(p) si entra nel ramo then dell if quindi viene chiamata p Quindi la sequenza delle chiamate e : pippo q(q) q(p) p

Soluzione: SNT pippo q p

Soluzione: stato dello stack link dinamici link statici pippo: q(q): q(p): p: w w IND. RIT. LINK DIN. LINK STAT. l m n IND. RIT. LINK DIN. LINK STAT. Pointer Code q LINK STAT. IND. RIT. LINK DIN. LINK STAT. Pointer Code p LINK STAT. IND. RIT. LINK DIN. LINK STAT. r s inoltre servono le dim. del record di attivazione di w

Soluzione: accesso alla variabile n Accesso alla variabile n da pippo: n=<0,5> Accesso alla variabile n per la prima chiamata di q: n=<1,5> Accesso alla variabile n per la seconda chiamata di q: n=<1,5> (valgono regole di scope statico)

Esercizio 7: SIMPLESEM Si dica, giustificando brevemente la risposta, se la seguente affermazione è vera o falsa: Se un programma C non fa uso né di blocchi né di sottoprogrammi annidati (ossia se consiste solo del main e di una lista di sottoprogrammi dichiarati tutti allo stesso livello del main) la semantica determinata dalla catena statica equivale alla semantica della catena dinamica.

Soluzione L affermazione e falsa Infatti, se si adotta la regola della catena statica le uniche variabili non locali usabili dai vari sottoprogrammi sono quelle globali; se invece si adotta la regola della catena dinamica un generico sottoprgramma P cercherà una variabile non locale x nel record di attivazione del sottoprogramma Q che lo ha chiamato e via via più in basso nella pila.

Esercizio Si consideri il seguente frammento di programma scritto in un linguaggio ipotetico che consente di dichiarare variabili globali funzioni all interno di funzioni e che adotta regole di visibilità (scope) statiche:

Esercizio integer x, y, z; // variabili globali void fun3 (); // prototipo della funzione void function fun1 (integer m) // NB: il parametro m è passato per valore { integer x, n; void fun2 ( ) { integer z; x = z + m + y; (*) };... m = x + n + z; (**)... }; void fun3 () { integer x, m, z, w;... fun1(z);... };... void main {... fun3();... };

Esercizio calcolare l attributo (distanza, offset) per le variabili che appaiono nell istruzione (*); calcolare l attributo (distanza, offset) per le variabili che appaiono nell istruzione (**); schizzare lo stato della memoria (mostrando i links statici e dinamici la disposizione delle variabili) nel caso in cui main chiami fun3, che chiama fun1, che chiama fun2, che chiama fun3, che chiama fun1.