Foros del Web » Programación para mayores de 30 ;) » C/C++ »

programa que no tiene errores pero se para

Estas en el tema de programa que no tiene errores pero se para en el foro de C/C++ en Foros del Web. hola estoy escribiendo un programa para saber si un numero es capicua o no, el codigo esta todo bien pero al ejecutarlo y luego de ...
  #1 (permalink)  
Antiguo 31/08/2011, 01:01
 
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 8 años, 5 meses
Puntos: 0
Busqueda programa que no tiene errores pero se para

hola estoy escribiendo un programa para saber si un numero es capicua o no, el codigo esta todo bien pero al ejecutarlo y luego de introducir el numero al programa se para y me aparece que el programa a dejado de funcionar.

gracias por sus respuestas

Código C++:
Ver original
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4.  
  5. int main ()
  6. {
  7.     //variables
  8.     int num, bnum, numcifra=1, i = 0, suma=0, n_dd[10]; //debido a que n_dd tiene 10 elementos solo se puede procesar numeros hasta de 21 cifras
  9.     //entrada
  10.     cout << "Ingrese el numero (maximo 21 cifras): ";
  11.     cin >> num;
  12.     //====================================================================================
  13.     /*/contar el numero de cifras
  14.     bnum=num;
  15.     for (i=1; bnum/10!=0;i++)
  16.     {
  17.         bnum=bnum/10;
  18.         numcifra=numcifra+1;
  19.     }
  20.     cout << numcifra;*/
  21.     //====================================================================================
  22.    
  23.     //contamos las cifras y sacamos digito por digito a cada cifra y lo ponemos en la variable
  24.     bnum=num;
  25.     for (i=1; bnum/10!=0;i++)// != desigual que
  26.     {
  27.         numcifra+=1; //aki se cuentan las cifras
  28.         n_dd[i]=bnum%10;
  29.         bnum=bnum/10;
  30.         if (bnum/10==0) // aki se da el valor para la ultima cifra
  31.         {
  32.                        n_dd[i+1]=bnum;
  33.         }
  34.     }
  35.     //igualamos
  36.     for (i=1; numcifra/2; i++)
  37.     {
  38.         if (n_dd[i]==n_dd[numcifra/2-i])
  39.         {
  40.                                  suma=0 ;      //suma sera cero
  41.         }else{
  42.               suma=suma+1;
  43.               }
  44.     }
  45.     // si suma=0 entonces es capicua
  46.     if (suma==0)
  47.     {
  48.                 cout << "\n\nEl numero es capicua" << endl;
  49.     }else{
  50.           cout << "\n\nEl numero es no capicua" << endl;
  51.     }
  52.  
  53.     getche ();
  54.     return 0;
  55. }
  #2 (permalink)  
Antiguo 31/08/2011, 04:34
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 11 años, 8 meses
Puntos: 61
Respuesta: programa que no tiene errores pero se para

Veo que hay al menos 2 problemas:

El segundo ciclo for no termina. La condicion de termino esta mala.

El arreglo n_dd tiene espacio para 10 elementos y el primer ciclo no se detiene antes que 10, podrias estar sobreescribiendo zonas de memoria no asignadas para ti.

Esto ultimo es facil de chequear que es efectivamente el problema que tienes: simplemente cambia n_dd[10] por n_dd[1000] exagerando para ver que el problema que ahora tienes se va despues de ese cambio.

Una vez convencido que ese era el problema, modifica tu solución para que n_dd tenga espacio suficiente siempre, haciendo que el ciclo actue de acuerdo a los limites del arreglo.
  #3 (permalink)  
Antiguo 31/08/2011, 10:23
 
Fecha de Ingreso: agosto-2011
Mensajes: 2
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: programa que no tiene errores pero se para

encontre el error, como dijo CalgaryCorpus el segundo for no terminaba asi que cambie las condiciones aqui el condiciones

antes:
Código C++:
Ver original
  1. for (i=1; numcifra/2; i++)
  2.     {
  3.         if (n_dd[i]==n_dd[numcifra/2-i])
  4.         {
  5.                                  suma=0 ;      //suma sera cero
  6.         }else{
  7.               suma=suma+1;
  8.               }
  9.     }

ahora
Código C++:
Ver original
  1. for (i=0; i!=numcifra/2; i++)
  2.     {
  3.         if (n_dd[i]==n_dd[numcifra-1-i])
  4.         {
  5.                                  suma+=0 ;      //suma sera cero
  6.         }else{
  7.               suma+=1;
  8.               }
  9.     }

el codigo completo seria

Código C++:
Ver original
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4.  
  5. int main ()
  6. {
  7.     //variables
  8.     int num, numcifra=1, i = 0, suma=0, n_dd[20]; //debido a que n_dd tiene 21 elementos solo se puede procesar numeros hasta de 21 cifras
  9.     //entrada
  10.     cout << "Ingrese el numero (maximo 21 cifras): ";
  11.     cin >> num;
  12.     //====================================================================================
  13.     /*/contar el numero de cifras
  14.     for (i=1; num/10!=0;i++)
  15.     {
  16.         num=num/10;
  17.         numcifra=numcifra+1;
  18.     }
  19.     cout << numcifra;*/
  20.     //====================================================================================
  21.    
  22.     //contamos las cifras y sacamos digito por digito a cada cifra y lo ponemos en la variable
  23.     for (i=0; num/10!=0;i++)// != desigual que
  24.     {
  25.         numcifra+=1; //aki se cuentan las cifras
  26.         n_dd[i]=num%10;
  27.         num=num/10;
  28.         if (num/10==0) // aki se da el valor para la ultima cifra
  29.         {
  30.                         n_dd[i+1]=num;
  31.         }
  32.     }
  33.     //igualamos
  34.     for (i=0; i!=numcifra/2; i++)
  35.     {
  36.         if (n_dd[i]==n_dd[numcifra-1-i])
  37.         {
  38.                                  suma+=0 ;      //suma sera cero
  39.         }else{
  40.               suma+=1;
  41.               }
  42.     }
  43.     // si suma=0 entonces es capicua
  44.     if (suma==0)
  45.     {
  46.                 cout << "\n\nEl numero es capicua" << endl;
  47.     }else{
  48.           cout << "\n\nEl numero es no capicua" << endl;
  49.     }
  50.     //
  51.     getche ();
  52.     return 0;
  53. }

Última edición por edynperu; 31/08/2011 a las 11:37
  #4 (permalink)  
Antiguo 31/08/2011, 11:41
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 11 años, 8 meses
Puntos: 61
Respuesta: programa que no tiene errores pero se para

Una mini-correccion,

Si defines n_dd[20], entonces n_dd tiene 20 elementos, no 21. El comentario tiene ese error.

Etiquetas: errores, funcion, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:17.