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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2015, 15:42   #1
Shinshilla
 
Регистрация: 11.11.2014
Сообщений: 9
По умолчанию Как к переменным функции добавить элементы динамического массива (pascal abc)

Мне необходимо написать функцию, в которой я буду использовать элементы двумерного динамического массива, изменяя их индексы. Подскажите пожалуйста как это сделать!
Shinshilla вне форума Ответить с цитированием
Старый 11.02.2015, 19:47   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,602
По умолчанию

(C) Volvo

Работа с динамическими матрицами
Для того, чтобы работать с динамическими матрицами, проще всего представить матрицу, как массив векторов (массив, содержащий указатели на строки матрицы). Перед началом работы с такой матрицей нужно сначала выделить память под массив указателей на строки, и только потом выделять память для хранения самих данных. После использования матрицы выделенная память освобождается в обратной последовательности:

Код:
{
  Обязательно отключить проверку индексов,
  иначе возникнет ошибка времени исполнения
}
{$R-}
Type
  TType = Word; { Или любой другой тип }
Type
  PVector = ^TVector;
  { Это - одна "строка" динамической матрицы }
  TVector = Array[1 .. 1] of TType;

  PDynMatrix = ^TDynMatrix;
  { Сама матрица - представляется как массив указателей на "строки" }
  TDynMatrix = Array[1 .. 1] of PVector;

Var
  { Через эту переменную будет осуществляться вся работа с матрицей }
  mxDynamic: PDynMatrix;
  n, i, j: Word;
Begin
  Write('n = '); ReadLn(n);

  { Выделяем память под указатели на "строки" }
  GetMem(mxDynamic, n * SizeOf(PVector));
  { И для каждой "строки" - выделяем память для хранения данных } 
  For i := 1 To n Do
    GetMem(mxDynamic^[i], n * SizeOf(TType));

  (*** Работаем с матрицей ***)
  {
    Динамическая матрица представлена немного иначе,
    чем динамический массив, поэтому для того, чтобы обратиться
    к ее элементу, необходимы 2 операции разыменования указателей.
    Пример:
  }
  For i := 1 To n Do { Строки }
    For j := 1 To n Do { Столбцы (элементы строки) }
      mxDynamic^[I]^[J]:=I*J;

  For i := 1 To n Do Begin
    WriteLn;
    For j := 1 To n Do
       Write(mxDynamic^[I]^[J]:4);
  End;

  (*** Закончили работу с матрицей - уничтожаем ее ***)

  { Освобождаем память в обратном порядке: }
  { Сначала - удаляем все "строки" }
  For i := 1 To n Do
    FreeMem(mxDynamic^[i], n * SizeOf(TType));
  { А теперь и указатели на них ... }
  FreeMem(mxDynamic, n * SizeOf(PVector));
End.
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции с переменным количеством параметров. Функция, как тип данных. Кудаив Помощь студентам 0 27.05.2012 14:21
Как добавить элемент в динамический массив? Depressive Microsoft Office Excel 4 22.05.2011 20:05
Как добавить элемент в двумерный динамический массив? RainCat Помощь студентам 1 13.04.2011 14:03