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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 21:22   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию pascal динамические массивы

Здраствуйте... У меня возник такой вопрос... Как в паскале(версия 7.0) записать динамический двумерный массив.
Если можно с примером...
Заранее спасибо
world12_tk вне форума Ответить с цитированием
Старый 26.04.2009, 22:26   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

не совсем понятно, о чем речь, но если речь идет об объявлении массива, то объявлется например так:
var A:aray of integer of integer;
fbus вне форума Ответить с цитированием
Старый 26.04.2009, 22:55   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
var A:aray of integer of integer;
нет. так для TurboPascal не пойдёт! (и для Дельфи, кстати, тоже..)

world12_tk, если размерность заранее известна, то можно так:
Код:
type
   MyArrayType = array[1..10,1..40] of integer;
var
   DynArr :  MyArrayType;
begin
   New(DynArr);
   DynArr^[1,1] := 1;
   DynArr^[10,40] := 1000;
...
   Dispose(DynArr);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.04.2009, 23:03   #4
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

да Serge_Bliznykov вы полностью правы. Но меня интересует когда размерность не известна...
Например когда масив нужен для заполнение матрицы..
Для этого мы выделяем размер по стобцам и строкам... Но сделать динамичекий двумерный массив как например в си, нельзя... Мне сказали, что для этого двумерный массив представляется как одномерный, но я не могу понять как это сделать
world12_tk вне форума Ответить с цитированием
Старый 26.04.2009, 23:22   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Код:
var
  mas: array of array of integer;
//тра-та-та
Выделяем память 
SetLength(mas,10,10);
//Получаем массив [0..9,0..9]. Индексы идут с 0.
//тра-та-та
//Не забываем освобождать память
mas:=nil;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 27.04.2009, 00:08   #6
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию

Уважаемый spamer. Вы привели код для Delphy.... на pascal это не пройдет... должен же ведь быть какой то другой путь....
world12_tk вне форума Ответить с цитированием
Старый 27.04.2009, 01:04   #7
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Код:
{$R-}
Type
  MyType = Word;
Type
  PMyVector = ^MyVector;
  { "Строка" динамической матрицы }
  MyVector = Array[1 .. 1] of MyType;

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

Var
  DynamicArray: MyArrayPtr;   { Указатель на матрицу }
  Count,
  I,J,Size: Word;
Begin
  Write('Число элементов массива: ');
  ReadLn(Count);

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

  For I:=1 to Count do { Lines }
    For J:=1 to Count do { Columns }
      { Немного изменяется способ обращения к элементу матрицы }
      DynamicArray^[I]^[J]:=I*J;

  For I:=1 to Count do
  begin
     WriteLn;
     For J:=1 to Count do
         Write(DynamicArray^[I]^[J]:4);
  end;

  { Освобождаем память в обратном порядке: }
  { Сначала - удаляем все "строки" }
  For i := 1 To Count Do
    FreeMem(DynamicArray^[i], Count*SizeOf(MyType));
  { А теперь и указатели на них ... }
  FreeMem(DynamicArray, Count * SizeOf(PMyVector));
End.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 27.04.2009, 10:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

SunKnight, +1

ещё добавлю насчёт
Цитата:
Мне сказали, что для этого двумерный массив представляется как одномерный, но я не могу понять как это сделать
world12_tk, а динамический одномерный массив Вы создавать умеете?
тогда пусть нужно создать двухмерный массив размерности 1..N,1..M
создаём одномерный массив
AA : array [1.. N*M] (или, точнее, выделяем память под него)
дальше, для получения доступа к элементу A[i,j]
переводим в одномерный индекс по формуле:
Код:
A[i,J] <-> AA[ (i-1)*N+J ]
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
си динамические массивы, работа с фалами. tanek Помощь студентам 0 19.04.2009 23:28
Динамические массивы в Борланд Си... (Что у меня не правильно в программе?) Алекс...))) Помощь студентам 2 09.02.2009 21:47
Указатели и динамические массивы. Airou Общие вопросы C/C++ 5 16.01.2009 19:05
Помогите переделать 2 задачи под динамические массивы (Паскаль) mpegable Помощь студентам 2 27.05.2008 17:32