Pull to refresh
14

Химик и программист.

32
Subscribers
Send message
Есть составные типы — классы. Создайте класс 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).
Да, но у класса еще есть методы. Нпр., здесь я могу поместить один и тот же граф в разные классы-ящики. Результаты будут разными как по времени, так и по памяти.
В этом смысле, наверно, типов у переменных нет,
Но ведь различают уравнения, где корни-переменные рациональные числа, и где иррациональные. Для математики эти различия носят принципиальный характер.
Размер ящика как бы не ваша проблема, пусть интерпретатор об этом заботится.

Интерпретатор может не знать моих целей, нпр., из квадратной матрицы я хочу сделать треугольную (без лишних элементов).
В MacOS 7.0 -8.0 чтение из файла насколько помню проходило следующим образом:

err := readFile (aFile, buf);
if err <>0 then // обработка ошибки
Нужно ли вообще об этом подходе рассказывать в учебном заведении? Или отдать на самостоятельное освоение?
Все, что рассказывает учитель на уроке, ученик должен знать. Если не знает может получить 2. А за самостоятельное освоение двоек не ставят. Кому интересно — пусть осваивают. Учитель должен помочь.
Я просто думаю об обобщённых задачах вида «написать функцию, которая вычисляет квадратный корень» или «написать функцию, которая возвращает значение a / b».
ИМХО не надо ставить перед школьниками таких задач.
Прежде всего ящики бывают разных размеров. В однобайтовый ящик текст этого сообщения не влезет. А в математике делается разница между типом переменной и типом значения? Еще интересный вопрос: результат функции — это значение или переменная? И еще: экземпляр класса (объект) — это ящик?
В Python не надо писать int


Я правильно понял, что в Python можно написать:
a = readInt (f)

и переменная «а» будет иметь целочисленное значение?

Обоснуйте, сошлитесь на опыт.
См. секцию «Обработка редких и исключительных ситуаций» в моей статье. Изложенная там философия явно не для школьника.
Откуда вообще берётся понятие о типе переменной?
Понятие о типе переменной берется из элементарной математики: одно дело найти решение СЛАУ в действительных числах, а другое дело найти решение той же системы в целых числах.
В Паскале все объявленные переменные инициализируются нулями (пустыми строками, нулевыми указателями)
Ошибаетесь. В разных продуктах по-разному.
пороли какую-то чушь
И лексика у Вас на уровне.
Спасибо, пробовал. И даже продукцию делал. Разговор с Вами продолжать не имеет смысла, пока Вы не дадите внятных ответов на поставленные вопросы. Складывается впечатление, что Вы механически зазубрили синтаксические правила нескольких языков, которые считаете современными, совершенно не задумываясь о причине таких правил. Объяснить не можете — значит не понимаете.

А «вернетесь» Вы хорошо сказали: разрешаете мне вернуться к обсуждению моей статьи?! Очень мило! :))
Непонятно ответили: readInt возвращает целое, т.о. «a» становится целым. Не нужно var, int.

Хотите знать зачем я задаю эти вопросы? Чтобы Вы поняли, что школьники замучают учителя подобными вопросами. И т.о. подобные ЯП не для школы.
Вы не ответили почему нельзя написать:
a = readInt (f)
Зачем нужны var или int? В чем логика такого решения? Или же здесь разработчики языка недодумали?

Information

Rating
Does not participate
Registered
Activity