Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.64 KB | None | 0 0
  1. /* W22 STATYCZNE DANE SKLADOWE
  2. Statyczne zmienne skladowe i statyczne metody sa wspoluzytkowane
  3. przez wszystkie egzemplarze obiektow klasy ( naleza do calej klasy,
  4. a nie tylko do pojedynczego obiektu ).
  5.   dana statyczna to kompromis pomiedzy  globalna  a  skladowa
  6. Przyklad W22:
  7. oblicza ile obiektow klasy zostalo utworzonych
  8.   (modyfikacja statycznej zmiennej - static int ilosc),
  9. zmienia dzialanie zwyklej metody biegnij()  -  blokuje bieg psa
  10.       poprzez prywatna zmienna statyczna - static int blokada
  11.       i statyczna metode -                 static void przelacz()
  12.  
  13. */
  14. #include "moj_iost.h"
  15. #include <string.h>
  16. class Pies
  17. {
  18.      double wys;
  19.      char   imie[10];
  20.      static int blokada; // prywatna zmienna statyczna
  21.   public:
  22.      int nr_start;       //  nr startowy psa
  23.      static int  ilosc;  //  publiczna zmienna statyczna
  24.      static int daj_blokade(void)
  25.      {              //  statyczny akcesor do prywatnej zmiennej statycznej
  26.             return blokada;
  27.      }
  28.      static void przelacz(void) // statyczna funkcja w dla zmiennej statycznej
  29.      {                           cout<< "Przelaczenie\n";
  30.             blokada = ! blokada;
  31.      }
  32.      void biegnij(void);
  33.      double daj_wys(void){return wys; };
  34.      char * daj_imie(void){return imie; };
  35.      Pies(const char * tekst, double h=0, int nr_start=-1 ){// konstruktor zliczajacy tworzone obiekty
  36.          strcpy(imie,tekst);
  37.          wys=h;
  38.          if(h > 0)
  39.          {
  40.           ilosc++;
  41.         }        
  42.          this->nr_start=nr_start;
  43.       }
  44.      ~Pies() {             // destruktor  cout << "Destructor " << imie<<" \n";
  45.        if(wys > 0)
  46.        {
  47.          ilosc--;          // zmnieszajacy jawnie iloscc obiektow  
  48.         }        
  49.           }
  50.       void wyswietl()
  51.       {
  52.         cout << nr_start << " " << daj_imie() << " " << daj_wys() << "\n";
  53.       }    
  54.       static void lista(int max_psow, Pies **list, char * komunikat)
  55.       {
  56.             cout << "Ilosc " << Pies::ilosc << " psow " << komunikat << "\n";
  57.  
  58.           cout << "Nr imie wys\n----------\n";
  59.  
  60.           for(int i = 0; i <= max_psow; i++)
  61.           {
  62.             if(list[i] == NULL) continue;
  63.               list[i]->wyswietl();
  64.           }  
  65.          
  66.           cout << "\n";
  67.       }    
  68.  
  69. };
  70. void Pies::biegnij(void) {
  71.       cout<<"Pies " << imie ;
  72.       if(!blokada) cout <<" >>>> Biegnie \n";
  73.       else         cout <<" !!!! Nie moge biegnac bo nie mam nog\n";
  74.     }
  75. //Definicje i inicjalizacje zmiennych statycznych
  76. int  Pies::blokada=1;
  77. int  Pies::ilosc;              // domyslnie inicjowana wart. zero
  78.  
  79.  
  80.   static const char * ITEKST[20]={"Azor0","Asik1","Azax2","Bari3","Reks4",
  81.         "Maks5","Hera6","Dona7","Figa8","Mona9"};
  82.        
  83. int main()
  84. {
  85.   int max_psow = 7;
  86.  
  87.   Pies *list[max_psow];
  88.  
  89.   for(int i = 0; i <= max_psow; i++)
  90.   {
  91.        list[i] = new Pies(ITEKST[i], 3*(10+i%6-1), 0);
  92.   }    
  93.  
  94.   Pies::lista(max_psow, list, "zgloszonych");
  95.  
  96.   int nrst = 100;
  97.   for(int i = 0; i <= max_psow; i++)
  98.   {
  99.         if(list[i]->daj_wys() > 35)
  100.         {
  101.             cout << "niezakwalifikowany " << list[i]->daj_imie() << " wys. " << list[i]->daj_wys() << " > 35cm\n";
  102.             delete list[i];
  103.             list[i] = NULL;
  104.            
  105.         }    
  106.         else
  107.         {
  108.             list[i]->nr_start = nrst;
  109.             nrst++;  
  110.         }    
  111.   }    
  112.   cout << "\n";
  113.  
  114.   Pies::lista(max_psow, list, "zakwalifikowanych");
  115.  
  116.   for(int i = 0; i <= max_psow; i++)
  117.   {
  118.       if(list[i] == NULL)
  119.       {
  120.           list[i] = new Pies("Spozniak", 32, nrst);
  121.         break;  
  122.       }    
  123.   }  
  124.  
  125.   Pies::lista(max_psow, list, "startujacych");
  126.  
  127.   stop();
  128.   return 0;
  129. }
  130. /*  Wyniki
  131.  W22 STATYCZNE DANE SKLADOWE
  132.  dane:ilosc,blokada i funkcje:przelacz,daj_blokade
  133.  
  134.  Poczatkowe wart. w klasie Pies:
  135.    ilosc , blokada
  136.    0,        1
  137. Deklaracja i konstrukcja trzech obiektow
  138.   Ilosc ( zm. statyczna ) kolejno widziana przez
  139.   obiekty Azora, Asika i w klasie Pies
  140.       3,        3,        3
  141. Pies Azor !!!! Nie moge biegnac
  142. Przelaczenie
  143.     blokada widziana przez Azora: 0
  144. Pies Azor >>>> Biegnie
  145. Pies Asik >>>> Biegnie
  146. Przelaczenie
  147.   blokada widziana np przez Azorka 1
  148.   blokada widziana np przez psy 1
  149. Pies Azor !!!! Nie moge biegnac
  150.   Nacisnij Enter
  151. */
  152.  
  153. /* --------- ZADANIE Z22a--- WYSCIGI PSOW ----------------------------------
  154.   1.  Zmodyfikuj konstruktor dla psa domyslnie przyjmujacy wys=0, nr_start = -1
  155.     i z inkrementowana iloscia dla wys wiekszej od  0.
  156.   2.  Utworz psa sedziego o imieniu "Kalosz" i domyslnej wys. =0,
  157.      ktory nie pozwieksza ilosci zawodnikow
  158.   3.  Zdefiniuj na stercie (oper. new) tablice wskaznikow dla wszystkich
  159.      zgloszonych  do zawodow psow:  pPies[i] dla i=0, ..., max_psow=7
  160.   4.  Utworz tablice psow wprowadzajac konstruktorem obliczona wysokosc
  161.     kazdego psa = 3*(10+i%6-1) i kopiujac imie z ponizszej tablicy
  162.     static char * ITEKST[20]={"Azor0","Asik1","Azax2","Bari3","Reks4",
  163.         "Maks5","Hera6","Dona7","Figa8","Mona9"};
  164.   5. Wydrukuj ilosc i tabele z naglowkiem "psow zgloszonych" np:
  165.      cout << "\n Ilosc "<< ...ilosc... <<"  psow zgloszonych: \n";
  166.      cout << " Nr  imie   wys  \n --------------------\n";
  167.   6. Utworz grupe startujacych psow, ktorych wysokosc jest mniejsza od 35 cm
  168.       przydzielajac im kolejne nr_start od 100, usuwajac niezakwalifikowanych,
  169.       aktualizujac ilosc startujacych i drukujac imie psa i przyczyne niezakwali-
  170.       fikowania w postaci:   cout << "\n niezakwalifikowany "<< ..imie... <<
  171.             " wys. " << ...wys... << " > 35 cm ";
  172.   7. Wydrukuj zaktualizowana ilosc i tabele  psow zakwalifikowanych:
  173.   8. Wprowadz na pierwsze wolne pole startowe nowego psa: "Spozniak" wys=20 cm
  174.     z opisem  cout << "\n Wprowadzenie spoznialskiego ";
  175.   9. Wydrukuj liste psow w tabeli z naglowkiem "psow startujacych"
  176.  10. Utworz funkcje drukujaca tabele psow wg pkt 5, 7 i 9 wolana w postaci:
  177.       Pies::Wydruk(pPies, ... ) z odpowiednim aktualnym opisem (patrz przyklad )
  178.  
  179. /*  Zadanie 22b Napisz program, ktory obsluzy w tabeli obiekty
  180.     w programie wg Zad15 i Zad16
  181. */
  182.  
  183. /* =============== WYNIKI  Zad Z22  WYSCIGI PSOW =======================
  184.  Ilosc 8  psow  zgloszonych
  185. Nr imie  wys
  186. -----------------
  187. 0 Azor0 30
  188. 0 Asik1 33
  189. 0 Azax2 36
  190. 0 Bari3 39
  191. 0 Reks4 42
  192. 0 Maks5 45
  193. 0 Hera6 30
  194. 0 Dona7 30
  195.  
  196.  niezakwalifikowany Azax2 wys. 36
  197.  niezakwalifikowany Bari3 wys. 39
  198.  niezakwalifikowany Reks4 wys. 42
  199.  niezakwalifikowany Maks5 wys. 45
  200.  
  201.  Ilosc 4  psow zakwalifikowanych
  202. Nr imie  wys
  203. -----------------
  204. 100 Azor0 30
  205. 101 Asik1 33
  206. 102 Hera6 30
  207. 103 Dona7 33
  208.  
  209.  Wprowadzenie spoznialskiego
  210.  Ilosc 5  psow  startujacych
  211. Nr imie  wys
  212. -----------------
  213. 100 Azor0 30
  214. 101 Asik1 33
  215. 104 Spozniak 32
  216. 102 Hera6 30
  217. 103 Dona7 33
  218. */
  219. /*  Zadanie 22b Napisz program, ktory obsluzy w tabeli obiekty
  220. w programie wg Zad15 lub Zad16
  221. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement