Другие языки программирования и технологии
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 будут отнесены к "прочим"
Dim M As Integer, A() As Double
Print "Введите M: "; : Input M
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
Next j
Next i
End
Можно слегка упростить, учитывая, что в точке пересечения диагоналей правило такое же, как на левой диагонали - сумма строки и столбца. Надо просто этот пункт проверять последним. Тогда будет так:
Dim M As Integer, A() As Double
Print "Введите M: "; : Input M
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
Next j
Next i
End
В обеих программах, если М четное, то середина вертикали и середина горизонтали не существуют,
при М = 8 строка = 4 - это не середина вертикали, потому что сверху 3 строки, а снизу 4 строки.
Поэтому, если M mod 2 = 0, то эти пункты будут пропущены, а элементы строки и столбца номер M/2 будут отнесены к "прочим"
Похожие вопросы
- Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [10;90]
- Си# Найти седловые точки матрицы седловой точкой называется элемент, являющийся миним в строке и максим в столбце
- Excel. Строки в столбце поставить в обратном порядке
- qBasic
- помогите написать простые программы на Qbasic
- Нужно на с++ написать программу по заданию:даны две строки, содержащие не более 100 символов. Строки состоят из слов, р
- Дана строка, состоящая из слов, разделенных символами, которые перечислены во второй строке. Показать все слова На С++
- Как в Excel сделать таблицу из ячеек, которые находятся только в четных строках, а значения в нечетных доп столбцом?
- Дана строка символов. Признак конца строки "\n" (перевод строки). Строка состоит из слов, разделенных пробелами. Вывести
- Косинус в qbasic