Форум «Всё о Паскале» _ Теоретические вопросы _ type lat_bukvy = 'a'..'z','A'..'Z'; -- не работает -- почему?
Автор: udaaff 19.03.2007 4:55
В лекциях на intuit.ru встерчаются подобные конструкции --
type valid_for_identifiers = 'a'..'z','A'..'Z','_','0..9';
У меня turbo pascal 7.0, но такая конструкция не работает( Можно это как то испаравить или где она заработает (в кокой-то другой версии может)?
Автор: Артемий2 19.03.2007 5:04
А что за тип данных?Множество?Тогда set of добавь.
Автор: udaaff 19.03.2007 5:10
2 Артемий2 'a'..'z','A'..'Z','_','0..9' -- таким образом они задают тип -- т.е. диапазон всех возможных значений которые может принимать переменная данного типа дело тут не в множестве
Автор: Алена 19.03.2007 5:22
Цитата
таким образом они задают тип
не задается тип таким образом...
У тебя получается перемешивание: И перечислимый тип (о чем говорит запятая), И тип-интервал (о чем говорят две точки) одновременно. По отдельности это легально в синтаксисе Паскаля, вместе - нет.
Автор: udaaff 19.03.2007 6:08
2 Алена если не лень посмотри на сайте ww.intuit.ru/department/pl/plpascal/2/ -- у них таким образом все прекрасно задается p.s. не могу почему-то в текст сообщения вставить гиперссылку и 3W тоже -- выдает ошибку
Автор: Алена 19.03.2007 6:17
Цитата
у них таким образом все прекрасно задется
Пока сервис недоступен, но вот что получается:
var s: string; begin case s of 'aa': ; 'bb': ; 'cc': ; end; end.
У меня тоже все прекрасно задается. Пока не начнешь компилировать. Тогда тебя ждет сюрприз.
Точно так же и там: что значит задается? Они говорят, что это делается так? И приводят пример? Так работай с ним. Однако, ты его не можешь откомпилировать, верно? Когда же тебе объяснили, почему ты его и не сможешь запустить, ты опять приводишь ссылку. Туда, где НЕ работает. Где же логика?
Еще раз: единственное, что вот так можно описать - это константа:
Добавлено через 10 мин. Вот тебе еще информация к размышлению: http://zeus.sai.msu.ru:7000/programming/bp70_lr/lr4.shtml#7 Посмотри в фирменной документации, как описываются перечислимые и интервальные типы. А на Intuit мне после вот этого: вообще не хочется заходить больше
Автор: udaaff 19.03.2007 7:13
2 Алена Пасиба за разъяснение. Я просто подумал, что может у меня pascal не такой как на intuin.ru)) ... Думаю, что это будет в рамках данной темы: предположим есть тип:
superType = (elem_1, elem_2,... , elem_N);
можно ли как-нибудь из этого типа создать тип subType, который бы содержал к примеру первый, пятый и десятый элементы?
Автор: Lapp 19.03.2007 8:19
Цитата(udaaff @ 19.03.2007 3:13)
предположим есть тип:
superType = (elem_1, elem_2,... , elem_N);
можно ли как-нибудь из этого типа создать тип subType, который бы содержал к примеру первый, пятый и десятый элементы?
Нет, в Паскале нет такой возможности. Встречный вопрос: а зачем она тебе? Обычно такие конструкции делаются в теле программы. Например, есть тип Year для любого года. И есть годы до нашей эры, годы нашей эры, в них средние века, возрождение - или, скажем, можно делить по векам. Проверка типа - это проверка на корректность выполняемого действия (операция с годами), и она производится на этапе компиляции. А принадлежность года к той или иной эпохе - это уже задача программирования, и она вычисляется в процессе работы программы. Если ты имеешь в виду range check, которая может работать и на этапе выполнения, то для перечислимых типов ее просто нету..
М
Тема переносится в Pascal, Object Pascal > Теоретические вопросы
Автор: Алена 19.03.2007 8:34
Цитата
Если ты имеешь в виду range check, которая может работать и на этапе выполнения, то для перечислимых типов ее просто нету..
Небольшое уточнение: нет только в 16-битных компиляторах... 32-битные (FPC в частности) прекрасно производят Range-Check и для перечислимых типов тоже.
Автор: udaaff 19.03.2007 22:21
Цитата(Lapp @ 19.03.2007 3:19)
Встречный вопрос: а зачем она тебе?
В разделе задачи есть моя тема "типы данных определяемые пользователем". Тема лабы -- "типы данных определяемые пользователем", поэтому решение должно было строиться на этих типах. Задача была такая: вывести названия месяцев по сезону. Я решил решать ее исходя из того, что есть тип superType, ему соответствует массив названий его элементов (тип индексов массива -- superType), и есть подтипы данного типа. Затем, перечисляя элементы подтипа, можно было бы относительно их порядковых номеров, выводить названия его элементов. Я вначале из-за зимы тупился, пока месяца не сдвинул.)) Но потом я придумал другое решение попроще.. Хватит им и такого))