2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 VBA инициализация массива
Сообщение29.04.2011, 09:24 


29/04/11
14
Екатеринбург
Здравствуйте! Подскажите, пожалуйста, как правильно инициализировать в VBA массив, который состоит из элементов: 12 16 1 1 11 6 8 10 15 9.

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:00 
Заслуженный участник


09/08/09
3438
С.Петербург
  1. Dim a As Variant 
  2. a = Array(12, 16, 1, 1, 11, 6, 10, 15, 9) 

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:03 


29/04/11
14
Екатеринбург
не получилось, вышла ошибка "Invalid outside procedure" и выделен первый элемент массива

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:37 
Заслуженный участник


09/08/09
3438
С.Петербург
Если у Вас глобальный массив, инициализировать его придется в какой-нибудь подпрограмме.

Используется синтаксис Visual Basic
  1. Dim g As Variant, f As Variant
  2.  
  3. Sub init()
  4.     g = [{1, 2, 3}]
  5.     f = [{1, 2; 3, 4; 5, 6}]
  6. End Sub
  7.  
  8. Sub test()
  9.     Dim b As Variant, c As Variant
  10.     Call init
  11.     b = f(1, 2)
  12.     c = g(1)
  13.     MsgBox b
  14.     MsgBox c
  15. End Sub

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:42 


29/04/11
14
Екатеринбург
К сожалению, я не смог до конца понять работу с массивами в этом языке, давайте, я приведу задание:
"Что будет напечатано в окне отладки программы после выполнения процедуры Massiv(), если в исходном массиве записаны следующие числа?
12 16 1 1 11 6 8 10 15 9
Dim A(1 To 10) As Integer
Const n = 10
Private Sub Massiv()
Dim Sa As Integer
Dim i As Byte, k As Byte
For i = 1 To n
Sa = Sa + A(i) / n
Next
k = 0
For i = 1 To n
If A(i) < Sa Then A(i) = Sa: k = k + 1
Next
Debug.Print Sa; k
End Sub"

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:48 
Заслуженный участник


09/08/09
3438
С.Петербург
Что конкретно непонятно?

Если вставляете в сообщение код, пользуйтесь, пожалуйста, тегом syntax:
Код:
[syntax lang=vb lines=n]
Dim A(1 To 10) As Integer
Const n = 10
Private Sub Massiv()
    Dim Sa As Integer
    ...
End Sub
[/syntax]

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:51 


29/04/11
14
Екатеринбург
Не понятно как инициализировать массив с заданными элементами, и ещё инициализация массива 2D с заданными элементами. Инициализация обычного массива понятна, а вот если надо задать конкретные элементы, в учебнике моём этого нет, а в экзамене есть!

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 11:58 
Заслуженный участник


09/08/09
3438
С.Петербург
Чем Вас не устраивает мой ответ здесь?
g - одномерный массив (1, 2, 3), f - двумерный ((1, 2), (3, 4), (5, 6)).

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 12:10 


29/04/11
14
Екатеринбург
Извините, не сообразил, правильно ли я Вас понял:
код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
  1. Dim A As Variant
  2. Sub init()
  3. g = [(12, 16, 1, 1, 11, 6, 8, 10, 15, 9)]
  4. End Sub
  5. Const n = 10
  6. Private Sub Massiv()
  7. Dim Sa As Integer
  8. Dim i As Byte, k As Byte
  9. For i = 1 To n
  10. Sa = Sa + A(i) / n
  11. Next
  12. k = 0
  13. For i = 1 To n
  14. If A(i) < Sa Then A(i) = Sa: k = k + 1
  15. Next
  16. Debug.Print Sa; k
  17. End Sub
  18.  

Так получил ответ 0 0, ответ не верный

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 12:46 
Заслуженный участник


09/08/09
3438
С.Петербург
Есть два варианта:

Если массив описан как Variant, инициализировать его можно константным выражением
Используется синтаксис Visual Basic
Dim A As Variant
Conts n = 10

Sub Test
    A = [{12, 16, 1, 1, 11, 6, 8, 10, 15, 9}]
    ' Или A = Array(12, 16, 1, 1, 11, 6, 8, 10, 15, 9)
   Call Massiv
End Sub

Private Sub Massiv()
    ...
End Sub

Если массив уже размещен (как в Вашем случае), инициализировать придется поэлементно:
Используется синтаксис Visual Basic
Dim A(1 To 10) As Integer
Conts n = 10

Sub Test
    A(1) = 12
    A(2) = 16
    ...
    A(10) = 9
    Call Massiv
End Sub

Private Sub Massiv()
    ...
End Sub

В обоих случаях запускать надо Test

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 12:56 


29/04/11
14
Екатеринбург
уф! получилось! Большое Вам Спасибо!
Подскажите, ещё правильно ли я понимаю, что если бы был двумерный массив то синтаксис был бы таким:
Используется синтаксис Visual Basic
  1. Sub Test
  2.      A(1) = 12, n1
  3.      A(2) = 16, n2
  4.      ...
  5.      A(10) = 9, n10
  6.      Call Massiv
  7. End Sub
  8.  

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 13:05 
Заслуженный участник


09/08/09
3438
С.Петербург
EgorAvtoMMG в сообщении #439921 писал(а):
правильно ли я понимаю, что если бы был двумерный массив то синтаксис был бы таким
Неправильно понимаете. Правильное понимание такое:
Используется синтаксис Visual Basic
Dim A(1 To 10, 1 To 2) As Integer
Sub Test()
    A(1, 1) = 12
    A(1, 2) = n1
    A(2, 1) = 16
    A(2, 2) = n2
    ...
End Sub

 Профиль  
                  
 
 Re: VBA инициализация массива
Сообщение29.04.2011, 13:10 


29/04/11
14
Екатеринбург
Всё понял, большое Спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group