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

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

Открыть в Telegram

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

Больше
1 856
Подписчики
Нет данных24 часа
-147 дней
-2330 дней
Архив постов
Интерпретатор языка PAlpha на PascalABC.NET https://teletype.in/@pascalabcnet/PAlpha

Как получить случайную перестановку чисел? Записать их в массив - и перемешать!
Как получить случайную перестановку чисел? Записать их в массив - и перемешать!

Еще раз про переполнение - на этот раз вещественное А что будет если в предыдущей программе использовать вещественное произве
Еще раз про переполнение - на этот раз вещественное А что будет если в предыдущей программе использовать вещественное произведение вместо целого? Когда и как переполняются вещественные? Ответ - никогда! Мы видим, что после значения 10^308 сразу идёт бесконечность. Да да - бесконечность - это одно из значений вещественного типа. Никаких переполнений! Нужно понимать, что и в Питоне несмотря на всю его высокоуровневость - то же самое. Длинных вещественных там нет. Вещественные везде - одни! И бесконечность тоже - одна 😀

Учить ли школьников переполнению типов Да, разумеется. Мы учим на таком примере. На 11-й итерации наступает целочисленное пер
Учить ли школьников переполнению типов Да, разумеется. Мы учим на таком примере. На 11-й итерации наступает целочисленное переполнение, и вычисления становятся неправильными. В этот момент можно говорить, что ячейка типа integer имеет размер 4 байта, и есть максимальное целое, которое можно в неё поместить. На Питоне такой проблемы нет. С одной стороны, это хорошо - целые бесконечны, с другой - плохо - при переходе на более эффективные языки наступает непонимание ограничений компьютера.

