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

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

الذهاب إلى القناة على Telegram

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

إظهار المزيد
1 858
المشتركون
-224 ساعات
-137 أيام
-2430 أيام
أرشيف المشاركات
Очередная статья на Хабре - Нужна ли айтишнику вышка Отвлечемся от программирования, языковых конструкций, вопросов ЕГЭ и проч. На самом известном ИТ-ресурсе России - очередная статья "Нужна ли айтишнику вышка?". С кучей комментариев и высоким рейтингом автора. https://habr.com/ru/articles/813611/ И на всякий случай - днем позже - повинуясь инстинкту - другая: "Вышка не нужна. В чём причина?" https://habr.com/ru/articles/813743/ С разницей в один день. Вчера и позавчера. Что движет этими людьми? Почему они конденсируются вокруг самого популярного ИТ-ресурса в России? Связано ли это с высокими зарплатами в области ИТ? Или с чем вообще?

Задачи на олимпиадном сайте acmp.ru Сайт олимпиадного программирования https://acmp.ru/ содержит огромное количество олимпиад
Задачи на олимпиадном сайте acmp.ru Сайт олимпиадного программирования https://acmp.ru/ содержит огромное количество олимпиадных задач разного уровня. Он интересен тем, что для каждой задачи лучшие попытки определяет по длине кода. И нетрудно видеть, что во многих задачах PascalABC.NET - первый. На скриншоте - лучшие попытки по задаче 19 "Ферзь, ладья и конь". Как видим, большинство решений на Python, но решение на PascalABC.NET - на первом месте. Засилье Питона объясняется его популярностью. Напомним, одним из главных аргументов его использования является понятный и компактный код. На PascalABC.NET код многих задач не менее компактен. Просто не все умеют его готовить. Но есть куда стремиться!

Задачи на массивы - прагматичный подход В данном тексте без воды описывается, какие средства надо применять при решении простейших задач на массивы https://teletype.in/@pascalabcnet/ArrPragmatic #начинающим

Повороты 3D объектов вокруг локальных и глобальных осей В данном примере показано, как повернуть объект дважды вокруг разных
Повороты 3D объектов вокруг локальных и глобальных осей В данном примере показано, как повернуть объект дважды вокруг разных осей. Сложность заключается в том, что Rotate осуществляет поворот вокруг локальной оси объекта, поэтому следующий поворот лучше делать вокруг глобальной оси OZ, используя RotateAtAbsolute. Ось, вокруг которой выполняется второй поворот, показана трёхмерным вектором. #графика

Строим замок или 3D-графика для школьников Как научить школьников 3D-графике и анимации? Используем модуль Graph3D в PascalAB
Строим замок или 3D-графика для школьников Как научить школьников 3D-графике и анимации? Используем модуль Graph3D в PascalABC.NET.
uses Graph3D;

begin
  Camera.LookDirection := V3D(-2,-18,-21);
  var b := Box(5.5,-4.5,2,1,1,4,Colors.Orange);
  b.AddChild(Cylinder(0,0,2,1,0.4,Colors.Red));
  b.AddChild(Cone(0,0,3,1.5,0.4,Colors.Gold));
  var Wall := Group(b);
  for var i:=1 to 11 do
    Wall.AddChild(b.Clone.MoveByX(-i));
  var Castle := Group(Wall);
  for var i:=1 to 3 do
    Castle.AddChild(Wall.Clone.RotateAt(OrtZ,90*i,Origin));
  View3D.HideAll;
  Castle.AnimRotate(OrtZ,180,5).AutoReverse.Forever.Begin;
end.
Всего 15 строк кода - и замок готов. Здесь - перспективная проекция, 3D-примитивы Бокс, Цилиндр и Конус, дочерние элементы, группировка и клонирование, трёхмерные векторы и орты осей, перемещения на вектор и вращения вокруг осей, камера и направление взгляда, а также алгоритмическая анимация и её модификаторы AutoReverse и Forever.

Функция TypeName Стандартная функция TypeName выводит тип любого выражения в программе на PascalABC.NET. При этом в отличие о
Функция TypeName Стандартная функция TypeName выводит тип любого выражения в программе на PascalABC.NET. При этом в отличие от метода .GetType используются обозначения типов PascalABC.NET. В частности, для типа последовательности возвращается sequence of.

Параллельное выполнение задач С помощью класса Task можно запустить несколько задач одновременно. Выражение t1.Result+t2.Resu
Параллельное выполнение задач С помощью класса Task можно запустить несколько задач одновременно. Выражение t1.Result+t2.Result+t3.Result будет вычислено только тогда когда все задачи завершатся. На скриншоте хорошо видно, что ускорение по сравнению с последовательным выполнением - в три раза, что означает, что каждая задача выполняется примерно за одно и то же время. #параллельность

Алгоритм генерации случайного лабиринта В стандартные примеры PascalABC.NET входит программа MazeGen.pas генерации случайного
Алгоритм генерации случайного лабиринта В стандартные примеры PascalABC.NET входит программа MazeGen.pas генерации случайного лабиринта. Алгоритм там неоптимальный, лабиринт получается разреженный. В комментариях ждем идеи хороших алгоритмов или ссылки на них

Метод расширения OfType С помощью метода расширения OfType в последовательности разнотипных элементов можно отфильтровать эле
Метод расширения OfType С помощью метода расширения OfType в последовательности разнотипных элементов можно отфильтровать элементы только заданного типа, после чего применить к ним специфическую операцию.

PascalABC.NET в английской Википедии PascalABC.NET представлен в английской Википедии https://en.wikipedia.org/wiki/PascalABC.NET Весьма обстоятельная статья с современными примерами, хорошими ссылками на литературные источники, среди которых - книга Александра Осипова "Введение в современное программирование", несколько педагогических статей Дженджера В.О. и др. в научных журналах, несколько научных статей в журналах вычислительной математики, а также несколько качественных ссылок на YouTube-ролики.

