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

Дроби - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа вычисления обратной матрицы N-го порядка http://www.cyberforum.ru/cpp-beginners/thread353914.html
Составить программу вычисления обратной матрицы методом Гаусса для трехдиагональной матрицы. Порядок и коэффициенты матрицы (главная и соседние с ней диа-гонали) вводятся из файла. В файл результатов выдаются: исходная матрица, обратная матрица, произведение исходной матрицы на обратную.
C++ Функции и что делают У меня есть такая полностью написанная программа по Файловому менеджеру .нужно определить что делает каждая функция... помогите мне.пожалуйста.я мало что понимаю(//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- http://www.cyberforum.ru/cpp-beginners/thread353902.html
Тема дипломной C++
Никак не могу придумать тему дипломной работы. А Вы на какие темы дипломы писали?
intellij Idea 10.5.2 C++
Не могу понять...какого черта тут нужно делать...ни одну из папок не хочет добавлять http://imagepost.ru/images/q/yb/qybyszmudbenpzmpzyexytunmcwvia.png
C++ Сортировка строк STL http://www.cyberforum.ru/cpp-beginners/thread353886.html
Подскажите пожалуйста как работает эта программа #include <iostream> #include <string> #include <algorithm> using namespace std; char* names = { "Сергей", "Татьяна", "Елена", "Дмитрий", "Михаил", "Владимир" };
C++ Не рабочий merge() Подскажите пожалуйста почему данная программа напрочь отказывается работать ? #include<iostream> #include<algorithm> using namespace std; int art={5,2,3,6,8}; int bar={10,20,30,40,50}; int cam; int main () {setlocale(LC_ALL,"Rus"); подробнее

Показать сообщение отдельно
lavengerl
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 77
26.09.2011, 22:07  [ТС]     Дроби
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <conio.h>
using namespace std;
 
class rational
{
public:
    int a,b,c,d,oper,res1,res2;
void init(void);
void read(void);
void proc(void);
void display(void);
int nod (int x, int y);
void reduce (void);
};
 
 
//ввод//
 
void rational::read(void)
{
    int x,y;
    cout<<"vvedit 1 drob"<<endl;
    cin>>x;
    cout<<"/";
    cin>>y;
    if(y!=0)
    {
        a=x;b=y;
    }
    else cout<<"error,znamennuk ne mae dorivnuvatu 0"<<endl;
 
    cout<<endl;
 
    cout<<"vvedit 2 drob"<<endl;
    cin>>x;
    cout<<"/";
    cin>>y;
        if(y!=0)
    {
        c=x;d=y;
    }
    else cout<<"error,znamennuk ne mae dorivnuvatu 0"<<endl;
    cout<<endl;
}
 
//инициализация//
void rational::init(void)
{
    int z;
cout<<"initialization"<<endl;
cout<<"bajaete vvestu drobu(1)?"<<endl<<"4u otrumatu ix vupadkovum 4unom(2)?"<<endl;
cin>>z;
 
switch(z)
    {
    case 1: read();break;
    case 2: cout<<"vupadkovi drobu"<<endl;
        a=rand() % 10 + 1;
        b=rand() % 10 + 1;
        c=rand() % 10 + 1;
        d=rand() % 10 + 1;
        cout<<a<<"/"<<b<<endl;
        cout<<c<<"/"<<d<<endl;
        break;
 
    default: cout<<"error"<<endl;
        init();
 
    }
}
 
//вычисление//
void rational::proc(void)
{
    cout<<"oberit bajany operaciy"<<endl;
    cout<<"1-add\n2-sub\n3-mul\n4-div\n5-equal,greate,less"<<endl;
    cin>>oper;
 
    switch(oper)
    {
    case 1: cout<<"Suma:"<<endl; res1=a*d+b*c; res2=b*d; display(); break;
    case 2: cout<<"riznucia:"<<endl; res1=a*d-b*c; res2=b*d; display(); break;
    case 3: cout<<"dobutok:"<<endl; res1=a*c; res2=b*d; display();  break;
    case 4: cout<<"4astka:"<<endl; res1=a*d; res2=b*c; display();   break;
    case 5: cout<<"porivnannia drobiv:"<<endl; 
        if(a*d>b*c) cout<<a<<"/"<<b<<"  >   "<<c<<"/"<<d<<endl;
        else if(a*d<b*c) cout<<a<<"/"<<b<<" <   "<<c<<"/"<<d<<endl;
        else        cout<<a<<"/"<<b<<"  =   "<<c<<"/"<<d<<endl;
        break;
 
    default: cout<<"nemae takoi operacii"<<endl;
 
    }
}
 
//поиск найбольшего кратного//
int rational::nod (int x, int y)
{
    while (x!=y)
    {
      
        if(x>y)
            
            if(x%y!=0)
                x=x%y;
            else x=y;
        else if (x<y)
            if (y%x!=0)
                {
                y=y%x;
                x=y;
                }
    }
    return x;
}
 
//сокращение//
void rational::reduce()
 
{
    int n;
    cout<<"ckoro4ennia droba:"<<endl;
    if(res1==0)
        return;
    if (res1<0)  n=nod(-res1,res2);
    else         n=nod(res1,res2);
    res1=res1/n;
    res2=res2/n;
 
}
 
//вывод//
void rational::display(void)
{
    cout<<res1<<"/"<<res2<<endl;
 
        if (res1==res2) cout<<"Vidpovidb=1";
        else if(res1==0) cout<<"Vidpovidb=0";
        else 
        {
            reduce();
            cout<<res1<<"/"<<res2<<endl;
        }
}
 
void main()
{
rational obj;
obj.init();
obj.proc();
 
getch();
}
все таки написал так как я умею)

все работает но кусок, который ищет найбольшее общее кратное, работает направильно, и из-за этого дроби неправильно сокращаются. Есть ли у кого идеи как сделать даную функцию?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int rational::nod (int x, int y)
{
    while (x!=y)
    {
      
        if(x>y)
            
            if(x%y!=0)
                x=x%y;
            else x=y;
        else if (x<y)
            if (y%x!=0)
                {
                y=y%x;
                x=y;
                }
    }
    return x;
}
Добавлено через 1 час 4 минуты
Все общий делитель сделал, работает. осталось только 1: тут

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch(z)
        {
        case 1: read();break;
        case 2: cout<<"vupadkovi drobu"<<endl;
                a=rand() % 10 + 1;
                b=rand() % 10 + 1;
                c=rand() % 10 + 1;
                d=rand() % 10 + 1;
                cout<<a<<"/"<<b<<endl;
                cout<<c<<"/"<<d<<endl;
                break;
 
        default: cout<<"error"<<endl;
                init();
 
        }
}
эти ранды рандомно заполняю только при компиляции программы. дальше числа там постоянно одинаковые. как написать рандом так чтоб при каждом запуске проги, генерировалось новое число?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru