Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 11

Калькулятор дробей

17.09.2019, 08:17. Показов 4300. Ответов 8

Студворк — интернет-сервис помощи студентам
Учусь программировать на C++, в данное время на мобильном компиляторе "Cxx IDE for android". С утра хотел написать свой калькулятор дробей (да, бредовая идея), но кое-где допустил ошибочку и не могу найти где.
Ошибка: floating point exception.
Сам код:
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
#include <iostream>
using namespace std;
 
int main(int argue, const char * arg[]) {
setlocale(LC_ALL, "Russian");   
    
    int chis1, znam1, chis2, znam2, otv;
    float res1, res2, res3, res4, drob1, drob2;
    
    
    drob1 = chis1 / znam1;
    drob2 = chis2 / znam2;
    res1 = drob1 + drob2;
    res2 = drob1 - drob2;
    res3 = drob1 * drob2;
    res4 = drob1 / drob2;
    
    cout << "Введите числитель первой дроби: ";
            cin >> chis1;
    cout << "Введите знаменатель первой дроби: ";
            cin >> znam1;
    cout << "Введите числитель второй дроби: ";
            cin >> chis2;
    cout << "Введите знаменатель второй дроби: ";
            cin >> znam2;
    
    cout << "Сумма дробей: " << res1 << endl;
    cout << "Разность дробей: " << res2 << endl;
    cout << "Произведение дробей: " << res3 << endl;
    cout << "Частное дробей: " << res4 << endl;
    
    cout << "Верны ли ответы? Если да, то напишите - 1, а если нет, то - 2.";
    cin >> otv;
if (otv = 1) {
    cout << "Спасибо, удачи!";
}   else if(otv = 2) {
    cout << "Простите, возможно допущена ошибка в коде, сообщите об этом в наш телеграм бот: t.me/SFfeedbackbot";   }
    
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2019, 08:17
Ответы с готовыми решениями:

Калькулятор дробей
Здравствуйте! Изучаю С++ по книге Лафоре, там нужно было создать калькулятор дробей в одном из упражнений. Калькулятор работает как надо,...

Калькулятор для дробей
Создать калькулятор, который выполняет 4 арифметичуские действия над дробями. Пользователь должен сначало ввести первый операнд, знак...

Калькулятор для дробей
Задача: Создать класс Fraction, который будет описывать дробь (числитель и знаменатель). Методы класса следующие: Farction Add (const...

8
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,269
17.09.2019, 08:27
Лучший ответ Сообщение было отмечено Saint7 как решение

Решение

Среди неициализированных переменных попалась одна с нулевым значением, попавшая в знаменатель.
Оператор сравнения на равенство в Си-языках - это "==", а не "=".
1
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 11
17.09.2019, 08:43  [ТС]
Можете по-подробнее обьяснить что мне исправить, пожалуйста. Я еще новичок в этом деле)
0
 Аватар для Хуба-Буба
484 / 296 / 53
Регистрация: 13.08.2019
Сообщений: 1,042
17.09.2019, 08:45
Дело в том, что деление целочисленных значений типа
C++
1
int
даёт исключительно целочисленный результат: For integral operands the / operator yields the algebraic quotient with any fractional part discarded;
Таким образом, чтобы получить желаемые дроби Вам необходимо заняться приведением типов по ходу вычисления, либо объявлять все переменные как
C++
1
float
или
C++
1
double
или и т.д. в зависимости от необходимой точности.
Так же не забывайте инициализировать переменные в явном виде. Возьмите за правило стиль : объявление переменный+инициализация.
1
Злостный нарушитель
 Аватар для Verevkin
10240 / 5669 / 1260
Регистрация: 12.03.2015
Сообщений: 26,269
17.09.2019, 08:46
Цитата Сообщение от Saint7 Посмотреть сообщение
Можете по-подробнее обьяснить что мне исправить, пожалуйста.
Открывай гугл, пиши там "книжка по С++ для чайников скачать бесплатно без смс и регистрации".
------
Поверь мне, так будет быстрее и намного эффективнее.
1
0 / 0 / 0
Регистрация: 17.09.2019
Сообщений: 11
17.09.2019, 09:06  [ТС]
Все почти получилось, но почему то сумма, разность, произведение и частное выводит значерие "nan", в чем дело????((
0
17.09.2019, 09:21

Не по теме:

Цитата Сообщение от Saint7 Посмотреть сообщение
в данное время на мобильном компиляторе "Cxx IDE for android
Из мест не столь отдаленных?

0
 Аватар для Хуба-Буба
484 / 296 / 53
Регистрация: 13.08.2019
Сообщений: 1,042
17.09.2019, 09:27
Saint7, я Вам выше дал комментарий на счет этого вопроса. Приводите типы данных к единому формату с плавающей точкой и будет счастье. При текущей реализации у Вас будет всё правильно для дробей типа: 4/2, 9/3 и т.д., т.е. дроби для которых результат деления будет представляются целым числом. 4/2(четыре вторых) = 2, 9/3(девять третьих) равно тройки и т.д.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.09.2019, 12:20
Цитата Сообщение от Saint7 Посмотреть сообщение
почему то сумма, разность, произведение и частное выводит значерие "nan"
а на что рассчитывали, если сначала что-то считаете а потом вводите значения с которыми хотите что-то посчитать ? нужно наоборот. лучше сразу привыкайте использовать тип double. чтобы не было целочисленного деления в строках 19 и 20 добавлено приведение к double.
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
#include <iostream>
using namespace std;
 
int main(int argue, const char * arg[]) {
    setlocale(LC_ALL, "Russian");   
 
    int chis1, znam1, chis2, znam2;
    double res1, res2, res3, res4, drob1, drob2;
 
    cout << "chis1: ";
    cin >> chis1;
    cout << "znam1: ";
    cin >> znam1;
    cout << "chis2: ";
    cin >> chis2;
    cout << "znam2: ";
    cin >> znam2;
 
    drob1 = (double) chis1 / znam1;
    drob2 = (double) chis2 / znam2;
    res1 = drob1 + drob2;
    res2 = drob1 - drob2;
    res3 = drob1 * drob2;
    res4 = drob1 / drob2;
 
    cout << chis1 << "/" << znam1 << " + " << chis2 << "/" << znam2 << " = " << res1 << endl;
    cout << chis1 << "/" << znam1 << " - " << chis2 << "/" << znam2 << " = " << res2 << endl;
    cout << chis1 << "/" << znam1 << " * " << chis2 << "/" << znam2 << " = " << res3 << endl;
    cout << chis1 << "/" << znam1 << " : " << chis2 << "/" << znam2 << " = " << res4 << endl;
 
return 0;
}
проверку на правильность результата дописывать смысла не вижу - программа всегда будет выдавать правильный результат. можете добавить проверку на ввод нуля для знаменателей.
C++
1
2
3
4
5
6
    do
    {
    cout << "a="; cin >> a;
    if (a==0.) cout << "a!=0 !!! Repeat please...\n";
    }
    while (a==0.);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2019, 12:20
Помогаю со студенческими работами здесь

Калькулятор для дробей
Написать программу калькулятор для дробей,с помощью цикла for.Пользователь выбирает одной из действий: сумма,вычитание,умножение,деление. ...

Калькулятор рациональных дробей
Первая программа принимает от пользователя три строки, (первая и третья строки – это правильные рациональные или десятичные дроби вида ...

Калькулятор дробей - Перегрузка операторов
Мне дали ошибки на мою программу хочу спросить как правильно их исправить? Не нужно дублировать код. Не нужно перемножать...

Усовершенствованный калькулятор рациональных дробей
Добавил операторы сравнения и равно, всё скомпилировалось, ровно работает, при добавлении &lt;=,&gt;=,!= в отдельных case, всё...

Калькулятор дробей с помощью классов
Добрый день, мне кажется я тут уже видел программку калькулятор дробей, где нужно создать class fraction для подсчета суммы, разности,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru