Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.05 KB | None | 0 0
  1. #include<iostream>
  2. #include "stdafx.h"
  3. #include "Symbol.h"
  4. using namespace std;
  5.  
  6.  
  7. /**********************/
  8. /** DEFINICJE TABLIC **/
  9. /**********************/
  10. Symbol TablicaDodawania[5][5] = { { e,a,b,c,d },
  11. { a,d,e,b,c },
  12. { b,e,c,d,a },
  13. { c,b,d,a,e },
  14. { d,c,a,e,b } };
  15.  
  16. Symbol TablicaMnozen[5][5] = { { e,e,e,e,e },
  17. { e,a,b,c,d },
  18. { e,b,a,d,c },
  19. { e,c,d,b,a },
  20. { e,d,c,a,b } };
  21. /***************/
  22. /** DODAWANIE **/
  23. /***************/
  24. Symbol Dodaj(Symbol y, Symbol x) //Funkcja typu symbol obsługująca dodawanie symboli
  25. {
  26.     return TablicaDodawania[y][x];
  27. }
  28. Symbol operator + (Symbol y, Symbol x) //przeciazenie operator dodawania
  29. {
  30.     return TablicaDodawania[y][x];
  31. }
  32. /**************/
  33. /** MNOZENIE **/
  34. /**************/
  35. Symbol Mnoz(Symbol y, Symbol x) //Funkcja typu symbol obsługująca mnozenie symboli
  36. {
  37.     return TablicaMnozen[y][x];
  38. }
  39. Symbol operator * (Symbol y, Symbol x) //przeciazenie operator mnozenia
  40. {
  41.     return TablicaMnozen[y][x];
  42. }
  43. /*****************/
  44. /** ODEJMOWANIE **/
  45. /*****************/
  46. Symbol Odejmij(Symbol y, Symbol x) //Funkcja typu symbol obsługująca odejmowanie symboli
  47. {
  48.     x = Przeciwny(x);
  49.     return TablicaDodawania[y][x];
  50. }
  51.  
  52. Symbol operator - (Symbol y, Symbol x) //przeciazenie operator odejmowania
  53. {
  54.     x = Przeciwny(x);
  55.     return TablicaDodawania[y][x];
  56. }
  57.  
  58. /***************/
  59. /** DZIELENIE **/
  60. /***************/
  61. Symbol Dziel(Symbol y, Symbol x) //Funkcja typu symbol obsługująca dzielenie symboli
  62. {
  63.     if (x != e) // drugi argument musi byc rozny od 0
  64.     {
  65.         x = Przeciwny(x);
  66.         return TablicaMnozen[y][x];
  67.     }
  68.     else
  69.     {
  70.         cerr << "Nie dzielimy przez 0" << endl;
  71.         return e;
  72.     }
  73. }
  74.  
  75. Symbol operator / (Symbol y, Symbol x) //przeciazenie operator dzielenia
  76. {
  77.     if (x != e) // drugi argument musibyc rozny od 0
  78.     {
  79.         x = Przeciwny(x);
  80.         return TablicaMnozen[y][x];
  81.     }
  82.     else
  83.         cerr << "Nie dzielimy przez 0" << endl;
  84.     return e;
  85. }
  86.  
  87. /*****************/
  88. /** POTEGOWANIE **/
  89. /*****************/
  90. Symbol Poteguj(Symbol y, int n) //Funkcja typu symbol obsługująca potegowanie symboli
  91. {
  92.     Symbol wynik = y;
  93.     if (n <= 0)
  94.     {
  95.         cerr << "Bledna wartosc potegi" << endl;
  96.         return e;
  97.     }
  98.     else
  99.     {
  100.         for (int i = 1; i<n; i++)
  101.         {
  102.             wynik = Mnoz(y, wynik);
  103.         }
  104.     }
  105.     return wynik;
  106. }
  107.  
  108. Symbol operator ^ (Symbol y, int n) //przeciazenie operator potegowania
  109. {
  110.     return Poteguj(y, n);
  111. }
  112.  
  113. /********************************/
  114. /** ZAMIANA NA PRZECIWY SYMBOL **/
  115. /********************************/
  116. Symbol Przeciwny(Symbol y)  // algorytm zamieniania znaku na przeciwny ( to działa tak wysylamy Znak do funkcji i szukamy drugiego znaku dla ktorego ich suma rowna sie 0, i zwracamy drugi znak )
  117. {
  118.     Symbol tymczasowy; //tworzy tymczasowa zmienna do porownywania wartosci
  119.     for (int i = 0; i<5; i++) //wykonaj sie 5 razy
  120.     {
  121.         tymczasowy = Dodaj(y, TabSymboli[i]); //Jezeli Suma znaku wprowadzonego i ktoregokolwiek z tablicy bedzie rowna E=0 to znaczy ze ten znak jest znakiem przeciwnym
  122.         if (tymczasowy == e) // e = 0 bo jest pierwsze w tablity typu wyliczeniowego enum Symbol { e, a, b, c, d, }; domyslnie pierwszy argument ma wartosc 0 kolejny 1 itp..
  123.             return TabSymboli[i]; //zwraca symbol przeciwny
  124.     }
  125.     return e;
  126. }
  127.  
  128. /********************************************************/
  129. /**  Definicje przeciazen operatorow Wyjscia i Wejscia **/ // ten kawalek kodu sluzy do obslugi wpisywania i wyswietlania obiektow typu Symbol
  130. /********************************************************/
  131.  
  132. ostream & operator << (ostream & Wyjscie , const Symbol & s) // pozwala na operacje Symbol x;  cout << x
  133. {
  134. char znak;
  135. znak = TabCharow[s];
  136. Wyjscie << znak;
  137. return Wyjscie;
  138. }
  139.  
  140. istream & operator >> (istream &Wejscie, Symbol &s)  // pozwala na operacje Symbol x;  cin >> x
  141. {
  142.     char znak;
  143.     Wejscie >> znak;
  144.     switch (znak)
  145.     {
  146.         case 'a':
  147.         {
  148.             s = a;
  149.             break;
  150.         }
  151.         case 'e':
  152.         {
  153.             s = e;
  154.             break;
  155.         }
  156.         case 'b':
  157.         {
  158.             s = b;
  159.             break;
  160.         }
  161.         case 'c':
  162.         {
  163.             s = c;
  164.             break;
  165.         }
  166.         case 'd':
  167.         {
  168.             s = d;
  169.             break;
  170.         }
  171.         default:
  172.         {
  173.         Wejscie.setstate(ios::failbit);
  174.         return Wejscie;
  175.     }
  176. }
  177. return Wejscie;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement