Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: одномерные и двумерные массивы Добавлено: 22.05.09 19:33  

Автор вопроса:  leo21
Задача №1 на двумерные массивы:
Расположить элементы данного массива в обратном порядке (первый элемент меняется с последним, второй - с предпоследним и т.д. до середины; если массив содержит нечетное количество элементов, то средний остается без изменения).
Задача №2 на одномерные массивы:
Каждое из N предприятий(N задано) выпускает 5 видов товаров (одинаковых для всех предприятий).Известны названия предприятий и товаров ,стоимость единицы и общий объем выпуска товаров каждого вида на каждом предприятии.Для каждого предприятия определить вид произведенного товара с максимальной общей стоимостью.
Помогите пожалуйста люди добрые!!!
Алгоритм на первую задачу есть тока я в нем ничего не понимаю(((:
Sub поменять(ByRef массив, ByVal первое, ByVal второе)
временное = массив(первое)
массив(первое) = массив(второе)
массив(второе) = временное
End Sub
 
Sub тест()
Dim исх_массив(9) 'объявляем массив
'просто заполняем числами попорядку
For счетчик = 0 To 9
  исх_массив(счетчик) = счетчик
Next счетчик
 For счетчик = 0 To UBound(исх_массив) \ 2
  Call поменять(исх_массив, счетчик, UBound(исх_массив) -счетчик)
Next счетчик
End Sub

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 22.05.09 21:04
если ты в ТАКОМ алгоритме ничего не понимаешь, то это ппц

Ответить

Номер ответа: 2
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #2
Добавлено: 23.05.09 11:52
  1. Sub поменять(ByRef массив, ByVal первое, ByVal второе)
  2. временное = массив(первое)
  3. массив(первое) = массив(второе)
  4. массив(второе) = временное
  5. End Sub
  6.   
  7. Sub тест()
  8. Dim исх_массив(9) 'объявляем массив
  9. 'просто заполняем числами попорядку
  10. For счетчик = 0 To 9
  11.   исх_массив(счетчик) = счетчик
  12. Next счетчик
  13.  For счетчик = 0 To UBound(исх_массив) \ 2
  14.   Call поменять(исх_массив, счетчик, UBound(исх_массив) -счетчик)
  15. Next счетчик
  16. End Sub

Ответить

Номер ответа: 3
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 23.05.09 12:15
Эм... Разжую как смогу. Если чо, считаю процедура=функция=подпрограмма

Первые пять строк - это объявление подпрограммы(функции) с именем "поменять" и тремя аргументами (массив, первое, второе). После такого объявления ее можно будет просто вызывать из др. подпрограмм (как в строке 14).

Аргумент "массив" объявлен как ByRef - это значит, что в функцию "поменять" при ее вызове передается не сам массив, а ссылка на него. И если внутри функции обращаться к этой ссылке, то обращение на самом деле будет происходить к тому, что ты подставил вместо аргумента "массив".

Вторые два аргумента объявлены как ByVal - здесь все проще - тупо передаются значения переменных. Что значит передаются? Более простой пример:

  1.  
  2. sub sum(ByRef c, ByVl a, ByVal b)
  3. c = a + b
  4. end sub
  5. sub main()
  6. call sum (i,2,3)
  7. print i
  8. end sub


Функция Sum принимает три аргумента - ссылку на переменную, в которую нужно записать результат и два значения, которые нужно сложить. В результате вызова этой подпрограммы в процедуре main переменная i станет равна 5, так как в "Sum" написано "c = a + b". Вместо "с" подставляется то, что указано при вызове подпрограммы, тобишь i. Вместо a - 2, а вместо b - 3.

  1. sub sum(ByRef c, ByVl a, ByVal b)

  1. call sum (i,2,3)

Call - это тупо вызов подпрограммы, а Sub - объявление. Конец подпрограммы обозначаетя строкой End Sub.

Вернемся к нашим баранам.

Строка 7 объявляет подпрограмму тест(), которая является главной и вызывается при запуске программы.
Строка 8 объявляет массив из 10 элементов (с 0 по 9)
Строки 10, 11, 12 - это заполнение массива числами от 0 до 9 (соответствуют номерам элементов массива).

Строка 13
В Basic встроена подпрограмма UBound, которая принимает единственный аргумент - массив, а возвращает его верхнюю границу (в нашем случае - 9). Оператор "\" это деление нацело ("/" - обычное деление).
9 / 2 = 4,5
9 \ 2 = 4

Т.е. эту строку можно записать как
  1. For счетчик = 0 To 4


В программе используется Ubound затем, что если массив объявить не из 10 элементов, из, скажем 20, не пришлось править вручную куски программы.

То есть внутри цикла (единственная 14 строчка) вместо "счетчик" будут последовательно подставлены числа 0,1,2,3 и 4.


Call поменять(исх_массив, 0, 9 - 0)
Call поменять(исх_массив, 1, 9 - 1)
Call поменять(исх_массив, 2, 9 - 2)
Call поменять(исх_массив, 3, 9 - 3)
Call поменять(исх_массив, 4, 9 - 4)

А именно

Call поменять(исх_массив, 0, 9)
Call поменять(исх_массив, 1, 8)
Call поменять(исх_массив, 2, 7)
Call поменять(исх_массив, 3, 6)
Call поменять(исх_массив, 4, 5)
Каждая строка вызывает процедуру "поменять", и передает ей ссылку на массив, с которым мы работаем "исх_массив". Процедура "поменять" меняет местами значения двух элементов массива с указанными номерами ( 0, 9), 1, 8)). То есть получается, что сначала меняются местами два крайних элемента массива, затем второй с начала и второй с конца, затем третий с начала и третий с конца и т. д. В результате массив просто перевернется.

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 23.05.09 13:35
Серьезно, обстоятельно... добавить нечего...

Ответить

Номер ответа: 5
Автор ответа:
 leo21



Вопросов: 1
Ответов: 1
 Профиль | | #5 Добавлено: 23.05.09 15:20
Помогите пожалуйста решить задачу №2

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам