Дана матрица А размерности (n*n). Определить, является ли она магическим квадратом - VBA
Формулировка задачи:
составить программу, которая работает с любым допустимым набором данных. Входную информацию и результаты счёта вывести на печать, снабдив их соответствующими заголовками. Исходный массив заполнить с помощью датчика случайных чисел
Дана матрица А размерности (n*n). Определить, является ли она магическим квадратом, т.е. матрицей, в которой суммы элементов в строках и столбцах совпадают.
Помогите, пожалуйста!Решение задачи: «Дана матрица А размерности (n*n). Определить, является ли она магическим квадратом»
textual
Листинг программы
Sub vfhvfhMQ55()
Dim a()
Dim i&, j&, N&, M&
'--------------------
ActiveSheet.UsedRange.EntireRow.Delete
'вводим данные
On Error Resume Next
N = Int(InputBox("Введите количество строк", "Ввод данных", 5))
M = Int(InputBox("Введите количество столбцов", "Ввод данных", 5))
If N <> M Then
Err.Clear
MsgBox "Введите одинаковую размерность N = M", vbInformation
Exit Sub
End If
'наполняем массив случайными числами от 1 до 30
ReDim a(1 To N, 1 To M)
Randomize
For i = 1 To N
For j = 1 To M
a(i, j) = Int(30 * Rnd) + 1
Next
Next
Cells(2, 1).Resize(N, M) = a
'считаем суммы по каждому столбцу
Cells(2, 1).Resize(N, M) = a
For j = 1 To M
For i = 1 To N
s = s + a(i, j)
Next
With Cells(N + 2, j)
.Value = s
.Font.Bold = True
.Font.Italic = True
.Font.Color = vbRed
End With
s = 0
Next
'считаем суммы по каждой строке
Cells(2, 1).Resize(N, M) = a
For i = 1 To N
For j = 1 To M
p = p + a(i, j)
Next
With Cells(i + 1, M + 1)
.Value = p
.Font.Bold = True
.Font.Italic = True
.Font.Color = vbBlue
End With
p = 0
Next
'считаем сумму эл-тов главной диагонали
q = 0
Cells(2, 1).Resize(N, M) = a
For i = 1 To N
j = i
Cells(i + 1, j).Interior.Color = vbGreen
q = q + a(i, j)
Next
Cells(N + 2, M + 1) = q
Cells(N + 2, M + 1).Font.Color = vbGreen
'считаем сумму эл-тов побочной диагонали
v = 0
Cells(2, 1).Resize(N, M) = a
For i = 1 To N
j = N - i + 1
Cells(i + 1, j).Interior.Color = vbYellow
v = v + a(i, j)
Next
Cells(1, M + 1) = v
Cells(1, M + 1).Font.Color = vbGreen 'жёлтый не смотрится!
'проверка по столбцам через MsgBox
For j = 1 To M
i = N + 2
If Cells(N + 2, 1) <> Cells(N + 2, j) Then
MsgBox "Первый этап: суммы по столбцам не совпадают!"
Exit Sub
End If
Next
'проверка по строкам через MsgBox
For i = 1 To N
j = M + 1
If Cells(2, M + 1) <> Cells(i, M + 1) Then
MsgBox "Второй этап: суммы по строкам не совпадают!"
Exit Sub
End If
Next
'проверка по диагоналям через MsgBox
For i = 1 To 2
j = M + 1
If Cells(1, M + 1) <> Cells(N + 2, M + 1) Then
MsgBox "Третий этап: суммы по диагоналям не совпадают!"
Exit Sub
Else: Cells(1, M + 1) = Cells(N + 2, M + 1)
MsgBox "С Вас бутылка! Магический квадрат!"
End If
Next
End Sub