PascalABC.NET официальный канал
Открыть в Telegram
Официальный канал языка и системы программирования PascalABC.NET
Больше1 858
Подписчики
-224 часа
-137 дней
-2430 дней
Архив постов
Одна и та же задача на Python и на PascalABC.NET
Школьники изучают Python. Сравниваем решение с уже известным на PascalABC.NET.
Задача. Дана строка. Найти количество цифр в ней.
Решение на Python:
s = "2gf54hg325f352g6jh37gjh587gh78g25f3"
print(len([c for c in s if c.isdigit()]))
Аналогичное решение на PascalABC.NET:
##
var s := '2gf54hg325f352g6jh37gjh587gh78g25f3';
s.Count(c -> c.IsDigit).PrintЧему равен Sqrt из -2?
В PascalABC.NET при извлечении корня из отрицательного вещественного возвращается NaN (Not a Number)
Однако если рассматривать -2 как комплексное число, результат будет другой - это комплексное число. Корней из комплексного числа - два, возвращается только первый из них, соответствующий главной ветви корня.
Scan и перемещения Робота
Вот - простая программа, которая с помощью Scan в одну строку позволяет вывести траекторию перемещения Робота по начальному положению и командам, задаваемым в виде строки
Новый метод расширения Scan
В стандартном модуле появился новый метод расширения последовательностей Scan.
Он выполняет то же, что и .Aggregate, но возвращает элемент новой последовательности не в конце, а после обработки каждого элемента исходной последовательности.
Этот метод обобщает метод PartialSum и может использоваться например для вычисления частичных минимумов и частичных максимумов.
#новое
1500 подписчиков в нашем телеграм-канале!
Прямо сейчас: нас - 1500!
https://tgstat.ru/channel/@pascalabc_official/stat
Наш канал развивается без всяких накруток, без покупной рекламы и прочего - сюда приходят те, кому интересно современное программирование на PascalABC.NET.
Примерно год назад перед IV конференцией по PascalABC.NET у канала было 1000 подписчиков. Это был знаковый повод, летом наметился традиционный отток подписчиков, в сентябре - снова рост. И вот нас - 1500!
Нашему каналу всего полтора года, у него достаточно хорошая вовлеченность подписчиков: за сутки новость читают 25%, а всего - около 75%. Каждую публикацию в среднем читает 1070 подписчиков.
Поздравляем всех подписчиков канала с замечательной цифрой 1500 :)
День числа π
Сегодня - 3.14 - день числа π.
Поздравляем всех читателей канала с праздником и публикуем один из алгоритмов вычисления числа π - ряд Нилаканты - без использования стандартных функций.
В комментариях предлагайте свои способы!
Новый стандартный модуль WPF
В PascalABC.NET появился новый стандартный модуль WPF. Он позволяет создавать оконные приложения, основанные на технологии WPF.
В отличите от модулей GraphWPF и WPFObjects, ориентированных на графику, в модуле WPF отсутствуют типы-обёртки. Это позволяет использовать все типы, методы и свойства компонентов WPF.
В стандартных примерах Samples\StandardUnits\WPF можно посмотреть ряд примеров.
Публикуем пример с использованием панели DockPanel.
uses WPF;
begin
var dpanel := DockPanel.Create.AsMainContent;
var b := Controls.Button('One',Width := 100).AddTo(dpanel,Dock.Left);
var b1 := Controls.Button('Two',Width := 100).AddTo(dpanel,Dock.Right);
var b2 := Controls.Button('Three',Height := 50).AddTo(dpanel,Dock.Top);
var b3 := Controls.Button('Four',Height := 50).AddTo(dpanel,Dock.Bottom);
var b4 := Controls.Button('Five').AddTo(dpanel);
b.Click += (o,e) -> begin
MainWindow.Close
end;
end.
#новоеДирективы условной компиляции
В PascalABC.NET можно определять директивы условной компиляции, позволяющие компилировать лишь часть кода по условию. Эти директивы работают с именами, которые можно определять на уровне компилятора.
Имеются два предопределенных глобальных имени на уровне компилятора: DEBUG и RELEASE - в режиме компиляции DEBUG определен первый из них, а при снятом флаге Debug определено имя RELEASE.
На скриншоте показана программа, запущенная по Shift-F9 в режиме Release.
Метод SeqWhile - развёртка без проекции
Метод SeqWhile позволяет сгенерировать рекуррентную последовательность, в которой каждый элемент является функцией предыдущего. Метод SeqWhile имеет также условие завершения последовательности.
Единственное, что ему не хватает до полной развертки, - проекция - её необходимо выполнять отдельно с помощью Select.
На скриншоте - знакомая всем задача выделения цифр из целого числа.
FloodFill для Picture
В модуле GraphABC реализован FloodFill для класса Picture
#новое
Развёртка скаляра в последовательность
В функциональных языках есть две противоположные операции: Fold - свертка последовательности в скаляр, и UnFold - развёртка скаляра в последовательность.
Частными операциями свёртки в PascalABC.NET являются методы .Sum, .Min, .Max, получающие из последовательности одно значение.
Самым общим методом свёртки в PascalABC.NET является метод
.Aggregate.
Развёртки в PascalABC.NET пока нет, однако ее несложно моделировать при помощи цепочки методов Iterate, Select и TakeWhile,
Как работает развёртка?
- Метод a.Iterate(f) возвращает бесконечную последовательность вида a, f(a), f(f(a)) ...
- Затем к полученной последовательности применяется метод Select, проектирующий каждый элемент на новое значение
- В конце применяется метод TakeWhile, ограничивающий бесконечную последовательность некоторым условием
На скриншоте показана развертка целого числа в последовательность цифр.
Обратная операция - Aggregate- сворачивает полученную последовательность назад в целое число.Методы последовательностей Numerate и Pairwise
Данные методы пришли в PascalABC.NET из языка Haskell, который является чисто функциональным.
На скриншоте показано, как данные методы можно моделировать с помощью метода ZipTuple
Изучение Python как второго языка - занятие 2
В компьютерной школе мехмата школьники на 2 году обучения начинают изучать Python. Недавно прошло занятие по спискам. Подводим итоги.
Для генерации списка 1 3 5 7 9 11 13 15 17 19 использовали генератор
a = [2*i+1 for i in range(10)]
и сравнивали его с функцией ArrGen на PascalABC.NET:
var a := ArrGen(10, i -> 2*i+1)Для генерации случайных использовали известный код
from random import *
a = [randint(1,100) for x in range(10)]
против
var a := ArrRandomInteger(10,1,100)Нахождение суммы алгоритмом выглядело на Python чуть лучше
sum = 0
for x in a:
if 10 <= x <= 99:
sum += x
чем
var sum := 0;
foreach var x in a do
if x in 10..99 then
sum += x
Однако проверка диапазона двойным равенством не пошла
Цикл по индексам
for i in range(len(a)):
ну как-то совсем не понравилась эта куча скобочек - привыкли к
for var i:=0 to a.Length-1 doСортировка по убыванию с именованным параметром также вызвала легкий ропот
a.sort(reverse = True)
против
a.SortDescending;Срезы пошли с удовольствием, т.к. в PascalABC.NET фактически совпадающий синтаксис:
print(a[:5],a[5:],a[::-1])
На каком языке это написано?
Фильтрация вызвала неподдельный интерес - долго обсуждали, что лучше
a = [x for x in a if x <= 50]
print(a)
или
a.Where(x -> x <= 50).PrintlnИ наконец комбинация фильтрации и преобразования
a = [x+200 for x in a if x <= 50]безоговорочно понравилась, Хотя сказали, что
a.Where(x -> x <= 50).Select(x -> x + 200)тоже неплохо. Общий вывод был такой: один язык хорошо, два - лучше.
Сортировка строк в стандартном модуле
В последней версии скорректирована сортировка строк в стандартной библиотеке.
Теперь строки сортируются в лексикографическом порядке согласно кодам символов. В частности, большие буквы идут перед маленькими.
Поведение по умолчанию в NET игнорирует регистр букв. Вы можете это увидеть на примере стандартного OrderBy в первой строке - результат сортировки:
KОт колосс собака Совачто не ожидаемо #новое
Белый дом рекомендовал отказаться от C++ в пользу безопасных языков.
https://3dnews.ru/1100993/beliy-dom-rekomendoval-otkazatsya-ot-c-i-c-v-polzu-bezopasnih-yazikov-programmirovaniya
Офис директора национальной безопасности Белого дома (ONCD) рекомендовал разработчикам отказаться от использования C и C++ при разработке ПО критической инфраструктуры.
Этот совет основан на опасениях по поводу безопасности управления памятью — аспекте, который имеет решающее значение для предотвращения таких уязвимостей, как переполнение буфера и висячие указатели.
Национальное агентство по безопасности рекомендует также использовать такие безопасные языки как Rust, Go, C#, Java, Swift, JavaScript, Ruby, Python и Delphi. Эти языки включают в себя механизмы, предотвращающие распространённые типы атак на память, тем самым повышая безопасность разрабатываемых систем. Причем, Python был включен в список недавно - в декабре 2023 года - видимо, долго думали про национальную безопасность.
Как мы видим, в этом списке одним из первых присутствует C#, который занимает пятую строчку в рейтинге TIOBE.
Русский Линк (ИЯзЗ) или PascalABC.NET для русских
В стандартных модулях PascalABC.NET есть недооцененный модуль Исполнители, содержащий в частности средства для обучения интегрированному языку запросов Linq на русском.
Мы его в шутку перевели как ИЯзЗ. Альтернативные названия приветствуются
На скриншоте - программа, иллюстрирующая генерацию случайной последовательности, ее фильтрацию, преобразование и вывод - всё как мы любим.
Некоторым нравится писать на русском, но это немного неудобно - надо постоянно переключать регистр.
Однако некоторые программы воспринимаются начинающими хорошо.
Что удивительного? Из ФГОС для углубленки удалили Паскаль несмотря на полностью отечественную бесплатную разработку PascalАВС.NЕТ, но сохранили остальные "вражеские" языки. Не зря древние римляне говорили: "Ищи, кому выгодно!".
КуМир прощай
Кумир запретили на ЕГЭ по инфе!!! | ЕГЭ информатика 2024 | Имаев Артем 100балльный
https://youtu.be/m7qA7assDI0?t=272
Имаев Артем, репетитор по информатике: "Те, кто занимаются составлением ЕГЭ по информатике, например, Крылов, говорили, что скоро будут проблемы с иностранными программами - например, Microsoft Excel. И будут переходить на российские аналоги. И что происходит? Первое, что делают - удаляют полностью российскую программу КуМир, которая разрабатывается НИИС РАН, Эта программа специально разработана чтобы ее в школах применяли. И теперь пытаются отказаться от российской программы. Ну это вообще что то невероятное... Зачем вообще удалять российскую программу если ее разрабатывали специально для школьников ... "
Может, где-то засели скрытые иностранные агенты?
Исполнитель Чертежник в школьном программировании
КуМир на ЕГЭ запретили - отличное решение. Вместе с ним ушел отличный исполнитель Чертежник, который Кушниренко предлагал для начального обучения программированию.
Чертежник позволяет обучать решению спектра задач, в которых важны параметры - от вложенных циклов до процедур с параметрами и модулей.
В PascalABC.NET задания для чертежника - автоматически проверяемые. Лишний раз напомним, что ни в какой системе вы не встретите больше автоматически проверяемых заданий, встроенных в IDE. Уж подавно для Чертежника.
На скриншоте - программа, иллюстрирующая, что алгоритм проверки задания для Чертежника в PascalABC.NET - весьма сложный - он позволяет рисовать одну линию дважды, по частям и в любом направлении и правильно проверяет результат.
