Здорова! У меня возникла странная проблема в IDE PABC. Проблема заключается в невозможности вызывать функции работы с массивами (Length, GetLength и.тд), вместо них (при вводе) IDE выбирает функции работы со строками :(( Help me
screen-1:
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.
Если написать 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
и ничем другим.
Уж кажется что проще - открыл Справку, прочитал. Мало справки - есть книги. Все ссылки на официальном сайте, книги там же. Но нет… это же надо еще читать…
Справки читают только слабаки.
Это из той же серии, что тормоза придумали трУсы?