Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/89: Рейтинг темы: голосов - 89, средняя оценка - 4.51
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2

деление на 0

17.07.2012, 11:36. Показов 18684. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
столкнулся с проблемой деления на 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;
            }
но нечего не вышло. как можно запретить деление на ноль?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2012, 11:36
Ответы с готовыми решениями:

Задача про деление яблок (целочисленное деление)
Ребят,помогите с задачкой,как написать input.txt и output.txt? Помогите решить задачу. C++. Заранее спасибо! N школьников делят K яблок...

Умножение, деление и деление с остатком
Рассмотрим эти операции на примере. static void Main() { int i = 100, j = 15; double a = 14.2, b = 3.5; ...

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы учитывался знак, и помимо всего прочего при...

9
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.07.2012, 11:43
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;
1
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.07.2012, 12:04  [ТС]
хм. возникает проблема. выдаётся ответ
http://data4.floomby.com/files... JoZRbA.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;
            }
0
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
17.07.2012, 12:05
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
float a[10], b[10];
зачем массив для чисел использовать??
0
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.07.2012, 12:13  [ТС]
УРААА. нащёл. после 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;
 
}
0
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
17.07.2012, 12:38
KostyaKulakov, ты лучше сделай чтоб строкой можно было вводить, а потом преобразовывай в выражение. типа анализатора
1
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.07.2012, 12:39  [ТС]
Цитата Сообщение от Fatal Error Посмотреть сообщение
KostyaKulakov, ты лучше сделай чтоб строкой можно было вводить, а потом преобразовывай в выражение. типа анализатора
фига ты загнул. я только учусь. совсем чучуть знаю. но обязательно попробую.
0
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
17.07.2012, 12:39
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
хочу сделать запоминание того что пишут
а пеперменная cnt нигде не увеличивается, поэтому не будет тут запоминания...
0
 Аватар для KostyaKulakov
64 / 52 / 2
Регистрация: 02.07.2012
Сообщений: 391
Записей в блоге: 2
17.07.2012, 12:41  [ТС]
Цитата Сообщение от Fatal Error Посмотреть сообщение
а пеперменная cnt нигде не увеличивается, поэтому не будет тут запоминания...
я ж написал. в голову стукнуло захотел сделать потом вспомнил про деление и про переменые. всё будет я пока только cnt запилил. вечерком замучу всё как надо. если будут вопросы напишу. а они будут
0
 Аватар для Troll_Face
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
17.07.2012, 13:27
Цитата Сообщение от 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;
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2012, 13:27
Помогаю со студенческими работами здесь

Деление на 10.
Нашел тут статейку по методам деления на 10 (http://we.iosyitistromyss.ru/Soft/preobrazuem-v-stroku-chast-1-celye-chisla.html). ...

Деление на 0
задача: Условие Имеется N человек и матрица А размера N´N. Элемент A матрицы равен 1, если человек i знаком с человеком j (если...

Деление на 41
Надо сделать программу на C, которая печатает все пятизначные числа, которые делится из 41 и которых циклично переставляя полученные числа...

Деление на 0
Все говорят на 0 делить нельзя,но я поделил,в чем тут подвох #include &lt;iostream&gt; using namespace std; int main() { int...

Деление на 1
Здравствуйте! В программ есть операция которая делит числа на 1, чтобы найти частоту. Так вот, например, когда я делю 1/186 ответ выдает...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru