Advertisement
Guest User

Untitled

a guest
Mar 1st, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.94 KB | None | 0 0
  1. #include<vector>
  2. #include<cstdlib>
  3. #include<iostream>
  4. #include<string>
  5. #include<algorithm>
  6. #include<sstream>
  7. #include <fstream>
  8. using namespace std;
  9.  
  10. //przy wprowadzaniu danych do pliku nazley pamietac, aby po KAZDYM dac enter
  11.  
  12. class Licz;
  13. class Granica;
  14. class Zaklad;
  15.  
  16. float wczytajLiczbe(void);
  17. bool wczytajPlik(Zaklad &obj);
  18. void poLudzku(void); //dane wczytane od uzykownika ze sprawdzeniem bledow
  19. void poLudzkuzPliku(void);
  20. void powitanie(void); //powitanie uzytkownika
  21. void Menu(void); //uzytkownik wybiera, czy dane zostana wczytane z pliku czy sam je poda (kontrola poprawnosci zachowana w drugim przypadku)
  22. void wyswietlZnaczek(int ileRazy, char jaki);
  23. ostream &operator<<(ostream &ekran, Granica &g);
  24.  
  25. //klasa GRANICE PRZEDZIALOW
  26. class Granica
  27. {
  28. private:
  29.     int dolna;
  30.     int gorna;
  31.     int coIle;
  32.     int ile;
  33. public:    
  34.     friend Licz;
  35.     Granica(int pierwsza, int druga) : dolna(pierwsza), gorna(druga) {}
  36.     Granica(){}
  37.     int getDolna(void);
  38.     int getGorna(void);
  39.     void setDolna(int d) { dolna = d; }
  40.     void setGorna(int g) { gorna = g; }
  41.     void setCoIle(int i) { coIle = i; }
  42.     void setIle(int i) { ile = i; }
  43.     int getCoIle(void) { return coIle; }
  44.     int getIle(void) { return ile; }
  45.     void setIlePrzedzialow(int i);
  46. };
  47. int Granica::getDolna(void)
  48. {
  49.     return dolna;
  50. }
  51.  
  52. int Granica::getGorna(void)
  53. {
  54.     return gorna;
  55. }
  56.  
  57. void Granica::setIlePrzedzialow(int x)
  58. {
  59.     ile = x;
  60. }
  61.  
  62. ostream &operator<<(ostream & ekran, Granica &g)
  63. {
  64.     ekran << g.getDolna() << " - " << g.getGorna();
  65.     return ekran;
  66. }
  67.  
  68.  
  69. //klasa ZAKLAD
  70. class Zaklad
  71. {
  72. public:
  73.     vector <float> dane;
  74. public:
  75.     friend bool wczytajPlik(Zaklad &obj);
  76.     friend class Licz;
  77.     Zaklad(void) {}
  78.     void setDane(void);
  79.     void pokazDane(void);
  80.     void sortujDane(void);
  81.     void setVector(vector <float>);
  82.     vector <float> getDane(void);
  83. };
  84.  
  85. void Zaklad::setDane(void)
  86. {
  87.     cout << "Teraz podasz dane." << endl;
  88.     cout << "Podaj ilosc danych: ";
  89.     int ile;
  90.     cin >> ile;
  91.  
  92.     for (int i = 0; i < ile; i++)
  93.     {      
  94.         dane.push_back(wczytajLiczbe());
  95.     }  
  96. }
  97.  
  98. void Zaklad::pokazDane(void)
  99. {
  100.     for (int i = 0; i < dane.size(); i++)
  101.     {
  102.         cout << dane[i] << endl;
  103.     }
  104. } //zrobic operator
  105.  
  106. void Zaklad::sortujDane(void)
  107. {  
  108.     sort(dane.begin(), dane.end());
  109. }
  110.  
  111. void Zaklad::setVector(vector<float>a)
  112. {
  113.     dane= a;
  114. }
  115.  
  116. vector <float> Zaklad::getDane(void)
  117. {
  118.     return dane;
  119. }
  120.  
  121. //klasa LICZ
  122. class Licz
  123. {
  124. public:
  125.     Licz(void) {}
  126.     void liczSrednia(const Zaklad &obj);
  127.     void liczMediana(const Zaklad &obj); //nie chcemy zmieniac
  128.     void liczModalna(const Zaklad &obj);
  129.     void utworzSzeregPrzedzialowy(const Zaklad &obj);
  130. };
  131.  
  132. void Licz::liczSrednia(const Zaklad &obj)
  133. {
  134.     float suma = 0;
  135.  
  136.     for (int x = 0; x < obj.dane.size(); x++)
  137.     {
  138.         suma += obj.dane[x];
  139.     }
  140.     cout << "Srednia to: " << (suma / obj.dane.size()) << endl;
  141. }
  142.  
  143.  
  144. void Licz::liczMediana(const Zaklad &obj)
  145. {
  146.     if ((obj.dane.size() % 2) == 0) //czy jest parzysta ilosc danych
  147.     {      
  148.         cout << "Mediana: " << ((obj.dane[(obj.dane.size() -1) / 2.0] + obj.dane[(obj.dane.size() ) / 2.0]) / 2.0) << endl;
  149.     }
  150.     else // jesli ilosc danych nieparzysta
  151.     {
  152.         cout << "Mediana: " << (obj.dane[obj.dane.size() / 2]) << endl;
  153.     }
  154. }
  155.  
  156. void Licz::liczModalna(const Zaklad &obj) // z mala pomoca http://edu.i-lo.tarnow.pl/inf/utils/010_2010/0407.php
  157. {      
  158.     int wartoscElementu, licznik, powtorka, najczesciej;
  159.  
  160.     vector <float> tab(obj.dane.size());
  161.     copy(obj.dane.begin(), obj.dane.end(), tab.begin());
  162.  
  163.     powtorka = 0;
  164.     najczesciej = tab[0] - 1;
  165.  
  166.     for (int x = 0; x < obj.dane.size() - powtorka; x++)
  167.     {
  168.         wartoscElementu = tab[x];
  169.  
  170.         if (wartoscElementu != najczesciej)
  171.         {
  172.             licznik = 1;
  173.  
  174.             for (int p = x + 1; p < obj.dane.size(); p++)
  175.             {
  176.                 if (wartoscElementu == tab[p])
  177.                 {
  178.                     licznik++;
  179.                 }
  180.             }
  181.             if (licznik > powtorka)
  182.             {
  183.                 powtorka = licznik;
  184.                 najczesciej = wartoscElementu;
  185.             }
  186.         }
  187.     }
  188.     cout << "Modalna: " << najczesciej << ", ilosc jej wystapien: " << powtorka << endl;       
  189. }
  190.  
  191. void Licz::utworzSzeregPrzedzialowy(const Zaklad &obj) //demo!
  192. {
  193.     Granica g;
  194.     int help;
  195.     cout << "Podaj granice dolna: ";
  196.     cin >> help;
  197.     g.setDolna(help);
  198.     cout << "Podaj granice gorna: ";
  199.     cin >> help;
  200.     g.setGorna(help);
  201.     cout << "Podaj rozpietosc: ";
  202.     cin >> help;
  203.     g.setCoIle(help);
  204.     cout << "Podaj ilosc przedzialow: ";
  205.     cin >> help;
  206.     g.setIle(help);
  207.  
  208.     cout << g << endl;
  209.  
  210.     vector <Granica> graniczka;
  211.  
  212.     //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
  213.     //tutaj kod co robi wykres i szereg
  214.  
  215. }
  216.    
  217.  
  218. //MAIN--------------------------------------------------------------------------------------------
  219. int main(void)
  220. {      
  221.     Menu();
  222.  
  223.     system("PAUSE");
  224.     return 0;
  225. }
  226.  
  227.  
  228. //wczytanie liczby idiotoOdporne
  229. float wczytajLiczbe(void)
  230. {
  231.     bool warunek = true;
  232.  
  233.     while (warunek)
  234.     {
  235.         cout << "Podaj liczbe: ";
  236.         float danka;
  237.         cin >> danka;
  238.    
  239.         if (cin.fail())
  240.         {
  241.             cout << "Prosze podac LICZBE" << endl;
  242.             cin.clear();        // czyszczenie bufora!!
  243.             cin.sync();         // dwie razem!!
  244.         }
  245.         else
  246.         {
  247.             warunek = false;
  248.             return danka;
  249.         }
  250.     }
  251. }
  252.  
  253. bool wczytajPlik(Zaklad &obj)
  254. {
  255.     ifstream liczby("wczyt.txt");
  256.     int x;
  257.  
  258.     if (!liczby)
  259.     {
  260.         cout << "Nie mozna otworzyc pliku";    
  261.         return false;
  262.     }
  263.     else
  264.     {      
  265.         while (liczby >> x)
  266.         {
  267.             obj.dane.push_back(x);         
  268.         }
  269.         return true;
  270.     }
  271.     liczby.close();
  272. }
  273.  
  274. void poLudzku(void)
  275. {
  276.     Zaklad z;
  277.     Licz l;
  278.     z.setDane();
  279.     z.sortujDane();
  280.     l.liczMediana(z);
  281.     l.liczModalna(z);
  282.     l.liczSrednia(z);
  283.     //twoja funkcja co robi szereg i wykres
  284. }
  285.  
  286. void poLudzkuzPliku(void)
  287. {
  288.     Zaklad zakladzik;
  289.     Licz statystyka;
  290.  
  291.     if (wczytajPlik(zakladzik))
  292.     {
  293.         zakladzik.sortujDane();
  294.         statystyka.liczMediana(zakladzik);
  295.         statystyka.liczModalna(zakladzik);
  296.         statystyka.liczSrednia(zakladzik);
  297.         //tutaj wywolaj funkcje co robi szereg i wykres
  298.     }
  299.     else
  300.     {
  301.         cout << "Cos stalo sie z plikiem, nie mozna go odczytac." << endl;
  302.     }
  303. }
  304.  
  305. void Menu(void)
  306. {
  307.     int opcja;
  308.     bool warunek = true;
  309.     powitanie();
  310.  
  311.     while (warunek)
  312.     {
  313.         opcja = wczytajLiczbe();
  314.         if (opcja == 1 || opcja == 2)
  315.         {
  316.             warunek = false;
  317.  
  318.             switch (opcja)
  319.             {
  320.                 case 1: poLudzkuzPliku();
  321.                     break;
  322.                 case 2: poLudzku();
  323.                     break;
  324.             }
  325.         }
  326.         else
  327.         {
  328.             cout << "Podaj liczbe 1 lub 2." << endl;
  329.         }
  330.     }
  331. }
  332.  
  333. void powitanie(void)
  334. {
  335.     cout << "--------------------STATYSTYKA--------------------" << endl;
  336.     cout << "Program sluzy do obliczania: \nmodalnej, \nmediany, \nsredniej \noraz szeregu rozdzielczego przedzialowego (wykres do pliku)." << endl << endl;
  337.     wyswietlZnaczek(15, 167);
  338.     cout << "  MENU  ";
  339.     wyswietlZnaczek(15, 167);
  340.     cout << endl << "\nWybierz sposob wprowadzania danych." << endl;
  341.     cout << "1 - dane z plku (wczyt.txt)" << endl << "2 - wprowadzam dane recznie" << endl << endl;
  342. }
  343.  
  344. void wyswietlZnaczek(int ileRazy, char jaki)
  345. {
  346.     for (int i = 0; i < ileRazy; i++)
  347.     {
  348.         cout << jaki;
  349.     }
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement