Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
#1

Классы дробей С++ - C++

24.03.2011, 17:29. Просмотров 1994. Ответов 14
Метки нет (Все метки)

Здравствуйте, помогите доделать класс дробей! Дан массив дробей, 1) нужно сравнить дроби, путём привидения к общему знаменателю 2) найти сумму дробей 3) найти максимальный 4) найти минимальный элемент, max и min находится путём преобразования в вещественное. Действия надо выполнить в подпрограммах, но я пока делаю в основной ф-и, чтобы понять, с классами работаю впервые.
всё работает до этой строки c.putznam()=x[i1].putznam()*x[i2].putznam();


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#include <iostream.h>
#define N 5
 
class Rat
{
private:
    int chisl, znam;
    float a;
public:
    void getch (int x) {chisl=x;}
    void getzn (int y) {znam=y;}
    int putchisl ();
    int putznam ();
    void floating ();
    ~Rat ();
};
int Rat :: putchisl () {return this->chisl;}
int Rat :: putznam  () {return znam;}
void Rat::floating() { a=(float)chisl/(float)znam;}
 
Rat :: ~ Rat () {}
 
void  main()
{
    Rat x[N], c, d, sum;
    int ch, zn, i, i1, i2;
    for (i=1;i<N;i++)
    {   
    cout<<"\nEnter drob:";
    cin>>ch>>zn;
    x[i].getch(ch);
    x[i].getzn(zn);
    cout<<x[i].putchisl()<<'/'<<x[i].putznam();
    }
 
    cout<<"\nvvedite i1=";
    cin>>i1;
    cout<<"\nvvedite i2=";
    cin>>i2;
    cout<<x[i1].putchisl()<<'/'<<x[i1].putznam()<<"\n";
    cout<<x[i2].putchisl()<<'/'<<x[i2].putznam()<<"\n";
    if ((x[i1].putznam()==(x[i2].putznam()) || (x[i1].putchisl()!=x[i2].putchisl())))
    {
        c.putznam()=x[i1].putznam()*x[i2].putznam();
        cout<<c.floating();
        d.putznam()==x[i1].putznam()*x[i2].putznam();
        
        c.putchisl()==x[i1].putchisl ()*x[i2].putznam();
        d.putchisl()==x[i2].putchisl ()*x[i1].putznam();
    }   
    if(c.putchisl()==d.putchisl())
        puts("a=b");
    if(c.putchisl()>d.putchisl ())
        puts("a>b");
    if(c.putchisl()<d.putchisl ())
        puts ("a<b");
    
    sum.putchisl()==x[i1].putchisl()*x[i2].putznam()+x[i2].putchisl()*x[i1].putznam();
    sum.putznam()==x[i1].putchisl()*x[i2].putznam();
    cout<<"sum rational:";
    cout<<sum.putchisl()<<sum.putchisl();*/
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 17:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы дробей С++ (C++):

Массивы. Классы. Нахождение среднего значения дробей - C++
Напишите функцию main(), которая получает случайные дробные числа от пользователя, сохраняет их в массиве типа fraction, вычисляет среднее...

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void SetX(int...

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы - C++
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Наследование, базовые классы и производные классы - C++
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.) - C++
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Классы, включающие другие классы - C++
Столкнулся вот с таким кодом: #include &lt;iostream&gt; class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 17:41 #2
код ошибки не ; expected???

Numerator - числитель по-английски, а denоminator - знаменатель


Почему нужно аккуратно относится к форматированию программного кода???

if ( ( x[i1].putznam() == ( x[i2].putznam() ) || ( x[i1].putchisl() != x[i2].putchisl() ) ) )

Не в этом ли причина?
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
24.03.2011, 17:43  [ТС] #3
ошибка такая error C2106: '=' : left operand must be l-value
когда ставлю "==" она исчезает, но прога всё равно не работает
я знаю, но chisl и znam привычней

такая ошибка в каждой строке:

c.putchisl()=x[i1].putchisl ()*x[i2].putznam();
d.putchisl()=x[i2].putchisl ()*x[i1].putznam();

мне бы понять как правильно записать результат, в новую дробь, чтобы сравнивать
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 18:05 #4
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
ошибка такая error C2106: '=' : left operand must be l-value
когда ставлю "==" она исчезает, но прога всё равно не работает
я знаю, но chisl и znam привычней
Да, привычней. Но! 1ое - это выглядит глупо, рунглиш - всегда выглядит глупо. 2ое - у тебя функция возвращения числителя, однообразно названа с функцией получения символа при вводе с клавиатуры xD
getch(), может лучше getNum, а еще лучше идентификаторы с обозначением типа данных intGetNumerator() - 100 баллов за понятность xD

Добавлено через 4 минуты
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
ошибка такая error C2106: '=' : left operand must be l-value
когда ставлю "==" она исчезает, но прога всё равно не работает
я знаю, но chisl и znam привычней

такая ошибка в каждой строке:

c.putchisl()=x[i1].putchisl ()*x[i2].putznam();
d.putchisl()=x[i2].putchisl ()*x[i1].putznam();

мне бы понять как правильно записать результат, в новую дробь, чтобы сравнивать
ты чего это??? как ты можешь значение установить(назначить) выражению???

у тебя функция putchisl ВОЗВРАЩАЕТ числитель...
тебе нужно написать метод класса, который внутри класса будет устанавливать значение переменной

int fraction::intSetNumeratorFunc(int intValue) {

this->intNumerator = intValue;

};

как-то так

Добавлено через 13 минут
ооо нашел... ты перепутал понятия...

void getch (int x) {chisl=x;}
int putch() {return this->chisl}

GET - получить... PUT - положить, не верная трактовка для действия установки значения, лучше использовать слово SET.

c.getch( x[i1].putchisl () * x[i2].putznam() );
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
24.03.2011, 18:59  [ТС] #5
пытаюсь вывести знаменатель новой дроби cout<<c.getzn(zn);
выдаёт ошибку:
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)

проблема, наверное в void getzn (int y) {znam=y;}

я сделал так:
int getch (int x) {return chisl=x;}
int getzn (int y) {return znam=y;}
ошибок нет, но всё равно работает неправильно
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 19:25 #6
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
пытаюсь вывести знаменатель новой дроби cout<<c.getzn(zn);
выдаёт ошибку:
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'void' (or there is no acceptable conversion)

проблема, наверное в void getzn (int y) {znam=y;}

я сделал так:
int getch (int x) {return chisl=x;}
int getzn (int y) {return znam=y;}
ошибок нет, но всё равно работает неправильно
Курс молодого бойца.
Указание на тип данных перед именем функции есть обозначение типа данных ею возвращаемых.

Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int intFunction00() {
 
   int g = 15 + 25;
   return g;
 
}
 
void voidFunction00(int value) {
 
   int g = value + 25;
   return g;
}
 
void main() {
   cout << intFunction00();       // эта строчка выведет значение выражения int g = 15 + 25;
   cout << voidFunction00(15);  // компиляция ЭТОЙ строчки вызовет такую же ошибку как и у тебя, 
                                           // потому что это функция ничего не возвращает. Вернее она пытается
                                           // возвратить что-то, но возвращает пустоту, так как указано что она 
                                           // ничего не должна возвращать [I][B]void[/B] voidFunction00()[/I]
}
На экране будет выведено значение выражения 15+25, т.е. 40.
Инструкция return g; говорит что конкретно будет возвращено этой функцией(т.е. переменная g).
int перед именем этой функции говорит, что возвращен будет результат типа int.

Объясняю еще раз, что надо сделать тебе. Создать четыре метода класса, два из которых принимают значения, два возвращают. Подумай.
Методы, которые принимают значения, должны ли они что-либо возвращать? По-хорошему - да, и должны они возвращать код выполнения функции, так делается, если у тебя сложная программа, которая пишет свой лог для отладки системы или еще что-то. В твоем же случае это не обязательно.

