Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include <string>
- using namespace std;
- struct TStudent//deklaracia struktury Tstudent
- {
- char Meno[30];
- char Priezvisko[30];
- int rc;
- int bodyUbytko;
- char bydlisko[30];
- int vzdialenost;
- };
- int rok(int);// deklaracie vsetkych funkcii
- int jeZena(int);
- int mesiac(int);
- int den(int);
- void VypisDatum(int c);
- int PorovnajStudentov(TStudent*, TStudent*);
- int NajdiStudenta(TStudent*, char, int, char*);
- int PorovnajRC(TStudent*, TStudent*);
- void Bubblesort(TStudent**data, int pocet);
- void vypis_studenta(TStudent *);
- int rok(int rc)
- {
- int pomocna = rc / 10000;// rok zistujeme z posledných dvoch znakov
- if (pomocna < 20)//ak je mensi ako 20 tak 2000 ak
- return pomocna + 2000;
- else return pomocna + 1900;
- }
- int jeZena(int c)
- {
- c = c / 1000; // rodne cislo vydeli 1000
- c %= 10; //zisti zvysok po deleni posledneho trojcisla
- if (c >= 5)// ak je vacsi ako 5 tak zena inak muz
- return 1;
- else return 0;
- }
- int mesiac(int rc)
- {
- int Monat = ((rc % 10000) / 100); // zvysok po deleni 100000 vydeli 100
- if (Monat > 12) return Monat - 50;// ak je vascie ako 12 tak od mesiaca odrata 50(v pripade ze je zena ta ma k mesiacu priratane 50)
- else return Monat;// ak mensie ako 12 tak ide o muža tomu k mesiacu nepriratava nic
- }
- int den(int rc)
- {
- return rc % 100;
- }
- void VypisDatum(int c)// zvyšok je deleny 100 je den
- {
- cout << den(c) << ". " << mesiac(c) << ". " << rok(c); // vypiše datum volanim funkcii den , mesiac, rok
- }
- int PorovnajRC(TStudent*s1, TStudent*s2)
- {
- int rok1 = rok(s1->rc);//funkcia porovnava studentov podla veku
- int rok2 = rok(s2->rc); // najprv si do premnnych prebere den,mesiac,rok volanim fukcii rok,mesiac,den
- int mesiac1 = mesiac(s1->rc);// v ktorych sa ako parameter nachadza ukazovate na strukturovu premmenu jednotlivých studentov
- int mesiac2 = mesiac(s2->rc);
- int den1 = den(s1->rc);
- int den2 = den(s2->rc);
- if (rok1 > rok2)// nasledne poronava rok , mesiac , a dni aj ja 1vascia ako 2 vrati 1 inak porovnava az po den
- // a ak s1 nie je vacsia ako s2 tak vrati 0
- {
- return 1;
- }
- else if (rok1 == rok2)
- {
- if (mesiac1 > mesiac2)
- {
- return 1;
- }
- else if (mesiac1 == mesiac2)
- if (den1 > den2)
- {
- return 1;
- }
- }
- return 0;
- }
- int PorovnajStudentov(TStudent *s1, TStudent *s2)// podobne porovnavanie podla vybranych parametrov
- {
- if (s1->bodyUbytko > s2->bodyUbytko)
- {
- return 1;
- }
- else if (s1->bodyUbytko == s2->bodyUbytko)
- {
- if (s1->vzdialenost > s2->vzdialenost)
- {
- return 1;
- }
- else if (s1->vzdialenost == s2->vzdialenost)
- {
- if (PorovnajRC(s1, s2) == 1)
- {
- return 1;
- }
- }
- }
- return false;
- }
- int NajdiStudenta(TStudent*s, char pohl, int body_ubyt, char* mesto)
- {
- mesto[0] = toupper(mesto[0]);// nastavi znak v 0 indexe ukayovatela mesto na velke pismeno
- int i;
- int pocet = 0;
- for (i = 0; i < 31; i++)
- {
- if (mesto[i] == '-') // prechadza pole a ak najde znak pomlcka tak zvyši pocet o 1
- pocet++;
- }
- if (pocet == 2)// ak sa pocet rovna 2
- {
- for (i = 0; i < 31; i++)
- {
- if (mesto[i] == '-')// ak najde prvu pommlcky ta vyjde z cyklu
- break;
- }
- for (i = i + 1; i < 31; i++)// a pokracuje znakom od prvej pomlcky pri ktorej zmeni znak za pomlckov na velky (slovenske mesta maju prve velke potom male potom zase velke)
- if (mesto[i] == '-')// naprc Dubnica-nad-Vahom
- {
- mesto[i + 1] = toupper(mesto[i + 1]);
- }
- }
- if (pocet == 1) // ak sa pocet rovna 1 tak zmeni znak za pomlckov na velky
- {
- for (i = 0; i < 31; i++) //naprv Nova-Sala
- if (mesto[i] == '-')
- {
- mesto[i + 1] = toupper(mesto[i + 1]);
- }
- }
- char gender;
- if (jeZena(s->rc)) gender = 'z';
- else gender = 'm';
- if ((pohl == gender) && (s->bodyUbytko <= body_ubyt) && (!strcmp(s->bydlisko, mesto)))
- return 1;
- else
- return 0;
- }
- void Bubblesort(TStudent**data, int pocet)
- {
- int i;
- TStudent* tmp;
- for (i = 0; i < pocet - 1; i++)
- {
- for (int j = 0; j < pocet - i - 1; j++) {
- if (PorovnajStudentov(data[j + 1], data[j]))
- {
- tmp = data[j + 1];
- data[j + 1] = data[j];
- data[j] = tmp;
- }
- }
- }
- }
- void vypis_studenta(TStudent *s)
- {
- cout << s->Priezvisko << " " << s->Meno << "\t";
- cout << "(" << s->bodyUbytko << ")" << " "; cout << s->rc << ", ";
- if (jeZena(s->rc))
- cout << "z" << ", ";
- else
- cout << "m" << ", ";
- VypisDatum(s->rc);
- cout << "\t" << s->bydlisko << " ";
- cout << "(" << s->vzdialenost << ")" << " ";
- cout << endl;
- }
- void VypisStudentov(TStudent **st, int poc)
- {
- int i;
- for (i = 0; i < poc; i++)
- {
- vypis_studenta(st[i]);
- }
- }
- int main()
- {
- char m[30], p[30];
- int rc, bu, vz;
- char hlad_pohlavie;
- int hlad_body;
- char mesto[30];
- ifstream vstup;// vytvorenie objektu vstup triedy ifstream
- vstup.open("studenti.txt");
- if (!vstup.is_open())// testovanie ci je objekt ifstream asociovany s nejakým datový prudom
- {
- cout << "subor sa nepodarilo otvorit (skontrolujte ci ste zadali spravny nazov suboru)";
- return 0;
- }
- int j = 0;
- TStudent **student = new TStudent*[100];
- while (vstup >> m >> p >> rc >> bu >> mesto >> vz) //citanie z prudu vstup pomocov prepisaneho operatora
- {
- student[j] = new TStudent(); // vytvorenie pola studentov
- strcpy(student[j]->Meno, m);// vkladanie nacitaných hodnot do jednotlivých prvkov pola student
- strcpy(student[j]->Priezvisko, p);
- student[j]->rc = rc;
- student[j]->bodyUbytko = bu;
- strcpy(student[j]->bydlisko, mesto);
- student[j]->vzdialenost = vz;
- j++;
- }
- int pocet = j;
- cout << "Neusporiadany zoznam " << j << " studentov zo suboru 'studenti.txt'" << endl;
- cout << "-----------------------------------------------------------------------" << endl;
- VypisStudentov(student, j);
- cout << "-----------------------------------------------------------------------" << endl;
- cout << "Usporiadany zoznam" << j << "studentov zo suboru 'studenti.txt' funkciou Bubblesort";
- cout << endl;
- cout << "------------------------------------------------------------------------" << endl;
- Bubblesort(student, j);
- VypisStudentov(student, j);
- cout << "-------------------------------------------------------------------------" << endl;
- cout << "Vlozte pohlavie hladanych studentov muz(m)/zena(z) : ";
- cin >> hlad_pohlavie;
- cout << "Vlozte maximalny pocet bodov za ubytovanie studentov : ";
- cin >> hlad_body;
- cout << "Vlozte hladane meno studenta :";
- cin >> mesto;
- int pocet_najdenych = 0;
- for (int i = 0; i < pocet; i++)
- {
- if (NajdiStudenta(student[i], hlad_pohlavie, hlad_body, mesto) == 1)
- {
- pocet_najdenych++;
- vypis_studenta(student[i]);
- }
- }
- if (pocet_najdenych == 0)
- cout << "Nenasiel sa student ktory splna zadane kriteria " << endl;
- cout << endl;
- cout << "pocet studentov ktori splnaju zadane kriteria : " << pocet_najdenych;
- cout << endl;
- for (int k = 0; k < j; k++)
- delete student[k];//zmazanie jednotlivých prvkov pola
- delete[] student;//vymazanie dvojrozmerneho dynamickeho pola student
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement