Массивы

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

Сообщение Twister » 01.04.2006 (Сб) 17:22

Roman-vb писал(а):- тоже устарело. Индексация теперь начинается с нуля
Интересно, а кто же устанавливает, что устарело, а что нет? :? И что значит "теперь"?
Amed писал(а):Индексация начинается с того места, с которого надо
А я все практикую лечение травами...

Roman-vb
Обычный пользователь
Обычный пользователь
 
Сообщения: 91
Зарегистрирован: 24.01.2006 (Вт) 18:31
Откуда: БРЯНСК

Сообщение Roman-vb » 01.04.2006 (Сб) 17:29

Twister
Вопрос уже решённый! "Устарело" и "Теперь" - это касается Visual Basic 2005, который, объективно говоря, считается боле прогресивным.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.04.2006 (Сб) 18:07

Roman-vb писал(а):Вопрос уже решённый! "Устарело" и "Теперь" - это касается Visual Basic 2005, который, объективно говоря, считается боле прогресивным.

По этому поводу вспоминается
Дмитрий Нагиев в начале передачи 'РОСТ' говорил, а не писал(а):Передача "РОСТ" - самая популярная передача среди моей мамы.



Roman-vb
Отныне я буду удалять из основных разделов твои ответы, касающиеся VB .NET, со всегда следующими всед за ними фразами типа "А, ну так надо было переходить, а я не виноват, что вы на VB6 пишете" как злостный оффтопик, коим они и являются. С вынесением тебе предупреждений за этот самый оффтопик. Хочешь отвечать по .NET - делай это в разделе по .NET.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 15.04.2006 (Сб) 16:58

Такой вопрос. Есть у меня такой код...
Код: Выделить всё
Public Station() as StationType

Public Sub CreateStation
    Dim Ind as Integer
1:
    For Ind = 1 to UBound(Station)
        If Not Station(Ind).Exists Then Exit For
    Next
    If Ind>UBound(Station) Then ReDim Station(Ind): Goto 1
    ...
End Sub

Будет ли он тормозить при многократном вызове процедуры, и будет ли вообще работать ReDim? А то проверить сейчас не могу...
Последний раз редактировалось Drag 15.04.2006 (Сб) 17:16, всего редактировалось 2 раз(а).

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 15.04.2006 (Сб) 17:07

Drag
У тебя массив статически объявлен, какой редим ?
Если всё делать своими ручками, они скоро отвалятся !

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 15.04.2006 (Сб) 17:13

Сори, сделал динамическим. А как насчет торможения?
PS: код исправил

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

Сообщение Amed » 15.04.2006 (Сб) 17:15

Нет. Стоит заглянуть в MSDN по поводу динамических массивов.

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 17.04.2006 (Пн) 15:08

Столкнулся со странным явлением - когда динамический массив еще не определили Redim'ом, то использование UBound выявляет ошибку "Subscript out of range". Навел курсор на UBound - появился текст ошибки, навел курсор на объект внутри функции, а затем обратно - и текст ошибки сменяется на "UBound(station) = -1". Далее жму F5 и программа как ни в чем ни бывало продолжает выполнение...

dizzi
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.04.2006 (Вт) 12:38

Сообщение dizzi » 19.04.2006 (Ср) 8:24

Такой вопрос. Вот есть у мя двумерный массив заполненный до верху. Нужно еще добавить сверху одну (или несколько) позиций, но так, чтобы все остальное не стерлось. При этом возможно добавлятся будет не однократно. Как это по грамотному прописать в коде.

Конечно через ReDim Preserve, но у мя получается только раз, потом ошибку выдает.

И еще! Допустим надо где-то из серидины одну позицию удалить. Размер массива сократить на единицу соответственно и чтоб все сдвинулось и ничего не потерялось. Как будет выглядеть код в этом случае?

А то я решил первый вопрос через супергиганский массив. Типа сколько не добавляй, до верху не достанешь - как-то через ж.. А про удаление типа оставил на месте но все значения обнулил - то же ничего хорошего. Хочецца чтоб в итоге было все по божески. ХЭЛП!!!

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

Сообщение FaKk2 » 19.04.2006 (Ср) 8:36

