PascalABC.NET официальный канал
前往频道在 Telegram
1 859
订阅者
-124 小时
-117 天
-2630 天
帖子存档
🤖 Алгоритм кластеризации K-means, написанный ChatGPT!
Мир программирования не стоит на месте, и сегодня мы хотим рассказать вам об одном из самых популярных алгоритмов машинного обучения — K-means! Этот алгоритм помогает автоматически разделять данные на кластеры, что очень полезно в задачах анализа данных, сегментации пользователей, обработки изображений и многого другого.
Но самое интересное — алгоритм K-means был написан с помощью ChatGPT и теперь доступен для изучения и использования! 🎉 Мы подготовили специальный материал, который объяснит основные принципы работы этого алгоритма и покажет, как его можно реализовать на PascalABC.NET.
🔗 Полный код и объяснение по ссылке: https://teletype.in/@pascalabcnet/FLq12dPr2bW
💡 Чем полезен K-means?
✦ Простота реализации и высокая скорость работы.
✦ Эффективен при обработке больших объемов данных.
✦ Идеален для визуализации и анализа многомерных данных.
Если вы хотите разобраться в алгоритмах машинного обучения и применить их в своих проектах на PascalABC.NET, то K-means — отличный выбор для старта! 🚀
#МашинноеОбучение #Kmeans #Алгоритмы
Новый стандартный метод массивов IndexMinBy
В PascalABC.NET у массивов появился новый стандартный метод, который позволяет в массиве найти индекс минимального элемента после проекции на ключ.
На скриншоте - пример использования в массиве кортежей.
🆕 Новый метод Window.SaveToClipboard
В GraphWPF появился метод Window.SaveToClipboard сохранения содержимого окна в буфер обмена.
Теперь можно легко сохранять содержимое окна или его часть прямо в буфер обмена всего одной строкой кода! Это отличное решение для быстрого обмена информацией, создания скриншотов или копирования данных для дальнейшего использования.
🔧 Пример использования:
uses GraphWPF;
begin
Circle(200,200,100,Colors.LightBlue);
Window.SaveToClipboard;
end.
✨ Что это дает?
✦ Удобство в разработке: быстрое сохранение визуальных данных.
✦ Интеграция с другими приложениями: копируйте данные напрямую и вставляйте в любые другие программы.
✦ Экономия времени: больше не нужно использовать сторонние инструменты для захвата экранов.
Пробуйте новый метод и делитесь своими впечатлениями! 🚀
#новое🚀 Генерация кластеров точек на плоскости
uses Coords;
function GenerateCluster(X, Y, spread: real; count: integer): array of Point;
begin
Result := ArrGen(count, i -> new Point(
RandomReal(X - spread / 2, X + spread / 2),
RandomReal(Y - spread / 2, Y + spread / 2)
));
end;
begin
Window.Title := 'Генерация кластеров';
var cluster1 := GenerateCluster(5, 3, 5, 90);
var cluster2 := GenerateCluster(7, -6, 4, 105);
var cluster3 := GenerateCluster(-7, 2, 6, 44);
DrawPoints(cluster1,3);
DrawPoints(cluster2,3);
DrawPoints(cluster3,PointRadius := 3);
end.
Здесь показано, как генерировать три кластера точек, используя:
✦ Автоклассы для создания типов данных
✦ Функцию ArrGen для генерации массивов
✦ Модуль Coords и функцию DrawPoints для визуализации массивов точек
✦ Функцию RandomReal(a, b) для получения случайных вещественных
Программа демонстрирует основные современные возможности языка, позволяющие писать компактный и выразительный код.
#ЕГЭ #Графика #Кластеры #ГенерацияТочекRepost from PascalABC.NET официальный канал
Русские имена в программах
В PascalABC.NET в качестве идентификаторов можно использовать русские имена. Это затрудняет написание программы, но повышает её читаемость.
В стандартных примерах PascalABC.NET имеется папка Русские исполнители - здесь приводится одна из программ.
Все имена в программе - русские. Даже параметры лямбд. В подсказках также - исключительно русский язык.
На наш взгляд, для примеров это - идеальный способ донести идею до начинающих.
#методика
#русский
Мы начинаем повторные публикации некоторых старых постов нашего канала. Некоторые из них - очень удачные, и повторно хочется что то обсудить. Другие подойдут вновь подключившимся участникам.
Одна из них - про русский язык в программах. Источник многих споров. И - интересно - когда мы делали пакет для Alt Linux, я получил массу вопросов именно по модулю Исполнители, где имена на русском.
🌐 Работа с сетевыми библиотеками .NET в PascalABC.NET 🌐
PascalABC.NET позволяет использовать мощные сетевые библиотеки .NET для создания приложений, которые могут взаимодействовать с веб-сервисами и сетевыми ресурсами. Сегодня рассмотрим, как с помощью класса System.Net.WebClient можно легко загружать данные из интернета.
📡 Пример: Загрузка веб-страницы с помощью .NET
uses System.Net;
begin
var url := 'https://yandex.ru';
var client := new WebClient;
try
var content := client.DownloadString(url);
Println(content[:1000]);
except
on e: Exception do
Println('Ошибка при загрузке данных:', e.Message);
end;
end.
⚙️ В этом примере мы используем класс WebClient для получения данных с веб-страницы. С помощью методов этой библиотеки можно загружать как строки, так и файлы, а также отправлять запросы к API.
📡 Применение: Этот пример можно использовать для парсинга данных с веб-сайтов или создания простого сетевого клиента.
Откройте для себя возможности сетевых приложений с PascalABC.NET и библиотеками .NET!
#PascalABC #dotNET #Сети #Программирование #Pascal #WebНовый модуль 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.
#новоеАвтоклассы и их предки
В PascalABC.NET стало возможно наследовать автоклассы от классов без полей. Это можно использовать в ряде сценариев.
#новое
+3
Воскресная компьютерная школа мехмата ЮФУ и PascalABC.NET
Система программирования PascalABC.NET обязана своим развитием детской компьютерной школе мехмата ЮФУ (сайт компьютернаяшкола.рф). Именно здесь обкатываются все последние методики, развиваются новые библиотеки и сервисы.
Каждый год в Компьютерной школе мехмата ЮФУ обучается более 400 юных программистов. На снимках - примерно половина этих школьников, пришедших вместе с родителями в прошлое воскресенье.
Первый и основной язык программирования - PascalABC.NET. Он ставит базу, а на втором году обучения изучается Python как второй язык. Школьники проходят его быстро потому что не допускают тех ошибок, которые делают начинающие с языка Python.
На фото - примерно половина этих школьников, пришедших на собрания в два последних воскресенья вместе с родителями.
Табулирование функции
Для табулирования функции Sin(x) воспользуемся генератором последовательности точек Range, возвращающим точки разбиения отрезка [a,b] с шагом h.
ChatGPT - решение задачи о принадлежности точки треугольнику
function triangleArea(x1, y1, x2, y2, x3, y3: real): real;
begin
Result := abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0);
end;
function IsPointInTriangle(px, py, x1, y1, x2, y2, x3, y3: real): boolean;
begin
var areaOriginal := triangleArea(x1, y1, x2, y2, x3, y3);
var area1 := triangleArea(px, py, x2, y2, x3, y3);
var area2 := triangleArea(x1, y1, px, py, x3, y3);
var area3 := triangleArea(x1, y1, x2, y2, px, py);
// Если сумма площадей равна исходной площади, точка принадлежит треугольнику
Result := abs(areaOriginal - (area1 + area2 + area3)) < 1e-9;
end;
begin
var (x1, y1) := (0.0, 0.0);
var (x2, y2) := (5.0, 0.0);
var (x3, y3) := (0.0, 5.0);
var (px, py) := (2.0, 2.0);
if IsPointInTriangle(px, py, x1, y1, x2, y2, x3, y3) then
Println('Точка принадлежит треугольнику')
else
Println('Точка не принадлежит треугольнику');
end.Переходим с Python на PascalABC.NET
Перед вами - шпаргалка соответствия конструкций Python и PascalABC.NET. Некоторые конструкции PascalABC.NET отсутствуют в Python - например, цикл loop или цикл repeat-until.
Первая программа на PascalABC.NET для студентов
Мы начинаем с языка программирования со статической типизацией компиляционного типа. Это позволяет не только лучше понять, как данные хранятся в памяти, но и гораздо лучше почувствовать эффективность программ, а также получить правильное представление о типах данных.
С первым занятием по программированию - всех читателей канала! Кто-то ученик, кто-то преподаватель, а кто-то - разработчик. Но все мы занимаемся одним делом - программируем.
Библиотека MathNet.Numerics.dll
Библиотека математических вычислений MathNet.Numerics.dll интегрирована в инсталлятор PascalABC.NET.
На скриншоте - генерация набора чисел, подчиненного нормальному распределению
#новое
Регулярные выражения для школьников в День Знаний
Администрация канала поздравляет всех читателей с Днем Знаний!
В День Знаний мы публикуем презентацию и выступление Ипатова Юрия Аркадьевича об использовании регулярных выражений при решении задач ЕГЭ (Съезд учителей информатики, 27.08.24).
Это был лучший доклад в секции ЕГЭ.
И - ссылка на сам доклад
https://youtu.be/ySMsZm0ZUNY
Беседа с ChatGPT о новом востребованном языке программирования. И - новый язык школьного программирования будущего - EduFlex!
Обращаем внимание, что во всех вариантах ChatGPT предлагал язык со статической типизацией. И с цепочкой методов с лямбдами в качестве параметров.
https://teletype.in/@pascalabcnet/sH6iujQmEtL
PascalABC.NET версии 3.10.0
Вышел PascalABC.NET версии 3.10.0
Список изменений - здесь: https://pascalabcnet.github.io/mydoc_release_notes_3_10_0.html
Основные изменения: многострочные строковые литералы, операция to, новые модули WPF и Turtle, отладчик в Linux-версии.
Визуализация массива точек в 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.
#новое
#ЕГЭ