PascalABC.NET официальный канал
前往频道在 Telegram
1 856
订阅者
-124 小时
-97 天
-2430 天
帖子存档
Переменная с именем Sin
В PascalABC.NET можно переопределять имена, которые определены в модулях. Поскольку модуль является пространством имен, а мы переопределяем то же имя в другом пространстве имен, - это возможно и абсолютно правильно.
Это - большое преимущество языка Object Pascal перед такими языками как C++, в котором глобальные переменные, определенные в другом файле попадают в то же пространство имен, что и в текущем, что вызывает ошибку компиляции.
В PascalABC.NET можно, например, определить переменную с именем
Sin, совпадающим с именем стандартной функции в системном модуле. При этом новое имя Sin перекроет старое. Чтобы вернуться к старому, придётся упомянуть перед ним его имя пространства имен, которое совпадает с именем модуля. Поскольку Sin определен в модуле PABCSystem, то для обращения к стандартному Sin следует писать PABCSystem.Sin.Фракталы: снежинка Коха
https://teletype.in/@pascalabcnet/KochSnowflake
Легковесные пространства имен
https://teletype.in/@pascalabcnet/Lightweight_namespaces
Swap или кортежи для обмена значений двух переменных
Если необходимо поменять значения двух переменных - что следует использовать - множественное присваивание или стандартную процедуру Swap? Или может быть код с использованием третьей переменной будет самым быстрым?
Проведем замеры производительности.
Приведенный тест свидетельствует, что процедура Swap работает столь же производительно, что и использование алгоритма с третьей переменной прямо в коде (за счет inline-встраивания, проводимого виртуальной машиной).
А вот красивый с виду код с множественным присваиванием и использованием кортежей работает более чем в 5 раз медленнее
Примите поздравления со Всемирным днем учителя! Здоровья вам, сил, терпения, уважения окружаюших и достойной оплаты вашего нелёгкого, но такого нужного труда!
Ненависть к оператору break
Достаточно часто приходится слышать от студентов, что еще во время обучения в школе им запрещали пользоваться оператором break. Причем, недобросовестные преподаватели не удосуживались объяснять, почему же собственно нельзя - просто говорили, что использование break - грубейшая ошибка. На резонный вопрос, почему же всё-таки оператор break есть в языке раз он плохой, ответ был прост: "Будешь использовать - поставлю двойку".
Эта история - характерный пример того, как устойчиво держатся в профессиональном сообществе ложные знания.
Да, всегда можно переписать код, использующий break, без этого оператора. Но накладные расходы на написание и понимание такого кода порой слишком велики.
Рассмотрим два решения задачи линейного поиска значения
k среди n введенных. Решение с break - ясное и легко пишется. Попытка избавиться от break приводит к циклу while с составным условием, в котором легче совершить ошибку. Кроме того, для перебора n элементов приходится вручную поддерживать счетчик i.Прямо сейчас - стрим Александра Богданова по PascalABC.NET
https://www.youtube.com/watch?v=RulhCYnbRAA
Алгоритм вычисления квадратного корня с использованием множественного присваивания
https://teletype.in/@pascalabcnet/y7Q4i4qZceE
Рисуем сердце на значке мехмата ЮФУ
Значок мехмата ЮФУ содержит неявно заданную кривую в форме сердца.
У студентов первого курса направления Фундаментальная информатика возникла идея нарисовать его программой на PascalABC.NET.
Функция PartitionPoints
Вывести таблицу значений функции на отрезке проще всего, используя стандартную функцию PartitionPoints(a,b,n), возвращающую последовательность из n+1 точек, разделяющих отрезок [a,b] на n равных частей.
На скриншоте - табулируем функцию Sin(x) на отрезке [0,Pi]
И снова про вещественные
Короткая статья в Telegra.ph:
https://telegra.ph/Snova-pro-veshchestvennye-09-27
В PascalABC.NET предусмотрено огромное количество функций и конструкций для короткого заполнения и вывода элементов.
Данный пример иллюстрирует заполнение и вывод массива в классическим Object Pascal и в PascalABC.NET
Вещественные числа представляются в памяти компьютера не точно, а приближенно. Возникающая при этом погрешность называется погрешностью округления.
Например, в результате выполнения кода
## Print(1/3);выводится
0.333333333333333Таким образом, погрешность - в 16-м знаке после точки. При вычислениях погрешность накапливается. Она называется вычислительной погрешностью. И возникают интересные эффекты. Например, при выполнении
## Print(1 - 1/3 - 1/3 - 1/3);выведется не 0 как можно было ожидать, а
1.11022302462516E-16Это значит, что при вычислениях с вещественными результат может быть полностью неправильным. Например, после выполнения
## var x := (1 - 1/3 - 1/3 - 1/3) * 1E16; Print(x);выведется не 0, а
1.11022302462516При работе с вещественными необходимо учитывать эти эффекты.
Открыта официальная группа PascalABC.NET ВКонтакте
https://vk.com/public216112322
