PascalABC.NET официальный канал
Відкрити в Telegram
Официальный канал языка и системы программирования PascalABC.NET
Показати більше1 857
Підписники
+124 години
-127 днів
-2330 днів
Архів дописів
Обучение школьников классам
Классы - это способ объединить несколько переменных в единое целое. Классы - это просто, их может понять любой школьник.
На скрине - пример класса Ученик и создание двух учеников в программе.
Эта тематика всегда была неотъемлемой частью обучения программированию - начиная с ранних 70 х в книгах мы видим множество примеров.. Она - простая, позволяет моделировать в коде объекты реального мира и манипулировать ими в алгоритмах.
Но именно этому не учат в школе, это не используют на олимпиадах по программированию и это не нужно на ЕГЭ. Огромная часть, связанная с абстракцией данных, необходимая в реальных задачах, проходит мимо школьного образования.
Новая перегрузка функции TrueTable в модуле School
Начиная с версии 3.9.0.3379 от 04.11.2023 в библиотеку School добавлена еще одна перегрузка для функции TrueTable, позволяющая строить таблицы истинности для
n переменных. При ее вызове первым параметром указывается количество переменных, а вторым задается логическая функция, для которой строится таблица истинности. Если n < 6, можно по-прежнему пользоваться старыми функциями.Скобки в типе лямбд
Стало возможно писать скобки в типе лямбд для одного параметра. Это необходимо для конструкции (array of integer) -> integer.
Пример иллюстрирует применение к каждой строке матрицы функции, преобразующей строку в скаляр
#новое
PascalABC.NET- система невидимой автоматической проверки заданий LightPT
В PascalABC.NET встроена система автоматической проверки LightPT, которая позволяет легко составлять автоматически проверяемые задания. Данная система имеет ряд уникальных свойств, о которых рассказывается в настоящей статье.
https://teletype.in/@pascalabcnet/LightPT_First
Цепочки методов, заканчивающиеся вычислением одного значения
На скриншоте - программа для начинающих, иллюстрирующая основные методы с массивами, объединенные в цепочки
#начинающим
Подключаем Math.NET за две минуты
В PascalABC.NET можно создать проект и подключить к нему пакет NuGet. Для этого щелкаем правой мышью на проекте и выбираем Добавить сборку/Пакет NuGet.
На скриншоте - программа с использованием библиотеки матричной алгебры Math.NET с сайта этого проекта
Неизбежный вред некоторых конструкций
Когда язык достаточно богатый, многие конструкции схожи, и начинающие допускают ряд характерных устойчивых ошибок. Это неизбежно. Плохо то, что объяснять, почему это не работает или работает не так, - сложно. Проще сказать - не пиши так, а пиши так.
Только за один день - перлы учеников.
1. var a := ReadInteger путают с var a: integer; Говорят, что ReadInteger - это тип.
2. Массив из одного элемента - это [elem|. После этого все поголовно пишут |a|, делая массив элементом массива.
3. Прибавление элемента к массиву возможно, т.к. массив - это последовательность. Тем не менее пишут
a := a[0] + a { a[^1]
потому что так понятнее - и это не компилируется.
Но самые умные ломом доворачивают:
a := Arr(a[0] + a { a[^1])
И работает, но - это ужасно
Неизбежный вред некоторых конструкций
Когда язык достаточно богатый, многие конструкции схожи, и начинающие допускают ряд характерных устойчивых ошибок. Это неизбежно. Плохо то, что объяснять, почему это не работает или работает не так, - сложно. Проще сказать - не пиши так, а пиши так.
Только за один день - перлы учеников.
Обзор нововведений в C# 12
https://habr.com/ru/companies/pvs-studio/articles/768802/
На хабре опубликована статья с нововведениями в предстоящем C# 12.
Полноценные синонимы типов в Паскале были всегда, а вот в C# только появились.
Сокращенный синтаксис конструкторов в классах интересен.
Инициализация массивов и списков выражениями в [] - заманчивая перспектива. В PascalABC.NET тоже можно отказаться от синтаксиса || в пользу [ ], пересмотрев поддержку встроенных множеств.
Поскольку PascalABC.NET всегда равняется на передовые языки, в комментариях ждем идеи для нововведений
PascalABC.NET: операции с массивами
В PascalABC.NET определены операции с массивами: сложение массивов и умножение массива на целое n (сложение n копий). Это - эффективный способ создания и заполнения массивов.
Другой эффективный способ заполнения - с помощью функции Arr и диапазона также показан на слайде.
К массиву также можно прибавить элемент, но получится последовательность. Не делайте так.
Необходимо в этом случае к массиву добавлять одноэлементный массив
PascalABC.NET - суперпозиция функций
На скриншоте - описание обобщенной функции, возвращающей функцию, которая является суперпозицией двух функций, передаваемых как обобщенные параметры.
Ну собственно к этому нечего добавить.
PascalABC.NET: принцип локальности при объявлении переменных
Принцип локальности гласит: переменную нужно описывать как можно ближе к месту своего первого использования - лучше совмещать описание и инициализацию.
Это позволяет писать понятный код, не листая его вверх и вниз в поисках описаний.
Такой код затем легко оформляется в виде функций.
В старом Паскале, который как известно умер, переменные описывались в куче до блока основной программы (код 1). Это резко портило стиль написания кода начинающих - никогда потом в других языках они не будут с этим сталкиваться. Код 4 иллюстрирует создание функции по коду, в котором полностью соблюден принцип локальности.
Метод последовательностей ToDictionary в PascalABC.NET
Метод последовательностей ToDictionary позволяет делать из последовательности словарь.
На скриншоте приведены три ситуации использования: в первой последовательность выступает в роли ключей словаря, во второй - в роли значений и в третьей - разбивается на ключи и значения
Методика обучения массивам на PascalABC.NET
В Компьютерной школе мехмата (сайт sunschool.mmcs.sfedu.ru) принята следующая последовательность подтем по теме массивы
1. Описание, выделение памяти, ввод-вывод, простейшее заполнение (функция Arr)
2. Циклы
3. Ошибки с массивами
4. Алгоритмы нахождения суммы, подсчета количества, поиск по условию с break, максимумы-минимумы и их индексы,
5. Простейшие методы a.Sum, a.Average, a.Min, a.Max, a.IndexMin/IndexMax
6. Индексы элементов по условию - a.IndexOf и a.LastIndexOf
7. Понятие лямбда-функции. Заполнение с помощью ArrGen, в т.ч. формулой для i-того элемента и по предыдущему (арифм и геом прогрессии). Суммы в заполненных массивах
8. Преобразование элементов - алгоритмом и методом Transform с лямбдой.
9. Реверс массива и его части
10. Количество и поиск по условию, заданному лямбдой: a.Count, a.CountOf, a.FindIndex
11. Фильтрация a.Where и действия над отфильтрованными элементами (сумма, мин-макс). Цепочки методов: a.Where(x -> x.IsOdd).Sum.Print. Сравнение со старым стилем
12. Операции + и * над массивами
13. Срезы, индексация с конца.
14. Списки List как расширяемые массивы, добавление, вставка и удаление элементов
15. Сортировка Sort(a) и a.Order
Методика обучения массивам на PascalABC.NET
В Компьютерной школе мехмата (сайт sunschool.mmcs.sfedu.ru) принята следующая последовательность подтем по теме массивы
1. Описание, выделение памяти, ввод-вывод
2. Циклы
3. Ошибки с массивами
4. Алгоритмы нахождения суммы, подсчета количества, поиск по условию с break, максимумы-минимумы и их индексы,
5
6. Индексы элементов по условию - a.IndexOf и a.LastIndexOf
7.
Методика обучения массивам на PascalABC.NET
В Компьютерной школе мехмата (сайт sunschool.mmcs.sfedu.ru) принята следующая последовательность подтем по теме массивы
1. Описание, выделение памяти, ввод-вывод
2. Циклы
3. Алгоритмы нахождения суммы, подсчета количества, поиск по условию с break, максимумы-минимумы и их индексы.
4.
PascalABC.NET - новый стандартный метод последовательностей Flatten
В стандартном модуле PascalABC.NET появился метод Flatten, вытягивающий последовательность последовательностей в плоскую последовательность
#новое
PascalABC.NET: расстановка ферзей на шахматной доске мышью
Простая программа, позволяющая демонстрировать размещение восьми ферзей на шахматной доске.
Ферзей можно передвигать мышью.
#графика
PascalABC.NET: параметры по умолчанию и именованные аргументы
Параметры, имеющие значения по умолчанию, должны располагаться в конце списка параметров.
Подпрограмму можно вызывать, опуская параметры по умолчанию. Кроме того, при вызове для параметров по умолчанию можно использовать именованные аргументы и писать их в любом порядке
Модульное тестирование в PascalABC.NET
Чтобы протестировать разрабатываемые функции, в PascalABC.NET используется широко известная в мире .NET библиотека NUnit.
Напишите тестируемые функции в модуле, подключите модуль к тестирующей программе, напишите тестирующие процедуры, пометьте их атрибутами [Test] или [TestCase] и запустите автоматические тесты, нажав Ctrl-Shift-T.
