Здравствуйте!
Имел опыт программирования на более простых языках.
Недавно начал программировать в ABC. Выполнял учебные задания, дошёл до массивов. Чтобы заполнять массивы, решил написать процедуру и понял, что не понимаю типов. PascalABC версия 3.1 сборка 1246 (23.05.2016):
program filarray;
procedure i_fillar(ia_rand: array of integer);
var
i: integer;
begin
random();
for i := 0 to ia_rand.Length-1 do
ia_rand[i] := random(ia_rand.Length);
end;
var
arr: array of integer;
a22 : array [1..6] of integer;
begin
SetLength(arr,10);
i_fillar(arr);
writeln(arr);
i_fillar(a22);
writeln(a22);
end.
Т.е., смысл такой - в тексте программы вызывается процедура, которая заполняет массив случайными числами, а уже потом в теле головной программы занимаюсь тренингом. Когда в процедуру заполнения передаю динамический массив(arr), вроде получаю результат. Но когда решил попробовать передать статический (a22), то получил ошибку:
fillar.pas(20) : Нельзя преобразовать тип array [1..6] of integer к array of integer
Статический массив не может быть заполнен с помощью динамического, поэтому возникает такая ошибка. В данном случае можно создать процедуру, возвращающую
Спасибо!
А как тогда должна выглядеть процедура, чтобы ра
ботать с любыми массивами - хоть статическими, хоть с динамическими?
Ну, и в дополнение - а если массив тип real?
Да, читал, но вдруг, как говорится, читать внимательнее надо.
Тогда к 1-ой части - как всёзтаки сделать, чтобы процедура могла обрабатывать массив (пусть integer только), но любой величины (или и статический и динамический)? Ну, и видимо, для разномерных(одно-, дву- и т.д. мерных) должны быть разные процедуры?
Вам ведь ответили, что типы - разные. Что мы делаем, когда надо обрабатывать разные типы в качестве параметра? Правильно, вспоминаем волшебное слово “перегрузка”.
Конечно, это нестрогий ответ на Ваш вопрос, потому что процедур придется делать две, но зато при вызове они будут работать, как одна, единая.