Здесь - обсуждение книги Осипова А.В. «PascalABC.NET: Введение в современное программирование»
Книга будет выкладываться по главам по мере написания.
В настоящий момент (7.01.19) выложены 8 глав
Здесь - обсуждение книги Осипова А.В. «PascalABC.NET: Введение в современное программирование»
Книга будет выкладываться по главам по мере написания.
В настоящий момент (7.01.19) выложены 8 глав
1.1.1 Тип BigInteger
Позволяет работать с данными, имеющими в записи практически неограниченное количество цифр. Данные этого типа хранятся в виде четырехбитных двоичных кодов десятичных цифр, упакованных по две цифры в байт.
С чего вдруг? BigInteger хранит внутри массив 32-битных чисел, которые вместе выстраиваются цепочку бит готового числа.
Но это поверхностное объяснение, я уже сам плохо припоминаю, но хранение в десятичном формате - это точно бред. По хорошему - надо декомпилировать и нормально посмотреть.
Я не нашел в документации этой фразы. Вообще в книге подобного рода не нужно говорить о том, как хранится внутри такой объект как BigInteger. Это просто абстракция длинного целого. В Python точно никто не говорит, как устроено внутри длинное целое
Ну, все подробности, конечно, указывать не надо. Но дезинформировать тоже плохо.
BigInteger.cs (65,9 КБ)
Вот раздел с не_статичными полями:
// For values int.MinValue < n <= int.MaxValue, the value is stored in sign
// and _bits is null. For all other values, sign is +1 or -1 and the bits are in _bits
internal int _sign;
internal uint[] _bits;
Думаю, комментариев от разрабов .Net должно быть достаточно чтоб всё понять.
А Д.Кнут-то и не знает! Вы бы ему сообщили заодно, что двоично-десятичная аврифметика многократной точности - это бред.
Скорее всего - да, Вы правы, не нужно. Уже хотя бы для того, чтобы не вызывать дискуссий. Уже убрал, так что как только будет перевыложено, вопрос снимется)))
Залил новую первую главу
Спасибо!
1.4.3:
-2*a+5*b+---+--+++-2*c ((-2)*3) + (5*(-4)) +---+--+++ ((-2)*8) (-6)+(-20) +---+--+++ (-16) (-26) +---+--+++ (-16) (-26) + (-(-(-(+(-(-(+(+(+(-16))))))))))
Унарные операции имеют больший приоритет чем умножение:
type
t1 = class
static function operator-(a: t1): t1;
begin
writeln('-');
Result := a;
end;
static function operator*(a: t1; b: integer): t1;
begin
writeln('*i');
Result := a;
end;
static function operator*(a: integer; b: t1): t1;
begin
writeln('i*');
Result := b;
end;
end;
begin
var a := new t1;
var a1 := -----5*-a;
writeln('='*30);
var a2 := -----a*5;
end.
А значит должно быть так:
-2*a+5*b+---+--+++-2*c
((-2)*3) + (5*(-4)) + ((---+--+++-2)*8)
...
2.2.3.
Стоит ещё написать о том, что 0*бесконечность (любую) тоже даёт NaN.
Как и делению 2 бесконечностей (опять же, знаки не важны).
3.1.1.2.
Вы записали моделирование эквивалентности как not (a xor b)
, но зачем, если a = b
не только быстрее и проще, а ещё и более интуитивно, исходя из названия. Ведь эквивалентность и равенство это синонимы.
Да, Вы правы, выражение было разобрано не с учетом приоритета унарных операций над бинарными, я поправил, будет перевыложено (отслеживается датой выкладки файла).
Вы, видимо, имели в виду 2.3.3? Но там речь не о разборе случаев, когда получается NaN (это нам математика подскажет), а объясняются результаты приведенного примера.
Операция “=” - не логическая, а операция отношения. В табличке дается принятая в булевой алгебре система эквивалентных замен одних логических операций комбинацией других. Именно логических операций. Т.е. тут речь не о том, как короче написать, а как правильно заменить.
В булевой алгебре нет понятия “равенство”, так что это не синонимы.
Спасибо за Ваши замечания и предложения, они помогают сделать материал качественнее.
Самый конец 4.1.
В данном случае говорят, что производится обращение к методу
Now
классаDateTime
Now
это свойство. Конечно, в итоге, в IL коде вызывается функция, но коде на паскале - обращение происходит именно к свойству а не методу.
Если не хотите вводить ещё 1 название - приведите, лучше, в пример 1 из функций System.Math
, о которых вы говорили в, вроде, первой главе.
Свойство, конечно же. Поправлю, спасибо.
@RAlex, глава 5 - последовательности. Что конкретно там будет раскрыто? Будет дано понятие последовательности и также описание стандартных подпрограмм для работы с ними, или же будет сделан уклон в сторону .Net (описание System.Linq.Enumerable, к примеру)?
Этого точно не будет. Иначе получится очередной бесполезный опус с очередным кривым авторским толкованием документации от Microsoft.
Все они [законы - примечание мое] выражены в самых ясных и простых терминах, и эти люди не отличаются такой изворотливостью ума, чтобы открывать в законе несколько смыслов; писать комментарий к какому-либо закону считается большим преступлением. (Дж. Свифт. “Путешествия Гулливера”)
Не совсем понимаю, для чего такая спешка: часть 5 будет опубликована через день-два. Но если уж так любопытно, вот P3.pdf (302,9 КБ) оглавление этой части, пусть не совсем актуальное, но все же…
Алекс, хотя я считаю, что в данной версии вы зря не пользуетесь планированием, контрольными вопросами и преимуществами электронной версии, а именно - подсказками, схемами и ссылками, однако у меня такой вопрос:
Как вы сами считаете, выкладка соответствует метод. требованиям, чтобы после ознакомления с материалом читатели могли, например,
Также хотя повторение и теория иногда полезны, но в данной версии не совсем понятна целевая аудитория - требования к имеющимся знаниям, на основе которых строится дальнейшая целостная картинка. И если насчёт практических заданий пока* рановато, то примеры вида
немного напрягают: ГДЕ такое применяют? НАСКОЛЬКО часто? ЦЕЛЬ именно такого примера?
Кроме того, планируется ли Список рекомендуемой литературы?
Благодарю
Все дело в том, что это вовсе не электронная версия. Это фрагменты полноценной книги, т.е. издания, ориентированного на традиционную полиграфию. В силу определенных обстоятельств приходится выкладывать фрагменты частей книги, набранные в Word. Эти части практически не сверстаны, если говорить о полиграфических требованиях, в них отсутствуют подрисуночные подписи, часть таблиц также не имеет подписей. Ссылки сделаны вручную и при вставке хотя бы одного подраздела все рассыпется. Куда уж тут вести речь о заданиях и т.п.
Далее, это абсолютно не учебник, не методическое пособие и даже не самоучитель в том виде, в каком их привыкли видеть. Скорее, это своеобразный справочник, в определенной степени раскрывающий возможности PascalABC.NЕТ. Это и не поваренная книга в стиле “Если Вам надо то-то - сделайте а) б) в)…”. Поэтому не нужно пытаться отыскать тут какие-то глубинные методики, предметные и межпредметные связи и прочую учительскую, простите великодушно, шелуху. То, что хорошо в учебнике или в аудитории, тут не работает. Все проще и одновременно сложнее.
Попытка написать учебник будет заранее обречена на провал. Авторы PascalABC.NЕТ создали не просто очередной язык программирования, - они создали почти необъятный язык. Который охватывает и то, что традиционно понимается под Паскалем, и большую часть С#, и какие-то идеи из Python и Haskell… По каждому из этих языков написаны толстенные книги, но ни одна из них не учит “всему”. Какой же должна быть тогда книга, охватывающая PascalABC.NЕТ, если делать ее в форме традиционного учебника? Семитомным изданием, где каждый том будет из шестисот страниц? И писать все это нужно будет лет десять? Надеюсь, я понятно объяснил, почему это не учебник.
Написать справочник в чистом виде? Но он не уйдет далеко от Справки, которая уже есть в PascalABC.NЕТ. Да и какова ценность такого справочника?
Важная особенность PascalABC.NЕТ в том, что он соединил, казалось бы, несоединимое, перекинул мостик от традиционно изучаемого в школах и даже на первых курсах многих вузов языка Паскаль, к идеям и технологиям, заложенным в самые современные и востребованные языки. Поэтому и “подавать” этот язык следует, на мой взгляд, несколько нетрадиционно: не в форме учебника или справочника.
Подача материала в форме “У меня есть задача и ее нужно/можно/следует решать так” - это то, что мы сейчас имеем при натаскивании школьников на ОГЭ и ЕГЭ. То, что стремительно ведет к повсеместному отупению учащихся. Вместо размышлений - судорожный поиск наиболее подходящего под задачу “рецепта”. Увы, у меня за последние пять лет образовался огромнейший опыт общения с “типичными школьниками”, озабоченными решением различных задач по информатике и тенденция именно такова: “мы такие задачи решаем вот по такой схеме:…”. Понимаете? “Учитель сказал, что программа всегда начинается с program имя. Если она так не начинается, значит программа неверна”. Спрашиваешь: “Да почему же неверна, если что есть этот program, что нет его - результат одинаков?”. - А потому, что она оформлена неправильно! И этот шаблон из головы выбить почти нереально. И так во всем. Вот что сделала с детьми нынешняя система образования. А Вы задаете вопрос о том, почему подача материала не следует привычному шаблону. Хотите конкретной пользы от приведенного примера, поясняющего, как работает то или иное средство языка. Попробуйте подумать вот над чем: если в примере видна конкретная польза, не станет ли он очередным шаблоном, который по привычке будет истолкован, как рекомендованный к запоминанию и применению? Помните, в магазине манекены ставят без головы или без лица - чтобы не отвлекали от сути - того, что манекен демонстрирует.? Так и здесь: многие примеры намеренно даны нереальными и бестолковыми, чтобы их не пытались брать за образец. В то же время, в последующих частях можно заметить отдельные разделы, где даются именно содержательные примеры по решению тех или иных задач. Своего рода мастер-класс. Но это не система, а исключение.
Список рекомендованной литературы? Рекомендованной кому и с какой целью? С целью дальнейшего изучения языка? Пока рекомендовать, увы, особо нечего. Мы не должны забывать, что язык - это лишь инструмент, позволяющий с определенной степенью надежности, ясности и скорости довести спроектированный алгоритм до процессора. Эти книга - она всего лишь по языку. Инструменту программиста. Какие у этого инструмента особенности и как их можно использовать, чтобы получить результат быстрее и нагляднее, чем с помощью других инструментов. Поэтому целевая аудитория - те, кто хочет попытаться этот инструмент использовать.
Я хочу, чтобы тут была полная ясность: материал выложен в ознакомительных целях, главы неполные (нет запланированных примеров, заданий и ответов для самостоятельной работы), нет справочного раздела, глоссария, перекрестных ссылок, В конечном счете предполагается, что будет “по-взрослому” (т.е. с учетом требований современной полиграфии) сверстана книга, как единое целое. Она будет в открытом доступе в формате pdf (возможно, также в e-pub и fb2). Также, если возникнет потребность, будет возможно делать по предзаказу полноценные бумажные тиражи в указанном объеме, для чего и будет сделана верстка полиграфического уровня.
Хорошо. Допустим, вы планируете обычную книгу, а не интерактивный контент электронного варианта типа CHM. Однако это не объясняет в нынешнем варианте отсутствие (1) плана “урока”, (2) целевой аудитории и (3) цели урока/абзаца/раздела/книги. Не бывает обучения ради обучения – это всего лишь средство достижения чего-то; и чем выше осознание, тем конкретнее.
Далее, ваши личные предпочтения и авторское видение вполне имеют право на самовыражение, однако какой смысл брать именно PascalABC.NEТ с отходом от Паскаля и без опоры (пока что хотя бы на базовые) средства и возможности .NEТ? Разумеется, придётся сравнивать старые и новые универсалии и варианты, уточняя рекомендуемые паттерны и современные тенденции, но это ещё большая степень абстрагирования. В любом случае, это не объясняет (частые? наглядные? полезные?) примеры вроде y:= -2 * a + 5 * b + - - - + - - + + + - 2 * c;
Насчёт ссылок и рекомендаций, вы действительно не читали ни книг, ни справочников, ни статьи, вам ничего не нравится из опубликованного в бумажном или электронном виде (почти за полустолетие), вы добывали знания исключительно эмпирически и нечего не можете посоветовать для дальнейшего ознакомления с конкретной темой или вопросом? Не буду цитировать Станиславского, но что-то не верится…
Ладно, постараюсь делать акцент на сути, а не форме
P.S. Лично я считаю, что, как и с иностранными языками, в бывшем СССР программирование зря вырывают из предметной области – из математики, физики, химии, биологии, литературы и даже спорта, потому что это не вакуумные кони а-ля экзотические вещи в себе, а межпредметное (почти универсальное) средство решения конкретных задач
Честно говоря, пункт 1.4.3 Игры с унарным плюсом и минусом не имеет отношения к PascalABC.NET и современному программированию
Эта фраза немного непонятна. Вроде книга как раз про PascalABC.NEТ
А каким Вы видите список рекомендуемой литературы учитывая то, что литературы по PascalABC.NET нет?
Да, я бы тоже хотел это уточнить - возможно, во введении.