Termen de predare:
Pentru aceasta tema va trebui sa implementati un calculator care sa faca operatii aritmetice. Programul citeste de la tastatura o expresie aritmentica si afiseaza rezultatul acestei expresii. Formatul de citire a expresiei de la tastatura este urmatorul: se citeste un numar N, apoi N numere reale, iar in final se citesc N-1 operatii. O operatie este reprezentata de un caracter si poate avea valorile: '+', '-', '*', '/'. Astfel, urmatorul input:
4 // N = 4 3 // operand 1 3 // operand 2 4 // operand 3 5 // operand 4 +*/ // N-1 = 3 operatii
Va fi interpretat ca: “3+3*4/5”.
Pentru prima cerinta va trebui sa implementati citirea unei expresii si evaluarea acesteia, neglijand precedenta operatorilor. Astfel, pentru expresia “3+3*4/5”, veti evalua operatiile in ordinea in care apar: 3+3*4/5 6*4/5 = 24/5 = 4.8 . Afisarea rezultatului va avea si o linie noua (adica “printf(”%f\n”, result)”, *NU* “printf(”%f”, result)”).
Pentru a doua cerinta va trebui sa implementati citirea unei expresii si evaluarea acesteia tinand cont si de precendenta operatorilor. Astfel, pentru expresia “3+3*4/5”, veti evalua operatiile tinand cont de faptul ca operatiile '*' si '/' au precedenta mai mare fata de '+' si '-'. In consecinta, pentru acesta sarcina, rezultatul expresiei anterioare va fi: 3+3*4/5 = 3+12/5 = 3+2.4 = 5.4 .
Pentru a 3-a cerinta va trebui sa implementeti un nou operator, operatorul `#`. Operatorul `#` este definit astfel: a#b = (a+b)*(a+b). Operatorul `#` are precedenta mai mare ca `+`/`-`, dar mai mica ca `*`/`/`. Astfel, pentru aceasta cerinta, rezultatul expresiei “1+2#3*4” va fi: 1+2#3*4 = 1+2#12 = 1 + (2 + 12)*(2 + 12) = 1 + 196 = 197.
Checker-ul se asteapta ca fiecare task sa fie separat intr-un fisier separat. Astfel, este necesar ca Makefilul pe care il puneti in arhiva alaturi de fisierele sursa sa creeze binarele cu numele task1, task2, task3. Makefile-ul oferit alaturi de checker respecta aceasta cerinta, astfel, in cazul in care modificati Makefile-ul, asigurati-va ca binarele finale vor avea numele corespunzatoare.
Dacă aveți nelămuriri, puteți să ne contactați pe forumul dedicat temei de casă nr. 1 sau pe canalul Temei 1.
La orice întrebare vom răspunde în maxim 24 de ore.
Nu se acceptă întrebări în ultimele 24 de ore înainte de deadline.
Tema va fi trimisă folosind vmchecker, cursul Programarea Calculatoarelor (CB & CD).
Toate temele sunt testate în mod automat pe VMChecker. Autentificarea se face folosind numele de utilizator și parola de pe moodle / Teams.
Din meniul drop-down selectați cursul corespunzător; în cazul de față: Programarea Calculatoarelor (CB & CD). În meniul didebar, din partea stângă a paginii, selectați tema pentru care veți face submisia.
Arhiva temei se va încărca pe checker folosind formularul de submisie din tabul Trimitere solutii.
Rezultatele vor fi disponibile în tabul Rezultate.
Citiți cu atenție informațiile afișate în Rezultate pentru a vă asigura că tema a fost rulată cu succes; o eroare comună este dată de faptul că conținutul arhivei nu respectă structura dorită (ex. fișierele sunt într-un alt director).
Punctajul final al temei este afișat la finalul informațiilor afișate în Rezultate.
Conținutul arhivei va fi următorul:
make archive
Lista nu este exhaustivă.