Можно задавать элементы массива в виде диапазона?

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

Можно задавать элементы массива в виде диапазона?

Сообщение kminas » 26.04.2006 (Ср) 19:25

Можно ли элементы массива задавать в виде диапазона? Как напрмер, переменную в операторе Select Case
Код: Выделить всё
CASE 1 То 9

или в цикле For... Next
Код: Выделить всё
For n = 1 То 10
Константин

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 19:29

kminas
Не очень красиво ты сформулировал свой вопрос. Ну а вообще, воспользуйся тем же For--Next.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 26.04.2006 (Ср) 19:29

kminas
Что имелось в виду?
Код: Выделить всё
Dim V(10) as Integer

Тоже самое что:
Код: Выделить всё
Dim V(0 to 10) as Integer



Можно диапазон задать и так:
Код: Выделить всё
Dim V(-4 To 10) As Integer
Последний раз редактировалось Крост 26.04.2006 (Ср) 19:41, всего редактировалось 2 раз(а).
Хороший :D, плохой :x, злой :twisted:.

(Не)Люблю кАпаться в чЮжих сорсах.

Хочешь узнать что такое Piligrim? Прошу - http://www.piligrim-gps.ru/

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 19:33

задавать в виде диапазона


Задавать -- это одно, а резервировать память -- другое.

Всё равно, вопрос некорректен.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 26.04.2006 (Ср) 20:13

Я ж говорю, что массивы только начал изучать.
Приведу часть массива из моей существующей проги
Код: Выделить всё
Dim a(100) As Integer

        a(1) = 80
        a(2) = 100
        a(3) = 110
        a(4) = 125
        a(5) = 140
        a(6) = 160
        a(7) = 180
        a(8) = 200
        a(9) = 225
For i = 1 To 8
If a(i) <= D And D <= a(i + 1) Then
End If
Next i

Его не надо обсуждать. Он уже работает. А мне надо, чтобы вместо 80,100,125... был что-нибудь типа 140 to 280, 300 to 450, 400 to 500 и т.д. и чтобы переменная искалась внутри этих диапазонов, причем, в ряде случаев она может подойти к двум диапазонам
Константин

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 20:21

kminas
проверка на принадлежность к диапазону такая же, как в математике, как то 140<=A(1)<=280
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 26.04.2006 (Ср) 20:47

А почему тогда у меня не получается? Я с этого и начинал. Проверил. Пишет: Ошибка компил. Ждет лейбла или стетмента или конца стетмента.
Константин

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 20:54

kminas
Ну приведи код.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 26.04.2006 (Ср) 20:55

kminas
А что ты написал?
Изображение

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 21:07

keks-n
У нас совпадают мысли :P
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 26.04.2006 (Ср) 21:12

Сначала было так, потом как сейчас, а потом добавил как Роман предложил
Код: Выделить всё
Private Sub Command1_Click()
Dim arr(100, 100) As Integer
Dim i As Integer
Dim d As Integer
n = txt1.Text
140<=arr(1)<=280

arr (3) >= 300 And arr(3) <= 440
arr (4) >= 400 And arr(4) <= 600
arr (5) >= 550 And arr(5) <= 780
arr (6) >= 600 And arr(6) <= 840
arr (7) >= 800 And arr(7) <= 1000

For i = 1 To 7
If arr(i) <= d And d <= arr(i + 1) Then
a (i)
txt1.Text = a(i + 1)
Next i
End Sub
Константин

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 21:15

kminas
Каой-то бредовый код. Сложно понять, что тебе нужно :?
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 26.04.2006 (Ср) 21:29

Это только проба возможностей массива.
Константин

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 26.04.2006 (Ср) 21:32

For i = 1 To 7
If arr(i) <= d And d <= arr(i + 1) Then
a (i)

txt1.Text = a(i + 1)
Next i

Здесь вообще смысла нет. И оператор if непонятно сделал.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

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

Сообщение Amed » 26.04.2006 (Ср) 21:34

Это не код вовсе. Нет такого синтаксиса.

Ничего не понятно, попробуй еще раз объяснить, что именно хочешь получить.

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 26.04.2006 (Ср) 22:00

Это ни какая не программа. Она назывется Проба массива и форма также назыв. frmProbeMass. Я, для себя пробую как будет работать массив. Просто взял кусок из своей же проги и тренируюсь. Мне нужно, чтобы элементы были в определенном диапазоне от величина и до величина. А моя переменная, чтобы находила себя в одном, а, возможно, и в двух из этих диапазонов. Тогда и будет код.
Меня интересует не мой бред, а твой, Роман, код
Код: Выделить всё
140<=A(1)<=280
почему не идет. Я так тоже пробовал?
P.s. На мой бред компиллятор, посему-то не ругается?...
Константин

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

Сообщение Amed » 26.04.2006 (Ср) 22:12

Все просто.

Код: Выделить всё
Option Explicit
Private Type MyType
    Left As Integer
    Right As Integer
End Type
Private mas(1 To 3) As MyType

Private Sub Form_Load()
SetBounds 1, 0, 20
SetBounds 2, 10, 20
SetBounds 3, 20, 30

CheckValue 15
End Sub

Public Sub SetBounds(Index As Integer, LeftBound As Integer, RightBound As Integer)
With mas(Index)
    .Left = LeftBound
    .Right = RightBound
End With
End Sub

Public Sub CheckValue(Number As Integer)
Dim i As Integer

For i = LBound(mas) To UBound(mas)
    If Number >= mas(i).Left And Number <= mas(i).Right Then MsgBox Number & " содержится в интервале №" & i & ": " & mas(i).Left & "..." & mas(i).Right
Next i
End Sub


kminas писал(а):Это ни какая не программа. Она назывется Проба массива и форма также назыв. frmProbeMass. Я, для себя пробую как будет работать массив. Просто взял кусок из своей же проги и тренируюсь. Мне нужно, чтобы элементы были в определенном диапазоне от величина и до величина. А моя переменная, чтобы находила себя в одном, а, возможно, и в двух из этих диапазонов. Тогда и будет код.
Меня интересует не мой бред, а твой, Роман, код
Код: Выделить всё
140<=A(1)<=280
почему не идет. Я так тоже пробовал?
P.s. На мой бред компиллятор, посему-то не ругается?...

Такого синтаксиса нет, я же сказал. Почему не ругается, не знаю. Но работать не будет.

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 27.04.2006 (Чт) 0:15

потомучто компилятор глупый
Наверное человек пытается применить логическое И? :roll: :wink:
Хотя странно что компилятор не ругался....странно

Такое чуство что человек немного не понимает чего-то и пытается спорить с другими....хм... :wink:
Лучше думать чем жевать.

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

Сообщение GSerg » 27.04.2006 (Чт) 3:26

Читаю ответы Роман-вб в этой теме, а на ум всё лезет и лезет анекдот про попугая, стюардессу и мужика... ничего не могу с этим поделать...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 27.04.2006 (Чт) 6:24

kminas, вариант Amed-а можно написать и так:
Код: Выделить всё
Option Explicit
Private mas(1 to 2, 1 To 3) As Long ' двухмерный массив

Private Sub Form_Load()
SetBounds 1, 0, 20
SetBounds 2, 10, 20
SetBounds 3, 20, 30

CheckValue 15
End Sub

Public Sub SetBounds(Index As Integer, LeftBound As Integer, RightBound As Integer)
mas(1,Index) = LeftBound
mas(2,Index) = RightBound
End Sub

Public Sub CheckValue(Number As Integer)
Dim i As Integer

For i = LBound(mas) To UBound(mas)
    If Number >= mas(1,i) And Number <= mas(2,i) Then MsgBox Number & " содержится в интервале №" & i & ": " & mas(1,i) & "..." & mas(2,i)
Next i
End Sub

Может тебе так будет понятней, но у Amed-а красивее и правильнее.
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

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

Сообщение uhm » 27.04.2006 (Чт) 8:55

Для начала, kminas, будь ты компилятором, что бы ты сделал, если бы тебе попалась "команда"


Код: Выделить всё
140<=A(1)<=280


Ответил бы "Да, сэр?" :roll:

Для продолжения, после того, как ты, наконец, изучишь базовый синтаксис VB, тебе стоит также запомнить, что VB будет рассматривать вышеприведенное выражение совсем не так, как ты и Роман-вб себе это представляете, и что в этом случае обязательно использовать логический оператор AND. :D
Быть... или не быть. Вот. В чём вопрос?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 27.04.2006 (Чт) 9:06

kminas писал(а):Я ж говорю, что массивы только начал изучать.
Приведу часть массива из моей существующей проги
Код: Выделить всё
Dim a(100) As Integer

        a(1) = 80
        a(2) = 100
        a(3) = 110
        a(4) = 125
        a(5) = 140
        a(6) = 160
        a(7) = 180
        a(8) = 200
        a(9) = 225
For i = 1 To 8
If a(i) <= D And D <= a(i + 1) Then
End If
Next i



Да легко!
Код: Выделить всё
  Dim v(0 To 2)
  v(0) = "140 to 280"
  v(1) = "300 to 450"
  v(2) = "400 to 500"

А потом анализируй на здоровье!

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 27.04.2006 (Чт) 10:26

Крост писал(а):kminas
Что имелось в виду?
Код: Выделить всё
Dim V(10) as Integer

Тоже самое что:
Код: Выделить всё
Dim V(0 to 10) as Integer


Спорим что нет

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 27.04.2006 (Чт) 10:40

в VB6: если Option Base 0 - то да. если Option Base 0 - то нет.
в VB.NET: да.
Моду создают модоки, а распространяют модозвоны.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.04.2006 (Чт) 10:46

hCORe писал(а):в VB6: если Option Base 0 - то да. если Option Base 0 - то нет.


Наверно имелось ввиду все-таки:
в VB6: если Option Base 0 - то да. если Option Base 1 - то нет.
?
Весь мир матрица, а мы в нем потоки байтов!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.04.2006 (Чт) 10:53

В VB6 по дефоулту Option Base 0
Изображение

kminas
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 31.10.2005 (Пн) 20:17
Откуда: Ростов-на-Дону

Сообщение kminas » 27.04.2006 (Чт) 21:40

uhm писал(а):Для начала, kminas, будь ты компилятором, что бы ты сделал, если бы тебе попалась "команда"
Код: Выделить всё
140<=A(1)<=280

Ответил бы "Да, сэр?" :roll:
Для продолжения, после того, как ты, наконец, изучишь базовый синтаксис VB, тебе стоит также запомнить, что VB будет рассматривать вышеприведенное выражение совсем не так, как ты и Роман-вб себе это представляете, и что в этом случае обязательно использовать логический оператор AND. :D
А я и использовал его см. мой пост от 26.04.2006 (Ср) 21:12
arr (3) >= 300 And arr(3) <= 440
arr (4) >= 400 And arr(4) <= 600
arr (5) >= 550 And arr(5) <= 780
но, говорят, что это тоже бред. Amed спасибо за помощь, но я говорил о бреде, который написан строчкой выше (с оператором AND), это на него не ругается компил., а на Романову строчку как раз и ругается. Ну в общем спасибо всем. Буду изучать, а то столько переворошил литературы и порыл инета. Там и про многоуровневые и про динамические все, а с использованием диапазона - нет. Вот и решил спросить: возможно ли в принципе такое. Поизучаю, а потом, скорее всего, обойду эту проблему, возможно решу тот же вопрос, но с другой стороны, где достаточно будет обычного, точнее штук 10-ти обычных массивов. Надо только посоветоваться со специалистами по оборудованию, а за дискуссию и науку БОЛЬШОЕ СПАСИБО!
Константин

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

Сообщение Amed » 27.04.2006 (Чт) 21:47

kminas, я видел строчку с And :)

Не ругается по простой причине.
Скажем, arr(3) = 350. Тогда arr(3) >= 300 And Arr(3) <= 440 приводится компилятором к виду ((350 >= 300) And (350 <= 440)), далее к (True And True), то есть к True.

Но это получается не меньший бред.
Код: Выделить всё
Private Sub Command1_Click()
Dim arr(100, 100) As Integer
Dim i As Integer
Dim d As Integer
n = txt1.Text

True
True
True
True
True
True

For i = 1 To 7
If arr(i) <= d And d <= arr(i + 1) Then
a (i)
txt1.Text = a(i + 1)
Next i
End Sub

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 27.04.2006 (Чт) 21:51

140<=A(1)<=280

Ну здесь сознаю. Это что-то из прошлой жизни наверное вспомнилось. :P
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

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

Сообщение Kovu » 27.04.2006 (Чт) 21:54

Роман-вб писал(а): Ну здесь сознаю. Это что-то из прошлой жизни наверное вспомнилось. :P

Аааааааааааааааааааа, живой мертвец :lol:
Если всё делать своими ручками, они скоро отвалятся !

След.

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

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

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

    TopList