Facebook
From Adrian, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 246
  1. #include<cstdio>
  2. #include<iostream>
  3. #include<iomanip>
  4.  
  5. #define wersja 3
  6.  
  7.  
  8.  
  9. using namespace std;
  10.  
  11. #if(wersja==1)
  12.  
  13. void stan_niski(unsigned short &rejestr, int bit_niski)
  14. {
  15.         rejestr &= ~(1 << bit_niski);
  16. }
  17. void stan_wysoki(unsigned short &rejestr, int bit_wysoki)
  18. {
  19.         rejestr |= (1 << bit_wysoki);
  20. }
  21.  
  22.  
  23. char* wypisz(unsigned short rej)
  24. {
  25. static char bufor[16] = { 0 };
  26.  
  27. unsigned short n = 0;
  28.  
  29. n = sprintf(bufor, "", rej);
  30.  
  31. for (int i = 15; i >= 0; i--)
  32. n += sprintf(&bufor[n], "%d ", static_cast<bool>(rej & (1 << i)));
  33.  
  34. return bufor;
  35.  
  36. }
  37.  
  38. int main()
  39. {
  40.         unsigned short rejestr = 759;
  41.  
  42.         bool koniec = false;
  43.  
  44.         int wybor;
  45.         int bit_niski;
  46.         int bit_wysoki;
  47.  
  48.         printf("Rejestr przed ustawieniem : %s", wypisz(rejestr));
  49.         cout << endl;
  50.  
  51.         do
  52.         {
  53.                 cout << ("Co chcesz zrobic?") << endl;
  54.                 cout << ("1. Ustawienie wybranego bitu na stan niski ") << endl;
  55.                 cout << ("2. Ustawienie wybranego bitu na stan wysoki ") << endl;
  56.                 cout << ("3. Zakoncz ") << endl;
  57.  
  58.                 cin >> wybor;
  59.  
  60.                 switch (wybor)
  61.                 {
  62.  
  63.                 case(1):
  64.                 {
  65.                         cout << ("Ktory bit chcesz ustawic na stan niski? :");
  66.                         cin >> bit_niski;
  67.  
  68.                         stan_niski(rejestr, bit_niski);
  69.  
  70.                         cout << ("Rejestr po ustawieniu ")<< wypisz(rejestr) << endl;
  71.  
  72.                         break;
  73.                 }
  74.                 case(2):
  75.                 {
  76.                         cout << ("Ktory bit chcesz ustawic na stan wysoki? :");
  77.  
  78.                         cin >> bit_wysoki;
  79.  
  80.                         stan_wysoki(rejestr, bit_wysoki);
  81.  
  82.                         cout << ("Rejestr po ustawieniu ") << wypisz(rejestr) << endl;
  83.                         break;
  84.                 }
  85.                 case(3):
  86.                 {
  87.                         koniec = true;
  88.                         break;
  89.                 }
  90.  
  91.                 }
  92.         } while (koniec == false);
  93.        
  94.  
  95.        
  96.        
  97. }
  98. #endif //(wersja==1)
  99.  
  100. #if(wersja==2)
  101.  
  102. char* kodowanie_dekodowanie(char tekst_wprowadzony[101], char klucz[5])
  103. {
  104.         char static tekst_koncowy[100] = { 0 };
  105.  
  106.         strcpy(tekst_koncowy, tekst_wprowadzony);
  107.  
  108.         int j = 0;
  109.         int dlugosc_tablicy = 0;
  110.  
  111.  
  112.         while (tekst_koncowy[j] != '\0')
  113.         {
  114.                 dlugosc_tablicy++;
  115.                 j++;
  116.         }
  117.  
  118.         for (int i = 0; i < dlugosc_tablicy; i++)
  119.         {
  120.                 for (int j = 0; j < 5; j++)
  121.                 {
  122.                         tekst_koncowy[i] = tekst_koncowy[i] ^ klucz[j];
  123.                 }
  124.         }
  125.  
  126.         return tekst_koncowy;
  127. }
  128.  
  129.  
  130. int main()
  131. {
  132.         char klucz[5] = {'A','B','C','D'};  // 4 litery * 8 bitów = 32 bity
  133.  
  134.         char tresc[101] = "Ala ma kota a kot ma Ale";
  135.  
  136.         char szyfrogram[100];
  137.  
  138.         char odszyfrowana[100];
  139.  
  140.         strcpy(szyfrogram, kodowanie_dekodowanie(tresc, klucz));
  141.        
  142.         strcpy(odszyfrowana, kodowanie_dekodowanie(szyfrogram, klucz));
  143.  
  144.         cout << "Tresc: " << endl;
  145.         cout << tresc << endl;
  146.  
  147.         cout << "Szyfrogram: " << endl;
  148.         cout << szyfrogram << endl;
  149.  
  150.        
  151.         cout << "Tresc odszyfrowana: " << endl;
  152.         cout << odszyfrowana << endl;
  153.        
  154.         return 0;
  155. }
  156.  
  157.  
  158. #endif //(wersja==2)
  159.  
  160. #if(wersja==3)
  161.  
  162. void zmiana_stanow(unsigned short &rejestr,int bit)
  163. {
  164.         unsigned short maska;
  165.  
  166.         maska = rejestr;
  167.  
  168.         maska = ~(rejestr & (1 << bit));
  169.  
  170.         rejestr = maska&rejestr;
  171.  
  172. }
  173. char* wypisz(unsigned short rej)
  174. {
  175.         static char bufor[16] = { 0 };
  176.  
  177.         unsigned short n = 0;
  178.  
  179.         n = sprintf(bufor, "", rej);
  180.  
  181.         for (int i = 15; i >= 0; i--)
  182.                 n += sprintf(&bufor[n], "%d ", static_cast<bool>(rej & (1 << i)));
  183.  
  184.         return bufor;
  185. }
  186.  
  187. int main()
  188. {
  189.         unsigned short rejestr = 3443;
  190.         int bit;
  191.  
  192.         cout << ("Rejestr przed zmiana stanow : ") <<  wypisz(rejestr) <<endl;
  193.         cout << endl;
  194.  
  195.         cout << ("Ktory bit chcesz zanegowac? ");
  196.         cin >> bit;
  197.  
  198.         zmiana_stanow(rejestr,bit);
  199.  
  200.         cout << ("Rejestr po zmianie stanow : ") << wypisz(rejestr) << endl;
  201.         cout << endl;
  202. }
  203.  
  204.  
  205. #endif //(wersja==3)
  206.  
  207. #if(wersja==4)
  208.  
  209. void przepisanie_pierwszych_bitow(unsigned int rejestr_A, unsigned int &rejestr_B, int liczba_pierwszych_bitow)
  210. {
  211.  
  212.         bool stan = 0;
  213.  
  214.         for (int i = 0; i < liczba_pierwszych_bitow; i++)
  215.         {
  216.                 stan = static_cast<bool>(rejestr_A & (1 << i));
  217.  
  218.                 if (stan == true)
  219.                 {
  220.                         rejestr_B |= (1 << i);
  221.                 }
  222.                 else
  223.                 {
  224.                         rejestr_B &= ~((1 << i));
  225.                 }
  226.         }
  227. }
  228.  
  229.  
  230.  
  231. char* wypisz(unsigned int rej)
  232. {
  233.         static char bufor[32] = { 0 };
  234.  
  235.         unsigned short n = 0;
  236.  
  237.         n = sprintf(bufor, "", rej);
  238.  
  239.         for (int i = 31; i >= 0; i--)
  240.                 n += sprintf(&bufor[n], "%d ", static_cast<bool>(rej & (1 << i)));
  241.  
  242.         return bufor;
  243. }
  244.  
  245. int main()
  246. {
  247.         unsigned int rejestr_A = 11111111;
  248.  
  249.         unsigned int rejestr_B = 0;
  250.  
  251.         int liczba_pierwszych_bitow;
  252.  
  253.  
  254.  
  255.         cout <<("Rejestr A: ") << wypisz(rejestr_A) << endl;
  256.        
  257.         cout << ("Rejestr B: ") << wypisz(rejestr_B) << endl;
  258.        
  259.  
  260.         cout << ("Ile pierwszych bitow chcesz przepisac? :");
  261.  
  262.         cin >> liczba_pierwszych_bitow;
  263.  
  264.  
  265.         przepisanie_pierwszych_bitow(rejestr_A, rejestr_B, liczba_pierwszych_bitow);
  266.  
  267.         cout << ("Rejestr B: ") << wypisz(rejestr_B) << endl;
  268.        
  269.         return 0;
  270. }
  271.  
  272. #endif //(wersja==4)
  273.  
  274. #if(wersja==5)
  275.  
  276. int wyjatek(int tablica[20], int numer_elementu, int wartosc_elementu)
  277. {
  278.  
  279.         if (numer_elementu > 20 || numer_elementu < 0)
  280.         {
  281.                 throw "ERROR: Numer elementu spoza tablicy!\n";
  282.         }
  283.         else
  284.                 tablica[numer_elementu] = wartosc_elementu;
  285.  
  286.  
  287.         return tablica[20];
  288. }
  289. int referencja(int tablica[20], int numer_elementu, int wartosc_elementu,bool &stan)
  290. {
  291.         if (numer_elementu > 20 || numer_elementu < 0)
  292.         {
  293.                 stan = false;
  294.                 return 0.0;
  295.         }
  296.         else
  297.         {
  298.                 tablica[numer_elementu] = wartosc_elementu;
  299.                 stan = true;
  300.         }
  301.  
  302.         return(tablica[20]);
  303.  
  304. }
  305.  
  306. int zwrocenie_wartosci(int tablica[20], int numer_elementu, int wartosc_elementu)
  307. {
  308.         if (numer_elementu > 20 || numer_elementu < 0)
  309.         {
  310.                 return 0.0;
  311.         }
  312.         else
  313.         {
  314.                 tablica[numer_elementu] = wartosc_elementu;
  315.         }
  316.  
  317.         return(tablica[20]);
  318.  
  319.  
  320.  
  321. }
  322.  
  323. int main(void)
  324. {
  325.  
  326.         int tablica[20];
  327.  
  328.         int numer_elementu;
  329.  
  330.         int wartosc_elementu;
  331.  
  332.         int liczba_nat = 0;
  333.  
  334.         int wybor;
  335.  
  336.         bool stan = false;
  337.  
  338.         bool koniec=false;
  339.  
  340.  
  341.  
  342.  
  343.         for (int i = 0; i < 20; i++)
  344.         {
  345.                 tablica[i] = liczba_nat;
  346.                 liczba_nat++;
  347.         }
  348.  
  349.  
  350.         cout << ("Tablica przed zmianami: ") << endl;
  351.         for (int i = 0; i < 20; i++)
  352.                 cout << setw(4) << tablica[i];
  353.         cout << endl;
  354.  
  355.         do
  356.         {
  357.                 cout << ("Ktory element tablicy chcesz zmienic (0-19)?  ");
  358.                 cin >> numer_elementu;
  359.  
  360.  
  361.                 cout << ("Na jaka wartosc chcesz go zmienic?  ");
  362.                 cin >> wartosc_elementu;
  363.  
  364.                 cout << ("Ktory mechanizm wybierasz? ") << endl;
  365.                 cout << ("1. Mechanizm wyjatkow ") << endl;
  366.                 cout << ("2. Sygnalizacja przez referencje ") << endl;
  367.                 cout << ("3. Sygnalizacja przez zwrocenie wartosci ") << endl;
  368.                 cout << ("4. Zakoncz program ") << endl;
  369.                 cin >> wybor;
  370.  
  371.                 switch (wybor)
  372.                 {
  373.                 case(1):
  374.                 {cout << ("Mechanizm wyjatkow: ") << endl;
  375.                 try
  376.                 {
  377.                         wyjatek(tablica, numer_elementu, wartosc_elementu);
  378.                 }
  379.                 catch (const char* err)
  380.                 {
  381.                         printf("%s", err);
  382.                 }
  383.                 cout << ("Tablica po zmianie: ") << endl;
  384.  
  385.                 for (int i = 0; i < 20; i++)
  386.                         cout << setw(4) << tablica[i];
  387.                 cout << endl;
  388.                 break;
  389.                 }
  390.                        
  391.                 case (2):
  392.                 {
  393.                         cout << ("Sygnalizacja przez referencje") << endl;
  394.                         referencja(tablica, numer_elementu, wartosc_elementu, stan);
  395.  
  396.                         for (int i = 0; i < 20; i++)
  397.                                 cout << setw(4) << tablica[i];
  398.                         cout << endl;
  399.  
  400.                         cout << ("Wiarygodnosc wyniku: ") << stan << endl;
  401.                         break;
  402.                 }
  403.                 case (3):
  404.                 {
  405.                         cout << ("Sygnalizacja przez zwrocenie wartosci") << endl;
  406.  
  407.                         zwrocenie_wartosci(tablica, numer_elementu, wartosc_elementu);
  408.  
  409.                         for (int i = 0; i < 20; i++)
  410.                                 cout << setw(4) << tablica[i];
  411.                         cout << endl;
  412.                         break;
  413.                 }
  414.                 case (4):
  415.                         koniec = true;
  416.                         break;
  417.                 }
  418.         } while (koniec == false);
  419.  
  420.         return 0;
  421. }
  422.  
  423. #endif //(wersja==5)
  424.  
  425.