Модератор: Модераторы
const W = 10;
H = 5;
type PInt = ^integer;
var p : ^PInt;
newp : pointer;
i, j : integer;
begin
getmem(newp, H*sizeof(PInt));
p := newp;
for i := 0 to H-1 do
begin
getmem(newp, W*sizeof(integer));
(p+i)^ := newp;
end;
for i := 0 to H-1 do
for j := 0 to W-1 do ((p+i)^+j)^ := i*W + j ;
for i := 0 to H-1 do
for j := 0 to W-1 do write( ((p+i)^+j)^, ' ');
end.
majhar писал(а):type PInt = ^integer;
var p : ^PInt;
...
Const
COL = 5;
ROW = 10;
Var
DynArray: array of Integer;
i, j: Integer;
va-bank: integer;
Begin
...
//Выделяем память под массив
SetLength(DynArray, COL, ROW);
//Заполняем данными
Randomize;
For i:=0 To COL-1 Do
For j:=0 To ROW-1 Do
DynArray[i, j]:=Random(100);
//Берём данные из первой попавшийся ячейки
va-bank:=DynArray[Random(COL), Random(ROW)];
//... и превращаем программу в Лас-Вегас казино :)
If va-bank=99 Then
WriteLn('Вы выиграли 1 000 000 долларов!!!')
Else
WriteLn('Ну всё, пипец! Ты проиграл даже штаны...');
End;
Vadim писал(а):
- Код: Выделить всё
Var
DynArray: array of Integer;
i, j: Integer;
va-bank: integer;
Begin
...
//Выделяем память под массив
SetLength(DynArray, COL, ROW);
Vadim писал(а):У Вас тут получается "указатель на указатель на целочисленный тип". Не слишком ли сложная конструкция?
Мало того, она ещё и сложноинициализируема и сложна для понимания происходящих там процессов. И данные оттуда сложно доставать...
Особенно если речь только о прикладных программах.Vadim писал(а):Нас вообще не должны заботить технические подробности выделения памяти. А с указателями основной процент затрат времени при написании программы уйдёт именно на эту нудную и совершенно неинтересную работу - выделение и освобождение памяти. Мало того, можно выдрать себе последнии волосы из головы, пытаясь найти ошибку связанную с неправильной работой с указателями.
majhar писал(а):Как это???
DynArray: array of array of Integer;
majhar писал(а):Это спорный вопрос. Мне, например, работа функции fpc_dynarray_setlength из rtl, гораздо менее понятна.
Vadim писал(а):Правда на сегодняшний день и динамические массивы уже вчерашний день. Классы, которые созданы по типу хранения данных наподобие массива (например TStringList или TList), обеспечивают неизмеримо большее удобство в применении, чем динамический массив. Ведь динамический массив ограничен функционально тем, что это всего лишь коробочка для хранения данных, с неизвестным начальным объёмом. Кроме хранения он ничего более не умеет.А вот классу можно придать нужный функционал, например он может не только хранить матрицу, но и производить её транспортирование или инвертирование, если речь идёт о логическом содержимом. И уже в пользовательской программе не нужно ломать голову, как нам транспортировать матрицу, мы её просто транспортируем и всё...
Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12