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

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

Войти
Регистрация
Восстановить пароль
 
 
Ksu Rudaleva
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 23
#1

Класс "Нечеткое число" - C++

16.10.2015, 09:48. Просмотров 655. Ответов 21
Метки нет (Все метки)

Программа не выводит результат. Где именно надо поправить?
P.S. Консоль спросит номер задачи. Введите 1.
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#include <iostream>
#include <sstream>
#include <windows.h>
#include <string>
#include <stdio.h>
#include <ctype.h>
#include <locale>
#include <stdexcept>
 
using namespace std;
 
class fn
{
    double x, e1, e2;
public:
    fn ()
    {
        this->x=0;
        this->e1=0;
        this->e2=0;
    };
    fn (double a, double b, double c)
    {
        this->x=a;
        this->e1=b;
        this->e2=c;
    };
    fn (fn &f);
    friend void input (fn &);
    friend string toString(fn &);
    friend void print (string s);
    friend fn& operator + (fn &f1, fn &f2);
    friend fn& operator - (fn &f1, fn &f2);
    friend fn& operator * (fn &f1, fn &f2);
    friend fn& operator / (fn &f1, fn &f2);
    ~fn (){};
};
fn::fn (fn &f) {this->x=f.x; this->e1=f.e1; this->e2=f.e2;}
 
fn& operator + (fn &f1, fn &f2)
{
    fn f3;
    f3.x=f1.x+f2.x;
    f3.e1=f1.e1+f2.e1;
    f3.e2=f1.e2+f2.e2;
    return f3;
}
 
fn& operator - (fn &f1, fn &f2)
{
    fn f3;
    f3.x=f1.x-f2.x;
    f3.e1=f1.e1+f2.e1;
    f3.e2=f1.e2+f2.e2;
    return f3;
}
 
fn& operator * (fn &f1, fn &f2)
{
    fn f3;
    f3.x=f1.x*f2.x;
    f3.e1=f1.x*f2.e1+f2.x*f1.e1-f1.e1*f2.e1;
    f3.e2=f1.x*f2.e2+f2.x*f1.e2+f1.e2*f2.e2;
    return f3;
}
 
fn& operator / (fn &f1, fn &f2)
{
    if (f2.x<=0)
        throw runtime_error("Деление на 0: B.X=0");
    if ((f2.x+f2.e2 < 0.0001) && (f2.x+f2.e2 > -0.0001))
        throw runtime_error("Деление на 0: B.X+B.e2=0");
    fn f3;
    f3.x=f1.x/f2.x;
    if ((f2.x-f2.e1) < 0.0001 && (f2.x-f2.e1) > -0.0001)
        throw runtime_error("Деление на 0: B.X-B.e1=0!");
    f3.e1=f3.x - (f1.x-f1.e1)/(f2.x+f2.e2);
    f3.e2=(f1.x+f1.e2)/(f2.x-f2.e1) - f3.x;
    return f3;
}
 
void input (fn &f)
{
    cout << "Введите x: ";
    cin >> f.x;
    cout << "Введите e1: ";
    cin >> f.e1;
    cout << "Введите e2: ";
    cin >> f.e2;
}
 
string toString(fn &f)
{
    string s="(";
    stringstream s1, s2, s3;
    double l, m, n;
    string d1, d2, d3;
    l=f.x-f.e1;
    m=f.x;
    n=f.x+f.e2;
    s1 << l; s1 >> d1;
    s2 << m; s2 >> d2;
    s3 << n; s3 >> d3;
    s+=d1;
    s+=";";
    s+=d2;
    s+=";";
    s+=d3;
    s+=")";
    return s;
}
 
void print (string s)
{
    cout << s << endl;
}
 
int zadacha1()
{
    cout << "Работа с нечеткими числами вида X=(X-e1, X, X+e2)." << endl;
    fn A, B, C, Num (1, 0, 0);
    string s1, s2, s3;
    char *a = new char [3];
    cout << "Число A" << endl;
    input (A);
    s1=toString(A);
    print (s1);
    cout << "Число B" << endl;
    input (B);
    s2=toString(B);
    print (s2);
    cout << "Введите операцию:" << endl;
    cin >> a;
    if (a[1]=='+')
    {
        C=A+B;
        s3=toString(C);
        cout << "A+B = "; print(s3);
    }
    if (a[1]=='-')
    {
        C=A-B;
        s3=toString(C);
        cout << "A-B = "; print(s3);
    }
    if (a[1]=='*')
    {
        C=A*B;
        s3=toString(C);
        cout << "A*B = "; print(s3);
    }
    try
    {
        if (a[1]=='/')
        {
            if ((a[0]=='A')||(a[0]=='B'))
            {
                C=A/B;
                s3=toString(C);
                cout << "A/B = "; print(s3);
            }
            if (a[0]=='1')
            {
                if (a[2]=='A')
                {
                    C=Num/A;
                    s3=toString(C);
                    cout << "1/A = "; print(s3);
                }
                if (a[2]=='B')
                {
                    C=Num/B;
                    s3=toString(C);
                    cout << "1/B = "; print(s3);
                }
            }
        }
    }
    catch (const runtime_error& e)
    {
        cout << "Ошибка:" << endl << e.what() << endl; return -1;
    }
    return 0;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int m, k;
    cout << "Введите номер задачи: ";
    cin >> m;
    switch (m)
    {
        case 1: k = zadacha1(); break;
//        case 3: k = zadacha3(); break;
//        case 2: zadacha2(); break;
//        case 5: k = zadacha5(); break;
    }
    return k;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2015, 09:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс "Нечеткое число" (C++):

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

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

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

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

Двусвязный список с объектом трех типов: "целое число", "вещественное число", "строка" - C++
Есть проблема. Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов: &quot;целое...

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

21
nmcf
5685 / 4996 / 1703
Регистрация: 14.04.2014
Сообщений: 20,379
16.10.2015, 10:50 #16
Проверяй формулы в операторах. e1 и e2 у тебя суммируются и в +, и в -. Так и должно быть?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.10.2015, 10:54 #17
Цитата Сообщение от Ilot Посмотреть сообщение
Нужно возвращать константный объект:
Иногда это не оч.удобно. Например если для возвращаемого типа хочется вызвать модифицирующую функцию-член, возвращающую ссылку на this. И в дальнейшем использовать этот результат сразу на месте, без создания ещё одного объекта. Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct S {
    S op() { return S(); }
    S& modify() { return *this; }
};
 
void use(const S&) {}
 
int main() {
    S s;
    use( s.op().modify() );
    return 0;
}
1
Ksu Rudaleva
0 / 0 / 0
Регистрация: 08.01.2015
Сообщений: 23
16.10.2015, 10:56  [ТС] #18
nmcf, не очень понимаю как реализуются эти операции вообще
0
nmcf
5685 / 4996 / 1703
Регистрация: 14.04.2014
Сообщений: 20,379
16.10.2015, 11:07 #19
По принципу f3 = f1 операция f2.
Мне не понятно, что это за числа. Тебе лучше знать.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
16.10.2015, 11:18 #20
Tulosba, суть не в том, что нужно так делать всегда, а в том к чему стоит готовиться если так не делать. Не все об этом задумываются.
0
SmittWesson
120 / 171 / 17
Регистрация: 04.06.2014
Сообщений: 1,275
16.10.2015, 11:34 #21
Цитата Сообщение от Ksu Rudaleva Посмотреть сообщение
nmcf, выдает ошибку: 'friend' used outsideof class
Вы пытаетесь из дружественного класса, сделать "вражественный". Вот компиль и ругается.
Объявите свой базовый класс, как шаблонный и наследуйте от него, что хотите.

Добавлено через 8 минут
Вообще, считается плохим тоном, в классах делать ввод/вывод (хотя и не запрещено компилем).
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.10.2015, 18:27 #22
Цитата Сообщение от Ilot Посмотреть сообщение
к чему стоит готовиться если так не делать
К бессмысленной модификации временного объекта, и только лишь.
Кстати, мне кажется компилятор мог бы такое ловить (пока правда не нашел соответствующих ключей).
Зато сразу же теряем возможность перемещения (move) этого объекта: нельзя мувнуть константный временный объект.

Добавлено через 6 часов 21 минуту
Для запрета присваивания во временный объект вместо возврата константного значения из функции можно использовать ещё и такую конструкцию:
C++
1
S& operator=(const S&) & = default;
Такое решение, по крайней мере, не запрещает модификацию временного объекта, если хочется использовать его по месту:
C++
1
use( s.op().modify() );
0
16.10.2015, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2015, 18:27
Привет! Вот еще темы с ответами:

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

Класс "Графический объект", от которого будут наследоваться классы "круг" и "квадрат" - C++
Реализовать класс Графический объект от которого будут наследоваться классы &quot;круг&quot; и &quot;квадрат&quot;. Собственно, сам код, который был написан...

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

Базовый класс "Источник напряжения", производные классы "Цепь" и "Аккумулятор" - C++
Дали задачу по программированию: составить класс &quot;Источник напряжения&quot;, для которого нужно реализовать два производных класса: &quot;Цепь&quot; и...


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

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

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