Концепт визуализации структур данных для обучения Начинающие хорошо воспринимают графическое представление того, что происход
Концепт визуализации структур данных для обучения Начинающие хорошо воспринимают графическое представление того, что происходит в алгоритмах. Моя давняя идея - сделать модуль визуализации стандартных структур данных чтобы иллюстрировать им работу алгоритмов. В этой заметке показано, как можно выводить массивы с помощью методов расширения Draw и Drawln. Никаких параметров у этих методов нет - все отступы делаются автоматически. Разумеется, методы расширения и сопутствующие переменные следует поместить в модуль. `

Идеи из numpy - на PascalABC.NET numpy - замечательный модуль Python, позволяющий легко выполнять векторные действия. На Pasc
Идеи из numpy - на PascalABC.NET numpy - замечательный модуль Python, позволяющий легко выполнять векторные действия. На PascalABC.NET оказалось реализовать основную идею таких действий достаточно легко с помощью перегрузки операций. В итоге все операции с лямбдами заменились на более простые выражения. Например, вместо x.Select(y->Sin(y)).ToArray достаточно написать Sin(x), а для операции x + 2.5*y + 1.5 трудно найти аналог, реализуемый лямбдами и запросами

АНБ призывает IT-компании отказываться от C и C++ https://www.securitylab.ru/news/534754.php

❗️Статистика использования языков программирования на заключительном этапе всероссийской олимпиады по информатике. https://co
❗️Статистика использования языков программирования на заключительном этапе всероссийской олимпиады по информатике. https://codeforces.com/blog/entry/1917

Вывод типов обобщенной функции при вызове Компилятор делает огромную работу когда выводит типовые параметры обобщенной функци
Вывод типов обобщенной функции при вызове Компилятор делает огромную работу когда выводит типовые параметры обобщенной функции при её вызове. На скриншоте показана обобщенная функция Convert с двумя типовыми параметрами T и T1, преобразующая массив элементов одного типа в массив элементов другого типа с помощью указанной функции преобразования. На скриншоте приведен код функции и основной программы. Каждый вызов Convert генерирует новую версию функции с другими типовыми параметрами T и T1. Типы T и T1 выводятся по типам фактических параметров функции. Например, в вызове Convert(a, x -> x+0.5) компилятор видит, что первый параметр имеет тип array of integer, поэтому он выводит тип T=integer. Далее в лямбде x -> x+0.5 переменная x имеет тип T=integer, поэтому x+0.5 имеет тип T1=real. Технические сложности реализации такого вывода типов высоки. Именно поэтому в промышленном языке Delphi, прототипом которого когда-то являлся PascalABC.NET, до сих пор не появились ни лямбды ни обобщенные внешние функции

Мозаика для дошкольников https://teletype.in/@pascalabcnet/ph_jNxcpD_f

Операции с процедурами https://teletype.in/@pascalabcnet/zotFh_bBNzS

Сериализация в PascalABC.NET Как сохранить в файл сложную структуру данных с множеством связей? А затем восстановить из файла
Сериализация в PascalABC.NET Как сохранить в файл сложную структуру данных с множеством связей? А затем восстановить из файла с сохранением этих связей? Проблема в том, что связи - это ссылки на адреса памяти, а адрес памяти сохранить, а потом восстановить невозможно: адреса меняются при повторном запуске программы. На помощь приходит так называемая сериализация - сохранение в файл данных вместе со структурой в некотором специальном формате. Обратная операция восстановления всей структуры данных из файла называется десериализацией. В PascalABC.NET есть встроенные функции Serialize и Deserialize, выполняющие указанную задачу. В данном примере демонстрируется, как сериализовать и потом десериализовать односвязный список. Сериализуемый тип должен быть помечен атрибутом [Serializable]. Кроме этого, функция Deserialize возвращает тип Object, и его надо привести к нужному нам типу перед использованием. Обратим также внимание на то, что стандартная процедура Print выводит структуру односвязного списка.

Обновлённые скриншоты Уважаемые читатели канала! мы обновляем скриншоты на сайте: http://pascalabc.net/skrinshoti И объявляем конкурс на лучшие программы, которые будут иллюстрировать на скриншотах выразительность и простоту PascalABC.NET. Предлагайте в комментариях.

Пишем OneLiner для вывода графического изображения Вот такая программа в одну строчку выводит красивое графическое изображени
Пишем OneLiner для вывода графического изображения Вот такая программа в одну строчку выводит красивое графическое изображение:
##
uses GraphWPF;
(0..800).Cartesian(0..600)
  .ForEach(\(x,y)->begin
     SetPixel(x,y,RGB(x+y,2*x-y,y+3*x)) 
   end);

Основной приём здесь - моделирование двух вложенных циклов методом Cartesian с двумя диапазонами в качестве параметров и последующим применением метода Foreach с распаковкой параметров лямбды для более удобного их использования.

Как мы учим школьников языку запросов LINQ Язык запросов LINQ - это типизированный язык SQL, где на этапе компиляции проверяе
Как мы учим школьников языку запросов LINQ Язык запросов LINQ - это типизированный язык SQL, где на этапе компиляции проверяется соответствие типов. Почему-то считается, что для школьников эта технология сложная, ненужная, не учит алгоритмам, которые наше всё, а учит всего лишь названиям методов, что плохо и недостойно школьного образования. Мы ломаем стереотипы и говорим - учить школьников языку запросов просто, полезно, нужно обязательно, поскольку запросы и лямбда-выражения - это часть современных языков программирования. Мы используем стандартную базу данных учеников из модуля ABCDatabases. Для получения данных вызывается функция ЗаполнитьМассивУчеников, возвращающая массив учеников. На скриншоте показано решение задачи о фильтрации учеников с ростом выше 160 с последующей сортировкой по классу и фамилии и подготовкой к красивому выводу. Чтобы каждый ученик выводился на отдельной строчке, мы используем метод PrintLines с проекцией ученика на отформатированную строку вывода.

Как пояснить алгоритм быстрой сортировки Алгоритм быстрой сортировки - самый быстрый в среднем на произвольных данных. Чтобы
Как пояснить алгоритм быстрой сортировки Алгоритм быстрой сортировки - самый быстрый в среднем на произвольных данных. Чтобы пояснить его суть, мы можем использовать такие средства PascalABC.NET как методы фильтрации массивов, сложение массивов и кортежи. Суть алгоритма QuickSort проста: в массиве a выбирается некоторый опорный элемент - обычно первый. После этого оставшиеся элементы массива делятся на две части: те, которые меньше или равны опорному и те, которые больше опорного. К каждой части рекурсивно применяется функция QuickSort и затем полученные части сливаются: отсортированные элементы <= опорного опорный отсортированные элементы > опорного Всё. Разумеется, это - иллюстрация алгоритма. Она абсолютно неэффективна из-за создания большого количества отфильтрованных частей массива и их слияния в новый массив. Но для понимания алгоритма быстрой сортировки данный код прекрасно подходит.

Sin * Cos или функция на функции сидит и функцией погоняет https://teletype.in/@pascalabcnet/00BdPEc7EEd