PascalABC.NET официальный канал
2.02K subscribers
587 photos
1 video
9 files
398 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Обращаемся к LLM из PascalABC.NET

Чтобы сделать запрос к большой языковой модели из PascalABC.NET, воспользуемся сервисом openrouter.ai.

За одну минуту получим там API Token, который будет использован в нашей программе в переменной KEY.

Для работы с JSON создадим проект и двумя нажатиями подключим к нему NuGet-пакет NewtonSoft.Json.

Отправим запрос с вопросом о смысле жизни к одной из самых лучших моделей - deepseek-r1 free с ризонингом (то есть со способностью рассуждать).

И через несколько секунд получим ответ - тоже в виде json, который выведем в отформатированном виде, используя сериализацию с форматированием.

Попутно в пришедшем json мы видим сам reasoning - рассуждение модели, как отвечать на наш вопрос.

Итак, в чем смысл жизни? Ответ LLM вы видите:

Как писал Виктор Франкл, "Жизнь требует от человека не вопросов, а ответов - через дела и любовь". Так что, возможно, смысл жизни в пути: в том, чтобы задаваться вопросами, искать, расти и находить своё собственное предназначение. 🌱

#PascalABCNET #LLM #любовь #предназначение
👍10🔥6
🎨 Ray Tracing на PascalABC.NET: Красота физики в 300 строках!

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

Код программы

Что здесь под капотом? 👇

💡 Физика света:
✔️ Закон Снеллиуса (рефракция стекла, кристаллов)
✔️ Рекурсивное отражение и преломление
✔️ Модель освещения Фонга (диффузия + спекулярность)
✔️ Тени от точечных источников
✔️ Градиентное небо

🎨 Рендеринг и материалы:
✔️ Антиалиасинг (3x3 суперсэмплинг)
✔️ Субпиксельные смещения
✔️ Цветное освещение (каждый источник — свой цвет)
✔️ Эмиссивные материалы (свечение объектов)
✔️ Матовые поверхности
✔️ Металлы (золото, зеркала)
✔️ Диэлектрики (стекло, кристаллы)
✔️ Градиентная эмиссия (сильнее в центре)
✔️ Falloff эффекты свечения
✔️ Тон-маппинг (улучшенная обработка ярких цветов)
✔️ Затухание света с расстоянием
✔️ Улучшенное смешивание цветов от разных источников

⚙️ Технологии:
✔️ Параллельные вычисления (OpenMP)
✔️ Оптимизация производительности
✔️ Перегрузка операций в классах

💡 Почему PascalABC.NET?
📍 Быстро, наглядно, красиво.
📍 Читаемый код.
📍 Всё работает прямо в IDE.
📍 Идеально для изучения физики света, трассировки лучей, алгоритмов визуализации.

🎥 Сцена рендерится за секунды.
👨‍💻 Всего ~300 строк кода.
PascalABC.NET легко учит сложным вещам!
👍11🔥72
Черепаха меняет цвет

Черепаха теперь запоминает изменение цвета

uses Turtle,GraphWPF;

begin
SetWidth(5);
ToPoint(-10,0);
loop 70 do
begin
SetColor(RandomColor);
Down;
Forw(5);
Up;
Back(5);
TurnRight(90);
Forw(0.3);
TurnLeft(90);
end;
end.
🔥123
Rosetta Code - Abbreviations, easy

Решение еще одной задачи из Rosetta Code
https://rosettacode.org/wiki/Abbreviations,_easy#PascalABC.NET

Здесь - использование многострочных строк, создание словаря с помощью Each, использование FirstOrDefault, а также операций ?. и ??

А PascalABC.NET - на 57 месте в рейтинге с 616 решениями!
👍9
Rosetta Code - Abbreviations, simple

Продолжаем решать задачи из Rosetta Code.
На этот раз подключаем ИИ DeepSeek
https://rosettacode.org/wiki/Abbreviations,_simple#PascalABC.NET

ИИ некоторые вещи не знает - приходится ему рассказывать, что есть
{$zerobasedstrings on}
Dict('' to '')


и прочие плюшки.

В целом - слушается :) И генерирует работоспособный алгоритм
11
🚀 Метод Each в PascalABC.NET: создание словарей из последовательностей

В PascalABC.NET метод Each позволяет быстро преобразовать последовательность в словарь, где ключами являются элементы исходной последовательности, а значениями — результат применения функции к каждому ключу. Это удобно для создания ассоциативных структур без лишнего кода.

Пример группировки слов по длине из строки:

var text := 'Do not count your chickens before they hatch';
var words := text.ToWords;
var dict := words.Select(w -> w.Length)
.Distinct
.Order
.Each(len -> words.Where(w -> w.Length = len));
dict.PrintLines;


Здесь:
ключ — длина слова
значение — последовательность слов с этой длиной
53
Модуль Graph3D - дым из труб

В Graph3D появилась возможность создавать анимацию типа "дым из труб" с помощью нового 3D-объекта ParticleSystem.

uses Graph3D;

begin
View3D.BackgroundColor := Colors.Black;
Cylinder(0,0,0,2,0.5);
var ps := ParticleSystem(0,0,0,'smoke.png');
// ps.TextureName := 'smoke.png';
ps.LifeTime := 5;
ps.FadeOutTime := 0;
ps.VelocityDamping := 0.999;
ps.AngularVelocity := 10;
ps.SizeRate := 1;
ps.AccelerationDirection := V3D(3,0,-1);
ps.Acceleration := 4;
ps.AccelerationSpreading := 10;
ps.EmitRate := 100;
ps.StartRadius := 0;
ps.StartSize := 0.5;
ps.StartDirection := V3D(0,0,1);
ps.StartSpreading := 10;
ps.StartVelocity := 4;
ps.StartVelocityRandomness := 2;
ps.Position := P3D(0, 0, 0);
end.
👍10🔥81
Развевающийся флаг в Graph3D

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

Анимацию можно остановить и продолжить заново

uses Graph3D;

begin
Window.Caption := 'Развевающийся флаг';
View3D.HideAll;
Cylinder(0,4,0,6,0.07,Colors.Brown);
var c := Cloth(0,4,0,3,4,6,'FlagOfRussia.png');
c.WindSpeed := 6;
c.WindDirection := 180;
c.Gravity := 4;
c.Damping := 0.999;
c.Mass := 0.8;
c.Iterations := 20;
Sleep(1000);
c.Stop;
Sleep(1000);
c.Start;
end.
🔥13🍾42
Версия PascalABC.NET 3.11

Поздравляем всех читателей канала с Днем знаний!

Вышла версия PascalABC.NET 3.11 со встроенной поддержкой многозыковости (разработчик Земляк Александр). Для примера в среду встроен компилятор языка SPython (разработчик Мовчан Егор).

Ниже - программа на SPython, сохраненная в файле с расширением .pys:

def product(a: list[int], **kwargs: int) -> list[list[int]]:
repeat = kwargs['repeat']
if repeat == 1:
return [[a[i]] for i in range(len(a))]
prev = product(a, repeat = repeat - 1)
res: list[list[int]] = []
for elem in a:
for p in prev:
res.append([elem] + p)
return res

print(product([1,2,3], repeat = 3));


Вывод:

[[1,1,1],[1,1,2],[1,1,3],[1,2,1],[1,2,2],[1,2,3],[1,3,1],[1,3,2],[1,3,3],[2,1,1],[2,1,2],[2,1,3],[2,2,1],[2,2,2],[2,2,3],[2,3,1],[2,3,2],[2,3,3],[3,1,1],[3,1,2],[3,1,3],[3,2,1],[3,2,2],[3,2,3],[3,3,1],[3,3,2],[3,3,3]]


SPython - язык с синтаксисом Питона, имеющий статическую типизацию и скорость выполнения, равную скорости программ PascalABC.NET и C#.

В примере программы на SPython - определение функции, рекурсия, параметры **, списки, методы списков, именованные аргументы, словари и обязательные спецификации типов при определении функции
🔥135
PascalABC.NET в английской википедии

PascalABC.NET упомянут в английской википедии в престижной статье о Linux как одна из свободных реализаций языка программирования Pascal
https://en.wikipedia.org/wiki/Linux
в подрубрике "Programming on Linux"
👏21🔥41
Как выглядят анонимные функции в разных языках ?

По-разному. 🤔

🦀 Rust:
| x: i32, y: i32 | x + y

💎 Ruby:
lambda { |x, y| x + y }

🌙 Lua:
function(x,y) return x+y end

⚙️ C++:
[](auto x, auto y) {return x + y;};

🐍 Python:
lambda х, у: х+у

И только в PascalABC.NET, Maple и Java:
(x, y) -> x + y

А что выберете вы? 😉
9
Использование emoji в комментариях PascalABC.NET

// 🫡 — работает - и ладно
// 🤯 — баг неожиданно проявился
// 🤖 — спросил у ChatGPT, а оно работает
// 🔥 — особенно крутой кусок кода
// 💀 — опасный, но рабочий хардкор
// 🐢 — работает медленно, но верно
// 🪄 — магия, хитрое решение
// 🧠 — очень умный алгоритм
// 💩 — плохой код, но работает
// ⚡️ — оптимизация, ускорение
// 🕵️‍ — исследуем баг
// 🎯 — правильно решённая задача
// 🌀 — хаотичный участок кода
// 🛠 — починю потом (нет)
// 📚 — списал у учебника
// 🥷 — скрытый трюк или пасхалка
// 🎉 — оно заработалоооо!
// — красиво, блин
// 💾 — память используется эффективно
// 👽 — пришельцы помогали писать этот фрагмент
😎23👍41
Машинное обучение на PascalABC.NET.
Метод
k ближайших соседей

Возвращаемся к публикации классических методов ИИ. Решаем с помощью модуля MLABC одну из известнейших задач ML. Суммарно - около 250 строк кода.
Используются лямбды, цепочки методов, LINQ, классы, исключения, срезы массивов. Класс Dataset реализован в виде массива массивов вещественных - для простоты реализации. Код основной программы по интерфейсу максимально приближен к интерфейсу модуля Python scikit-learn.

Метод k ближайших соседей (kNN) — это один из простейших алгоритмов машинного обучения, который используется для задач классификации и регрессии. В его основе лежит принцип, что объект относится к тому классу, которому принадлежит большинство из k ближайших к нему соседей в пространстве признаков.

В качестве примера мы использовали стандартный набор данных об ирисах Фишера, содержащий три класса (виды ирисов), сбалансированные по количеству объектов. Данные были разделены на обучающую и тестовую выборки, после чего модель kNN с параметром k = 3 была обучена и протестирована.

Здесь для данного цветка ириса надо предсказать его принадлежность к одному из трех классов.

Метод показал высокую точность на тестовых данных — порядка 96%, что подтверждает его эффективность для этой задачи. Такой алгоритм можно применять для различных задач классификации в машинном обучении, включая распознавание изображений, анализ текстов и медицинскую диагностику.

Он легко понимается первокурсниками!

В комментарии - исходники
👍321🤩1
Погрешность при вычислениях с вещественными

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

На скрине - пример одного из таких результатов.

А должно быть ведь ровно 10 - да? Или нет?
👍5
Особые значения вещественного типа

Среди особых значений вещественного типа различают Бесконечность (положительную и отрицательную) и значение NaN - Not a Number (не число), которое возникает при некоторых некорректных операциях - например, при извлечении корня из отрицательного числа

##
// +∞: результат деления на 0 или константа PositiveInfinity
var posInf := real.PositiveInfinity;
var posInf2 := 1.0/0.0;
Println($'+∞: {posInf} Проверка: {real.IsPositiveInfinity(posInf)}');
Println($'1/0 → {posInf2}');

// -∞: отрицательное деление на 0 или константа NegativeInfinity
var negInf := real.NegativeInfinity;
var negInf2 := -1.0/0.0;
Println($'-∞: {negInf} Проверка: {real.IsNegativeInfinity(negInf)}');
Println($'-1/0 → {negInf2}');

// NaN: «не число» – результат недопустимых операций
var nanVal := real.NaN;
var nanVal2 := Sqrt(-1);
Println($'NaN: {nanVal} Проверка: {real.IsNaN(nanVal)}');
Println($'Sqrt(-1) → {nanVal2}');
👍112
Машинное 𝜀

Машинным 𝜀 называется минимальное вещественное значение, для которого для которого 1 + 𝜀 > 1. Для типа real оно находится между 1e-15 и 1e-16.

Вот программа для вычисления машинного 𝜀

function MachineEpsilon: real;
begin
var eps := 1.0;
while 1.0 + eps > 1.0 do
eps := eps / 2.0;
Result := eps * 2.0;
end;

begin
var eps := MachineEpsilon;
Println('Машинный эпсилон =', eps);
Println('1 + eps = 1?', 1 + eps = 1);
Println('1 + eps/2 = 1?', 1 + eps/2 = 1);
end.
131👍1
Модуль TurtleABC

Появился модуль TurtleABC для Linux

uses TurtleABC;

begin
SetScale(4);
SetOrigin(5,-35);
SetColor(Color.Blue);
Down;
loop 4 do
begin
Forw(20);
Turn(90);
end;

Up;
MoveTo(-30, 30);
Down;
SetColor(Color.Red);
loop 3 do
begin
Forw(15);
Turn(120);
end;
end.
🔥7👍62😈1
Различия между модулями и библиотеками

Данная таблица приводится в курсе Основы программирования в начале второго месяца обучения.

Все весьма сложные концепции разбираются в этом курсе подробно, эффективно и на ранних этапах
👍11
Чему равен корень из -1

А действительно - чему?

Это зависит от типа. Если тип - real, то это не число. В смысле число, которое называется NaN (Not a Number).

Если тип - Complex - то вполне себе нормальное комплексное число, примерно равное i - комплексной единице.
12
Температура и цвет

Здесь демонстрируется использование вложенной условной операции, а также метода расширения Between для целых (по умолчанию он включает концы)

begin
var t := ReadInteger; // температура

var color :=
if t.Between(-100, 0) then 'blue' else
if t.Between(1, 15) then 'green' else
if t.Between(16, 30) then 'yellow' else
if t.Between(31, 100) then 'red' else
'black';

Println($'Temperature color: {color}');
end.
9