---+++ Homework 3: realizzazione di una calcolatrice in notazione polacca inversa Si deve realizzare un programma che simuli una calcolatrice in Wikipedia:Reverse_Polish_notation, (notazione polacca inversa) ovvero una calcolatrice che: * usa una stack (di dimensioni non definite) per mantenere i risultati parziali delle operazioni * tutte le operazioni da svolgere prendono gli argomenti dalla stack e mettono il risultato sulla stack Il programma deve permettere i seguenti input, *su righe diverse* (ovvero separati da accapo): * un numero intero, che verrà inserito sulla stack (push implicito) * oppure una lettera che indica una operazione da svolgere. Le operazioni ammesse sono: * *P*: (print) stampa tutti gli elementi della stack dal top al bottom separati da uno spazio (oppure "EMPTY" se non ci sono elementi nella stack). NON elimina gli elementi dalla stack. * *D*: (dup) aggiunge in cima alla stack una copia dell'elemento top (oppure non fa nulla se non ci sono elementi nella stack) * *d*: (drop) elimina l'elemento in cima alla stack (oppure non fa nulla se non ci sono elementi nella stack) * *una operazione aritmetica a due argomenti*: toglie i due elementi in cima, svolge l'operazione e mette il risultato sulla stack (non fa nulla se non ci sono almeno 2 elementi). Le operazioni da realizzare sono indicate dai caratteri "+*-". La differenza toglie il valore dell'elemento top da quello che gli sta sotto. * *q*: (quoziente/resto) toglie i due elementi in cima alla stack e ne calcola quoziente e resto, che rimette su stack (oppure non fa nulla se non ci sono almeno 2 elementi nella stack). Il quoziente viene calcolato dividento per l'elemento top il secondo elemento. I risultati vengono messi sulla stack in modo che il top sia il quoziente e che il resto sia il secondo elemento. * *una operazione aritmetica a un solo argomento*: toglie l'elemento in cima, svolge l'operazione e mette il risultato sulla stack (non fa nulla se la stack è vuota). L'unica operazione da realizzare è l'opposto, indicato dal carattere "n" * *Q*: (quit) termina il programma ---+++ NOTE * per non complicare troppo la gestione degli overflow/underflow assumete che nei test non avvengano mai * per non complicare troppo l'input assumete che i valori inseriti siano sempre *non negativi* * va da sè che è possibile inserire un numero negativo facendolo segure dall'operatore *n* * quindi le operazioni con valori negativi possono capitare * per il resto va bene il risultato dato dalla istruzione *div*, che torna un resto dello stesso segno del dividendo ---+++ Esempio Se la sequenza di operazioni da svolgere fosse quella indicata nella prima colonna, la stack mano a mano conterrebbe i valori indicati nella seconda colonna (con il top a sinistra) e verrebbero stampate le righe mostrate nella terza colonna: | *Input* | *Stack* | *Output* | *Operazione svolta* | | P | empty | EMPTY | stampa | | 10 | 10 | | inserimento di 10 | | 20 | 20 10 | | inserimento di 20 | | P | 20 10 | 20 10 | stampa | | * | 200 | | prodotto | | P | 200 | 200 | stampa | | D | 200 200 | | dup | | 7 | 7 200 200 | | inserimento di 7 | | q | 28 4 200 | | quoziente e resto di 200/7 | | P | 28 4 200 | 28 4 200 | stampa | | Q | | | quit | ---+++ Test Ho publicato i [[%ATTACHURL%/][file che userò per i test]]. Chi ha già consegnato trova i risultati dei test così può correggere il programma * i primi testano separatamente ciascun operatore * poi ce ne sono 10 generati a caso * più l'esempio pubblicato sopra Se il sistema capisce che tipo di errore è accaduto, viene scritto un commento nella casella del test Per testare il programma con i file usate il comando: * __java -jar Mars4_5.jar me nc sm ic Vostro<nop>File.asm < test.in > test.output__ * poi confrontate il file test.output prodotto con l'output atteso (file test.out) ---+++ Consegna entro le ore 24 del 7 Maggio Usate la [[/~andrea/consegna-HW-2015.html][pagina di consegna]] -- Users.AndreaSterbini - 27 Apr 2015 <!-- * Set ALLOWTOPICCHANGE = Users.AndreaSterbini -->
This topic: Architetture2/MZ/AA14_15
>
HomeWork3
Topic revision: r7 - 2015-05-07 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback