PascalABC.NET официальный канал
1.86K subscribers
531 photos
1 video
9 files
373 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Метод расширения Cast

Cast - метод расширения последовательностей для приведения всех элементов к заданному типу. Если приведение невозможно, кидается исключение. Поэтому в данном примере вначале в списке объектов фильтруются целые и потом выполняется Cast для всех отфильтрованных элементов
👍4🤡2
Модуль PlotWPF - визуализация данных

Модуль PlotWPF позволяет легко визуализировать данные, заданные в виде набора точек. На скриншоте - два способа: точечный график и линейный график.

Некую сложность представляет задание массивов точек: первый элемент надо делать вещественным чтобы массив-константа интерпретировался как вещественный.

#графика
👍10
Перегрузка операций как методов расширения

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

#студентам
👍7
Машинное обучение в PascalABC.NET

Пакет Microsoft.ML реализует множество задач машинного обучения. В отличие от библиотек Python, мы получаем проверку ошибок во время компиляции и более эффективные алгоритмы.

На скриншоте - проект, строящий модель KMeans по широко известному датасету цветков Ириса и затем предсказывающий вид конкретного цветка Ириса с использованием натренированной модели.

#машинное обучение
#студентам
👍102
Модуль Sounds

Модуль Sounds позволяет привязать проигрывание звука к какому-нибудь событию:

uses Sounds,GraphWPF,Controls;

begin
var ss: Sound;
var b1 := Button(10,10,'Play',100);
var b2 := Button(10,50,'Stop',100);
b1.Click := procedure -> begin
if ss<>nil then
exit;
ss := new Sound('d:\www.mp3');
ss.Play;
end;
b2.Click += procedure -> begin
if ss<>nil then
ss.Stop;
ss := nil
end;
end.
👍173
Алгоритм быстрой сортировки

Алгоритм быстрой сортировки - самый быстрый в среднем на произвольных данных.

Суть алгоритма QuickSort проста: в массиве a выбирается некоторый опорный элемент - обычно первый. После этого оставшиеся элементы массива делятся на две части: те, которые меньше или равны опорному и те, которые больше опорного. Данное действие реализуется функцией Partition, возвращающей индекс последнего элемента в первой части. Затем к каждой части рекурсивно применяется функция QuickSort и затем полученные части сливаются:

отсортированные элементы <= опорного
опорный
отсортированные элементы > опорного

#студентам
👍3👎1🤯1
Простой текстовый редактор

Простой
текстовый редактор на 6 строк. Демонстрация событий, обработчиков, лямбд и условной операции

#начинающим
👍9
Генерация всех перестановок длины n

Алгоритм - рекурсивный. Для каждого элемента переставляем его с последним, рекурсивно вызываем функцию для всех элементов кроме последнего и затем снова переставляем текущий с последним. В итоге на последнем месте побывают все элементы.

Всякий раз когда количество рассматриваемых элементов массива равно 1 - выводим весь массив.

Мы не могли удержаться - использовали обобщенную функцию, генерирующую последовательность перестановок, операторы yield и yield sequence. Поскольку всё равно ничего непонятно - а так хоть универсально будет :)

#студентам
👍4
Создание случайного бинарного дерева

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

Печать всей структуры бинарного дерева осуществляется процедурой Print.

#студентам
1
Как узнать версию .NET, под которой запускается приложение

#NET
👍9
Случайная последовательность

Последовательности ленивы - они генерируются в момент запроса. Это приводит к интересным эффектам. Если переменная q хранит случайную последовательность, то всякий раз при обращении к ней генерируется новая случайная последовательность.

Если требуется использовать одну и ту же случайную последовательность - сохраните её в массиве.
👍52
Demo2023.zip
7.6 KB
Решение всех задач демоварианта 2023 по информатике

Алексей Богданов приводит решение всех задач демо ЕГЭ 2023 по информатике кодом на PascalABC.NET

#школьнику
#учителю
👍4
Отражение

Отражение - это механизм в .NET, который позволяет посмотреть содержимое любого типа. На скриншоте - все методы класса DateTime

#NET
👍21
Сортировка деревом

На скрине вы видите одну из самых быстрых сортировок - сортировку с помощью бинарного дерева поиска. Её асимптотическая сложность в среднем - O(n log(n)) - такая же как и у быстрой сортировки Хоара.

Просто добавляем элементы в дерево: если элемент меньше корня, то добавляем в левое поддерево, если больше значения в корне - добавляем в правое поддерево.

И потом печатаем дерево - элементы в нем уже отсортированы.
🔥3👍1
Множество строк, независимое от регистра

Как сделать множество строк, независимое от регистра?
Передать в конструкторе множества параметр System.StringComparer.OrdinalIgnoreCase.

#студентам
👍5
Вывод вещественного массива

Вывод элементов вещественного массива неудобен тем, что выводятся все значащие цифры вещественного числа - их как правило 14-15.

Чтобы сделать вывод более компактным можно выводить данные например с двумя знаками после точки. Сделать это можно двумя способами:

1. Преобразовать данные, используя Round(x,2)
2. Выводить данные по формату, используя формат x,4:f2 в форматной строке

#начинающим
#учителям
👍3
PascalABC.NET версии 3.9.0 beta

Вышел PascalABC.NET версии 3.9.0 beta.

Список изменений - здесь: https://pascalabcnet.github.io/mydoc_release_notes_3_9_0.html

Основные изменения: ковариантные параметры обобщений, аргументы по умолчанию при вызове подпрограммы, модуль автоматической проверки LightPT.
👍6
Наследование классов

Один класс может быть наследником другого. В этом случае он наследует все его поля и методы. Методы можно переопределять.

На изображении - программа, в которой эллипс наследуется от круга, добавляя второй радиус и переопределяя метод Draw.

#ООП
👍5
Наследование с ограничением

В примере из предыдущего поста можно поступить наоборот - унаследовать окружность от эллипса.

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

Одна из таких проблем здесь - метод обновления радиуса, который приходится переопределять в потомке: в круге необходимо менять оба радиуса эллипса. Однако такой вид наследования с некоторыми оговорками также используется.

#студентам
#ООП