Documente Academic
Documente Profesional
Documente Cultură
Tema 4 Calculator de Buzunar 1
Tema 4 Calculator de Buzunar 1
Obiective
Descriere i cerine
Implementai un program care parseaz i evalueaz expresii matematice. Este obligatoriu s
structurai codul folosind pattern-ul Visitor.
Sintaxa expresiilor
Expresiile conin doar numere de tip Float, operatori i paranteze, toate separate prin unul sau mai
multe spaii.
Operaiile suportate sunt:
binare: +, -, *, /, ^ (ridicarea la putere), n ordine, de la cel mai puin prioritar:
+, *, /
^ (atenie, spre deosebire de cei de mai sus, este doar asociativ dreapta: 2 ^ 3 ^ 4 = 2 ^ (3 ^
4))
funcii unare: log (log in baza 10), sqrt (radical), sin, cos, - (minus unar, pentru numere
negative)
au prioritate mai mare decat ceilali operatori
minusul unar poate aprea doar la nceputul expresiei, sau imediat dup o parantez
deschis (cu alte cuvinte, nu vei avea expresii de tipul 1 + - 2)
operatorul - unar aplicat unei funcii trebuie separat prin spaiu:
- sqrt ( 2 ), nu -sqrt ( 2 )
Expresiile pot conine paranteze (, ), n orice combinaii
Trebuie verificat corectitudinea sintactic a expresiilor, iar dac se ntlnete o eroare de
sintax (operator invalid, numr neparsabil etc), se va arunca o excepie user-defined, numit
SyntacticException, iar parsarea expresiei se va termina.
Exemple expresii:
Rezultatul parsrii unei expresii l reprezint rdcina unui arbore, care va fi apoi parcurs n partea
de evaluare. Mai jos observai un arbore de parsare pentru exemplul primei expresii.
+
/ \
1
/ \
2
/
/ \
*
log
/ \
3
\
+
/ \
4
/ \
5 10 sqrt
|
100
Evaluarea expresiilor
Implementare
Scheletul de cod al temei impune implementarea metodei eval din clasa ExpressionParser. Aceasta
metod primete ca argument expresia ce trebuie parsat i ntoarce rezultatul acesteia.
Expresia este dat ca un ir de caractere, care trebuie desprit n tokens (separate prin spaii)
pentru fiecare element al expresiei (numr, operator sau parantez). Dup parsare, expresia va fi
reprezentat ca un arbore binar ca n exemplul din seciunea anterioar, i aceast structur de date
va fi parcurs de ctre vizitatori. Un exemplu de algoritm pentru construcia arborelui gsii n
seciunea Referine.
Folosii tipul double la parsare i la evaluarea rezultatelor intermediare, i facei un cast napoi la
float la ultimul rezultat.
Precizri
Notare
Pentru notare se va folosi checker-ul disponibil n seciunea Resurse, toate testele fiind publice.
Gsii n fiierul README din arhiv detalii de utilizare. Expresiile de test au pondere egal.
Corectare
Tema se va corecta folosind platforma vmchecker. Dac platforma de testare nu acord niciun punct
soluiei, atunci acesta va fi punctajul final al implementrii temei.
Arhiva trimis trebuie s conin n radcina sa:
sursele (clasele date in schelet trebuie sa fie in default package, alte clase pot fi)
readme-ul
javadoc sau un script de generare javadoc
Toate soluiile vor fi verificate folosind un tool de detectare a plagiatului. n cazul detectrii unui
astfel de caz, att plagiatorul ct i autorul original vor primi punctaj 0 pe tem i nu li se va permite
intrarea n examen.
Pentru fiecare zi de ntrziere se vor scdea cte 5/100 puncte. Dup 7 zile de la trecerea termenului
nu se vor mai putea ncrca arhive pe site.
Testare
Pentru a v testa implementarea, rulai n consol:
Rezultatul unui test se consider incorect dac Abs(rez_vostru - rez_ref) > 0.001.
Resurse
Schelet tem
Tester
PDF enun tem
Referine
From:
http://elf.cs.pub.ro/poo/ - Programare Orientat pe Obiecte
Permanent link:
http://elf.cs.pub.ro/poo/teme/tema4
Last update: 2014/12/17 15:36