Ejercicio 07 — Dado N (max 8), genera e imprime la matriz identidad NxN

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

Enunciado

Dado N (max 8), genera e imprime la matriz identidad NxN.

Diagrama de flujo

Diagrama de flujo del ejercicio 07

Cómo se resuelve

Aquí ya no leemos una matriz: la generamos nosotros según un patrón. La matriz identidad tiene 1 en la diagonal principal (donde i == j) y 0 en todo lo demás. Es decir, cada celda se decide mirando solo si su fila y su columna coinciden.

El doble bucle recorre todas las celdas y, en cada una, decide qué valor escribir. La forma más compacta es el operador ternario condicion ? valor_si : valor_no:

m[i][j] = (i == j) ? 1 : 0;

Se lee como: “si i == j, pon 1; si no, pon 0”. Es exactamente lo mismo que un if (i == j) m[i][j] = 1; else m[i][j] = 0;, solo que en una línea. Usar cualquiera de las dos formas es igual de correcto.

Las trampas suelen ser dos. La primera es de lógica: confundir la condición y escribir el 1 fuera de la diagonal, o invertir el ternario y generar el “negativo” de la identidad (0 en la diagonal, 1 en el resto). La segunda es de C: en el if no confundas la comparación == con la asignación =. Escribir (i = j) no compara, sino que mete el valor de j dentro de i y evalúa como cierto casi siempre, rompiendo el patrón sin dar ningún error de compilación. Para la identidad basta con i == j, sin doble bucle extra ni casos raros.

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 07 — PRACTICA (rellena los TODO)
 * Enunciado: Dado N (max 8), genera e imprime la matriz identidad NxN.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
 */
 
#include <stdio.h>
 
#define MAX 8
 
int main(void) {
    int m[MAX][MAX];
    int n;
 
    // TODO 1: leer la dimension n con scanf
 
    // TODO 2: doble bucle para construir la identidad.
    //         En cada celda (i, j) decide que valor poner:
    //         - si i == j (estas en la diagonal) -> m[i][j] = 1
    //         - en cualquier otro caso             -> m[i][j] = 0
    //         Puedes usar un if/else o el operador ternario (i==j) ? 1 : 0
 
    // TODO 3: imprimir la matriz resultado con formato
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 07 — MODELO (resuelto)
 * Enunciado: Dado N (max 8), genera e imprime la matriz identidad NxN.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
 */
 
#include <stdio.h>
 
#define MAX 8
 
int main(void) {
    int m[MAX][MAX];
    int n;
 
    // Leer dimension
    printf("Dimension de la identidad (1-%d): ", MAX);
    scanf("%d", &n);
 
    // Construir la matriz identidad:
    // m[i][j] = 1 si i == j (diagonal), 0 en cualquier otro caso
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            m[i][j] = (i == j) ? 1 : 0;
 
    // Imprimir la identidad
    printf("\nMatriz identidad %dx%d:\n", n, n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            printf("%4d", m[i][j]);
        printf("\n");
    }
 
    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