Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > проблеммы с реализацией сортировки массива


Автор: Роман 7.6.2005, 18:31
Добрый день. Столкнулся со следующей проблеммой. имеется двухмерный массив размером NxN (квадратная матрица). необходимо найти сумму прямой и обратной диагонали. с прямой диагональю все просто, что-то в таком духе:
for i = 0 to n
for j = 0 to n
if i=j then
sum=sum+A(i,j)
end if
next j
next i
Проблемма с обратной диагональю. Каким образом можно найти сумму обратной диагонали.

Автор: ChofCh 7.6.2005, 20:30
smile Не обижайся, просто зачем в твоем коде нужна переменная j? Ну да ладно. Собственно, я бы решал эту задачу следущим образом:
Код

const n=9 'n-количество строк/столбцов -1 (т.е. данный пример работает с матрицей 10х10)
Sub main
Dim A(0 to n, 0 to n) As Double
Dim S As Double, i as long
'Здесь мы матрицу чем-нибудь заполняем
S=0
For i=0 to n
S=S+A(i,i)
Next i
MsgBox "Сумма элементов на прямой диагонали: " & CStr(S)
S=0
For i=0 to n
 S=S+A(i,n-i)
Next i
MsgBox "Сумма элементов на обратной диагонали: " & CStr(S)
End Sub


Автор: cardinal 7.6.2005, 20:40
Код

Option Explicit

Private Sub Command1_Click()
Dim i As Integer
Dim sum1 As Integer ' прямая диагональ
Dim sum2 As Integer ' обратная диагональ

' матрица размером 4x4
Dim matrix(1 To 4, 1 To 4) As Integer

matrix(1, 1) = 8
matrix(1, 2) = 6
matrix(1, 3) = 3
matrix(1, 4) = 1

matrix(2, 1) = 5
matrix(2, 2) = 3
matrix(2, 3) = 2
matrix(2, 4) = 0

matrix(3, 1) = 4
matrix(3, 2) = 9
matrix(3, 3) = 7
matrix(3, 4) = 8

matrix(4, 1) = 3
matrix(4, 2) = 0
matrix(4, 3) = 1
matrix(4, 4) = 2

For i = 1 To 4
    sum1 = sum1 + matrix(i, i)
    sum2 = sum2 + matrix(i, 5 - i)
Next

End Sub

Добавлено @ 20:41
ChofCh, ага smile

Автор: Voldemar2004 8.6.2005, 20:35
Код

Option Explicit

Private Sub Command1_Click()
Dim Matrix(4, 4) As Integer
Dim i As Integer, j As Integer
Dim sum As Integer
Dim reciprocal As Integer

Print

For i = 0 To 4 ' мой код ;=)
    For j = 0 To 4
    Randomize
    Matrix(i, j) = Int(Rnd * -100)
    Print "  "; Matrix(i, j);
    Next j
    Print
Next i

For i = 0 To 4 'твой код, Романыч ;=)
For j = 0 To 4
If i = j Then
sum = sum + Matrix(i, j)
reciprocal = reciprocal + Matrix(i, 4 - i) ' и код cardinal'a ;=)
End If
Next j
Next i

Print "Сумма прямой диагонали = " & sum ' наш результат ;=))
Print "Сумма обратной = " & reciprocal
' итого: сообразили на троих, что называется ;=)))
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)