PascalABC.NET официальный канал
1.69K subscribers
460 photos
9 files
328 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Описание переменной внутри выражения

В PascalABC.NET появилась возможность описывать переменные внутри выражения. Это удобно в ряде сценариев

#новое
Range для вещественных

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

#новое
Сортировка строк в стандартном модуле

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

Поведение по умолчанию в NET игнорирует регистр букв. Вы можете это увидеть на примере стандартного OrderBy в первой строке - результат сортировки:

KОт колосс собака Сова


что не ожидаемо

#новое
FloodFill для Picture

В модуле GraphABC реализован FloodFill для класса Picture

#новое
Новый стандартный модуль 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.


#новое
Новый метод расширения Scan

В стандартном модуле появился новый метод расширения последовательностей Scan.

Он выполняет то же, что и .Aggregate, но возвращает элемент новой последовательности не в конце, а после обработки каждого элемента исходной последовательности.

Этот метод обобщает метод PartialSum и может использоваться например для вычисления частичных минимумов и частичных максимумов.

#новое
Многострочные строковые литералы '''

В PascalABC.NET появились Multiline строковые литералы, которые недавно появились в таких языках как C# 11, Delphi 12, Java 22.

Строки с открывающими и закрывающими кавычками не должны содержать непробельных символов.

Во всех строках игнорируется отступ, равный отступу последней строки.

#новое
Модуль WPF - парсинг оконных элементов из XAML-строки

В модуле WPF появилась возможность создавать оконные элементы, загружая их из XAML-строки. XAML-строку удобно задавать, используя синтаксис многострочных строковых литералов.

Чтобы затем воспользоваться дочерними элементами в программе, необходимо сопоставить их переменным и затем привязать обработчики.

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

#новое
Новый метод строк ToLines

В стандартной библиотеке появился новый метод строк ToLines, разбивающий многострочную строку на отдельные строки

Это удобно также при считывании файла как отдельной строки:

ReadAllText('a.txt').ToLines

#новое
Оптимизировано множественное присваивание

Закончена работа по оптимизации множественного присваивания. Один из результатов можно видеть на скриншоте: данная программа ускорена примерно в 2 раза.

Нетрудно проверить, что аналогичная программа, написанная на C#, работает в 2 раза медленнее.

Это - основной результат выпускной работы бакалавра направления ФИИТ мехмата ЮФУ Филонова Александра: https://pascalabc.net/downloads/Diploms/Opt_Tuple_Assignment_Filonov.pdf

#новое
Изменения, связанные со словарями

Готовимся к версии 3.10.

Из Kotlinа перекочевал ряд методов, конструкций и операций со словарями.

begin
// Новая операция 1 to 2 - синоним KV(1,2)
var d := Dict('cat' to 'кошка', 'dog' to 'собака');
// Новая функция Pair - синоним KV
var d0 := Dict(Pair('cat', 'кот'), Pair('camel', 'верблюд'));
// Более сложная структура
var dd := Dict('Иванов' to |5, 3, 3|, 'Петров' to |4, 4|);
// Копия словаря
var d1 := Dict(d);
// Инициализация массивами ключей и значений
var d2 := Dict(|11, 22|, |333, 444|);
// Обновление значений и добавление новых
d.Update(d0);
// То же
d += d0;
// Слияние словарей
var d3 := d + Dict('world' to 'мир', 'cloud' to 'облако');
Println(d3);
// Вычитание пар с данными ключами
d3 -= Seq('cat', 'camel');
Println(d3);
d3 := d3 - 'world';
Println(d3);
end.

Вывод:
{(cat,кот),(dog,собака),(camel,верблюд),(world,мир),(cloud,облако)}
{(dog,собака),(world,мир),(cloud,облако)}
{(dog,собака),(cloud,облако)}


#новое
Внешние функции Zip и Cartesian

В стандартной библиотеке реализованы внешние функции Zip и Cartesian с количеством последовательностей от 2 до 5 и необязательной функцией проекции

#новое
Обновлённый модуль Turtle

Обновлён школьный модуль Turtle для Исполнителя Черепаха.

uses Turtle;

begin
SetWidth(1.4);
SetColor(Colors.Blue);
//ToPoint(3,0);
Down;
loop 4000 do
begin
//Circle(0.1);
Forw(0.3);
Turn(Random(-120,120));
//Sleep(1);
end;
end.


Для знакомства с возможностями можно скачать новую версию и запустить указанную программу.

Обязательно понажимайте Пробел - меняется отображение координат.

Если программа будет тормозить при перерисовке, уменьшите количество итераций в цикле.

Принимаются предложения и сообщения о багах.

#новое
Функция SetOf

В PascalABC.NET появилась функция SetOf для создания множества.

Она возвращает множество HashSet, но это может измениться.

Функция SetOf введена для обучения начинающих.

На скриншоте - программа вычисления симметрический разности двух множеств.

#новое
Преобразование в вещественное, имеющее другой разделитель целой и дробной части

Реализован ряд дополнительных параметров для преобразования строк в вещественные с другим разделителем целой и дробной части

Можно также вызвать глобальную процедуру SetDecimalSeparator(','), которая будет влиять на все последующие преобразования

#новое
Визуализация массива точек в Turtle

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

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

uses Turtle;

begin
Window.Title := 'Кластеризация';
var a := ReadLines('demo_2025_27_А.txt').Skip(1).JoinToString.ToReals(',').ToArray;
var xx := a[::2];
var yy := a[1::2];
DrawPoints(xx,yy);
end.


#новое
#ЕГЭ
Библиотека MathNet.Numerics.dll

Библиотека математических вычислений MathNet.Numerics.dll интегрирована в инсталлятор PascalABC.NET.

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

#новое
Автоклассы и их предки

В PascalABC.NET стало возможно наследовать автоклассы от классов без полей. Это можно использовать в ряде сценариев.

#новое
Новый модуль Coords

Модуль Coords предназначен для отображения графических элементов с масштабированием. Он позволяет отображать различные графические примитивы без анимации - при масштабировании мышью все примитивы заново "проигрываются" с новым масштабом.

Необходимо скачать новую версию.

uses Coords;

function RandomPoint: Point := Pnt(Random(-13,13),Random(-10,10));

begin
DrawPoints(ArrGen(10,i -> RandomPoint),PointRadius := 4);
DrawPoints(ArrGen(10,i -> RandomPoint),PointRadius := 6);
DrawPoint(2,3,Colors.Red);
DrawCircle(1,1,1,Colors.LightBlue);
DrawRectangle(3,2,2,1);
DrawText(3,2,'Hello');
DrawTextUnscaled(0,0,'Текст не масштабируется', Size := 20, Color := Colors.Red);
DrawText(-4,7,'Текст масштабируется', FontName := 'Courier New', Size := 34);
end.


На основе модуля Coords написан модуль Turtle.

#новое
🆕 Новый метод Window.SaveToClipboard

В GraphWPF появился метод Window.SaveToClipboard сохранения содержимого окна в буфер обмена.

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

🔧 Пример использования:

uses GraphWPF;

begin
Circle(200,200,100,Colors.LightBlue);
Window.SaveToClipboard;
end.


Что это дает?
✦ Удобство в разработке: быстрое сохранение визуальных данных.
✦ Интеграция с другими приложениями: копируйте данные напрямую и вставляйте в любые другие программы.
✦ Экономия времени: больше не нужно использовать сторонние инструменты для захвата экранов.

Пробуйте новый метод и делитесь своими впечатлениями! 🚀

#новое