Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 195
от 09.11.2003, 19:32

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 339
Отправлено ответов: 1181
Активность: 348.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

sir henry
Статус: Опытный
Общий рейтинг: 157.14
[Подробней >>]
Boriss
Статус: Опытный
Общий рейтинг: 139.18
Телефон: (8342) 324312
[Подробней >>]
Tancho
Статус: Опытный
Общий рейтинг: 150.76
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 337. Доброе время суток. .... Было такое объявление: Type Diapazon = record number: array[1..Ma... (ответов: 3)
Вопрос № 338. P.S. Простите, забыл: Const Multiplier = 3; С уважением Vitally.... (ответов: 3)

Вопросов: 2, ответов: 6


 Вопрос № 337

Доброе время суток.
....
Было такое объявление:
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.



Вопрос отправлен: 06.11.2003, 17:54
Отправитель: Vitally

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Здравствуйте, 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.



Вопрос отправлен: 06.11.2003, 18:09
Отправитель: Vitally

[Следующий вопрос >>] [Список вопросов]

Отвечает Boriss

Приветствую Вас, 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.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (32)
C / C++ (26)
Perl (3)
Builder / Delphi (22)
Pascal (20)
Basic / VBA (6)
Java / JavaScript (8)
PHP (13)
Криптография (9)
WinAPI (14)
Пользователю
Windows 95/98/Me (45)
Windows NT/2000/XP (61)
"Железо" (39)
Поиск информации (28)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (16)
Юристу
Гражданское право (11)
Семейное право (8)
Трудовое право (8)
КоАП (8)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное