Версия PascalABC.NET 3.2

Прежде всего должны появиться такие учебники. А для этого их авторы должны сами многое понять. Вы интересовались, что сейчас в школах делается с информатикой? Видели, какое количество учебников по информатике выпущено? У нас есть сайт, где эти учебники выложены по всем предметам. Вот он: http://nashol.com/informatika-i-komputeri/#po_klassam_1 Только для начальной школы (1-4 класс) учебников по информатике ВОСЕМЬДЕСЯТ ВОСЕМЬ штук !!! Как думаете, быстро они поменяются? Быстро школы ими всеми пользоваться перестанут и перейдут на некий великий новый единый учебник?

Вот поэтому старый Паскаль (и даже ТурбоПаскаль) подобно некоему стойкому сорняку еще долго будет процветать. И, с одной стороны, такие учебники (и учителя), с другой - некий СуперПаскаль, который перестает быть совместимым со всем этим материалом. И каковы шансы ему в школах остаться массово?

А какие другие варианты есть?

Ясно какие. Для школы - оставить те версии, что у них есть. Так и будут сидеть на турбопаскалях, в крайнем случае - на FPC. А потом, со временем, от безысходности перейдут на ту систему программирования, которая будет им спущена “сверху” в форме нового учебника информатики. Возможно, какой-нибудь Пайтон. Для школы ведь что нужно? Чтобы попроще, чтобы и учитель любой смог объяснить, и част детей смогла понять. В задачу школы ведь не входит выпестовать готового программиста из каждого школьника. И каков шанс того, что новый учебник будет базироваться на диалекте ABC.Net языка Паскаль?

Еще раз, это же очевидно! Чтобы приучить школы к ABC.NET, надо дать им возможность сначала работать со средой ABC.NET по-старому, т.е. программы должны быть 100% совместимы с приводимыми в учебниках, которые школы используют в настоящее время. И только потом уже, когда привыкнут, предлагать переходить на “новый Паскаль”. Для этого нужно, чтобы справочная система содержала полный и точный список отличий нового Паскаля от старого, а также содержала рекомендации по портированию программ из старой версии в новую и наоборот. Конечно, все это при наличии в меню оболочки опции переключения между версиями.

Ну смотрите - Вы сами всё верно объясняете. Нас нет на этом празднике жизни. То есть вначале - до упора - Free Pascal, а потом - Python. Мне непонятно, зачем для этих людей стараться.

Мы создали современную внутренне сбалансированную систему. В ней все возможности - логичные, правильные, чистые для современного обучения. Вместо этого Вы зачем-то предлагаете нам реализовать старую систему, поддерживающую далёкое прошлое, которая на короткий период обеспечит тех несчастных людей, которые запутались между далёким прошлым и неопределенным будущим. Мне непонятны эти вложения сил и средств - совершенно.

Ещё раз - код символа - это то целое, как он хранится в памяти, а не то, как было в старых версиях, когда символ был однобайтовым.

Странно. Видимо я чего-то не понимаю во внутренней кухне вашей разработки. У вас уже была система, которая все это “далекое прошлое” поддерживала, потому что она обладала практически полной совместимостью с этими старыми системами (за исключением, быть может, работы с указателями). Последнее время появилась тенденция отхода от этой совместимости. И я не понимаю, что мешает просто сохранить опциональную возможность работать по-старому? Некоторое разбухание кода продукта? Ну будет не 6 Мб инсталлятор, а 7 или 8 - это так уж существенно? По сути, вопрос ведь лишь в синтаксисе - неужели проблемно по какому-то признаку вызов Ord() на уровне некоего препроцессора подменить на OrdANSI() ? Или в цикле со счетчиком текстуально подменить for ijk:=m … на некое for var _MCC_ijk:=m … и такую же подмену сделать в теле цикла? Да, при этом несколько пострадает отладчик в таких циклах, но об этом можно сразу написать - такая, мол, плата, за желание работать в старом синтаксисе. У вас ведь есть некий препроцессор, который умеет форматировать исходный текст. Достаточно лишь его немного модифицировать. Неужели это так трудоемко?

Пока что еще есть. И “эти люди” - практически вся школьная система. Достаточно лишь сохранить совместимость - и ваш отличный программный продукт займет достойное место, постепенно вытесняя отжившее свое версии.

Да, Вы правы. Та система - Pascal ABC - делалась действительно как современный клон Free Pascalя - никаких новых языковых возможностей у нее не было. Она была действительно ориентирована на школьников. Её разработка прекращена в 2008. PascalABC.NET - другая система, сейчас - сильно другой язык. Совместимости нет - я знаю около 100 мест в компиляторе, которые работают не так.

Не буду спорить. С точки зрения разработки компиляторов так делать нельзя. Текстуально вообще в компиляторах ничего так просто не делается - нужен семантический анализ.

Я вспоминаю, как нас долго просили, ругали - чего только не делали - что у нас в нулевом байте строки не хранится её длина.

Школьную систему надо менять. Это - безотносительно к PascalABC.NET. Неспособность усвоить что-то новое и реплицирование этого в учениках - это самая плохая характеристика школьной системы. И - знаете - если мы это будем поддерживать хоть как-то - это какое-то преступление. У нас не так много средств воздействия на школьную систему - это одно из них.

У нас по-существу весь спор крутится вокруг Ord и for var. Еще раз повторю своё мнение по этим вопросам. Ord - код символа. То есть то, как символ хранится в памяти. Не то, как он хранился в памяти когда-то, а то, как он хранится в памяти сейчас. Вот доказательство:

begin
  Println(Ord('ю'));
  Println(integer('ю'));
end.

Как хранится, таков и код. Для русских символов код - четырехзначный - что бы там ни говорил ваш учитель :slight_smile:

Переменную цикла надо описывать в заголовке цикла. Иное - плохо. При работе в интегрированной среде PascalABC.NET об этом Вам постоянно будет напоминать предупреждение. Не ошибка, нет. Но - предупреждение.

Да все в один голос твердят, что надо менять школьную систему. Но она теперь под ЕГЭ заточена, а ЕГЭ - это самое большое зло, которое только можно придумать. Но есть мощное лобби, которое кормится вокруг ЕГЭ и им наплевать на результат - повальное оглупление школьников, потому что их дети получают совсем иное образование и в иных местах. Не буду дальше произносить пламенных речей для трибуны, думаю, моя позиция понятна и так. Но беда в том, что это самое “У нас не так много средств воздействия на школьную систему - это одно из них.” - оно сейчас сродни некогда расхожему “Назло кондуктору пойду пешком”. Лучшее средство воздействия - привлекать сторонников изнутри, для чего не нужно им мешать, а наоборот, всячески потакать, давая возможность внедрять PascalABC.Net в школьном процессе. А вот потом, когда она ПРОЧНО займет нишу и потеснит другие диалекты, потом можно и объявить, что через полгода (3 месяца, год и т.п) более не будут поддерживаться те или иные вещи в языке, потому что они признаны несовместимыми с современными концепциями. И вот тогда уже не будет возврата на иные диалекты и придется переучиваться. А сейчас у Вас получается позиция совсем не борцов - скорее страусов.

Посмотрите, как тонко поступила в свое время Майкрософт, исподволь, отчаянно демпингуя, распространяя по учебным заведениям свои продукты - туда, где безраздельно царили “макинтоши”. Как майкрософт внедрилась с MS SQL сервер и MS Office настолько, что их у нас в стране никто не только потеснить - фактически даже подвинуть не может. А теперь они делают все, что хотят. Захотели - перешли на НЕТ-платформу. Захотели - сделали новые продукты, работающими на операционке не ниже Win8 64 бит. Посмотрите на Adobe! они сначала проникли везде со своими форматами файлов, потом с продуктами для обработки графики и видео, а пару лет назад заявили: видео теперь можно обрабатывать на системе не ниже Win7/64 бит. И те, кто на видео завязан, молча и безропотно выкинули свои компьютеры со старым железом и поплелись приобретать новые.

НО!!! Это все было после того, как эти фирмы людей прочно подсадили на свои продукты. А вы идете иным путем: “не хочешь - не ешь!”. Конечно, что удивительного будет, если ваша разработка останется не у дел в результате тех или иных несовместимостей. А жаль. Очень.

1 лайк

Да, я согласен с вашей оценкой про “проникновение”. Вы говорите о том, что мы неверно оценили момент устанавливания своих правил. Это - серьёзный аргумент.

Нам кажется, что верно.

Здесь: http://pascalabc.net/downloads/Presentations/PABC.NET_vs_Pascal_2016.pdf на третьем слайде - данные московских олимпиад по информатике. Они свидетельствуют, что PascalABC.NET используется в 4-10 раз чаще Free Pascal.

Мы знаем также ряд школ г. Ростова (например, это математическая школа № 5) где преподаватель запрещает школьникам использовать PascalABC.NET. Дело там плохо и изменится оно - увы - только со сменой преподавателя.

На олимпиадах по программированию ситуация тоже двойственна. Наши школьники жаловались, что на отдельных олимпиадах им разрешают писать на PascalABC.NET, но проверяющая система всё равно проверяет, используя Free Pascal. Что полностью всё обесценивает.

Даже когда в родном институте проводится олимпиада по программированию для школьников, мне каждый раз стоит больших усилий убедить организатора и потом ещё нескольких людей поставить свежую версию, после чего приходится выслушивать, что Паскаль не должен использоваться в олимпиадах, потому что на международных олимпиадах он не используется, и много еще чего приходится выслушивать.

Кроме того, в Ростове существует лобби проверяющих ЕГЭ (все они как-то аффилиированы с ДГТУ - бывшим центром по проверке ЕГЭ), которые при проверке ЕГЭ рубят любой синтаксис PascalABC.NET без объяснения причин. Учитывая, что количество удовлетворённых апелляций по ЕГЭ по информатике в этом году составляет всего 7%, считаю эту сферу безнадёжной. То есть, индекс ненависти к новому очень высок. Там тоже царствует Free Pascal или точнее некий виртуальный Паскаль со своими неявными наборами требований, очищенными от всего нового и прогрессивного. Таким образом, описанного вами метода проникновения PascalABC.NET в школы недостаточно. Можно долго убеждать школу, но пока не сменятся проверяющие ЕГЭ, пока не сменятся типы заданий ЕГЭ, пока не будут выпущены школьные учебники по PascalABC.NET, - ситуация не стронется с мёртвой точки.

Таким образом, я хочу сказать, что картинка тут не такая, что Вы нарисовали - всё плохо на разных ступенях и они взаимосвязаны.

Вот по пятой школе - честно, удивлен. Я ведь и сам ростовский. Еще со своих школьных времен помню про “пятую и двадцатую” - две математические школы - кузницы “эргэушной абитуры”. Мне казалось, что уж хоть в “пятерке” университет как-то навести порядок смог. Ан нет. Печально, процесс гниения, оказывается, зашел гораздо дальше, чем думалось.

Международные олимпиады - и что, мы еще долго будем им заглядывать, извиняюсь, “под хвост”? Нам нужно свои кадры учить классическому алгоритмическому мышлению и современным тенденциям в программировании, а уж с этим к любому языку человек сумеет адаптироваться очень быстро.

А с ЕГЭ - извиняюсь еще раз, но давайте посмотрим положение о ЕГЭ. Посмотрим руководящие материалы ФИПИ для проверяющих. там что сказано? Что ученик имеет право писать программы на ЛЮБОЙ ВЕРСИИ ЛЮБОГО ЯЗЫКА программирования, а также НА ЕСТЕСТВЕННОМ ЯЗЫКЕ. И единственное, что оно должен сделать - указать точное название и версию языка, на котором написана программа, а подобрать эксперта - это головная боль комиссии. Так что все это “режет ПаскальАБЦ” совершенно незаконно и есть повод не только для апелляции, а даже для прямых жалоб на нарушение прав экзаменуемого, в том числе, при необходимости, в судебном порядке. Уж не знаю, что там за 7%… народ настолько безразличен к нарушениям своих прав? Но тогда он ничего иного и не заслуживает…

С языками вообще что-то странное. Смотрю материалы с сайта небезызвестного Константина Полякова. Планирует делать учебник по информатике в соответствии с ФГОС. Говорит, что будет там Паскаль, Си, Питон, …а вот Бейсика там не будет. Допустим. Т.е. сразу закрывается от школьников возможность программирования в среде MS Officе, изучению которой в школах отведено не так уж и мало часов. Далее, в программе стоит СУБД. И что там предлагается? Правильно, MS Access! А что там у нас со входным языком? Присмотримся… да Майкрософт этого и не скрывал никогда - это же Visual Basic, разбавленный объектными штучками и включающий язык запросов для связи с движком MS Access. Т.е. Бейсик мы стыдливо изгнали (непонятно зачем)… а тем временем, “ночью под одеялом” его изучаем?

С моей точки зрения, для школьников преимущество использовать ABC.NET. Во-первых, действительно, так сложилось исторически, что Паскаль прочно сидит в школьной программе. И первые знания начинаются с его операторов. Во-вторых, именно ABC.NET позволяет идти школьнику значительно дальше за рамки школьной программы. А не перескакивать на другие языки.

Важный момент. Школьники, что хотят программировать, к 9-10 классу начинают активно участвовать в различных “олимпиадах”. На моём опыте, это https://acmp.ru/ и http://codeforces.com/ Но проблема в том, что на этих соревнованиях нет компиляторов ABC.NET… Именно в этот момент развития, школьнику приходится уходить с Паскаля ABC.NET на другой язык, т.к. что-то делать и подгонять на соревнованиях код под ФриПаскальу них уже нет желания.

Создателям ABC.NET следует подумать именно о продвижении своего детища на соревновательных площадках.

1 лайк

Первые знания алгоязыков в школе сейчас начинаются с АЯ - Алгоритмического Языка, придуманного Ершовым (его еще тогда сразу же прозвали “Ершол” за алгол-подобную структуру) и позднее развитым до языка АЛГО, который по сути почти русская калька с Паскаля. Посему переход на Паскаль оказывается почти безболезненным, сводясь во многом к замене русских служебных слов на англоязычные. Но это в школе. Когда мне приходится учить детишек (слава богу, я не школьный учитель), я начинаю с Экселя. Его ячейка - почти идеальная метафора некоего элемента памяти, куда можно поместить все, что угодно и не задумываться о каких-то там “типах”. Так же элементарно вводятся понятия одномерных массивов - строк/столбцов и даже двумерных - прямоугольные области. А когда ребенок к этому привыкает, в ячейках начинают появляться формулы. Потом работа легко автоматизируется макросами (есть же макрорекодер!) и мы подходим к миру программирования. Знания западают в головы быстро и прочно, массивы не становятся страшилками. И параллельно со школьной программой приходит понимание, что языки - лишь инструмент, средство для записи алгоритмов, не более, т.е. дело наживное. А главное - алгоритмы. И уж потом можно переходить на Паскаль, который действительно для школьников хорош. Особенно, если сначала использовать не базовые возможности языка, а “продвинутые” из версии 3.2. Не тратить время на бесконечные циклы накопления сумм и нахождения максимумов, подсчета символов, … а сразу использовать соответствующие расширения. И только затем, когда все это усвоится, рассказывать о “кухне”, т.е. расписывать все это на циклы. Т.е. учиться не от простого к сложному, а от целого к деталям. Ведь когда мы видим самолет, для нас главное, что он летает, а не то, что у него внутри и как именно он это делает.

И при такой схеме обучения разумной альтернативы PascalABC.Net 3.2 я не нахожу.

2 лайка

Согласен и поддерживаю. Спасибо, что дополнили, очень важный момент — «сначала использовать не базовые возможности языка, а «продвинутые». Очень приятно, когда все друг друга понимают.

Но хочу ещё раз акцентировать внимание на своём предложении, возможно, кто-то сможет помочь или услышит с «той стороны». Что необходимо включение в «олимпиадные» задания компиляторов PascalABC. NET (самых свежих версий).

Вот ещё пример «Сравнение PascalABC. NET и старого Паскаля» http://pascalabc.net/downloads/Presentations/PABC.NET_vs_Pascal_2016.pdf когда уже подготовленный школьник читает этот материал, то видя конструкции: a *= 2; Case, Arr, Sort, BigInteger (кто-то задумывался, сколько тратится времени на обычном Паскале, если входные данные уходят на порядок выше?) и т. д., он готов уже «всё понять и простить» использовать дальше Паскаль для своих задач. Он начинает понимать, что это не игрушечный язык, а достаточно серьёзный инструмент, с которым он может решать свои задачи и при этом красиво. При этом продвинутым ребятам такие возможности импонируют, им уже не хочется сломя голову пересаживаться на С++ и терять время. Но проблема возникает в том, что свои решения он не может использовать на «олимпиадах». А для ребят, у которых «пошло», участие в таких соревнованиях (рейтингах решённых задач и т. п.) очень большой стимул, просто огромный.

Конечно, можно поспорить о потолке участия с Паскалем на подобных соревнованиях, но это уже другой вопрос. Если включены компиляторы Free, то нужны и компиляторы ABC. NET!

На олимпиадах разрешен Python - язык, который в нынешнем наборе языковых средств дает явные преимущества тем, кто на нем пишет. Почти уверен, что есть определенное лоббирование этого языка и появление Паскаля в его новой ипостаси может оказаться серьезным препятствием для массового распространения Python - этого забавного “языка с отступами”, где ошибка в пробел зачастую катастрофична. В ЮФУ есть команда разработчиков, но у них, по-видимому, нет менеджеров, способных продвигать продукт. Нужны заинтересованные в этом люди в верхах - министерствах, ведомствах, депутатском корпусе и т.п.

Когда хочется сказать о состоянии с Паскалем в школах, самое пристойное, что мне приходит в голову - это слово “дурдом”. Многие до сих пор работают с TurboPascal. DOS-сессии зачатую нерусифицированы, и дети пишут в программах что-то вроде “Vvedite radius”. Более того, как ни странно, но Borland никогда не объявляла о том, что Turbo/Borland Pascal является свободно распространяемым продуктом и открытой лицензии на него найти невозможно. Получается, что на школьных компьютерах стоит нелицензионное ПО. Где-то стоит Delphi, где-то Free Pascal, кто-то “ваяет” под Lazarus… А у большинства, хм… установлен Pascal ABC. Тот самый, с 2007 года. По принципу “Что было хорошо для наших предков, хорошо и для нас”. Причина банальна: практически никто из учителей не желает переучиваться под лозунгом “Да за такую зарплату…”.

Так что все очень и очень непросто…

3 лайка

Как с учетом всех последних “новшеств” написать наиболее короткую программу, которая в заданной последовательности найдет первую от начала пару соседних членов, дающих максимальную сумму? Я подобрал решение опытным путем, но, во-первых, быть может есть проще, а во-вторых, я местами сам не понимаю, как оно работает, в частности, как работает тут Max(). Просто наугад налепил параметров и оно заработало )))

begin var a:=ArrRandom(20,-100,100); a.Println; var b:=a.Pairwise.Select((e,i)->Rec(e.Item1+e.Item2,i)); a.Skip((b.Max(e->(e.Item1,e.Item2)).Item2)).Take(2).Println end.

begin
  var a := Arr(1,3,2,6,1,2,2,7);
  var ind := a.Pairwise.Select(x->x[0]+x[1]).ToArray.IndexMax;
  Print(a[ind],a[ind+1]);
end.

Rec устарел, можно просто в круглых скобках. Вместо a.Item1 используйте a[0].

Вообще, Max для последовательностей крайне неудобен тем, что индексы не запоминает. Поэтому мы и сделали IndexMax, но для массивов.

Идея добавлять в пару индекс чтобы работать с ним используется в функциональном программировании, понятна, но сильно усложняет решение.

То, что Вы не понимаете, это дурацкая функция в LINQ: b.Max(проекция элемента на значение, по которому находится максимум)

  • возвращает не максимальный элемент, а максимальное спроектированное значение, т.е. информация теряется.

Skip для массивов конечно использовать плохо - он долгий.

1 лайк

Спасибо. Это правильно. Мы пробуем учить школьников динамическим массивам в этом стиле. Причем, некоторые методы расписываем в виде циклов, а некоторые (например, OrderBy) - нет.

Типичный пример (я немного потороллю - методы на русском):

Страны.Выбрать(страна -> страна.Континент = 'Азия')
    .ОтсортироватьПоУбыванию(страна -> страна.Население)
    .Взять(10)
    .ВывестиПострочно

Можно показать алгоритм Выбрать (Where) - он простой, алгоритм Взять(10) - ну, тоже тупо простой - счётчик и break. Алгоритм ОтсортироватьПоУбыванию(страна -> страна.Население) я бы уже не показывал - не хватало чтобы они пузырёк там стали писать и ошиблись 10 раз.

Но - самое главное - сочетание этих алгоритмов в одном запросе - поочередно писать сложно, а всё вместе с циклами - это абсолютно неправильный стиль. Поэтому сочетание - только запросами, а не циклами.

Угу. С Яндексом беседовали. Он через полгода согласился добавить свежую версию - и то хорошо - этот сервис вроде используется на многих олимпиадах. На ростовских олимпиадах, где правят бал непонятно кто, договориться практически невозможно - там проверяющая система Free Pascal.

Даже на мехмате, когда проводилась олимпиада по программированию среди школьников, на мою просьбу поставить самую свежую версию системы я выслушивал 100500 замечаний в свой адрес что мы не обязаны, что я занимаюсь пиаром своей дурацкой системы и вообще надо программировать на C++ - тут тред на форуме целый есть.

Так что убеждать кого-то - это Вам не компиляторы писать.

Ничего в этом нет плохого в принципе)) А практически неприятна необходимость постоянно менять раскладку клавиатуры: Паскаль все же англоязычный. Когда компьютеры научатся понимать “взмах хвоста”, как команду смены раскладки, тоже перейду на русские идентификаторы везде, где можно)))

1 лайк

А где Вы увидели в приводимой мною строчке необходимость смены раскладки клавиатуры?

Ваш пример - лишь отдельный фрагмент. Можно, конечно, написать что-то вымороченное, где смены раскладок почти не будет, но в целом - увы… for var Угол:=10 to ПредельныйУгол do begin … end;

Еще раз: идентификаторы на родном языке - это УДОБНО. Но пока что малопрактично. Вот на школьном АЛГО - это да, удобно)))

алг Степень15(арг вещ x, рез вещ p) дано | x>0 надо | p = x^15 = x*(x^2)*(x^4)*(x^8) нач цел i, вещ xn ввод x p:=x; xn:=x | начальные значения нц для i:=1 до 3 xn:=xn*xn p:=p*xn кц вывод "X^15=", p кон