Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Uwaga z góry zaznaczam ze ten program nie jest przystosowany do obslugi liczb ujemnych
- #include <iostream>
- #include <cmath>
- #include <sstream>
- #include <string>
- using namespace std;
- string to_string(double i) //Funkcja, która jest używana w dalszej części programu do konwertowania danych na typ string
- {
- stringstream ss;
- ss << i;
- return ss.str();
- }
- void dodaj(string liczba1,string liczba2) //Funkcja dodaj, która przyjmuje 2 liczby jako parametry typu string (ciągi liczbowe)
- {
- double rozmiar1=liczba1.length(); //rozmiar liczby 1
- double rozmiar2=liczba2.length(); //rozmiar liczby 2
- double liczba1suma=0; //zmienna przechowuje sume liczb, ktore sa obliczane w ponizszej funkcji na zasadzie liczba1suma= wartosc jednosci*10^0 + wartosc dziesiatek^1 + wartosc setek*10^2 itd. i skladaja sie na wartosc liczby1
- double liczba2suma=0; // jw. wartosc liczby2
- double aktualnaliczba1=0; //przechowuje wartosc liczby przetwarzanej w aktualnym obiegu petli (konwersja z ASCII na double dlatego stosuje pomniejszenie o 48 zeby dzialac na cyfrach 0-9
- double aktualnaliczba2=0; //jw. wartosc liczby2
- double dzielnik1=1; //liczba przetwarzana w petli jest mnozona przez 1 do momentu wystapienia kropki, po wystapieniu kropki dzielnik jest dzielony przez 10 i wynosi 0.1. Pomnozenie kolejnej wartosci przez 0.1 daje
- //wartosci dziesietne pozniej dzielnik jest kolejny raz dzielony przez 10 i otrzymujemy czesci setne itd.
- double dzielnik2=1; //j.w wartosc liczby2
- double aktualnawartosc=0; //przechowuje wartosc aktualnej liczby * dzielnik
- double aktualnawartosc2=0; //jw. wartosc liczby2
- double rozmiarliczby1=0; //przechowuje rozmiar liczby1 na zasadzie ilosc znakow od poczatku do kropki (jesli kropka wystepuje, bo jesli nie to od poczatku do konca)
- double rozmiarliczby2=0; //jw. wartosc liczby2
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {rozmiarliczby1+=1;}
- else {break;}
- } //<-- powyzsza petla oblicza wartosc zmiennej rozmiarliczby1 na zasadzie od poczatku liczby do kropki. Pojawienie sie kropki lub znaku innego niz cyfry od 0 do 9 powoduje wyjscie z petli
- for(int i=0;i<rozmiar1;i++) //petla od 0 do liczby okreslajacej rozmiar liczby 1 ze skokiem co 1
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {
- //<--warunek sprawdzajacy czy wprowadzone dane sa liczba, jesli tak wykonuje sie ponizsze dzialanie
- aktualnaliczba1=(liczba1[i]-48);
- aktualnawartosc=aktualnaliczba1*dzielnik1;
- if(dzielnik1>=1){aktualnawartosc*=pow(10,rozmiarliczby1-i-1);} //dopoki dzielnik1 jest nie mniejszy niz 1 akutalnawartosc zostaje pomnozone przez 10 do potegi ilosc liczb do przecinka-1-numer powtorzenia petli co daje liczbe jednosci, dziesiatek, setek itd.
- liczba1suma+=aktualnawartosc; //liczba2suma z kazdym przejsciem petli powiekszana jest o aktualnawartosc
- if(dzielnik1<1){dzielnik1=dzielnik1/10;} //jesli dzielnik jest mniejszy od 1 czyli w wyrazeniu wystapila juz kropka dziesietna to dzielnik jest dzielony przezz 10 przez co sa otzymywane w kolejnych przejsciach petli czesci dziesietne, setne, tysieczne itd.
- }
- else if(liczba1[i]=='.') //jesli warunek z linii 38 nie zostal spelniony, sprawdzamy czy aktualnie sprawdzany znak to kropka. Jesli tak to dzielnik jest dzielony przez 10 co uruchamia liczenie kolejnych czesci po kropce (setne, tysieczne itd.)
- {
- dzielnik1=dzielnik1/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;} //jesli warunki z linii 38 i 58 nie zostaly spelnione to znaczy ze wpisany znak nie jest cyfra !!! WYJĄTEK minus nie jest obsługiwany przez ten program i uznajemy ze wprowadzone dane nie sa poprawne
- }
- //************************************************************************************************ LICZBA 2 *******************************************************************************************************
- /*
- UWAGA! UWAGA! UWAGA! UWAGA! UWAGA! UWAGA! UWAGA! UWAGA!
- Od tej pory powyższy kod zostanie użyty jeszcze wiele razy więc nie bede opisywal go ponownie
- niektóre zmienne są bardzo podobne np zamiast rozmiarliczby1 to rozmiarliczby2 i oznaczaja dokladnie to samo tylko dla liczby 2 wiec nie bede ich opisywal
- Niektóre zmiany są bardzo proste i widoczne więc nie będe ich opisywał
- Niektóre fragmenty poniższego kodu opisze aby wyjasnic ich znaczenie
- Program nie przewiduje podawania wartosci ujemnych
- UWAGA! UWAGA! UWAGA! UWAGA! UWAGA! UWAGA! UWAGA! UWAGA!
- */
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {rozmiarliczby2+=1;}
- else {break;}
- }
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {
- aktualnaliczba2=(liczba2[j]-48);
- aktualnawartosc2=aktualnaliczba2*dzielnik2;
- if(dzielnik2>=1){aktualnawartosc2*=pow(10,rozmiarliczby2-j-1);}
- liczba2suma+=aktualnawartosc2;
- if(dzielnik2<1){dzielnik2=dzielnik2/10;}
- }
- else if(liczba2[j]=='.')
- {
- dzielnik2=dzielnik2/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- double wynikDodawania=liczba1suma+liczba2suma; //Obliczanie wyniku dodawania liczby 1 i liczby2 przekonwertowanych z typu string na typ double
- string wynikd=to_string(wynikDodawania); //Konwertowanie wyniku obliczonego na zmiennych typu double na typ string
- cout<<"DODAWANIE "<<liczba1suma<<" + "<<liczba2suma<<" = "; //wypisanie skladnikow i wyniku dzialania
- for(int k=0; k<wynikd.length();k++) //wypisanie wyniku dzialania w petli element po elemencie
- {
- cout<<wynikd[k];
- }
- cout<<endl;
- }
- void odejmij(string liczba1,string liczba2)
- {
- double rozmiar1=liczba1.length();
- double rozmiar2=liczba2.length();
- double liczba1suma=0;
- double liczba2suma=0;
- double aktualnaliczba1=0;
- double aktualnaliczba2=0;
- double dzielnik1=1;
- double dzielnik2=1;
- double aktualnawartosc=0;
- double aktualnawartosc2=0;
- double rozmiarliczby1=0;
- double rozmiarliczby2=0;
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {rozmiarliczby1+=1;}
- else {break;}
- }
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {
- aktualnaliczba1=(liczba1[i]-48);
- aktualnawartosc=aktualnaliczba1*dzielnik1;
- if(dzielnik1>=1){aktualnawartosc*=pow(10,rozmiarliczby1-i-1);}
- liczba1suma+=aktualnawartosc;
- if(dzielnik1<1){dzielnik1=dzielnik1/10;}
- }
- else if(liczba1[i]=='.')
- {
- dzielnik1=dzielnik1/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- //************************************************************************************************ LICZBA 2 *******************************************************************************************************
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {rozmiarliczby2+=1;}
- else {break;}
- }
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {
- aktualnaliczba2=(liczba2[j]-48);
- aktualnawartosc2=aktualnaliczba2*dzielnik2;
- if(dzielnik2>=1){aktualnawartosc2*=pow(10,rozmiarliczby2-j-1);}
- liczba2suma+=aktualnawartosc2;
- if(dzielnik2<1){dzielnik2=dzielnik2/10;}
- }
- else if(liczba2[j]=='.')
- {
- dzielnik2=dzielnik2/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- double wynikOdejmowania=liczba1suma-liczba2suma; //Obliczanie wyniku odejmowania liczby 1 i liczby2 przekonwertowanych z typu string na typ double
- string wynikd=to_string(wynikOdejmowania); //Konwertowanie wyniku obliczonego na zmiennych typu double na typ string
- cout<<"ODEJMOWANIE "<<liczba1suma<<" - "<<liczba2suma<<" = "; //wypisanie skladnikow i wyniku dzialania
- for(int k=0; k<wynikd.length();k++) //wypisanie wyniku dzialania w petli element po elemencie
- {
- cout<<wynikd[k];
- }
- cout<<endl;
- }
- void porownaj(string liczba1,string liczba2)
- {
- double rozmiar1=liczba1.length();
- double rozmiar2=liczba2.length();
- double liczba1suma=0;
- double liczba2suma=0;
- double aktualnaliczba1=0;
- double aktualnaliczba2=0;
- double dzielnik1=1;
- double dzielnik2=1;
- double aktualnawartosc=0;
- double aktualnawartosc2=0;
- double rozmiarliczby1=0;
- double rozmiarliczby2=0;
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {rozmiarliczby1+=1;}
- else {break;}
- }
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {
- aktualnaliczba1=(liczba1[i]-48);
- aktualnawartosc=aktualnaliczba1*dzielnik1;
- if(dzielnik1>=1){aktualnawartosc*=pow(10,rozmiarliczby1-i-1);}
- liczba1suma+=aktualnawartosc;
- if(dzielnik1<1){dzielnik1=dzielnik1/10;}
- }
- else if(liczba1[i]=='.')
- {
- dzielnik1=dzielnik1/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- //************************************************************************************************ LICZBA 2 *******************************************************************************************************
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {rozmiarliczby2+=1;}
- else {break;}
- }
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {
- aktualnaliczba2=(liczba2[j]-48);
- aktualnawartosc2=aktualnaliczba2*dzielnik2;
- if(dzielnik2>=1){aktualnawartosc2*=pow(10,rozmiarliczby2-j-1);}
- liczba2suma+=aktualnawartosc2;
- if(dzielnik2<1){dzielnik2=dzielnik2/10;}
- }
- else if(liczba2[j]=='.')
- {
- dzielnik2=dzielnik2/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- string wynikPorownania;
- if(liczba1suma<liczba2suma){wynikPorownania=" < ";} //Sprawdza wynik porownania i wypisuje odpowiedni znak
- if(liczba1suma>liczba2suma){wynikPorownania=" > ";} //Sprawdza wynik porownania i wypisuje odpowiedni znak
- if(liczba1suma==liczba2suma){wynikPorownania=" = ";} //Sprawdza wynik porownania i wypisuje odpowiedni znak
- cout<<"POROWNANIE "<<liczba1suma<<wynikPorownania<<liczba2suma<<endl; //Wypisuje skladniki i wstawia pomiedzy nie odpowiedni znak
- }
- void mnozenie(string liczba1,string liczba2)
- {
- double rozmiar1=liczba1.length();
- double rozmiar2=liczba2.length();
- double liczba1suma=0;
- double liczba2suma=0;
- double aktualnaliczba1=0;
- double aktualnaliczba2=0;
- double dzielnik1=1;
- double dzielnik2=1;
- double aktualnawartosc=0;
- double aktualnawartosc2=0;
- double rozmiarliczby1=0;
- double rozmiarliczby2=0;
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {rozmiarliczby1+=1;}
- else {break;}
- }
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {
- aktualnaliczba1=(liczba1[i]-48);
- aktualnawartosc=aktualnaliczba1*dzielnik1;
- if(dzielnik1>=1){aktualnawartosc*=pow(10,rozmiarliczby1-i-1);}
- liczba1suma+=aktualnawartosc;
- if(dzielnik1<1){dzielnik1=dzielnik1/10;}
- }
- else if(liczba1[i]=='.')
- {
- dzielnik1=dzielnik1/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- //************************************************************************************************ LICZBA 2 *******************************************************************************************************
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {rozmiarliczby2+=1;}
- else {break;}
- }
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {
- aktualnaliczba2=(liczba2[j]-48);
- aktualnawartosc2=aktualnaliczba2*dzielnik2;
- if(dzielnik2>=1){aktualnawartosc2*=pow(10,rozmiarliczby2-j-1);}
- liczba2suma+=aktualnawartosc2;
- if(dzielnik2<1){dzielnik2=dzielnik2/10;}
- }
- else if(liczba2[j]=='.')
- {
- dzielnik2=dzielnik2/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- long liczba2sumalong=liczba2suma; //Zamienia 2 liczbe na typ long (bez czesci dziesietnej) aby wykonać mnozenie przez liczbe calkowita
- cout<<"MNOZENIE "<<liczba1suma<<" * "<<liczba2sumalong<<" = "<<liczba1suma*liczba2sumalong<<endl; //wypisanie wyniku
- }
- void dzielenie(string liczba1,string liczba2)
- {
- double rozmiar1=liczba1.length();
- double rozmiar2=liczba2.length();
- double liczba1suma=0;
- double liczba2suma=0;
- double aktualnaliczba1=0;
- double aktualnaliczba2=0;
- double dzielnik1=1;
- double dzielnik2=1;
- double aktualnawartosc=0;
- double aktualnawartosc2=0;
- double rozmiarliczby1=0;
- double rozmiarliczby2=0;
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {rozmiarliczby1+=1;}
- else {break;}
- }
- for(int i=0;i<rozmiar1;i++)
- {
- if( (liczba1[i]=='0') || (liczba1[i]=='1') || (liczba1[i]=='2') || (liczba1[i]=='3') || (liczba1[i]=='4') || (liczba1[i]=='5') || (liczba1[i]=='6') || (liczba1[i]=='7') || (liczba1[i]=='8') || (liczba1[i]=='9') )
- {
- aktualnaliczba1=(liczba1[i]-48);
- aktualnawartosc=aktualnaliczba1*dzielnik1;
- if(dzielnik1>=1){aktualnawartosc*=pow(10,rozmiarliczby1-i-1);}
- liczba1suma+=aktualnawartosc;
- if(dzielnik1<1){dzielnik1=dzielnik1/10;}
- }
- else if(liczba1[i]=='.')
- {
- dzielnik1=dzielnik1/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- //************************************************************************************************ LICZBA 2 *******************************************************************************************************
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {rozmiarliczby2+=1;}
- else {break;}
- }
- for(int j=0;j<rozmiar2;j++)
- {
- if( (liczba2[j]=='0') || (liczba2[j]=='1') || (liczba2[j]=='2') || (liczba2[j]=='3') || (liczba2[j]=='4') || (liczba2[j]=='5') || (liczba2[j]=='6') || (liczba2[j]=='7') || (liczba2[j]=='8') || (liczba2[j]=='9') )
- {
- aktualnaliczba2=(liczba2[j]-48);
- aktualnawartosc2=aktualnaliczba2*dzielnik2;
- if(dzielnik2>=1){aktualnawartosc2*=pow(10,rozmiarliczby2-j-1);}
- liczba2suma+=aktualnawartosc2;
- if(dzielnik2<1){dzielnik2=dzielnik2/10;}
- }
- else if(liczba2[j]=='.')
- {
- dzielnik2=dzielnik2/10;
- }
- else {cout<<"Wprowadzone dane to nie liczba!";break;}
- }
- long liczba2sumalong=liczba2suma; //zamiana ddouble na longa zeby wykonac dzielenie calkowitoliczbowe
- long liczba1sumalong=liczba1suma; //zamiana ddouble na longa zeby wykonac dzielenie calkowitoliczbowe
- long wynikDzielenia = liczba1sumalong/liczba2sumalong; //Obliczanie wyniku dzielenia
- string wynikd=to_string(wynikDzielenia); //Konwertowanie wyniku dzielenia longow na string
- cout<<"DZIELENIE "<<liczba1sumalong<<" / "<<liczba2sumalong<<" = "; //Wyswietlenie skladnikow dzielenia
- for(int l=0;l<wynikd.length();l++) //Wyswietlenie wyniku dzielenia znak po znaku w petli
- {
- cout<<wynikd[l];
- }
- }
- int main()
- {
- string liczba1, liczba2; //Deklaruje zmienne liczba1 i liczba2
- cout<<"Podaj pierwsza liczbe: "; //Prosi o wpisanie liczby 1
- cin>>liczba1; //Pobiera liczbe1 (jako string czyli ciąg znaków)
- cout<<"Podaj druga liczbe: "; //Prosi o wpisanie liczby 2
- cin>>liczba2; //Pobiera liczbe2 (jako string czyli ciąg znaków)
- cout<<endl<<endl<<endl; //Wyswietla kilka linii odstepu aby poprawic czytelnosc
- dodaj(liczba1,liczba2); //wywolanie funkcji dodaj
- odejmij(liczba1,liczba2); //wywolanie funkcji odejmij
- porownaj(liczba1,liczba2); //wywolanie funkcji porownaj
- mnozenie(liczba1,liczba2); //wywolanie funkcji mnozenie
- dzielenie(liczba1,liczba2); //wywolanie funkcji dzielenie
- return 0;
- }
- // Jestem swiadomy, ze program nie jest wykonany optymalnie ale na chwile obecna potrafie zrobic to samodzielnie tylko w taki sposob :)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement