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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Функции с передачей разного количества параметров http://www.cyberforum.ru/cpp-beginners/thread1231785.html
есть код: #include <iostream> using namespace std; void Char(int num, char a1, char a2, ...); void Int(int num, int a1, int a2,...); int main() { Char(5, 'f', 's', 'h', 'j', 't'); cout << endl; Int(4, 6, 7, 3, 7);
C++ Написать перегруженные функции для нахождения произведения Написать перегруженые функции для нахождения произведения трех переданных чисел (для чисел типа int, long, double) Буду очень благодарен за помощь!:wall: http://www.cyberforum.ru/cpp-beginners/thread1231764.html
Запись и чтение структуры в/из файла C++
Столкнулся с очередной проблемой. Есть несколько участков кода: Структура "Абонент": struct Subscriber { char FIO ; int YearOfBirth; char Town ; char Number ;
Что будет в переменных в результате выполнения кода? C++
программный код: int z=6, x=-2, y=4; z+=y=5+x--; Что будет в переменных в результате выполнения?
C++ Классы, разобраться с объявлением объектов http://www.cyberforum.ru/cpp-beginners/thread1231737.html
я написала вот такую программу по условию: Класс должен содержать методы для ввода и вывода данных объектов, а также для выполнения арифметических операций. Кроме того, необходимо включить в состав класса функцию, приводящую дробь к несократимому виду. Функция должна находить наибольший общий делитель числителя и знаменателя и делить числитель и знаменатель на это значение. Можно вызывать...
C++ Регулярные выражения с игнорированием спецсимволов Здравствуйте. Решил попробовать регулярные выражения в Visual C++ 2010. Задача такая: пользователь вводит (считывается параметр) текст и его нужно преобразовать в регулярку с игнорированием всех спецсимволов. Использую стандартную библиотеку <regex>. Предположим что пользователь ввел: .txt, хотя в данном случае он сработает правильно, но если в исходной строке (l) вместо точки будет другой... подробнее

Показать сообщение отдельно
Pari
40 / 3 / 0
Регистрация: 24.11.2013
Сообщений: 139
22.07.2014, 02:48     Класс "Дробь", создать таблицу умножения
Классы, циклы

задание состоит вот в чем: Программа должна выводить аналог целочисленной таблицы
умножения для дробей. Пользователь вводит знаменатель, а программа
должна подобрать всевозможные целые значения числителя так, чтобы
значения получаемых дробей находились между 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru