Junte todos os trechos de código solicitados nos exercícios a seguir em um código só, completo, conforme o que se pede.
Escreva a função main de um programa que utiliza a função anterior para determinar se uma matriz é um quadrado mágico. Na main, o programa deve:
- Inicializar uma matriz diretamente no código, como abaixo:
int matriz [3] [3]
;
- Chamar a função criada em a), considerando a matriz definida no item anterior.
- Mostrar na tela uma mensagem dizendo se a matriz é um quadrado mágico ou não.
Escreva a função main de um programa que utiliza a função anterior para determinar se uma matriz é um quadrado mágico. Na main, o programa deve:
int matriz [3] [3]
Passo 1
Beleza, o enunciado pede pra gente juntar tudo num programa só em C, usando uma função já feita (que verifica se uma matriz é quadrado mágico) e escrever a função
main
que:- Declara uma matriz 3×3 com valores fixos.
- Chama essa função de verificação.
- Imprime na tela se é ou não um quadrado mágico.
Conteúdo da matéria:
- Declaração e inicialização de arrays bidimensionais em C.
- Criação e chamada de funções.
- Uso de loops (
for
) pra percorrer matrizes. - Condicionais (
if/else
) e saída na tela (printf
).
O que vamos precisar:
- O código da função que verifica quadrado mágico (parte a).
- A função
main
que cria a matriz, chama essa função e imprime o resultado.
Passo 2
Antes da
main
, precisamos recapitular como funciona a função que diz se uma matriz de tamanho n
é quadrado mágico. A ideia geral:- Calcular a soma da primeira linha, que vai ser nossa “soma-alvo”:
2. Verificar para cada linha:
- Verificar para cada coluna
:
4. Verificar as duas diagonais:
Se tudo casar, devolve 1 (verdadeiro); senão, 0 (falso).
Passo 3
Vamos traduzir isso em código C. Como estamos usando tamanho fixo (3×3), podemos declarar a função assim:
#include <stdio.h>
int ehQuadradoMagico(int matriz[][3], int n) {
int i, j;
int somaAlvo = 0;
// 1) soma da primeira linha
for (j = 0; j < n; j++) {
somaAlvo += matriz[0][j];
}
// 2) verificar cada linha
for (i = 1; i < n; i++) {
int somaLinha = 0;
for (j = 0; j < n; j++) {
somaLinha += matriz[i][j];
}
if (somaLinha != somaAlvo) return 0;
}
// 3) verificar cada coluna
for (j = 0; j < n; j++) {
int somaColuna = 0;
for (i = 0; i < n; i++) {
somaColuna += matriz[i][j];
}
if (somaColuna != somaAlvo) return 0;
}
// 4) diagonais
int somaDiag1 = 0, somaDiag2 = 0;
for (i = 0; i < n; i++) {
somaDiag1 += matriz[i][i];
somaDiag2 += matriz[i][n-1-i];
}
if (somaDiag1 != somaAlvo || somaDiag2 != somaAlvo) return 0;
// se passou em tudo
return 1;
}
Passo 4
Agora, a função
main
que o enunciado pede:- Inicializa
int matriz[3][3] = {{8,0,7}, {4,5,6}, {3,10,2}};
- Chama
ehQuadradoMagico(matriz, 3)
- Mostra na tela “É quadrado mágico!” ou “Não é quadrado mágico!”
Resposta
#include <stdio.h>
// Função que verifica se uma matriz n×n é quadrado mágico
int ehQuadradoMagico(int matriz[][3], int n) {
int i, j;
int somaAlvo = 0;
// 1) soma da primeira linha
for (j = 0; j < n; j++) {
somaAlvo += matriz[0][j];
}
// 2) verificar cada linha
for (i = 1; i < n; i++) {
int somaLinha = 0;
for (j = 0; j < n; j++) {
somaLinha += matriz[i][j];
}
if (somaLinha != somaAlvo) return 0;
}
// 3) verificar cada coluna
for (j = 0; j < n; j++) {
int somaColuna = 0;
for (i = 0; i < n; i++) {
somaColuna += matriz[i][j];
}
if (somaColuna != somaAlvo) return 0;
}
// 4) diagonais
int somaDiag1 = 0, somaDiag2 = 0;
for (i = 0; i < n; i++) {
somaDiag1 += matriz[i][i];
somaDiag2 += matriz[i][n-1-i];
}
if (somaDiag1 != somaAlvo || somaDiag2 != somaAlvo) return 0;
return 1;
}
int main() {
// Inicializa a matriz do enunciado
int matriz[3][3] = {
{8, 0, 7},
{4, 5, 6},
{3, 10, 2}
};
// Chama a função que verifica quadrado mágico
if (ehQuadradoMagico(matriz, 3)) {
printf("É quadrado mágico!\n");
} else {
printf("Não é quadrado mágico!\n");
}
return 0;
}