Ускорение вычислений за счет правильного размещения в памяти Перед нами - три эквивалентных алгоритма умножения матриц. Во вт
Ускорение вычислений за счет правильного размещения в памяти Перед нами - три эквивалентных алгоритма умножения матриц. Во втором и третьем случае матрица b транспонируется, в результате данные в самом внутреннем цикле располагаются непрерывно в памяти, что ускоряет вычисления за счет того что рядом стоящие данные попадают в кеш процессора. Третий пример использует массивы массивов, которые оказываются здесь эффективнее матриц. Результаты для случайной матрицы размера n = 1000:
алгоритм 1 - 2.7 с
алгоритм 2 - 1.6 с
алгоритм 3 - 0.9 с

Анимация на основе кадра Именно анимация на основе кадра - лежит в основе игровых движков. Вначале кадр формируется и затем о
Анимация на основе кадра Именно анимация на основе кадра - лежит в основе игровых движков. Вначале кадр формируется и затем он перерисовывается. Перерисовку имеет смысл проводить с частотой обновления экрана - на обычных мониторах это 60 Гц. В GraphWPF имеется соответствующее событие onDrawFrame, которое вызывается всякий раз когда пришла пора перерисовать экран. Параметр dt здесь - время с момента предыдущей перерисовки. Это позволяет задавать перемещение объектов в физических терминах. На скриншоте - программа движения двух кругов со скоростями 300 и 200 пикселей в секунду. Перерисовка - плавная - без мерцаний и подёргиваний. # графика # анимация

Сравнение скорости программ с Where + Select и циклами Программа, использующая наиболее частые методы Where и Select работает
Сравнение скорости программ с Where + Select и циклами Программа, использующая наиболее частые методы Where и Select работает примерно в 2 раза медленнее такой же программы, использующей циклы. Но она короче, понятнее и модифицируемее. #производительность

Сортировка деревом На скрине вы видите одну из самых быстрых сортировок - сортировку с помощью бинарного дерева поиска. Её ас
Сортировка деревом На скрине вы видите одну из самых быстрых сортировок - сортировку с помощью бинарного дерева поиска. Её асимптотическая сложность в среднем - O(n log(n)) - такая же как и у быстрой сортировки Хоара. Просто добавляем элементы в дерево: если элемент меньше корня, то добавляем в левое поддерево, если больше значения в корне - добавляем в правое поддерево. И потом печатаем дерево - элементы в нем уже отсортированы.

Сортировка деревом На скрине вы видите одну из самых быстрых сортировок - сортировку с помощью бинарного дерева поиска. Её ас
Сортировка деревом На скрине вы видите одну из самых быстрых сортировок - сортировку с помощью бинарного дерева поиска. Её асимптотическая сложность в среднем - O(n log(n)) - такая же как и у быстрой сортировки Хоара. Просто добавляем элементы в дерево: если элемент меньше корня, то добавляем в левое поддерево, если больше значения в корне - добавляем в правое поддерево. И потом печатаем дерево - элементы в нем уже отсортированы.

Исключение StackOverflow При рекурсивном зацикливании стек быстро переполняется, и мы получаем исключение StackOverflow, кото
Исключение StackOverflow При рекурсивном зацикливании стек быстро переполняется, и мы получаем исключение StackOverflow, которое невозможно обработать. Память под стек выделяется в момент запуска программы и не может быть изменена. Как следует из эксперимента, в простом рекурсивном вызове с одним параметром достаточно всего лишь 16000 рекурсивных вызовов - и стек переполнится. Поэтому в рекурсивных алгоритмах следует отдавать предпочтение с малой глубиной рекурсии. #рекурсия

CreateVisual и DrawOnVisual - способ нарисовать объект и потом перерисовать его, заменив на другое графическое представление.
CreateVisual и DrawOnVisual - способ нарисовать объект и потом перерисовать его, заменив на другое графическое представление. Не надо объект стирать, поскольку в WPF - нарисованные объекты - это не пиксели на экране, а именно объекты #графика

WPFObjects - создание заготовки игры На скриншоте - заготовка игры, в которой игрок управляется клавиатурой. Здесь используют
WPFObjects - создание заготовки игры На скриншоте - заготовка игры, в которой игрок управляется клавиатурой. Здесь используются свойства WPF-объектов Direction и Velocity. Анимация на основе кадра позволяет перерисовывать экран в нужный момент когда будет полностью прорисован предыдущий кадр. Параметр dt позволяет определить время между двумя последовательными прорисовками кадра, метод MoveTime(dt) - переместить объект на нужное расстояние при заданной скорости. Обработчики OnReyDown и OnKeyUp позволяют эффективно начинать и заканчивать перемещение.

Задача о ханойских башнях Задача о ханойских башнях - пример, показывающий мощность и краткость использования рекурсии. Поста
Задача о ханойских башнях Задача о ханойских башнях - пример, показывающий мощность и краткость использования рекурсии. Постановка задачи - на слайде. Чтобы переложить пирамиду из n дисков с 1 стержня на 3, перекладываем вначале рекурсивно пирамиду из n-1 диска с 1 стержня на 2, затем перекладываем самый большой диск с 1 на 3 и наконец перекладываем пирамиду их n-1 диска со 2 стержня на 3. Бинго! Обожаю эту задачу! Мои коллеги из Бостона, зная это, привезли мне в подарок эту головоломку - решаю её прямо сейчас!

Пост годичной давности. Вновь у студентов рассматриваем рекурсию. Вновь беру с собой эту замечательную головоломку :)