Dev - C++ - Ayudando comparando arreglos con un if

 
Vista:

Ayudando comparando arreglos con un if

Publicado por Andre Jaime (1 intervención) el 15/11/2014 05:21:16
Hola, gente, tengo un problema el cual no entiendo, yo hice este codigo usando arreglos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cmath>
#include <cstdlib>
#include<math.h>
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv) {
int lista1[100];
int lista2[100];
int variable;
cout << " Cuantos numeros tendra su arreglo"<< endl;
cin>> variable;
 
for(int i=0;i<variable;i++){
	cout << " inserte los numeros que desea comparar"<< endl;
	cin>> lista1[i];
 
}
for (int k=0;k<variable;k++){
	cout << " inserte los numeros que deseas comparar ( lista 2) "<< endl;
	cin >> lista2[k];
 
}
	if(lista1 == lista2) {
		cout <<" la lista contiene los mismos numeros y por lo tanto no se puede comparar"<< endl;
	}
	else
	cout << " La lista es totalmente diferente"<< endl;
 
	return 0}

Lo que quiero hacer es hacer que me diga si los arreglos tienen los mismos numeros o no, ejemplo si el usuario pone exactamente los mismos numeros independientemente del orden, que me diga que son los mismos, pero si hay uno diferente quiero que me diga que las listas son diferentes, solo quiero que me digan que es lo que debo de hacer y porque mi resultado no es el que espero con este codigo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayudando comparando arreglos con un if

Publicado por leo lucas (1 intervención) el 15/11/2014 06:03:18
Tu problema está en la lógica, revisa el if, estás comparando las direcciones del inicio de tus arreglos y no lo que contienen.

lista1 y lista2 contienen direcciones de memoria, lo que debes hacer en este caso (según yo) es crear otro for que recorra los arreglos campo por campo y los compare, si llega al final con éxito es porque los arreglos son idénticos.

Reemplaza tu if por este código:

1
2
3
4
5
6
7
8
9
10
11
int i;
 
for (i=0;i<variable;i++) {
	if (lista1[i]!=lista2[i]) { break; }
}
 
if (i==variable) {
	cout<<"los arreglos son iguales "<<endl;
} else {
	cout<<"los arreglos son diferentes "<<endl;
}


Espero que se entienda mi solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayudando comparando arreglos con un if

Publicado por Sailor Saturn (1 intervención) el 01/08/2018 10:46:06
El ejercicio que hizo Leo Lucas me parece muy bueno, con la diferencia de que en la descripcion de la pregunta dice que evalue si son iguales SIN IMPORTAR EL ORDEN, teniendo eso en cuenta realice este codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char elementosIguales(int Cadena1[], int Cadena2[]){
	int k=0;
	for(int i=0; i<10; i++){
		for(int j=0; j<10; j++){
			if((j==9) && (Cadena1[i]!=Cadena2[j])){
			   break;
			}else if(Cadena1[i]==Cadena2[j]){
				k++;
			}
		}
	}
	if (k==10)
		cout<<"los arreglos son iguales "<<endl;
	else
		cout<<"los arreglos son diferentes "<<endl;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar