Необходимо написать процедуру, способную выводить двумерные динамические и статические массивы разной длины.
С одномерными дело обстоит куда лучше, ведь там можно использовать открытый массив. Тут же такой функции нет. Немного погуглив, я нашёл что-то более-менее пригодное для моих целей. Это, как вы уже догадались, нетипизированный параметр. Ну а чтобы было легче понять принцип его работы, я решил начать с одномерных массивов. Итак, я поставил перед собой задачу написать процедуру, в качестве одного из параметра которой можно было бы подавать разной длины статические и динамические массивы.
Начнём, пожалуй, с передачи динамического.
| Код | program Project1;
var mas2 : array of integer; i : byte;
procedure outmas(var omas; size : byte); var outm : array of integer absolute omas; n : byte; begin setlength(outm,size); for n := low(outm) to high(outm) do write(outm[n]:3) end;
begin setlength(mas2,10); for i := low(mas2) to high(mas2) do begin randomize; mas2[i] := random(100) end; outmas(mas2,length(mas2)); readln end. |
Эта программа работает безупречно.
Что же, идём дальше. А дальше нас ждут статические массивы.
| Код | program Project1;
var mas1 : array[0..9] of integer; i : byte;
procedure outmas(var omas; size : byte); var outm : array of integer absolute omas; n : byte; begin setlength(outm,size); for n := low(outm) to high(outm) do write(outm[n]:3) end;
begin for i := low(mas1) to high(mas1) do begin randomize; mas1[i] := random(100) end; outmas(mas1,length(mas1)); readln end. |
По моим представлениям это и должно было оказаться решением, но… оказалось, что программа просто-напросто вылетает. Путём проб и ошибок было выяснено, что если передавать ещё не забитый массив, то программа не вылетит. Пример:
| Код | program Project1;
var mas1 : array[0..9] of integer; i : byte;
procedure outmas(var omas; size : byte); var outm : array of integer absolute omas; n : byte; begin setlength(outm,size); for n := low(outm) to high(outm) do write(outm[n]:3) end;
begin outmas(mas1,length(mas1)); readln end. |
В чём же здесь секрет? Как мне построить правильнее процедуру? |