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

нахождение среднего значения суммы дробей - C++

Восстановить пароль Регистрация
 
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
23.11.2012, 22:45     нахождение среднего значения суммы дробей #1
Здравствуйте! Дело такое, нужно, имея класс fraction с 2мя полями int nominator, int denominator ( числитель / знаменатель) соответственно, используя массив типа fraction получить от пользователя Nое количество дробей(равное размеру массива, размер может быть любой). Затем необходимо сложить все полученные дроби и найти среднее значение. Как получить ввод от пользователя значения полей класса в массив я знаю, но вот как, используя массив, найти среднее значение дробей, голову ломаю уже достаточно долго. Я понимаю, что для этого нужно сумму всех дробей поделить на количество этих дробей, но не понимаю как получить сумму всех дробей используя массив объектов.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ithyphallic
 Аватар для ithyphallic
14 / 14 / 1
Регистрация: 27.10.2012
Сообщений: 141
23.11.2012, 22:49     нахождение среднего значения суммы дробей #2
C++
1
2
3
int A[10]; ///массив из 10 элементов
...
int Sum = A[0] + A[1] + A[2] + ... + A[9];
То есть обращаетесь к каждому элементу массива. Изначально можно поставить счетчик количества элементов массива и производить сложения с помощью цикла for
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
23.11.2012, 22:51     нахождение среднего значения суммы дробей #3
ну
C++
1
2
3
4
5
6
7
8
9
10
11
fraction* a;
int n;
cin>>n;
fraction sum;
a=new fraction[n];
for (int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
sum/=n;
ну короче говоря перегружаешь +=,/n, и надо что бы был конструктор по умолчанию, и перегрузить потоковый ввод вывод, и все)

Добавлено через 41 секунду
тут у него не инт а свой класс)
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
23.11.2012, 23:03  [ТС]     нахождение среднего значения суммы дробей #4
я наверное не так выразился прошу прощения, объясню подробней. дело в том что сложить дробь простой операцией + не представляется возможным(по крайней мере с моими текущими познаниями в с++). Чтобы сложить дробь необходимо числитель 1й дроби умножить на знаменатель 2й и сложить данное произведение с произведением числителя 2й дроби на знаменатель 1й, таким образом мы найдем лишь значение числителя то есть:
totalnom = nominator1*denominator2+nominator2*denominator1. Ну а знаменатель соответственно знаменатель 1й дроби умножить на знаменатель 2й дроби denominator1*denominator2. Таким образом необходимо сложить все вводимые пользователем дроби и затем найти среднее значение дроби. я не понимаю, как, используя массив, добиться сего результата.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
23.11.2012, 23:08     нахождение среднего значения суммы дробей #5
ну опысываешь метод класса щн возращает
C++
1
2
3
4
5
fraction& operator +=(fraction& a)
{
// ну и тут складываешь
return (*this);
}
примерно так. Или вы не понимаете о чем я говорю?
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
23.11.2012, 23:11  [ТС]     нахождение среднего значения суммы дробей #6
я понимаю как описать метод класса, но как именно, какие операции там нужно произвести меня вот этот вопрос интересует. Вопрос не в том как использовать методы, а в том как именно произвести операцию сложения последовательности дробей
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
23.11.2012, 23:18     нахождение среднего значения суммы дробей #7
Эмм, вы можете описать метод, вы знаете как создаётся массив элементов, а просуммировать вы его не можете, ну как вы суммируете массив интов? Так и массив дробей. Или я не понимаю вас.

Добавлено через 2 минуты
Когда вы перегружаете метод + для дробей, то он работает то как вы его описали, и можете вызывать его в программе, и он будет выполнять действия те которые вы его научили. Так сказать) Научите оператор плюс складывать и просто складывайте дроби.
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
23.11.2012, 23:28  [ТС]     нахождение среднего значения суммы дробей #8
да я скоро сам себя понимать перестану =). дело в том, что массив интов ведь это массив обычных целых чисел и над ними не нужно производить операций предварительно, а чтобы сложить простую дробь нужно опять же произвести операции над группой интов при том не потеряв ни 1 значения, то есть знаменатель 1й дроби умножить на числитель 2й дроби + числитель 2й дроби умножить на знаменатель первой и разделить на знаменатель 1й дроби умножить на знаменатель 2й. пример:
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
#include <iostream>
using namespace std;
class fraction
{ 
 private:
 int nom,den; // числитель и знаменатель
 public:
  fraction():nom(0),den(0)
        {}
  void getfrac()
        {
        cout<<"Enter fraction : ";
        cin>>nom>>ch>>den;
        }
 
 void pl(fraction f1, fraction f2)
        {
        num=f1.nom*f2.den+f2.nom*f1.den;
        den=f1.den*f2.den;
        }
void frdisp(fraction f1,fraction f2)
        {
        cout<<f1.nom<<"/"<<f1.den<<" "<<"+"<<" "<<f2.nom<<"/"<<f2.den<<" = "
        <<nom<<"/"<<den<<"\n\n";
        }
 };
int main
{
fraction f1,f2,f3;
f1.getfrac(); // получаем значение 1й дроби
f2.getfrac(); // получаем значение 2й дроби
f3.pl(f1,f2); // складываем их
f3.frdisp(f1,f2); // выводим результат
system ("PAUSE");
return 0;
}
Добавлено через 1 минуту
а как перегрузить операцию чтобы она могла складывать дроби подробно, наглядно не покажете?
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
23.11.2012, 23:46     нахождение среднего значения суммы дробей #9
Если вам не помогут, напишите в личку, я завтра отвечу. Вы не совсем понимаете логику. Если что у меня есть класс дробей, сам писал когда-то. Там все функции есть, готовые, рабочие. Могу скинуть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 01:01     нахождение среднего значения суммы дробей
Еще ссылки по теме:

C++ Массивы. Классы. Нахождение среднего значения дробей
C++ Нахождение среднего значения дробей
C++ Нахождение среднего арифметического трех целых чисел или суммы двух вещественных

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

Или воспользуйтесь поиском по форуму:
fuzzytoozy
8 / 8 / 1
Регистрация: 23.11.2012
Сообщений: 94
24.11.2012, 01:01  [ТС]     нахождение среднего значения суммы дробей #10
я вроде придумал сам как решить задачу. В общем опишу еще раз задачу:

/*напишите функцию main используя класс fraction которая получает значения дробей от пользователя, сохраняет их в массиве типа fraction, вычисляет среднее значение и выводит результат.*/

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

сам код:

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <cmath> // äëÿ labs()
using namespace std;
class fraction
{
 private:
        int num,den; // ÷èñëèòåëü ГЁ Г§Г*Г*ìåГ*Г*òåëü
        char ch;
 public:
        fraction():num(0),den(0)
        {}
 
        void getfrac()          // ìåòîä ïîëó÷Г*ГѕГ№ГЁГ© Г§Г*Г*Г·ГҐГ*ГЁГї îò ïîëüçîâГ*òåëÿ
        {
        cout<<"Enter fraction: ";
        cin>>num>>ch>>den;
        }
 
        void sumfr(fraction f[],int size) //ìåòîä Г±ГЄГ«Г*äûâГ*ГѕГ№ГЁГ© Г§Г*Г*Г·ГҐГ*ГЁГї
        {
        num = f[0].num;
        den = f[0].den;
        for(int i = 1; i < size; i++)
        {
        num = f[i].den*num+f[i].num*den;
        den = f[i].den*den;
        }
        }
 
        void average(int s)  // äåëåГ*ГЁГҐ ïîëó÷åГ*Г*îé äðîáè Г*Г* Г°Г*çìåð Г¬Г*Г±Г±ГЁГўГ*
        {
        den=den*s;      //÷òîáû ïîäåëèòü äðîáü ГіГ¬Г*îæГ*ГҐГ¬ Г§Г*Г*ìåГ*Г*òåëü Г*Г* äåëèòåëü
        }
        void disp()const //âûâîäèì ðåçóëüòГ*ГІ Г*Г* ГЅГЄГ°Г*Г*
        {
        cout<<"average fraction value: "
        <<num<<"/"<<den<<endl;
        }
 
 
        void lowterms();
};
 
void fraction::lowterms() //ìåòîä ïðåäГ*Г*Г§Г*Г*Г·ГҐГ* äëÿ Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî
{                         //ñîêðГ*Г№ГҐГ*ГЁГї äðîáè
        long tnum,tden,temp,gcd;
        tnum = labs(num);
        tden = labs(den);
        if( tden == 0 )
        { cout<<" 0 denominator is not acceptable! "; exit(1);}
        else if( tnum == 0 )
        { num=0; den=1; return; }
        while( tnum != 0 )
        {
 
        if( tnum < tden )
        { temp=tnum; tnum=tden; tden=temp; }
 
        tnum = tnum - tden;
        }
        gcd = tden;
        num = num / gcd;
        den = den /gcd;
}
 
int main()
{
const int size = 10;
fraction fmas[size];
fraction o1;
 
for(int i = 0; i < size; i++)
{
fmas[i].getfrac(); //âûçûâГ*ГҐГ¬ ìåòîä äëÿ Г¬Г*Г±Г±ГЁГўГ*,ïîëó÷Г*ГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГї îò þçåðГ*
}
o1.sumfr(fmas,size); //ñóìèðóåì ïîëó÷åГ*Г*ûå äðîáè
o1.average(size);  //Г*Г*õîäèì ñðåäГ*ГҐГҐ Г§Г*Г*Г·ГҐГ*ГЁГҐ
o1.lowterms();    //ñîêðГ*Г№Г*ГҐГ¬ äðîáü
o1.disp();        //âûâðäèì ðåçóëüòГ*ГІ Г*Г* ГЅГЄГ°Г*Г*
 
system("PAUSE");
return 0;
}
Yandex
Объявления
24.11.2012, 01:01     нахождение среднего значения суммы дробей
Ответ Создать тему
Опции темы

Текущее время: 20:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru