Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 30.10.2021
Сообщений: 4
1

Обработка ошибок

30.10.2021, 21:33. Показов 1458. Ответов 5

Author24 — интернет-сервис помощи студентам
Всем привет! Столкнулся с такой проблемой, что нужно написать программу по сложению двух максимально больших чисел, но если они или их сумма выходит за границы int, то программа должна выводить сообщение об этом. Нашел в интернете информацию про обработку исключений, но не разобрался как использовать это, а конкретных примеров с границами int я не нашел. Буду очень благодарен, если поможете.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2021, 21:33
Ответы с готовыми решениями:

Getopt. Обработка ошибок ввода параметров
Доброго Здоровья! Собственно проблема. Если параметр требует аргумента, а аргумент пропущен, то в...

Обработка ошибок
Всем привет! Как сделать так, чтобы программа забивала, если функция StrToInt(s) выдавала ошибку...

Обработка ошибок в go
Добрый день. Начал изучать go и первое что бросилось в глаза такие конструкции во всех примерах ...

Обработка ошибок
Есть главный класс и несколько дочерних, входящих как в состав главного, так и друг в друга (не...

5
462 / 334 / 133
Регистрация: 18.07.2017
Сообщений: 1,476
30.10.2021, 23:03 2
Цитата Сообщение от Jedy Посмотреть сообщение
конкретных примеров с границами int я не нашел
Плохо искал. Примеры есть прямо на форуме.
Цитата Сообщение от Jedy Посмотреть сообщение
Нашел в интернете информацию про обработку исключений
А ты какие числа используешь? Для int нет никаких исключений: там просто происходит переполнение регистра. Но его можно проверить:
1) С помощью математики.
Если верно неравенство:
https://www.cyberforum.ru/cgi-bin/latex.cgi?a+b>c
Где a и b - твои числа, c - максимальное значение int, то для них верно и следующее:
https://www.cyberforum.ru/cgi-bin/latex.cgi?a>c-b
Его и надо проверять.
2) При помощи ассемблера.
У процессоров (x86 по крайней мере) есть регистр флагов. Когда процессор складывает два числа и происходит переполнение, он выставляет соответствующий флаг. Соответственно при помощи ассемблерной комманды можно проверить поднят ли флаг переполнения.
0
0 / 0 / 0
Регистрация: 30.10.2021
Сообщений: 4
30.10.2021, 23:25  [ТС] 3
Я просто в этом еще прям совсем чайник, поэтому не понимаю, разве если мы введем допустим два числа по 10 миллиардов и используем данное неравенство, то оно сработает? Просто я пробовал сравнить каждое число с максимальным значением int и это не помогло. (Извините за глупые вопросы)
0
462 / 334 / 133
Регистрация: 18.07.2017
Сообщений: 1,476
31.10.2021, 00:25 4
Цитата Сообщение от Jedy Посмотреть сообщение
оно сработает
А зачем я его тогда писал?
Цитата Сообщение от Jedy Посмотреть сообщение
Извините за глупые вопросы
Желание понять - похвально, только даже на такие благостные порывы у нас не всегда есть время.
0
0 / 0 / 0
Регистрация: 30.10.2021
Сообщений: 4
31.10.2021, 14:30  [ТС] 5
Я знаю что я глупый, но что я делаю не так?)

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
   int x,y,z;
   printf("введите два числа");
   scanf("%d%d",&x,&y);
   if ((x)>(2147483648-y))
   printf("ошибка");
   else
   z=x+y;
   printf("%d",z);
}
При сложении двух очень больших чисел получается ответ -2
Еще нашёл в интернете такое решение, но оно так же не помогло(

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
    int a, b, x;
    scanf("%d%d",&a,&b);
    x = a + b;
    if (a != 0 && x - a != b) 
        printf("ошибка");
    else
    printf("%d",x);
}
0
462 / 334 / 133
Регистрация: 18.07.2017
Сообщений: 1,476
31.10.2021, 17:43 6
Цитата Сообщение от Jedy Посмотреть сообщение
if ((x)>(2147483648-y))
У тебя MAX_INT + 1, оно не влазит в int.
https://ru.wikipedia.org/wiki/Limits.h
Цитата Сообщение от Jedy Посмотреть сообщение
x = a + b;
if (a != 0 && x - a != b)
Второе условие всегда ложное.
0
31.10.2021, 17:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2021, 17:43
Помогаю со студенческими работами здесь

Обработка ошибок
Почему все таки возникают иногда ошибки при обработке: Stream :=...

Обработка ошибок
Ребят подскажите, как в 1С можно обрабатывать ошибки... Например в lotus в код вставляешь вот такие...

Обработка ошибок
работаю в NetBeans'e есть,код,нужно написать обработку ошибок для кода(запретить все символы кроме...

Обработка ошибок
Помогите сделать обработку ошибок,если поиск не дал результатов или поля не заполнены &lt;form...

Обработка ошибок
Всем привет. Пытаюсь тут наваять принципы обработки ошибок и обработчики поинтереснее придумать...

Обработка Ошибок
Можно ли так сделать, чтобы в случае неправильного ввода, выдавалось сообщение об ошибке, но при...

обработка ошибок
Есть класс треугольника, нужно, чтобы при вводе в конструктор нулей или минусовых значений вместо...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru