Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- #define NAME_SIZE 13
- #define MAX_KIDS 10000
- enum Gender {
- MALE = 0,
- FEMALE = 1
- };
- struct Kid {
- char name[NAME_SIZE];
- char surname[NAME_SIZE];
- Gender g;
- int year, month, day;
- };
- void Read(int &n, Kid (&kids)[MAX_KIDS]) {
- ifstream in("data.txt");
- in >> n;
- for (int i = 0; i < n; i++) {
- if (in.peek() == '\n')
- in.ignore(1);
- in.get(kids[i].surname, NAME_SIZE);
- in.get(kids[i].name, NAME_SIZE);
- char gender;
- in >> gender;
- kids[i].g = (gender == 'v') ? MALE : FEMALE;
- in >> kids[i].year >> kids[i].month >> kids[i].day;
- }
- in.close();
- }
- int getKidsNumberByGender(Gender g, int n, Kid (&kids)[MAX_KIDS]) {
- int num = 0;
- for (int i = 0; i < n; i++)
- if (kids[i].g == g) ++num;
- return num;
- }
- int getNameID(char name[NAME_SIZE], int n, string names[]) {
- for (int i = 0; i < n; i++)
- if (strcmp(names[i].c_str(), name) == 0) return i;
- return -1; //Vardas nerastas
- }
- string getMostCommonNameByGender(Gender g, int n, Kid (&kids)[MAX_KIDS]) {
- int count[n];
- fill_n(count, n, 0); //Uzpildom masyva 0
- string names[n];
- for (int i = 0; i < n; i++) {
- if (kids[i].g != g) continue;
- //Surandam varda names[n] jei egzistuoja ir grazinam indeksa, kuris galioja ir count masyve
- int id = getNameID(kids[i].name, n, names);
- if (id == -1) { //Kai vardas randamas pirma karta, t.y. unikalus
- names[i] = kids[i].name; //Pridedam i vardu masyva, kad galetume veliau patikrinti
- ++count[i]; //Vardas buvo rasta pirma karta todel suteikiama reiksme = 1
- } else
- ++count[id]; //Cia pridedam kai randam pasikartojanti varda
- }
- //Ieskom didziausios reiksmes
- int max = 0, last_id = 0;
- for (int i = 0; i < n; i++) {
- if (count[i] > max) {
- max = count[i];
- last_id = i; //Priskiriam id pirmutiniam diziausiam elementui
- }
- }
- return names[last_id];
- }
- void countKidsEachMonth(int (&months)[12], int n, Kid (&kids)[MAX_KIDS]) {
- for (int i = 0; i < n; i++)
- ++months[kids[i].month-1];
- }
- void Sort(int &n, Kid (&kids)[MAX_KIDS]) {
- for (int i = 0; i < n-1; i++)
- for (int j = i+1; j < n; j++)
- if (kids[i].name[0] > kids[j].name[0]) //Ascending abc sorting by name
- swap(kids[i], kids[j]);
- }
- void Write(int (&months)[12], int n, Kid (&kids)[MAX_KIDS]) {
- int boys = getKidsNumberByGender(MALE, n, kids);
- cout << "Berniukai: " << boys << '\n';
- if (boys != 0)
- cout << getMostCommonNameByGender(MALE, n, kids) << '\n';
- else
- cout << "Vardo nera" << '\n';
- int girls = getKidsNumberByGender(FEMALE, n, kids);
- cout << "Mergaites: " << girls << '\n';
- if (girls != 0)
- cout << getMostCommonNameByGender(FEMALE, n, kids) << '\n';
- else
- cout << "Vardo nera" << '\n';
- for (int i = 0; i < 12; i++)
- cout << months[i] << ' ';
- }
- int main()
- {
- int n;
- Kid kids[MAX_KIDS];
- int months[12];
- fill_n(months, 12, 0);
- Read(n, kids);
- countKidsEachMonth(months, n, kids);
- //Rikiuojam del to kad jei yra keli vienodai populiarus vardai teks juos pateikti abeceles tvarka
- Sort(n, kids);
- Write(months, n, kids);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement