type
t1 = record
val: integer;
// работает
static c1: t1 = (val: 5);
end;
begin
var a: t1;
a.val := 5;
match a with
// зато теперь тут не принимает
t1.c1: Writeln(true);
end;
end.
Что ж. Печально, коль скоро это так. Я бы понял val := 5, но val: 5 - это для Паскаля описание переменной val c некорректным именем типа 5. Я смотрю на конструкцию описания типа static c1: t1 = (val: 5); - она интуитивно совершенно непонятна и высосана из пальца. Как вот выяснилось - из Дельфи.
Это так задумано. Старый Read он для совместимости. Но если вы хотите считать строку с помощью x := ReadString, вряд ли кому-то придёт в голову считывать строку без перевода на новую строку
В .Net есть аналог ReadLine - он пропускает перевод строки. ReadString это его полный аналог. А ReadlnString - это если кому- то придёт в голову написать в конце ln ))
Ну Вас же не смущает, что у ReadArrString нет варианта ReadlnArrString ? Так и здесь, ReadString вместо ReadlnString введет единообразие для строк и сократит запись.
Как мне поступить, если я хочу позволить пользователю задать значение переменной, регулирующей количество знаков после запятой (здесь (System.Math.Round(x, digits, System.MidpointRounding.AwayFromZero)) — digits). Но, как вы знаете, значение > 15 выдаст ошибку. Т. е. я нашёл только, как обрезать значение переменной в write (x:0:5), но подойдёт ли этот способ при вычислениях внутри программы (без write)?
Вычисления процессор всегда проводит с максимально возможной для него точностью. Для типа real/double погрешность расчетов зависит исключительно от алгоритма. Ограничить точность указанным числом знаков (разрядностью) можно только программно, но ни один распространенный язык программирования этим “не страдает”, поскольку такие действия могут только существенно замедлить вычисления.
P.S. Я вот написал, а думать продолжаю: когда такое в принципе может понадобиться? И ответа не нахожу.
Так это одноразовое округление. Если нужно именно оно, то вопрос был задан некорректно. Я его понял, как желание зафиксировать разрядность в дробной части при выполнении операций. Такое я видел только в системах, где разрядность произвольная и на плавающей точке, например, в пакетах компьютерной математики типа Maple,
В чём отличие между System.Math.Round и x:0:5?
Куда можно задавать подобные вопросы (не хочу засорять тему “Замечания и предложения”)?
Нашёл баг сайта: в Google Chrome идёт пересечение горячих клавиш, поэтому при нажатии Ctrl + Shift + C вместо открытия инструментов разработчика вставляется шаблон неотформатированного текста (Текст "как есть" (без применения форматирования)).