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