Есть составные типы — классы. Создайте класс Rational и храните там два числа, вот и будет вам числитель-знаменатель. Если вы создадите экземпляр этого класса, то сможете положить его в любой ящик, т.к. в ящике реально будет храниться просто указатель на ваш класс Rational в куче. Поэтому ящики и безразмерные.
Два числа я храню не в классе (типе), а в экземпляре класса (в переменной-объекте). А два других числа храню в другом экземпляре этого же класса. Экземпляры хранятся в куче, а в ящиках только указатели. Поэтому все ящики могут быть одного размера, равного размеру указателя. Но смысл имеет говорить о самих экземплярах, а не об указателях на них. (Можно и указатели на указатели сделать, но и о них говорить также неинтересно).
Чтобы создать треугольную матрицу, я сделаю список, первым элементом которого будет список из одного числа, вторым — список из двух чисел и так далее.
Память будет выделяться тогда, когда я захочу в эти списки что-то реально записывать.
Какое нам дело, когда реально выделяется память? Важно, что мы должны явно указать, сколько элементов в списке или в строке матрицы должно быть, т.е. сколько памяти и подо что нужно выделить.
Все, что я говорил про ящики, я говорил не про указатели.
Не надо путать свойства целых со свойством вероятности. Тервер может изучать вероятность нахождения любого целого числа в какой-то выборке, нпр. Если мы здесь и говорим про школу, то это не значит, что можно использовать примитивные шутки школьного уровня.
ИМХО очевидно, что если «requiring special processing», значит нормальный процессинг невозможен. Т.е. тоже самое сказано немного другими словами. Многие авторы обработку исключений по-простому называют обработкой ошибок. Нпр., Э. Троелсен, C# и платформа .NET, ПИТЕР, 2004, С.177.
Вы не поняли. Речь не о пустых ящиках письменного стола, в которые можно положить любой карандаш и любой листок бумаги с любой записью. А речь скорее о черных ящиках с разным алгоритмическим наполнением в смысле исполняемого кода. На входе граф может быть представлен списком смежности, нпр.:
1-2,2-3,3-1
если речь идёт не об алгоритмической сложности
Именно что разные представления зачастую имеют разную теоретическую (алгоритмическую) сложность. Таким образом, для одного графа имеем ящики разных типов!
В ящиках будут храниться любые значения. При этом у любого значения можно спросить: ты рациональное или иррациональное?
Не так все просто. В простом ящике размером N байт можно хранить целое число или несколько целых чисел или строку символов. Для иррациональных чисел обычно хранят их приближенные значения. То же самое делают и для рациональных чисел, но для них можно хранить числитель и знаменатель, тогда ящик должен содержать два подъящика (запись) — один для числителя и другой для знаменателя. Вот опять получаем ящик особого типа. А спрашивать у приближенного значения: ты рациональное или иррациональное? без толку. В нем нет такой информации.
Окей, технически это работает так: интерпретатор всегда выделяет память для переменных на «куче», а любая переменная — это просто указатель. Поэтому размер переменной всегда равен размеру указателя, и тут с памятью проблем не возникает.
Нет, не ok! Для представления графа треугольной матрицей мне в явном виде приходится выделять память, и никакой интерпретатор об этом догадаться не может:
setLength (adjMatrix,vertNum-1);
for i:=0 to vertNum-2 do
setLength (adjMatrix [i], i+1);
Именно для математики! В частности, для иррациональных чисел указывается ряд важных свойств и доказывается ряд теорем. Это не просто конкретные задачи.
Или вы простые числа тоже объявите отдельным «типом»?
И простые числа в математике специально изучают. И их подтипы — см. вики «Простые числа специального вида».
Экземпляр класса — это значение, которое вы помещаете в ящик. В этом смысле экземпляр класса ничем не отличается от числа 1, например. (1 — это экземпляр класса int).
Да, но у класса еще есть методы. Нпр., здесь я могу поместить один и тот же граф в разные классы-ящики. Результаты будут разными как по времени, так и по памяти.
В этом смысле, наверно, типов у переменных нет,
Но ведь различают уравнения, где корни-переменные рациональные числа, и где иррациональные. Для математики эти различия носят принципиальный характер.
Размер ящика как бы не ваша проблема, пусть интерпретатор об этом заботится.
Интерпретатор может не знать моих целей, нпр., из квадратной матрицы я хочу сделать треугольную (без лишних элементов).
Нужно ли вообще об этом подходе рассказывать в учебном заведении? Или отдать на самостоятельное освоение?
Все, что рассказывает учитель на уроке, ученик должен знать. Если не знает может получить 2. А за самостоятельное освоение двоек не ставят. Кому интересно — пусть осваивают. Учитель должен помочь.
Я просто думаю об обобщённых задачах вида «написать функцию, которая вычисляет квадратный корень» или «написать функцию, которая возвращает значение a / b».
ИМХО не надо ставить перед школьниками таких задач.
Прежде всего ящики бывают разных размеров. В однобайтовый ящик текст этого сообщения не влезет. А в математике делается разница между типом переменной и типом значения? Еще интересный вопрос: результат функции — это значение или переменная? И еще: экземпляр класса (объект) — это ящик?
Понятие о типе переменной берется из элементарной математики: одно дело найти решение СЛАУ в действительных числах, а другое дело найти решение той же системы в целых числах.
Спасибо, пробовал. И даже продукцию делал. Разговор с Вами продолжать не имеет смысла, пока Вы не дадите внятных ответов на поставленные вопросы. Складывается впечатление, что Вы механически зазубрили синтаксические правила нескольких языков, которые считаете современными, совершенно не задумываясь о причине таких правил. Объяснить не можете — значит не понимаете.
А «вернетесь» Вы хорошо сказали: разрешаете мне вернуться к обсуждению моей статьи?! Очень мило! :))
Вы не ответили почему нельзя написать: a = readInt (f)
Зачем нужны var или int? В чем логика такого решения? Или же здесь разработчики языка недодумали?
Два числа я храню не в классе (типе), а в экземпляре класса (в переменной-объекте). А два других числа храню в другом экземпляре этого же класса. Экземпляры хранятся в куче, а в ящиках только указатели. Поэтому все ящики могут быть одного размера, равного размеру указателя. Но смысл имеет говорить о самих экземплярах, а не об указателях на них. (Можно и указатели на указатели сделать, но и о них говорить также неинтересно).
Какое нам дело, когда реально выделяется память? Важно, что мы должны явно указать, сколько элементов в списке или в строке матрицы должно быть, т.е. сколько памяти и подо что нужно выделить.
Все, что я говорил про ящики, я говорил не про указатели.
1-2,2-3,3-1Именно что разные представления зачастую имеют разную теоретическую (алгоритмическую) сложность. Таким образом, для одного графа имеем ящики разных типов!
Не так все просто. В простом ящике размером N байт можно хранить целое число или несколько целых чисел или строку символов. Для иррациональных чисел обычно хранят их приближенные значения. То же самое делают и для рациональных чисел, но для них можно хранить числитель и знаменатель, тогда ящик должен содержать два подъящика (запись) — один для числителя и другой для знаменателя. Вот опять получаем ящик особого типа. А спрашивать у приближенного значения: ты рациональное или иррациональное? без толку. В нем нет такой информации.
Нет, не ok! Для представления графа треугольной матрицей мне в явном виде приходится выделять память, и никакой интерпретатор об этом догадаться не может:
И простые числа в математике специально изучают. И их подтипы — см. вики «Простые числа специального вида».
Но ведь различают уравнения, где корни-переменные рациональные числа, и где иррациональные. Для математики эти различия носят принципиальный характер.
Интерпретатор может не знать моих целей, нпр., из квадратной матрицы я хочу сделать треугольную (без лишних элементов).
Я правильно понял, что в Python можно написать:
и переменная «а» будет иметь целочисленное значение?
См. секцию «Обработка редких и исключительных ситуаций» в моей статье. Изложенная там философия явно не для школьника.
А «вернетесь» Вы хорошо сказали: разрешаете мне вернуться к обсуждению моей статьи?! Очень мило! :))
Хотите знать зачем я задаю эти вопросы? Чтобы Вы поняли, что школьники замучают учителя подобными вопросами. И т.о. подобные ЯП не для школы.
a = readInt (f)Зачем нужны var или int? В чем логика такого решения? Или же здесь разработчики языка недодумали?