Проблемы с функциями Length и GetLength

Здорова! У меня возникла странная проблема в IDE PABC. Проблема заключается в невозможности вызывать функции работы с массивами (Length, GetLength и.тд), вместо них (при вводе) IDE выбирает функции работы со строками :(( Help me screen-1: %D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B51

begin
  var a: array[1..25] of integer;
  var b: array[1..50] of integer;
  for var i := 1 to Length do
end.

До какого числа по вашему тут должен выполнятся for? Что получить длину - надо для начала дать массив, для которого вы её получаете.


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


И кстати, PABC и PABC.Net - разные языки. Лучше уже говорите паскаль, если хотите проще.

по нажимал я там все, все равно IDE выбирает строковую функцию

А вообще, статичные массивы устарели. Во многих смысла.

Если использовать динамические - забыть передать массив в Length нереально:

begin
  var x := new integer[25];
  for var i := 0 to x.Length-1 do
end.

А ещё с ними можно так:

begin
  var x := new integer[25];
  for var i := 0 to x.High do
end.
1 лайк

Если написать a.Length в моем примере, то ошибка: Length не объявлен в типе array [1…999] of integer

Не путайте компилятор и IDE. IDE это только редактор текста. В нём есть подсказки, в том числе по наведению, но они не последняя инстанция.

Надо было запустить и увидеть что компилятор говорит вам

Нельзя преобразовать тип function(s: string): integer к integer

Потому что компилятор вообще не выбирает перегрузку. Ни для строк, ни для массивов.

Он ругается что вы передаёте саму функцию, а не её результат в for. Функцию надо вызвать, а для этого передать в ней параметры. В данном случае параметр - ваш массив.


Потому что ваш пример основан на статических массивах. array[x..y] это плохо. Не используйте его.

а то есть если объявить a := new integer[5];, то это уже динамический массив?

так заработало, спасибо тебе!! век не забуду ))

Объявление динамического массива - это так:

var x: array of integer;

То есть надо только убрать ограничение размера.

Но в отличии от статических - динамические массивы надо ещё инициализировать. Вот new integer[5] это выделение памяти под 5 чисел типа integer.

Далее - можно писать и так:

var x: array of integer := new integer[5];

Я не написал тип переменной, потому что он автоопределяется. new integer[5] может быть только array of integer и ничем другим.

1 лайк

Уж кажется что проще - открыл Справку, прочитал. Мало справки - есть книги. Все ссылки на официальном сайте, книги там же. Но нет… это же надо еще читать…

Справки читают только слабаки.

Это из той же серии, что тормоза придумали трУсы?

Тормоза придумали парни из Майкрософта.