forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_array2d - Динамический двухмерный массив (http://forum.boolean.name/showthread.php?t=6296)

odd 28.08.2008 08:48

Lib_array2d - Динамический двухмерный массив
 
Вложений: 1
По просьбе vitalik1

Библиотека для создания динамических массивов чисел (integer)

Перечень функций:

integer Dim(x: integer; y: integer) - Создать двухмерный массив чисел с размерами X x Y
Функция возвращает 0 если операция прошла успешно или -1 если нет (например, не хватает свободной памяти).
Если x и y равны 0 память очищается (с вызовом Сборщика Мусора).
Если надо сделать одномерный массив, вызывайте, например, так: Dim(1, 100);

integer GetInt(x: integer; y: integer) - Прочитать число из массива из ячейки с адресом (x, y).

PutInt(x: integer; y: integer; val: integer) - Записать число val в массив в ячейку с адресом (x, y).

FillInt(val: integer) - Заполнить весь ваш массив числом val.

Пример программки с использованием библиотеки:

PHP код:

Program arrays_demo;
Uses array2d;
Var  
ijinteger;
Begin
 
 i
:=Dim(67); // Создаем массив
 
 
PutInt(229); // Записываем число 9 для примера 
 
 
for i:=0 to 5 do
 for 
j:=0 to 6 do
 
DrawText(''+GetInt(ij), i*15 15j*15); 
 
RepaintDelay(5000);
 
 
i:=Dim(00); // Очистка памяти
End


beisik 28.08.2008 17:11

Ответ: Lib_array2d - Динамический двухмерный массив
 
хм, а в чем динамичность-то? Можно ли делать вот так:
Код:

i := Dim(6, 7);
PutInt(2, 2, 9);
Dim(6, 8);

и потом вызвав GetInt(2, 2) мы получим 9?

Romanzes 28.08.2008 20:12

Ответ: Lib_array2d - Динамический двухмерный массив
 
Клево. Теперь я смогу портировать на тел одну прогу, которую когда-то писал на дельфи.

Piligrim 28.08.2008 23:05

Ответ: Lib_array2d - Динамический двухмерный массив
 
Цитата:

Сообщение от beisik (Сообщение 85292)
хм, а в чем динамичность-то? Можно ли делать вот так:
Код:

i := Dim(6, 7);
PutInt(2, 2, 9);
Dim(6, 8);

и потом вызвав GetInt(2, 2) мы получим 9?

Это ты загнул. Такого даже в яве нет. При изменении размера массива он создается снова, это надо времянку делать и копировать

Phantom 29.08.2008 00:38

Ответ: Lib_array2d - Динамический двухмерный массив
 
У меня вопрос. Почему во многих языках программирования нет динамических массивов. Типа это как бы позволяет интерпретатору (ну или платформе, на которой программа потом будет выполняться) память лучше распределить? Типа сразу известно, сколько памяти выделять под выполнение программы? Но ведь есть куча других способов загрузить память до предела. Вот взяли и отобрали у разработчиков такую удобную вещь =(

odd 29.08.2008 08:04

Ответ: Lib_array2d - Динамический двухмерный массив
 
Цитата:

Сообщение от Phantom_wc (Сообщение 85318)
У меня вопрос. Почему во многих языках программирования нет динамических массивов. Типа это как бы позволяет интерпретатору (ну или платформе, на которой программа потом будет выполняться) память лучше распределить? Типа сразу известно, сколько памяти выделять под выполнение программы? Но ведь есть куча других способов загрузить память до предела. Вот взяли и отобрали у разработчиков такую удобную вещь =(

Как раз наоборот. Во всех современных языках типа Java, С# можно объявлять переменную в любом месте кода, это только в MP остался такой пережиток. Там же всё очень просто и удобно. Захотел - объявил массив, что-то там с ним сделал, взял и удалил его. Особенно круто дела на C# обстоят. Там есть очень много классов-коллекций на все случаи жизни и практически всё что тебе нужно уже реализовано. По-этому даже на такие достаточно сложные действия как синхронизация данных с SQL сервером или скажем запись/чтение данных в файл реализуется 1-2 операторами.

Piligrim 29.08.2008 10:13

Ответ: Lib_array2d - Динамический двухмерный массив
 
Ага, и тянет за собой километры стандартных библиотек. А потом программисты понятия не имеют как это все работает :( и удивляются почему их две строчки с ошибкой.

vitalik1 29.08.2008 12:44

Ответ: Lib_array2d - Динамический двухмерный массив
 
Спасибо за либу odd. :super:

tyo2005 29.08.2008 16:35

Re: Lib_array2d - Динамический двухмерный массив
 
Спасибо автору за библиотеку!
По сути, остался один шаг до появления в Мидлет Паскале работы с динамическими объектами? Типа New, Dispose,Mark и т.п?
Это было бы просто здорово!

odd 30.08.2008 10:29

Ответ: Lib_array2d - Динамический двухмерный массив
 
Ну это может и появится когда-нибудь. Типа просто библиотека для работы с памятью. Я щас попутно пишу библиотеку по работе с RMS. Чтоб туда можно было без проблем запихивать/извлекать картинки, к примеру, и русский текст особенно желательно.

_Dmitry 12.09.2008 12:18

Ответ: Lib_array2d - Динамический двухмерный массив
 
Спасибо за библиотеку!
А можно тоже самое, только для real

Cliffe Snake 22.09.2008 13:02

Ответ: Lib_array2d - Динамический двухмерный массив
 
Круто, спасибо за либу. Odd, а можешь включить в неё другие типы данных (real, string и img)? Тогда ваще отпад будет =))

impersonalis 22.09.2008 13:38

Ответ: Lib_array2d - Динамический двухмерный массив
 
Цитата:

Сообщение от odd (Сообщение 85326)
Как раз наоборот. Во всех современных языках типа Java, С# можно объявлять переменную в любом месте кода, это только в MP остался такой пережиток.

Не только в современных! в СИ-библиотеке malloc.h есть очень любопытная функция realloc позволяющая перевыделить память без утери текущих значений (сначала попытка расширить размеры контейнера по указанному даресу, в противном случае - создание нового и копирование в него старых значений). Типа:
Код:

a=(int *)realloc(a,sizeof(int)*(max_size+1));

SBJoker 22.09.2008 14:08

Ответ: Lib_array2d - Динамический двухмерный массив
 
А в уже немолодом VB6.0 (1998г.) динамические массивы объявлялись так:
Private arData() as Integer
т.е. массив без размерности - динамический.
Однако перед его использованием его надо создать уже с указанием размера:
ReDim arData(100)
Кроме того можно изменить нетолько размер но и тип даных!
ReDim arData(100) As String
Чтобы стереть масив: Erase arData
Чтобы переопределить размер масива и сохранить ранее там расположенные данные (если это возможно): ReDim Preserve arData(150)
Отдельно стоит упомянуть о возможности указания первого индекса массива:
ReDim arData(10 To 100) - массив имеет индексы от 10 до 100 включительно.
Вот такой веслый язык :)

odd 23.09.2008 06:40

Ответ: Lib_array2d - Динамический двухмерный массив
 
В C#, при желании, тоже можно расширять массив, хотя на первый взгляд такого нет.


Часовой пояс GMT +4, время: 16:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot