Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

Динамические массивы   Найти похожие ветки 

 
Lexa11_2002   (2006-03-22 13:05) [0]

Народ подскажите как на Pascal  объявить динамический массив.


 
Сергей М. ©   (2006-03-22 13:11) [1]

Например, так:

DinArray: array of SomeType;


 
Lexa11_2002   (2006-03-22 13:18) [2]

Pascal - ругает такую конструкцию, там как то по другому делается


 
nub ©   (2006-03-22 13:19) [3]

объяви SomeType ))

или ругается не паскаль, а надо задавать длину массива
SetLength(DinArray,length)


 
Lexa11_2002   (2006-03-22 13:24) [4]

Это в Delphi уже появились такие конструкции а в ВР еще нет там как то это по другому делалось ... сейчас просто очень вспомнить надо ... там просто еще как таковых динамических массивов еще не было, он не позволяет без [1..10] задать ... Полскажите как сделать так что б верхняя граница могла изменяться ...


 
nub ©   (2006-03-22 13:31) [5]

наверна как в с - выделение памяти и указатели


 
Lexa11_2002   (2006-03-22 13:34) [6]

Не там как то при помощи процедуры делалось, без указателей ... там как то просто можно компилятор обмануть и вместо 10 ему N подсовывать, но как? ...  сейчас просто придумать не могу


 
nub ©   (2006-03-22 13:37) [7]

интересно а TList там есть? или тебе принципиально массив нужен, или еще и многомерный?


 
Lexa11_2002   (2006-03-22 13:38) [8]

Какой TList - я про Borland Pascal 7.0 говорю


 
Впервые Зашел   (2006-03-23 14:59) [9]

Вижу, вопрос не разрешился...
В паскале все делается просто офигеть легче. :((

Где то так:
type
   tip=real;
   pvect=^vect;                                         //указатель на вектор (строка)
   vect=array[1..65520 div SizeOf(tip)] of tip;
   pmatr=^matr;
   matr=array[1..65520 div SizeOf(pvect)] of pvect; //массив указателей на строки (т.е. столбцы)
var Matrix:pmatr;
//
...........
//пишешь процедуру выделения памяти куда втюхиваешь следующую конструкцию
size:=longint(n*SizeOf(pvect)); // n - размер массива
GetMem(A,size);
for i:=1 to n do
 begin
  size:=longint(n*SizeOf(tip));
  GetMem(A^[i],size)
 end;
//т.е. при огранизации массива сначала узнаешь его размер
//
{Делаешь с массивом все что хочешь}
//
//и уничтожаешь

size:=longint(n*SizeOf(tip));
for i:=1 to n do FreeMem(A^[i],size);
size:=longint(n*SizeOf(pvect));
FreeMem(A,size);

Вот и все. Т.е. ты массив обьявляешь, но память под него не выделяется. Выделяется только тогда, когда он тебе понадобился и только такого размера какой тебе нужен!


 
tesseract ©   (2006-03-23 18:04) [10]

Совсем просто:

type TdynArray:array[0..0] of TRecordType;

    PdynArray=^TDynArray;

var

DynArray:PDynArray;
begin
{$R-} // без этого не заработает!!!!
Getmem(MyArray,needSize*sizeof(TrecordType));

///
FreeMem(MyArray,needSize*sizeOf(TrecordType));
{$R+}

можешь обращаться к массиву от 0 до needsize-1;
pascal требует от freemem указания объёма памяти, Delphi 2+ нет.



Страницы: 1 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.014 c
2-1143105524
SergeyG
2006-03-23 12:18
2006.04.09
Есть файл байтов (file of byte). Как сделать, чтобы массив данных


8-1130349981
Logun
2005-10-26 22:06
2006.04.09
Реал тайм анализ спектрта сигнала со звуковухи


2-1143508187
Bratskiy
2006-03-28 05:09
2006.04.09
массив в переменной типа OleVariant


15-1142602098
DillerXX
2006-03-17 16:28
2006.04.09
Чего ты бы такого скачать?


8-1130618516
SergProger
2005-10-30 00:41
2006.04.09
Структура gif.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский