#include<cstdio>
#include<iostream>
#include<iomanip>
#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<bool>(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<bool>(rej & (1 << i)));
return bufor;
}
int main()
{
unsigned short rejestr = 3443;
int bit;
cout << ("Rejestr przed zmiana stanow : ") << wypisz(rejestr) <<endl;
cout << endl;
cout << ("Ktory bit chcesz zanegowac? ");
cin >> 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<bool>(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<bool>(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)