PascalABC.NET официальный канал
Открыть в Telegram
Официальный канал языка и системы программирования PascalABC.NET
Больше1 857
Подписчики
+124 часа
-127 дней
-2330 дней
Архив постов
Операция in для проверки попадания точки в область
На скриншоте - программа, которая позволяет штатными средствами PascalABC.NET проверить попадание целочисленной точки в прямоугольник с целыми координатами вершин
Знаковое событие - встраивание Python в Excel
По-существу Python давно выполняет многие задачи автоматизации лучше VBA. И вот теперь Mocrosoft приняла решение. Учитывая отличные библиотеки Python для визуализации графиков это - знаковое событие.
https://www.ixbt.com/news/2023/08/22/microsoft-python-excel.html
One-Liners в PascalABC.NET
One-Liners - это программы из одной строки, делающие что-то полезное.
Термин введен популяризаторами Python чтобы подчеркнуть, какой Python замечательный и компактный язык.
В курсе "Основы программирования" мы также идем по этой скользкой дорожке и демонстрируем некоторые One-Liners на языке PascalABC.NET
Предлагаем читателям опубликовать свои интересные One-Liners
Корутины
С помощью функций, генераторов последовательностей можно организовывать выполнение простых сопроцедур (корутин).
На скрине - корутина q и корутина p последовательно выполняют действия между операторами yield. В данном случае оператор yield играет роль паузы после выполнения Movenext, а его возвращаемое значение игнорируется.
Бесконечная последовательность чисел Фибоначчи
Реализуем генератор бесконечной последовательности чисел Фибоначчи с помощью оператора yield
Новая книга Валерия Рубанцева
Валерий Рубанцев опубликовал свою новую замечательную книгу "Компьютерная графика на занимательных примерах": https://forum.mmcs.sfedu.ru/t/chere-puh-i-vse-vse-vse/4126/56
и сопроводил пост напутствием: "Кто качает, тот не подкачает!"
Прямые ссылки:
книга: https://disk.yandex.ru/i/nSzSBrLI1IsyIA
тексты программ: https://disk.yandex.ru/d/V7lrWiabmOZ8Vw
Определяем все методы строки рефлексией
Каждый тип имеет метод GetMethods, возвращающий все его методы. Чтобы выдать их в стиле Паскаля, приходится немного попреобразовывать параметры и воспользоваться стандартной функцией TypeToTypeName.
Astra Linux - недопущение новых возможностей PascalABC.NET
Продолжаем обзор интернета с упоминанием PascalABC.NET
Удивительное описание современной версии PascalABC.NET находим на портале Easy Astra (см. скрин). Свежее, красивое, добротно сделанное.
Удивительное потому что вообще не упоминается то, что было после Delphi. И код на скриншоте, сделанный очевидно специалистом, он как бы передает привет из далёких 70-х.
Полиморфные массивы и фильтрация по типу
В следующем примере создается массив разнородных объектов.
Чтобы эти объекты сосуществовали в одном массиве, тип элементов массива должен быть object - предок всех типов.
Затем можно отфильтровать по типу с помощью OfType и обрабатывать уже только элементы данного типа. Приятно, что после OfType мы получаем последовательность элементов ровно того типа, который указан в OfType.
Поэтому отфильтрованные вещественные можно например просуммировать
#PascalABC.NET
SelectMany как операция, обратная группировке
Если произвести группировку по какому-то полю, то мы получим иерархический набор данных, разбитых по группам.
Чтобы вернуться назад к линейным данным - используем SelectMany. Этот метод сцепляет последовательности из каждой группы в единую плоскую последовательность.
В результате после GroupBy и SelectMany получаем исходную последовательность с измененным порядком элементов.
Вырезание подматрицы из матрицы
Срезы позволяют вырезать подматрицу из матрицы
ToArray для кортежей
В выпуске 3.9.0.3338 появился метод расширения ToArray для кортежей элементов одного типа
#новое
Перемешиваем карты - Unicode-символы
В данной программе будем представлять игральные карты Unicode-символами. Основная сложность здесь - то, что игральная карта кодируется двумя Unicode-символами. Поэтому преобразуем ее вначале в последовательность байт, затем будем увеличивать нужный байт на 1 и назад потом преобразуем в строку.
Из полученной последовательности выбросим некоторые Unicode-символы, не являющиеся изображениями карт.
И потом перетасуем нашу колоду, вызвав процедуру Shuffle для списка!
Shuffle - перемешиваем колоду карт
Данная программа иллюстрирует создание и перемешивание колоды карт. Для создания используется метод Cartesian, для перемешивания - внешняя функция Shuffle, которая пришла из стандартной библиотеки C++.
Обзор статей на youtube. Молодые старики
За последний месяц на youtube появилось не так много появилось статей с тегом PascalABC.NET.
Вот одна характерная: https://www.youtube.com/watch?v=tF6H2zQx1ts
Порекламируем канал молодого репетитора :)
Но что мы видим? Показ программ в среде PascalABC.NET на дремучем Паскале 70-х годов.
И - вывод - на скриншоте о том, что язык Паскаль - для людей за 40+.
Вывод. Полностью отсутствует попытка разобраться, что такое PascalABC.NET.
Метод 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 строк. Кто предложит - как, не используя последовательности?
EasyAstra - Astra Linux становится ближе - Записки IT специалиста
https://interface31.ru/tech_it/2023/08/easyastra-astra-linux-stanovitsya-blizhe.html
В статье помимо прочего рассказывается, как просто установить PascalABC.NET в Astra Linux
Гауссово (нормальное) распределение случайной величины
Данная программа иллюстрирует гауссово распределение случайной величины
pascal
uses GraphWPF;
function Gauss(M,Sigma: real): real;
begin
var u := 2*Random - 1;
var v := 2*Random - 1;
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.Новые стандартные функции ArrRandomReal и SeqRandomReal с параметром digits
В последней версии появились стандартные функции ArrRandomReal и SeqRandomReal с необязательным параметром digits.
Спасибо Александру Осипову за предложение!
#новое
