Advertisement
Guest User

Untitled

a guest
Jul 12th, 2020
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. #define NAME_SIZE 13
  8. #define MAX_KIDS 10000
  9.  
  10. enum Gender {
  11.     MALE = 0,
  12.     FEMALE = 1
  13. };
  14.  
  15. struct Kid {
  16.     char name[NAME_SIZE];
  17.     char surname[NAME_SIZE];
  18.     Gender g;
  19.     int year, month, day;
  20. };
  21.  
  22. void Read(int &n, Kid (&kids)[MAX_KIDS]) {
  23.     ifstream in("data.txt");
  24.     in >> n;
  25.  
  26.     for (int i = 0; i < n; i++) {
  27.         if (in.peek() == '\n')
  28.             in.ignore(1);
  29.  
  30.         in.get(kids[i].surname, NAME_SIZE);
  31.         in.get(kids[i].name, NAME_SIZE);
  32.  
  33.         char gender;
  34.         in >> gender;
  35.  
  36.         kids[i].g = (gender == 'v') ? MALE : FEMALE;
  37.         in >> kids[i].year >> kids[i].month >> kids[i].day;
  38.     }
  39.     in.close();
  40. }
  41.  
  42. int getKidsNumberByGender(Gender g, int n, Kid (&kids)[MAX_KIDS]) {
  43.     int num = 0;
  44.  
  45.     for (int i = 0; i < n; i++)
  46.         if (kids[i].g == g) ++num;
  47.  
  48.     return num;
  49. }
  50.  
  51. int getNameID(char name[NAME_SIZE], int n, string names[]) {
  52.     for (int i = 0; i < n; i++)
  53.         if (strcmp(names[i].c_str(), name) == 0) return i;
  54.     return -1; //Vardas nerastas
  55. }
  56.  
  57. string getMostCommonNameByGender(Gender g, int n, Kid (&kids)[MAX_KIDS]) {
  58.     int count[n];
  59.     fill_n(count, n, 0); //Uzpildom masyva 0
  60.  
  61.     string names[n];
  62.  
  63.     for (int i = 0; i < n; i++) {
  64.         if (kids[i].g != g) continue;
  65.  
  66.         //Surandam varda names[n] jei egzistuoja ir grazinam indeksa, kuris galioja ir count masyve
  67.         int id = getNameID(kids[i].name, n, names);
  68.  
  69.         if (id == -1) { //Kai vardas randamas pirma karta, t.y. unikalus
  70.             names[i] = kids[i].name; //Pridedam i vardu masyva, kad galetume veliau patikrinti
  71.             ++count[i]; //Vardas buvo rasta pirma karta todel suteikiama reiksme = 1
  72.         } else
  73.             ++count[id]; //Cia pridedam kai randam pasikartojanti varda
  74.  
  75.     }
  76.  
  77.     //Ieskom didziausios reiksmes
  78.     int max = 0, last_id = 0;
  79.     for (int i = 0; i < n; i++) {
  80.         if (count[i] > max) {
  81.             max = count[i];
  82.             last_id = i; //Priskiriam id pirmutiniam diziausiam elementui
  83.         }
  84.     }
  85.  
  86.     return names[last_id];
  87. }
  88.  
  89. void countKidsEachMonth(int (&months)[12], int n, Kid (&kids)[MAX_KIDS]) {
  90.     for (int i = 0; i < n; i++)
  91.         ++months[kids[i].month-1];
  92. }
  93.  
  94. void Sort(int &n, Kid (&kids)[MAX_KIDS]) {
  95.     for (int i = 0; i < n-1; i++)
  96.         for (int j = i+1; j < n; j++)
  97.             if (kids[i].name[0] > kids[j].name[0]) //Ascending abc sorting by name
  98.                 swap(kids[i], kids[j]);
  99.  
  100. }
  101.  
  102. void Write(int (&months)[12], int n, Kid (&kids)[MAX_KIDS]) {
  103.     int boys = getKidsNumberByGender(MALE, n, kids);
  104.     cout << "Berniukai: " << boys << '\n';
  105.  
  106.     if (boys != 0)
  107.         cout << getMostCommonNameByGender(MALE, n, kids) << '\n';
  108.     else
  109.         cout << "Vardo nera" << '\n';
  110.  
  111.     int girls = getKidsNumberByGender(FEMALE, n, kids);
  112.     cout << "Mergaites: " << girls << '\n';
  113.  
  114.     if (girls != 0)
  115.         cout << getMostCommonNameByGender(FEMALE, n, kids) << '\n';
  116.     else
  117.         cout << "Vardo nera" << '\n';
  118.  
  119.     for (int i = 0; i < 12; i++)
  120.         cout << months[i] << ' ';
  121. }
  122.  
  123. int main()
  124. {
  125.     int n;
  126.     Kid kids[MAX_KIDS];
  127.  
  128.     int months[12];
  129.     fill_n(months, 12, 0);
  130.  
  131.     Read(n, kids);
  132.     countKidsEachMonth(months, n, kids);
  133.  
  134.     //Rikiuojam del to kad jei yra keli vienodai populiarus vardai teks juos pateikti abeceles tvarka
  135.     Sort(n, kids);
  136.     Write(months, n, kids);
  137.  
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement