Skip to content

C-based Parcel System for postman distribution. Implemented dynamic memory allocation, binary address decoding, sorting (priority/weight), string manipulation for message encoding, and bit-level operations (XOR) for security code alteration/verification.

Notifications You must be signed in to change notification settings

denix372/Parcel-Delivery-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nume si prenume: Baran Denis-Constantin
Grupa si seria : 312 CC
Timp pentru realizarea temei:
- pentru cerinta 1: 2 ore
- pentru cerinta 2: 2 ore
- pentru cerinta 3: 30 minute
- pentru cerinta 4: 1 ore
- pentru cerinta 5: 5 ore
- pentru cerinta 6: 1 ora
- pentru cerinta 7: 1 ora
- coding style si altele: 4 ore
Total: 16 ore si 30 de minute

Explicati:

Structurile au variabilele asa cum sunt cerute in enunt. Numele cartierului si
mesajul pachetului vor fi alocate dinamic.

Pentru Cerinta 1:

Functia citire va citi numarul de cartiere si va completa indicele fiecarui 
cartier indexat de la zero conform cerintei. Citim numele de la tastatura
cu ajutorul fgets si eliminam ultimul caracter deoarece functia "fgets" citeste
si "endline". Initial alocam 100 de caractere mesajului apoi realocam memoria
astfel incat numele sa aiba "exact atatea caractere cat trebuie", conform
cerintei. Analog citim numarul de pachete impreuna cu vectorul de biti adresa,
prioritatea, greutatea si mesajul pachetului alocat in mod analog.

Pentru Cerinta 2:
Avand adresa pachetului, folosim functia extragere_pachet pentru a completa
campurile nrCartier, strada si numar. Folosim secventele din vector pentru a
scrie in baza zecimala numerele rezultate si le retinem corespunzator. Functia
pow este folosita pentru trecerea din baza binara exact ca in exemplu. Valorile
4-i, 9-i si 17-i sunt sfarsiturile numerelor in binar deoarece le scriem de la 
dreapta la stanga.

Pentru Cerinta 3:
Functia distribuie_pachete distrubuie pachetele postasului identificare prin
idCartier aflat in cerinta 2. Cum retine un postas un pachet? Prin id-ul 
pachetului (id_pachet) pe care il stocheaza in vectorul sau de pachete.
Nu uitam sa numaram cate pachete se atribuie in nrPachete, numarul fiind
initializat in main cu zero.

Pentru Cerinta 4:
Functia ordonare_pachete primeste numarul de stucturi pachet si structurile 
pachet pe care le ordoneaza descrescator in functie de prioritate si mai apoi
greutate. Folosim o structura de tip pachet aux pentru a interschimba campurile
pachetelor prin atribuire. In main, functia va fi apelata inaintea functiei
distribuie_pachete (de la cerinta 3) deoarece postasul va retine pachetele
ordonate.

Pentru Cerinta 5:
a) Functia inversare primeste un sir de caractere format din mai multe 
cuvinte si inverseaza cuvintele eliminand separatorii. Folosim strtok pentru
a separa cuvintele si apoi le punem intr-un vector de cuvinte. Parcurgand 
vectorul in sens invers, obtinem sirul dorit si il concatenam la un sir
auxiliar pe care il copiem in sirul initial.

b) Functia primeste o structura de tip pachet si calculeaza mesajul inversat.
Aceasta calculeaza codul intermediar dupa formula din cerinta, apoi foloseste 
numarul casei si numarul strazii determinate in functia extragere_pachet(2) si
si determina codul final pe care-l stocheaza in variabila mesaj_codificat.

Pentru Cerinta 6:

Pentru functia modificare:
Aceasta modifica codul obtinut in cerinta 5 schimband invers bitul de pe
pozitia factorilor primi din cod. Folosim operatii pe biti pentru a crea masti
pe care le utilizam sa inversam bitul de pe pozitia respectiva (stim ca XOR
returneaza 1 in cazul in care bitii sunt diferiti si zero in caz contrar).
Cazurile speciale sunt tratate separat.

Pentru functia alterare:
Aceasta verifica daca codul poate fi modificat in functie de id_ul postasului.
In caz afirmativ modifica codul, iar in caz contrar functia nu face nimic.
Observatie: Verificarea nu o mai facem in main, doar apelam functia pentru 
fiecare cod si le va modifica doar pe cele care respecta cerinta.

Pentru cerinta 7:
Avand pachetele si nr-ul lor, verificam daca codul postasului se poate modifica
in functie de id. In caz afirmativ, numaram acel pachet (si nu il mai modificam,
nu folosesc functia de la 6). La final returnam scorul postasului.

Pentru main:
In functia main se citeste numarul cerintei si in functie de acesta afisam
datele pentru cerinta I si II. In fiecare cerinta citim datele cu ajutorul
functiei citire. Pentru cerinta 2 extragem datele cu ajutorul functiei
extrage_date si le afisam corespunzator. Pentru cerinta 3, avand datele extrase
vom retine cate pachete are fiecare postasi stocand in structura postas, in
vectorul de pachetele, id-ul pachetului pe care il are de livrat. In cerinta 4,
postasul trebuie sa retina pachetele in functie de prioritate asa ca inainte de 
functia distribuire_pachete, vom apela functia ordonare_pachete si abia apoi
le distribuim postasilor pentru a le retine in ordinea ceruta. In cazul
cerintei 5, in plus vom calcula codul fiecarul pachete cu ajutorul functiei 
calculare_cod pentru fiecare pachet. Vom pacurge pachetele si cand gasim
pachetele postasului ii vom afisa id-ul si codul retinut in variabila 
mesaj_codificat (parcugem deci toate pachetele si toti postasii). Pentru
cerita 6, avand codurile pachetelor calculate anterior, vom modifica codul
(in cazul in care codul nu trebuie modificat, functia nu va face modificari
asupra codului, functia alterare fiind de asa natura incat sa nu schimbe codul
daca nu este cazul). Pentru cerinta 7 nu avem nevoie de cerinta 6, decat de 
verificare cazului in care codul trebuie modificat. Functia scor postasi 
calculeaza scorul fiecarui postas si il afiseaza corespunzator. Cerinta 6 si 7
sunt relativ independente intrucat la cerinta 7 codul ramane nemodificat. Este
nevoie doar de verificarea cazului in care codul trebuie alterat pentru a
calcula scorul.

About

C-based Parcel System for postman distribution. Implemented dynamic memory allocation, binary address decoding, sorting (priority/weight), string manipulation for message encoding, and bit-level operations (XOR) for security code alteration/verification.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published