int intGetNumerator(); int intGetDenominator(); - для получения переменных
void voidSetNumerator(int intValue); void voidSetDenominator(int intValue); - для установки значений переменных.

Советую почитать "Дейтел и Дейтел. Как программировать на С++", очень полезно для новичков.
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
24.03.2011, 20:49  [ТС] #7
void setnum (int x) {num=x;}
void setdenum (int y) {znam=y;}
int getnum ();
int getdenum ();

~Rat ();

int Rat :: getnum () {return this->num;} // для получения return не нужен {num;}
int Rat :: getdenum () {return denum;}
void Rat :: setnum () { }; // что писать надо в {} return num?
void Rat :: setdenum () {}
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 20:55 #8
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
void setnum (int x) {num=x;}
void setdenum (int y) {znam=y;}
int getnum ();
int getdenum ();

~Rat ();

int Rat :: getNum () {return this->num;} // для получения return не нужен {num;} ??? что??? xD
int Rat :: getDenom () {return this->denom;}
void Rat :: setNum (int Value) { this->num = Value; } // что писать надо в {} return(???)
здесь ничего не надо писать в return, функции вида void НАЗВАНИЕФУНКЦИИ () - ничего не возвращают...
void Rat :: setDenom (int Value) { this->denom = Value; }
починено...

читай учебник xD

Почему Rat?
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
24.03.2011, 21:16  [ТС] #9
rational - рациональное число

что такое Value?

та книжку скачал только)
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 21:25 #10
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
rational - рациональное число

что такое Value?

та книжку скачал только)
Значение которое ты хочешь установить числителю или знаменателю.
Value - значение
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
24.03.2011, 21:36  [ТС] #11
if(c.setNum() > d.setNum()) // что в скобочках писать надо?

что бы ни ввёл одни ошибки(
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 21:50 #12
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
if(c.setNum() > d.setNum()) // что в скобочках писать надо?

что бы ни ввёл одни ошибки(
Откуда ты взял этот пример? xD С каждым твоим вопросом, происхождение этого кода становится все туманнее и туманнее...

c.setNum() - функция установки значения числителя. c.getNum() - функция получения числителя.
c.getNum() = с.Num;
c.setNum(15) все равно что c.Num = 15.

ЧИТАЙ КНИЖКУУУ xD
Mr.Whittier
0 / 0 / 0
Регистрация: 14.02.2011
Сообщений: 33
24.03.2011, 21:57  [ТС] #13
у нас классов почти не было, это следующая тема, нам для ознакомления дал преподаватель задание переделать свои структуры в классы, показала нам всего 1 пример, вот я на основе этого примера, путём переделки, подстановки набрал код без осмысления, что я набрал хD
спасибо, сейчас хоть начал понимать, что набрал, но ещё не до конца)
MopkoBHblu
10 / 10 / 0
Регистрация: 23.03.2011
Сообщений: 63
24.03.2011, 22:02 #14
ок xD удачи
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
27.03.2011, 15:09 #15
Цитата Сообщение от Mr.Whittier Посмотреть сообщение
дал преподаватель задание переделать свои структуры в классы
Какой умный преподаватель
структура и класс это почти одно и тоже
разница в доступе
в классе по умолчанию все элементы частные
а в структуре общие
т.е. вся переделка
поменять struct на class
и добавить public:
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2011, 15:09
Привет! Вот еще темы с ответами:

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Классы возможностей(Mixin классы) - C++
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...

Сравнение дробей - C++
Здравствуйте, очень нужна ваша помощь. Помогите, пожалуйста с сравнение дробями. больше, меньше, равно. #include &quot;stdafx.h&quot; ...

Сложение дробей. - C++
Я хочу сложить массив дробей. Числитель у меня один массив а знаменательль другой массив. Если бы у меня небыло дробей можно было бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.03.2011, 15:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru