Advertisement
Guest User

lotek v4

a guest
Mar 20th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <typeinfo>
  4.  
  5. //zilu -  z ilu losujemy (np 49)
  6. //ile (np 6)
  7.  
  8. using namespace std;
  9.  
  10. struct LosowanieD
  11. {
  12.     short numer_losowania;
  13.     char dzien;
  14.     char miesiac;
  15.     short rok;
  16.     char liczby[6];
  17. };
  18.  
  19. struct LosowanieM
  20. {
  21.     short numer_losowania;
  22.     char dzien;
  23.     char miesiac;
  24.     short rok;
  25.     char liczby[5];
  26. };
  27.  
  28.  
  29. //wczytywanie do struktury duzego lotka z pliku
  30. istream &operator>>(istream &wejscie, LosowanieD& l)
  31. {
  32.     char a; //wersja z cin.ignore() lepsza, napisac potem
  33.     int temp;
  34.  
  35.     wejscie >> l.numer_losowania >> a >> temp;//numer spacja dzien
  36.     l.dzien = (char)temp;
  37.  
  38.     wejscie >> a >> temp >> a;//kropka miesiac kropka
  39.     l.miesiac = (char)temp;
  40.  
  41.     wejscie >> l.rok;
  42.  
  43.     for(int i=0; i<5; i++)
  44.     {
  45.         wejscie >> temp >> a;
  46.         l.liczby[i] = (char)temp;
  47.     }
  48.  
  49.     wejscie >> temp;
  50.     l.liczby[5] = (char)temp;
  51.  
  52.     return wejscie;
  53. }
  54.  
  55. //wczytywanie do struktury malego lotka z pliku
  56. istream &operator>>(istream &wejscie, LosowanieM& l)
  57. {
  58.     char a; //wersja z cin.ignore() lepsza, napisac potem
  59.     int temp;
  60.  
  61.     wejscie >> l.numer_losowania >> a >> temp;//numer spacja dzien
  62.     l.dzien = (char)temp;
  63.  
  64.     wejscie >> a >> temp >> a;//kropka miesiac kropka
  65.     l.miesiac = (char)temp;
  66.  
  67.     wejscie >> l.rok;
  68.  
  69.     for(int i=0; i<4; i++)
  70.     {
  71.         wejscie >> temp >> a;
  72.         l.liczby[i] = (char)temp;
  73.     }
  74.  
  75.     wejscie >> temp;
  76.     l.liczby[4] = (char)temp;
  77.  
  78.     return wejscie;
  79. }
  80.  
  81. //pokazywanie struktury duzego lotka
  82. void pokazD(LosowanieD& l)
  83. {
  84.     cout << l.numer_losowania << ". "
  85.          << (int)l.dzien << '.'
  86.          << (int)l.miesiac << '.'
  87.          << (int)l.rok << ' ';
  88.  
  89.     for(int i=0; i<6; i++)
  90.     {
  91.         cout << (int)l.liczby[i] << (i<5?",":"");
  92.     }
  93.  
  94.     cout << endl;
  95. }
  96.  
  97. ////////////////////////////////////
  98.  
  99. template<class T>
  100. class LotekS
  101. {
  102.     bool ok;
  103.     fstream bin;
  104.     short Krotnosc[51];
  105.     short ile;
  106.     short zilu;
  107.     string nazwa;
  108.  
  109.     //wywolywane tylko w konstruktorze
  110.     int zapis_binarny(string str_in)
  111.     {
  112.         fstream dane_in(str_in.c_str(), ios::in);
  113.         fstream dane_out(nazwa.c_str(), ios::out | ios::binary);
  114.         T temp;
  115.         int i=0;
  116.  
  117.         while(dane_in >> temp)
  118.         {
  119.             dane_out.write(reinterpret_cast<char*>(&temp), sizeof(T));
  120.             i++;
  121.         }
  122.  
  123.         dane_in.close();
  124.         dane_out.close();
  125.         return i;
  126.     }
  127.  
  128. public:
  129.     LotekS(short ile, short zilu, string str="")
  130.     {
  131.         if(!str.empty())
  132.         {
  133.             nazwa = str.substr(0, 8) + ".dat";
  134.             cout << "Przepisano " << zapis_binarny(str) << " rekordow do pliku " << nazwa << endl;
  135.         }
  136.  
  137.         bin.open(nazwa.c_str(), ios::in | ios::binary);
  138.         ok = !bin.fail();
  139.  
  140.         for(int i=0; i<51; i++)
  141.             Krotnosc[i] = 0;
  142.     }
  143.  
  144.     ~LotekS()
  145.     {
  146.         bin.close();
  147.     }
  148.  
  149.     bool Niepusty() const
  150.     {
  151.         return ok;
  152.     }
  153.  
  154.     void TablicaKrotnosc()
  155.     {
  156.         bin.clear();
  157.         bin.seekg(0); //na poczatek pliku
  158.         T temp;
  159.  
  160.         while(!bin.eof())
  161.         {
  162.             bin.read((char*)&temp, sizeof(T));
  163.  
  164.  
  165.             for(int i=0; i<ile; i++)
  166.                 //iteracja po liczbach struktury i ich zliczanie
  167.  
  168.             //pokazD(temp);
  169.         }
  170.  
  171.     }
  172.  
  173.  
  174. };
  175.  
  176. template <class T>
  177. void LotekS<T>::TablicaKrotnosc()
  178. {
  179.     if(ok)
  180.     {
  181.         if(Krotnosc[0] == 0)
  182.         {
  183.             T los;
  184.             bin.clear();
  185.             bin.seekg(0);
  186.             while(bin.read(reinterpret_cast<char*>(los), sizeof(T)))
  187.             {
  188.                 for(int i=0; i<ile; ++i)
  189.                 {
  190.                     Krotnosc[los.liczby[i]]++;
  191.                 }
  192.             }
  193.             bin.clear()
  194.         }
  195.     }
  196. }
  197.  
  198.  
  199.  
  200.  
  201. int main()
  202. {
  203.     //cout << "Przeczytano " << zapiszBin() << " rekordow" << endl;
  204.     LotekS<LosowanieD> los(6, 49, "Duzy_Lotek.txt");
  205.     los.TablicaKrotnosc();
  206.     //cout << zapiszBin();
  207.  
  208.     return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement