ru
Feedback
PascalABC.NET официальный канал

PascalABC.NET официальный канал

Открыть в Telegram

Официальный канал языка и системы программирования PascalABC.NET

Больше
1 860
Подписчики
-424 часа
-97 дней
-2530 дней
Архив постов
Особые значения вещественного типа Среди особых значений вещественного типа различают Бесконечность (положительную и отрицате
Особые значения вещественного типа Среди особых значений вещественного типа различают Бесконечность (положительную и отрицательную) и значение 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}');

Погрешность при вычислениях с вещественными Вычисления с вещественными значениями производятся не точно, а приближенно. Поэто
Погрешность при вычислениях с вещественными Вычисления с вещественными значениями производятся не точно, а приближенно. Поэтому результат может оказаться неожиданным. На скрине - пример одного из таких результатов. А должно быть ведь ровно 10 - да? Или нет?

https://stepik.org/250479 - курс открыт в полном объеме.

Машинное обучение на PascalABC.NET. Метод k ближайших соседей Возвращаемся к публикации классических методов ИИ. Решаем с пом
Машинное обучение на PascalABC.NET. Метод k ближайших соседей Возвращаемся к публикации классических методов ИИ. Решаем с помощью модуля MLABC одну из известнейших задач ML. Суммарно - около 250 строк кода. Метод k ближайших соседей (kNN) — это один из простейших алгоритмов машинного обучения, который используется для задач классификации и регрессии. В его основе лежит принцип, что объект относится к тому классу, которому принадлежит большинство из k ближайших к нему соседей в пространстве признаков. В качестве примера мы использовали стандартный набор данных об ирисах Фишера, содержащий три класса (виды ирисов), сбалансированные по количеству объектов. Данные были разделены на обучающую и тестовую выборки, после чего модель kNN с параметром k = 3 была обучена и протестирована. Здесь для данного цветка ириса надо предсказать его принадлежность к одному из трех классов. Метод показал высокую точность на тестовых данных — порядка 96%, что подтверждает его эффективность для этой задачи. Такой алгоритм можно применять для различных задач классификации в машинном обучении, включая распознавание изображений, анализ текстов и медицинскую диагностику. Он легко понимается первокурсниками! В комментарии - исходники

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

Как выглядят анонимные функции в разных языках ? По-разному. 🤔 🦀 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 А что выберете вы? 😉

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

Версия PascalABC.NET 3.11 Поздравляем всех читателей канала с Днем знаний! Вышла версия PascalABC.NET 3.11 со встроенной подд
Версия 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 - определение функции, рекурсия, параметры **, списки, методы списков, именованные аргументы, словари и обязательные спецификации типов при определении функции

Развевающийся флаг в Graph3D В Graph3D появился анимированный графический примитив Cloth, который позволяет создать полотнище
Развевающийся флаг в 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.

Модуль Graph3D - дым из труб В Graph3D появилась возможность создавать анимацию типа "дым из труб" с помощью нового 3D-объект
Модуль 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.

🚀 Метод Each в PascalABC.NET: создание словарей из последовательностей В PascalABC.NET метод Each позволяет быстро преобразо
🚀 Метод 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;
Здесь: ключ — длина слова значение — последовательность слов с этой длиной

Rosetta Code - Abbreviations, simple Продолжаем решать задачи из Rosetta Code. На этот раз подключаем ИИ DeepSeek https://ros
Rosetta Code - Abbreviations, simple Продолжаем решать задачи из Rosetta Code. На этот раз подключаем ИИ DeepSeek https://rosettacode.org/wiki/Abbreviations,_simple#PascalABC.NET ИИ некоторые вещи не знает - приходится ему рассказывать, что есть
{$zerobasedstrings on}
Dict('' to '')
и прочие плюшки. В целом - слушается :) И генерирует работоспособный алгоритм

Rosetta Code - Abbreviations, easy Решение еще одной задачи из Rosetta Code https://rosettacode.org/wiki/Abbreviations,_easy#
Rosetta Code - Abbreviations, easy Решение еще одной задачи из Rosetta Code https://rosettacode.org/wiki/Abbreviations,_easy#PascalABC.NET Здесь - использование многострочных строк, создание словаря с помощью Each, использование FirstOrDefault, а также операций ?. и ?? А PascalABC.NET - на 57 месте в рейтинге с 616 решениями!

Черепаха меняет цвет Черепаха теперь запоминает изменение цвета uses Turtle,GraphWPF; begin SetWidth(5); ToPoint(-10,0); loop
Черепаха меняет цвет Черепаха теперь запоминает изменение цвета
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.

🎨 Ray Tracing на PascalABC.NET: Красота физики в 300 строках! В этой демо-сцене PascalABC.NET собраны все классические и сов
🎨 Ray Tracing на PascalABC.NET: Красота физики в 300 строках! В этой демо-сцене PascalABC.NET собраны все классические и современные технологии трассировки лучей. Это не просто картинка, а настоящий учебник компьютерной графики в коде. Код программы Что здесь под капотом? 👇 💡 Физика света: ✔️ Закон Снеллиуса (рефракция стекла, кристаллов) ✔️ Рекурсивное отражение и преломление ✔️ Модель освещения Фонга (диффузия + спекулярность) ✔️ Тени от точечных источников ✔️ Градиентное небо 🎨 Рендеринг и материалы: ✔️ Антиалиасинг (3x3 суперсэмплинг) ✔️ Субпиксельные смещения ✔️ Цветное освещение (каждый источник — свой цвет) ✔️ Эмиссивные материалы (свечение объектов) ✔️ Матовые поверхности ✔️ Металлы (золото, зеркала) ✔️ Диэлектрики (стекло, кристаллы) ✔️ Градиентная эмиссия (сильнее в центре) ✔️ Falloff эффекты свечения ✔️ Тон-маппинг (улучшенная обработка ярких цветов) ✔️ Затухание света с расстоянием ✔️ Улучшенное смешивание цветов от разных источников ⚙️ Технологии: ✔️ Параллельные вычисления (OpenMP) ✔️ Оптимизация производительности ✔️ Перегрузка операций в классах 💡 Почему PascalABC.NET? 📍 Быстро, наглядно, красиво. 📍 Читаемый код. 📍 Всё работает прямо в IDE. 📍 Идеально для изучения физики света, трассировки лучей, алгоритмов визуализации. 🎥 Сцена рендерится за секунды. 👨‍💻 Всего ~300 строк кода. ✨ PascalABC.NET легко учит сложным вещам!

Обращаемся к LLM из PascalABC.NET Чтобы сделать запрос к большой языковой модели из PascalABC.NET, воспользуемся сервисом ope
Обращаемся к LLM из PascalABC.NET Чтобы сделать запрос к большой языковой модели из PascalABC.NET, воспользуемся сервисом openrouter.ai. За одну минуту получим там API Token, который будет использован в нашей программе в переменной KEY. Для работы с JSON создадим проект и двумя нажатиями подключим к нему NuGet-пакет NewtonSoft.Json. Отправим запрос с вопросом о смысле жизни к одной из самых лучших моделей - deepseek-r1 free с ризонингом (то есть со способностью рассуждать). И через несколько секунд получим ответ - тоже в виде json, который выведем в отформатированном виде, используя сериализацию с форматированием. Попутно в пришедшем json мы видим сам reasoning - рассуждение модели, как отвечать на наш вопрос. Итак, в чем смысл жизни? Ответ LLM вы видите: Как писал Виктор Франкл, "Жизнь требует от человека не вопросов, а ответов - через дела и любовь". Так что, возможно, смысл жизни в пути: в том, чтобы задаваться вопросами, искать, расти и находить своё собственное предназначение. 🌱✨ #PascalABCNET #LLM #любовь #предназначение

Использование сериалазации Json с помощью Newtonsoft.Json Создаем проект, устанавливаем Newtonsoft.Json в качестве NuGet-паке
Использование сериалазации Json с помощью Newtonsoft.Json Создаем проект, устанавливаем Newtonsoft.Json в качестве NuGet-пакета. И пишем вот такую программу. Здесь сериализуется в строку в формате json словарь из целых в массивы целых. Затем происходит десериализация, проверка типа и вывод содержимого в неизменном виде. Код:
uses Newtonsoft.Json;

begin
  var d0 := Dict (1 to [2,3,4],
    3 to [4,5,6]
  );
  var json := JsonConvert.SerializeObject(d0);
  Println(json);
  var obj := JsonConvert.DeserializeObject&<Dictionary<integer,array of integer>>(json);
  Println(TypeName(obj));
  var d := obj as Dictionary<integer,array of integer>;
  foreach var (k,v) in d do
    Println(k,v);
end.
#json #nuget

Рисуем изображения из набора MNIST для распознавания рукописных цифр Перед вами - небольшая программа для рисования цифр из н
Рисуем изображения из набора MNIST для распознавания рукописных цифр Перед вами - небольшая программа для рисования цифр из набора MNIST. Каждая цифра представлена монохромным изображением размера 28 на 28 пикселей. Размер каждого пиксела при рисовании равен w. Программа:
uses GraphWPF;

function Reshape(data: array of integer; w,h: integer): array [,] of integer;
begin
  if data.Length <> w * h then
    raise new Exception('Несоответствие размерности при Reshape()');   
  Result := MatrByCol(data.Batch(w))
end;

procedure DrawPixels(pixels: array [,] of integer; x: real := 0; y: real := 0; width: real := 10)
  := FastDraw(dc -> begin
    for var ix := 0 to pixels.RowCount-1 do
    for var iy := 0 to pixels.ColCount-1 do
      DrawRectangleDC(dc,x + ix * width, y + iy * width, width, width, GrayColor(pixels[ix,iy]),Colors.Transparent,1);
  end);

begin
  var sz_img := 28;
  var strs: array of string := ReadLines('mnist_test.csv').Skip(1).ToArray;
  var data: array of array of integer := strs.Select(s -> s.ToWords(',').Skip(1).Select(x -> x.ToInteger).ToArray).ToArray;
  var digits := data.Select(arr -> Reshape(arr,sz_img,sz_img)).ToArray;
  
  var w := 2;
  var digits_in_col := 15;
  var digits_in_row := 11;
  for var iy:=0 to digits_in_row-1 do
  for var ix:=0 to digits_in_col-1 do
    DrawPixels(digits[iy * digits_in_col + ix],ix*w*sz_img,iy*w*sz_img,w);
end.

Что может PascalABC.NET и не может Python Попробуйте возвести 2 в степень 100000. В PascalABC.NET - легко! А Python падает )
Что может PascalABC.NET и не может Python Попробуйте возвести 2 в степень 100000. В PascalABC.NET - легко! А Python падает )

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