Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
 Аватар для zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38

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

26.02.2011, 22:24. Показов 5557. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2011, 22:24
Ответы с готовыми решениями:

Создать массив дробей
Здравствуйте! У меня есть класс двумерного массива и класс дробь. Нужно их обьединить и создать массив дробей. Не понимаю, как это...

Массив дробей
Помогите, пожалуйста. Даны два массива А и В, элементы которых обыкновенные дроби. Сформировать массивы C и D, элементы которых вычисляются...

Как отсортировать массив дробей
Даны дроби P1/Q1, P2/Q2, ... , Pn/Qn (Pi, Qi - натуральные). Составить программу, которая приводит эти дроби к общему знаменателю и...

6
 Аватар для dyosick
64 / 64 / 17
Регистрация: 25.08.2008
Сообщений: 178
26.02.2011, 22:38
У тебя все считает правильно. В чем проблема?
Для удобства изменил:
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  [ТС]
Цитата Сообщение от dyosick Посмотреть сообщение
У тебя все считает правильно. В чем проблема?
Нет, в коде есть проблема, вот картинка:
Миниатюры
Массив из дробей  
0
 Аватар для Mayonez
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
26.02.2011, 22:52
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  [ТС]
Цитата Сообщение от 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
392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
26.02.2011, 23:08
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
10 / 12 / 4
Регистрация: 22.10.2012
Сообщений: 120
19.11.2012, 19:38
а как в массив записать дроби не подскажите?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2012, 19:38
Помогаю со студенческими работами здесь

Массив обыкновенных дробей + модуль
Дан массив обыкновенных дробей найти : 1)Вычисление среднего арифметического положительных элементов. 2)Сортировка элементов массива...

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

Записать числители дробей в один массив, а знаменатели в другой
С клавиатуры вводится строка с дробями вида x/y. Нужно записать числители дробей в один массив, а знаменатель в другой. Заранее спасибо!

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru