КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Массивы в качестве формальных параметров в процедурах и функциях пользователя
Next i Begin Begin Next i Next j Next i Next j End if Else End if Next j 'Если есть элементы из промежутка [20,40], то выводится их произведение, иначе 'выводится сообщение If flag Then Edit6.Text = Str(p) Edit6.Text = "Таких элементов нет" Преобразование двумерных массивов Преобразование матриц заключается, как правило, в изменении порядка следования его элементов без изменения значений самих элементов. Пример 2. Сформировать массив из n*m элементов. Получить новый массив, повернув исходный на: 1800 и 900 по часовой стрелке и на 900 против часовой стрелки. Фрагменты кодов программы: 'Поворот на 1800 градусов For i=1 To n 'Цикл по строкам For j=1 To m 'Цикл по столбцам b(i,j)=a(n-i+1,m-j+1) Next j Next i
'Поворот на 900 градусов по часовой For i=1 To n For j=1 To m b(i,j)=a(n-j+1,i) Next j Next i
'Поворот на 900 градусов против часовой For i=1 To n For j=1 To m b(i,j)=a(j,m-i+1) Next j Next i Пример 3. Сформировать массив из n * m элементов. Зеркально отразить (повернуть) его относительно горизонтальной оси и вертикальной оси. Дополнительных массивов не создавать.. При повороте массива относительно горизонтальной оси внешний цикл по строкам организуется только до целой части от деления n на2(горизонтальной оси массива). Фрагмент кода программы: 'Относительно горизонтальной оси For i=1 To n \ 2 'Цикл по строкам For j=1 To m 'Цикл по столбцам tmp=a(i,j) a(i,j)=a(n-i+1,j) a(n-i+1,j)=tmp При повороте массива относительно вертикальной оси внутренний цикл по столбцам организуется только до целой части от деления m на2 (вертикальной оси массива). Фрагмент кода программы: 'Относительно вертикальной оси For i=1 To n 'Цикл по строкам For j=1 To m \ 2 'Цикл по столбцам tmp=a(i,j) a(i,j)=a(i,m-j+1) a(n-i+1,j)=tmp Пример 4. Сформировать массив из n * m элементов. Преобразовать его в одномерный массив. Первый способ решения этой задачи состоит в том, что для формирования индекса очередного элемента одномерного массива задается независимый счетчик k. Фрагмент кода программы: 'Использование независимого счетчика k для формирования одномерного массива Dim a(1 To 30,1 To 30) As Single 'Описание статического двумерного 'массива, индексы элементов которого будут начинаться с 1 Dim b() As Single 'Описание динамического массива Dim i As Integer,j As Integer,n As Integer,m As Integer ReDim(n*m); 'Задание размера массива b, индексы элементов которого 'будут начинаться с 0!}
k=0 'Инициализация независимого счетчика For i=1 To n Do 'Цикл по строкам For j=1 To m Do 'Цикл по столбцам b(k)=a(i,j) k=k+1 'Значение счетчика увеличивается на 1 End; Второй способ решения этой задачи состоит в том, что индекс очередного элемента одномерного массива вычисляется по формуле: b (m * (i- 1 ) + j- 1) = a (i, j). Фрагмент кода программы: 'Использование независимого счетчика k для формирования одномерного массива Dim a(1 To 30,1 To 30) As Single 'Описание статического двумерного 'массива, индексы элементов которого будут начинаться с 1 Dim b() As Single 'Описание динамического массива Dim i As Integer,j As Integer,n As Integer,m As Integer ReDim(n*m); 'Задание размера массива b, индексы элементов которого 'будут начинаться с 0! For i=1 To n Do 'Цикл по строкам For j=1 To m Do 'Цикл по столбцам b((i-1)*m +j-1)=a(i,j) Типовые задачи с квадратными матрицами К таким задачам наряду с предыдущими относятся: вычисление суммы, произведения, количества элементов, среднеарифметического, максимума, минимума элементов на главной и побочной диагонали, а также выше и ниже диагоналей в задачах с квадратными матрицами. Способ отбора нужных элементов для решения такого рода задач заключается в следующем:
Для обработки элементов, расположенных на диагоналях, достаточно одного цикла. Для обработки элементов над или под диагоналями потребуются вложенные циклы, причем можно либо заложить во внутреннем цикле условие проверки индексов по приведенным формулам, либо организовать циклы так, чтобы рассматривать только требуемые элементы. Пример 5. Двумерный массив n * n заполнен случайными целыми числами из диапазона [-40,40]. Определить: - минимальное значение для элементов, расположенных на главной диагонали, - максимальное значение для элементов, расположенных на побочной диагонали; - произведение элементов, расположенных выше побочной диагонали; среднее арифметическое элементов, расположенных ниже главной диагонали. Фрагмент программного кода: min=a(1,1) 'Первый на главной диагонали max=a(1,n) 'Первый на побочной диагонали For i=1 To n 'Цикл по строкам 'Определение минимума на главной диагонали If a(i,i) < min Then min= a(i,i) 'Определение максимума на побочной диагонали If a(i,n-i+1) > max Then max=a(i, n-i+1) 'Нахождение произведения элементов расположенных выше побочной диагонали p=1 For i=1 To n 'Цикл по строкам For j=1 To n 'Цикл по столбцам If i < n-j+1 Then p=p* a(i,j) 'Нахождение суммы и количества элементов ниже главной диагонали s=0: kol=0 For i=1 To n 'Цикл по строкам For j=1 To n 'Цикл по столбцам If i > j Then s=s+ a[i,j]: kol=kol+1 'Среднее арифметическое элементов расположенных ниже главной диагонали sr=s / kol Пример 6. Сформировать массив из n * n элементов. Зеркально отразить (повернуть) его относительно главной и побочной диагоналей. Дополнительных массивов не создавать. При решении задачи внешний и внутренний циклы организуются так, чтобы проход элементов осуществлялся только до нужной диагонали: - до i при повороте относительно главной диагонали, - до n - i при повороте относительно побочной диагонали. В противном случае, смена произойдет дважды и все останется на своих местах. Фрагменты кодов программы: 'Зеркальноe отражение массива относительно главной диагонали For i=1 To n 'Цикл по строкам For j=1 To i 'Цикл по столбцам tmp=a(i,j) a(i,j)=a(j,i) a(j,i)=tmp Next j Next i
'Зеркальноe отражение массива относительно побочной диагонали For i=1 To n-1 'Цикл по строкам For j=1 To n-i 'Цикл по столбцам tmp=a(i,j) a(i,j)=a(n-j+1,n-i+1) a(n-j+1,n-i+1)=tmp Next j Next i Если в качестве формальных параметров в процедурах и функциях используются массивы, то в VB их тип в заголовке процедур или функций можно объявить как Variant, или вообще не указывать, т.к. этот тип итак принимается по умолчанию. Пример. Вычислить Фрагмент программного кода: Option Explicit 'Включение режима, при котором запрещается использовать 'необъявленные переменные Dim x() As Integer 'Описание динамического массива a Dim y() As Integer 'Описание динамического массива b Dim n As Integer 'Процедура заполнения массива m0, m1, …,mn-1 случайными числами из промежутка [a,b]. 'Формальные параметры: промежуток [а,b], n – количество элементов массива, 'm - массив Private Sub Vd(a As Integer,b As Integer,n As Integer, m ) Dim i As Integer Randomize Text2.Text = "" 'Очистка текстового окна Text2 For i = 0 To n – 1 'Перебор элементов ' Заполнение массива случайными числами из промежутка[a,b] m(i) = Int((b - a + 1) * Rnd + a) 'Вывод элементов массива в текстовое поле Text2 Text2.Text = Text2.Text + " " + Str(m(i)) Next i
Дата добавления: 2014-11-16; Просмотров: 598; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |