Большой Воронежский Форум
» Программирование>Помогите по VBA
kolya2foll 20:17 03.12.2007
Помогите плз решить задачу, сам я ваще не копенгаген, буду оч благодарен
ICQ 429654585 , или ЛС
даны 2 числовые таблицы А и В каждая размером М*М . Определить, в какой из таблиц произведение отрицательных элементов главной диагонали меньше. Из найденой главной диагонали сформировать линейный массив С, каждый элемент которого затем разделить на среднеарифметическое положительных элементов соответствующей таблицы. Найденное значение напечатать, приобразованный линейный массив С вывести на экран в строку. [Ответ]
kolya2foll 21:59 04.12.2007
что никто не может помочь? [Ответ]
kolya2foll 23:07 04.12.2007
народ есть алгоритм решения кто может превести? [Ответ]
Gregor 00:05 05.12.2007
kolya2foll, Напиши на forum.vingrad.ru. Может там помогут. [Ответ]
kolya2foll 17:18 09.12.2007
Проблемы не решена Помогите!!! [Ответ]
The_God 19:07 09.12.2007
а ты сам то пытался её решить ? пакажи код который ты написал [Ответ]
shuri 19:35 10.12.2007
Public Sub DynArray()
' Объявление переменных и массивов
Dim N As Byte, x As Byte, y As Byte, SumA As Double, SumB As Double, CountA As Integer, CountB As Integer
Dim MinusA As Double, MinusB As Double, CountArray As Integer
Dim a() As Integer
Dim b() As Integer
Dim CA() As Double
Dim CB() As Double
Dim oustr As String
MinusA = 0: MinusB = 0: x = 0: y = 0: z = 0: N = 0
'Запрос размера массива
N = InputBox("Введите число элементов массива (не менее 3-х !!!)")
' Переопределение размерности массивов
ReDim a(N, N)
ReDim b(N, N)
ReDim CA(N)
ReDim CB(N)
'Заполнение массивов случайными числами
For x = 1 To N
For y = 1 To N
a(x, y) = Int((Rnd * 1000) - (Rnd * 1000))
b(x, y) = Int((Rnd * 1000) - (Rnd * 1000))
' Подсчет положительных элементов и их количества
If a(x, y) >= 0 Then
SumA = SumA + a(x, y): CountA = CountA + 1
End If
If b(x, y) >= 0 Then
SumB = SumB + b(x, y): CountB = CountB + 1
End If
'Подсчет произведений отрицательных элементов главной диагонали
If x = y And a(x, y) < 0 And MinusA <> 0 Then
MinusA = MinusA * a(x, y)
Else
MinusA = a(x, y)
End If
If x = y And b(x, y) < 0 And MinusB <> 0 Then
MinusB = MinusB * b(x, y)
Else
MinusB = b(x, y)
End If
If x = y Then
CA(x) = a(x, y)
CB(x) = b(x, y)

End If

Next
Next
y = 0: x = 0: z = 0
oustr = ""
' Проверка условий
' Если значение диагоналей равно
If MinusA = MinusB Then
MsgBox "Значение главных диагоналей равно"
Exit Sub
End If
' Проверка на совпадение (массив то случайный :-),поэтому всякое бывает)
If MinusA >= 0 And MinusB >= 0 Then
MsgBox "Не найдено отрицательных элементов"
Exit Sub
End If
' Если произведение элементов главной диагонали массива А меньше произведение элементов главной диагонали массива В. oustr = "" - просто очистка строкой переменной. Очепятка, должно было быть outstr :-) Лень было менять после 5 литров пива :-) по всему коду
If MinusA < MinusB Then
z = SumA / CountA
For x = 1 To N
CA(x) = CA(x) / z
oustr = oustr + Str(CA(x)) + "|"
Next x
MsgBox oustr, , "Значение массива С (использован массив А)"
End If
y = 0: x = 0: z = 0
oustr = ""
' Если произведение элементов главной диагонали массива B меньше произведение элементов главной диагонали массива A.
If MinusA > MinusB Then
z = SumB / CountB
For y = 1 To N
CB(y) = CB(y) / z
oustr = oustr + Str(CB(y)) + "|"
Next
MsgBox oustr, , "Значение массива С (использован массив В)"
End If

End Sub




P.S. Все делалось и проверялось в Excel 2002! SP2. Наиболее стабильная вещь. [Ответ]
kolya2foll 21:58 10.12.2007
СПАСИБА !!! [Ответ]
Вверх