![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Составить программу которая проверяла бы не приводит ли суммирование двух целых чисел A и B к переполнению(т.е. к результату большему, чем 32767). Если будет переполнение, то сообщить об этом, иначе вывести сумму этих чисел. Напишите пожалуйста программу полностью. Заранее спасибо!!!!
|
#2
|
||||
|
||||
![]() var
x,y: Integer; begin if x+y>32767 then ShowMessage('Ошибка') else ShowMessage(IntToStr(x+y)) end; Запихнеш в процедуру и всё |
#3
|
||||
|
||||
![]() 1. В дельфи Integer уже давно в диапазоне -2147483648..2147483647
2. Надо еще обрабатывать ситуацию с отрицательным числом. а посему надо наверное так: Код:
var x,y: Integer; begin if (x+y>High(Integer)) or (x+y<Low(Integer)) then ShowMessage('Ошибка') else ShowMessage(IntToStr(x+y)) end; |
#4
|
||||
|
||||
![]() Цитата:
Этот код нерабочий. Т.к при попытке сложить x+y сумма записывается опять в Integer, а то что не влезло - обрезается. Поэтому данное условие всегда будет возвращать False; Необходимо вручную преобразовывать один из арументов в Int64 тогда и сумма будет Int64 Код:
if (Int64(x)+y>High(Integer)) or (Int64(x)+y<Low(Integer)) then ShowMessage('Ошибка') else ShowMessage(IntToStr(x+y)) Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#5
|
||||
|
||||
![]() Да с приведением суммы я чего-то не предусмотрел. Тут вы правы.
|
#6
|
|||
|
|||
![]() Код:
Try X:= A + B; ShowMessage(IntToStr(X)); Except ShowMessage('Overflow'); end; |