Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream> // std::
- #include <fstream> // std::ifstream
- #include <vector> // std::vector
- #include <cstdlib> // std::random
- #include <algorithm> // std::sort
- // zlicza liczbe wszystkich odpowiedzi z pliku
- // czyli zwraca, ile jest wszystkich pytan na egzaminie
- int pobierz_liczbe_pytan()
- {
- std::ifstream plik("odp.txt");
- char c;
- int licznik = 0;
- while (plik >> c)
- {
- // std::cout << "Literka: " << c << '\n';
- licznik++;
- }
- plik.close();
- return licznik;
- }
- // funkcja zwraca vector typu <char> z odczytanymi z pliku wartosciami
- // odpowiedzi dla poszczegolnych pytan
- std::vector<char> pobierz_poprawne_odpowiedzi()
- {
- std::ifstream plik("odp.txt");
- std::vector<char> v;
- char c;
- while(plik >> c)
- {
- v.push_back(c);
- }
- plik.close();
- return v;
- }
- // losuje liczbe z przedzialu <min;max)
- int losuj_z_przedzialu(int min, int max)
- {
- return (std::rand() % max) + min;
- }
- // funkcja sprawdza, czy podany vector <v> zawiera w sobie liczbe <num>
- // true - jesli zawiera
- // false - jesli nie zawiera
- bool sprawdz_czy_zawiera(std::vector<int> v, int num)
- {
- // std::cout << "v.size = " << v.size() << '\n';
- for(int i=0; i<v.size(); i++)
- {
- if(v[i] == num)
- {
- return true;
- }
- }
- return false;
- }
- // zwraca vector z wylosowanymi z zakresu, unikalnymi (niepowtarzajacymi sie)
- // liczbami calkowitymi
- std::vector<int> losuj_unikalne_z_przedzialu(int min, int max, int ile)
- {
- std::vector<int> v;
- int ile_wylosowano=0;
- while(ile_wylosowano != ile)
- {
- int wylosowana = losuj_z_przedzialu(min, max);
- // std::cout << "Unikalne losowanie: "<< wylosowana << '\n';
- if (sprawdz_czy_zawiera(v, wylosowana) == true)
- {
- continue;
- }
- else
- {
- // std::cout << "Wylosowano unikalna liczbe: "<< wylosowana << '\n';
- v.push_back(wylosowana);
- ile_wylosowano++;
- }
- }
- return v;
- }
- void print_vector(std::vector<int> v)
- {
- for(int i=0; i<v.size(); i++)
- {
- std::cout << "V: "<< v[i] << '\n';
- }
- }
- char losuj_zla_odpowiedz(char poprawna)
- {
- char odpowiedzi[4] = {'a', 'b', 'c', 'd'};
- while(true)
- {
- int i = std::rand() % 4;
- if(poprawna != odpowiedzi[i])
- return odpowiedzi[i];
- }
- }
- void zapisz_uczestnika(std::vector<char> v)
- {
- std::ofstream plik("uczestnik.txt");
- for(int i=0; i<v.size(); i++)
- {
- plik << v[i] << std::endl;
- }
- plik.close();
- }
- // ----------------------------------------------------------------------------
- // glowny kod
- //
- int main()
- {
- // inicjujemy randomizer ;)
- srand(time(NULL));
- // pobranie liczby wszystkich pytan na egzaminie
- int liczba_pytan = 0;
- liczba_pytan = pobierz_liczbe_pytan();
- int ile_poprawnych = 0;
- std::cout << "Ile poprawnych odpowiedzi ma uzyskac uczestnik: ";
- std::cin >> ile_poprawnych;
- // sprawdzamy, czy dzialanie ma sens
- if(ile_poprawnych > liczba_pytan)
- {
- std::cout << "Liczba poprawnych odpowiedzi nie moze byc wieszka niz liczba pytan!" << '\n';
- exit(1);
- }
- // vector poprawnych odpowiedzi
- std::vector<char> odpowiedzi = pobierz_poprawne_odpowiedzi();
- // vector z numerami (indeksami) wylosowanych poprawnych odpowiedzi
- std::vector<int> unikalne = losuj_unikalne_z_przedzialu(0, liczba_pytan, ile_poprawnych);
- // sortujemy vector rosnΔ co
- std::sort(unikalne.begin(), unikalne.end());
- // print_vector(unikalne);
- std::cout << "----------------------" << '\n';
- std::vector<char> uczestnik;
- int unikalne_iterator = 0;
- for(int i=0; i<liczba_pytan; i++)
- {
- char dobra_odpowiedz = odpowiedzi[i];
- std::cout << i+1 << ". ";
- // std::cout << "i:"<<i<<" unikalne["<< unikalne_iterator << "]:"<<unikalne[unikalne_iterator] << '\n';
- if(i == unikalne[unikalne_iterator])
- {
- // std::cout << "Poprawna odpowiedz: "<< dobra_odpowiedz << '\n';
- std::cout << ">" << dobra_odpowiedz << "<" << '\n';
- unikalne_iterator++;
- uczestnik.push_back(dobra_odpowiedz);
- }
- else
- {
- char zla_odpowiedz = losuj_zla_odpowiedz(dobra_odpowiedz);
- // std::cout << "Zla odpowiedz: "<< zla_odpowiedz << '\n';
- std::cout << zla_odpowiedz << '\n';
- uczestnik.push_back(zla_odpowiedz);
- }
- }
- // zapisz_uczestnika(uczestnik);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement