Дана матрица А размерности (n*n). Определить, является ли она магическим квадратом - VBA

Формулировка задачи:

составить программу, которая работает с любым допустимым набором данных. Входную информацию и результаты счёта вывести на печать, снабдив их соответствующими заголовками. Исходный массив заполнить с помощью датчика случайных чиселДана матрица А размерности (n*n). Определить, является ли она магическим квадратом, т.е. матрицей, в которой суммы элементов в строках и столбцах совпадают. Помогите, пожалуйста!

Код к задаче: «Дана матрица А размерности (n*n). Определить, является ли она магическим квадратом - VBA»

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

6   голосов, оценка 3.667 из 5


СОХРАНИТЬ ССЫЛКУ