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

деление на 0 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
KostyaKulakov
Заблокирован
17.07.2012, 11:36     деление на 0 #1
столкнулся с проблемой деления на 0. нужно сделать так. чтобы программа не делила на 0. по средством switch не получалась. вот код
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); //Русский язык
    int A[10];
    
    float a[10], b[10]; 
    char op[10]; //оператор
    int cnt = 0;
    float res; //возращение ответа
    char answer = 'y';
 
    while (answer == 'y' || answer == 'Y')
    {
            cout << "Введите пример: ";
            cin >> a[cnt] >> op[cnt] >> b[cnt];
 
            switch(op[cnt])
            {
            case '+':
            res = a[cnt] + b[cnt];
            break;
            case '-':
            res = a[cnt] - b[cnt];
            case '*':
            res = a[cnt] * b[cnt];
            break;
            case '/':
            res = a[cnt] / b[cnt];
            break;
            default: 
            cout << "Ой. Что-то пошло не так. произошла ошибочка :)" << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
        }
 
            cout << "Ответ выражения = ";
            cout << res << endl << endl << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
            }
    while (answer == 'n' || answer == 'N')
    {
    cout << endl << "Спасибо за использование программы " << endl << endl;
            system("PAUSE");
            return 0;
    }
        
            return 0;
 
}
побывал сделать вот так
C++
1
2
3
4
5
            switch(b[cnt])
            {
            case '0':
                res = 1 - 1;
            }
но нечего не вышло. как можно запретить деление на ноль?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2012, 11:36     деление на 0
Посмотрите здесь:

C++ Деление на 0
Деление C++
C++ Деление
деление на 0 C++
Деление C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.07.2012, 11:43     деление на 0 #2
C++
1
2
3
4
5
6
case '/':
    if (b[cnt] == 0.0f)
        std::cout << "division by zero\n";
    else
        res = a[cnt] / b[cnt];
    break;
KostyaKulakov
Заблокирован
17.07.2012, 12:04  [ТС]     деление на 0 #3
хм. возникает проблема. выдаётся ответ
http://data4.floomby.com/files/share...SXdzJoZRbA.jpg

Добавлено через 8 минут
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); //Русский язык
    int A[10];
    
    float a[10], b[10]; 
    char op[10]; //оператор
    int cnt = 0;
    float res; //возращение ответа
    char answer = 'y';
 
    while (answer == 'y' || answer == 'Y')
    {
            cout << "Введите пример: ";
            cin >> a[cnt] >> op[cnt] >> b[cnt];
 
            switch(op[cnt])
            {
            case '+':
            res = a[cnt] + b[cnt];
            break;
            case '-':
            res = a[cnt] - b[cnt];
            case '*':
            res = a[cnt] * b[cnt];
            break;
            case '/':
            if (b[cnt] == 0.0f)
            cout << "\n";
            else
            res = a[cnt] / b[cnt];
            break;
            default: 
            cout << "Ой. Что-то пошло не так. произошла ошибочка :)" << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
        }
            if (b[cnt] == 0.0f)
            cout << "Делить на 0 нельзя!\n";
            else
            cout << "Ответ выражения = ";
            if (b[cnt] == 0.0f)
            cout << "\n";
            else
            cout << res << endl << endl << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
            }
    while (answer == 'n' || answer == 'N')
    {
    cout << endl << "Спасибо за использование программы " << endl << endl;
            system("PAUSE");
            return 0;
    }
        
            return 0;
 
}
при таком раскладе приходится 2 раза делать:
C++
1
2
3
 if (b[cnt] == 0.0f)
        std::cout << "Делить на 0 нельзя!\n";
    else
почему код не работает с таким типом. он выдаёт ответ. а свыше указанным работает нормально
C++
1
2
3
4
5
6
7
8
9
        }
            if (b[cnt] == 0.0f)
            cout << "Делить на 0 нельзя!\n";
            else
            cout << "Ответ выражения = ";
            cout << res << endl << endl << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
            }
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
17.07.2012, 12:05     деление на 0 #4
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
float a[10], b[10];
зачем массив для чисел использовать??
KostyaKulakov
Заблокирован
17.07.2012, 12:13  [ТС]     деление на 0 #5
УРААА. нащёл. после else нужно было заключить скобками код
вот такой получился. работает на ура.
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); //Русский язык
    int A[10];
    
    float a[10], b[10]; 
    char op[10]; //оператор
    int cnt = 0;
    float res; //возращение ответа
    char answer = 'y';
 
    while (answer == 'y' || answer == 'Y')
    {
            cout << "Введите пример: ";
            cin >> a[cnt] >> op[cnt] >> b[cnt];
 
            switch(op[cnt])
            {
            case '+':
            res = a[cnt] + b[cnt];
            break;
            case '-':
            res = a[cnt] - b[cnt];
            case '*':
            res = a[cnt] * b[cnt];
            break;
            case '/':
            if (b[cnt] == 0.0f)
            cout << "\n";
            else
            res = a[cnt] / b[cnt];
            break;
            default: 
            cout << "Ой. Что-то пошло не так. произошла ошибочка :)" << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
        }
            if (b[cnt] == 0.0f)
            cout << "Делить на 0 нельзя!\n" << endl;
            else
            {
            cout << "Ответ выражения = ";
            cout << res << endl << endl << endl;
            }
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
            }
    while (answer == 'n' || answer == 'N')
    {
    cout << endl << "Спасибо за использование программы " << endl << endl;
            system("PAUSE");
            return 0;
    }
        
            return 0;
 
}
Добавлено через 55 секунд
Цитата Сообщение от Fatal Error Посмотреть сообщение
зачем массив для чисел использовать??
хочу сделать запоминание того что пишут. а потом вывод. короче свои тараканы в голове

Добавлено через 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
#include <iostream>
#include <math.h>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian"); //Русский язык
    int A[10];
    
    float a[10], b[10]; 
    char op[10]; //оператор
    int cnt = 0;
    float res; //возращение ответа
    char answer = 'y';
 
    while (answer == 'y' || answer == 'Y')
    {
            cout << "Введите пример: ";
            cin >> a[cnt] >> op[cnt] >> b[cnt];
 
            switch(op[cnt])
            {
            case '^': //Степени
            res = pow(a[cnt],b[cnt]); //исполнение
            break;
            case '+':
            res = a[cnt] + b[cnt];
            break;
            case '-':
            res = a[cnt] - b[cnt];
            case '*':
            res = a[cnt] * b[cnt];
            break;
            case '/':
            if (b[cnt] == 0.0f)
            cout << "\n";
            else
            res = a[cnt] / b[cnt];
            break;
            default: 
            cout << "Ой. Что-то пошло не так. произошла ошибочка :)" << endl;
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
        }
            if (b[cnt] == 0.0f)
            cout << "Делить на 0 нельзя!\n" << endl;
            else
            {
            cout << "Ответ выражения = ";
            cout << res << endl << endl << endl;
            }
            cout << "Хотите продолжить вычисления? y/n: ";
            cin >> answer;
            }
    while (answer == 'n' || answer == 'N')
    {
    cout << endl << "Спасибо за использование программы " << endl << endl;
            system("PAUSE");
            return 0;
    }
        
            return 0;
 
}
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
17.07.2012, 12:38     деление на 0 #6
KostyaKulakov, ты лучше сделай чтоб строкой можно было вводить, а потом преобразовывай в выражение. типа анализатора
KostyaKulakov
Заблокирован
17.07.2012, 12:39  [ТС]     деление на 0 #7
Цитата Сообщение от Fatal Error Посмотреть сообщение
KostyaKulakov, ты лучше сделай чтоб строкой можно было вводить, а потом преобразовывай в выражение. типа анализатора
фига ты загнул. я только учусь. совсем чучуть знаю. но обязательно попробую.
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
17.07.2012, 12:39     деление на 0 #8
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
хочу сделать запоминание того что пишут
а пеперменная cnt нигде не увеличивается, поэтому не будет тут запоминания...
KostyaKulakov
Заблокирован
17.07.2012, 12:41  [ТС]     деление на 0 #9
Цитата Сообщение от Fatal Error Посмотреть сообщение
а пеперменная cnt нигде не увеличивается, поэтому не будет тут запоминания...
я ж написал. в голову стукнуло захотел сделать потом вспомнил про деление и про переменые. всё будет я пока только cnt запилил. вечерком замучу всё как надо. если будут вопросы напишу. а они будут
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2012, 13:27     деление на 0
Еще ссылки по теме:

Деление на 1 C++
C++ Деление
Деление на 6 C++

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

Или воспользуйтесь поиском по форуму:
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
17.07.2012, 13:27     деление на 0 #10
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
фига ты загнул. я только учусь. совсем чучуть знаю
для анализатора совсем чуть-чуть и надо знать массив чаров и загоняй туда все, а потом каждый элемент обрабатывай

Добавлено через 42 минуты
наипростейший анализатор за 30 мин. он далеко не идеален но работает!!! (ЗЫ я учу С++ по Прате, дочитал до 7 главы)
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
#include <iostream>
using namespace std;
int analis(char*);
int calculate(int, int, char);
int main()
{
    char expression[10];
    cout<<"Enter Expression: ";
    cin.get(expression, 10);
    int res = analis(expression);
    cout<<res<<endl;
    system("pause");
    return 0;
}
 
int analis(char array[])
{
    int a = 0, b = 0;
    int i = 0;
    char ch;
    bool A = 1;
    while (array[i]!='\0')
    {
          if (isdigit(array[i]))
             if (A)
                 a = a*10+(array[i]-'0');
             else
                 b = b*10+(array[i]-'0');
          else if (array[i] == '+' || array[i] == '-')
          {
               ch = array[i];
               A = 0;
          }       
          else 
          {
               cout<<"Syntaxic error!!!";
               break;
          }
          ++i;
    }
    return calculate(a, b, ch);
}
 
int calculate(int a, int b, char ch)
{
    switch (ch)
    {
           case '+': return a+b;
           case '-': return a-b;
    }
}
Yandex
Объявления
17.07.2012, 13:27     деление на 0
Ответ Создать тему
Опции темы

Текущее время: 15:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru