Limbaje de programare: Tema 2

1. Limita unor termeni infiniți. Scrieți o funcție care calculează prin aproximări succesive valoarea expresiei 1/(x + 1/(x + 1/(... + 1/x))) cu o precizie dată (de exemplu 10-6). Calculați și tipăriți o aproximație a expresiei pentru x = 4.
Indicații: În problemă se dă un termen cu un număr infinit de apariții ale lui x. El are o structură recursivă, fiind de forma 1/(x + ...) unde în loc de ... apare termenul însuși. Putem scrie tn=1/(x+tn-1), pentru n > 0, cu t0 = 0. Rezolvăm problema similar cu cea de la curs (rădăcina), calculând în fiecare pas din termenul curent termenul următor, pânâ când diferența lor nu depășește precizia cerută.
Puteți verifica, comparând valoarea găsită cu cea a ecuației lim = 1/(x + lim) (de gradul 2 în variabila lim).

2. Numere în format hexazecimal. Scrieți o funcție care returnează valoarea unui număr citit de la intrare caracter cu caracter, în format hexazecimal (cifrele 0-9, A-F sau a-f).
Indicații: problema e similară cu funcția readnat de la curs. Un prim test se face pentru cifra hexazecimala (isxdigit, tot din ctype.h), apoi pentru a obține valoarea cifrei trebuie tratat diferit cazul cifrelor și al literelor (de la A la F). Cum scrierea cu litere mari sau mici nu contează se poate folosi funcția toupper din ctype.h (returnează literă mare dacă argumentul e literă mică; altfel returnează chiar litera dată ca argument) pentru a trata cele două cazuri uniform. (La fel de bine se poate folosi funcția pereche tolower).

Probleme suplimentare

3. Serii de puteri. Calculați, cu o precizie dată, valoarea lui ex după dezvoltarea în serie Taylor:
ex = 1 + x1/1! + x2/2! + x3/3! + ...
Calculați suma până când termenul curent devine mai mic decât o valoare dată (de ex. 10-6). Pentru a evita recalcularea lui n! transmiteți ca parametru și termenul curent, și calculați-l pe următorul după relația: xn/n! = xn-1/(n-1)! * x/n.

4. Fractali. După modelul de la curs, scrieți o funcție care generează, în format SVG, fractalul din figură, care, pornind de la un pătrat pe care îl împarte în 3x3 pătrate egale, desenează recursiv figuri similare în cele 5 din 9 pătrate care formează o cruce. Când latura devine prea mică pentru a o împărți, se desenează un pătrat.


Marius Minea
Last modified: Tue Oct 2 11:30:00 EET 2012