PascalABC.NET официальный канал
1.92K subscribers
516 photos
1 video
9 files
364 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Квайн на 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:])

На скриншоте видно, что программа печатает свой код.
Множество массивов кортежей и прочие звери

Как описать и заполнить множество массивов кортежей? Это просто:
var d := HSet(|(1,'hi'),(3,'oh')|,
|(5,'wulf'),(7,'dog')|,
|(9,'bad'),(10,'light')|
);
Не надо указывать тип - он автоматически выводится компилятором. На всякий случай - тип такой:
d: HashSet<array of (integer,string)>

Видно, что компилятор проделывает большую работу.

В построении такой структуры данных нам помогают синтаксические конструкции для построения литеральных кортежей и массивов, а также создающая функция HSet.

Второй вопрос - а как вывести такую структуру? Ответ еще более прост:

Print(d);

Функция Print - умная - и умеет выводит все структурированные типы. Обратите внимание, что
множества выводятся в {}
массивы и списки выводятся в []
кортежи выводятся в ()

#PascalABC
Ищем повторы с помощью регулярных выражений

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

На скриншоте - регулярное выражение, распознающее такие дубликаты: (\w+)\s+(\1)
Сравнение производительности программ на Python, PascalABC.NET и C++ при полном переборе

В официальном youtube-канале PascalABC.NET опубликовано сравнение производительности программ, решающих некоторую задачу полного перебора, на языках Python, PascalABC.NET и C++ от Максима Пучкина. Используются все средства ускорения программ.

https://www.youtube.com/watch?v=7eU1lFKEZvc

#производительность
Упрощённая структура модуля в PascalABC.NET

Почему начинающие не пишут модули в старом Паскале? Потому что они сложные.

В PascalABC.NET имеются модули упрощенной структуры. Это просто коллекция процедур, функций, типов. Сделать такой модуль легко, пользоваться еще легче

#начинающим
#PascalABC
Ковёр Серпинского в 3D

Видели ли вы когда-нибудь ковёр Серпинского в 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
#графика
Немного про кеширование

Современные процессоры упреждающе считывают в кеш процессора следующие данные. Кеш - более быстрый чем оперативная память. Этим можно пользоваться для небольшого ускорения программ.

На скриншоте - две процедуры. Вторая на каждой итерации цикла пользуется двумя соседними элементами массива. Это позволяет немного ускорить вычисления
Кодировки текстовых файлов

При записи в текстовый файл и чтения из него можно указывать кодировку.

Кодировки при записи-чтении должны быть одинаковыми. На скрине показано, что бывает, когда кодировка при записи отличается от кодировки для чтения
Новая модификация метода Each

В PascalABC.NET 3.8.3.3253 появилась модификация метода Each, позволяющая создавать словари по последовательности ключей, инициализируя их указанными значениями.

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

На скриншоте - создание словаря счетчиков с ключами, являющимися латинскими буквами, и словаря счетчиков, связанных с набором строк.

#новое
Замена с помощью регулярного выражения

С помощью регулярных выражений можно заменять в строках одни подстроки на другие. Делается это либо с помощью подстановки вида $0, либо с помощью лямбды, преобразующей захваченный Match в подстроку.

#регулярные_выражения
OneLiner для вывода таблицы умножения

OneLinerы - это программы, состоящие из одной строки, решающие какую-то задачу. OneLinerы распространились на языке Python, поскольку он позволял коротко записывать решения задач

PascalABC.NET активно подключился к этому спорту.

На скриншоте - программа, выводящая таблицу умножения.

Обращает на себя внимание техническая часть: для моделирования вложенных циклов используется Cartesian, а чтобы вывод сделать построчным, используется Batch с последующим превращением каждой подпоследовательности в строку

#oneliner
Скрипт статистики зарегистрированных участников конференции

На PascalABC.NET в одну строчку легко пишутся скрипты для анализа csv-файлов.

На скриншоте - скрипт анализа зарегистрированных участников конференции по городам. Живые данные на 15.03
Свойства в PascalABC.NET

Свойства в PascalABC.NET заимствованы из Delphi.

Свойства - это "умные" поля, которые при чтении и записи могут делать дополнительные действия, а также ограничивать доступ (например, только на чтение.

На скриншоте - класс Person со свойством Name только на чтение и со свойством Age, не позволяющим присвоить отрицательный возраст

#ООП
Модуль WPFObjects - векторная графика для начинающих

Модуль WPFObjects для обучения начинающих созданием объектов и управлением ими через методы и свойства

На скриншоте - управление свойствами квадрата и окружности.

#начинающим
WPFObjects - перемещение объектов мышью

Модуль WPFObjects позволяет писать простые интерактивные программы, взаимодействующие с мышью.

На скриншоте - программа, реализующая обработчики мыши, где реализуется функциональность перемещения объекта мышью.

#графика
#начинающим
#методика
Операции ?. и ??

Исключение использования нулевой ссылки встречается очень часто. Операции ?. и ?? позволяют не выбрасывать исключение.

В примере на слайде если p = nil, то p.Name сгенерирует исключение, а p?.Name вернет nil. p?.Age также вернет nil, но операция ?? позволяет задать значение по умолчанию.

Итог: для нулевой персоны имя тоже нулевое, а возраст - 17 лет.
PABC_vs_Python-6.pdf
6.9 MB
Доклад о сравнении PascalABC.NET и Python

Доклад о сравнении PascalABC.NET и Python на III конференции «Использование системы программирования PascalABC.NET в обучении программированию»

Видео на youtube

#конференция
Написание Telegram-бота в PascalABC.NET

Доклад Пучкина М.В. о написании Telegram-бота в PascalABC.NET на III конференции «Использование системы программирования PascalABC.NET в обучении программированию»

https://www.youtube.com/watch?v=WA2Q3ivnrac&t=3s

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

Надо ли учить школьников лямбда-выражениям? Надо!

Доклад Демяненко Я.М. о лямбда выражениях на III конференции «Использование системы программирования PascalABC.NET в обучении программированию».

https://www.youtube.com/watch?v=V7qQFbyaM-c

Только правда, ни грамма лжи!

#начинающим
#преподавателям