Ejercicio 04 — Lee una matriz 4x4 e imprime el valor maximo y su posicion

Dificultad: amarillo · Módulo 06 (Matrices (arrays 2D))

Enunciado

Lee una matriz 4x4 e imprime el valor maximo y su posicion.

Diagrama de flujo

Diagrama de flujo del ejercicio 04

Cómo se resuelve

Buscar el máximo de una matriz es el mismo “campeón provisional” que ya usaste con arrays de una dimensión, pero recorriendo una cuadrícula. Guardas un candidato a máximo y, cada vez que encuentras algo mayor, lo destronas. La novedad es que aquí, además del valor, nos interesa dónde está, así que llevamos tres variables a la vez:

int max = m[0][0];
int fila_max = 0, col_max = 0;

El doble bucle visita todas las celdas y, en cada una, un if (m[i][j] > max) comprueba si hemos encontrado un nuevo campeón. Cuando eso pasa, actualizamos las tres variables juntas: el valor max, y su posición fila_max y col_max. Así, al terminar, no solo sabes el mayor número sino la casilla exacta donde vivía.

La trampa clásica es inicializar max = 0 en lugar de max = m[0][0]. Si la matriz tuviera todos los valores negativos (por ejemplo temperaturas bajo cero), ningún elemento superaría al 0 y el programa diría que el máximo es 0, un valor que ni siquiera está en la matriz. Empezar por el primer elemento real evita ese error. Un detalle menor: si hay empates, este código se queda con la primera aparición, porque solo cambia de campeón cuando encuentra algo estrictamente mayor (>, no >=).

Para practicar — cópialo en Dev-C++

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 04 — PRACTICA (rellena los TODO)
 * Enunciado: Lee una matriz 4x4 e imprime el valor maximo y su posicion.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej04_practica.c -o ej04 && ./ej04
 */
 
#include <stdio.h>
 
#define N 4
 
int main(void) {
    int m[N][N];
 
    // TODO 1: leer la matriz 4x4 con doble bucle y scanf
 
    // TODO 2: inicializar tres variables:
    //         int max = m[0][0];
    //         int fila_max = 0, col_max = 0;
 
    // TODO 3: doble bucle que recorra todas las celdas:
    //         si m[i][j] > max, actualiza max, fila_max y col_max
 
    // TODO 4: imprimir la matriz (opcional, pero ayuda a verificar)
 
    // TODO 5: imprimir el maximo y su posicion con printf
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 04 — MODELO (resuelto)
 * Enunciado: Lee una matriz 4x4 e imprime el valor maximo y su posicion.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej04_modelo.c -o ej04 && ./ej04
 */
 
#include <stdio.h>
 
#define N 4
 
int main(void) {
    int m[N][N];
 
    // Leer la matriz
    printf("Introduce la matriz %dx%d:\n", N, N);
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            scanf("%d", &m[i][j]);
 
    // Buscar el maximo: empezar en m[0][0] y actualizar si encontramos mayor
    int max = m[0][0];
    int fila_max = 0, col_max = 0;
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (m[i][j] > max) {
                max = m[i][j];
                fila_max = i;
                col_max  = j;
            }
        }
    }
 
    // Imprimir la matriz
    printf("\nMatriz:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
            printf("%4d", m[i][j]);
        printf("\n");
    }
 
    printf("\nMaximo: %d en posicion [%d][%d]\n", max, fila_max, col_max);
 
    return 0;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones