|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.02.2009, 01:24 | #1 |
Регистрация: 27.02.2009
Сообщений: 7
|
Ошибка переполнения и sqr.
Друзья, объясните почему здесь выскакивает ошибка переполнения. Ведь значение 640000 присваивается переменной x типа longint и входит в диапазон значений.
Код:
Код:
|
27.02.2009, 01:31 | #2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
ray13 В Free Pascal все работает.
В TP действительно говорит о переполнении. Думаю, здесь дело в приведении типов, т.к. если переменную r сделать типа longint, ошибка исчезает.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
27.02.2009, 01:53 | #3 |
Форумчанин
Регистрация: 06.12.2008
Сообщений: 613
|
объясняю: турбо паскаль считает так - он сначала выполняет выражение в правой части присваивания, а потом правую часть присваивает левой, то есть сначала есть переменная "r" - она возводится в квадрат функцией sqr - эта функция имеет такой же тип, как и тип переменной, поэтому, возводя в квадрат, вы получаете значение, находящееся за границей типа integer и получаете сообщение об ошибке
Код:
Последний раз редактировалось capta1n; 27.02.2009 в 02:12. |
27.02.2009, 02:06 | #4 | |
Регистрация: 27.02.2009
Сообщений: 7
|
спасибо! стало ясно.
но вот момент Цитата:
но при write(r) выводиться старое значение 800. 2Sazary: можно поподробнее про приведение типов. в чем тут логика? Последний раз редактировалось ray13; 27.02.2009 в 02:22. |
|
27.02.2009, 02:13 | #5 |
Форумчанин
Регистрация: 06.12.2008
Сообщений: 613
|
простите, я ошибся немного с объяснением, перечитайте снова.
|
27.02.2009, 02:24 | #6 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
27.02.2009, 03:04 | #7 |
Регистрация: 27.02.2009
Сообщений: 7
|
2capta1n: то есть sqr возвращает результат того же типа integer что и заданный аргумент r, а т.к. результат выходит за рамки Integerа - вылетает ошибка. то есть ошибка в выполнении самой функции и к операции присваивания она не имеет отношения. я правильно понял?
2Sazary: подобные ситуации - это глюк Турбо Паскаля? |
27.02.2009, 08:46 | #8 |
Форумчанин
Регистрация: 06.12.2008
Сообщений: 613
|
правильно поняли, да, а я первый раз наговорил чушь, простите
|
27.02.2009, 12:01 | #9 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
01.03.2009, 21:53 | #10 |
Регистрация: 27.02.2009
Сообщений: 7
|
спасибо за помощь! буду читать теорию)
кстати в тему особенностей компилятора, такой код срабатывает и выдает верный ответ Код:
Последний раз редактировалось ray13; 01.03.2009 в 21:59. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Nero - ошибка драйвера DMA. ошибка CRC | NecRoMat | Софт | 5 | 09.05.2012 01:29 |
Функция проверки переполнения в Delphi | TimeChip | Общие вопросы Delphi | 14 | 31.01.2009 17:04 |
Ошибка переполнения стека | Cannibal | Общие вопросы Delphi | 1 | 01.12.2008 21:32 |
ошибка "Переполнения" | Tanuska___:) | БД в Delphi | 0 | 08.10.2008 12:58 |
Ошибка переполнения стека из-за использования рекурсий | Morrigan13 | Помощь студентам | 5 | 02.04.2008 08:04 |