Версия PascalABC.NET 3.2

Хорошо: студентам будет стимул освоить оба синтаксиса! :smiling_imp:

Зачастую бывает, что нужны случайные числа типа real, но не любые, а округленные до нескольких знаков после запятой. Тогда я пишу что-то вроде нижеследующего хулиганства.

// PascalABC.NET 3.2, сборка 1336 от 14.11.2016
function SeqRandomReal(n:integer; a,b:real; tol:integer):sequence of real;
begin
  var k:=Power(10,tol);
  Result:=SeqRandomReal(n,a,b).Select(x->Round(x*k)/k)
end;

begin
  SeqRandomReal(4, -5,8).Println;
  SeqRandomReal(4, -5,8,2).Println
end.

Вроде бы, работает.

6.91397970258909 1.5395983953679 -1.44851568641538 3.68790805558111 2.05 -2.47 -4.93 6.63

А нельзя сделать, чтобы ArrRandomReal и SeqRandomReal изначально имели четыре параметра? Ведь очень удобно работать, к примеру, с графиками, когда нужно порождать случайные координаты точек…

@RAlex Оформлять код лучше так:

```
код
```
1 лайк

Имеется ли в текущей версии или планируется ли в будущем директива, аналогичная using static в Си-шарпе?

Пока не планировали. Конечно, в Паскале эта проблема стоит меньше - это нужно для использования .NET-библиотек. Но ареал использования не так уж велик на мой взгляд. Cjnsole.WriteLine полностью заменяет writeln, функции класса Math полностью заменяют стандартные функции

Я бы так сделал:

SeqRandomInteger(10,0,1000).Select(x->x/100).Println

Честно говоря, не хочется плодить много параметров - в C# я с содроганием смотрю на перегруженные 20 версий, да еще и некоторые - с параметрами по умолчанию

Может быть на форуме сайта ABC.NET сделать отдельную ветку, где будут собраны сайты олимпиад и задачников, которые используют ABC.NET… Да и за одно оставлять контакты, кто уполномочен на другом конце обновлять версии.

К примеру, чемпионаты ACM по Дальневосточному региону позволяют загружать PascalABC.NET 2.2. Возможно, что и обновят до 3.2. Сейчас с ними разговариваю.

3 лайка

Спасибо. Я ждал этого ответа, но Си-шарповые библиотеки тоже иногда хочется использовать…

Не планируете ли Вы добавить класс или структуру BigFloat наподобие BigInteger, но для работы с вещественными числами произвольной точности?

Сделайте такую ветку! Мощную…

Если бы я знал, откуда взять коды такой библиотеки, то сделал бы…

У меня есть исходники самописной BigDecimal (перевод на PascalABC.NET c C#), аналогичной стандартному классу Java. Это не совсем Float, но позволяет работать с нецелыми числами произвольной точности. математические операции типа сложения умножения деления и степени реализованы.

Еще бы найти где наиболее актуальная версия лежит…

ACM по Дальневосточному региону обновили компилятор до версии 3.2 https://imcs.dvfu.ru/cats/main.pl?sid=;cid=500001;f=compilers;page=1

Налетай на задачи и турниры :wink: https://imcs.dvfu.ru/cats/main.pl?sid=a0GNMQB38T37zJoUTA53XcZ4n2gwlm;cid=1087270;f=contests

2 лайка

Сегодня вечером поищу, выложу сюда исходники.

Все уже сделано до нас)

Реализацию на С# брал здесь если что, во втором ответе приложена.

Библиотека GNU Multi-Precision Library for .NET содержит массу всяких вкусняшек для C# в части реализации арифметики “бесконечной точности”. Лицензия LGPL…

2 лайка

У меня всё была мечта сделать специальный модуль, позволяющий облегчить решение олимпиадных задач. Помог бы кто с идеями…

1 лайк

А как Вы это (в общих чертах) себе представляете? Некий специальный инструментарий - но узнав о нем, устроители олимпиад запретят пользоваться такой версией: это все равно, что на экзамен по математике принести компьютер с MatLab/MathCAD/Maple. Эвристический модуль с начатками искусственного интеллекта? Боюсь, даже если реализовать, также не допустят, да и вводить в компилятор “решалки” по меньшей мере некорректно. Библиотеки для реализации объектов? Но они уже есть - стеки, списки, словари и т.д. Что-то дополнительно? Можно попытаться прикрутить нечто из библиотеки шаблонов STL.

Если же говорить о том, что чаще всего нужно при решении задач (и не обязательно олимпиадных - все же PascalABC.Net позиционируется для широкой аудитории, как средство обучения), не хватает ряда операций для удобной работы со строками, из динамических матриц вообще реализован только обособленно торчащий в сторонке MatrixRandom, комплексная арифметика есть только на уровне четырех действий арифметики (желающие могут попробовать написать программу для решения квадратного уравнения в общем виде, когда квадратный трехчлен задан комплексными величинами или рассчитать RCL-схемку на переменном токе). Матричные операции нужно, пусть даже при необходимости подключаемые по uses, чтобы не увеличивать “вес” системы программирования.

Ну почему есть для класса строк экземплярные методы PadLeft и PadRight, но нет центрирующего PadCenter? Почему символ-заполнитель - только пробел? А может, мне надо заполнить свободное пространство повторяющейся подстрокой ‘-*’ ? Почему Swap не может обменять местами в строке два слайса и надо корячиться, клея строку из трёх Copy с дурацкими расчетами позиций? Почему SubString не умеет возвращать подстроку с указанной позиции и до конца строки, требуя совершенно лишние действия по определению длины оставшейся части? Как найти количество всех вхождений символа/подстроки в строку? Как заменить k-е вхождение подстроки? Можно найти индекс первого или последнего вхождения подстроки в строку, но нельзя найти его для k-го вхождения. Как “выковырнуть” из строки k-е слово, предварительно не читая их все в массив? Хочу аналоги FoxPro-шных функций ChrTran и StrTran, позволяющие перекодировать символы и подстроки на основе подстановки из строки-параметра - это нужно для школьных задачек на шифры Цезаря и т.п. Где циклический сдвиг строки вправо и влево на n позиций? Ой…да сколько еще всего не хватает…

1 лайк

Очень хорошая и правильная идея!

Очень часто в олимпиадных задачах требуется вычислить факториал, проверить число на простоту, на квадратичность, кубичность, палиндромичность…

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

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

Но, на мой взгляд, олимпиадная задача - это задача конструкторская и даже творческая. Нет такого инструмента, который сам придумал бы штанишки с моторчиком, тут нужен Карлсон.

И почему на олимпиадах нужно пользоваться заржавевшим инструментом типа си или си++? Зачем эти жертвы? На дворе 21 век, а мы всё ещё считаем на пальцах и пишем программы на си и ТурбоПаскале. Или там, наверху так сильно отстали от прогресса?

Здравствуйте, будет ли сделана возможность замены inc(num) и dec(num) на, почти аналогичные, конструкции из C: “num++” и “num–” ?

А потом возникнет вопрос, нельзя ли заодно и ++num, --num ? А какой смысл делать в языке два параллельных синтаксиса? Понятно, когда += - это сокращает запись, особенно, когда указано что-то вроде a[i,j]+=… А чем Inc(n) так уж хуже n++ ?