|
28.08.2008, 08:48
|
#1
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Lib_array2d - Динамический двухмерный массив
По просьбе 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.
Пример программки с использованием библиотеки:
Program arrays_demo; Uses array2d; Var i, j: integer; Begin i:=Dim(6, 7); // Создаем массив PutInt(2, 2, 9); // Записываем число 9 для примера for i:=0 to 5 do for j:=0 to 6 do DrawText(''+GetInt(i, j), i*15 + 15, j*15); Repaint; Delay(5000); i:=Dim(0, 0); // Очистка памяти End.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
28.08.2008, 17:11
|
#2
|
Нуждающийся
Регистрация: 23.04.2008
Адрес: Брест, Беларусь
Сообщений: 53
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
хм, а в чем динамичность-то? Можно ли делать вот так:
i := Dim(6, 7);
PutInt(2, 2, 9);
Dim(6, 8);
и потом вызвав GetInt(2, 2) мы получим 9?
|
(Offline)
|
|
28.08.2008, 20:12
|
#3
|
Разработчик
Регистрация: 06.04.2008
Сообщений: 541
Написано 196 полезных сообщений (для 638 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Клево. Теперь я смогу портировать на тел одну прогу, которую когда-то писал на дельфи.
|
(Offline)
|
|
28.08.2008, 23:05
|
#4
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Сообщение от beisik
хм, а в чем динамичность-то? Можно ли делать вот так:
i := Dim(6, 7);
PutInt(2, 2, 9);
Dim(6, 8);
и потом вызвав GetInt(2, 2) мы получим 9?
|
Это ты загнул. Такого даже в яве нет. При изменении размера массива он создается снова, это надо времянку делать и копировать
|
(Offline)
|
|
29.08.2008, 00:38
|
#5
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
У меня вопрос. Почему во многих языках программирования нет динамических массивов. Типа это как бы позволяет интерпретатору (ну или платформе, на которой программа потом будет выполняться) память лучше распределить? Типа сразу известно, сколько памяти выделять под выполнение программы? Но ведь есть куча других способов загрузить память до предела. Вот взяли и отобрали у разработчиков такую удобную вещь =(
|
(Offline)
|
|
29.08.2008, 08:04
|
#6
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Сообщение от Phantom_wc
У меня вопрос. Почему во многих языках программирования нет динамических массивов. Типа это как бы позволяет интерпретатору (ну или платформе, на которой программа потом будет выполняться) память лучше распределить? Типа сразу известно, сколько памяти выделять под выполнение программы? Но ведь есть куча других способов загрузить память до предела. Вот взяли и отобрали у разработчиков такую удобную вещь =(
|
Как раз наоборот. Во всех современных языках типа Java, С# можно объявлять переменную в любом месте кода, это только в MP остался такой пережиток. Там же всё очень просто и удобно. Захотел - объявил массив, что-то там с ним сделал, взял и удалил его. Особенно круто дела на C# обстоят. Там есть очень много классов-коллекций на все случаи жизни и практически всё что тебе нужно уже реализовано. По-этому даже на такие достаточно сложные действия как синхронизация данных с SQL сервером или скажем запись/чтение данных в файл реализуется 1-2 операторами.
|
(Offline)
|
|
29.08.2008, 10:13
|
#7
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Ага, и тянет за собой километры стандартных библиотек. А потом программисты понятия не имеют как это все работает и удивляются почему их две строчки с ошибкой.
|
(Offline)
|
|
29.08.2008, 12:44
|
#8
|
Оператор ЭВМ
Регистрация: 11.11.2007
Сообщений: 26
Написано 6 полезных сообщений (для 10 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Спасибо за либу odd.
|
(Offline)
|
|
29.08.2008, 16:35
|
#9
|
AnyKey`щик
Регистрация: 16.04.2007
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Lib_array2d - Динамический двухмерный массив
Спасибо автору за библиотеку!
По сути, остался один шаг до появления в Мидлет Паскале работы с динамическими объектами? Типа New, Dispose,Mark и т.п?
Это было бы просто здорово!
|
(Offline)
|
|
30.08.2008, 10:29
|
#10
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Ну это может и появится когда-нибудь. Типа просто библиотека для работы с памятью. Я щас попутно пишу библиотеку по работе с RMS. Чтоб туда можно было без проблем запихивать/извлекать картинки, к примеру, и русский текст особенно желательно.
|
(Offline)
|
|
12.09.2008, 12:18
|
#11
|
AnyKey`щик
Регистрация: 12.09.2008
Сообщений: 1
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Спасибо за библиотеку!
А можно тоже самое, только для real
|
(Offline)
|
|
22.09.2008, 13:02
|
#12
|
Нуждающийся
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений (для 12 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Круто, спасибо за либу. Odd, а можешь включить в неё другие типы данных (real, string и img)? Тогда ваще отпад будет =))
|
(Offline)
|
|
22.09.2008, 13:38
|
#13
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
Сообщение от odd
Как раз наоборот. Во всех современных языках типа Java, С# можно объявлять переменную в любом месте кода, это только в MP остался такой пережиток.
|
Не только в современных! в СИ-библиотеке malloc.h есть очень любопытная функция realloc позволяющая перевыделить память без утери текущих значений (сначала попытка расширить размеры контейнера по указанному даресу, в противном случае - создание нового и копирование в него старых значений). Типа:
a=(int *)realloc(a,sizeof(int)*(max_size+1));
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
22.09.2008, 14:08
|
#14
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: 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 включительно.
Вот такой веслый язык
__________________
|
(Offline)
|
|
23.09.2008, 06:40
|
#15
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_array2d - Динамический двухмерный массив
В C#, при желании, тоже можно расширять массив, хотя на первый взгляд такого нет.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:16.
|