You are on page 1of 7

2.

semestrálna práca
Aplikácia na spracovanie volebných výsledkov
Algoritmy a údajové štruktúry 1
Timea Krúpová

5ZY026
Návrh aplikácie:
Aplikácia sa skladá zo 4 tried a z triedy údajových štruktúr, ktoré sme robili na cvičeniach.
Trieda MainCntrl predstavuje hlavnú logiku systému v ktorej sú vykonávané všetky dôležité
metódy.
Trieda UzemnaJednotka predstavuje územnú jednotku a je v nej zoznam kandidátov, ktorý sa ale
nepoužíva momentálne.
Trieda Kandidát predstavuje kandidáta ale tiež je nevyužitá.
Trieda MyFrom zabezpečuje prosredie gui.

Implementácia údajových štruktúr:


Implementované UŠ:
SequenceTable<int,Kandidat*> *tabulkaKandidatov1K;
SequenceTable<int,Kandidat*> *tabulkaKandidatov2K;
SortedSequenceTable<int, UzemnaJednotka*> *tabulkaUzemnychJednotiek;
+Pomocné štruktúry:
SortedSequenceTable<double, UzemnaJednotka*> *tPomocna;
SortedSequenceTable<int, UzemnaJednotka*> *tPomocna;
SortedSequenceTable<string, UzemnaJednotka*> *tPomocna;
ArrayList<UzemnaJednotka*> *zUzemnychJednotiek;
ArrayList<UzemnaJednotka*> *pomocnaStruktura;

Zložitosť operácií:

1. Nacitanie zo suborov.
Dlha na vypisovanie sem, mozem ukazat v kode

Zlozitost 4*O(N) ale v podstate iba 2*o(N) – kandidatov nenacitavam, lebo


s nimi nepracujem

2. Najdenie podla nazvu Filter Nazov.


