-
Notifications
You must be signed in to change notification settings - Fork 0
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.
denix372/Parcel-Delivery-System
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
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 0
No packages published