Дана действительная матрица размера m х n. Определить числа b1, …, bm, равные соответственно: a) наименьшим значениям элементов строк; b) значениям средних арифметических элементов строк; c) разностям наибольших и наименьших значений элементов строк.
Матрицу с вводом количества столбцов и строк заполняющиеся рандомными числами сделал, но дальше не знаю как делать. Буду благодарен, если хотя бы опишите логику или примерное решением.
Код
Sub Задача3()
Dim n As Long, m As Long
Dim i As Long, j As Long
Dim A() As Double
n = InputBox("Введите n")
m = InputBox("Введите m")
ReDim A(1 To n, 1 To m)
For i = 1 To n
For j = 1 To m
A(i, j) = 10 * Rnd + 1
Next j
Next i
End Sub
Пройтись циклом по значениям, найти наименьшее/наибольшее, количество и сумму для определения среднего... Что не получается? Организовать просмотр в цикле? Это Вы умеете, судя по коду. Или не умеете, если код написан не Вами.
Сейчас тема ни о чем. Вернее, обо всем: "Работа с матрицей". Ничем не отличается от "Помогите разобраться" Один вопрос - одна тема - такое правило. И если нужно решить вопрос с просмотром значений матрицы - то это одно, если нужно решить все скопом - то это раздел Работа.
A(i,j) - обычно размерность i в массиве (вертикальное расположение) - "строки", размерность j (расположение по горизонтали)- "столбцы"
Для хранения промежуточных значений добавить переменные. После получения матрицы опять огранизовать цикл:
Код
For i = 1 To n
For j = 1 To m
If A(i,j)<lMin Then lMin=A(i,j)
.... lMAx
Next j
' здесь разница мин и макс - это и есть значение в этой строке, записать куда-нибудь.
Next i
Почти решил,но почему то наименьшее значение не находит, а максимальное находит
Код
Sub Задача3()
Dim n, m As Integer
Dim i, j As Integer
Dim S, B As Integer
Dim A() As Integer
n = InputBox("Введите n")
m = InputBox("Введите m")
ReDim A(1 To n, 1 To m)
For i = 1 To n
For j = 1 To m
A(i, j) = 10 * Rnd + 1
Next j
Next i
Worksheets("Лист1").Cells(1, 1).Resize(n, m).Value = A
For i = 1 To n
For j = 1 To m
If A(i, j) < Min Then Min = A(i, j)
If A(i, j) > Max Then Max = A(i, j)
B = A(i, j) + B
Next j
Next i
S = Max - Min
B = B / (n * m)
MsgBox "Наименьшее значение = " & Min & " Среднее арифметическое = " & B & " Разница наибольшего и наименьшего = " & S
End Sub
Посмотрите в моем примере, в каком месте идет окончательная запись. Перед Next i, т.е. перед завершением витка цикла по строкам. Записали, перешли к следующей строке. В Вашем последнем коде MsgBox покажет данные для последней строки.
Для записи значений построчно можно расширить массив по горизонтали и записывать данные мин, макс, среднее правее матрицы: ReDim Preserve A(1 To n, 1 To m+3) ReDim Preserve - изменение размерности массива с сохранением значений. Или создать отдельный массив для записи вычисленных значений
Если считать данные каждой строки, все равно в наименьшее значение ничего не заносится
Код
For i = 1 To n
For j = 1 To m
If A(i, j) < Min Then Min = A(i, j)
If A(i, j) > Max Then Max = A(i, j)
B = A(i, j) + B
Next j
S = Max - Min
B = B / m
MsgBox "Наименьшее значение " & i & " строки = " & Min & " Среднее арифметическое " & i & " строки = " & B & " Разность наибольшего и наименьшего " & i & " строки= " & S
Next i
1. Прошу вернуться в сообщение и убрать "цитату". Цитировать можно, но когда это нужно, и цитировать, а не копировать бессмысленно. Об этом в Правилах форума написано. 2. Есть там и о том, что желательно показывать файл-пример. У меня, например, уже нет желания опять писать на коленке. Создавать пример вместо Вас - тем более.
Цитата
А зачем два раза циклы гонять?
Задание учебное, легче разобраться. А потом хотел предложить объединить в одной конструкции.
Sub Задача3()
...
...
Worksheets("Лист1").Cells(1, 1).Resize(n, m).Value = A
With WorksheetFunction
For i = 1 To n
Min = .Min(Application.Index(A, i)): Max = .Max(Application.Index(A, i)): B = .Average(Application.Index(A, i))
MsgBox "Строка " & i & ":" & Chr(10) & "Мин " & Min & Chr(10) & "Макс " & Max & Chr(10) & "Макс - Мин " & Max - Min & Chr(10) & "Ср. арифм. " & B
Next i
End With
End Sub