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

Компилятор (то что делает .exe файл из текстового) и анализатор кода (фича IDE, то есть текстового редактора) - существуют отдельно. Поэтому они могут быть не согласны. В данном случае это баг анализатора кода.

Попробуйте включить в настройках использование компилятора для помощи анализатору кода - может помочь.


В общем случае, то что вам выводит при выполнении - то и правда. Но .GetType не всё рассказывает. К примеру:

##
procedure WriteTypes<T>(o: T);
begin
  $'Compilation-time: {typeof(T)}'.Println;
  $'  Execution-time: {_ObjectToString(o?.GetType)}'.Println;
  Println('='*30);
end;

// Тип при компиляции: базовый класс исключений Exception
// А при выполнении тип InvalidOperationException - потому что его на самом деле сохранили в переменную
var e: Exception := new System.InvalidOperationException;
WriteTypes(e);

// Во время компиляции тип Nullable<integer> - допускающий значение типа integer или nil
var x: integer?;
WriteTypes(x); // Тип при выполнении nil, потому что ещё ничего не присвоили
x := 5;
WriteTypes(x); // Тип при выполнении integer, потому что уже заполнили
1 лайк

Включил “Использовать компилятор для Inellisense” - теперь при наведении на любую из переменных m, m1, m2 выдается подсказка, содержащая то, что я и ожидал: m: array[,] of integer. Спасибо! Вы мне очень помогли ))

Будьте добры, поясните ещё, пожалуйста, про ленивые последовательности и select:

##
// когда на входе массив, 
// то select, поскольку возвращает последовательность, 
// не рекомендуется использовать:
var a1 := ReadAllLines('Table2.txt');   // a: array of string
var m1 := Matr(a1.Select(x -> x.ToIntegers).ToArray); 

// а если на входе последовательность?
var a2 := ReadLines('Table2.txt');      // a: sequence of string
var m2 := Matr(a2.Select(x -> x.ToIntegers).ToArray); 
// - допустимо ли здесь использовать select?

Слишком общий вопрос.
Попробуйте сначала почитать эту презентацию и подумать, как бы вы создавали массив из ленивой последовательности.
А затем уже задавайте вопросы.

Ок, спасибо

Есть ли у IDE журнал, чтобы уточнить, почему она закрылась?

Все последние файлы можно узнать в меню Файл - Последние файлы

А она у вас как то странно закрывается? Я видел кучу багов, IDE или создаёт окно внутренней ошибки, или становится неюзабельно (ничего не тыкается). Ну или и то и то. Но чтобы беззвучно вылетало я не видел.

Есть ли в IDE встроенные функции теории вероятностей, например, Бернулли, или статистические, например, среднеквадратическое отклонение?

Нет, но можно в подпрограммах разработать.

Была мысль сделать, но обсуждение показало, что это не будет востребовано.

Решаю задачу:

var max,rez:integer;
[cache]  
function F(n:integer):integer;
  begin
    if n=0 then
    begin
      result:=0;
      exit
    end;
    if n mod 3 = 0 
      then result:=F(n div 3)
      else result:=F(n-1)+1;
  end;  
begin
  for var i:=1700000000 to 2100000000 do
  begin
    rez:=F(i);
    if max<rez then max:=rez
  end;
  write(max);
end.

получаю ошибку:

Жду помощи…

Ровно эта ошибка выводится в NET при работе с ассоциативными массивами когда в них слишком много элементов пихается.

То есть, Вы примеряете [cache] неправомерно

А у меня в курсе прямо написано:

Но незнайки ведь читать не любят…

А ведь если использовать ValueTuple вместо Tuple - в данном случае, вместимость станет в 2 раза больше…

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

F(n) = F(n/3) значит что для всех n.Divs(3) результат будет 0.
А все следующие результаты будут на 1 больше предыдущего.
То есть F(n) это просто n mod 3.

Разве реализация [cache] должна приводить к этим ошибкам?

Это реакция на переполнение словаря - в нём оказывается огромное количество различных элементов. Реализация [cache] всего лишь заполняет словарь, и лишь неправомерное использование [cache] приводит к его переполнению

Почему кэш не ограничить?

И какое решение у задачки?

Предложите алгоритм.