La valutazione delle espressioni

Slides:



Advertisements
Presentazioni simili
Le forme dello spazio Caffè Scienza. Associazione formaScienza.
Advertisements

Cosa sono? Come si risolvono?
Premessa: si assume di aver risolto (correttamente
I sistemi di equazioni di I grado
Modulo 4 – Seconda Parte Foglio Elettronico
La scomposizione in fattori di un polinomio. Le frazioni algebriche.
Tipi di dato astratti Lista, Pila, Coda, Albero.
Strutture dati lineari
I Poligoni.
Capitolo 8 Sistemi lineari.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
IN DISEQUAZIONI DI PRIMO GRADO INTERE
ESPRESSIONI SENZA PARENTESI
Algoritmi in C++ (1) da completare
Alberi binari di ricerca
Fogli elettronici Microsoft Excel.
Iterazione enumerativa (for)
LE EQUAZIONI.
Metodi numerici per equazioni lineari iperboliche Gabriella Puppo.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
Ricerca della Legge di Controllo
Corso di Informatica A.A Corso di Informatica Laurea Triennale - Comunicazione&Dams Dott.ssa Adriana Pietramala Laurea.
Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep.
Esercizi su code Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori.
Equazione di Dirac per la y
IL GIOCO DELLA LOGICA.
Rete Sincrona Una rete sequenziale sincrona, è dotata di un ingresso E, di un segnale di Clock e uno di reset. Ad ogni fronte del Clock, deve essere campionato.
Dall’algoritmo al programma.
Il Cerca – costellazioni
La storia della matita Di Paulo Coelho.
Il Piano Cartesiano .
Esercizio 10.* Un cassiere vuole dare un resto di n centesimi di euro usando il minimo numero di monete. a) Descrivere un algoritmo goloso per fare ciò.
Tre candele sono accese. L’ambiente è così silenzioso
Lezione 6 Strutture di controllo Il condizionale
I NUMERI INTERI Il secondo insieme che prenderemo in esame è quello dei numeri interi. Esso si indica con la lettera Z (dal tedesco Zahl = numero) e i.
Corso di informatica Athena – Periti Informatici
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Per valutare la complessità ammortizzata scomponiamo ogni Union: nelle due FindSet e nella Link che la costituiscono e valuteremo la complessità in funzione.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
EQUAZIONI DI PRIMO GRADO
Registro a scorrimento
Conversione da base 10 a base X (Utilizzo della pila)
{ 14 è il risultato di 12- { [ 39 – ( – 8 ) – 4 ] } =
GLI ARRAY MONODIMENSIONALI. Utilizzando le nostre attuali conoscenze, proviamo a risolvere il seguente problema: Calcolare la media dei voti conseguiti.
Alberi CORDA – Informatica A. Ferrari Testi da
La rappresentazione delle informazioni in un computer
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La Ricorsione Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
La ricorsione.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
LA SOTTRAZIONE Beatrice Reina 1A.
MUSICA PITAGORICA.
1 Informatica Generale Alessandra Di Pierro Ricevimento: Giovedì ore presso Dipartimento di Informatica, Via Buonarroti,
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Rappresentazione dell'informazione
MATERIALE DIDATTICO STRUTTURATO
GLI ALGORITMI DI ORDINAMENTO
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
6. LIMITI Definizione - Funzioni continue - Calcolo dei limiti
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Librerie… Marco D. Santambrogio – Ver. aggiornata al 20 Luglio 2015.
Forma normale delle equazioni di 2° grado Definizione. Un'equazione di secondo grado è in forma normale se si presenta nella forma Dove sono numeri.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
LE EQUAZIONI Sono andato dal panettiere con 10 euro e ho comprato due pizzette. Esco con 6 euro: quanto costa una pizzetta?
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati.
DIPENDENZA STATISTICA TRA DUE CARATTERI Per una stessa collettività può essere interessante studiare più caratteri presenti contemporaneamente in ogni.
Bisogna eseguire le operazioni nello stesso ordine stabilito nelle espressioni senza parentesi, però si devono svolgere prima i calcoli all’interno delle.
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
Le frazioni A partire da N vogliamo costruire un nuovo insieme numerico nel quale sia sempre possibile eseguire la divisione. Per fare ciò dobbiamo introdurre.
Transcript della presentazione:

La valutazione delle espressioni X=a / b – c + d – e – a * c (esempio di espressione) Per scrivere un’ espressione esistono due notazioni Infix es: 5+3 Postfix es 53+ (notazione polacca) Valutare la seguente espressione è molto semplice: 6 / 2 –3 + 4 * 2 = (6 / 2) –3 + (4 * 2)= 3 –3 +8 = 8 Mentre valutare la seguente espressione risulta piu complicato: 6 2 3 – 4 2 * +

La valutazione delle espressioni Come faccio a valutare l’ espressione postfix? Prendiamo la seguente espressione 234*+ Leggo il primo valore dell’ espressione postfix “2”,poiché è un numero lo metto nello stack Leggo il secondo valore dell’ espressione postfix “3”,poiché è un numero lo metto nello stack Leggo il terzo valore dell’ espressione postfix “4”,poiché è un numero lo metto nello stack

La valutazione delle espressioni Leggo il quarto valore dell’ espressione postfix “*”,poiché è un operatore allora tolgo due elementi dallo stack, su di essi svolgo l’ operazione letta e salvo il risultato nello stack Leggo il quinto valore dell’ espressione postfix “+”,poiché è un operatore allora tolgo due elementi dallo stack, su di essi svolgo l’ operazione letta e salvo il risultato nello stack Poiché nell' espressione postfix non ci sono più elementi allora il valore contenuto nello stack è il risultato dell’ espressione.

La valutazione delle espressioni Vediamo l’ algoritmo passo – passo: Espressione | stack[0] stack[1] stack[2] 6 | 6 2 | 6 2 / | 6/2=3 3 | 3 3 - | 3-3=0 4 | 0 4 2 | 0 4 2 * | 0 4*2=8 + | 0+8=8

La valutazione delle espressioni Poiché noi usiamo la notazione infix dobbiamo trovare un metodo per passare dalla notazioni infix a quella postfix Prendiamo la seguente espressione: A / b – c +d * e – a * c Partendo dall’ espressione infix, ne costruiamo un’altra mettendo le parentesi tonde per ogni operazione ((((a / b) – c ) + (d * e)) – ( a * c))

La valutazione delle espressioni A questo punto scorro con un ciclo l’ espressione e al posto della parentesi tonda chiusa metto l’ ultimo operatore letto. ( ( ( ( a / b) – c ) + (d * e) ) – ( a * c) ) ( ( ( ( a b / c –(d e * + ( a c * – Tolgo tutte le parentesi aperte a b / c – d e * + a c * –

La valutazione delle espressioni Come si può realizzare tutto ciò in c++ o c? I passi da da svolgere sono i seguenti: A+b*c ==(a+(b*c)) == abc*+ Tutto ciò, e cioè passare dalla notazione infix alla notazione postfix si può risolvere grazie alla implementazione con gli stack Vediamo in che modo: Prendo l’ espressione e la scorro con un ciclo Per ogni elemento dell’ espressione controllo se e un operatore o un operando prendendo a seconda del caso le seguenti decisioni:

La valutazione delle espressioni Se l’ elemento letto e un operando allora lo posso scrivere in out nell' array che memorizzerà la mia espressione postfix Se l’ elemento letto e un operatore allora lo salvo nello stack.Prima di salvare pero controllo se l’ elemento che sto inserendo ha una priorità maggiore dell’ elemento che sta alla testa dello stack,se cosi e allora lo salvo,altrimenti devo vuotare lo stack e salvare l’elemento che tolgo in out (nell' array che memorizza l’ espressione postfix) finche l’elemento alla testa dello stack non ha una priorità minore dell’ elemento da inserire.

La valutazione delle espressioni Vediamo meglio l’ algoritmo passo – passo: Espressione stack[0] stack[1] stack[2] out(vect) a a + + a b + ab * + * ab c + * abc A questo punto svuoto lo stack e salvo in out e ottengo Out(vector)=abc*+

La valutazione delle espressioni Complichiamo l’ algoritmo passo – passo: Espressione stack[0] stack[1] stack[2] out(vect) a a * * a b * ab + + ab* c + ab*c A questo punto svuoto lo stack e salvo in out e ottengo Out(vector)=ab*c+

La valutazione delle espressioni Complichiamo l’ algoritmo passo – passo: Espressione stack[0] stack[1] stack[2] out(vect) a a * * a b * ab + + ab* c + ab*c A questo punto svuoto lo stack e salvo in out e ottengo Out(vector)=ab*c+ Ho tolto un elemento dallo stack, precisamente “*” e lo ho salvato in out, il vettore che memorizza la mia espressione postfix.Al posto di * ho salvato nello stack + che ha una priorità più bassa.

La valutazione delle espressioni con parentesi Le parentesi rendono un po' più difficile il processo di trasformazione di un espressione infissa, in quanto l’ espressione post fissa equivalente e priva di parentesi.Come esempio useremo l’ espressione a*(b+c)*d che trasformata in espressione postfissa diventa abc+*d*.Nella prossima slide vediamo il processo di conversione. Si noti che gli operatori interni alle parentesi vengono inseriti nello stack finche non viene raggiunta la parentesi destra che ha una bassa priorità.a questo punto lo stack viene svuotato finche non viene raggiunta la corrispondente parentesi sinistra;anche la parentesi sinistra viene cancellata dallo stack ma non viene salvata in out(la parentesi destra non sarà mai inserita nello stack).Fatto questo, nell’espressione infissa in esame rimane da esaminare solo il “*d”.Poche le due moltiplicazioni, e cioè quella alla testa dello stack e quella di *d hanno la stessa priorità, la prima viene indirizzata in out prima di d e la seconda posta nello stack ed estratta dopo che d passa all’ out

La valutazione delle espressioni con parentesi L’ analisi dei due esempi suggerisce uno schema basato su livelli di precedenza per inserire ed estrarre operatori dallo stack.La parentesi sinistra complica le cose in quanto si comporta come un operatore di bassa priorità quando si trova nello stack e come operatore di alta priorità quando è fuori dallo stack.Essa viene inserita nello stack tutte le volte che viene raggiunta nell’ espressione ed eliminata dallo stack soltanto quando viene raggiunta la corrispondente parentesi destra(ciò e dovuto al fatto che la parentesi destra nello stack ha una priorità bassa ma superiore a quella della parentesi sinistra). Pertanto abbiamo due tipi di priorità una dentro la stack ed una fuori.

La valutazione delle espressioni con parentesi Algoritmo passo – passo: Espressione stack[0] stack[1] stack[2] out(vect) a a * * a ( * ( a b * ( ab + * ( + ab c * ( + abc ) * abc+ * * abc+* d * abc+*

La valutazione delle espressioni con parentesi A questo punto svuoto lo stack e ottengo: Abc+*d*