PascalABC.NET официальный канал
Open in Telegram
Официальный канал языка и системы программирования PascalABC.NET
Show more1 857
Subscribers
-224 hours
-167 days
-2430 days
Posts Archive
Доклад о сравнении PascalABC.NET и Python
Доклад о сравнении PascalABC.NET и Python с III конференции «Использование системы программирования PascalABC.NET в обучении программированию»
#конференция
Операции ?. и ??
Исключение использования нулевой ссылки встречается очень часто. Операции ?. и ?? позволяют не выбрасывать исключение.
В примере на слайде если p = nil, то p.Name сгенерирует исключение, а p?.Name вернет nil. p?.Age также вернет nil, но операция ?? позволяет задать значение по умолчанию.
Итог: для нулевой персоны имя тодже нулевое, а возраст - 17 лет.
WPFObjects - перемещение объектов мышью
Модуль WPFObjects позволяет писать простые интерактивные программы, взаимодействующие с мышью.
На скриншоте - программа, реализующая обработчики мыши, где реализуется функциональность перемещения объекта мышью.
#графика
#начинающим
#методика
Модуль WPFObjects - векторная графика для начинающих
Модуль WPFObjects для обучения начинающих созданием объектов и управлением ими через методы и свойства
На скриншоте - управление свойствами квадрата и окружности.
#начинающим
Свойства в PascalABC.NET
Свойства в PascalABC.NET заимствованы из Delphi.
Свойства - это "умные" поля, которые при чтении и записи могут делать дополнительные действия, а также ограничивать доступ (например, только на чтение.
На скриншоте - класс Person со свойством Name только на чтение и со свойством Age, не позволяющим присвоить отрицательный возраст
#ООП
Скрипт статистики зарегистрированных участников конференции
На PascalABC.NET в одну строчку легко пишутся скрипты для анализа csv-файлов.
На скриншоте - скрипт анализа зарегистрированных участников конференции по городам. Живые данные на 15.03
Свободный софт - он такой свободный!
https://www.cnews.ru/news/top/2023-03-16_razrabotchiki_linux_nachali_goneniya
OneLiner для вывода таблицы умножения
OneLinerы - это программы, состоящие из одной строки, решающие какую-то задачу. OneLinerы распространились на языке Python, поскольку он позволял коротко записывать решения задач
PascalABC.NET активно подключился к этому спорту.
На скриншоте - программа, выводящая таблицу умножения.
Обращает на себя внимание техническая часть: для моделирования вложенных циклов используется Cartesian, а чтобы вывод сделать построчным, используется Batch с последующим превращением каждой подпоследовательности в строку
Замена с помощью регулярного выражения
С помощью регулярных выражений можно заменять в строках одни подстроки на другие. Делается это либо с помощью подстановки вида $0, либо с помощью лямбды, преобразующей захваченный Match в подстроку.
#регулярные_выражения
Новая модификация метода Each
В PascalABC.NET 3.8.3.3253 появилась модификация метода Each, позволяющая создавать словари по последовательности ключей, инициализируя их указанными значениями.
Таким способом удобно заводить словари счётчиков, инициализированные нулями.
На скриншоте - создание словаря счетчиков с ключами, являющимися латинскими буквами, и словаря счетчиков, связанных с набором строк.
#новое
Кодировки текстовых файлов
При записи в текстовый файл и чтения из него можно указывать кодировку.
Кодировки при записи-чтении должны быть одинаковыми. На скрине показано, что бывает, когда кодировка при записи отличается от кодировки для чтения
Немного про кеширование
Современные процессоры упреждающе считывают в кеш процессора следующие данные. Кеш - более быстрый чем оперативная память. Этим можно пользоваться для небольшого ускорения программ.
На скриншоте - две процедуры. Вторая на каждой итерации цикла пользуется двумя соседними элементами массива. Это позволяет немного ускорить вычисления
Видели ли вы когда-нибудь ковёр Серпинского в 3D? А он есть! Вот он - на скрине.
И программа:
uses Graph3D;
var SColor := Arr(Colors.Yellow,Colors.Blue,Colors.Red,Colors.Black,Colors.Purple);
procedure Serpinsky(x,y,z,w: real; n: integer);
begin
if n = 0 then exit;
w := w/3;
Box(x,y,z,w,w,w,n=1 ? RandomColor: SColor[n]);
for var i:=-1 to 1 do
for var j:=-1 to 1 do
for var k:=-1 to 1 do
Serpinsky(x+i*w,y+j*w,z+k*w,w,n-1);
end;
begin
View3D.HideAll;
Serpinsky(0,0,0,10,3);
end.
#3D
#графикаУпрощённая структура модуля в PascalABC.NET
Почему начинающие не пишут модули в старом Паскале? Потому что они сложные.
В PascalABC.NET имеются модули упрощенной структуры. Это просто коллекция процедур, функций, типов. Сделать такой модуль легко, пользоваться еще легче
#начинающим
#PascalABC
Сравнение производительности программ на Python, PascalABC.NET и C++ при полном переборе
В официальном youtube-канале PascalABC.NET опубликовано сравнение производительности программ, решающих некоторую задачу полного перебора, на языках Python? PascalABC.NET и C++. Используются все средства ускорения программ.
https://www.youtube.com/watch?v=7eU1lFKEZvc
Ищем повторы с помощью регулярных выражений
В текстах часто допускаются ошибки повтора одного слова дважды - обычно при копировании. Такие ошибки легко распознать с помощью регулярных выражений.
На скриншоте - регулярное выражение, распознающее такие дубликаты:
(\w+)\s+(\1)Ищем повторы с помощью регулярных выражений
В текстах часто допускаются ошибки повтора одного слова дважды - обычно при копировании. Такие ошибки легко распознать с помощью регулярных выражений
Множество массивов кортежей и прочие звери
Как описать и заполнить множество массивов кортежей? Это просто:
var d := HSet(|(1,'hi'),(3,'oh')|, |(5,'wulf'),(7,'dog')|, |(9,'bad'),(10,'light')| );Не надо указывать тип - он автоматически выводится компилятором. На всякий случай - тип такой:
d: HashSet<array of (integer,integer)>Видно, что компилятор проделывает большую работу. В построении такой структуры данных нам помогают синтаксические конструкции для построения литеральных кортежей и массивов, а также создающая функция HSet. Второй вопрос - а как вывести такую структуру? Ответ еще более прост:
Print(d);Функция Print - умная - и умеет выводит все структурированные типы. Обратите внимание, что множества выводятся в {} массивы и списки выводятся в [] кортежи выводятся в ()
Квайн на PascalABC.NET
Квайн (quine) - это программа, печатающая свой текст. При этом запрещено использовать технические приёмы (например, считывание из файла) или специфические хакерские приемы конкретного языка программирования.
Ниже приводится квайн на PascalABC.NET.
## var q:='''';var s:='## var q:=;var s:=;Print(s[:11]+q+q+q+q+s[11:19]+q+s+q+s[19:])';Print(s[:11]+q+q+q+q+s[11:19]+q+s+q+s[19:])На скриншоте видно, что программа печатает свой код.
