Lenguaje de programación C

C – Saber si dos arreglos o matrices son iguales

En este post te voy a enseñar a comparar arreglos y matrices en el lenguaje de programación C para saber si son iguales o no.

Se dice que dos arreglos o matrices son iguales cuando la longitud de ambos es la misma, y tienen los mismos elementos en las mismas posiciones.

Recomendado: arreglos en C.

Saber si dos arreglos son iguales en C

Para saber si dos arreglos son iguales en C, obtenemos su longitud y la comparamos.

Si la longitud es distinta, obviamente los arreglos no son iguales.

En caso de que la longitud sea la misma, hacemos un ciclo recorriendo el arreglo.

Se supone que los dos arreglos deberían tener los mismos datos, así que simplemente accedemos a ambos arreglos usando el mismo índice y comparamos sus datos.

El siguiente código de C compara dos arreglos y dice si son iguales o no:

#include <stdio.h>
/*
 Comparación de arreglos en C
 By parzibyte
 Visita mi blog: https://parzibyte.me/blog
*/int main(void) {
  int arreglo[] = {1, 2, 3};
  int otroArreglo[] = {1, 2, 4};  // Ojo: el último número cambia

  // Primero comparar su longitud
  int longitudDeArreglo = sizeof(arreglo) / sizeof(arreglo[0]),
      longitudDeOtroArreglo = sizeof(otroArreglo) / sizeof(otroArreglo[0]);
  if (longitudDeArreglo != longitudDeOtroArreglo) {
    printf("Los arreglos no son iguales");
    return 0;
  }
  // Si llegamos aquí es porque la longitud es la misma, así que
  // vamos a comparar valor por valor

  // Nota: en el ciclo se puede tomar la longitud de cualquier arreglo, pues es
  // la misma
  for (int i = 0; i < longitudDeArreglo; i++) {
    // Obtener elementos de ambos arreglos en misma posición o índice
    int valorDelArreglo = arreglo[i], valorDelOtroArreglo = otroArreglo[i];

    // Comparar ;)
    if (valorDelArreglo != valorDelOtroArreglo) {
      printf("Los arreglos NO son iguales");
      return 0;  // Terminar ejecución
    }
  }
  // Si terminamos de recorrer ambos arreglos
  // y no salimos del programa, significa que
  // ambos sí son iguales
  printf("Los arreglos SON iguales");
  return 0;
}

Función que indica si dos arreglos son iguales en C

También podríamos encerrar el comportamiento en una función que regresa 1 en caso de que sean iguales, y 0 en caso de que no.

Necesitamos la longitud de ambos arreglos (además de los arreglos) porque cuando pasamos los arreglos a una función, no es tan fácil obtener la longitud de los mismos.

El código queda así:

#include <stdio.h>
/*
        Comparación de arreglos en C
        encerrando comportamiento en función
        By parzibyte
        Visita mi blog: https://parzibyte.me/blog
*/// Prototipo de función. Necesitamos la longitud porque no se puede obtener
// dentro de la función
int arreglosSonIguales(int longitudArreglo1, int longitudArreglo2, int arr1[],
                       int arr2[]);
int main(void) {
  int arreglo[] = {1, 2, 3};
  int otroArreglo[] = {1, 2, 4};  // Ojo: el último número cambia

  // Obtener su longitud para llamar a función
  int longitudDeArreglo = sizeof(arreglo) / sizeof(arreglo[0]),
      longitudDeOtroArreglo = sizeof(otroArreglo) / sizeof(otroArreglo[0]);
  int sonIguales = arreglosSonIguales(longitudDeArreglo, longitudDeOtroArreglo,
                                      arreglo, otroArreglo);
  if (sonIguales) {
    printf("Los arreglos son iguales");
  } else {
    printf("Los arreglos NO son iguales");
  }
}

// Función que indica si dos arreglos son iguales

int arreglosSonIguales(int longitudArreglo1, int longitudArreglo2, int arr1[],
                       int arr2[]) {
  if (longitudArreglo1 != longitudArreglo2) {
    return 0;
  }

  for (int i = 0; i < longitudArreglo1; i++) {
    // Obtener elementos de ambos arreglos en misma posición o índice
    int valorDelArreglo = arr1[i], valorDelOtroArreglo = arr2[i];

    // Comparar ;)
    if (valorDelArreglo != valorDelOtroArreglo) {
      return 0;  // Terminar ejecución porque no son iguales
    }
  }
  // Si terminamos el ciclo y ningún valor fue diferente, entonces
  // ambos arreglos son iguales
  return 1;
}

Como ves, es una función que indica si dos arreglos son iguales en C. Recibe la longitud de ambos arreglos, y los arreglos.

Recuerda que los arreglos pueden ser llenados por ti o por el usuario usando por ejemplo scanf como veremos en el ejemplo de abajo, en donde comparamos matrices en C.

Saber si dos matrices son iguales

Una matriz es un arreglo de dos dimensiones. Para saber si dos matrices son iguales se sigue el mismo procedimiento, pero mirando ambas dimensiones.

Aquí está el código de ejemplo que pide datos por teclado, rellena las matrices y luego las compara:

#include <stdio.h>
/*
 Comparación de matrices en C
 By parzibyte
 Visita mi blog: https://parzibyte.me/blog
*/int main(void) {
  int matriz1[2][2], matriz2[2][2];
  // Leer matriz 1
  for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 2; y++) {
      printf("Valor para matriz1 en [%d][%d]: ", x, y);
      scanf("%d", &matriz1[x][y]);
    }
  }
  // Leer matriz 2
  for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 2; y++) {
      printf("Valor para matriz2 en [%d][%d]: ", x, y);
      scanf("%d", &matriz2[x][y]);
    }
  }
  // Hora de comparar. Se supone que ambas tienen la misma
  // longitud, y al inicio suponemos que son iguales
  int sonIguales = 1;
  for (int x = 0; x < 2; x++) {
    for (int y = 0; y < 2; y++) {
      int valorDeMatriz1 = matriz1[x][y];
      int valorDeMatriz2 = matriz2[x][y];
      if (valorDeMatriz1 != valorDeMatriz2) {
        // Nota: aquí deberíamos romper los ciclos, pues ya
        // sabemos que no son iguales. Podríamos poner todo
        // esto dentro de una función y hacer un return,
        // ya que con un break solo se rompería este ciclo y no el
        // de arriba

        // En fin, solo decía
        sonIguales = 0;
      }
    }
  }

  if (sonIguales) {
    printf("Son iguales");
  } else {
    printf("NO son iguales");//
  }
}

Recuerda que podríamos encerrar todo en una función, terminar la función principal con return, etcétera.

Todo depende de tus necesidades. Espero que haya servido

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.