PascalABC.NET официальный канал
Open in Telegram
Официальный канал языка и системы программирования PascalABC.NET
Show more1 857
Subscribers
No data24 hours
-147 days
-2330 days
Posts Archive
Здоровье кода
Код должен быть здоровым - все с этим согласятся. Только здоровье кода каждый понимает по-своему.
В PascalABC.NET код считается больным, если в нем используются устаревшие в PascalABC.NET конструкции стандартного Паскаля. К их числу относятся:
* заголовок program
* переменные описанные вне основного блока begin-end
* процедура Read вместо функций ReadInteger и проч.
* устаревшие статические массивы
* устаревшие размерные строки
* использование Write вместо Print с разделителями-пробелами
* и - самое ужасное - описание переменной цикла for вне заголовка цикла.
За все такие ужасы программа штрафуется и её здоровье тает на глазах. При попытке компиляции такой программы - в правом нижнем углу отображается маленький темный прямоугольник с процентами оставшегося здоровья кода. Тем темнее, чем меньше здоровье
Рисуем фрактальную снежинку
Хочется больше снега.
Нарисуем фрактальную снежинку - авось поможет. Воспользуемся модулем Turtle.
uses Turtle,GraphWPF;
const scale = 2.85;
procedure SnowFlake(a: real);
begin
if a < 1 then exit;
SnowFlake(a/scale);
loop 6 do
begin
Down;
Forw(a);
SnowFlake(a/scale);
Up;
Turn(180);
Forw(a);
Turn(180);
Turn(60);
end;
end;
begin
Window.Title := 'Снежинка';
Pen.Color := Colors.Blue;
SnowFlake(200);
end.Хешировнаие и хеш-таблицы
https://teletype.in/@pascalabcnet/Hash
С наступившим 2023 годом!
Всех подписчиков нашего канала - поздравляем с наступившим 2023 годом.
2023 год будет непростым - это демонстрирует приведенная на скриншоте программа. Зато в его сомножителях - аж два простых числа 17!
С наступающим Новым годом!
Занятия со школьниками - всегда небольшой экспромт. Последняя тема перед Новым годом - циклы while и repeat, создание бесконечного цикла.
Вместо скучных сумм и арифметических прогрессий - рисуем новогоднюю ёлку! Ветки рисуем секторами Pie, украшения - дугами Arc. А лампочки в гирлянде мерцают в бесконечном цикле
repeat .. until False.
begin
Window.Title := 'С Новым годом!';
Pie(400, 300, 250, -45, -135, Colors.Green);
Pie(400, 200, 200, -45, -135, Colors.Green);
Pie(400, 100, 150, -45, -135, Colors.Green);
repeat
Circle(300, 450, 25, RandomColor);
Circle(450, 350, 20, RandomColor);
Circle(360, 290, 25, RandomColor);
Circle(480, 480, 25, RandomColor);
Circle(350, 200, 20, RandomColor);
Rectangle(350,400,50,30, Colors.LightSeaGreen);
Arc(400,240,250,-55,-125,Colors.Yellow);
Sleep(200);
until False;
end.
Вот и закрепили тему! Спасибо Пучкину Максиму Валентиновичу за идею!
Всех - с наступающим Новым годом!Ввод целых и языки программирования
Казалось бы - простая вещь - прочитать 2 целых значения из потока ввода и ничего более. Однако сделать это просто можно не во всех языках программирования.
PascalABC.NET
Здесь всё просто. Можно в любом Паскале:
var a,b: integer; Read(a,b);И в PascalABC.NET:
var (a,b) := ReadInteger2;Python Нельзя. То есть, предлагается конечно:
a,b = map(int,input().split())Но во-первых, объяснять начинающим, что такое split(), int и особенно map на первом занятии - убить влечение к программированию. Во-вторых, ввод трех целых или одного целого приводит к ошибке. В третьих, код неэквивалентный - считывается строка целиком, а задача требует считать ровно два целых и более ничего. C# Никак. То есть, так же как и в Python:
var ss = Console.ReadLine().Split(); var a = int.Parse(ss[0]); var b = int.Parse(ss[1]);со всемы вытекающими проблемами - ввод одного целого в строке роняет программу и это не решает поставленную задачу C++
int i,j; cin >> i >> j;Всё отлично. Java
Scanner in = new Scanner(System.in); int a = in.nextInt(); int b = in.nextInt();Всё неплохо.
Стек и очередь. Стрим Александра Богданова
https://www.youtube.com/watch?v=BBdMoZ_mpLc
Условная операция
Условная операция if then else аналогична условному оператору, но может использоваться в выражении. Это позволяет сократить запись для простых вычислений до одной строки.
В программе вы видите классический алгоритм поиска минимума двух чисел a и b, записанный с использованием условного оператора. Он требует предварительного описания переменной min с указанием её типа.
Для сравнения тот же алгоритм, записанный с помощью условной операции, требует всего одну строку кода и позволяет в этой строке описать переменную и не указывать её тип - он автоматически выводится.
Управление объектом с помощью клавиатуры
Данный пример иллюстрирует заготовку для 2D-игр с видом сверху и игровым объектом, управляемым с помощью клавиатуры. Используется наиболее плавный вид анимации - анимация на основе кадра.
Графический модуль WPFObjects реализует векторные двумерные объекты с большим количеством свойств и методов.
Основной используемый метод здесь -
c.MoveTime(dt) - перемещает 2D-объект в направлении Direction c единичной скоростью за время dt.`Метод Indices для матриц
С помощью метода Indices для матриц можно найти индексы всех ее элементов, удовлетворяющих некоторому условию, и вернуть их в виде последовательности. После этого в цикле можно изменить элементы по указанным индексам.
Наиболее часто встречающиеся слова в романе "Война и мир"
Решение данной задачи с помощью словарей и методов последовательностей весьма просто. Первый запрос в переменной words накапливает последовательность слов указанного текста, второй запрос собственно формирует частотный словарь, а третий запрос подготавливает данные к выводу и выводит их.
Наиболее интересный здесь - метод SelectMany, превращающий каждый элемент последовательности в последовательность и затем сливающий эти последовательности в единую плоскую последовательность.
Параметрическое уравнение отрезка в Graph3D
В Graph3D удобно визуализировать кривые, заданные параметрически. Одной из простейших таких кривых является отрезок между точками p1 и p2 - его параметрическое уравнение имеет вид:
t * p1 + (1-t) * p2где t пробегает значения от 0 до 1. Визуализируем этот отрезок функцией Segment3D и заставим бесконечно осциллировать между его концами сферу. Для этого к анимации сферы добавим модификаторы AutoReverse и Forever. Результирующая программа изображена на скриншоте.
Решето Эратосфкна
Решето Эратосфкна - классический алгоритм, позволяющий находить все простые числа, меньшие некоторого числа.
Для реализации используется множество HashSet, которое вначале заполняется всеми кандидатами 2..n. После чего вначале вычеркиваются все кандидаты, кратные 2 (кроме 2), затем кратные 3 (кроме 3), и т.д.
Всё что осталось после вычеркивания чисел вплоть до Sqrt(n), - простые
Метод Pairwise
Метод Pairwise для последовательности возвращает последовательность пар рядом стоящих элементов. Количество пар будет естественно на 1 меньше количества элементов.
Зачем такой метод может понадобиться? Например, чтобы сравнить соседние и выделить среди них один по какому-нибудь признаку.
На слайде решается задача о том, сколько в массиве элементов, меньших своего правого соседа. Вначале вызывается Pairwise, затем пары фильтруются по условию "левый меньше правого" и затем считается количество таких пар.
Что интересно - с помощью Println можно выводить в цепочку все промежуточные последовательности и конечный результат
Сумма вещественных в строке
Как выделить в строке только вещественные и вычислить их сумму?
Эффективнее всего воспользоваться статическим методом TryParse типа real.
На скриншоте - пример использования. спецификация типа переменной w необязательна, но улучшает восприятие алгоритма
Веб-скрейпинг на PascalABC.NET
https://teletype.in/@pascalabcnet/Web_scraping
