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

Целочисленная таблица умножения дробей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как использовать указатели? http://www.cyberforum.ru/cpp-beginners/thread916649.html
проблемы с указателями как правильно использовать, подскажите? #include <iostream> using namespace std; template <class T> struct Node { T value; Node *son; Node *brother; Node()
C++ Графика: Узор образован 20 вложенными квадратами Добрый вечер! На практике дали такое задание. Начертить узор. Узор образован 20 вложенными квадратами. Стороны первого квадрата параллельны осям координат экрана и равны 60. Вершины каждого... http://www.cyberforum.ru/cpp-beginners/thread916647.html
C++ Как написать программу под эти условия
Суть в чём: есть список товара (багет 150 видов) с указанной ценой и шириной за метр, все цены разные, так же как и ширина непосредственно багета. Необходимо, чтобы в программе можно было ввести...
Задача "Железнодорожный узел" C++
Железнодорожный сортировочный узел устроен так, как показано на ри-сунке. На правой стороне собрано в произвольном порядке несколько вагонов обоих типов по N штук. Тупик может вмещать все 2N вагонов....
C++ Чтение из файла http://www.cyberforum.ru/cpp-beginners/thread916605.html
Первый раз пишу программу такого типа, подскажите как правильно надо, я написал вот так, но пишет нарушение прав доступа при чтении, не могу понять как надо char fname="C://MyFile.txt"; FILE* f;...
C++ Ошибка Unresolved external Доброго времени суток! Начал изучать С++. Пример прямо из учебника. Ошибка известная. Но решения найти не могу. Все рекомендуют искать и подключать библиотеки, в зависимости от того, что не может... подробнее

Показать сообщение отдельно
Nazgul94
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 24

Целочисленная таблица умножения дробей - C++

02.07.2013, 21:36. Просмотров 1438. Ответов 3
Метки (Все метки)

Используйте преимущество ООП, заключающееся в том, что однажды
созданный класс можно помещать в другие программы. Создайте новую
программу, которая будет включать класс fraction, созданный в упраж-нении 11. Программа должна выводить аналог целочисленной таблицы
умножения для дробей. Пользователь вводит знаменатель, а программа
должна подобрать всевозможные целые значения числителя так, чтобы
значения получаемых дробей находились между 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



Вот такое задание в Лафоре, которое никак мне не удается. Оставил его и пошел читать следующую главу. Но все время возвращаюсь к этой проге( одна из нескольких задач, которые я не решил из 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
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <conio.h>
#include <locale>
 
using namespace std;//пространство мен
//////////////////////////
int k;
class fraction //класс, где за обьекты взяты дроби
{ 
    private:   
    
    public: 
        int num; // числитель
        int den; //знаменатель
        fraction(): num(0), den(0)           //конструкторы
        { }
        void showfraction()const  //вывод данных
        { cout << "   " << num << '/' << den << "   ";}
        void lowterms(); // метод сокращения дроби
        void umn(fraction f1, fraction f2)// метод умножения дроби
        {
          num = f1.num * f2.num;
          den = f1.den * f2.den;
        }
};
void fraction::lowterms()  // сокращение дроби
{ 
    long tnum, tden, temp, gcd;
    tnum = labs(num);  // используем неотрицательные 
    tden = labs(den);  // значения (нужен cmath)
    if(tden == 0)    // проверка знаменателя на 0
        { cout << "Недопустимый знаменатель!"; exit(1); }
    else if(tnum == 0)    // проверка числителя на 0
        { num = 0; den = 1; return; }
    // нахождение наибольшего общего делителя
    while(tnum!= 0) 
        { 
          if(tnum < tden)  // если числитель больше знаменателя,
             { temp = tnum; tnum = tden; tden = temp; } // меняем их местами
           tnum = tnum- tden;  // вычитание
        } 
    gcd = tden;  // делим числитель и знаменатель на
    num = num / gcd;    // полученный наибольший общий делитель
    den = den / gcd; 
}
 
 
 
int main()
{  
    setlocale(LC_ALL,"RUS");
    cout << "      Введите знаменатель:  " ; cin >> k; cout << endl;
// далее как в цикле сохранить и перемножить? 
    /*fraction f, f1, f3;;
        f.num = k - 1;
        f.den = k;
        f1 = f;
    for(int i = 1; i < k - 1; i++)
        {   
            f3.umn(f, f1);
            f.showfraction();
            cout << "  *  " ;
            f3.showfraction();
            cout << endl;
            f.num = k - 1;
            f.den = k;
        }*/
 
    
_getch();
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru