Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 443
1

Не работает проверка на ошибку "делить на нуль нельзя!";

30.05.2019, 01:04. Просмотров 1084. Ответов 4
Метки нет (Все метки)

Я хочу сделать проверку на то чтобы при делении на нуль выскакивала ошибка под определенным номером, что на нуль делить нельзя, но программа при делении на нуль, завершается и пишет в окно ошибку. Вопрос в том, как правильно реализовать таким способом чтобы все работало?
Вот сам собственно код программы задание:
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
#include <iostream>
using namespace std;
/*Реализуйте класс Дробь. Необходимо хранить числитель
и знаменатель в качестве переменных-членов. Реализуйте
функции-члены для ввода данных в переменные-члены,
для выполнения арифметических операций (сложение,
вычитание, умножение, деление, и т.д.)*/
 
class fraction // дробь
{
public: // чтобы я мог работать с этими данными на прямую, я вызываю модификатор доступа паблик
    // ниже это свойства, я буду ими пользоваться
    int numerator = 0; // числитель 
    int denominator = 0; // знаменатель
};
 
int input(int a, int b)
{
    fraction inp;
    const char punct = '\n';
    long double d;
    inp.denominator;
    inp.numerator;
    char c;
    cout << "введите числитель " <<endl;
    cin >> inp.denominator;
    cout << "введите символ между 2-мя переменными. Доступные действия с числами: '+' '-' '*' '/' " << endl;
    cin >> c;
    cout << "введите знаменатель" << endl;
    cin >> inp.numerator;
 
    switch (c)
    {
    case '+': d = inp.denominator + inp.numerator; break;
    case '-': d = inp.denominator - inp.numerator; break;
    case '*': d = inp.denominator * inp.numerator; break;
    case '/': d = inp.denominator / inp.numerator; break;
    default:
        cout << "вы ввели что-то совсем не то, попробуйте еще раз";
    }
    
    try
    {
        if (inp.numerator==0)
        {
            throw 123;
        }
    }
    catch (int i)
    {
        cout << "ошибка № " << i << "-на нуль делать нельзя!" << endl;
    }
    cout << "результат = " << d << punct;
    system("pause");
    return 0;
}
 
 
int main()
{
    setlocale(0, "");
    int a = 0;
    int b = 0;
    input(a, b);
}
Добавлено через 2 минуты
Также мне нужно реализовать функцию в программе, перед тем как начать работу в программе она бы предложила пользователю выбрать определенный цвет шрифта, а потом только начать работу с самой программой. Тоже бы хотелось узнать, как это реализовать.
0
Миниатюры
Не работает проверка на ошибку "делить на нуль нельзя!";  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2019, 01:04
Ответы с готовыми решениями:

Добавить ошибку "на ноль делить" нельзя
В код калькулятора при делении на ноль нужно добавить ошибку &quot;на ноль делить нельзя&quot; var Form1:...

Добавить сообщение "А на 0 делить нельзя" при делении на 0
&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot;...

Появляется ошибка при работе программы "на ноль делить нельзя", как сделать так чтобы обойти это?
Вычислить на промежутке c шагом h значения функции у (х). procedure...

Как повторно ввести значение переменной a, если на нуль делить нельзя?
Добрый вечер! Если x = -a, то делить на нуль нельзя. Как в C# повторно ввести значение переменной...

4
4376 / 2981 / 1821
Регистрация: 18.12.2017
Сообщений: 9,331
30.05.2019, 01:36 2
Лучший ответ Сообщение было отмечено Anonymous4722 как решение

Решение

Anonymous4722,
C++
1
2
3
4
5
6
case '/': 
{
    if (inp.numerator) d = inp.denominator / inp.numerator;
    else cout << "на нуль делить нельзя!\n";    
    break;
}
строки try-catch уберите. тип int везде кроме int main поменяйте на double.
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
system("pause");
return 0;
перенесите в int main, a int input поменяйте на void input
1
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 443
30.05.2019, 02:45  [ТС] 3
Вот что у меня вышло:
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
#include <iostream>
#include <time.h>
#include <Windows.h>
#pragma warning(disable: 4996)
using namespace std;
/*Реализуйте класс Дробь. Необходимо хранить числитель
и знаменатель в качестве переменных-членов. Реализуйте
функции-члены для ввода данных в переменные-члены,
для выполнения арифметических операций (сложение,
вычитание, умножение, деление, и т.д.)*/
 
class fraction // дробь
{
public: // чтобы я мог работать с этими данными на прямую, я вызываю модификатор доступа паблик
    // ниже это свойства, я буду ими пользоваться
    int numerator = 0; // числитель 
    int denominator = 0; // знаменатель
};
 
int input(int a, int b)
{
    enum Color
    {
        Black = 0,
        Blue = 1,
        Green = 2,
        Cyan = 3,
        Red = 4,
        Magenta = 5,
        Brown = 6,
        LightGray = 7,
        DarkGray = 8,
        LightBlue = 9,
        LightGreen = 10,
        LightCyan = 11,
        LightRed = 12,
        LightMagenta = 13,
        Yellow = 14,
        White = 15
    };
 
    fraction inp;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    system("color F0");
    const char punct = '\n';
    float d;
    inp.denominator;
    inp.numerator;
    char c;
    SetConsoleTextAttribute(hConsole, (WORD)((Green << 4)));
    printf_s("введите числитель ");
    cin >> inp.denominator;
    SetConsoleTextAttribute(hConsole, (WORD)((LightGray << 4)));
    puts("введите символ между 2 - мя переменными.Доступные действия с числами : '+' '-' '*' '/' " );
    SetConsoleTextAttribute(hConsole, (WORD)((Cyan << 4)));
    cin >> c;
    SetConsoleTextAttribute(hConsole, (WORD)((Yellow << 4)));
    puts("введите знаменатель ");
    cin >> inp.numerator;
 
    switch (c)
    {
    case '+': d = inp.denominator + inp.numerator; break;
    case '-': d = inp.denominator - inp.numerator; break;
    case '*': d = inp.denominator * inp.numerator; break;
    case '/':
    {
        if (inp.numerator) d = inp.denominator / inp.numerator;
        else 
        {
            SetConsoleTextAttribute(hConsole, (WORD)((Red << 4)));
            cout << "на нуль делить нельзя!\n";
        }
        break;
    }
    default:
        SetConsoleTextAttribute(hConsole, (WORD)((LightRed << 4)));
        cout << "вы ввели что-то совсем не то, попробуйте еще раз";
    }
    SetConsoleTextAttribute(hConsole, (WORD)((Brown << 4)));
    cout << "результат = " << d << punct;
 
    return d;
}
 
 
int main()
{
    setlocale(0, "");
    int a = 0;
    int b = 0;
    input(a, b);
    system("pause");
}
0
4376 / 2981 / 1821
Регистрация: 18.12.2017
Сообщений: 9,331
30.05.2019, 12:05 4
Anonymous4722, Вы сообщение читали ?
Цитата Сообщение от Yetty Посмотреть сообщение
тип int везде кроме int main поменяйте на double
если не поменять, результаты математических действий будут неверными при вводе не целых чисел, а также при вводе целых при целочисленном делении

значение d Вы не используете, возвращать его не обязательно, тем более что при попытке деления на 0 возвращается мусор, лучше поменять
Цитата Сообщение от Yetty Посмотреть сообщение
int input поменяйте на void input
и зачем Вам переменные a и b ?
0
3 / 1 / 1
Регистрация: 29.11.2012
Сообщений: 443
30.05.2019, 12:08  [ТС] 5
У меня эта задача решение на верна. Как создать дробь и потом с этой дробью делать арифметические действия?? У меня получается тупо калькулятор, а надо чтобы была дробь, допустим 2/3 и потом над ней уже проводить арифметические действия.

Добавлено через 58 секунд
Цитата Сообщение от Yetty Посмотреть сообщение
зачем Вам переменные a и b ?
Потому что если я их не объявлю, то функция работать не будет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2019, 12:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как исправить ошибку: Значение типа "const char *" нельзя присвоить сущности типа "char *"?
#include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; struct Car_Specifications {...

При запросе "Where id = 1" все работает нормально. Но как только "Where id = h", то выдает ошибку
При запросе из таблицы БД MySQL &quot;Where id = 1&quot; все работает нормально. Но как только &quot;Where id =...

Выдает ошибку " Нельзя преобразовать тип real к integer"
Столкнулся с такой проблемой, что когда начинаю выводить процедуры в конце там где Vvod_mas(m)...

Как исправить ошибку - "Эти значения нельзя сравнивать"
как исправить это ошибку ? Эти значения нельзя сравнивать пишет


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

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

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