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

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

17.09.2019, 08:17. Показов 4344. Ответов 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
10346 / 5764 / 1271
Регистрация: 12.03.2015
Сообщений: 26,618
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
10346 / 5764 / 1271
Регистрация: 12.03.2015
Сообщений: 26,618
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
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru