Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2013, 22:57   #1
Hvatit
Новичок
Джуниор
 
Регистрация: 10.11.2013
Сообщений: 1
Вопрос Передача через нетипизированный параметр как динамических, так и статических (разного объёма) массивов

Необходимо написать процедуру, способную выводить двумерные динамические и статические массивы разной длины.

С одномерными дело обстоит куда лучше, ведь там можно использовать открытый массив. Тут же такой функции нет. Немного погуглив, я нашёл что-то более-менее пригодное для моих целей. Это, как вы уже догадались, нетипизированный параметр. Ну а чтобы было легче понять принцип его работы, я решил начать с одномерных массивов. Итак, я поставил перед собой задачу написать процедуру, в качестве одного из параметра которой можно было бы подавать разной длины статические и динамические массивы.

Начнём, пожалуй, с передачи динамического.
Код:
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.
В чём же здесь секрет? Как мне построить правильнее процедуру?
Hvatit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить обработку массивов. предусмотреть описание массивов как динамических Vika_0_0 Паскаль, Turbo Pascal, PascalABC.NET 8 03.06.2012 10:12
Массив массивов динамических кнопок - как достучаться до нужной? WhiskasTM Общие вопросы Delphi 2 28.04.2012 11:02
Передача многомерных динамических массивов в процедуру в качестве параметр-переменной Leiph Общие вопросы Delphi 2 04.10.2011 03:07
Delphi передача динамических массивов world12_tk Помощь студентам 7 23.12.2009 21:06
Как работать с файлами с помощью динамических массивов Герыч Общие вопросы Delphi 4 10.01.2008 12:22