PascalABC.NET официальный канал
رفتن به کانال در Telegram
Официальный канал языка и системы программирования PascalABC.NET
نمایش بیشتر1 858
مشترکین
-224 ساعت
-137 روز
-2430 روز
آرشیو پست ها
Принцип локальности при описании переменных
Локальность означает близость описания переменной к месту своего использования.
Все переменные должны описываться в месте первого присваивания, отдельное описание не нужно. В большинстве случаев типы указывать не следует - они выводятся автоматически.
Такой стиль позволяет легко оформлять отдельные участки кода как независимые функции.
#начинающим
О здоровье кода
В программах на Паскале, встреченных на просторах интернета, до сих пор встречается базовый устаревший Паскаль. Именно из-за его скудных возможностей в школах стали переходить на другие языки.
В PascalABC.NET использован метод мягкой силы - после компиляции устаревшей программы в правом нижнем углу появляется прямоугольник с процентами плохого здоровья кода. Кликнув на нем мышью, мы получим всю информацию, почему данный код плохой.
Заметим, что те, кто программируют в новом стиле, никогда этого прямоугольника не увидят.
Очень интересно, как каким ухищрениям прибегают некоторые ютуберы чтобы скрыть свой плохой код: они обрезают нижнюю строку или закрывают эту область своим говорящим лицом.
Инвертирование словаря
Свойства Keys и Values позволяют вырезать из словаря только ключи или только значения. Это делает возможным легко инвертировать словарь, где ключи становятся значениями и наоборот.
Задача, предлагаемая школьникам в рамках изучения темы Словари
Это - одна из задач, иллюстрирующая суть словарей.
В комментариях приветствуются другие задачи на словари.
В качестве идей рассматриваются три направления:
- словарь как набор соответствий (страна - столица)
- словарь как набор пар (ключ, число повторений) - как в данной задаче
- словарь как мультинабор (ключ, список) или (ключ, множество)
Рекурсивная задача дла исполнителя Робот
Задача. Требуется закрасить клетку у правой стены и вернуться в исходную клетку.
Маленькая деталь. Нельзя использовать циклы, переменные и присваивание.
Рекурсия нам в помощь.
Если мы уже у правой стены, то просто красим и задача решена.
Иначе сводим задачу к такой же, но меньшего размера:
- делаем шаг вправо
- решаем задачу
- возвращаемся влево
#рекурсия
Создание односвязного списка
Данная программа иллюстрирует быстрый путь создания односвязного списка. Используются автоклассы, callback-вызовы и свойство процедуры Print выводить структурированные данные.
Исключение дублей в последовательности массивов
Для составных типов приходится вызывать Distinct с компаратором, который представляет собой класс - наследник IEqualityComparer.
В новом NET есть DistinctBy с проекцией на ключ, но он не помогает в данной ситуации
Все математические символы в Unicode
Используем Unicode categories в регулярных выражениях
Процедуры с выходными параметрами или функции, возвращающие кортежи
На слайде представлены все возможные варианты оформления задачи о вычислении двух значений в подпрограмме. Результат можно возвращать через var-параметры процедур и как кортеж из функции (последнее дольше).
Показан также короткий синтаксис описания процедур и функций.
#начинающим
Объединение словарей
Задача. Объединить словари количеств, просуммировав значения с одинаковыми ключами.
Решение - на скриншоте
Задача - отсюда
Хорошо видно, что в Питоне инициализация словарей константными значениями сделана лучше.
Операции ?. и ??
Операции ?. и ?? первым ввёл язык Kotlin для лучшей обработки ошибок с нулевыми ссылками.
Пример на скрине иллюстрирует эту возможность - если p = nil, то p.Age упадет с исключением, а p?.Age вернет объект Nullable-типа integer?, который может хранить либо целое либо nil.
Операция ?? работает так: если левый операнд - не nil, то он и возвращается, в противном случае возвращается правый операнд.
Поиск дубликатов слов с помощью регулярных выражений
С помощью регулярных выражений легко найти слова, по ошибке набранные дважды.
Здесь используются группы и нумерованные обратные ссылки на группы.
Паттерн \w+ обозначает слово, а паттерн \s+ - ненулевое количество пробельных символов
Исполнитель Чертежник и процедуры с параметрами
Исполнитель Чертежник - настоящий кладезь для изучения школьниками процедур с параметрами
Просто с визуальным подкреплением можно создавать процедуры с параметрами на базе уже созданных процедур с параметрами, помещать общеупотребительные процедуры в модуль.
Не забываем, что все задания для Чертежника проверяются, ошибки времени выполнения визуализируются.
P.S. Почему-то в школьном программировании очень любят исполнителя Черепаху, а Чертежник есть лишь в запрещенных уже великолепных учебниках Кушниренко.
Школьники изучают Python. Урок 5
Задача. Сформировать строку abcdefghijklmnopqrstuvwxyz
Решение на Python:
s = "".join(chr(ord('a')+i) for i in range(26))
print(s)
Аналогичное решение на PascalABC.NET:
##
var s := ('a'..'z').JoinToString;
s.PrintlnМодуль WPF - парсинг оконных элементов из XAML-строки
В модуле WPF появилась возможность создавать оконные элементы, загружая их из XAML-строки. XAML-строку удобно задавать, используя синтаксис многострочных строковых литералов.
Чтобы затем воспользоваться дочерними элементами в программе, необходимо сопоставить их переменным и затем привязать обработчики.
На скриншоте - программа, иллюстрирующая создание StackPanel с двумя оконными элементами, сопоставление дочерним элементам переменных программы и затем привязка обработчика, меняющего текст в TextBlockе в зависимости от текста в TextBox.
#новое
Модуль WPF - парсинг оконных элементов из строки
В модуле WPF имеется функция Зф
Многострочные строковые литералы '''
В PascalABC.NET появились Multiline строковые литералы, которые недавно появились в таких языках как C# 11, Delphi 12, Java 22.
Строки с открывающими и закрывающими кавычками не должны содержать непробельных символов.
Во всех строках игнорируется отступ, равный отступу последней строки.
#новое
Как найти число Pi методом Монте - Карло
Данный метод не очень точный и долгий. В квадрат [0,1]x[0,1] бросается много случайных точек и определяется, какая их часть отстоит от начала координат менее чем на 1.
Данное число близко к Pi/4 - тем ближе чем больше n. Но сходимость медленная. На 100 миллионах компьютер нервно замирает.
Как найти число Pi методом Монте - Карло
Данный метод не очень точный и долгий. В квадрат [0,1]x[0,1] бросается много случайных точек и определяется, какая их часть отстоит от начала координат менее чем на 1.
Данное число близко к Pi/4 - тем ближе чем больше n. Но сходимость медленная. На 100 миллионах компьютер нервно замирает.
Комбинированные действия
Процедуры можно присваивать переменным. Такие переменные хранят действия в отличие от данных и называются процедурными переменными.
В PascalABC.NET имеется возможность создавать комбинированные действия. Сумма действие - это действие, которое состоит в последовательном выполнении этих действий. Произведение действия на число n - это повтор действия n раз.