Если хочешь по божески переходи на коллекцию UDT (user defined type).
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

dizzi
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.04.2006 (Вт) 12:38

Сообщение dizzi » 19.04.2006 (Ср) 9:02

Час от часу не легче. А это че за зверь и с чем его едят?

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

Сообщение FaKk2 » 19.04.2006 (Ср) 9:24

У тебя массив двухмерный? Создай свой тип, который будет содержать эти два значения. И коллекцию этих типов, в которой можно достаточно просто добавлять / убирать элементы в любом месте.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

dizzi
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.04.2006 (Вт) 12:38

Сообщение dizzi » 19.04.2006 (Ср) 10:14

Тут вроде форум для новичков, а Вы нехорошими словами ругаетесь :)
Во-первых, не уж то нельзя обойтись стандартным набором. А во-вторых если нельзя, то нельзя ли пример кода по вашему принципу..

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

Сообщение FaKk2 » 19.04.2006 (Ср) 17:56

Тут вроде форум для новичков, а Вы нехорошими словами ругаетесь


Я бы на твоем месте просто из интереса поискал информацию о коллекциях и типах.

Во-первых, не уж то нельзя обойтись стандартным набором.


Дело не в наборе, а правильном подходе. Если тебе нужна гибкость в управлении большим количеством однотипных данных, то тебе нужно однозначно использовать коллекции. А коллекции не бывают "двухмерными" - это просто список обьектов.

А во-вторых если нельзя, то нельзя ли пример кода по вашему принципу..[


Тип создается так:
Код: Выделить всё

Public Type MyType
Long A
Long B
End Type

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

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 19.04.2006 (Ср) 18:22

Не знаю, как поступить - у меня есть массив, его я сортирую бинарным методом, но мне нужно как-то привязать начальные индексы к элементам массива. В массив я заношу кол-ва товаров, но после сортировки становится непонятно, какое число соответствует какому товару. Придумал только два способа, которые имхо слишком нерациональные - 1) Создать тип с двумя свойствами, 2) После сортировки сравнивать кол-ва товаров с каждым элементом массива(это приемлимо, т.к. раз кол-ва товаров одинаковые, то без разницы, какой из них какой).
Вообще, вся эта морока только для того, чтобы использовать функцию "Самый нужный ресурс" - MostNeedRes(Ind as Integer), которая определяет, какой товар самый требуемый, а Ind указывает... как бы так сказать... вообщем, если Ind = 1, то ищется нужнейший товар, а если Ind = 2 - то следующий товар по "нужности".

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.04.2006 (Чт) 7:21

Сортируй не сам массив, а индекс к нему.
Lasciate ogni speranza, voi ch'entrate.

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 20.04.2006 (Чт) 13:27

Это как? Единственный выход, который я нашел - создал двумерный массив, Mas(3,1). При втором индексе равном 0 - это само число, а при равном 1 - это начальный индекс.

FAKK2, ты ничего не перепутал? Я так думаю, что тип указывается так:
Код: Выделить всё
Public Type MyType
    a As Integer
    b as Boolean
End Type

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.04.2006 (Чт) 13:34

Покажи, как ты сортируешь индекс?
Lasciate ogni speranza, voi ch'entrate.

Drag
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 85
Зарегистрирован: 29.01.2005 (Сб) 23:54
Откуда: Москва

Сообщение Drag » 20.04.2006 (Чт) 17:25

Я просто сортирую числа, а при перестановке кроме самих чисел переставляю индексы...

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

Сообщение FaKk2 » 20.04.2006 (Чт) 22:07

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

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 21.04.2006 (Пт) 11:56

Amed писал(а):Konst_One, оно же всегда неверно, как alibek говорит :)

Даже нулевой элемент массива - элемент. Вот если есть массив контролов, тогда да. Запросто может быть 'пробел' в середине.
Не, глупость. В любом массиве(даже если у нас Dim A() as TextBox) никаких пробелов не бывает. Бывают только nothing-элементы. Но это ведь то же элементы.
Другое дело, что утврждение будто arr_size=ubound(arr)-lbound(arr)+1 не верно еще и потому, что для пустых массивов(0 элементов) вызовет ошибку.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Пред.

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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 23

    TopList  
cron