![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)) |
|
#5
|
||||
|
||||
|
Да с приведением суммы я чего-то не предусмотрел. Тут вы правы.
|
|
#6
|
|||
|
|||
|
Код:
Try
X:= A + B;
ShowMessage(IntToStr(X));
Except
ShowMessage('Overflow');
end; |