Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите те с логическими операциями для дробей 
:(
    Опции темы
maksimyshka
Дата 5.12.2012, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.12.2012

Репутация: нет
Всего: нет



Написал класс дробей алгебраические операции сделал, а логические нет, надо сделать >,<,==,!=,>=,<=, помогите срочно курсовая горит
Код


#include <iostream>
#include <string>
using namespace std;
class drobi
{
    private:
    int Nod(int x=0, int y=1); // Íàõîæäåíå íàèáîëüøåãî îáùåãî äåëèòåëÿ  
    int a; //÷èñëèòåëü
    int b;//çíàìåíàòåëü
public:
      drobi operator +(drobi x);
      drobi operator -(drobi x);
      drobi operator /(drobi x);
      drobi operator *(drobi x); 
       void vvod();
       void vivod();
       void chast();/*Âûäåëåíèå öåëîé ÷àñòè*/
       void sokr();
      drobi operator ^(int n);
      bool operator<(drobi x);
      bool operator>(drobi x);
      bool operator!=(drobi x);
      bool operator==(drobi x);
      bool operator>=(drobi x);
      bool operator<=(drobi x);
       };
int main()
{drobi a,b,x;
a.vvod(); b.vvod();
cout<<"Drob 1: ";
a.vivod();
cout<<endl;
cout<<"Drob 2: ";
b.vivod();
cout<<endl;
cout<<"A + B =";
x=a+b;
x.vivod();
x.sokr();
cout<<" Pravil'naya: ";
x.chast();
cout<<endl;
cout<<"A - B =";
x=a-b;
x.vivod();
cout<<" Pravil'naya: ";
x.chast();
cout<<endl;
cout<<"A / B =";
x=a/b;
x.vivod();
x.sokr();
cout<<" Pravil'naya: ";
x.chast();
cout<<endl;
cout<<"A * B =";
x=a*b;
x.vivod();
x.sokr();
cout<<" Pravil'naya: ";
x.chast();
cout<<endl;
cout<<"A ^ 4 =";
x=a^4;
x.vivod();
x=b^4;
x.vivod();
cout<<endl;
cout<<endl;
system("PAUSE");
return 0;
}
/* Ââîä öèôð */
void drobi::vvod()
{
cout<<"Vvedite Chislitel: "<<endl; cin>>a;
if (a==0) 
{while (a==0) 
{cout<<" Nepravil'no vvedeno chislo. Nel'zya vvodit' 0. Povtorite vvod: ";
cin>>a;}}
cout<<"Vvedite Znamenatel: "<<endl; cin>>b;
if (b<0) 
{while (b<0)
{cout<<" Nepravil'no vvedeno chislo. Nel'zya vvodit' 0. Povtorite vvod: ";
cin>>b;}}
if (b==0)
{while (b==0)
{cout<<" Nepravil'no vvedeno chislo. Nel'zya vvodit' 0. Povtorite vvod: ";
cin>>b;}}
cout<<endl;
}
/* Âûâîä äðîáè */
void drobi::vivod()
{ 
cout<<a<<"/"<<b;
cout<<endl;
}

drobi drobi ::operator +(drobi x)
{drobi d;
if ((b%x.b!=0)&&(x.b%b!=0))
d.b=b*x.b;
else if (b>x.b) d.b=b; 
else if (b<x.b) d.b=x.b; 
else d.b=b;
d.a=a*(d.b/b)+x.a*(d.b/x.b);
return d ;
}

drobi drobi ::operator -(drobi x)
{drobi d;
if ((b%x.b!=0)&&(x.b%b!=0))
d.b=b*x.b;
else if (b>x.b) d.b=b; 
else if (b<x.b) d.b=x.b; 
else d.b=b;
d.a=a*(d.b/b)-x.a*(d.b/x.b);
return d ;
}

drobi drobi ::operator /(drobi x)
{drobi d;
d.a=a*x.b;
d.b=b*x.a;
return d;
}       

drobi drobi ::operator *(drobi x)
{drobi d;
d.a=a*x.a;
d.b=b*x.b;
return d;
}

void drobi::chast()
{int x;
x=0;
if (a>b)
{x=a/b;
a=a%b;}
if (x!=0)
cout<<x<<" "<<a<<"/"<<b<<endl;
else cout<<a<<"/"<<b<<endl;
}

drobi drobi:: operator ^(int n)
{drobi d; int i;
d.a=1;
d.b=1;
for(i=1;i<=n;i++)
d=d*(*this);
return d;
}

int drobi::Nod (int x, int y)
{a=x; b=y;
    while (x!=y)
    {
        if(x>y)
            if(x%y!=0)
                x=x%y;
            else x=y;
        else
            if (y%x!=0)
                y=y%x;
            else y=x;
    }
    return x;
}

void drobi::sokr()
{
    if(a==0)
        return;
    int n=Nod(a,b);
    a=a/n;
    b=b/n;
cout<<"sokr:";
cout<<endl;
cout<<a<<"/"<<b;
cout<<endl;
}


PM MAIL   Вверх
dershokus
Дата 5.12.2012, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 7.8.2011

Репутация: 1
Всего: 1



Здравствуйте.
Для того, чтобы вам помогли:
  • Отступы добавьте.
  • Кодировку комментов исправьте.
Цитата

надо сделать >,<,==,!=,>=,<=, помогите срочно курсовая горит

Реализуйте '<','>','=='. К примеру вычитанием. Если нужно сравнить a и b, то:
  • a-b>0 => a>b
  • a-b<0 => a<b
  • a-b=0 => a=b
А все остальное вывести на основе этого. Тут кодить совсем нечего ;).

P.S.: Как вы можите поиметь доступ к приватным членам a,b из x?
PM MAIL   Вверх
NoviceF
Дата 5.12.2012, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: 2



эх, помогу человеку, вот код в удобоваримом виде smile

Код

#include <iostream>
#include <string>
using namespace std;

class drobi
{
private:
    int Nod(int x = 0, int y = 1); // Íàõîæäåíå íàèáîëüøåãî îáùåãî äåëèòåëÿ  
    int a; //÷èñëèòåëü
    int b; //çíàìåíàòåëü
public:
    drobi operator +(drobi x);
    drobi operator -(drobi x);
    drobi operator /(drobi x);
    drobi operator *(drobi x);
    void vvod();
    void vivod();
    void chast(); /*Âûäåëåíèå öåëîé ÷àñòè*/
    void sokr();
    drobi operator ^(int n);
    bool operator<(drobi x);
    bool operator>(drobi x);
    bool operator!=(drobi x);
    bool operator==(drobi x);
    bool operator>=(drobi x);
    bool operator<=(drobi x);
};

int main()
{
    drobi a, b, x;
    a.vvod();
    b.vvod();
    cout << "Drob 1: ";
    a.vivod();
    cout << endl;
    cout << "Drob 2: ";
    b.vivod();
    cout << endl;
    cout << "A + B =";
    x = a + b;
    x.vivod();
    x.sokr();
    cout << " Pravil'naya: ";
    x.chast();
    cout << endl;
    cout << "A - B =";
    x = a - b;
    x.vivod();
    cout << " Pravil'naya: ";
    x.chast();
    cout << endl;
    cout << "A / B =";
    x = a / b;
    x.vivod();
    x.sokr();
    cout << " Pravil'naya: ";
    x.chast();
    cout << endl;
    cout << "A * B =";
    x = a*b;
    x.vivod();
    x.sokr();
    cout << " Pravil'naya: ";
    x.chast();
    cout << endl;
    cout << "A ^ 4 =";
    x = a^4;
    x.vivod();
    x = b^4;
    x.vivod();
    cout << endl;
    cout << endl;
    system("PAUSE");
    return 0;
}

/* Ââîä öèôð */
void drobi::vvod()
{
    cout << "Vvedite Chislitel: " << endl;
    cin >> a;
    if (a == 0)
    {
        while (a == 0)
        {
            cout << " Nepravil'no vvedeno chislo. Nel'zya vvodit' 0. Povtorite vvod: ";
            cin >> a;
        }
    }
    cout << "Vvedite Znamenatel: " << endl;
    cin >> b;
    if (b < 0)
    {
        while (b < 0)
        {
            cout << " Nepravil'no vvedeno chislo. Nel'zya vvodit' 0. Povtorite vvod: ";
            cin >> b;
        }
    }
    if (b == 0)
    {
        while (b == 0)
        {
            cout << " Nepravil'no vvedeno chislo. Nel'zya vvodit' 0. Povtorite vvod: ";
            cin >> b;
        }
    }
    cout << endl;
}

/* Âûâîä äðîáè */
void drobi::vivod()
{
    cout << a << "/" << b;
    cout << endl;
}

drobi drobi::operator +(drobi x)
{
    drobi d;
    if ((b % x.b != 0) && (x.b % b != 0))
        d.b = b * x.b;
    else if (b > x.b) d.b = b;
    else if (b < x.b) d.b = x.b;
    else d.b = b;
    d.a = a * (d.b / b) + x.a * (d.b / x.b);
    return d;
}

drobi drobi::operator -(drobi x)
{
    drobi d;
    if ((b % x.b != 0) && (x.b % b != 0))
        d.b = b * x.b;
    else if (b > x.b) d.b = b;
    else if (b < x.b) d.b = x.b;
    else d.b = b;
    d.a = a * (d.b / b) - x.a * (d.b / x.b);
    return d;
}

drobi drobi::operator /(drobi x)
{
    drobi d;
    d.a = a * x.b;
    d.b = b * x.a;
    return d;
}

drobi drobi::operator *(drobi x)
{
    drobi d;
    d.a = a * x.a;
    d.b = b * x.b;
    return d;
}

void drobi::chast()
{
    int x;
    x = 0;
    if (a > b)
    {
        x = a / b;
        a = a % b;
    }
    if (x != 0)
        cout << x << " " << a << "/" << b << endl;
    else cout << a << "/" << b << endl;
}

drobi drobi::operator ^(int n)
{
    drobi d;
    int i;
    d.a = 1;
    d.b = 1;
    for (i = 1; i <= n; i++)
        d = d * (*this);
    return d;
}

int drobi::Nod(int x, int y)
{
    a = x;
    b = y;
    while (x != y)
    {
        if (x > y)
            if (x % y != 0)
                x = x % y;
            else x = y;
        else
            if (y % x != 0)
            y = y % x;
        else y = x;
    }
    return x;
}

void drobi::sokr()
{
    if (a == 0)
        return;
    int n = Nod(a, b);
    a = a / n;
    b = b / n;
    cout << "sokr:";
    cout << endl;
    cout << a << "/" << b;
    cout << endl;
}

PM MAIL   Вверх
maksimyshka
Дата 6.12.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.12.2012

Репутация: нет
Всего: нет



ты мне помоги еще плиз с написанием к ней логических операций

Добавлено через 36 секунд
первые я сделал как мне сказали

Добавлено через 8 минут и 28 секунд
подскажите еще раз как сделать >= и <=,а то не совсем понял
PM MAIL   Вверх
baldina
Дата 6.12.2012, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Код

bool drobi::operator<=(drobi x) {
  return *this < x || *this == x;
}

>= аналогично
PM MAIL   Вверх
math64
Дата 8.12.2012, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Это лишние действия. Нужно выделить функцию приведения к общему знаменателю - используется в сложении, вычитании и сравнении. А для неё нужно вычисление наибольшего общего делителя.
После этого, для сложения нужно сложить числители, для вычитания - вычесть, для сравнения - сравнить. Сравнение выделить в отдельную функцию, возвращающую -1, 0 или 1. В операторах сравнения вызывать функцию сравнения и сравнивать результат с 0.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.