string MainCntrl::porovnajNazvy(string *nazov, Kolo kolo)
{
string pomocny = " ";
for (size_t i = 0; i < zUzemnychJednotiek->size(); i++)
{
//iba pre obce //dorobit pre duplicity(nacitat do tabulky a potom vypisat)
zUzemnychJednotiek->operator[](i)->setKolo(kolo);
if (nazov->compare(zUzemnychJednotiek->operator[](i)->getObecNazov()) == 0)
{
//pomocnaStruktura->add(zUzemnychJednotiek->operator[](i));
pomocny = pomocny + ObecToString(zUzemnychJednotiek->operator[](i), kolo) +
OkresToString(zUzemnychJednotiek->operator[](i), kolo) +
KrajToString(zUzemnychJednotiek->operator[](i), kolo) + " ";
}

}//duplicity
if (pomocny.compare(" ") != 0)
{
return pomocny;
}
Zlozitost O(N) – kvoli duplicitam musime prejst celu tabulku t.j. vsetky
kraje

3. Najdeni volici podla filtra volici


string MainCntrl::ziskajVolici(string * voliciOd, string * voliciDo, Kolo kolo)
{
//deklaracia premennych
int voliciMin, voliciMax;
voliciMin = atoi(voliciOd->c_str());
voliciMax = atoi(voliciDo->c_str());
string navratovy = "";
//prejdi vsetky obce a porovnaj ich volicov
for (size_t i = 0; i < zUzemnychJednotiek->size(); i++)
{
zUzemnychJednotiek->operator[](i)->setKolo(kolo);
int volici = zUzemnychJednotiek->operator[](i)->getZapisaniVolici();
if ((voliciMin <= volici) && (volici <= voliciMax))
{
navratovy += ObecToString(zUzemnychJednotiek->operator[](i), kolo);
//+ OkresToString(zUzemnychJednotiek->operator[](i), kolo) +
//KrajToString(zUzemnychJednotiek->operator[](i), kolo);
}
}
//vrat volicov
return navratovy;
}

Zlozitost O(n) – kvoli duplicitam musime prejst celu tabulku

4. Pridanie nového dronu do lokálneho prekladiska.


string MainCntrl::ziskajUcast(string * ucastOd, string * ucastDo, Kolo kolo)
{
//deklaracia premennych
int ucastMin, ucastMax;
ucastMin = atoi(ucastOd->c_str());
ucastMax = atoi(ucastDo->c_str());
string navratovy = "";
//prejdi vsetky obce a porovnaj ich ucast
for (size_t i = 0; i < zUzemnychJednotiek->size(); i++)
{
zUzemnychJednotiek->operator[](i)->setKolo(kolo);
int ucast = zUzemnychJednotiek->operator[](i)->getUcast();
if ((ucastMin <= ucast) && (ucast <= ucastMax))
{
navratovy += ObecToString(zUzemnychJednotiek->operator[](i), kolo);
//+ OkresToString(zUzemnychJednotiek->operator[](i), kolo) +
//KrajToString(zUzemnychJednotiek->operator[](i), kolo);
}
}
//vrat ucast
return navratovy;

Zlozitost O(n) – kvoli duplicitam musime prejst celu tabulku


5. Vypísanie všetkých dronov evidovaných v zadanom lokálnom prekladisku.
void SystemMainControl::vypisDronovVSklade(LinkedList<Dron*>* pDron)
{
Dron *d;
for (int i = 0; i < pDron->size(); i++)
{
d = pDron->operator[](i);
d->vypisDron();
}
}

6. Filter ucast+nazov + kriterium nazov


tring MainCntrl::utriedNazvy(string *nazov, string *ucastOd, string *ucastDo, Kolo kolo, Zoradenie z)
{
SortedSequenceTable<string, UzemnaJednotka*> *tPomocna = new SortedSequenceTable<string,
UzemnaJednotka*>();
ziskajNazvy(nazov, ucastOd, ucastDo, kolo);
string navratovy = "";

if (pomocnaStruktura->isEmpty())
{
return "Nenajdene";
}
//utried tabulku podla nazvov
for (size_t i = 0; i < pomocnaStruktura->size(); i++)
{
tPomocna->insert(pomocnaStruktura->operator[](i)->getObecNazov(), pomocnaStruktura-
>operator[](i));
}
//QuickSort<int, UzemnaJednotka*> *sort = new QuickSort<int, UzemnaJednotka*>;
//sort->sort(*tPomocna);
pomocnaStruktura->clear();
if (z == VZOSTUPNE)
{
for (auto item : *tPomocna)
{
navratovy += item->accessData()->getObecNazov() + ", ";
}
return navratovy;
}
if (z == ZOSTUPNE)
{
for (auto item : *tPomocna)
{
pomocnaStruktura->add(item->accessData()) ;
}
for (int i = pomocnaStruktura->size() - 1 ; i >= 0; i--)
{
navratovy += pomocnaStruktura->operator[](i)->getObecNazov() + ", ";
}
return navratovy;
}
}

Zlozitost o(M) + 3*O(N) kvoli for cyklom, ktore idu cez tabulky
7. Filter ucast+nazov + kriterium volici

string MainCntrl::utriedVolicov(string * nazov, string * ucastOd, string * ucastDo, Kolo kolo,


Zoradenie z)
{
SortedSequenceTable<int, UzemnaJednotka*> *tPomocna = new SortedSequenceTable<int,
UzemnaJednotka*>();
ziskajNazvy(nazov, ucastOd, ucastDo, kolo);
string navratovy = "";

if (pomocnaStruktura->isEmpty())
{
return "Nenajdene";
}
//utried tabulku podla volicov
for (size_t i = 0; i < pomocnaStruktura->size(); i++)
{
tPomocna->insert(pomocnaStruktura->operator[](i)->getZapisaniVolici(), pomocnaStruktura-
>operator[](i));
}
pomocnaStruktura->clear();
if (z == VZOSTUPNE)
{
for (auto item : *tPomocna)
{
navratovy += item->accessData()->getObecNazov() + ": " + to_string(item-
>accessData()->getZapisaniVolici()) + ", ";
}
return navratovy;
}
if (z == ZOSTUPNE)
{
for (auto item : *tPomocna)
{
pomocnaStruktura->add(item->accessData());
}
for (int i = pomocnaStruktura->size() - 1; i >= 0; i--)
{
navratovy += pomocnaStruktura->operator[](i)->getObecNazov() + ": " +
to_string(pomocnaStruktura->operator[](i)->getZapisaniVolici()) + ", ";
}
return navratovy;
}
}
Zlozitost o(M) + 3*O(N) kvoli for cyklom, ktore idu cez tabulky

8. Filter ucast+nazov + kriterium ucast

string MainCntrl::utriedUcast(string * nazov, string * ucastOd, string * ucastDo, Kolo kolo, Zoradenie
z)
{
SortedSequenceTable<double, UzemnaJednotka*> *tPomocna = new SortedSequenceTable<double,
UzemnaJednotka*>();
ziskajNazvy(nazov, ucastOd, ucastDo, kolo);
string navratovy = "";

if (pomocnaStruktura->isEmpty())
{
return "Nenajdene";
}
//utried tabulku podla ucasti
for (size_t i = 0; i < pomocnaStruktura->size(); i++)
{
double kluc = pomocnaStruktura->operator[](i)->getUcast() + i / 10000.00;
tPomocna->insert(kluc, pomocnaStruktura->operator[](i));
}
//QuickSort<double, UzemnaJednotka*> *sort = new QuickSort<double, UzemnaJednotka*>;
//sort->sort(*tPomocna);

pomocnaStruktura->clear();
if (z == VZOSTUPNE)
{
for (auto item : *tPomocna)
{
navratovy += item->accessData()->getObecNazov() + ": " + to_string(item-
>accessData()->getUcast()) + ", ";
}
return navratovy;
}
if (z == ZOSTUPNE)
{
for (auto item : *tPomocna)
{
pomocnaStruktura->add(item->accessData());
}
for (int i = pomocnaStruktura->size() - 1; i >= 0; i--)
{
navratovy += pomocnaStruktura->operator[](i)->getObecNazov() + ": " +
to_string(pomocnaStruktura->operator[](i)->getUcast()) + ", ";
}
return navratovy;
}
}

Zlozitost o(M) + 3*O(N) kvoli for cyklom, ktore idu cez tabulky

Navod na pouzitie:

Cez gui. Treba mat zaskrtane giltre a criteria pre ktore chceme vypis
Diagram tried:

You might also like