Skip to content

SebastianNeagu29/Homework-PA

Repository files navigation

Documentatie

Pas 1

  1. Pentru citirea datelor din fisier in coada (ce a fost initializata cu init_queue()):
    • se apeleaza read_file_to_queue() in care se sare peste primul rand din fisierul deschis si valorile de pe fiecare linie sunt citite cu read_line();
    • experienta si varsta pot deja fi puse in variabila participant, insa numele si statutul social sunt copiate in doua string-uri pentru formatarea corecta (se foloseste modify_name()), respectiv aflarea valorii corespunzatoare din enum (find_status());
    • dupa ce variabila participant contine toate valorile corecte de pe o linie, acestea sunt puse in coada prin enqueue();
  2. Pentru scrierea datelor din coada in noul fisier ./Pas_1/test_1.csv, se apeleaza write_queue_to_file(), prin intermediul careia se apeleaza print_queue() (nu s-a folosit dequeue() pentru ca valorile trebuie pastrate in coada).

Pas 2

  1. Pentru organizarea candidatilor s-au folosit 2 BST-uri:
    • BST pentru lorzi, cu root-ul root_lord;
    • BST pentru aventurieri si cavaleri, cu root-ul root_rest (rest semnificand restul participantilor);
  2. Din coada s-au extras pe rand lorzii, aventurierii si cavalerii folosind functia insert() (atata timp cat mai exista noduri in coada) care cauta locul potrivit unde trebuie pus fiecare participant pentru mentinerea proprietatii de BST, iar la final creeaza un nou nod pentru BST folosind new_node() (care copiaza si la final sterge nodul din coada folosind delete_node());
  3. Apoi, folosind write_bst_to_file(), sunt scrise datele participantilor in cele 2 fisiere dorite (./Pas_2/test_2_lorzi.csv, respectiv ./Pas_2/test_2_cavaleri_aventurieri.csv), in mod organizat in functie de statut si experienta.

Pas 3

  1. Pentru eliminarea participantilor care se gasesc in fisierul cu contestatii:
    • initial procesul este similar cu cel de la pasul 1 (citirea fiecarei linii din fisier);
    • folosind functia delete_node_bst() si datele din variabila participant, sunt sterse din BST-ul lorzilor nodurile, gasind participantii de sters in functie de experienta;
    • functia de stergere asigura ca se mentine proprietatea de BST;
  2. Participantii ramasi sunt scrisi in fisierul ./Pas_3/test_3_lorzi.csv.

Pas 4

  1. Pentru realizarea acestui pas, a fost realizat struct assigned, numit si Assigned_participant pentru participantii care vor lua parte la vanatoare. Astfel, pe langa datele participantului, sunt retinute: padurile prin care acesta va trece, numarul de paduri, cat si numarul traseului;
  2. Se creeaza heap-ul folosind create_heap();
  3. Se apeleaza populate_heap() care:
    • foloseste o variabila competitor in care se vor pregati datele ce trebuie dupa puse in heap (similar cu procesul de la pasul 1);
    • pentru ca traseele sunt puse in ordine, doar trebuie incrementat numarul traseului;
    • se citeste cu read_track_file() linia curenta din fisier cu trasee pentru a se afla prin ce paduri va trebui competitorul sa treaca;
    • se cauta in cele 2 BST-uri (mai intai in BST-ul lorzilor), folosind max_value_node_bst() participantul cu experienta cea mai mare (cel aflat in nodul cel mai din dreapta al arborelui) si sunt copiate datele in competitor cu copy_to_competitor();
    • pentru ca datele au fost copiate, se poate sterge nodul din BST prin delete_node_bst();
    • se insereaza datele in heap folosind insert_to_heap(), care asigura ca acestea sunt puse pe pozitia corecta;
    • se repeta procesul pana cand in heap se afla cei 8 competitori cu cea mai mare experienta;
  4. In fisierul ./Pas_4/test_4.csv sunt scrise numarul traseului, numele si experienta competitorilor in ordinea in care apar in heap.

Pas 5

  1. Este actualizata experienta fiecarui competitor cu update_experience();
  2. Se actualizeaza ordinea in care competitorii sunt pusi in heap folosind update_order_heap() si heapify_up(), pornind de la primul competitor;
  3. Competitorii sunt din nou scrisi in fisierul ./Pas_5/test_5.csv, dar in ordinea actualizata.

Pas 6

  1. write_awards_to_file() scrie in fisier cei 3 competitori care au acum cea mai mare experienta;
  2. De fiecare data functia il va scrie in fisierul ./Pas_6/test_6.csv pe competitorul de pe prima pozitie, iar dupa este extras din heap pentru a afla noul competitor cu cea mai mare experienta folosind heapify_down().

Pas 7

  1. Impreuna cu drumuri.csv, functia create_graph() creeaza o lista de adiacenta prin care se vor determina traseele urmate de competitori la pasurile anterioare;
  2. Sunt creati doi vectori, null_in_v si null_out_v pentru a memora care sunt varfurile care au grad de intrare 0, respectiv care au grad de iesire 0;
  3. Varfurile cu aceste proprietati sunt aflate folosind find_null_in_degree_vertices(), respectiv find_null_out_degree_vertices();
  4. Traseele sunt aflate folosind find_path():
    • se initializeaza variabilele necesare cu init_find_path();
    • cu ajutorul celor 2 vectori, cand incepem Depth First Search, stim de la ce varfuri sa incepem si la care sa ajungem;
    • cu DFS_scan() ajungem sa memoram fiecare traseu si dimensiunea acestuia;
  5. Traseele nu se afla in ordine lexicografica, asadar apelam sort_tracks() si va compara numarul padurilor de pe fiecare traseu folosind bubble sort;
  6. La final, traseele sunt gata sa fie scrise in fisierul ./Pas_7/test_7.csv.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published