10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
1 |
|
Найти максимальный элемент двумерного массива22.05.2013, 10:36. Показов 4760. Ответов 13
Написать функцию или процедуру, осуществляющую заданные вычисления, Нужно найти максимальный элемент двумерного массива и его индексы. Желательно через процедуру, и размер не меньше 16 элементов ( например В (4,4) )
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
22.05.2013, 10:36 |
13 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
22.05.2013, 11:37 |
2 |
Здравствуйте. А как предыдущее? Здали?
1 |
10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
22.05.2013, 11:40 [ТС] |
3 |
Здравствуйте. А как предыдущее? Здали? Ну самый максимальный нужен, если два одинаковых максимальных то я думаю тот который последний, да спасибо, все зачли!
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
22.05.2013, 12:27 |
4 |
|||
Пробуйте, а то я делаю на перекурах. Ну и чтоб преподу не было мало значений, немного увеличил.
1 |
10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
22.05.2013, 12:52 [ТС] |
5 |
Igor_Tr, Огромное СПАСИБО. Но сейчас нет возможности проверить , только вечером ПАРДОН, предполагается что все элементы матрицы различны , и элементы нужно брать из листа…. И матрица В ( 4,4) нужна…
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
22.05.2013, 15:00 |
6 |
Не цитируйте (полностью). Занимает место и отвлекает.
1 |
10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
22.05.2013, 15:46 [ТС] |
7 |
[QUOTE=Igor_Tr;4597018]Не цитируйте (полностью). Занимает место и отвлекает. Да заполняться нужно из листа exel, но числа не нужно самому вводить… Тоесть в ячейках В(4,4) они должны заполняться рандомно ….
0 |
Igor_Tr 4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
||||
22.05.2013, 15:48 |
8 |
|||
Вот Вам так. Тоже самое, только создание матрицы на листе вынесено в другую процедуру. Хотите сами заносить руками — удалите процедуру Sub CreateARRAY() полностью, а из процедуры Sub mMAX() удалите это: Call CreateARRAY Но вот если Ваш препод не хуже меня умеет хохотать (а мне, почему-то, кажется, что так и есть), и даст Вам задачу с матрицей 10’000 * 250 (как мин.), как заполнять будете? Оооо! Я бы хотел на это посмотреть!!! А рандомно — это вот это и есть Randomize.
1 |
10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
22.05.2013, 18:22 [ТС] |
9 |
Примного Вам благодарен Добавлено через 2 часа 27 минут Спасибо Вам конечно но как то вы слишком сильно там намудрили … ))))
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
22.05.2013, 18:32 |
10 |
Там на треть можно код урезать, думаю, но тогда бы Вы точно…. Я, понимаешь, стараюсь, стараюсь, что бы как можно проще, а меня умником обзывают. Караул!!! Спасибо, хоть не «дважды не судимым проффэссором».
1 |
10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
22.05.2013, 18:50 [ТС] |
11 |
[QUOTE=Igor_Tr;4598401]Там на треть можно код урезать, думаю, но тогда бы Вы точно…. Да нет все прекрасно, но от нас такой красоты не требуют ))) ну если что не понравиться я уже сам постараюсь исправить! Еще раз спасибо!»
1 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
22.05.2013, 19:04 |
12 |
Спасибо, развеселил! Это как понимать «не требуют». Типа: «Берем Fiat и делаем Жигуль»?
1 |
10 / 10 / 2 Регистрация: 10.02.2011 Сообщений: 115 |
|
22.05.2013, 21:22 [ТС] |
13 |
Спасибо Типа: «Берем Fiat и делаем Жигуль»? Не это что то вроде берем самое простое, и рационально, коротенько пишем программу!
0 |
4377 / 661 / 36 Регистрация: 17.01.2010 Сообщений: 2,134 |
|
22.05.2013, 21:58 |
14 |
Тогда посоветую — функции листа MAX, INDEX, MATCH. Сначала первая, потом совместно две последние. И все запихать в VBA (если нужно через VBA). Я бы сочинял что-то такое. Будет проще. А в обратную сторону — «Берем Жигуль и делаем Fiat»…. Меня в институте учили — иногда лучше все разломать и сделать снова. Добавлено через 26 минут
1 |
на сайте
http://msoffice.nm.ru/faq/macros/variables.htm#faq548
примеры посмотрел
Sub primer()
Dim iMassiv()
‘Здесь идёт заполнение массива некими данными
iMassiv = [a1:e10].Value
MsgBox Join(Application.Transpose(Application.Index(iMassiv, 0, 1)), vbNewLine), , «Первый столбец :»
‘или так
With Application
MsgBox Join(.Transpose(.Index(iMassiv, 0, 3)), _
Chr(10)), , «Третий столбец :»
End With
With WorksheetFunction
MsgBox Join(.Transpose(.Index(iMassiv, 0, 5)), _
Chr(13)), , «Пятый столбец :»
End With
Dim iAverage#, iMin#, iMax#, iSum#, iProduct
‘ For iCount = 1 To 100
‘ iMassiv(iCount) = Rnd * 1000
‘ Next
With Application
iAverage = .Average(iMassiv)
iMin = .Min(.Transpose(.Index(iMassiv, 0, 3)))
iMax = .Max(.Transpose(.Index(iMassiv, 0, 4)))
iSum = .Sum(iMassiv)
iProduct = .Product(iMassiv)
End With
End Sub
VBA — универсальный язык программирования. С помощью его можно создавать полноценные приложения на Visual Basic, поскольку эти языки — близкие родственники. Создавать программы на нем можно очень быстро и легко, не нужно заботиться об установке и настройке среды программирования и наличии нужных библиотек на компьютере пользователя — MS Office есть практически на любом компьютере. Рассмотрим пример создания программы с использованием двумерных массивов.
Удобство среды VBA заключается в том, что она внедрена в пакет прикладных программ Microsoft Office и, соответственно, является доступной практически на любом ПК, не требует установки дополнительного программного обеспечения.
Немногие учителя используют в своей работе возможности так называемого офисного программирования. С помощью языка VBA можно создавать различные проекты, которые пригодны к использованию, в том числе на уроках информатики.
Массив — набор однотипных переменных, объединенных одним именем и доступных через это имя и порядковый номер переменной в наборе. Организуем в электронных таблицах Excel двумерный массив А, состоящий из 20 х 10 = 200 элементов. Для этого в Excel создадим поле, в котором определим элементы массива целыми случайными числами от 1 до 100.
Рис. 1. Поле двумерного массива в Excel
Перейдём во вкладку Разработчик → Visual Basic. Затем вкладка Insert → Module. Откроется окно для создания программного кода.
Рис. 2. Окно для создания программного кода
Sub Двумерный_Массив()
Dim A(20, 10) As Integer
For i = 1 To 20 ‘Число строк в массиве
For j = 1 To 10 ‘Число столбцов в массиве
A(i, j) = Int(Rnd * 100 + 1) ‘Задание массива целыми числами от 1 до 100
Cells(i, j) = A(i, j)
Next j
Next i
При выполнении программы на активном листе Excel образуется следующее поле:
Рис. 3. Заполнение двумерного массива в Excel
Определим переменные для нахождения максимального, минимального, среднего значения в таблице, кроме того, вычислим сумму и размах таблицы. Все перечисленные переменные целые, кроме действительного среднего значения. Присвоим им соответствующие типы данных: Dim Max, Min, Сумма, Размах As Integer, Среднее As Single.
Используя принцип математической индукции, найдём наибольшее и наименьшее значения таблицы: If A(i, j) >Max Then Max = A(i, j)
If A(i, j) < Min Then Min = A(i, j)
Для вычисления суммы: Сумма = Сумма + A(i, j), среднего значения: Среднее = Сумма / 200, размаха таблицы: Размах = Max — Min. Результат программы будет следующий:
Sub Двумерный_Массив()
Dim A(20, 10) As Integer
Dim Max, Min, Сумма, Размах As Integer, Среднее As Single
Max = 0 ‘Начальное значение Максимального элемента в массиве
Min = 100 ‘Начальное значение Минимального элемента в массиве
Сумма = 0
For i = 1 To 20 ‘Число строк в массиве
For j = 1 To 10 ‘Число столбцов в массиве
A(i, j) = Int(Rnd * 100 + 1) ‘Задание массива целыми числами от 1 до 100
Cells(i, j) = A(i, j)
If A(i, j) >= Max Then Max = A(i, j) ‘Вычисление Максимального элемента в массиве
If A(i, j) <= Min Then Min = A(i, j) ‘Вычисление Минимального элемента в массиве
Сумма = Сумма + A(i, j) ‘Вычисление Суммы
Next j
Next i
Среднее = Сумма / 200 ‘Вычисление Среднего значения
Размах = Max — Min
Range(«A22″).Value = «Max =»
Range(«A23″).Value = «Min =»
Range(«A24″).Value = «Сумма =»
Range(«A25″).Value = «Среднее =»
Range(«A26″).Value = «Размах =»
Range(«B22″).Value = Max
Range(«B23″).Value = Min
Range(«B24″).Value = Сумма
Range(«B25″).Value = Среднее
Range(«B26″).Value = Размах
End Sub
Для создания копии таблицы, сдвинем её на 11 позиций вправо.
‘Создание копии таблицы
For i = 1 To 20
For j = 1 To 10
Cells(i, j + 11) = A(i, j)
Next j
Next i
Наглядно видно, что перед нами копия таблицы.
Рис. 4. Копия таблицы
С этой таблицей мы может выполнять какие-либо действия, например: Заменим все числа кратные 2 на 2, кратные 3 на 3, кратные 5 на 5, остальные на «*». Произведём подсчёт таких чисел. Для этого добавим строки:
‘Обработка таблицы
Dim Кратные2, Кратные3, Кратные5, Звезд As Integer
Кратные2 = 0
Кратные3 = 0
Кратные5 = 0
Звезд = 0
For i = 1 To 20
For j = 1 To 10
If A(i, j) 2 = A(i, j) / 2 Then Cells(i, j + 22) = 2
If A(i, j) 3 = A(i, j) / 3 Then Cells(i, j + 22) = 3
If A(i, j) 5 = A(i, j) / 5 Then Cells(i, j + 22) = 5
If A(i, j) 2 <> A(i, j) / 2 And A(i, j) 3 <> A(i, j) / 3 And A(i, j) 5 <> A(i, j) / 25 Then Cells(i, j + 22) = «*»
If A(i, j) 2 = A(i, j) / 2 Then Кратные2 = Кратные2 + 1 ‘Подсчёт количества чисел кратных 2
If A(i, j) 3 = A(i, j) / 3 Then Кратные3 = Кратные3 + 1 ‘Подсчёт количества чисел кратных 3
If A(i, j) 5 = A(i, j) / 5 Then Кратные5 = Кратные5 + 1 ‘Подсчёт количества чисел кратных 5
If Cells(i, j + 22) = «*» Then Звезд = Звезд + 1 ‘Подсчёт количества «*»
Next j
Next i
Range(«D22″).Value = «Таблица»
Range(«O22″).Value = «Копия Таблицы»
Range(«Z22″).Value = «Обработанная таблица»
Range(«W22″).Value = «Кратные 2″ ‘Вывод результатов
Range(«W23″).Value = «Кратные 3″
Range(«W24″).Value = «Кратные 5″
Range(«W25″).Value = «Кол-во *»
Range(«X22″).Value = Кратные2
Range(«X23″).Value = Кратные3
Range(«X24″).Value = Кратные5
Range(«X25″).Value = Звезд
Рис. 5. Обработанная таблица
Используя офисное программирование можно сформировать у студентов комплекс знаний, умений и навыков, необходимых для решения профессиональных задач в области автоматизации работы с офисным пакетом Microsoft Office.
Литература:
- И. Г. Фризен. Офисное программирование: Учебное пособие / М. Издательско-торговая корпорация «Дашков и К», 2013 г.
- Языки управления приложениями: Учебно-методическое пособие. — М.: Издательский отдел факультета ВМиК МГУ имени М. В. Ломоносова № 05899; 2015 г.
- https://studfiles.net/preview/2897110/
- https://www.intuit.ru/studies/courses/23/23/info
Основные термины (генерируются автоматически): VBA, массив, двумерный массив, Задание массива, Максимальный элемент, Начальное значение, программный код, размах таблицы, Число столбцов, Число строк.
Узнай цену своей работы
Формулировка задачи:
Как найти максимальный Элемент двумерного массива (VBA)
Код к задаче: «Как найти максимальный Элемент двумерного массива?»
textual
Листинг программы
Application.Max(Mass)
Полезно ли:
5 голосов , оценка 4.000 из 5
Похожие ответы
- Найти максимальный элемент двумерного массива
- Как найти среднее арифметическое двумерного массива
- Как найти элемент массива с максимальным значением
- Найти в матрице сумму элементов строки, в которой расположен максимальный элемент матрицы. Excel
- Как найти минимальное и максимальное значения массива и вывести их разность на экран
- Как обменять данные в двух массивах: в одном массиве с 1-ого по 10-ый элемент, в другом с 11–го по 20–ый элемент
- Найти в одномерном массиве максимальный элемент среди элементов с четными индексами
- Найти произведение элементов побочной (главной) диагонали квадратной матрицы
- Как найти последнюю строку с заданным значением?
- Максимальный элемент среди минимальных
- Максимальный элемент массива
Sub p1()
‘ Создание в оперативной памятик компьютера поименованной области — массива dblMatrix.
‘ Двумерный массив называется матрица. Двумерный массив, это когда массив
‘ можно мысленно сравнить с обычной таблицей, у которой есть строки и столбцы.
‘ Double — означает, что в матрице могут быть только числа. Числа могут быть целые и дробные.
‘ Первые 1 to 4 означают, что в матрице будет четыре строки.
‘ Вторые 1 to 4 означают, что в матрице будет четыре столбца.
Dim dblMatrix(1 To 4, 1 To 4) As Double
‘ Создание в оперативной памяти компьютера поименованной области — переменной dblMaxValue.
‘ Переменные используются, чтобы помещать в них какие-нибудь данные.
‘ Long означает, что в переменной могут быть только целые числа (дробные не могут).
Dim dblMaxValue As Double, lngMaxI As Long, lngMaxJ As Long
Dim dblTemporary As Double
Dim i As Long, j As Long
‘1. Заполнение матрицы числами, чтобы было чего анализировать.
‘ Числа берутся из Excel, из активного листа.
‘ For … To … Step — называется циклом. Цикл используется, чтобы делать
‘ одну и ту же команду несколько раз.
For i = 1 To 4 Step 1
For j = 1 To 4 Step 1
dblMatrix(i, j) = Cells(i, j).Value
Next j
Next i
‘2. Поиск в матрице максимального числа.
‘ Сначала за максимальное числ принимается первое число и затем
‘ все остальные числа сравниваются с этим числом. Если какое-то число
‘ окажется больше, то это новое число запоминается и затем уже
‘ с ним сравниваются остальные числа. И т.д.
dblMaxValue = dblMatrix(1, 1)
‘ Запись номера строки и номера столбца.
‘ Эти переменные нужны, чтобы потом поменять местами первый элемент и максимальный элемент.
lngMaxI = 1
lngMaxJ = 1
For i = 1 To 4 Step 1
For j = 1 To 4 Step 1
‘ If … Then … End If — используется для выбора действия.
‘ Если число в матрице больше числа в переменной.
If dblMatrix(i, j) > dblMaxValue Then
‘ Запись в переменные новых данных.
dblMaxValue = dblMatrix(i, j)
lngMaxI = i
lngMaxJ = j
End If
Next j
Next i
‘3. Смена местами первого и максимального элементов.
‘ Чтобы это сделать нужна ещё одна переменная, в которую поместятся данные.
‘ Иначе при обмене данных в одном из элементов данные будут стёрты.
‘ Запись максимального числа в переменную dblTemporary.
dblTemporary = dblMatrix(lngMaxI, lngMaxJ)
‘ Помещение данных из первого элемента в максимальный.
dblMatrix(lngMaxI, lngMaxJ) = dblMatrix(1, 1)
‘ Помещение данных из переменной в первый элемент.
dblMatrix(1, 1) = dblTemporary
‘4. Вывод результата в Excel, справа от исходной матрицы.
For i = 1 To 4 Step 1
For j = 1 To 4 Step 1
‘ + 5 — чтобы данные смещались вправо.
Cells(i, j + 5).Value = dblMatrix(i, j)
Next j
Next i
End Sub
[свернуть]