Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include "cstdio"
- #include <locale.h> //подключенные библиотеки
- using namespace std; //используемое пространство имен
- class Rational{
- private:
- int chisl; //числитель
- int znam; //знаменатель
- public:
- Rational(int valueChisl, int valueZnam){//constructor with parameters
- chisl = valueChisl;
- znam = valueZnam;
- }
- Rational(){ //constructor
- };
- Rational(const Rational & ex){ //constructor of copying
- chisl = ex.chisl;
- znam = ex.znam;
- }
- ~Rational(){ //destructor
- }
- //setter and getter for chisl
- void SetChisl(int valueChisl){
- chisl = valueChisl;
- }
- int GetChisl(){
- return chisl;
- }
- //setter and getter for znam
- void SetZnam(int valueZnam){
- znam = valueZnam;
- }
- int GetZnam(){ //getter for znam
- return znam;
- }
- //Methods of class
- double ToDouble(){
- return (double)this->chisl/znam;
- }
- //перегрузка операторов
- bool operator > (Rational& other){
- return this->ToDouble() > other.ToDouble();
- }
- bool operator > (const double& digit){
- return this->ToDouble() > digit;
- }
- double operator * (const double & digit){
- return this->ToDouble()* digit;
- }
- Rational operator * (const Rational & other){
- Rational mult;
- mult.chisl = this->chisl * other.chisl;
- mult.znam = this->znam * other.znam;
- return mult;
- }
- friend ostream & operator <<(ostream &out, const Rational &output){
- cout<<"Поля объекта:\n"<<output.chisl<<endl<<"————"<<endl<<output.znam<<endl;
- return cout;
- }
- friend istream & operator >>(istream &in, Rational &input){
- cout<<"Введите числитель: ";
- while(true){
- cin>>input.chisl;
- if(cin.fail() || input.chisl == 0){
- cout<<"Ошибка! Повторите попытку ввода числителя: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- cout<<"Введите знаменатель: ";
- while(true){
- cin>>input.znam;
- if(cin.fail() || input.znam == 0){
- cout<<"Ошибка! Повторите попытку ввода знаменателя: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- if (input.chisl < 0 && input.znam < 0){
- input.chisl *= -1;
- input.znam *= -1;
- }
- return cin;
- }
- };
- int main()
- {
- setlocale(0, "");
- int numer1, denom1, numer2, denom2; //числители и знаменатели
- double real; //вещественное число
- Rational first(numer1, denom1); //создание объектов класса
- Rational second(numer2, denom2);
- Rational Res;
- cout<<"Первое рац число:\n";
- cin>>first;
- cout<<endl<<"Второе рац число:"<<endl;
- cin>>second;
- cout<<endl<<"Действительное число:"<<endl;
- cin>>real;
- cout<<first<<endl;
- cout<<second<<endl;
- cout<<"Вещ. число: "<<real<<endl;
- cout<<endl;
- cout<<endl;
- int menu;
- do{
- cout<<"0 - для перезаписи первого рац. числа"<<endl;
- cout<<"1 - для перезаписи второго рац. числа"<<endl;
- cout<<"2 - для перезаписи действительного числа"<<endl<<endl;
- cout<<"5 - для сравнения > двух рациональных чисел"<<endl;
- cout<<"6 - для сравнения > рационального числа с действительным"<<endl;
- cout<<"7 - для умножения * рационального числа с действительным"<<endl;
- cout<<"8 - для умножения * двух рациональных"<<endl;
- cout<<"s - чтобы просмотреть все"<<endl;
- cout<<"e - для выхода"<<"\n\n"<<"Ведите команду: ";
- cin>>menu;
- switch(menu){
- case 0:
- cin>>first;
- break;
- case 1:
- cin>>second;
- break;
- case 2:
- cout<<"Введите действительное число";
- cin>>real;
- cout<<endl;
- break;
- case 5:
- cout<<'\n'<<"first > second: "<<(first > second)<<endl;
- break;
- case 6:
- cout<<'\n'<<"first > real: "<<(first > real)<<endl;
- cout<<"second > real: "<<(second > real)<<endl;
- break;
- case 7:
- double answer1, answer2;
- answer1 = first * real;
- answer2 = second * real;
- cout<<'\n'<<"Результат умножения первого рац. числа с вещ-ым : "<<answer1<<endl<<"Результат умножения второго рац. числа с вещ-ым: "<<answer2<<endl;
- break;
- case 8:
- Res = first * second;
- cout<<endl;
- cout<<Res;
- break;
- case 9:
- cout<<first<<endl;
- cout<<second<<endl;
- cout<<real;
- break;
- }
- cout<<endl;
- }while(menu != 10);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement