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(){ //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;
- }
- void Display(){ //Method to show object fields
- cout<<"Поля объекта:"<<endl<<chisl<<endl<<"———"<<endl<<znam<<endl;
- }
- //перегрузка операторов
- bool operator > (Rational& other){
- return this->ToDouble() > other.ToDouble();
- }
- bool operator > (const double& digit){
- return this->ToDouble() > digit;
- }
- // bool operator >(Rational& first, const double& second) {
- // return first.toDouble() > second;
- // }
- //
- // bool operator >(Rational& first, Rational& second) {
- // return first.toDouble() > second.toDouble();
- // }
- double operator * (const double & digit){
- // Rational otvet;
- return this->ToDouble()* digit;
- // return otvet;
- }
- Rational operator * (const Rational & other){
- Rational mult;
- mult.chisl = this->chisl * other.chisl;
- mult.znam = this->znam * other.znam;
- return mult;
- }
- };
- int main()
- {
- setlocale(0, "");
- int numer1, denom1, numer2, denom2; //числители и знаменатели
- double real; //вещественное число
- cout<<"Введите числитель первого рац. числа: ";
- while (true) {
- cin>>numer1;
- if (cin.fail() || numer1 == 0) { //если предыдущее извлечение оказалось неудачным,
- cout<<"Ошибка! Повторите попытку ввода числителя: ";
- cin.clear(); //то возвращаем cin в 'обычный' режим работы
- // cin.sync();
- cin.ignore(32767, '\n'); //и удаляем значения предыдущего ввода из входного буфера
- }
- else break;
- }
- // cin.clear();
- cout<<"Введите знаменатель первого рац. числа: ";
- while(true){
- cin>>denom1;
- if (cin.fail() || denom1 == 0){
- cout<<"Ошибка! Повторите попытку ввода знаменателя: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- if(numer1 < 0 && denom1 < 0){
- numer1 *= -1;
- denom1 *= -1;
- }
- cout<<"Введите числитель второго рац. числа: ";
- while (true) {
- cin>>numer2;
- if (cin.fail() || numer2 == 0) {
- cout<<"Ошибка! Повторите попытку ввода числителя: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- cout<<"Введите знаменатель второго рац. числа: ";
- while(true){
- cin>>denom2;
- if (cin.fail() || denom2 == 0){
- cout<<"Ошибка! Повторите попытку ввода знаменателя: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- if(numer2 < 0 && denom2 < 0){
- numer2 *= -1;
- denom2 *= -1;
- }
- cout<<endl;
- cout<<"Введите действительное число:";
- while (true) {
- cin>>real;
- if (cin.fail()) {
- cout<<"Ошибка! Повторите попытку ввода действительного числа: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- cout<<endl;
- Rational first(numer1, denom1); //создание объектов класса
- Rational second(numer2, denom2);
- first.Display(); //печатаем рац. число
- cout<<endl;
- second.Display(); //печатаем рац. число
- cout<<endl;
- cout<<"Вещ. число: "<<real<<endl;
- cout<<endl;
- int menu;
- do{
- cout<<"1 - для сравнения > двух рациональных чисел"<<endl;
- cout<<"2 - для сравнения > рационального числа с действительным"<<endl;
- cout<<"3 - для умножения * рационального числа с действительным"<<endl;
- cout<<"4 - для умножения * двух рациональных"<<endl;
- cout<<"5 - для выхода"<<"\n\n"<<"Ведите команду: ";
- while(true){ //проверка на ввод menu
- cin>>menu;
- if(cin.fail()){
- cout<<"Ошибка! Повторите попытку ввода команды: ";
- cin.clear();
- cin.ignore(32767, '\n');
- }
- else break;
- }
- switch(menu){
- case 1:
- cout<<'\n'<<"first > second: "<<(first > second)<<endl;
- break;
- case 2:
- cout<<'\n'<<"first > real: "<<(first > real)<<endl;
- cout<<"second > real: "<<(second > real)<<endl;
- break;
- case 3:
- double answer1, answer2;
- answer1 = first * real;
- answer2 = second * real;
- cout<<'\n'<<"Результат умножения первого рац. числа с вещ-ым : "<<answer1<<endl<<"Результат умножения второго рац. числа с вещ-ым: "<<answer2<<endl;
- break;
- case 4:
- Rational Res;
- Res = first * second;
- cout<<endl;
- Res.Display();
- break;
- }
- cout<<endl;
- }while(menu != 5);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement