PascalABC.NET официальный канал
1.92K subscribers
513 photos
1 video
9 files
362 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Обучение вводу в цикле

Рассмотрим простую задачу: вводится 10 целых, найти их сумму.

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

Вначале пишем шаблон общей программы: цикл 10 раз и ВВОД В ЦИКЛЕ.

Затем дочитываем условие задачи и анализируем, что надо найти. Поскольку надо найти сумму, пишем после ввода sum += x и запускаем программу. Компилятор выдаст ошибку.

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

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

Такой способ решения похож на методику быстрой разработки программ, используемую в production: в каждый момент времени у нас есть работающая программа. Он позволяет школьнику зафиксировать частичный успех.

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

#методика
#начинающим
Вышла версия PascalABC.NET 3.9.0 Release

Основные изменения - здесь: https://pascalabcnet.github.io/mydoc_release_notes_3_9_0.html

По сравнению с beta-версией добавлена стандартная функция RandomReal, оптимизировано множественное присваивание (a,b) := (b,a), кардинально переработан модуль LightPT - упрощено создание новых заданий.
Пишем интерпретатор на PascalABC.NET. Визиторы по синтаксическому дереву

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

https://teletype.in/@pascalabcnet/Visitors
PascalABC.NET в Astra Linux

На портале https://easyastra.ru/TEST/ опубликован deb-пакет для PascalABC.NET.
Литеральный массив

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

На скриншоте - литеральный массив, заданный целыми и вещественными
True или False?

Бывает и такое. Интересно, почему?
Греческие буквы в именах

Имена в PascalABC.NET могут быть буквами любого алфавита
Как не надо вычислять максимум

Очень часто можно встретить в ЕГЭшных задачах такой код вычисления максимума. Он абсолютно неэффективен. Но пишется чтобы сэкономить несколько символов.

Он пришел на волне тотальной популярности языка Питон, на котором массово пишут короткий неэффективный код. Эти привычки потом остаются на всю жизнь.

На Питоне кстати ввиду его неэффективности скорость программы с условным оператором и функцией Max одинакова.
Выделение содержимого всех строковых констант в файле

Пользуемся регулярными выражениями.

Для апострофа пользуемся ESC-последовательностью \'. Поскольку это апостроф как символ внутри строковой константы, то повторяем его дважды \''

Поскольку нам не нужны сами апострофы, а только их содержимое, пользуемся утверждениями положительного просмотра назад и вперед соответственно.
Публикация о новой версии на opennet.ru

Новостной ИТ-сайт opennet.ru опубликовал сообщение о выходе версии PascalABC.NET 3.9.0:
https://www.opennet.ru/opennews/art.shtml?num=59497

К сожалению, именованные аргументы названы именованными атрибутами, а основное изменение в языке - поддержка ковариантных параметров обобщений - упомянута через запятую вскользь в последнем пункте. Жаль также, что не упомянута поддержка библиотеки машинного обучения Microsoft.ML.

Сайт OpenNet.ru известен своей смелостью - он продолжает публиковать новости о выходе новых версий PascalABC.NET несмотря на резко негативный тон комментариев своих читателей. Обсуждения здесь прекрасны, иногда попадаются настоящие жемчужины (см. скриншот).
Как быстро нарисовать 100000 окружностей

Используем FastDraw и рисование на DrawingContext

#графика
Решение задач под управлением модуля невидимой проверки

Хотите попробовать, как решать задачи под управлением модуля невидимой автоматической проверки? Попробуйте прямо сейчас!

Для этого скачайте последнюю версию PascalABC.NET, откройте Примеры\CheckedTasks\LightPT\УрокМассивы. Выберите любую задачу и попробуйте решить!

Делитесь впечатлениями в комментариях!
Новые стандартные функции ArrRandomReal и SeqRandomReal с параметром digits

В последней версии появились стандартные функции ArrRandomReal и SeqRandomReal с необязательным параметром digits.

Спасибо Александру Осипову за предложение!

#новое
Гауссово (нормальное) распределение случайной величины

Данная программа иллюстрирует гауссово распределение случайной величины
pascal
uses GraphWPF;

function Gauss(M,Sigma: real): real;
begin
var u := Random;
var v := Random;

var sq1 := Sqrt(-2*ln(v))*Cos(2*Pi*u);
Result := Sigma * sq1 + M
end;

begin
Window.Title := 'Нормально распределенная случайная величина';
SetMathematiccoords(-5,5);
loop 100000 do
begin
var (x,y) := (Gauss(0,1),Gauss(0,1));
FillCircle(x,y,0.02,RandomColor)
end
end.
Метод Numerate

Метод Numerate позволяет к каждому элементу последовательности приписать его номер в последовательности. Он возвращает последовательность пар (номер, элемент)

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

Например, в задаче "Номера первых пяти простых чисел, содержащих цифру 5" решение может быть таким:

##
uses School;
Primes(500).Numerate.Where(p -> '5' in p[1].ToString).Take(5).Print

с выводом
(3,5) (16,53) (17,59) (36,151) (37,157)

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

uses School;

begin
var pp := Primes(500);
for var i:=0 to pp.Count-1 do
if '5' in pp[i].ToString then
Println(pp[i],i+1)
end.

Вывод:
5 3 
53 16
59 17
151 36
157 37
251 54
257 55
353 71
359 72
457 88

И - надо отобрать первые 5 строк. Кто предложит - как, не используя последовательности?