PascalABC.NET официальный канал
1.92K subscribers
515 photos
1 video
9 files
364 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Типичные ошибки с типизацией

В программах на PascalABC.NET соответствие типов проверяется компилятором. Рассмотрим пару примеров, в которых начинающие совершают ошибки неправильного использования типов, Явное указание типа нам поможет!

#начинающим
#учителям
Sort vs Order

Sort и Order серьёзно отличаются по производительности. Order - в 20 раз медленнее. Причина - Order использует лямбду и новый массив.
Новая книга Валерия Рубанцева для начинающих

Известный популяризатор и автор многочисленных книг по программированию для начинающих Валерий Рубанцев выпустил новую книгу "Программирование на языке PascalABC.NET. Начальный уровень". В книге - более 500 страниц - и это только первая часть!

https://disk.yandex.ru/i/fd56h1-dogXtmg

Исходники программ:
https://disk.yandex.ru/d/Jru7A9UiUPzNDA

#начинающим
Раскрываем алгоритм Where в задаче о поиске двух максимумов

Решение с Where - понятное, но производительность можно значительно увеличить, записав алгоритм, сочетающий фильтрацию и поиск минимума

На скриншоте - увеличение производительности в 4 раза.
Константы типа int64

Литеральная константа имеет либо тип integer либо тип int64 в зависимости от значения
Начало занятий в компьютерной школе мехмата ЮФУ

Одна из крупнейших очных компьютерных школ страны - компьютерная школа мехмата ЮФУ - начала свою работу. Сегодня её собрания посетило более 500 школьников. На направлении Юный программист будет заниматься около 400 учеников. Все они начинают изучение программирования с языка PascalABC.NET, который возник и успешно развивается во многом благодаря Компьютерной школе мехмата ЮФУ.

Здесь - самые современные методики обучения программированию, здесь - самые современные языковые конструкции, здесь - первый и основной язык программирования - PascalABC.NET, разработанный в России, на мехмате ЮФУ, для российских школьников, собравший воедино языковые и библиотечные конструкции Top 10 наиболее популярных сегодня языков программирования - от С++ и Python - до Kotlin и C#.
Проверка утверждений Assert. Предусловия

Assert - утверждение, которое проверяется в любом месте программы во время ее отладки. Если утверждение не выполняется, то сразу возникает окно с ошибкой в утверждении.

Использование Assert - хороший способ для начинающих контролировать правильность исходных данных
PascalABC.NET vs старый Паскаль

На скриншоте - простейшая программа со вводом, вычислениями и выводом. По сравнению со старым Паскалем в PascalABC.NET используются современные конструкции и концепции: автовывод типов, внутриблочные описания переменных, функции ввода с приглашением к вводу, кортежи и распаковка кортежей в переменные.

Начинающим рекомендуется только новый стиль.
Разделители цифр в числовых константах PascalABC.NET

В PascalABC.NET появились разделители _ в числовых константах. Их использование позволяет не запутаться в количестве разрядов в числах с большим количеством цифр.

#новое
Пополнение в библиотеке School

Начиная с версии 3.9.0.3352 от 13.09.2023 добавлена функция BinFormat, позволяющая переводить целое десятичное число (в том числе, типа BigInteger) в двоичную систему счисления и возвращать отформатированный результат.

Вызов функции: BinFormat(ДесятичноеЧисло, Длина_в_байтах, Разделитель_байтов). Второй и третий параметры являются необязательными. По умолчанию Длина_в_байтах равна нулю (нужное количество байт выбирается автоматически), а в качестве значения параметра Разделитель_байтов используется пробел. Если полученное значение не помещается в заданное параметром количество байт, это количество будет увеличено до необходимого. Задавая в качестве разделителя пустую строку, получаем результат без разделителей, но все равно дополненный нулями слева до длины, кратной восьми.

## uses School;
Println(BinFormat(13)); // 00001101
Println(BinFormat(12345678)); // 10111100 01100001 01001110
Println(BinFormat(12345678, 4)); // 00000000 10111100 01100001 01001110
Println(BinFormat(12345678, 2, '.')); // 10111100.01100001.01001110
Println(BinFormat(0, 2)); // 00000000 00000000
Println(BinFormat(12453674856bi)); // 00000010 11100110 01001011 11111111 01101000
Функция ReadSeqInteger для считывания последовательности целых

Функция ReadSeqInteger позволяет считать n целых в отдельную переменную и тем самым не смешивать ввод и вычисления.

Другое её положительное качество - данные не считываются в память одновременно, а считываются по одному циклом foreach по мере необходимости. Такое свойство последовательности называется ленивостью.

#начинающим
Ненависть к break

Каждый год в сентябре в аудитории студентов 1 курса я задаю один и тот же вопрос: не запрещали ли вам в школе пользоваться оператором break?

В основном - нет - всё нормально. Но всегда находятся 5-6 студентов, которые рассказывают ужасные истории. Итак, их ответы - почему нельзя пользоваться оператором break по мнению некоторых школьных учителей:

1. Это развивает плохое алгоритмическое мышление
2. Решение с while - намного лучше - посмотрите - там нет этого нехорошего break - и это хорошо!
3. Решение с break свидетельствует о скудности алгоритмического ума (!)
4. Будете использовать break - поставлю двойку!

Итак, почему решение с break - хорошее:
- даёт естественный способ выхода из цикла
- легко масштабируется на последовательности

Почему решение с while - плохое:
- приходится поддерживать счетчик повторений самому
- сложное условие, в котором можно запутаться в нескольких местах (or вместо and, i<n и т.д.)
- труднее читать - тебе и членам твоей команды
Перегрузка операций на PascalABC.NET? Легко!

На скриншоте - программа с матрично-векторными вычислениями. Матрица представлена как массив массивов для удобства.

Все операции реализованы в одну строку, реализация операции умножения матрицы на вектор - 24 символа.
Forwarded from Max xiM
Калькулятор сетей TCP/IP

Калькулятор сетей TCP/IP доступен в PascalАВС.NЕТ версии не ниже 3.9.0.3360 от 21.09.2023 в модуле School. Он дает возможность в наглядном виде получить основную информацию о подсетях TCP/IP, задав адрес сети и маску подсети.

https://teletype.in/@ralex061/k_YLcCFPfVE
https://teletype.in/@ralex061/zEIHv4Lo78_
В библиотеке School начиная с версии PascalАВС.NЕТ 3.9.0.3360 от 21.09.23 доступен калькулятор сетей TCP/IP, реализованный на базе двух классов: собственно калькулятора CalcIP и класса 32-битных адресов Addr32, обеспечивающего работу калькулятора, а также предоставляющего удобную работу с адресами IPv4 при самостоятельном использовании.
https://teletype.in/@ralex061/Boz5Hp4tqox
"В некоторой организации сетевому администратору поручили организовать на базе выданного организации ip-адреса 89.16.105.0/24 три подсети емкостью 120, 58 и 15 узлов. С этой целью ему нужно подготовить задание для инженеров и указать в нем диапазоны адресов для каждой подсети..."
Неинициализированная переменная Result

Инициализируйте переменную Result по всем ветвям функции. Иначе она вернет непредсказуемое значение.