Страницы: 1
RSS
Определение элементов строк матрицы
 
Дана действительная матрица размера 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

Также тема создана на форуме excel-vba
Изменено: pantaleone48 - 03.02.2016 21:09:26
 
Пройтись циклом по значениям, найти наименьшее/наибольшее, количество и сумму для определения среднего... Что не получается? Организовать просмотр в цикле? Это Вы умеете, судя по коду. Или не умеете, если код написан не Вами.

Сейчас тема ни о чем. Вернее, обо всем: "Работа с матрицей". Ничем не отличается от "Помогите разобраться"
Один вопрос - одна тема - такое правило. И если нужно решить вопрос с просмотром значений матрицы - то это одно, если нужно решить все скопом - то это раздел Работа.
 
"элементов строк" сбивает с толку. Получается просто нужно найти наименьшее/наибольшее, количество и сумму из всех значений матрицы?
 
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
 
pantaleone48, это Вы лучше у того спросите, кто Вам дал это задание ;)
 
Почти решил,но почему то наименьшее значение не находит, а максимальное находит
Код
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

Кнопка оформления кода в сообщении  <...>
Изменено: pantaleone48 - 03.02.2016 21:11:33
 
Посмотрите в моем примере, в каком месте идет окончательная запись. Перед 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
Изменено: pantaleone48 - 03.02.2016 22:26:49
 
А зачем два раза циклы гонять? Сразу и анализировать - занесли случайное, тут же его в оборот...
 
По показанной части кода - должно работать.

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
Страницы: 1
Читают тему
Наверх