Доброе время суток. .... Было такое объявление: Type Diapazon = record number: array[1..Maxd] of word; d:array[1..Maxd] of ShortInt; k:byte; zx:shortint; end; Var Diap:Diapazon; Затем, в тексте программы: if Diap.number[Diap.k]=n then Diap.d[Diap.k]:=(Data-5)*Multiplier else .... Вобщем, процедура умножения (при включенной проверке Overflow) прерывала программу c ошибкой 215. Data было = 4; Diap.k=1; Пробовал присваивать результат (-3)- все ок. Менял ShortInt на Integer - никакого толку.... Что бы это могло быть? Еще был случай с "IN" : if n in [1...max] then... max было равно 6 тысяч, однако, где то на значении 3xx выражение выдавало false. Затем, пройдя xx значений - true, потом опять false... Где N - просто счетчик
от 1 до ... Кто знает, что за глюк, подскажите,пожалуйста. С уважением Vitally.
Здравствуйте, Vitally! 1. 215 - это переполнение, т.е. результат выходит за границу типа переменной. "Multiplier" - это что за фиговина? Может из-за него переполнение возникает? Ведь shortint это всего-навсего -128..+127 :). 2. Не знаю, я попробовал воспроизвести ту-же ситуацию у себя (у меня freepascal 1.0.6) и несколько диапазонов n дают false, т.е. true идет в перемешку с false. Ответ отправлен: 08.11.2003, 05:08 Отправитель: sir henry Отвечает Boriss
Добрый день, Vitally! 2) in [...] - [...] - это SET OF и может быть только 256 элементов, скорее всего просто отбрасывается старшая часть (6000 > Word). Вернее, просто "раскладывается" число на другие байты. И не нужно, по-моему, такая конструкция. Легко заменить ее. 1) Я написал, как в приложении, никаких ошибок при Overflow и без. Может Вам стоит такой простой код, как у меня, проверить на своей машине. Или надо прислать всю прогу. По такому кусочку ошибку не найти. bsurin@mail.ru
Приложение: Ответ отправлен: 06.11.2003, 19:17 Отправитель: Boriss Отвечает Tancho
Приветствую Вас, Vitally! 1) Давай целую прогу, если хочешь поистине кто то тебе помочь - иначе все слова будут незря! 2) если реч идет о Tupbo Pascal'е то надо max <= 256! Поетому тип set of Integer не разрешен в Turbo Pascal'е вместо него исспользуется set of 0..255 или set of Byte! Ответ отправлен: 07.11.2003, 13:29 Отправитель: Tancho
Вопрос № 338
P.S. Простите, забыл: Const Multiplier = 3; С уважением Vitally.
Приветствую Вас, Vitally! В догонку ответу. То есть или в компиляторе ошибка, или что-то не так. Вы с помощью Watch значения установили? Пришли прогу на bsurin@mail.ru, но посмотреть смогу только в воскресенье. Удачи. Б. Сурин Ответ отправлен: 06.11.2003, 19:21 Отправитель: Boriss Отвечает Tancho
Приветствую Вас, Vitally! Это не меняеть дело! Давай прогу в Приложение если хочеш ответ быть польный! Ответ отправлен: 07.11.2003, 13:40 Отправитель: Tancho Отвечает sir henry
Доброе время суток, Vitally! Теперь другое дело :). На чем програмируем? У меня freepascal 1.0.6. Подобной ошибки при выполнении программы не было. См. приложение.
Приложение: Ответ отправлен: 08.11.2003, 05:22 Отправитель: sir henry
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.