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

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

Войти
Регистрация
Восстановить пароль
 
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
#1

Класс "Дробь", создать таблицу умножения - C++

22.07.2014, 02:48. Просмотров 455. Ответов 2
Метки нет (Все метки)

Классы, циклы

задание состоит вот в чем: Программа должна выводить аналог целочисленной таблицы
умножения для дробей. Пользователь вводит знаменатель, а программа
должна подобрать всевозможные целые значения числителя так, чтобы
значения получаемых дробей находились между 0 и 1. Дроби из получив-
шегося таким образом набора перемножаются друг с другом во всевоз-
можных комбинациях, в результате чего получается таблица следующего
вида (для знаменателя, равного 6):
1/6 1/3 1/2 2/3 5/6
-----------------------------------------
1/6 1/36 1/18 1/12 1/9 5/36
1/3 1/18 1/9 1/6 2/9 5/18
1/2 1/12 1/6 1/4 1/3 5/12
2/3 1/9 2/9 1/3 4/9 5/9
5/6 5/36 5/18 5/12 5/9 25/36
я что-то накодила, пыталась, лепила из того что было в интернете но все равно не работает, точнее работает неправильно. помогите разобраться! и объясните пожалуйста, сам принцип этого многоуровневого цикла, он слишком мудреный для меня


C++ (Qt)
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
#include "stdafx.h"
#include <iostream>     
#include <cmath>
using namespace std;
class Fraction
{
    private:
    
    public: 
        int numerator, denominator;
        Fraction():numerator(0), denominator(0)
        {}
        void mul_fr (Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.denominator;
            denominator = f1.denominator * f2.denominator; 
        }
        void lowterms ()
        {
            long tnum, tden, temp, gcd;
            tnum = labs(numerator); 
            tden = labs(denominator); 
            if( tden == 0 ) 
              { cout << "Недопустимый знаменатель!"; exit(1); }
            else if( tnum == 0 ) 
              { numerator=0; denominator = 1; return; }
            while(tnum !=0)
            {
              if( tnum < tden )  
                { temp=tnum; tnum=tden; tden=temp; }
                 tnum = tnum - tden; 
            }
            gcd = tden;   
            numerator = numerator / gcd; 
            denominator = denominator / gcd;
        }
        void disp_fr()const
        { cout << numerator << "/" << denominator << endl; }
};
int main()
{
        Fraction fr1, fr2, fr3;
        int number=0;
        fr1.denominator = fr2.denominator = number;
        cout << "enter denominator" << endl; cin >> number;
        for (int j = 1; j<number; j++)
        {
            fr1.numerator = j;
            fr1.denominator = number;
            fr1.lowterms();
            fr1.disp_fr();
        }
        cout << endl;
        for(int i = 1; i < number; i++)
        {
            fr2.numerator=i;
            fr2.denominator=number;
            fr2.lowterms();
            fr2.disp_fr();
        
            for(int j = 1; j < number; j++)  
            {
                fr1.numerator=j;
                fr1.denominator=number;
                fr3.mul_fr(fr1, fr2);
                fr3.lowterms();
                fr3.disp_fr();
            }
            cout<<endl;
        }
            system ("pause");
    return 0;
}
Добавлено через 11 минут
вроде я и в саму структуру цикла въехала, вроде все логично, а работает не так

Добавлено через 15 минут
заработало! нашла маленькую ошибку в функции. может кому пригодится правильное решение. задача из Лафоре ООП
C++ (Qt)
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
#include "stdafx.h"
#include <iostream>     
#include <cmath>
#include <iomanip>
using namespace std;
int number;
class Fraction
{
    private:
    
    public: 
        int numerator, denominator;
        Fraction():numerator(0), denominator(0)
        {}
        void mul_fr (Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.numerator;
            denominator = f1.denominator * f2.denominator; 
        }
        void lowterms ()
        {
            long tnum, tden, temp, gcd;
            tnum = labs(numerator); 
            tden = labs(denominator); 
            if( tden == 0 ) 
              { cout << "Недопустимый знаменатель!"; exit(1); }
            else if( tnum == 0 ) 
              { numerator=0; denominator = 1; return; }
            while(tnum !=0)
            {
              if( tnum < tden )  
                { temp=tnum; tnum=tden; tden=temp; }
                 tnum = tnum - tden; 
            }
            gcd = tden;   
            numerator = numerator / gcd; 
            denominator = denominator / gcd;
        }
        void disp_fr()const
        { cout << setw(5) << numerator  << "/" << denominator; }
};
int main()
{
        Fraction fr1, fr2, fr3;
        fr1.denominator = fr2.denominator = number;
        cout << "enter denominator" << endl; cin >> number;
        for (int j = 1; j<number; j++)
        {
            fr1.numerator = j;
            fr1.denominator = number;
            fr1.lowterms();
            fr1.disp_fr();
        }
        cout << endl;
        for(int i = 1; i < number; i++)
        {
            fr2.numerator=i;
            fr2.denominator=number;
            fr2.lowterms();
            fr2.disp_fr();
        
            for(int j = 1; j < number; j++)  
            {
                fr1.numerator=j;
                fr1.denominator=number;
                fr3.mul_fr(fr1, fr2);
                fr3.lowterms();
                fr3.disp_fr();
            }
            cout<<endl;
        }
            system ("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 02:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс "Дробь", создать таблицу умножения (C++):

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Класс "Дробь". Перегрузка оператора "==" - C++
template &lt;class T&gt; void polynomial&lt;T&gt;::refresh(){ //отбрасывающую старшие члены полинома с нулевыми коэффициентами int counter = 0;...

Создать класс комплексных чисел и ввести операции: "+", "-", "*", "/". - C++
пожалуйста-помогите написатьпрограмму!!! сижу на экзамене!!! вот само задание: создать класс комплексных чисел и ввести операции: &quot;+&quot;,...

Создать иерархию классов: родительский класс "Транспорт", класс-потомок "Техосмотр транспорта" - C++
Помогите пожалуйста написать программу Родительский класс &quot;Транспорт&quot;. Поля класса: тип транспорта, гос.номер, марка, Ф.И.О владельца,...

2
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
22.07.2014, 11:14 #2
C++
1
2
3
4
5
void mul_fr (Fraction f1, Fraction f2)
        {
            numerator = f1.numerator * f2.numerator;
            denominator = f1.denominator * f2.denominator; 
        }
тогда уж
C++
1
2
3
4
5
6
7
Fraction mul_fr (const Fraction& f1)
        {
            Fraction tmp;
            tmp.numerator = numerator *f1.numerator;
            tmp.denominator = denominator*f1.denominator;
            return tmp;
        }
в main
C++
1
2
3
4
Fraction f1;
Fraction f2;
Fraction f3;
f3 = f1.mul_fr(f2);
1
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
22.07.2014, 17:10  [ТС] #3
о, вот это совсем идеально, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2014, 17:10
Привет! Вот еще темы с ответами:

Создать класс "Шар", заданный радиусом, и определить производный класс "Окружность" - C++
Создать класс шар, заданный радиусом. Определить производный класс окружности. Предусмотреть виртуальную функцию для вычисления площади...

Создать класс "Кот" с полями "Возраст" и "Вес" - C++
Нужно сделать универсальный класс.Задание такое : Есть два кота (их может быть хоть 100) они характеризуются возрастом (int) и весом...

Ввести класс для работы с объектом "рациональная дробь" - C++
Ввести класс для работы с объектом &quot;рациональная дробь&quot;.Реализовать: а)сложение(вычитание) двух дробей; б)приведение дроби к...

Класс для работы с объектом "рациональная дробь" - C++
Надо ввести класс для работы с объектом &quot;рац.дробь&quot; и реализовать 1)умножение(деление) двух дробей 2)сравнение двух дробей.Сравнение двух...


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

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

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