Advertisement
xTheEc0

1. Klasės sąrašas (Vad 129. psl.)

Feb 24th, 2015
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.30 KB | None | 0 0
  1. /* 1.txt
  2. 3
  3. Pirmasis Petras           *
  4. Antrutė Jurgita           *
  5. Trečiasis Algis           *
  6. 2
  7. Taiklioji Akis            Tikyba
  8. Smalsuolė Marceliukė      Etika
  9. 10
  10. Baravykas Algis           Etika
  11. Baravykaitė Marijona      Tikyba
  12. Lepšius Martynas          Tikyba
  13. Pirmasis Petras           Etika
  14. Lepšytė Barbora           Etika
  15. Eglaitė Ramunė            Etika
  16. Antrutė Jurgita           Tikyba
  17. Liepaitė Rita             Tikyba
  18. Trečiasis Algis           Tikyba
  19. Gaurius Svajūnas          Etika
  20. */
  21.  
  22. #include <iostream>
  23. #include <iomanip>
  24. #include <fstream>
  25. using namespace std;
  26.  
  27. const char duomF[] = "1.txt";
  28. const char rezF[] = "rez1.txt";
  29. const int CMax = 30;
  30. const int CPav = 25;
  31.  
  32. // ----------------------------------------------------------------------------------------------
  33.  
  34. struct Mokinys {
  35.     string pav;     // Pavarde ir vardas
  36.     string dalykas; // Pasirinkto dalyko pavadinimas
  37. };
  38.  
  39. // ----------------------------------------------------------------------------------------------
  40.  
  41. void SkaitytiPav(ifstream &df, Mokinys A[], int &n)
  42. {
  43.     char eil[CPav+1];
  44.     df >> n;
  45.     df.ignore(80, '\n');
  46.     for(int i = 0; i < n; i++)
  47.     {
  48.         df.get(eil, CPav); // Nuskaitomas vardas ir pavarde
  49.         A[i].pav = eil;    // Vardas ir pavarde nukeliami y masyva
  50.         A[i].dalykas = ""; // Dalykas nenurodytas, y masyva nieko nerasome
  51.         df.ignore(80, '\n');
  52.     }
  53. }
  54.  
  55. void SkaitytiKlase(ifstream &df, Mokinys A[], int &n)
  56. {
  57.     char eil[CPav+1];
  58.     df >> n;
  59.     df.ignore(80, '\n');
  60.     for(int i = 0; i < n; i++)
  61.     {
  62.         df.get(eil, CPav);         // Nuskaitomas vardas ir pavarde
  63.         A[i].pav = eil;            // Vardas ir pavarde nukeliami y masyva
  64.         df >> ws;                  // Praleidziami tarpo simboliai
  65.         getline(df, A[i].dalykas); // Nuskaitomas dalyko pavadinimas iki eilutes pabaigos
  66.     }
  67. }
  68.  
  69. void Spausdinti (Mokinys A[], int n, string eil)
  70. {
  71.     ofstream rf(rezF, ios::app); // Pildomas failas
  72.     rf << eil << endl;
  73.     rf << "---------------------------------" << endl;
  74.     rf << "Mokinys                  Dalykas " << endl;
  75.     rf << "---------------------------------" << endl;
  76.     for(int i = 0; i < n; i++) rf << setw(20) << left
  77.     << A[i].pav << " " << A[i].dalykas << endl;
  78.     rf << "---------------------------------" << endl << endl;
  79.     rf.close();
  80.  
  81. }
  82.  
  83. void Trinti(Mokinys B[], int m, Mokinys A[], int &n)
  84. {
  85.     for (int i = 0; i < m; i++)        // Paziurimas salinamuju sarasas
  86.     {
  87.         for (int j = 0; j < n; j++)    // Ieskoma klases sarase
  88.         {
  89.             if (B[i].pav == A[j].pav)  // Lyginamos pavardziu ir vardu eilutes
  90.             {
  91.                 A[j] = A[n-1];   // Salinamos reikesmes vietoje irasome paskutine masyvo reiksme
  92.                 n--;             // Sumazinamas klases saraso reiksmiu skaicius
  93.                 j = n;           // Vidinio ciklo darbas nutraukiamas
  94.             }
  95. }}}
  96.  
  97. void Papildyti(Mokinys C[], int k, Mokinys A[], int &n)
  98. {
  99.     for (int i = 0; i < k; i++)
  100.     {
  101.         A[n] = C[i];
  102.         n++;
  103.     }
  104. }
  105.  
  106. void Rikiuoti(Mokinys A[], int n)
  107. {
  108.     for (int i = 0; i < n; i++)
  109.     {
  110.         for (int j = i+1; j< n; j++)
  111.         {
  112.             if (A[j].pav < A[i].pav)
  113.             {
  114.                 Mokinys sp = A[i];
  115.                 A[i] = A[j];
  116.                 A[j] = sp;
  117.             }
  118. }}}
  119.  
  120. void Atrinkti(Mokinys A[], int n, string dalykas, Mokinys B[], int &m)
  121. {
  122.     m = 0;
  123.     for (int i = 0; i < n; i++)
  124.     {
  125.         if (A[i].dalykas == dalykas)
  126.         {
  127.             B[m] = A[i];
  128.             m++;
  129.         }
  130. }}
  131.  
  132. // ----------------------------------------------------------------------------------------------
  133.  
  134. int main()
  135. {
  136.     Mokinys Klase[CMax]; int n; // Klases mokiniu sarasas
  137.     Mokinys Ate[CMax];   int m; // Isvykusiuju sarasas
  138.     Mokinys Nauji[CMax]; int k; // Naujoku sarasas
  139.  
  140.     ofstream rf(rezF); rf.close();
  141.  
  142.     ifstream df(duomF);
  143.     SkaitytiPav(df, Ate, m);
  144.     SkaitytiKlase(df, Nauji, k);
  145.     SkaitytiKlase(df, Klase, n);
  146.     df.close();
  147.  
  148.     Trinti(Ate, m, Klase, n);
  149.     Papildyti(Nauji, k, Klase, n);
  150.     Rikiuoti(Klase, n);
  151.     Spausdinti(Klase, n, "Klases sarasas");
  152.     Atrinkti(Klase, n, "Etika", Ate, m);
  153.     Spausdinti(Ate, m, "Etika pasirinkusieji mokiniai");
  154.  
  155.     return 0;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement