310 likes | 456 Views
Fractali. Desenarea arborilor binari. Motto: Ionformatica nu inseamna calcul.Calculul este facut de masini de calcul.Informaticii ii apartine fantezia , imaginatia , demonstratia . Fractali. Generatitati.
E N D
Fractali Desenareaarborilorbinari
Motto: Ionformatica nu inseamnacalcul.Calcululestefacut de masini de calcul.Informaticii ii apartinefantezia, imaginatia, demonstratia.
Generatitati Fractaliiau fostintrodusi in anul 1975 prinlucrarearevolutionara a matematicianuluifrancezBenoit Mandelbrot,' O teorie a seriilorfractale' cereunestetotodatadiverseleteoriidinainteasa. El estecel care a inventatcuvantul ,,fractal", de provenientalatina(,,frângere"-a sparge in fragmentenenumarate). Notiuneade fractal a aparut ca urmare a studiuluivietiireale in care informatiageneticacontinuta in nucleuluneicelule se repeta la diferitescari. Calculatorulperimte ca o anumitafigura (de ex:un segment) sa se transformeintr-o alta,formata din maimultefiguriinitiale (de ex: o liniefranta)sifiecarefiguraobtinutasa se transforme in mod asemanator (acestetransformarinecesitafoartemultecalcule). Acesteformegeometrice au fostconsiderate in trecuthaotiicesau ,,aberatiigeometrice", iarmultedintreeleerauatat de complexeincatnecesitaucalculatoareperformantepentru a le vizualiza.Peparcurs, domeniistiintificeca fizica,chimia,biologiasaumeteorologiadescopereauelementeasemanatoare , care de multeoricontrazicaparenta ,daracesteadepasesc cu multcunostintele de matematica din liceu. Inainte de a vaprezentacatevaexempletrebuiecunoscutenotiunile de baza pt a lucra in mod grafic.
Elemente de grafica Limbajul Pascal contine o serie de procedurisifunctii care permit realizareaunoraplicatiigrafice.Acesteasunt reunite un unitateaGRAPH ce se gaseste in subacatalogulUNITS. Pentru ca o imagine sapoataapareapeecrancalculatorulutilizeaza o placa video care difera in functie de memoria video sialtiparametrii.Pt a accesa o placa video trebuiesafolosimanumiterutinespecialespecificelornumiteDriver-e.Limbajul Pascal detine o colectie de astfel de component software si in functie de placace a fostdetectata de sistem se incearca un driver saualtul. Acestefisiere au extensia “bgi “ .In continuare ne vomreferidoar la driverulVGA ( Video Graphics Array ) dezvoltat de firma IBM.Driverul VGA poate lucre in maimultemoduriinsavom prefer modul standard de inaltarezolutie“VGAHI”( constanta de tip intreg) cepoateafisa 640x480 puncte in 16 culori.
Selectarea driver-uluisi a modului de lucru se face prinutilizareaproceduriiinitgraph. Aceasta are 3 parametrii: gdriver (de tip integer) care continecodulasociatdrever-ului, gmode(de tip integer) care retinemodul de lucrusi o variabila de tip string, care aratacaleacatreunitateaGRAPH.Formagenerala o proceduriieste: initpraph(gdriver,gmode, ‘cale’); . Primiidoiparametriisunttransmisiprinreferinta.
Initializareasitemuluigrafic se poate face in 2 feluri: 1) Prin a solicitasa se identifice automat placagraficasicorespunzatoreisa se incarce un naumit driver sisa se selectezemodul de lucru • procedure initg; • begin • gdriver:= detect; • initgraph (gdriver,gmode, ‘c:\tp\bgi’); • if graphresult <> 0 then • begin • writeln (‘Tentativaesuata!”); • halt • end • end; Constanta detect are valoarea 0 si se specificaproceduriiidentificarea automata a driver-uluisi a modului de lucru.
2) Prinindicarea cu ajutorulprimilor 2 parametriaiunu driver si a unui mod de lucrusolicitate de progamator • griver:= VGA; • gmode:=VGAHI; • initgraph (gdriver,gmode, ‘c:\tp\bgi’); • if graphresult <> 0 then • begin • writeln (‘Tentativaesuata!”); • halt • end • end; Tentativa de initializaregraficapoateesua din diverse motive, cum arfilipsaunitatiiGRAPH,calea indicate gresitetc.Testarea se realizeaza cu functiaintreagagraphresult care returneaza 0 in cazafirmativsi o valoarediferita de 0 in cazcontrar.
Elementeleuni fractal 1.Initiatorul 2.Legea de constructie 3.Procesul de generare
Primiifractalifaimosi Triunghiul lui Sierpinski Sita lui Sierpinski Covorul lui Sierpinski 1 Covorul lui Sierpinski 2
Praful lui Cantor Curba lui Koch
Definitie • Un arbore binar este o multime finita de noduri care este fie vida,fie reprezinta un arbore ordonat in care fiecare nod are cel mult 2 descendenti. • Din definitie rezulta ca un arbore binar contine cel mult doi sub-arbori binari(stang sau drept).Ei se obtin deci prin suprimarea radacinii si a muchiilor incidente cu aceasta.Oricare din ei poate sa fie vid.Daca arborele binar este format dintr-un singur nod,atunci ambii subarbori sunt vizi. • Un nod fara descendenti se numeste nod terminal sau frunza. • Un arbore binar in care fiecare nod care nu este terminal are exact doi descendenti,se numeste arbore binar complet
Se da un segment AB. Cu ajutorul lui se construieste un arbore,asa cum se vede in figura de mai jos: Lungimea fiecarei ramuri este o treime din lungimea initiala a segmentului .Fiecare latura se transforma in mod asemanator.Se cere sa se vizualizeze figura astfel rezultata ,dupa 1s transformari.
Pentru obtinerea ramurilor se procedeaza astfel: • se considera punctul situat pe dreapta determinata de segment si pentru care avem: k= CA/CB=3 ; X=(X1-3*x2)/(1-3); y=(y1-3*y2)/(1-3)=(3*y2-y1)/2; • se roteste acest punct in jurul punctului B (x2,y2) cu un unghi de π/4; • se rotestepunctul in jurullui B cu unghiul -π/4 In urmaacesteirotatii se obtincoordonatelepunctelor care ,impreuna cu punctulB,determinasegmentelececonstituieramurilearborelui.
Proceduradesenez are ca parametri de intrarecoordonateleunui segment ,numarul de transformariefectuate(n) sinumarul de transformari care trebuieefectuate (1s).In cazul in care nu s-au efectuattoatetransformarile ,se treseazasegmentul (cu o culoareoarecare), se calculeazacoordonatelepunctelor care determinaramurilesi,pentrufiecare segment ,se reapeleazaprocedura.
Programul de desenare a arborilor : • uses graph,crt; • var gdriver,gmode,1s:integer • xmax,ymax:integer; • procedure initg; • .... • procedure retplan (xc,yx,x1,y1:integer;x,y :integer;unghi:real); • ... • procedure desenez(x1 ,y1 x2,y2,n,ls:integer); • varx,y :integer; • begin • if n<=1s then
begin • setcolor(1+random(15)); • moveto(x1,y1); • lineto(x2,y2); • rotplan(x2,y2,(3*x2-x1) div 2, (3*y2-y1) div 2,x,y,pi?4); • desenez (x2,y2,x,y,n+1,1s); • end • end; • begin • randomize; • write ( ‘1s=’);readln(1s); • initg; • setbkcolor(white); • desenez (getmaxx div 2, getmaxy, getmaxx div 2, getmaxy-250,1,1s); • readln • end.
Aplicatie Pentru evidenţa elevilor unei şcoli se defineşte un arbore binar de căutare, în care fiecare nod va memora numărul matricol, numele şi numărul de absenţe ale unui elev. Căutarea în arbore se va face după numărul matricol al elevilor. Scrieţi un program care, prin intermediul unui meniu, selectează în mod repetat, atâta timp cât utilizatorul doreşte acest lucru, una din următoarele acţiuni: • adăugarea unui elev; • afişarea absenţelor pentru numărul matricol minim; • afişarea absenţelor pentru numărul matricol maxim; • modifică numărul de absenţe al unui elev pentru care se cunoaşte numărul matricol; • afişează toţi elevii al căror nume începe cu litera „B”.
program aplicatie; • type pnod=^nod; • nod=record • nr:integer; • nume:string; • abs:integer; • st, dr: pnod; • end; • var r:pnod; n,op: integer; num:string; • abs1:integer; exista:boolean; • procedure creare (var p:pnod;n:integer; num:string; abs1:integer); • {creeaza un nod al arborelui ce va contine un elev cu • numarul matricol n, numele num si nr. de absente abs1} • begin • if p<>nil then • begin • if n<p^.nr then creare(p^.st, n, num, abs1) • else • if n>p^.nr then creare(p^.dr, n, num, abs1) • else writeln(' elevul exista') • end else begin • new(p); p^.nr:=n; • p^.nume:=num; • p^.abs:=abs1; • p^.st:=nil;p^.dr:=nil; • end; • end;
procedure SRD(p:pnod); • begin • if p<>nil then begin • SRD(p^.st); • writeln(' ',p^.nr,' ',p^.nume,' ',p^.abs); • SRD(p^.dr); • end; • end; • function min(p:pnod):integer; • { cheia minima se gaseste in nodul cel mai • din stinga, pornind de la radacina} • begin • if p^.st<>nil then min:=min(p^.st) • else min:=p^.abs; • end; • function max(p:pnod):integer; • {cheia maxima se gaseste in nodul cel mai • din dreapta, pornind de la radacina} • begin • if p^.dr<>nil then max:=max(p^.dr) • else max:=p^.abs; • end;
procedure elevi_B(p:pnod); • { afiseaza elevii care au numele incepind cu litera B} • begin • if p<>nil then begin • if (p^.nume[1]='B') then begin • exista:=true; • writeln(' ',p^.nr,' ',p^.nume,' ',p^.abs); • end; • elevi_B(p^.st); elevi_B(p^.dr); • end • end; • procedure modifica_abs(p:pnod;n:integer); • { modifica nr. de absente pentru care • se cunoaste numarul matricol} • begin • if p<>nil then begin • if n<p^.nr then modifica_abs(p^.st, n) • else if n>p^.nr then • modifica_abs(p^.dr, n) • else begin • write(' absenta='); • readln(abs1); • p^.abs:=abs1; • end • end • else writeln(' Elevul cu numarul matricol ',n,' nu exista'); • end;
begin • r:=nil; • repeat • writeln(' alegeti optiunea:'); • writeln(' 1 - ADAUGAREA unui elev'); • writeln(' 2 – Absente pentru matricol MINIM'); • writeln(' 3 – Absente pentru matricol MAXIM'); • writeln(' 4 - MODIFICA numarul de absente'); • writeln(' 5 - ELEVII cu numele - B'); • writeln(' 6 - LISTA tuturor elevilor'); • writeln(' 0 - IESIRE'); • writeln; • readln(op); • case op of
1:begin • write(' numar matricol= '); readln(n); • write(' nume elev= '); readln(num); • write(' numar absente= '); readln(abs1); • creare(r,n,num,abs1); • end; • 2:begin writeln(' Valoarea absentei pentru matricol MINIM'); • writeln(' min=',min(r)); • end; • 3: begin writeln(' Valoarea absentei pentru matricol MAXIM'); • writeln(' max=',max(r)); • end; • 4: begin write(' numar matricol='); • readln(n); • modifica_abs(r,n); • end; • 5:begin exista:=false; • elevi_B(r); • if not exista then • writeln(' nu exista elevi cu numele - B'); • end; • 6:begin writeln; • writeln(' lista tuturor elevilor'); • SRD(r); • end; • end; • until op=0; • readln; • end.
Realizatori: CALUGARANDREI CosteaAnneliese CREMINEDENISA
BIBLIOGRAFIE: • ManuanualinformaticaintensivEditura L&S Soft • http://cnamd.wikispaces.com • www.google.ro (imagini) • http://facultate.regielive.ro • http://ro.wikipedia.org