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