![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
-notpron |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем добрый вечер, не могу никак понять, в чем разница между type и var? Скорее всего - я немного не допонял саму функцию type.
И я совсем запутался в порядковых типах данных, для чего они нужны? Как(не теоритически) можно проверить функцию, например, ord(x)? Заранее спасибо) |
![]() ![]() |
-notpron |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: ![]() ![]() ![]() |
Не надо ругаться, спокойнее. Просто аргументированный спор(хотя какой спор я могу вам предложить не знаю массивы
![]() Конструированный тип данных это тот тип, который конструируется(извините за тафтологию) самим программистом. Разве не так? И потом dec(min_element)= max_element не? возьмем тип данных Код type sixteen = 0..15; И вместе ненавистного вам dec возьмем inc, который действует по аналогичной системе. Inc(x) возвращает значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+1). Правильно? 15 это 1111 в двоичной системе. 1111 + 1 получается 1 0 0 0 0. Начальную единицу откидываем и получается inc(15)=0. Разве нет? Я не спорю - ошибаться могу, 100%. Спасибо большое за программу для использование порядковых типв данных, правда, очень пригодилось. И насчет FPC спасибо, но я использую school pack, ибо на mac я ничего не нашел ;) И насчет 10 чисел - вывести не через цикл а через перечисляемый тип данных. Не надо агрессии, правда. Я бы не хотел этого) Сообщение отредактировано: -notpron - 6.07.2011 5:00 |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я извиняюсь за встрятие..
Не надо ругаться, спокойнее. Просто аргументированный спор(хотя какой спор я могу вам предложить не знаю массивы -notpron, а кто ругался и где? Покажи мне то место, плз. А манера говорить у каждого своя - ты волен не слушать.. И учти, если ты будешь нести чушь, приговаривая при этом "я прав", - ты будешь получать ответы в таком именно духе. Само по себе нести чушь - пожалуйста, на то и форум. Но не говори "вы не правы" тем, кто тысячи таких как ты научил уже..![]() Цитата Конструированный тип данных это тот тип, который конструируется(извините за тафтологию) самим программистом. Разве не так? Нет, не так, и IUnknown тебе уже говорил это. У конструируемого есть синоним (или перевод на русский, если хочешь) - "составной". То есть он может состоять минимум из двух квантов определения типов. Но раз ты не знаешь массивы (и, наверное, записи), я затрудняюсь привести пример. А вообще - избегай "свободной трактовки терминов на основе здравого смысла и опыта", действуй только на основе определений.Цитата И потом dec(min_element)= max_element не? Нет.Цитата возьмем тип данных Ошибаешься, 100% Код type sixteen = 0..15; И вместе ненавистного вам dec возьмем inc, который действует по аналогичной системе. Inc(x) возвращает значение, следующее за х (для арифметических типов данных это эквивалентно оператору x:=x+1). Правильно? 15 это 1111 в двоичной системе. 1111 + 1 получается 1 0 0 0 0. Начальную единицу откидываем и получается inc(15)=0. Разве нет? Я не спорю - ошибаться могу, 100%. ![]() Твоя ошибка, по-видимому, есть результат трех факторов. 1. Неудачно выбран пример - я имею в иду вот это: Week = (sun, mon, tue, wed, thu, fri, sat);(кстати, ставь, пожалуйста, ПРАВИЛЬНЫЕ теги; прочти Правила форума и правила этого раздела - там все подробно написано) Почему неудачно? Потому что дни недели действительно зациклены, причем идеально (т.е. лучше, чем, скажем, числа в месяцах). Но это есть всего лишь свойство дней недели, а не общая математическая закономерность. Например, в некоторых карточных играх, шестерка бьет туза, а в некотороых - нет, не бьет. 2. Ты знаешь, как устроено машинное представление чисел (и это хорошо), но, видимо, не до конца (или кое-что не учитываешь). Если при сложении двух байт (или беззнаковых целых) происходит переполнение, действительно в результате будет число с отрезанным верхним разрядом. Но! Но при этом будет установлен признак переполнения. Иными словами, обрезание при переполнении есть вынужденная мера (поскольку любая реальная разрядная сетка конечна), но есть и средство исправить ситуацию. 3. У тебя в опциях компилятора выключена проверка выхода за пределы диапазона (range check). Вот это - очень плохо! Рекомендую тебе зайти в опции и установить ее range check в дефолт. И убирай его ТОЛЬКО после полной отладки программы, и ЕСЛИ собираешься отдать программу в эксплуатацию. Иначе ты хлебнешь горя.. )) Вот тебе пример программы, которая либо будет работать неправильно, либо выдаст три (ну, не одновременно)) ошибки выхода за диапазон. {$R+} // замени + на -, и прога пройдет - но результат будет неверный Зацикленные целые множества (группы "по модулю") весьма часто бывают нужны. Встроенной поддержки их в языке Pascal нет. Если у тебя в программе нужна такая функциональность (те же дни недели, например), ты должен сам явным образом определить сложение/вычитание (при этом очень удобно использовать перезагрузку операторов). Цитата насчет FPC спасибо, но я использую school pack, ибо на mac я ничего не нашел ;) Да? странно.. А про что тогда строчка: "Mac OS X and several crosscompilers" на странице скачивания FreePascal? Я сам, правда, эту ссылку не пробовал..Добавлено через 12 мин. Вдогонку еще один простенький примерчик использования типов. Допустим, твоя программа производит сложные расчеты. Ты использовал тип single для представления чисел в ней. Но потом (когда прога на много килобайт кода была уже написана) понял, что в некоторых случаях все же лучше использовать double (для большей точности). И ты начинаешь ползать по всей программе, состоящей из нескольких модулей, и менять там все single на double.. Причем, некоторые переменные могут не относиться к собственно расчетам, и их можно (и нужно) оставить single. И ты кусаешь локти.. А если бы у тебя было в самом начале: type- а потом везде (где надо) стояло бы tReal, то тебе надо было бы сделать всего одно изменение: type -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 8:45 |