Sunteți pe pagina 1din 7

Universitatea Politehnica Bucuresti

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

Proiect Structuri de Date si Algoritmi

Student: Cococi Alin-Gabriel Grupa: 413E Profesor: Nastac Iulian

2011

1.Motivatia alegerii temei. Utilitatea aplicatiei Am ales aceasta tema ca urmare a cerintelor avute la materia structuri de date si algoritmi, problema aleasa fiind baza si ajutand la fiabilizarea unor probleme mai complexe .

2.Structura aplicatiei: Schema logica main()


START

int k,y;

Citire radacina;

k!=0

inserare_nod(prad,k)

Afisare optiuni

getche()

Afisare arbore in preordine,inordine si postordine

Citire nod de inlocuit

Citire nod de inlocuit

Afisare nr de noduri

Citire nod nou

Citire vectorul v Afisare nr de nivele

cautare(k,y,prad)

cautare(k,0,prad) Afisare nr de frunze

Afisare arbore in preordine,inordine si postordine

Afisare arbore in preordine

getch() STOP

2011

3.Detalii tehnice de implementare


#include<stdio.h> #include<conio.h> #include<malloc.h> typedef struct nod { int nr; nod *st, *dr;}; nod *prad=NULL,*a; int v[50],x; int sumacif(int i) { int s=0,c; do { c=i%10; i=i/10; s=s+c; } while(i!=0); return s; } void inserare_nod(nod *&p, int k) { int n; nod *q; if (!p) { n=sizeof(nod); q=(nod *)malloc(n); q->nr=k; q->st=q->dr=NULL; p=q; } else { if(p->nr!=k) if(sumacif(p->nr)>=sumacif(k)) inserare_nod(p->st,k); else inserare_nod(p->dr,k); } } void preordine(nod *p) {if (p) { printf(" %d ",p->nr); preordine(p->st); preordine(p->dr); } } void inordine(nod *p) { if (p) { inordine(p->st); printf(" %d ",p->nr); inordine(p->dr); } } void postordine(nod *p) { if (p) { postordine(p->st); postordine(p->dr); printf(" %d ",p->nr); } } void cautare(int x,int y,nod *&a) { int i; if(!a) printf("\nNodul nu exista! \n"); else if (x<a->nr) cautare(x,y,a->st); else if (x>a->nr) cautare(x,y,a->dr); else if(y !=0 ) a->nr=y; else { a->nr=v[1]; for(i=2;i<=x;i++) inserare_nod(a,v[i]); }} int noduri(nod *p) { if (!p) return 0; else return (1+noduri(p->st)+noduri(p>dr)); } int max(int x,int y) { if (x<y) return y; else return x; } int nivel(nod *p) { if (!p) return 0; else return (1+max(nivel(p->st),nivel(p>dr))); } int nr_frunze(nod *p) { if(!p) return 0; else if((!p->st)&&(!p->dr)) return 1; else return (nr_frunze(p>st)+nr_frunze(p->dr)); }

2011

int main() { int k,y; printf("Dati radacina arborelui binar:"); scanf("%d",&k); while(k!=0) { inserare_nod(prad,k); printf("Dati un numar:"); scanf("%d",&k); } printf("\nCe operatie doriti sa efectuati?\n"); printf("a) Afisare arbore in preordine,inordine si postordine;\n"); printf("b) Inlocuirea unui nod cu un nod nou;\n"); printf("c) Inlocuirea unui nod cu un arbore construit dintr-un vector dat;\n"); printf("d) Date despre arborele binar;\n"); printf("Dati optiunea dumneavoastra: "); switch(getche()) { case 'a': { printf("\n\nPreordine:"); preordine(prad); printf("\nInordine:"); inordine(prad); printf("\nPostordine:"); postordine(prad); break; } case 'b': { printf("\n\nDati nodul vechi:"); scanf("%d",&k); printf("Dati nodul nou:"); scanf("%d",&y); cautare(k,y,prad); printf("Preordine:"); preordine(prad); printf("\nInordine:"); inordine(prad); printf("\nPostordine:"); postordine(prad); break; } case 'c': { printf("\n\nDati nodul vechi:"); scanf("%d",&k); printf("Numarul de elemente din vector:"); scanf("%d",&x); for(y=1;y<=x;y++) {printf("v[%d]= ",y); scanf("%d",&v[y]);} cautare(k,0,prad); preordine(prad); break; } case 'd': { printf("\n\nNumar de noduri: %d",noduri(prad)); printf("\nNumar de nivele: %d",nivel(prad));

2011

printf("\nNumar de frunze: %d",nr_frunze(prad)); break; } default: { printf("\nOptiunea nu este buna!"); } } getch(); }

4. Resurse hard i soft necesare 1.Resurse soft Aplicatia a rulat atat pe Windows XP si Windows Vista cat si pe Windows 7. Aplicatia nu necesita c++ instalat. 2. Resurse hard 300 Mhz PC 16 Mb RAM 10 Mb spaiu liber pe hard disk Placa video si monitor compatibil Tastatur i mouse 5. Modaliti de utilizare Aplicatia creaza un arbore binar cu elementele precizate de utilizator. Criteriul de sortare a elementelor este: daca suma cifrelor numarului adugat de utilizator este mai mic decat suma cifrelor nodului tata , atunci numarul este plasat pe ramura din stanga, iar daca suma este mai mare numarul este adaugat pe ramura din dreapta. Dupa crearea arborelui alplicatia afiseaza un meniu interactiv din care utilizatorul poate alege patru optiuni. Prima optiune afiseaza arborele aranjat in preordine, inordine si postordine, a doua optiune permite utilizatorului sa inlocuiasca un nod precizat de utilizator cu un alt nod precizat tot de acesta, a treia optiune inlocuieste un nod cu un arbore construit dintr-un vector dat de la tastatura, iar a patra optiune afiseaza date despre arborele binar. 6. Posibiliti de dezvoltare Aflata in prima faza, aplicatia este departe de a avea toate facilitatile. De aceea pe viitor doresc sa imbunatatesc complexitatea acesteia. Doresc de asemenea sa creez si o interfata grafica.

2011

2011

2011

S-ar putea să vă placă și