Дана матрица А размерности (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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д