Sunteți pe pagina 1din 6

#include<iostream.

h>
#include<assert.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

class telefon
{
public:
char *adresa;
char *familia;
char *data_instalarii;
long nr_telefon;

telefon();
telefon *sting;
telefon *drept;
};
telefon::telefon()
{
adresa =new char[20];
strcpy(adresa," ");
familia =new char[10];
strcpy(familia," ");
data_instalarii =new char[20];
strcpy(data_instalarii," ");
nr_telefon=0 ;
sting=drept=0;
}

  class Tree
{
private:
telefon*tnod;
void inordine(telefon*);
void postordine(telefon*);
void preordine(telefon*);

public:

void insnod (telefon *, telefon*);//functia ce va insera un nod


void afisare(telefon *);//Functia ce va afisa rezultatele
void aratainordine();/*functia ce va fi chemata in functia main
spre a
                        afisa rezultatul functiei inordine */

void aratapreordine();/*functia ce va fi chemata in functia main


spre a
afisa rezultatul functiei preordine */

void aratapostordine();/*functia ce va fi chemata in functia main


spre a
afisa  rezultatul functiei postordine */

void cauta(char *);/*Functia ce va cauta un abonat


                      dupa numele de familie */
void adaugare();//functia ce va adauga un nod la arborele existent
};

/*Descriem functia inordine.Ea va parcurge initial nodul sting apoi


radacina si apoi nodul drept,in caz ca arboreal nu este vid, si
exista
cel putin radacina arborelui*/

void  Tree ::inordine (telefon *ptr)


{
if(ptr !=0)
   {
inordine(ptr->sting);
afisare(ptr);
inordine(ptr->drept);
   }
}
/*Descrim functia postordine. Ea va parcurge initial nodul sting
apoi nodul
drept si apoi radacina, in caz ca arborele nu este vid, si exista
cel
putin radacina a arborelui*/

void  Tree ::postordine (telefon *ptr)


{
if(ptr !=0)
   {
postordine(ptr->sting);
postordine(ptr->drept);
afisare(ptr);
   }
}
/*Descrim functia preordine.Ea va parcurge initial radacina, nodul
sting
si apoi nodul drept, in caz ca arborele nu este vid, si exista cel
putin
radacina arborelui*/

void  Tree ::preordine (telefon *ptr)


{
if(ptr !=0)
   {
afisare(ptr);
preordine(ptr->sting);
preordine(ptr->drept);
   }
}
/*functia ce va fi chemata in functia main pentru a afisa
rezultatul
functiei inordine*/

void Tree::aratainordine()
{
inordine(tnod);
}
/*functia ce va fi chemata in functia main pentru a afisa
rezultatul
functiei preordine*/

void Tree::aratapreordine()
{
preordine(tnod);
}
/*functia ce va fi chemata in functia main pentru a afisa
rezultatul
functiei postordine*/

void Tree::aratapostordine()
{
postordine(tnod);
}
/*Descrim functia insnod care va introduce nodurile pe care vrem sa
le
adaugam in arbore. Initial daca arborele e vid, nod introdus va fi
radacina arborelui. In cazul ca radacina exista atunci nodul se va
introduce ca nod sting sau drept in dependenta daca nodurile date
nu
sunt ocupata si de  ordinea alfabetica si dimensiunea sirului
numelui  de familie, daca frunzele sunt ocupate atunci se
trece ca radacina la frunza stinga deja existenta apoi la dreapta.
*/

void Tree::insnod (telefon *ptrad, telefon* p)


{
if(ptrad==0)   //arbore vid
  {
ptrad=p;
return;
  }
if(strcmp(ptrad->familia,p->familia)<0)
  {
if (ptrad->sting==0)
ptrad->sting = p;
else insnod(ptrad->sting,p);
    }
else  if(strcmp(ptrad->familia,p->familia)>0)
    {
if (ptrad->drept == 0)
ptrad->drept = p;
else insnod(ptrad->drept,p);
    }
else if(strcmp(ptrad->familia,p->familia)==0){
return;}
}
  /*Descriem functia afisare ce va afisa informatiile despre un nod
al
  abonatului*/

void Tree::afisare(telefon *ptr)


{
cout<<"Adresa abonatului                :"<<ptr->adresa<<endl;
cout<<"Numele de familia a abonatului   :"<<ptr->familia<<endl;
cout<<"Data instalarii nr de telefon    :"<<ptr-
>data_instalarii<<endl;
cout<<"Nr de telefon a abonatului       :"<<ptr->nr_telefon<<endl;
cout<<"*************************************"<<endl;
}

/*Descriem functia adaugare. Ea va incarca un nod


cu informatiile despre abonati si va chema
functia insnod spre a inscrie noul nod creat in structura arborelui
deja existent */

void Tree ::adaugare()


{
telefon *ptr=new telefon;
cout<<"Introduceti coordonatele abonatului         :\n"<<endl;
cout<<"Introduceti adresa a abonatului             :\n";cin>>ptr-
>adresa;
cout<<"Introduceti numele de familie a abonatului  :\n";cin>>ptr-
>familia;
cout<<"Data Instalarii                             :\n";cin>>ptr-
>data_instalarii;
cout<<"Nr de telefon                               :\n";cin>>ptr-
>nr_telefon;
if (tnod==0)  tnod=ptr;
insnod(tnod,ptr);
}
/*Descrim functia cauta.Ea va cauta un abonat dupa  numele de
familie.Functia va cauta automobilul, initial se compara denumirea
introdusa cu numele de familie din radacina arborelui ,daca numele
de familie
nu corespunde cu cel din radacina atunci respective
din rezultatul compararii sirurilor de caractere se va trece la
nodul
sting si respectiv drept , iar in caz ca arborele e vid sau am
facut
vreo greseala ni se va afisa un mesaj de eroare.*/

void Tree ::cauta( char  kee[9])


{
telefon *d=new telefon;
d=tnod;
cout<<"Introduceti numele de familie a abonatului  :"<<endl;
gets(kee);
int f=0;
do {
if(strcmp(d->familia,kee)==0)
{
cout<<"Acesta este abonatul cautat: "<<endl;
cout<<"Familia          :"<<d->familia<<endl;
cout<<"Telefonul        :"<<d->nr_telefon<<endl;
cout<<"adresa           :"<<d->adresa<<endl;
cout<<"data_instalarii  :"<<d->data_instalarii<<endl;;
return;
f=1; }
if(strcmp(d->familia,kee)<0)  d=d->sting;
if(strcmp(d->familia,kee)>0)  d=d->drept;
     }
while(d!=0);
if(!f) cout<<"Eroare. Nod inexistent" ;
  }

/*Descrim functia main.Prin intermediul meniului putem adauga ,


cauta un
nod, sau a parcurge  arborele dupa cele trei metode mentionate mai
sus.
Functia are ca valoare de intrare radacina arborelui. */

void main(Tree &ptr)


{
clrscr();
int  k=0;
do
{
cout<<"                     TASTATI\n"<<endl;
cout<<"                   1.Adaugarea\n"<<endl;
cout<<"                   2.Afisare inordine\n "<<endl;
cout<<"                   3.Afisare preordine\n "<<endl;
cout<<"                   4.Afisare postordine\n "<<endl;
cout<<"                   5.Cautare\n "<<endl;
cout<<"                   6.Iesire\n"<<endl;

cin>>k;

switch(k)
{
case 1:
{
ptr.adaugare();
break;
}
case 2:
{
ptr.aratainordine();
break;
}
case 3:
{
ptr.aratapreordine();
break;
  }
case 4:
{
ptr.aratapostordine();
break;
}
case 5:
{
char *d;
d=new char(10);
ptr.cauta(d);
delete d;
break;
}

}
}
while (k!=6);
}

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