Sunteți pe pagina 1din 8

I.P.

CENTRUL DE EXCELENŢĂ ÎN INFORMATICĂ ŞI TEHNOLOGII


INFORMAŢIONALE

LUCRARE INDIVIDUALĂ
Nr.1
LA DISCIPLINA :
“Utilizarea tehnicilor de programare”

Grupa: W-1732

Elevul:
Strişca Veaceslav

Profesor:
Troian Veaceslav
Chişinău 2019
Cuprins :

Nr Continut Pagina

1. Cuprins 2
2. Arbori (Teorie) 3
3. Sarcina 5
4. Programul 6

5. Date intrare/iesire 7
6. Concluzie 8

7. Bibliografie 8

2
Arbori
Arborii sunt un caz particular al grafurilor. Acestia sunt compusi dintr-o serie de noduri
interconectate in care se gasesc informatii.

Definitie: Arborele este un graf neorientat conex fără cicluri în care unul din noduri este
desemnat ca rădăcină. Nodurile pot fi aşezate pe niveluri începând cu rădăcina care este
plasată pe nivelul 1.

Radacina unui arbore este un nod special care ajuta la delimitarea arborelui pe nivele. Acest nod
se afla pe cel mai inalt nivel din arbore.

Astfel, arborele devine mai usor de parcurs, deoarece plasarea nodurilor pe nivele duce la o
structurare mai eficienta a informatiilor. De asemenea, algoritmii ce folosesc arbori sunt foarte
usor de implementat recursiv, caci la fiecare pas, putem separa arborele in mai multi arbori mai
mici.

Exemplu de arbore:

Arborele de mai sus are ca radacina nodul F.

In arborele de mai sus, putem privi nodul B ca radacina, a unui nou arbore, mai mic (sub-arbore).

In continuare vom prezenta cateva notiuni utile in intelegerea arborilor. Vom folosi ca exemplu
arborele de mai sus cu radacina F.

Arborele poate fi impartit in nivele astfel :


 F(nodul radacina) – Nivelul 1
 B si G – Nivelul 2
 A, D si I – Nivelul 3
 C, E si H – Nivelul 4

3
Un nod A este descendent al unui alt nod B, daca este situat pe un nivel mai mare decât B şi
există un lanţ care le uneşte şi nu trece prin rădăcină.Mai multe despre lanturi gasiti aici.
Exemplu: In arborele de mai sus E este descendentul lui B, si al lui A.

Un nod A este fiu/descendent direct al unui alt nod B, daca este situat pe nivelul imediat
urmator nodului B si exista muchie intre A si B.
Exemplu: In arborele de mai sus B si G sunt fii lui F(nodul radacina), A e fiul lui B, H e fiul lui I
etc.

Un nod A este ascendent al unui alt nod B, daca este situat pe un nivel mai mic decat B si exista
lant care le uneste si nu trece prin radacina.
Exemplu : In arborele de mai sus G este ascendentul lui H,B este ascendentul lui C.

Un nod A este parinte al unui alt nod B, daca este situat pe nivelui imediat superior nodului B si
exista muchie intre A si B.
Exemplu: In arborele de mai sus F este parintele lui B,D este parintele lui E, I este parintele lui H
etc.

Doua noduri sunt frati daca au acelasi parinte.


Exemplu : B si G sunt frati, A si D sunt frati.

Un nod este frunza daca nu are niciun fiu, adica se afla pe ultimul nivel.
Exemplu : In arborele nostru frunzele sunt C,E si H.

4
Sarcina :

Intr-o firma sunt n angajati, numerotati de la 1 la n, fiecare angajat avand un singur


sef direct, cu exceptia directorului, care nu are sef. Ierarhia firmei este data printr-un
vector de tip tata. Fiecare angajat al firmei are un salariu dat printr-un numar natural.
Angajatii si seful sunt recompensati astfel: castigul fiecarui salariat este egal cu salariul
sau la care se adauga media aritmetica a castigurilor subordonatilor sai directi. Media
aritmetica se rotunjeste prin adaos la un numar intreg (de exemplu 5.33 se rotunjeste
la 6). Angajatii care nu au subordonati directi castiga doar salariul.
Calculati care este castigul directorului firmei.

Exemplu:

firma.in
8 (numarul de angajati)
4 3 0 3 2 1 2 1 (vectorul tata)
2 6 4 3 7 3 1 5 (salariul fiecarui angajat)

firma.out
14

5
Programul :
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("firma.in");
ofstream fout("firma.out");

int r,n, t[101],x[101], s[101];


int fii(int r)
{ int k=0;
for(int i=1;i<=n;i++) if(t[i]==r) k++;
return k; }
int calcul(int v)
{ s[v]=0;
for(int i=1;i<=n;i++)
if(t[i]==v)
s[v]=s[v]+calcul(i);
if(fii(v)>0) return x[v]+ceil((float)s[v]/fii(v));
else return x[v]; }
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>t[i];
if(t[i]==0) r=i;
}
for(int i=1;i<=n;i++) fin>>x[i];
fout<<calcul(r);
fin.close();
fout.close();
return 0;
}

6
Date intrare/iesire :

Fisierul cu datele de intrare:

Fisierul cu datele de iesire:

7
Concluzie:
In lucrarea individuală respectiva am descris una din metodele de optimizare combinatoriala,
ARBORII. Parcurgerea, structura, definitii, etc. Ulterior am elaborat un program ce ruleaza pe
baza de arbori binari. Pentru crearea programului am avut nevoie de cunostinte de baza in
programare, precum cunostinta limbajului C++, si structurii de grafuri (arborii). Nu a fost o
problema dificila, totusi a necesitat putina atentie sit imp.

Bibliografie:
 https://invata.info/2017/04/02/arbori-c/

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