Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
#1

Массив из дробей - C++

26.02.2011, 22:24. Просмотров 922. Ответов 6
Метки нет (Все метки)

Добрый вечер! Необходимо ввести дробные числа, которые хранятся в массиве, сложить их и найти среднее.
Написал код:
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
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
//////////////////////////////////////////////////////////////////////////////////////////////////
class fraction
{
private:
    int numenator;              // числитель
    int denominator;            // знаменатель
    char ch;                    // параметр для приема слэш при вводе дроби
    int x;
    int y;
public:
    fraction()                  // конструктор без аргументов
    { 
        numenator = 0; 
        denominator = 0;
    }
    fraction(int num, int den)
    {
        numenator = num;
        denominator = den;
    }
    void getData()                      // получает значения для дробей от пользователя
    {
        cout << "Введите дробь ";
        cin >> numenator >> ch >> denominator;
    }
    void showData()                             // выводит значение дроби на экран
    {
        cout << numenator << '/' << denominator << endl;
    }
    void averData(fraction f1, fraction f2)
    {
        numenator =f1. numenator * f2.denominator + f1.denominator * f2.numenator;
        denominator = f1.denominator * f2.denominator;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int MAX = 3;
    fraction f1 [MAX];
    fraction f2 (1, 1);
    for(int i = 0; i < MAX; i++)
    {
        f1[i].getData();
    }
    /*for(int j =0; j < MAX; j++)
    {
        f1[j].showData();
    }*/
    for(int j = 0; j < MAX; j++)
    {
        f2.averData(f2, f1[j]);
    }
    f2.showData();
    system("pause");
    return 0;
}
В программе знаменатель вычисляется верно, а вот к числителю прибавляется значение знаменателя. К сожалению знания, пока не такие хорошие, не понимаю, как обнулять знаменатель, чтобы он не участвовал в расчете числителя, но не терялся в расчете выражения знаменателя.

P.S. Среднее значение не рассчитывал еще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 22:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив из дробей (C++):

Как представить массив состоящий из дробей ? - C++
и потом нужно максимальную дробь найти в этом массиве

создать массив из дробей и передать его в функцию, которая изменит каждый чётный элемент путём добавления следующего за этой дробью - C++
Надо создать массив из дробей и передать его в функцию, которая изменит каждый чётный элемент путём добавления следующего за этой дробью....

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

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

Умножение дробей - C++
где П - произведение. то есть сначала делим i+1 на i+2 (при i=2). этот результат умножаем на i+1 на i+2 (при i=3) и так далее. n- число...

Вывод дробей - C++
Всем доброго времени суток! Дан такой коТ (вырезки): int N = 9; double s = 2 / (N - 1))*(2 / (N - 1))*(2 / 4 - 1 / 4); Но...

6
dyosick
62 / 62 / 6
Регистрация: 25.08.2008
Сообщений: 178
26.02.2011, 22:38 #2
У тебя все считает правильно. В чем проблема?
Для удобства изменил:
C++
1
2
3
4
5
void getData()                                          // получает значения для дробей от пользователя
        {
                cout << "Enter fraction ";
                cin >> numenator>>'/'>> denominator;
        }
на
C++
1
cin >> numenator>> denominator;
1
zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
26.02.2011, 22:50  [ТС] #3
Цитата Сообщение от dyosick Посмотреть сообщение
У тебя все считает правильно. В чем проблема?
Нет, в коде есть проблема, вот картинка:
0
Миниатюры
Массив из дробей  
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
26.02.2011, 22:52 #4
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int NSD (int a, int b)
{
   if (a%b == 0) return b;
   return NSD(b, a%b);
}
 
int NSK (int a, int b)
{
   return a*b/NSD(a, b);
}
 
class fraction
{
private:
        int numenator;                        
        int denominator;                   
        char ch;                                     
        int x;
        int y;
public:
        fraction()                                   
        { 
                numenator   = 1; 
                denominator = 1;
        }
        fraction(int num, int den)
        {
                numenator = num;
                denominator = den;
        }
        void getData()                                        
        {
                cout << "Введите дробь: ";
                cin >> numenator >> ch >> denominator;
        }
        void showData()                                                        
        {
                cout << numenator << '/' << denominator << endl;
        }
        fraction averData(fraction f2)
        {
                int nsk     = NSK(denominator, f2.denominator);
                numenator   = (denominator/nsk)*numenator + 
                              (f2.denominator/nsk)*f2.numenator;
                denominator = nsk;
                return *this;
        }
};
 
int main()
{
        setlocale(LC_ALL, "Russian");
        const int MAX = 3;
        fraction f1 [MAX];
        
        for(int i = 0; i < MAX; i++)
        {
                f1[i].getData();
        }
 
        for(int j = 1; j < MAX; j++)
                f1[0].averData(f1[j]);
        
        f1[0].showData();
        system("pause");
        return 0;
}


Добавлено через 1 минуту
zabuka, сделать полностью?
1
zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
26.02.2011, 22:59  [ТС] #5
Цитата Сообщение от Mayonez Посмотреть сообщение
сделать полностью?
Нет, спасибо! Если возможно, лучше объясните смысл:
C++
1
2
3
4
5
6
7
8
9
10
int NSD (int a, int b)
{
   if (a%b == 0) return b;
   return NSD(b, a%b);
}
 
int NSK (int a, int b)
{
   return a*b/NSD(a, b);
}
и использование в расчете.
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
26.02.2011, 23:08 #6
zabuka, первая функция ищет наибольший общий делитель (НОД)
вторая - НОК.
Чтобы сложить две дроби нужно иметь новый знаменатель - НОК двух предидущих;
это для того, чтобы знаменатели не так быстро росли (как у вас при их умножении)

Добавлено через 1 минуту
вот код полностью
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
84
85
#include <iostream>
#include <cmath>
 
using namespace std;
 
int NSD (int a, int b)
{
   if (a%b == 0) return b;
   return NSD(b, a%b);
}
 
int NSK (int a, int b)
{
   return a*b/NSD(a, b);
}
 
class fraction
{
private:
        int numenator;                        
        int denominator;                   
        char ch;                                     
        int x;
        int y;
public:
        fraction()                                   
        { 
                numenator   = 1; 
                denominator = 1;
        }
        fraction(int num, int den)
        {
                numenator = num;
                denominator = den;
        }
        void getData()                                        
        {
                cout << "Введите дробь: ";
                cin >> numenator >> ch >> denominator;
        }
        void showData()                                                        
        {
                cout << numenator << '/' << denominator << endl;
        }
        fraction averData(fraction f2)
        {
                int nsk     = NSK(denominator, f2.denominator);
                numenator   = (denominator/nsk)*numenator + 
                              (f2.denominator/nsk)*f2.numenator;
                denominator = nsk;
                return *this;
        }
        
        fraction dil(int i)
        {
                denominator *= i;
        }
        
        void skorot()
        {
                int dil = NSD(numenator, denominator);
                numenator   /= dil;
                denominator /= dil;
        }
};
 
int main()
{
        setlocale(LC_ALL, "Russian");
        const int MAX = 3;
        fraction f1 [MAX];
        
        for(int i = 0; i < MAX; i++)
                f1[i].getData();
 
        for(int j = 1; j < MAX; j++)
                f1[0].averData(f1[j]);
                
        f1[0].dil(MAX);
        f1[0].skorot();
        cout << "Среднее арифметическое равно: ";
        f1[0].showData();
        system("pause");
        return 0;
}
1
alexminin007
9 / 9 / 1
Регистрация: 22.10.2012
Сообщений: 117
19.11.2012, 19:38 #7
а как в массив записать дроби не подскажите?
0
19.11.2012, 19:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2012, 19:38
Привет! Вот еще темы с ответами:

Классы дробей С++ - C++
Здравствуйте, помогите доделать класс дробей! Дан массив дробей, 1) нужно сравнить дроби, путём привидения к общему знаменателю 2) найти...

Сложение дробей - C++
Как сложить две дроби? #include&lt;iostream&gt; using namespace std; class Drob { private: float chislet, znamenat;

сокрощение дробей - C++
Нужно сложить две дроби и по возможности сокротить, сложение то работает. А сокротить не получается, зависает using namespace std; ...

Упрощение дробей - C++
int chis,znam; int result1,result2; cout &lt;&lt; &quot;Введите числитель и знаменатель: &quot; &lt;&lt; endl; cin &gt;&gt; chis; cout &lt;&lt; &quot;----&quot;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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