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

Составить программу для деления дроби на дробь - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.73
Delm
Сообщений: n/a
18.10.2011, 20:12     Составить программу для деления дроби на дробь #1
Помогите плз:
Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить программу для деления дроби на дробь. Результат должен быть несократимой дробью.

Вроде легко,но никак не дружу с C++
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2011, 20:12     Составить программу для деления дроби на дробь
Посмотрите здесь:

Как написать класс «несократимая дробь» (т.е. дроби 2/4, 4/8 и т.п. есть дробь 1/2)? C++
Составить программу для нахождения суммы в виде несократимой дроби. C++
C++ N и M числитель и знаменатель дроби, составить программу, позволяющая сократить эту дробь.
Составить программу , позволющую сократить дробь. C++
C++ составить программу печати n-го элемента в виде обыкновенной несократимой дроби
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fsp2112
 Аватар для fsp2112
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 36
18.10.2011, 20:30     Составить программу для деления дроби на дробь #2
С++ вроде все округляет до 5 знаков после точки?(сам пока не силен, но могу попробовать)
Delm
Сообщений: n/a
18.10.2011, 20:54     Составить программу для деления дроби на дробь #3
Даже незнаю насчет округления в Си...
Я в нем полный 0 ^_^
Поразбирался бы сам,да времени нет совсем...
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
18.10.2011, 21:43     Составить программу для деления дроби на дробь #4
Здесь не нужно округление
По правилам деления дробей А/В на C/D ты получишь дробь с числителем AD и знаменателем BC. Находишь НОД(AD, BC) и делишь на него числитель и знаменатель
MonteCristo
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 27
18.10.2011, 22:01     Составить программу для деления дроби на дробь #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
#include "stdafx.h"
#include <iostream>
#include<stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <math.h>
#include <cmath>
 
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double chesl,znamen,chesl1,znamen1,s,s1,r,r1,e;
printf("Введите числитель 1 -ой дроби: ");
scanf("%lf",&chesl);
printf("Введите знаменатель 1 - ой дроби: ");
scanf("%lf",&znamen);
printf("Введите числитель 2 -ой дроби ");
scanf("%lf",&chesl1);
printf("Введите знаменатель 2 - ой дроби ");
scanf("%lf",&znamen1);
 
s = chesl / znamen;
s1 = chesl1 / znamen1;
 
r= chesl * znamen1;
r1 = chesl1 * znamen;
e = r /r1;
    
 
    printf("%.2lf \n",r);
    printf("-----\n");
    printf("%.2lf \n",r1);
 
    printf("|Ответ: ");
    printf("%.4lf \n",e);
return 0;
}
fsp2112
 Аватар для fsp2112
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 36
18.10.2011, 22:02     Составить программу для деления дроби на дробь #6
Цитата Сообщение от aeshes Посмотреть сообщение
Здесь не нужно округление
По правилам деления дробей А/В на C/D ты получишь дробь с числителем AD и знаменателем BC. Находишь НОД(AD, BC) и делишь на него числитель и знаменатель
А может быть так?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<iostream.h>
#include<math.h>
main()
{
      int a,b,c,d;
      double r;
     printf("a=");
     scanf("%d",&a);
     printf("b=");
     scanf("%d",&b);
     printf("c=");
     scanf("%d",&c);
     printf("d=");
     scanf("%d",&d);
          r=(a/b)/(c/d);
      printf("\nR=%f",r);
      }
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.10.2011, 22:10     Составить программу для деления дроби на дробь #7
aeshes абсолютно верно весь алгоритм сказала. Делить не надо, надо получить числитель и знаменатель несократимой дроби. Если нужны алгоритмы для НОД, то вот
http://www.cyberforum.ru/cpp-beginne...ead365854.html
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
18.10.2011, 22:11     Составить программу для деления дроби на дробь #8
MonteCristo, fsp2112, в своих решениях вы получаете десятичную дробь вида 0.5
А по условию задачи нужно из дробей 1/8 и 1/4 получить дробь вида 1/2 (т.е. обыкновенную дробь), а не 0.5

а Thinker спасибо за алгоритмы Евклида)
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.10.2011, 22:21     Составить программу для деления дроби на дробь #9
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
#include <stdio.h>
#include <stdlib.h>
 
typedef struct ratcz
{
    int chislit;
    int znamenat;
};
 
struct ratcz *delenie(struct ratcz *delimoe, struct ratcz *delitel)
{
    struct ratcz *z;
    int n = 1;
    z = (struct ratcz*) malloc(sizeof(struct ratcz));
    z->chislit = delimoe->chislit * delitel->znamenat;
    z->znamenat = delimoe->znamenat * delitel->chislit;
 
    if (delimoe->chislit < 0 && delitel->chislit < 0)
    {
        z->chislit = ~z->chislit + 1;
        z->znamenat = ~z->znamenat + 1;
    }
 
    while ( (n <= z->chislit / 2) || (n <= z->znamenat / 2) )
    {
        if ( !(z->chislit % n) && !(z->znamenat % n) )
        {
            z->chislit /= n;
            z->znamenat /= n;
            n = 1;
        }
        ++n;
    }
    return z;
}
 
int main ()
{
    struct ratcz   x, y, *z;
 
    printf("введите дробь х, если число отрицательное, то числитель со знаком \"-\"\n");
    printf("числитель = ");
    scanf("%i", &x.chislit);
    printf("\nзнаменатель = ");
    while ((scanf("%u", &x.znamenat) == 1) && x.znamenat <= 0)
        printf("\nзнаменатель не может равняться 0\n");
 
    printf("введите дробь y, если число отрицательное, то числитель со знаком \"-\"\n");
    printf("числитель = ");
    scanf("%i", &y.chislit);
    printf("\nзнаменатель = ");
    while ((scanf("%u", &y.znamenat) == 1) && y.znamenat <= 0)
        printf("\nзнаменатель не может равняться 0\n");
 
    z = delenie(&x, &y);
 
    printf("%i/%i : ", x.chislit, x.znamenat);
    printf("%i/%i = ", y.chislit, y.znamenat);
    printf("%i/%i\n", z->chislit, z->znamenat);
    free(z);
    return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.10.2011, 22:25     Составить программу для деления дроби на дробь #10
Цитата Сообщение от alkagolik Посмотреть сообщение
C
1
2
3
4
5
6
7
        if ( !(z->chislit % n) && !(z->znamenat % n) )
        {
            z->chislit /= n;
            z->znamenat /= n;
            n = 1;
        }
        ++n;
По-моему оптимальнее так:

C
1
2
3
4
5
6
7
        if ( !(z->chislit % n) && !(z->znamenat % n) )
        {
            z->chislit /= n;
            z->znamenat /= n;
        }
        else
            ++n;
Зачем с начала деление начинать. И бежать можно до корня из минимума двух значений - числителя и знаменателя
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.10.2011, 22:33     Составить программу для деления дроби на дробь #11
Thinker, безусловно. я просто не ставил задачи оптимизировать. как-то "наскоро" нацарапал. Оптимизацией пусть ТС занимается
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.10.2011, 22:35     Составить программу для деления дроби на дробь #12
Цитата Сообщение от alkagolik Посмотреть сообщение
Thinker, безусловно. я просто не ставил задачи оптимизировать. как-то "наскоро" нацарапал. Оптимизацией пусть ТС занимается

Не по теме:

Лукавите немного, как мне кажется, вы сами любите более оптимальные алгоритмы писать Это уже в крови должно быть

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.10.2011, 22:41     Составить программу для деления дроби на дробь #13
Thinker, болен я может сказывается. верите, вскакиваю ночью весь в жару и начинаю править указатели у себя в заголовках надо срочно в отпуск.
Thinker
18.10.2011, 22:43
  #14

Не по теме:

Ну вот... Сочувствую... Выздоравливайте!!!

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
18.10.2011, 23:23     Составить программу для деления дроби на дробь #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
начальное n = 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
struct ratcz *delenie(struct ratcz *delimoe, struct ratcz *delitel)
{
    struct ratcz *z;
    int n = 2;
    z = (struct ratcz*) malloc(sizeof(struct ratcz));
    z->chislit = delimoe->chislit * delitel->znamenat;
    z->znamenat = delimoe->znamenat * delitel->chislit;
 
    if (delimoe->chislit < 0 && delitel->chislit < 0)
    {
        z->chislit = ~z->chislit + 1;
        z->znamenat = ~z->znamenat + 1;
    }
 
    while ( (n <= z->chislit / 2) || (n <= z->znamenat / 2) )
    {
        if ( !(z->chislit % n) && !(z->znamenat % n) )
        {
            z->chislit /= n;
            z->znamenat /= n;
        }
        else
            ++n;
    }
    return z;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2016, 10:54     Составить программу для деления дроби на дробь
Еще ссылки по теме:

Составить программу для деления дроби на дробь C++
Составить программу для умножения дроби на дробь с использованием пользовательских функций C++
Составить программу печати n-го элемента в виде обыкновенной несократимой дроби C++

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

Или воспользуйтесь поиском по форуму:
_Bes_
0 / 0 / 1
Регистрация: 20.01.2016
Сообщений: 41
21.01.2016, 10:54     Составить программу для деления дроби на дробь #16
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
// some exercises
 
#include <iostream>
#include <cmath>
#include <process.h>
 
using namespace std;
 
//---------------------------------------------
 
class fraction
{
private:
    int chis;
    int znam;
public:
    fraction (): chis (0), znam (1)
    {  }
    fraction (int ch, int zn): chis (ch), znam (zn)
    {  }
    void getfrac ()
    {
        cout << "Введите числитель: "; cin >> chis;
        while (true)
        {
            cout << "Введите знаменатель: "; cin >> znam;
            if (znam == 0)
                cout << "Попытка деления на 0!!!\n";
            else
                break;
        }
    }
    void showfrac () const
    { cout << chis << '/' << znam; }
    fraction operator / (const fraction& f1) const
    {
        int chtemp = chis * f1.znam;
        int zntemp = znam * f1.chis;
        return lowterms (fraction(chtemp, zntemp));
    }
    fraction lowterms (fraction) const;
};
 
fraction fraction::lowterms (fraction f1) const
{
    int chtemp, zntemp, temp;
    chtemp = abs (f1.chis);
    zntemp = abs (f1.znam);
    if (zntemp == 0)
    {
        cout << "\nОшибка! Попытка деления на 0!!!\n";
        exit (1);
    }
    if (chtemp == 0)
    { return fraction (0, 1); }
    while (chtemp != 0)
    {
        if (chtemp < zntemp)
        { temp = chtemp; chtemp = zntemp; zntemp = temp; }
        chtemp -= zntemp;
    }
    return fraction (f1.chis / zntemp, f1.znam / zntemp); 
}
 
//---------------------------------------------
 
int main ()
{
    setlocale (LC_ALL, "Rus");
    fraction f1, f2, f3;
    cout << "Введите дробь f1:\n";
    f1.getfrac ();
    cout << "Введите дробь f2:\n";
    f2.getfrac ();
    f3 = f1 / f2;
    cout << "Результат деления f1 на f2: "; f3.showfrac ();
    cout << endl;
    return 0;
}
Yandex
Объявления
21.01.2016, 10:54     Составить программу для деления дроби на дробь
Ответ Создать тему
Опции темы

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