IPB
ЛогинПароль:

> Работа со множествами, FPC, Будьте аккуратнее :)
volvo
сообщение 5.11.2010 22:51
Сообщение #1


Гость






Привет всем.

Сегодня наткнулся на непонятное (с точки зрения Паскаля) поведение FPC. Вот такой простейший код, совершенно корректно отрабатывающий в Турбо Паскале:

type
tset = set of 'a' .. 'z';
const
myset: tset = ['a' .. 'z'];
s: string = 'the test';
count: integer = 0;
var
i: integer;

begin
for i := 1 to length(s) do
begin
if s[ i ] in myset then inc(count);
end;
writeln(count);
end.

Попробуйте без его компиляции и запуска определить, что будет выведено на печать. А потом запустите на выполнение... smile.gif

Так что осторожнее с множествами...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Archon
сообщение 6.11.2010 10:53
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Delphi не ругается ни при выключенном RangeCheck, ни при включенном. При операциях с числами аргументы приводятся к большему диапазону, так-что я не вижу смысла в случае с множествами поступать иначе.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.11.2010 5:31
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Archon @ 6.11.2010 10:53) *
При операциях с числами аргументы приводятся к большему диапазону, так-что я не вижу смысла в случае с множествами поступать иначе.
То, что ты его не видишь, не значит, что его нет )). Я уже привел ситуацию, когда такое поведение может быть полезным. Что касается больший/меньший диапазон - это неправильное проектирование числовых свойств на множества. Мне это тоже сначала пришло в голову, потом я покрутил в мозгах и понял, что это совсем разные вещи. В числах диапазон - это, как правило, ограничение, наложенное вычислительными возможностями. А тут ты можешь задать
tak = set of 'a'..'k';
tlz = set of 'l'..'z';

- и причиной для этого может быть именно отслеживание диапазона средствами компилятора на этапе отладки. Всякое "приведение, исходя из здравого смысла" тут неуместно. Арчон, ты в ладах с граматиками и т.п. stuff'ом, ты должен это понять (или строго доказать мне обратное)).

Молчание volvo я склонен воспринимать как согласие со мной (если, конечно, он не супер занят на другом фронте)). Зная его нелюбовь признавать свои ляпы (очень редкие, правда), я полагаю, что он просто отмалчивается.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
volvo   Работа со множествами, FPC   5.11.2010 22:51
TarasBer   Должно быть 7 же, а в ФПЦ чё за прикол происходит?   5.11.2010 23:02
Archon   FreePascal 2.4.0. Предсказуемо, 7.   5.11.2010 23:17
volvo   Ну вот, и я думал, что 7... Однако, на самом дел...   5.11.2010 23:20
Lapp   Вот я и думаю, это ж баг? Так быть не должно - не ...   6.11.2010 2:45
volvo   , и надо выбрасывать критическую ошибку, да? В топ...   6.11.2010 2:59
Lapp   И еще одно - что мне совершенно непонятно. Откомпи...   6.11.2010 3:04
Lapp   Я еще подумаю над этим..Я подумал, как и обещал. ...   6.11.2010 8:26
Archon   Delphi не ругается ни при выключенном RangeCheck, ...   6.11.2010 10:53
Lapp   При операциях с числами аргументы приводятся к бол...   7.11.2010 5:31
Client   ошибка всегда, если Range Checking включен, во все...   6.11.2010 11:25
volvo   Я не отмалчиваюсь, я просто сейчас сидел и разбира...   7.11.2010 14:20
Lapp   Если так все-таки было задумано, то чего бы не сде...   8.11.2010 4:12
volvo   Нет еще... Сегодня вечером запощу.   8.11.2010 13:28


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"