0

No me funciona el programa de los palindromos,¿Que tengo mal o que me falta?

#include <iostream> #include <array> using namespace std; const int MAX=10; typedef array <int, MAX>TArray; typedef struct { TArray lista; int tam; }TArraytam; typedef struct { Tintermedios lista; int tam; }Tinter; int dig(int num) { int d=0; while(num!=0) { num=num/10; d++; } return d; } void inicializar(TArraytam &a,int &d) { a.tam=d; for(int i=0;i<a.tam;i++) { a.lista[i]=0; } } void deNumeroaDigitos(int &num,TArraytam &a,int &d) { int i = 0; do{ a.lista[i] = num % 10; num = num / 10; i++; }while(num != 0); } void escribir (const TArraytam &a,int &d) { for(int i=0;i<a.tam;i++) { cout<<a.lista[i]<< " " ; } } int deDigitosaNumero(const TArraytam &a) { int resultado=0; for(int i = 0; i < a.tam; i++) { resultado = resultado*10 + a.lista[i]; } return resultado; } bool esPalindromo(int num,int &resultado) { bool es=false; if(num==resultado) { es=true; } return es; } int main() { TArraytam a; int num,resultado; cout<< "intr. num:"; cin>>num; int d=dig(num); inicializar(a,d); deNumeroaDigitos(num,a,d); escribir(a,d); resultado=deDigitosaNumero(a); cout<<endl<< resultado<<endl; bool si=esPalindromo(num,resultado); if(si==true) { cout<< "Es palindromo."; } else { cout<< "No es palindromo."; } return 0; }

10th Dec 2017, 8:14 PM
Carmen Garcia Heredia
Carmen Garcia Heredia - avatar
2 Respostas
0
En primer lugar la estructura Tinder sobra. Debes quitarla. El problema está en que pasas por referencia la variable num a la función: void deNumeroaDigitos(int &num, TArraytam &a, int &d) y dicha variable siempre vuelve con valor cero, por eso siempre resulta falsa la comparación: if (num==resultado) dentro de la función esPalindromo(int num,int resultado) La solución es pasar num por valor: void deNumeroaDigitos(int num, TArraytam &a, int &d) ======================================================================= First, the Tinder structure is superfluous. You must remove it. The problem is that you pass by reference the variable num to the function: void deNumeroaDigitos(int &num, TArraytam &a, int &d) and this variable always returns with zero value, so the comparison is always false: if (num == result) inside the function esPalindromo(int num, int result) The solution is to pass num by value: void deNumeroaDigitos(int num, TArraytam &a, int &d)
13th Dec 2017, 11:54 PM
Enrique
- 2
muchas gracias!:D
19th Dec 2017, 11:01 AM
Carmen Garcia Heredia
Carmen Garcia Heredia - avatar