Documente Academic
Documente Profesional
Documente Cultură
Metoda Postfixata
Metoda Postfixata
Aplicaie pentru stive i cozi Evaluarea expresiei aritmetice postfixate Translatarea din form infixat n postfixat Recursivitate Explicaii i teste Fractali. Proprieti Setul Mandelbrot O culme muntoas Setul Sierpinski
Tem de laborator Translatarea unei expresii aritmetice din forma infixat cu paranteze n forma polonez invers (postfixat) Calcularea expresiei obinute Se citete ntreaga expresie de la tastatur, ntrun string Programul trebuie s evalueze expresia i s afieze forma postfixat asociat Eventualele erori trebuie semnalizate
2
5 532*+45+ 6 5 532*+45+
11 532*+45+ 5 7
12
numerele se tipresc
3 * X + (Y 12) - Z Tiparit: + 3X*
nmulirea pe stiv
3 * X + (Y 12) - Z Tiparit: ( + 3X*
operandul se tiprete
3 * X + (Y 12) - Z Tiparit: ( + 3X*Y
( se pune pe stiv
operandul se tiprete
numerele se tipresc
3 * X + (Y 12) - Z Tiparit: - 3 X * Y 12 - + Z
operandul se tiprete
golete stiva
Algoritmul de translatare
iniializeaz stiva repet paii urmtori dac urmeaz o parantez deschis (, atunci o pune n stiv dac ns urmeaz un numr sau operand, atunci l tiprete dac ns e un operator, atunci: dac n vrful stivei este un alt operator cu precedena mai mare sau egal cu a acestuia, atunci se scoate acel operator din stiv i se tiprete se pune pe stiv operatorul altfel, ceea ce urmeaz este o parantez nchis ) se scot simboluri din stiv i se afieaz pn se ntlnete paranteza deschis corespondent, care se scoate i ea din stiv pn cnd expresia se termin se scot i se afieaz operatorii care au mai rmas n stiv (nu ar trebui s mai avem paranteze deschise)
Recursivitate
n matematic sau computer science, recursivitatea specific (sau construiete) o clas de obiecte sau metode prin definirea ctorva cazuri de baz (deseori doar unul) i prin descrierea regulilor ce descompun cazurile complexe ntr-unele mai simple. (Wikipedia)
9
Metode recursive
recursivitatea nseamn rezolvarea unei probleme cu ajutorul rezultatului obinut prin rezolvarea unei aceleiai probleme dar de mrime mai redus practic o metod se poate autoapela dar cu un argument de mrime mai mic se poate formula o abordare recursiv pentru o problem la formularea unei metode recursive, trebuie acordat atenie la evoluia argumentului metodei, pentru a nu ajunge la valori invalide
10
:-P
Recursion If you still don't get it, See: "Recursion". Recursive acronyms GNU: GNU's Not Unix PHP: PHP Hypertext Preprocessor GNU HURD: HIRD of Unix-Replacing Daemons HIRD: HURD of Interfaces Representing Death (hurd/hird/herd of gnus i.e. the antelope)
11
Metoda writeVertical
public class RecWrite { public static void writeVertical (int number) { if( number < 10 ) problema opririi System.out.println (number); else { writeVertical (number / 10); apelul recursiv System.out.println (number % 10); } } public static void main (String[] args) { writeVertical (1234); }
12
15
Teste - A
// ce se afieaz pentru apelul f(3) ? public static void f(int n) { System.out.println (n); if (n > 1) f (n-1); }
16
Teste - B
// ce se afieaz pentru apelul f(3) ? public static void f(int n) { if (n > 1) f (n-1); System.out.println (n); }
17
Teste - C
// ce se afieaz pentru apelul f(3) ? public static void f(int n) { System.out.println (n); if (n > 1) f (n-1); System.out.println (n); }
18
Fractali
Noiunea de fractal inventat de Benot Mandelbrot (1975) descrie obiecte a cror poriune mrit (cu o lup) prezint similaritate cu ntregul obiect Denumire derivat din latinescul fractus Un fractal matematic este bazat pe o ecuaie iterativ, bazat pe recursie Structuri geometrice folosite de programatori pentru a realiza scene naturale reprezentnd arbori, muni, nori etc.
19
Setul Mandelbrot
detaliu:
20
Proprieti
ntregul are aceeai form ca una sau mai multe pri ale sale (self-similarity)
Generarea fractalilor
Punctul situat la jumtatea segmentului este deplasat n sus sau n jos cu o distan aleatoare Se aplic regula din nou pe subsegmentele create Se oprete cnd mrimea unui subsegment devine relativ mic
a) segmentul iniial
O coam muntoas
Procedeul se aplic recursiv pn cnd distana dintre dou puncte devine < 50 (rezoluie 512 x 512)
23
24
Un fractal cu ptrate
25
26
Triunghiul Sierpinski
27
Triunghiul iniial
public void sierpinski () { Pair a = new Pair (width / 2, 0); Pair b = new Pair (0, height); Pair c = new Pair (width, height); sierpinski (a, b, c); }
29
Procedura de generare
public void sierpinski (Pair a, if (Pair.len (a, b) < 10) { drawArea.drawLine (a.x, drawArea.drawLine (b.x, drawArea.drawLine (a.x, return; } Pair ab = Pair.mid (a, b); Pair bc = Pair.mid (b, c); Pair ac = Pair.mid (a, c); sierpinski (a, ab, ac); sierpinski (ab, b, bc); sierpinski (ac, bc, c); } Pair b, Pair c) { a.y, b.x, b.y); b.y, c.x, c.y); a.y, c.x, c.y);
30
http://en.wikipedia.org/wiki/Fractal
31