PascalABC.NET официальный канал
Open in Telegram
Официальный канал языка и системы программирования PascalABC.NET
Show more1 857
Subscribers
-224 hours
-167 days
-2430 days
Posts Archive
Все файлы в определенной папке
Чтобы узнать имена всех файлов в определенной папке и в ее вложенных подпапках, следует вызвать функцию EnumerateAllFiles. Ее первый параметр - путь к корневой папке, второй параметр - шаблон имени файла. В примере на скриншоте выводятся все файлы из надпапки .. текущей папки. По-существу, это файлы всех программ, которые были опубликованы в нашем Телеграм-канале.
Наибольший общий делитель
Как найти наибольшее число, на которое делятся a и b?
Перед вами - самый короткий и один из самых быстрых алгоритмом, придуманный Евклидом в 3 веке до н.э.
Пишем интерпретатор на PascalABC.NET. Лексический анализатор. Часть 4. Проверка ошибок
В данной части рассматривается заключительная тема в построении лексического анализатора - контроль и вывод ошибок.
https://teletype.in/@pascalabcnet/Lex4
График функции
Самый быстрый способ нарисовать график функции - воспользоваться DrawGraph из модуля GraphWPF.
Вещественная арифметическая прогрессия
Как получить вещественную арифметическую прогрессию?
Целые в строке
Как преобразовать строку к массиву целых если известно, что в ней - только целые?
Метод ToIntegers нам поможет. Он часто используется для олимпиадных задач, где все исходные данные заданы в виде строк в файле
Обратите внимание, что в строке могут присутствовать любые пробельные символы - в том числе знаки табуляции и переходы на новую строку.
Пробельные символы
Символы с какими кодами считаются пробельными?
А вот они все!
Циклический сдвиг влево на k
Вот замечательный алгоритм циклического сдвига всех элементов массива влево на k элементов.
Кто предложит алгоритм, лучший по памяти и по времени?
Как поменять местами значения двух переменных, не используя промежуточную
Есть такой алгоритм - он приведен на скриншоте - он меняет местами две переменные. Он интересен тем, что не использует вспомогательную переменную.
Кто скажет, чем он плох?
#школьникам
#учителям
Пишем интерпретатор на PascalABC.NET. Лексический анализатор. Часть 3
В этой части мы приводим лексический анализатор для конкретного языка и представляем тестовую программу
https://teletype.in/@pascalabcnet/Lex3
Пишем интерпретатор на PascalABC.NET. Лексический анализатор. Часть 2
https://teletype.in/@pascalabcnet/Lex2
Пишем интерпретатор на PascalABC.NET. Лексический анализатор. Часть 1
https://teletype.in/@pascalabcnet/Lex1
Новые курсы по PascalABC.NET на Stepik от DL Club
На сайте pascalabc.net опубликованы новые курсы по PascalABC.NET на Stepik от центра олимпиадного программирования DL Club: https://pascalabc.net/stepikcourse. Это
1. PascalABC.NET для 1-6 классов. Знакомство
2. PascalABC.NET для 1-6 классов. Базовый курс
3. PascalABC.NET для 1-6 классов. Углубленный курс
Курсы содержат огромное количество уроков и интерактивных тестов и представляют значительную ценность для юных программистов.
#школьнику
#учителю
Пишем интерпретатор на PascalABC.NET. Прелюдия
Мы начинаем серию публикаций о том, как создать интерпретатор на PascalABC.NET.
Будут рассмотрены вопросы создания лексического анализатора, синтаксического анализатора (парсера), семантической проверки типов и способы создания различных по производительности интерпретаторов.
На скриншоте - один из конечных результатов - программа, вычисляющая сумму отрезка гармонического ряда. Количество итераций - 100 миллионов, время выполнения - 4 секунды.
Действия в полиморфном списке. Расширенная операция is
Список называется полиморфным если он состоит из объектов базового и производных классов. Если необходимо совершить некоторые действия над объектами списка определенного типа (например, изменить радиус всех кругов), то используется расширенная операция is: obj is Circle (var c) возвращает True если в obj - круг, и в этом случае инициализирует переменную c типа Circle, через которую и можно проводить действия с кругом.
DownCast и операция as
DownCast - приведение типа от предка к потомку. Оно используется, когда переменная имеет тип предка, но в ней гарантированно содержится объект потомка.
Один из способов - использование операции as.
В данном примере у переменной sh, хранящей круг, напрямую изменить радиус не получится - нужно приведение типа
Ускорение кортежного присваивания
Кортежное присваивание в последнем билде ускорено на 50%. Для двух переменных кортежное присваивание сравнялось по скорости с вызовом Swap.
#новое
Именованные аргументы в действии
В PascalABC.NET 3.9 появились именованные аргументы при вызове подпрограмм. Их удобно использовать когда подпрограмма содержит много параметров со значениями по умолчанию - некоторые из них можно менять, используя именованные аргументы.
#PascalABC
Рисование связного списка
Связные списки - это элементарные динамические структуры данных, связи элементов между данными могут меняться в процессе выполнения программы.
На скриншоте - простая программа рисования односвязного списка
Наследование от единого базового класса
В предыдущих примерах необходимо осознать, что ни окружность ни эллипс не являются разновидностями друг друга. Это не согласуется с обыденным представлением, но в данном случае оно только мешает.
Правильнее здесь вынести то общее, что есть у окружности и у эллипса, в единый базовый класс. Это - координаты некоторой точки (в данном случае центра. А радиусы добавлять отдельно и для эллипса и для окружности: поддерживать отличие радиусов в наследниках слишком дорого.
