Предмет: Информатика, автор: grigorimakhonin

Написать программу в VBA. Заданы массивы А(40,40), В(20,20) и С(30,30).Для каждого из заданных массивов определить количество элементов в строке превышающих среднее арифметическое значение элементов массива

Ответы

Автор ответа: Аноним
0
Option Explicit

Function Mean2(A As Variant) As Double
    'Возвращает среднее арифметическое элементов двухмерного массива
    Dim i As Integer, j As Integer, S As Variant, n As Integer
    S = 0
    For i = LBound(A, 1) To UBound(A, 1)
        For j = LBound(A, 2) To UBound(A, 2)
            S = S + A(i, j)
        Next j
    Next i
    n = (UBound(A, 1) - LBound(A, 1) + 1) * (UBound(A, 2) - LBound(A, 1) + 1)
    Mean2 = S / n
End Function

Sub InitMas2(A As Variant, amin As Variant, amax As Variant)
    'Инициализирует элементы двухмерного массива датчиком случайных чисел
    'amin и amax задают диапазон часел для инициализации
    Dim i As Integer, j As Integer, typ As Integer, ik As Integer, rk As Single
    Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer
    imin = LBound(A, 1)
    imax = UBound(A, 1)
    jmin = LBound(A, 2)
    jmax = UBound(A, 2)
    typ = VarType(A) - 8192
    Select Case typ
    Case 2, 3, 17
        ik = Int(amax - amin + 1)
        For i = imin To imax
            For j = jmin To jmax
                A(i, j) = Int(Rnd * ik + amin)
            Next j
        Next i
    Case Else
        rk = amax - amin + 1
        For i = imin To imax
            For j = jmin To jmax
                A(i, j) = Rnd * rk + amin
            Next j
        Next i
    End Select
End Sub

Sub OutMas(A As Variant, prow As Integer, pcol As Integer)
    'Размещает элементы одномерного массива на текущем листе рабочей книги
    'Ячейка в левом верхнем углу имеет адрес (prow,pcol)
    'Размещение идет по колонке
    Dim i As Integer, ic As Integer
    Dim imin As Integer, imax As Integer
    imin = LBound(A, 1)
    imax = UBound(A, 1)
    ic = prow
    For i = imin To imax
        Cells(ic, pcol).Value = A(i)
        ic = ic + 1
    Next i
End Sub

Sub OutMas2(A As Variant, prow As Integer, pcol As Integer)
    'Размещает элементы двухмерного массива на текущем листе рабочей книги
    'Ячейка в левом верхнем углу имеет адрес (prow,pcol)
    Dim i As Integer, j As Integer, ic As Integer, jc As Integer
    Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer
    imin = LBound(A, 1)
    imax = UBound(A, 1)
    jmin = LBound(A, 2)
    jmax = UBound(A, 2)
    ic = prow
    For i = imin To imax
        jc = pcol
        For j = jmin To jmax
            Cells(ic, jc).Value = A(i, j)
            jc = jc + 1
        Next j
        ic = ic + 1
    Next i
End Sub

Sub NumElems2(A As Variant, B() As Integer, pm As Double)
    ' Находит в каждой строке двухмерного массива а количество элементов,
    ' превышающих среднее арифметическое всех элементов этого массива pm
    ' и помещает это количство в одномерный массив b.
    Dim i As Integer, j As Integer, kol As Integer
    Dim imin As Integer, jmin As Integer, imax As Integer, jmax As Integer
    imin = LBound(A, 1)
    imax = UBound(A, 1)
    jmin = LBound(A, 2)
    jmax = UBound(A, 2)
    For i = imin To imax
        kol = 0
        For j = jmin To jmax
            If A(i, j) > pm Then kol = kol + 1
        Next j
        B(i) = kol
    Next i
End Sub

Sub main()
    Const m = 40, n = 20, p = 30
    Dim A(1 To m, 1 To m) As Integer, R(1 To m) As Integer
    Dim B(1 To n, 1 To n) As Single, S(1 To n) As Integer
    Dim C(1 To p, 1 To p) As Integer, T(1 To p) As Integer
    Dim i As Integer, mm As Double
    Randomize Timer
    InitMas2 A, -1000, 1000
    OutMas2 A, 1, 1
    mm = Mean2(A)
    NumElems2 A, R, mm
    OutMas R, 1, m + 2
   
    InitMas2 B, 0, 1800
    OutMas2 B, 42, 1
    mm = Mean2(B)
    NumElems2 B, S, mm
    OutMas S, 42, n + 2
   
    InitMas2 C, -1200, 800
    OutMas2 C, 63, 1
    mm = Mean2(C)
    NumElems2 C, T, mm
    OutMas T, 63, p + 2
End Sub

Особенность программы: позволяет работать с массивами любых допустимых числовых типов. Размер массивов фактически ограничен только размером свободной оперативной памяти компьютера.

Для запуска не забудьте разрешить исполнение макросы на уровне безопасности не выше "Средний" и дать доверенный доступ к проектам VBA.
Приложения:
Автор ответа: Аноним
0
Вы хотя бы комментарии почитали в тексте программы, там по-русски написано про двухмерные массивы.
Автор ответа: Аноним
0
Это VBA, он позволяет работать с динамическими массивами. Их размеры можно менять как угодно в процессе работы.
Автор ответа: grigorimakhonin
0
а точно,зарешался) извините)
Похожие вопросы
Предмет: Химия, автор: BlackSilver2611
Предмет: Русский язык, автор: Аноним
1) Выпиши из текста сложноподчиненное предложение с придаточной дополнительной частью.
2) Выпиши из текста сложноподчиненное предложение с придаточной обстоятельственной частью.

Яд одна из самых давних но наименее изученных угроз исходящих от одежды. Вcтечение многих веков в производстве тканей и косметики применяли токсичные химические вещества, которые по-прежнему продолжают использовать в модной индустрии. В прошлом страх перед ядовитой тканью был так силён что миф об отравленных одеждах существовал во многих культурах и был актуален на протяжении многих исторических периодов. Когда мы проглатываем или вдыхаем яд его действие наступает очень быстро. Отравленная одежда более коварное орудие убийства. Поскольку ткань соприкасается с кожей поры поглощают токсины медленно однако смерть всё равно неминуема. К тому же как древние так и современные культуры не отличали химические отравления от эпидемических заболеваний передаваемых через заражённую одежду. До появления в 19 веке научной токсикологии и криминологии было трудно отличить подлинные истории об отравлениях от вымышленных. В эпоху Возрождения считалось что болезнь это миазмы. Иными словами она передается через дурной воздух и запахи и например густо надушенные перчатки могут защитить своего владельца от эпидемии. Однако перчатки можно пропитать не только духами но и ядом. Королеву Екатерину Медичи обвинили в использовании отравленных перчаток в качестве орудия убийства.
Мы до сих пор используем яды чтобы сделать себя более красивыми. Ботокс растворяют и вводят в кожу лица чтобы убить нервные окончания и разгладить морщины. Можно было бы подумать что свинец в косметике елизаветинских времен остался в далеком прошлом но несмотря на постоянно сменяющиеся тренды в макияже он по сей день является частым ингридиентом наших губных помад.
В эпоху Возрождения королева Елизавета I отбеливала лицо с помощью плотной свинцовой пасты известной как «веницианские белила». Свинец веками использовали в изготовлении косметики потому что он делал цвет лица ровным и матовым и помогал достичь желаемой белизны лица означавшей одновременно свободу от тяжелого физического труда и расовую чистоту. Когда в Викторианскую эпоху медицинская наука наконец стала идти в ногу с косметическими процедурами её свидетельства изобличили одного нью-йоркского производителя новой «фирменной» косметики. В 1869 году один из основателей Американской медицинской ассоциации доктор Льюис Сейр лечил трех молодых пациенток пользовавшихся кремом «Цветение юности» косметической компании Лэйрда от разновидности истощения которое он назвал свинцовым параличом. Рекламные объявления гласили что крем смягчал грубую кожу очищал ее от загара и веснушек и улучшал цвет лица. В действительности он искалечил трёх женщин использовавших примерно по баночке в месяц в течение двух или трех лет. У всех трех женщин парализовало руки. Эта паталогия ныне известная как «свисающая кисть» а также как паралич лучевого нерва может быть вызвана отравлением свинцом.