-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME
More file actions
55 lines (45 loc) · 3.38 KB
/
README
File metadata and controls
55 lines (45 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Pentru prima cerinta a temei se citesc de la tastatura numarul de cartiere si
de pachete,elementele structurilor cartier, cat si o parte din elementele structurilor pachete.
Pentru ca alocarile de memorie (si modificarile) sa fie vizibile si in functia main si implicit
in tot programul, s-au folosit ca parametrii la functia read pointer dublu la structurile
pachet si cartier.(asemanator si la functia postas_sef pentru structura postas)
In functia break_down_adresa, adresa fiecarui pachet a fost folosita pentru a completa
campurile idCartier, strada si numar din componenta fiecarei structuri de tip pachet.
Valorile acestor campuri au fost calculate prin suma puterilor lui 2, unde puterile
reprezinta index-urile la care adresa de index = 1.
Pentru cea de-a treia cerinta am scris functia postas_sef care aloca memorie pentru
fiecare structura postas valori pentru id si pentru fiecare pachet se verifica daca
idCartier coincide cu id-ul postasului, daca da, atunci numarul pachetelor
pentru acel postas creste si se adauga pachetul in vectorul de pachete al postasului.
In functia sort_pachete, facuta pentru cerinta 4, se primeste vectorul de postasi si
pentru fiecare postas se face sortarea pachetelor in functie de prioritatea fiecarui pachet,
iar daca prioritatea este aceeasi, in functie de greutate. (in ordine descrescatoare in ambele cazuri)
Pentru codificarea mesajului fiecarui pachet se ia vectorul de postasi si pentru fiecare postas
se ia fiecare pachet si fiecare mesaj este transformat prin
intermediul functiei inversare_si_eliminare si apoi se calculeaza doua coduri,
iar ultimul va fi mesajul codificat din componenta fiecarui pachet.
Parcurgerea mesajului din functia inversare_si_eliminare se face de la
dreapta la stanga si se numara toate caracterele acceptate, adica literele,
sifrele si '-', pana cand se ajunge la un spatiu sau semn de punctuatie
si se transcrie cuvantul gasit intr-un char* intermediar. Dupa terminarea parcurgerii
se mai citeste si ultimul cuvant al mesajului.
Pentru cerinta 6 am scris 3 functii. Functia principala este noul_cod unde pentru
fiecare postas se ia id_postas si fiecare cod al fiecarui pachet al postasului
si se verifica daca acestea doua au in componenta cifre comune si daca da se trece
la alterarea codului. (functiile contine_cifra_comuna si alterare_cod)
Alterarea codului se face prin aplicarea algoritmului precizat in cerinta,
cat si in comentariile din cod.
Ultima functie, scor, ia vectorul de postasi si pentru fiecare din pachetele
acestora, pe baza idCartier-ului, strazii si numarului se recalculeaza
codul exact ca la codificarea mesajului. Se reface procesul si daca
rezultatul coincide cu codul pe care il are pachetul scorul postasului
de care tine pachetul creste. Scorurile sunt stocate intr-un vector de
intregi de lungime 32 (maximul de postasi). Scorul final al unui postas este calculat
dupa formula: pachete pentru care codurile coincid / totalul de pachete
Fiecare functie principala (care corespunde unei cerinte) are o parte de output
care este executata daca task corespunde "numarului" functiei.
Functiile primesc ca parametrii vectori de postasi pentru a putea folosi
variabile din acestia pentru output, iar pentru partea de procesare
se folosesc in principal structurile de pachete din interiorul fiecarei
structuri postas, variabilele nr_pachete si nrC (numar postasi) fiind folosite
doar ca limite pentru parcurgerile fiecarui pachet sau postas.