#include #include #include #define wersja 3 using namespace std; #if(wersja==1) void stan_niski(unsigned short &rejestr, int bit_niski) { rejestr &= ~(1 << bit_niski); } void stan_wysoki(unsigned short &rejestr, int bit_wysoki) { rejestr |= (1 << bit_wysoki); } char* wypisz(unsigned short rej) { static char bufor[16] = { 0 }; unsigned short n = 0; n = sprintf(bufor, "", rej); for (int i = 15; i >= 0; i--) n += sprintf(&bufor[n], "%d ", static_cast(rej & (1 << i))); return bufor; } int main() { unsigned short rejestr = 759; bool koniec = false; int wybor; int bit_niski; int bit_wysoki; printf("Rejestr przed ustawieniem : %s", wypisz(rejestr)); cout << endl; do { cout << ("Co chcesz zrobic?") << endl; cout << ("1. Ustawienie wybranego bitu na stan niski ") << endl; cout << ("2. Ustawienie wybranego bitu na stan wysoki ") << endl; cout << ("3. Zakoncz ") << endl; cin >> wybor; switch (wybor) { case(1): { cout << ("Ktory bit chcesz ustawic na stan niski? :"); cin >> bit_niski; stan_niski(rejestr, bit_niski); cout << ("Rejestr po ustawieniu ")<< wypisz(rejestr) << endl; break; } case(2): { cout << ("Ktory bit chcesz ustawic na stan wysoki? :"); cin >> bit_wysoki; stan_wysoki(rejestr, bit_wysoki); cout << ("Rejestr po ustawieniu ") << wypisz(rejestr) << endl; break; } case(3): { koniec = true; break; } } } while (koniec == false); } #endif //(wersja==1) #if(wersja==2) char* kodowanie_dekodowanie(char tekst_wprowadzony[101], char klucz[5]) { char static tekst_koncowy[100] = { 0 }; strcpy(tekst_koncowy, tekst_wprowadzony); int j = 0; int dlugosc_tablicy = 0; while (tekst_koncowy[j] != '\0') { dlugosc_tablicy++; j++; } for (int i = 0; i < dlugosc_tablicy; i++) { for (int j = 0; j < 5; j++) { tekst_koncowy[i] = tekst_koncowy[i] ^ klucz[j]; } } return tekst_koncowy; } int main() { char klucz[5] = {'A','B','C','D'}; // 4 litery * 8 bitów = 32 bity char tresc[101] = "Ala ma kota a kot ma Ale"; char szyfrogram[100]; char odszyfrowana[100]; strcpy(szyfrogram, kodowanie_dekodowanie(tresc, klucz)); strcpy(odszyfrowana, kodowanie_dekodowanie(szyfrogram, klucz)); cout << "Tresc: " << endl; cout << tresc << endl; cout << "Szyfrogram: " << endl; cout << szyfrogram << endl; cout << "Tresc odszyfrowana: " << endl; cout << odszyfrowana << endl; return 0; } #endif //(wersja==2) #if(wersja==3) void zmiana_stanow(unsigned short &rejestr,int bit) { unsigned short maska; maska = rejestr; maska = ~(rejestr & (1 << bit)); rejestr = maska&rejestr; } char* wypisz(unsigned short rej) { static char bufor[16] = { 0 }; unsigned short n = 0; n = sprintf(bufor, "", rej); for (int i = 15; i >= 0; i--) n += sprintf(&bufor[n], "%d ", static_cast(rej & (1 << i))); return bufor; } int main() { unsigned short rejestr = 3443; int bit; cout << ("Rejestr przed zmiana stanow : ") << wypisz(rejestr) <> bit; zmiana_stanow(rejestr,bit); cout << ("Rejestr po zmianie stanow : ") << wypisz(rejestr) << endl; cout << endl; } #endif //(wersja==3) #if(wersja==4) void przepisanie_pierwszych_bitow(unsigned int rejestr_A, unsigned int &rejestr_B, int liczba_pierwszych_bitow) { bool stan = 0; for (int i = 0; i < liczba_pierwszych_bitow; i++) { stan = static_cast(rejestr_A & (1 << i)); if (stan == true) { rejestr_B |= (1 << i); } else { rejestr_B &= ~((1 << i)); } } } char* wypisz(unsigned int rej) { static char bufor[32] = { 0 }; unsigned short n = 0; n = sprintf(bufor, "", rej); for (int i = 31; i >= 0; i--) n += sprintf(&bufor[n], "%d ", static_cast(rej & (1 << i))); return bufor; } int main() { unsigned int rejestr_A = 11111111; unsigned int rejestr_B = 0; int liczba_pierwszych_bitow; cout <<("Rejestr A: ") << wypisz(rejestr_A) << endl; cout << ("Rejestr B: ") << wypisz(rejestr_B) << endl; cout << ("Ile pierwszych bitow chcesz przepisac? :"); cin >> liczba_pierwszych_bitow; przepisanie_pierwszych_bitow(rejestr_A, rejestr_B, liczba_pierwszych_bitow); cout << ("Rejestr B: ") << wypisz(rejestr_B) << endl; return 0; } #endif //(wersja==4) #if(wersja==5) int wyjatek(int tablica[20], int numer_elementu, int wartosc_elementu) { if (numer_elementu > 20 || numer_elementu < 0) { throw "ERROR: Numer elementu spoza tablicy!\n"; } else tablica[numer_elementu] = wartosc_elementu; return tablica[20]; } int referencja(int tablica[20], int numer_elementu, int wartosc_elementu,bool &stan) { if (numer_elementu > 20 || numer_elementu < 0) { stan = false; return 0.0; } else { tablica[numer_elementu] = wartosc_elementu; stan = true; } return(tablica[20]); } int zwrocenie_wartosci(int tablica[20], int numer_elementu, int wartosc_elementu) { if (numer_elementu > 20 || numer_elementu < 0) { return 0.0; } else { tablica[numer_elementu] = wartosc_elementu; } return(tablica[20]); } int main(void) { int tablica[20]; int numer_elementu; int wartosc_elementu; int liczba_nat = 0; int wybor; bool stan = false; bool koniec=false; for (int i = 0; i < 20; i++) { tablica[i] = liczba_nat; liczba_nat++; } cout << ("Tablica przed zmianami: ") << endl; for (int i = 0; i < 20; i++) cout << setw(4) << tablica[i]; cout << endl; do { cout << ("Ktory element tablicy chcesz zmienic (0-19)? "); cin >> numer_elementu; cout << ("Na jaka wartosc chcesz go zmienic? "); cin >> wartosc_elementu; cout << ("Ktory mechanizm wybierasz? ") << endl; cout << ("1. Mechanizm wyjatkow ") << endl; cout << ("2. Sygnalizacja przez referencje ") << endl; cout << ("3. Sygnalizacja przez zwrocenie wartosci ") << endl; cout << ("4. Zakoncz program ") << endl; cin >> wybor; switch (wybor) { case(1): {cout << ("Mechanizm wyjatkow: ") << endl; try { wyjatek(tablica, numer_elementu, wartosc_elementu); } catch (const char* err) { printf("%s", err); } cout << ("Tablica po zmianie: ") << endl; for (int i = 0; i < 20; i++) cout << setw(4) << tablica[i]; cout << endl; break; } case (2): { cout << ("Sygnalizacja przez referencje") << endl; referencja(tablica, numer_elementu, wartosc_elementu, stan); for (int i = 0; i < 20; i++) cout << setw(4) << tablica[i]; cout << endl; cout << ("Wiarygodnosc wyniku: ") << stan << endl; break; } case (3): { cout << ("Sygnalizacja przez zwrocenie wartosci") << endl; zwrocenie_wartosci(tablica, numer_elementu, wartosc_elementu); for (int i = 0; i < 20; i++) cout << setw(4) << tablica[i]; cout << endl; break; } case (4): koniec = true; break; } } while (koniec == false); return 0; } #endif //(wersja==5)