Другие языки программирования и технологии

QBASIC сформировать мосив состоящая С М-строк,и М-столбцов

(задач по информатике и программирования)QBASIC сформировать мосив состоящая С М-строк,и М-столбцов,1)на левой диоганали-элемент равен сумме номера строки и столбца. 2)на правой главной диогонали значение элементов равны разности номера столбца и строки. 3)середина вертикали -значение элементов равны разности удвоенного предложения номера строки и столбца. 4)на середине элемент горизонтали равны удвоенному произведению номера столбца и номера строки. 5)на пересечение диогонали сума номера строки ,номера столбца.а все остальные элементы -равны произведению номера строки и номера столбца.(задач по информатике и программирования)QBASIC
Тоже нетрудно
Dim M As Integer, A() As Double
Print "Введите M: "; : Input M
Print
Redim A(M, M)
For i = 1 To M
For j = 1 To M
If i = j Then
A(i, j) = i + j ' Левая диагональ
ElseIf j = M - i + 1 Then
A(i, j) = j - i ' Правая диагональ
Rem Как я понял, середина вертикали - это строка с номером (М+1)/2, причем М должно быть нечетным
Rem Например, М = 7, а середина вертикали = 4 (3 строки сверху и 3 строки снизу)
ElseIf (M mod 2 = 1) And (i = (M + 1)/2) Then
A(i, j) = 2 * i - j
Rem Тоже самое про середину горизонтали
ElseIf (M mod 2 = 1) And (j = (M + 1)/2) Then
A(i, j) = 2 * i * j
ElseIf (i = (M + 1)/2) And (j = (M + 1)/2) Then
A(i, j) = i + j ' Пересечение диагоналей
Else
A(i, j) = i * j
End If
Print
Next j
Next i
End

Можно слегка упростить, учитывая, что в точке пересечения диагоналей правило такое же, как на левой диагонали - сумма строки и столбца. Надо просто этот пункт проверять последним. Тогда будет так:
Dim M As Integer, A() As Double
Print "Введите M: "; : Input M
Print
Redim A(M, M)
For i = 1 To M
For j = 1 To M
If j = M - i + 1 Then
A(i, j) = j - i ' Правая диагональ
Rem Как я понял, середина вертикали - это строка с номером (М+1)/2, причем М должно быть нечетным
Rem Например, М = 7, а середина вертикали = 4 (3 строки сверху и 3 строки снизу)
ElseIf (M mod 2 = 1) And (i = (M + 1)/2) Then
A(i, j) = 2 * i - j
Rem Тоже самое про середину горизонтали
ElseIf (M mod 2 = 1) And (j = (M + 1)/2) Then
A(i, j) = 2 * i * j
ElseIf i = j Then
A(i, j) = i + j ' Левая диагональ, и в том числе точка пересечения диагоналей
Else
A(i, j) = i * j
End If
Print
Next j
Next i
End

В обеих программах, если М четное, то середина вертикали и середина горизонтали не существуют,
при М = 8 строка = 4 - это не середина вертикали, потому что сверху 3 строки, а снизу 4 строки.
Поэтому, если M mod 2 = 0, то эти пункты будут пропущены, а элементы строки и столбца номер M/2 будут отнесены к "прочим"
Сергей Горохов
Сергей Горохов
53 827
Лучший ответ