Помощь новичкам

Чтобы подключить это пространство имён. Не знаю почему это вообще работает без этого, видимо типу System.Console синоним сделали.

Как тело процедуры меняет размер буфера? Что такое “метка порядка следования байтов”?

Возможно ли сделать так, чтобы сразу (без использования обхода) можно было ввести строку, неограниченную по длине? Если нет, как можно более кратко (например, двумя словами) указать размер буфера в коде программы?

Что такое “обход” и что означает “неограниченная по длине”? 10^10000000000000000000 ?

1 лайк

Ну, например, в переменную типа BigInteger можно же записать бесконечно большое целое, так почему бы совсем не снять ограничение, накладываемое размером буфера на длину ввода, например, увеличивая размер буфера, когда пытаются ввести строку, которая в него не помещается?

Пишите свои велосипеды на Console.ReadKey, если хотите ввод без ограничений. Стандартный ввод консоли просто не предназначен для чего то такого экстремального.

Да ну? Прямо-таки БЕСКОНЕЧНО большое? Надо заметить, у Вас странное понимание бесконечности. Ну знаете, рыбка в аквариуме все его пространство может мнить бесконечностью, а Богом - того кто воду меняет, но Вы же, надеюсь, не рыбка? В компьютерах все “бесконечное” всегда конечно и ограничено длиной дескриптора.

Ну нет. Я имел в виду такое, на которое хватит памяти.

Почему максимальное значение bufSize для процедуры

равно 223236293918690? Как (положительно, отрицательно) и на что (в том числе и в долгосрочной перспективе (при долгом выполнении программы); при большом количестве запросов на ввод, например, var x := Read)), кроме максимальной длины строки для ввода (например, на производительность), повлияет выполнение в программе кода SetInputBufferSize(223236293918690)?

Ну, для начала, это int64 а не integer.

  1. Вам не надоело задавать вопросы типа “а почему это число разрешает а дальше нет”? Ответ то всегда 1: на что хватило ресурсов (с определёнными доп. ограничениями, как максимальная длина массива) - столько и выделило.

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

Но, раз вам интересно - лучше вы и закапывайтесь. Такие вопросы, возможно не самые полезные, но крайне интересные - превращаются в прекрасную цель, на пути к которой можно получить кучу опыта в том, во что вы иначе не захотите лезть.

1 лайк

… а можно и сообщество потроллить (нужное подчеркнуть).

2 лайка

Не замедлится ли выполнение программы, если увеличить размер буфера до 1073741794?

Тестируйте.

Как считать значение типа Decimal с клавиатуры? Почему нет встроенной подпрограммы ReadDecimal?

Потому что это не нужно целевой аудитории PascalABC.NET. А кому нужно, те определят функцию у себя в программе.

Что-то у меня не выходит: почему так работает:

var x: decimal := decimal.Parse(ReadLexem)

а так нет?

function ReadDecimal(var x: decimal): decimal;
begin
  Result := decimal.Parse(ReadLexem)
end;

begin
  var x: decimal := ReadDecimal;
end.

Как можно усовершенствовать функцию?

Если можно, нашему растущему PascalABC.Net, ввести дополнительный тип - только натуральные числа и картеж для ввода с клавиатуры натуральные числа!

Бессмысленно. За ними не стоит поддержки ни аппаратной, ни программной в .NET. Следовательно, реализация будет крайне неэффективной из-за постоянных проверок значений. Например, операция a - b в натуральных числах может привести к получению нуля или отрицательного числа. Что в этом случае делать? Как приводить литералы, имеющие сейчас тип integer, к натуральным? Нельзя будет писать b := a + 2 для натуральных a и b, потому что 2 имеет более “расширенный” тип integer, В общем, проблем бездна будет. Так что кому нужно - может реализовать свой класс, написать обработчики, перегрузить операции и .т. д.

Согласен, спасибо. Будем пока по прежнему работать, написать фильтры и обработчики.

Какие существуют способы для считывания decimal с клавиатуры, которые лучше, чем var x := decimal.Parse(ReadLexem)?