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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.88
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
#1

Сложение дробей. - C++

10.05.2011, 22:37. Просмотров 4889. Ответов 4
Метки нет (Все метки)

Я хочу сложить массив дробей. Числитель у меня один массив а знаменательль другой массив.
Если бы у меня небыло дробей можно было бы просто написать sum+=a[i]; в цыкле.или sum=sum+a[i];
А тут я незнаю как напимать функцию сложения. Помогите а то следующая неделя зачётная а я с этим заданием не как не разберусь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2011, 22:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение дробей. (C++):

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

сложение дробей - C++
Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить функцию сложения этих дробей. Ответ должен быть несократимой дробью.

Сложение и вычитание дробей - C++
Не знаю как это можно сделать, надеюсь на вашу помощь Нужно вычеслить : \frac{1}{100}-\frac{1}{101}+\frac{1}{102}-\....+\frac{1}{10000}

Сложение обыкновенных дробей - C++
Две дроби a/b и c/d можно сложить следующим образом: a/b + c/d = (a*d + b* c)/(b*d) Например, 1/4 + 2/3 = (1*3 + 4*2)/4*3 = 11/12 ...

Сложение дробей через структуру - C++
Робота с файлами. C++.Пользователь читает файл и меняет его он сохраняеца в другом файле и наоборот!!!! 2) Слажывание дробей через...

Структура состоящая из двух дробей и методов работы с ними(сложение, вычитание) - C++
Пишем в Microsoft Visual Studio 2010 -> Win32 Console Application -> C++ Собственно задача такова - создать программу со структурой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.05.2011, 22:42 #2
Steam.dll, вообще-то достаточно кривое представление дробей. Но да ладно, не о том. Напишите функцию сложения двух дробей, а потом в цикле накапливайте в первых элементах массива сумму первой дроби с последней, с предпоследней и т.д. до второй (т.е. в цикле идём с конца и суммируем первую дробь и последнюю, на которую указывает счётчик (результат в первой), двигаем счётчик влево, складываем первую и предпоследнюю, на которую теперь счётчик указывает (результат в первой) и т.д. до второй).
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
10.05.2011, 22:57  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int znam(int x,int y)
{
    int z;
    if(x==0) z=y;
    if(y==0) z=x;
    if(x&&y!=0) z=x*y;
    return z;
}
int chis(int x,int y,int t,int l)
{
    int c,b,n;
    b=znam(t,l)/t;
    n=znam(t,l)/l;
    c=(x*b)+(y*n);
    return c;
}
Я попробывал такие функции две . Знаменателя и числителя но я не знаю как дальше. И как накапливать. И что за кривое представление дробей. Я просто многого ещё незнаю. Как можно дроби ещё представить? Ведь числитель и знаменатель одной переменной быть не могут. Или могут ?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
10.05.2011, 23:27 #4
Лучше создать структуру "Дробь", и хранить массив экземпляров этой структуры. Тогда можо спокойно написать функцию сложения двух дробей-экземпляров, и просто накапливать в первой переменной все суммы. Сейчас накидаю, как это может выглядеть...

Добавлено через 27 минут
Нечто подобное...

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
 
#define N 5
 
typedef struct Fraction
{
    int num;
    int den;
} Fraction;
 
Fraction construct_fraction(int, int);
int gcd(int, int);
void normalize_fraction(Fraction *);
Fraction frac_sum(Fraction, Fraction);
 
int main(void)
{
    Fraction frac_arr[N];
    Fraction sum = construct_fraction(0, 1);
    int temp_num, temp_den;
    int i;
 
    for (i = 0; i < N; ++i)
    {
        printf("Enter fraction %d: ", i + 1);
        scanf("%d %d", &temp_num, &temp_den);
 
        frac_arr[i] = construct_fraction(temp_num, temp_den);
    }
 
    for (i = 0; i < N; ++i)
        sum = frac_sum(sum, frac_arr[i]);
 
    printf("Sum of all fractions: %d/%d/n", sum.num, sum.den);
 
    return 0;
}
 
Fraction construct_fraction(int num, int den)
{
    Fraction result;
 
    if (den == 0)
    {
        num = 0;
        den = 1;
    }
 
    result.num = num;
    result.den = den;
 
    normalize_fraction(&result);
 
    return result;
}
 
int gcd(int a, int b)
{
    if (a == 0)
        return b;
 
    if (b == 0)
        return a;
 
    a = a > 0 ? a : -a;
    b = b > 0 ? b : -b;
 
    while (a != b)
    {
        if (a > b)
            a -= b;
        else
            b -= a;
    }
 
    return a;
}
 
void normalize_fraction(Fraction *frac)
{
    int d = gcd(frac->num, frac->den);
 
    frac->num /= d;
    frac->den /= d;
 
    if (frac->den < 0)
    {
        frac->den *= -1;
        frac->num *= -1;
    }
}
 
Fraction frac_sum(Fraction left, Fraction right)
{
    Fraction result = construct_fraction(left.num * right.den + left.den * right.num, left.den * right.den);
 
    normalize_fraction(&result);
 
    return result;
}
Steam.dll
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 131
12.05.2011, 00:05  [ТС] #5
Спасибо большое очень помогло. Но я решилсделать по своему приметивному.вроде работает.
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
86
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <fstream>
#include <time.h>
#include "9l.h"
#include <iostream>
using namespace std;
int sum(int chis1,int znam1,int chis2,int znam2);
int znam(int znam1,int znam2);
int sokrat(int x,int y);
void main()
{
 
    int n;
    printf("Vvedite kolichestvo drobey >");scanf("%d",&n);
    int i;
    int x,y;
    unsigned int *a;
    unsigned int *b;
    a=new unsigned int [n];
    b=new unsigned int [n];
    for(i=0;i<n;i++)
    {
       printf("Vvedite drob %d\n",i+1);
       scanf("%d",&a[i]);
       printf("\n-----\n");
       scanf("%d",&b[i]);
    }
    printf("\n");
    for(i=0;i<n-1;i++)
    {
      x=sum(a[n-1],b[n-1],a[i],b[i]);
      y=znam(b[n-1],b[i]);
      a[n-1]=x;
      b[n-1]=y;
    }
    sokrat(a[n-1],b[n-1]);
}
int sum(int chis1,int znam1,int chis2,int znam2)
{
    int x,y;
    if((chis1&&znam1)==0){ x=chis2;y=znam2;}
    if((chis2&&znam2)==0){ x=chis1;y=znam1;}
    else
    {
       y=znam1*znam2;
       x=(chis1*(y/znam1))+(chis2*(y/znam2));
    }
    return x;
}
int znam(int znam1,int znam2)
{
    int y;
    y=znam1*znam2;
    return y;
}
int sokrat(int x,int y)
{
    int i,k;
    k=0;
    for(i=1;i<9999999;i++)
    {
        if (x%i==0 && y%i==0)
        {
            x/=i;
            y/=i;
            k++;
        }
    }
    if(k==0)
    {
        printf("\nГЌГҐ ñîêðГ*Г№Г*ГҐГІГ±Гї!!!");
    }
     else
     {
            printf("resultat\n\n");
            printf("%d\n",x);
            printf("------\n");
            printf("%d\n",y);
     }
   
    return 0;
}
Но у меня еще одно задание Надо введённый масив отсортировать в порядке возрастания.
Как это сделать?
я сделал функцию сравнения дробей но незнаю как всё это в цикл сделать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int ret(int value,int value2)
{
    if(value==value2) return 0;
    else if(value>value2) return value;
         else return value2;
    
 
}int sootnosch(int chis1,int znam1,int chis2,int znam2)
{
    int y=znam1*znam2;
    int g1=chis1*(y/znam1);
    int g2=chis2*(y/znam2);
    int x=ret(g1,g2);
    if(x==0) printf("%d=%d\n----\n%d %d\n",chis1,chis2,znam1,znam2);
    else if(x==g1) printf("%d>%d\n----\n%d %d\n",chis1,chis2,znam1,znam2);
         else printf("%d<%d\n----\n%d %d\n",chis1,chis2,znam1,znam2);
    return 0;
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 00:05
Привет! Вот еще темы с ответами:

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

Класс дробей - C++
Кто-нибудь может проверить код (программа производит операции с дробями, сокращает их, проверяет на переполнение и переопределяет &lt;&lt;)? Не...

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

Упрощение дробей - C++
Здравствуйте! Сделал реализацию упрощения дробей. Есть две дроби. 7/6 и 3/18, когда &amp;&amp; сокращает только первую дробь. В чем ошибка? ...


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

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

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