PascalABC.NET официальный канал
1.9K subscribers
520 photos
1 video
9 files
364 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Предлагаем пять бесплатных курсов по PascalАВС.NЕТ на платформе Stepik.

1. PascalABC.NET: современный код
Желающим с нуля научиться писать современный код, а также желающим углубить свои знания современных языков программирования. Рекомендуется школьникам, студентам, учителям, преподавателям. Может сильно удивить лиц, до сих пор считающих Turbo Pascal/Free Pascal венцом современных технологий программирования. Курс достаточно СЛОЖНЫЙ и невысокие заявленные требования к знаниям вовсе не означают, что любой семиклассник сможет САМОСТОЯТЕЛЬНО его пройти. Но попытайтесь узнать, чего на самом деле стоят ваши знания!

2. PascalABC.NET: от предков к потомку
Прохождение курса позволит вам повысить свою квалификацию в вопросах современного программирования, откроет путь к пониманию. концепций .NET-языков. Вы сможете, наконец, отвязаться от непроизводительного программирования в стиле прошлого века, предполагающего написание блок-схем и осмысливания задачи в терминах блоков "следование, ветвление, цикл". Вы получите возможность использовать средства декларативной парадигмы программирования взамен или в сочетании с императивной. Вы сможете указывать в программе ЧТО нужно сделать вместо утомительных и однообразных описаний того, КАК это надо делать. Вы сможете писать (и главное, учить писать) программы, которые будут понятнее, чем в ныне модном языке Python и в то же время, работающие в десятки и сотни раз быстрее. И при этом, ваши программы будут такими же компактными, как в Python.

3. PascalABC.NET: 220 задач к ЕГЭ с сайта К.Ю.Полякова
Предлагаются варианты решения заданий для подготовки к ЕГЭ с сайта К.Полякова. Достаточно большое количество вариантов и везде, где возможно, дается два решения - длинное в парадигме структурного программирования и короткое с использованием элементов функционального программирования. Все решения снабжены необходимыми пояснениями.

4. PascalABC.NET: если в школе надоел Python
Изучение языка программирования PascalАВС.NЕТ для тех, кто уже умеет программировать на языке Python. Где возможно, подача материала ведется путем сравнения этих двух языков. Подробно рассматриваются преимущества и недостатки каждого из языков в контекстах различных задач.

5. PascalАВС.NЕТ: спасибо, КуМир, но нужно сдавать ЕГЭ
Если вы уже знаете КуМир и собираетесь освоить "настоящий" язык программирования из тех, что будут присутствовать на станциях для сдачи ЕГЭ по информатике, этот курс для вас.
Вы освоите методику перевода программ с языка КуМир на современный универсальный язык программирования PascalАВС.NЕТ, имеющий удобную интегрированную среду разработки и отладки. Встроенный в среду очень быстрый компилятор создает исполняемые exe-файлы, обладающие скоростью выполнения, схожей со скоростью программ, написанных на C#. Ошибки компиляции фиксируются очень четко, а сообщения компилятора всегда понятны и выдаются на русском языке.
Вы сможете сразу писать код в PascalАВС.NЕТ и постепенно надобность в среде программирования КуМир отпадет. А приобретенные навыки алгоритмизации останутся и будут развиваться дальше.
Вы, если захотите, сможете более глубоко изучить PascalАВС.NЕТ с тем, чтобы быстро писать и отлаживать короткий, но эффективный и понятный код.
Функция ReadLexem

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

Этот код нельзя просто повторить на языке Python или C#, поскольку в них отсутствуют стандартные средства разбиения входного потока на лексемы

#PascalABC
Демо ЕГЭ по информатике 2023 задание 5

Спокойное решение задания 5 демо ЕГЭ 2023. Использование функций Bin и Dec модуля School.

Ощущение, что если решать задачу кодом, то она ориентирована на Питон.

#школьникам
#ЕГЭ
Спецсимволы при выводе строк

В Object Pascal при выводе строк можно использовать так называемые управляющие Ascii символы. К их числу относится символ #10 перевода строки и символ #9, осуществляющий переход к следующей позиции табуляции.

На скриншоте показан пример вывода строки с двумя переходами на новую строку и тремя символами табуляции. Хорошо видно, что в консольном режиме позиции табуляции отстоят на 8 позиций.

#PascalABC
Жадная и ленивая квантификация в регулярных выражениях

Задача.
Найти в строке <a href="helloworld.htm" title="Привет, Мир">Привет, Мир</a> все выражения, заключенные в "".

Решение 1 (неправильное). В качестве паттерна поиска используется регулярное выражение ".*" (двойная кавычка, последовательность любых символов, двойная кавычка)

Результат:
"helloworld.htm" title="Привет, Мир"

По умолчанию квантификатор * в регулярном выражении - жадный - захватывает всё до последнего символа "

Вывод. Жадным быть плохо.

Решение 2 (правильное и ленивое). В качестве паттерна поиска используется регулярное выражение ".*?"

Результат:
"helloworld.htm"
"Привет, Мир"

При добавлении ? после квантификатора * используется ленивый захват - он заканчивается как только найден первый закрывающий символ ".

Вывод. Быть ленивым - полезно и правильно.

На скриншоте - полная программа

#строки
Способы инвертирования массива

На
скриншоте - 5 способов инвертирования массива. Они отличаются по времени, по памяти, по краткости записи.

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

Какой способ выбрать - зависит от методики.

#начинающим
#методика
Квайн на 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, не позволяющим присвоить отрицательный возраст

#ООП