1. Discutarea unor teme din curs

  • tipuri de date
  • conversii intre tipuri de date
  • operatori pentru numere întregi/reale: prioritate și asociativitate
  • operarorii virgulă, ? :, sizeof()

2. Exerciții

  1. (0,60p) Implementaţi un calcul aproximativ al lui PI după formulele de recurenţă definite mai jos:
    Click aici pentru solutie. O alta solutie este aici: https://www.wikihow.com/Calculate-Pi -> Calculate Pi Using an Infinite Series
  2. (1,5p) Scrieţi un program eficient, în care să folosiţi un ciclu fără număr cunoscut de paşi, pentru a calcula valorile funcţiilor e^x, sin(x) şi cos(x), folosind formulele de mai jos (0,5p pentru fiecare formulă).
    Click aici pentru solutii.
  3. (0,60p) Se consideră funcția f:R->R, continuă pe intervalul [a,b]. Dandu-se valorile reale a si b (a<b), precum si functia f, sa se calculeze o aproximare buna pentru integrala de la a la b din f(x) dx.
  4. Atentie! Functia se va scrie ca parte componenta din program, sub forma float f(float x) { ….. return …; }, de exemplu float f(float x) { return x*x-sin(x); }
    Indicație: Se poate folosi metoda dreptunghiurilor medii, pentru aproximarea integralei. Vezi: http://www.didactic.ro/materiale-didactice/13052_formula-dreptunghiurilor-pentru-calculul-aproximativ-al-integralei
  5. (0,50p) Se consideră funcția f:R->R, continuă pe intervalul [a,b], cu f(a)*f(b)<0. Să se scrie un program C++, care să determine o soluție a ecuației f(x)=0, folosind metoda următoare:
    Dacă a<b, se calculează m=(a+b)/2, apoi f(m). Dacă f(m) este foarte apropiat de zero, atunci m este o soluție a ecuației. Dacă nu, atunci se verifică dacă graficul funcției ar intersecta cel puțin o dată axa Ox, pe intervalul [a,m], respectiv [m,b] și se rezolvă problema doar pe acel interval.
    Programul va avea scris corpul functiei ca parte integranta din program, de exemplu float f(float x) { return x*x-3; }, de la tastatura citindu-se doar a si b (a<b a.i f(a)*f(b)<0).
    Click aici pentru solutie
  6. (0,30p) Să se scrie un program C++ care să determine rădăcina pătrată a numărului real pozitiv x, ca limită a șirului de numere an, definit astfel: a0=1, an=1/2*(an-1+x/an-1). Se pot calcula repetitiv termeni ai șirului, până când diferența dintre ultimii doi este destul de mică. Se va evita folosirea vectorilor sau a functiilor recursive.
    Click aici pentru solutie
  7. (0.40p) Să se definească un tip de date pentru reprezentarea numerelor complexe şi să se scrie secvențe de cod (sau funcţii) pentru diferite operaţii cu astfel de numere: adunare, scădere, înmulțire și împărțire. Click aici pentru solutie.
    Click aici pentru o alta solutie. (explicatii la pagina 89 din lucrarea de aici.)
  8. (0,30p) Definiți un tip de date adecvat pentru reprezentarea unei date calendaristice, apoi scrieți o secvență de cod (sau o funcție) pentru determinarea zilei următoare unei zile date.
  9. (0.25p) Scrieţi o bucată de cod (sau o funcţie bitcount(n)) care să contorizeze numărul de biţi pe 1 dintr-un argument întreg.
    Click aici pentru solutie.
  10. (0.5p) Scrieţi o bucată de cod (sau o funcţie getbits(x, p, n)) care să determine (cadrat la dreapta) câmpul de lungime n biţi al lui x, care începe la poziţia p. Click aici pentru solutie.
  11. (1,50) Se considera o codificare a numerelor naturale, folosind baza 3, dar cu cifrele 0, 1 si !. Cifra ! are valoarea -1, cifra 0 valoarea 0, iar cifra 1 valoarea 1. De exemplu, numarul 8=1*3^2+0*3^1+(-1)*3^0 se va codifica prin 10!, numarul 7=1*3^2+(-1)*3^1+1*3^0 se va codifica prin 1!1, iar numarul 17=1*3^3+(-1)*3^2+0*3^1+(-1)*3^0 se va codifica prin 1!0!. Scrieti secvente de cod (sau functii) care sa codifice din baza 10 in acest cod, respectiv sa decodifice din acest cod in baza 10 un numar natural oarecare n.
  12. (0.40p) Scrieți o secvență de program (sau o funcție) care pentru o zi (an luna zi) va returna numărul zilei din săptamană.
    unsigned char dayOfTheWeek(unsigned short year, unsigned char month, unsigned char day);
    Puteti folosi algoritmi descrisi la adresa https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week