Глупый вопрос...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Глупый вопрос...

Сообщение Джеффи » 27.04.2005 (Ср) 2:07

Люди может вопрос глупый, и всё же он меня мучает.
Недавно рылся на форуме и заметил странную для запись Dim a() as long. Хотя я привык писать к примерку Dim a(1000) as long.

Попробовал написать просто скобки без числа в своей проге не работает...

Вопрос вот в чём: как мне добавлять значения в такой масив...
Я знаю как узнать число переменных...

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 27.04.2005 (Ср) 2:48

Джеффи
Это динамический массив. Во время рантайма он может менять свои границы, например так:
Код: Выделить всё
ReDim a(1000) As Long
'а потом в другом месте
ReDim a(500) As Long


Есс-но, до использования нужно обьявить границы массива. Чтоб узнать верхнюю границу используй
Код: Выделить всё

MsgBox UBound(a)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 27.04.2005 (Ср) 2:53

Теперь я понял зачем существует ReDim :shock:

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 27.04.2005 (Ср) 2:54

Есс-но, до использования нужно обьявить границы массива. Чтоб узнать верхнюю границу используй
Код: Выделить всё
MsgBox UBound(a)


Я же ясно написал что знаю это :lol:

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 27.04.2005 (Ср) 2:55

Джеффи
Рефлекс... 8)
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 27.04.2005 (Ср) 2:57

Ещё такой вопрос ReDim можно использовать в любой части программы?
Т.е. например в цыклах, и т.д.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 27.04.2005 (Ср) 3:24

Джеффи
Да, только учти, что ReDim уничтожает старый массив.Если ты хочешь сохранить данные, тебе надо использовать:
Код: Выделить всё
Redim Preserve a(500) as Long
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

skord
Китаец
Китаец
 
Сообщения: 572
Зарегистрирован: 14.10.2004 (Чт) 15:36
Откуда: Иркутск

Сообщение skord » 27.04.2005 (Ср) 7:32

Говорят, что с большими массивами Redim Preserve меееедленно работает...

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 27.04.2005 (Ср) 9:02

skord
Я тоже много че сказать могу. Знаю что скорость будет падать, но все зависит от задачи. У меня на Селероне рабочем при верхней границе свыше 6000 существенно не тормозило :)

Причем как ты понимаешь практически каждую итерацию массив увеличивался. Можно конечно реализовать лучше, но мы пишем средства для достижения цели, а не средства ради средства.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 27.04.2005 (Ср) 10:36

Redim Preserve - не хорошая тема. Ни в коем случае не рекомендуется использовать ее несколько раз подряд (тем паче - в циклах). Мало того, что есть кучу памяти (вследствии того, что в VB6 массивы о разряженности и не подозревают), так еще и тормозит порядочно.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 27.04.2005 (Ср) 11:39

о каких тормозах вы говорите? :?

Самый большой тормоз это визуальная часть программы, если я правильно понимаю.

В конечном итоге на сегодняшних машина об этом вообще не стоит думать (секундой больше, секундой меньше - конечному пользователю по барабану).

P.S. Сугубо личное мнение. :D
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 27.04.2005 (Ср) 11:54

kif, это фигня. При больших размерах массивов (6000 элементов - это очень маленький массив) и большом количестве повторов, речь идет уже о минутах. Попробуй считать какой-нибудь большой видео-файл, прочитывая по одному байту и добавляя в массив, которому каждый раз делаешь Redim Preserve... Готов спорить, что визуальная часть такой программы будет самой быстрой :D

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 27.04.2005 (Ср) 14:11

Ессено возникает вопрос: А что тогда делать???
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 27.04.2005 (Ср) 14:45

В идеале - заранее определять, сколько понадобится элементов, и один раз делать Redim.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 27.04.2005 (Ср) 15:07

uhm писал(а):kif, это фигня. При больших размерах массивов (6000 элементов - это очень маленький массив) и большом количестве повторов, речь идет уже о минутах. Попробуй считать какой-нибудь большой видео-файл, прочитывая по одному байту и добавляя в массив, которому каждый раз делаешь Redim Preserve... Готов спорить, что визуальная часть такой программы будет самой быстрой :D


Но ведь можно заранее определить длину файла и размер массива соответственно.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 02.05.2005 (Пн) 15:56

skord писал(а):Говорят, что с большими массивами Redim Preserve меееедленно работает...


Вообще-то совершенно нет!
У меня массив с 2 500 000 элементами не тормозил вообще при записи
ReDim Preserve TheArray(2 500 001) As String
Так что не слушай что говорят...
У меня проц 2870МГц

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.05.2005 (Пн) 15:59

Джеффи, ты неправ.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 02.05.2005 (Пн) 16:04

Почему я не прав, если у меня в цыкле от 1 до 2 лемонов всё работает за 20 - 30 сек? причем там ещё и загрузка из файла и замена символов?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.05.2005 (Пн) 16:12

а) не у всех процессор 2870 мГц.
б) 20-30 секунд - это много
в) что такое лемон?

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 02.05.2005 (Пн) 16:25

Миллион :D
Учим сленг :lol:
20 - 30 сек для большущего словаря при загрузке это не много :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.05.2005 (Пн) 16:26

Миллион - это "million", "лимон", но никак не "лемон". :roll:

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 02.05.2005 (Пн) 16:35

Amed писал(а):Миллион - это "million", "лимон", но никак не "лемон". :roll:


Да ты прав :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 146

    TopList