Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <typeinfo>
- //zilu - z ilu losujemy (np 49)
- //ile (np 6)
- using namespace std;
- struct LosowanieD
- {
- short numer_losowania;
- char dzien;
- char miesiac;
- short rok;
- char liczby[6];
- };
- struct LosowanieM
- {
- short numer_losowania;
- char dzien;
- char miesiac;
- short rok;
- char liczby[5];
- };
- //wczytywanie do struktury duzego lotka z pliku
- istream &operator>>(istream &wejscie, LosowanieD& l)
- {
- char a; //wersja z cin.ignore() lepsza, napisac potem
- int temp;
- wejscie >> l.numer_losowania >> a >> temp;//numer spacja dzien
- l.dzien = (char)temp;
- wejscie >> a >> temp >> a;//kropka miesiac kropka
- l.miesiac = (char)temp;
- wejscie >> l.rok;
- for(int i=0; i<5; i++)
- {
- wejscie >> temp >> a;
- l.liczby[i] = (char)temp;
- }
- wejscie >> temp;
- l.liczby[5] = (char)temp;
- return wejscie;
- }
- //wczytywanie do struktury malego lotka z pliku
- istream &operator>>(istream &wejscie, LosowanieM& l)
- {
- char a; //wersja z cin.ignore() lepsza, napisac potem
- int temp;
- wejscie >> l.numer_losowania >> a >> temp;//numer spacja dzien
- l.dzien = (char)temp;
- wejscie >> a >> temp >> a;//kropka miesiac kropka
- l.miesiac = (char)temp;
- wejscie >> l.rok;
- for(int i=0; i<4; i++)
- {
- wejscie >> temp >> a;
- l.liczby[i] = (char)temp;
- }
- wejscie >> temp;
- l.liczby[4] = (char)temp;
- return wejscie;
- }
- //pokazywanie struktury duzego lotka
- void pokazD(LosowanieD& l)
- {
- cout << l.numer_losowania << ". "
- << (int)l.dzien << '.'
- << (int)l.miesiac << '.'
- << (int)l.rok << ' ';
- for(int i=0; i<6; i++)
- {
- cout << (int)l.liczby[i] << (i<5?",":"");
- }
- cout << endl;
- }
- ////////////////////////////////////
- template<class T>
- class LotekS
- {
- bool ok;
- fstream bin;
- short Krotnosc[51];
- short ile;
- short zilu;
- string nazwa;
- //wywolywane tylko w konstruktorze
- int zapis_binarny(string str_in)
- {
- fstream dane_in(str_in.c_str(), ios::in);
- fstream dane_out(nazwa.c_str(), ios::out | ios::binary);
- T temp;
- int i=0;
- while(dane_in >> temp)
- {
- dane_out.write(reinterpret_cast<char*>(&temp), sizeof(T));
- i++;
- }
- dane_in.close();
- dane_out.close();
- return i;
- }
- public:
- LotekS(short ile, short zilu, string str="")
- {
- if(!str.empty())
- {
- nazwa = str.substr(0, 8) + ".dat";
- cout << "Przepisano " << zapis_binarny(str) << " rekordow do pliku " << nazwa << endl;
- }
- bin.open(nazwa.c_str(), ios::in | ios::binary);
- ok = !bin.fail();
- for(int i=0; i<51; i++)
- Krotnosc[i] = 0;
- }
- ~LotekS()
- {
- bin.close();
- }
- bool Niepusty() const
- {
- return ok;
- }
- void TablicaKrotnosc()
- {
- bin.clear();
- bin.seekg(0); //na poczatek pliku
- T temp;
- while(!bin.eof())
- {
- bin.read((char*)&temp, sizeof(T));
- for(int i=0; i<ile; i++)
- //iteracja po liczbach struktury i ich zliczanie
- //pokazD(temp);
- }
- }
- };
- template <class T>
- void LotekS<T>::TablicaKrotnosc()
- {
- if(ok)
- {
- if(Krotnosc[0] == 0)
- {
- T los;
- bin.clear();
- bin.seekg(0);
- while(bin.read(reinterpret_cast<char*>(los), sizeof(T)))
- {
- for(int i=0; i<ile; ++i)
- {
- Krotnosc[los.liczby[i]]++;
- }
- }
- bin.clear()
- }
- }
- }
- int main()
- {
- //cout << "Przeczytano " << zapiszBin() << " rekordow" << endl;
- LotekS<LosowanieD> los(6, 49, "Duzy_Lotek.txt");
- los.TablicaKrotnosc();
- //cout << zapiszBin();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement