Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<vector>
- #include<cstdlib>
- #include<iostream>
- #include<string>
- #include<algorithm>
- #include<sstream>
- #include <fstream>
- using namespace std;
- //przy wprowadzaniu danych do pliku nazley pamietac, aby po KAZDYM dac enter
- class Licz;
- class Granica;
- class Zaklad;
- float wczytajLiczbe(void);
- bool wczytajPlik(Zaklad &obj);
- void poLudzku(void); //dane wczytane od uzykownika ze sprawdzeniem bledow
- void poLudzkuzPliku(void);
- void powitanie(void); //powitanie uzytkownika
- void Menu(void); //uzytkownik wybiera, czy dane zostana wczytane z pliku czy sam je poda (kontrola poprawnosci zachowana w drugim przypadku)
- void wyswietlZnaczek(int ileRazy, char jaki);
- ostream &operator<<(ostream &ekran, Granica &g);
- //klasa GRANICE PRZEDZIALOW
- class Granica
- {
- private:
- int dolna;
- int gorna;
- int coIle;
- int ile;
- public:
- friend Licz;
- Granica(int pierwsza, int druga) : dolna(pierwsza), gorna(druga) {}
- Granica(){}
- int getDolna(void);
- int getGorna(void);
- void setDolna(int d) { dolna = d; }
- void setGorna(int g) { gorna = g; }
- void setCoIle(int i) { coIle = i; }
- void setIle(int i) { ile = i; }
- int getCoIle(void) { return coIle; }
- int getIle(void) { return ile; }
- void setIlePrzedzialow(int i);
- };
- int Granica::getDolna(void)
- {
- return dolna;
- }
- int Granica::getGorna(void)
- {
- return gorna;
- }
- void Granica::setIlePrzedzialow(int x)
- {
- ile = x;
- }
- ostream &operator<<(ostream & ekran, Granica &g)
- {
- ekran << g.getDolna() << " - " << g.getGorna();
- return ekran;
- }
- //klasa ZAKLAD
- class Zaklad
- {
- public:
- vector <float> dane;
- public:
- friend bool wczytajPlik(Zaklad &obj);
- friend class Licz;
- Zaklad(void) {}
- void setDane(void);
- void pokazDane(void);
- void sortujDane(void);
- void setVector(vector <float>);
- vector <float> getDane(void);
- };
- void Zaklad::setDane(void)
- {
- cout << "Teraz podasz dane." << endl;
- cout << "Podaj ilosc danych: ";
- int ile;
- cin >> ile;
- for (int i = 0; i < ile; i++)
- {
- dane.push_back(wczytajLiczbe());
- }
- }
- void Zaklad::pokazDane(void)
- {
- for (int i = 0; i < dane.size(); i++)
- {
- cout << dane[i] << endl;
- }
- } //zrobic operator
- void Zaklad::sortujDane(void)
- {
- sort(dane.begin(), dane.end());
- }
- void Zaklad::setVector(vector<float>a)
- {
- dane= a;
- }
- vector <float> Zaklad::getDane(void)
- {
- return dane;
- }
- //klasa LICZ
- class Licz
- {
- public:
- Licz(void) {}
- void liczSrednia(const Zaklad &obj);
- void liczMediana(const Zaklad &obj); //nie chcemy zmieniac
- void liczModalna(const Zaklad &obj);
- void utworzSzeregPrzedzialowy(const Zaklad &obj);
- };
- void Licz::liczSrednia(const Zaklad &obj)
- {
- float suma = 0;
- for (int x = 0; x < obj.dane.size(); x++)
- {
- suma += obj.dane[x];
- }
- cout << "Srednia to: " << (suma / obj.dane.size()) << endl;
- }
- void Licz::liczMediana(const Zaklad &obj)
- {
- if ((obj.dane.size() % 2) == 0) //czy jest parzysta ilosc danych
- {
- cout << "Mediana: " << ((obj.dane[(obj.dane.size() -1) / 2.0] + obj.dane[(obj.dane.size() ) / 2.0]) / 2.0) << endl;
- }
- else // jesli ilosc danych nieparzysta
- {
- cout << "Mediana: " << (obj.dane[obj.dane.size() / 2]) << endl;
- }
- }
- void Licz::liczModalna(const Zaklad &obj) // z mala pomoca http://edu.i-lo.tarnow.pl/inf/utils/010_2010/0407.php
- {
- int wartoscElementu, licznik, powtorka, najczesciej;
- vector <float> tab(obj.dane.size());
- copy(obj.dane.begin(), obj.dane.end(), tab.begin());
- powtorka = 0;
- najczesciej = tab[0] - 1;
- for (int x = 0; x < obj.dane.size() - powtorka; x++)
- {
- wartoscElementu = tab[x];
- if (wartoscElementu != najczesciej)
- {
- licznik = 1;
- for (int p = x + 1; p < obj.dane.size(); p++)
- {
- if (wartoscElementu == tab[p])
- {
- licznik++;
- }
- }
- if (licznik > powtorka)
- {
- powtorka = licznik;
- najczesciej = wartoscElementu;
- }
- }
- }
- cout << "Modalna: " << najczesciej << ", ilosc jej wystapien: " << powtorka << endl;
- }
- void Licz::utworzSzeregPrzedzialowy(const Zaklad &obj) //demo!
- {
- Granica g;
- int help;
- cout << "Podaj granice dolna: ";
- cin >> help;
- g.setDolna(help);
- cout << "Podaj granice gorna: ";
- cin >> help;
- g.setGorna(help);
- cout << "Podaj rozpietosc: ";
- cin >> help;
- g.setCoIle(help);
- cout << "Podaj ilosc przedzialow: ";
- cin >> help;
- g.setIle(help);
- cout << g << endl;
- vector <Granica> graniczka;
- //to powyzej mozesz robic jak chcesz, napisane jest na "byle jak": clasa Granica przechowuje wartosci granicy dolnej i gornej przedzialow jakie poda uzytkownik plus co ile ten przedzial i ile ich ma byc
- //tutaj kod co robi wykres i szereg
- }
- //MAIN--------------------------------------------------------------------------------------------
- int main(void)
- {
- Menu();
- system("PAUSE");
- return 0;
- }
- //wczytanie liczby idiotoOdporne
- float wczytajLiczbe(void)
- {
- bool warunek = true;
- while (warunek)
- {
- cout << "Podaj liczbe: ";
- float danka;
- cin >> danka;
- if (cin.fail())
- {
- cout << "Prosze podac LICZBE" << endl;
- cin.clear(); // czyszczenie bufora!!
- cin.sync(); // dwie razem!!
- }
- else
- {
- warunek = false;
- return danka;
- }
- }
- }
- bool wczytajPlik(Zaklad &obj)
- {
- ifstream liczby("wczyt.txt");
- int x;
- if (!liczby)
- {
- cout << "Nie mozna otworzyc pliku";
- return false;
- }
- else
- {
- while (liczby >> x)
- {
- obj.dane.push_back(x);
- }
- return true;
- }
- liczby.close();
- }
- void poLudzku(void)
- {
- Zaklad z;
- Licz l;
- z.setDane();
- z.sortujDane();
- l.liczMediana(z);
- l.liczModalna(z);
- l.liczSrednia(z);
- //twoja funkcja co robi szereg i wykres
- }
- void poLudzkuzPliku(void)
- {
- Zaklad zakladzik;
- Licz statystyka;
- if (wczytajPlik(zakladzik))
- {
- zakladzik.sortujDane();
- statystyka.liczMediana(zakladzik);
- statystyka.liczModalna(zakladzik);
- statystyka.liczSrednia(zakladzik);
- //tutaj wywolaj funkcje co robi szereg i wykres
- }
- else
- {
- cout << "Cos stalo sie z plikiem, nie mozna go odczytac." << endl;
- }
- }
- void Menu(void)
- {
- int opcja;
- bool warunek = true;
- powitanie();
- while (warunek)
- {
- opcja = wczytajLiczbe();
- if (opcja == 1 || opcja == 2)
- {
- warunek = false;
- switch (opcja)
- {
- case 1: poLudzkuzPliku();
- break;
- case 2: poLudzku();
- break;
- }
- }
- else
- {
- cout << "Podaj liczbe 1 lub 2." << endl;
- }
- }
- }
- void powitanie(void)
- {
- cout << "--------------------STATYSTYKA--------------------" << endl;
- cout << "Program sluzy do obliczania: \nmodalnej, \nmediany, \nsredniej \noraz szeregu rozdzielczego przedzialowego (wykres do pliku)." << endl << endl;
- wyswietlZnaczek(15, 167);
- cout << " MENU ";
- wyswietlZnaczek(15, 167);
- cout << endl << "\nWybierz sposob wprowadzania danych." << endl;
- cout << "1 - dane z plku (wczyt.txt)" << endl << "2 - wprowadzam dane recznie" << endl << endl;
- }
- void wyswietlZnaczek(int ileRazy, char jaki)
- {
- for (int i = 0; i < ileRazy; i++)
- {
- cout << jaki;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement