Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: suzy en 9 Marzo 2013, 23:54 pm



Título: Números capicúa
Publicado por: suzy en 9 Marzo 2013, 23:54 pm
Veréis, he encontrado un código para averiguar qué números son capicúa y cuáles no cuando se introducen por teclado. Sin embargo, está hecho para que sólo pueda averiguar números de 3 cifras. Me gustaría que me ayudáseis a modificar el código para que pueda leer números de 4 cifras. ¿Qué debería cambiar? Aquí el código:
Código:
#include <iostream>
using namespace std;

int main()
{
 
 int a;
 char ca[100];
 
 Ingres:
 cout << "Digite un numero de 3 digitos: "; cin >> ca;
 
 int lnumc = strlen(ca);
 a = atoi(ca);
 
 if (lnumc==3)
 {
 int n1 = a/100;
 int n2 = a/10 - n1*10;
 int n3 = a - (n1*100 + n2*10);
 
 int ni = n3*100 + n2*10 + n1;
 
 if (ni-a == 0)
 cout << "El numero es capicua"<<endl;
 else
 cout << "El numero no es capicua"<<endl;
 }
 else
 {
     cout <<endl<< "El numero debe tener 3 digitos"<<endl;
     goto Ingres;
 }

 cin.get();
 cin.get();
 return 0;
 
}


Título: Re: Números capicúa
Publicado por: naderST en 10 Marzo 2013, 00:21 am
Aquí tienes uno de N dígitos

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 30
  4.  
  5. char num[N + 1]; // N dígitos máximo
  6. int i, j, flag;
  7.  
  8. int main() {
  9.    printf("Número: ");
  10.    scanf("%s", num);
  11.  
  12.    j = strlen(num) - 1;
  13.    flag = 1;
  14.  
  15.    // Validar si es de un dígito
  16.    if(j == i)
  17.        flag = 0;
  18.  
  19.    while(j > i)
  20.        if(num[i++] != num[j--]) {
  21.            flag = 0;
  22.            break;
  23.        }
  24.  
  25.    if(flag)
  26.        printf("Es capicua\n");
  27.    else
  28.        printf("No es capicua\n");
  29.  
  30.    return 0;
  31. }
  32.  


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 00:37 am
Perdona naderST, se me había olvidado mencionar que tenía que hacerlo con la librería iostream, nada de #include <stdio.h> o #include <string.h>.Gracias de todas formas.
A ver si alguien me puede echar un cable.


Título: Re: Números capicúa
Publicado por: 0xDani en 10 Marzo 2013, 00:51 am
@suzy, simplemente sustituye printf's por cout's y poco mas.

@amchacon, un tip, a partir de C99 existe el tipo _Bool, no hace falta que uses un entero.


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 01:26 am
Pues me fastidiaste el código que te había preparado:


Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.     int i;
  9.     char cad[100],cad1[100];
  10.     cout << "Digite un numero: "; cin >> cad;
  11.     for (i=0;i<cad[i]!='\0';i++)
  12.        cad1[(strlen (cad))-i-1]=cad[i];
  13.     cad1[(strlen (cad))]='\0';
  14.    if (strcmp(cad1, cad)!=0 || cad1[0]=='0')
  15.        cout << "El numero "<<atoi (cad1 )<<" no es capicua"<<endl ;
  16.    else
  17.        cout << "El numero "<<(cad ) <<" es capicua"<<endl;
  18.     cin.get();
  19.     return 0;
  20.  
  21. }
  22.  


Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/SimpHomer.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 11:58 am
¿Por qué se tendría que sustituir todo eso para que sólo sea con la librería iostream? ¿Alguna ayudita?


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 12:26 pm
¿Por qué se tendría que sustituir todo eso para que sólo sea con la librería iostream? ¿Alguna ayudita?

Difícil es, más no imposible.

Por ejemplo:


Código
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. string str,str2;
  9. cout << "Introduce el numero: "; cin >> cad;
  10. cin >> str;
  11. str2 = str.substr(0, str.length());
  12. reverse(str.begin(), str.end());
  13.    if(str2 == str)
  14. cout << "El numero: "<<str2<<" es capicua." <<endl;
  15. else
  16. cout << "El numero: "<<str2<<" no es capicua.." <<endl;
  17.    return 0;
  18. }
  19.  

!Por dios!, si he usado algorithm y a lo mejor sólo es con iostream. UMMM. Pues por ejemplo así:

Código
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.   int numero0, numero1, numero2,numero_reves;
  6.   cout<<"Introduce el numero: ";
  7.   cin>>numero0;
  8.   numero1 = numero2 =numero0;
  9.   numero_reves = 0;
  10.   while( numero1 > numero_reves && numero2 > numero_reves )
  11.    {
  12.        numero_reves  = 10 * numero_reves + numero1 % 10;
  13.        numero2=numero1;
  14.        numero1 /= 10;
  15.    }
  16.    if( numero1 == numero_reves || numero2 == numero_reves)
  17.        cout<<"Es capicua "<< numero0;
  18.    else
  19.      cout<<"No es capicua "<< numero0;
  20.    return 0;
  21. }
  22.  

Ahora creo que sí, sólo está iostream.

Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/dancer2.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 13:47 pm
Gracias leosansan!
Pero tengo dos problemillas:
Al ejecutar el programa se cierra Dev-C++. ¿Cómo puedo evitarlo?
Y lo segundo es más una duda que un problema. Mi profesor no nos ha enseñado a utilizar & y %. ¿Pará qué sirven? ¿Se podría sustituir por otra cosa más simple?
Gracias por vuestra ayuda.


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 14:16 pm
Gracias leosansan!
Pero tengo dos problemillas:
Al ejecutar el programa se cierra Dev-C++. ¿Cómo puedo evitarlo?

Coloca cin.get( )antes del return. Y una cosa que no me canso de repetir, Dev-C está algo más que obsoleto, como el TurboC2.0. Desde que puedas consigue te el Code::Blocks que es libre y está actualizado hasta este año.
Citar

Y lo segundo es más una duda que un problema. Mi profesor no nos ha enseñado a utilizar & y %. ¿Pará qué sirven? ¿Se podría sustituir por otra cosa más simple?

Son los operadores AND=&& y O=||, mientras que % calcula el resto de la división, es un operador más de casi cualquier lenguaje, como lo son el + - * /, así que vete acostumbrándote a él. En cambio & es para indicar la dirección y también se usa a nivel de operador de bits.


Cualquier otra duda no dudes en consultarla, bien por aquí o vía mp.

Saluditos!. .....
(http://st.forocoches.com/foro/images/smilies/ciao.gif)

P.D: El segundo código de los dos últimos que te pase es "denso", por lo que es normal que te cueste. Ni te cuento lo que me costo a mí.(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 14:27 pm
Ya sé que Dev-C está obsoleto, pero con mi profesor sólo podemos usar este, que le vamos a hacer  :-\
Por cierto, ha surgido otro problema, ahora no se me cierra al abrir el programa, pero sí se cierra cuando introduzco los números y le doy a enter.
¿A qué puede deberse?


Título: Re: Números capicúa
Publicado por: pacoperico en 10 Marzo 2013, 14:33 pm
Eso es exactamente lo que consigues con el cin.get(). Es para hacer una especie de pausa justo antes de que finalice el programa y por lo tanto no se te cierrre el dev-c++.


Título: Re: Números capicúa
Publicado por: amchacon en 10 Marzo 2013, 14:34 pm
Ya sé que Dev-C está obsoleto, pero con mi profesor sólo podemos usar este, que le vamos a hacer  :-\
Por cierto, ha surgido otro problema, ahora no se me cierra al abrir el programa, pero sí se cierra cuando introduzco los números y le doy a enter.
¿A qué puede deberse?
Y como puede saber cual tienes? Le pasas el .c, el exe y tirando *_*

Pasanos el código actual, puede que no hayas puesto bien el cin.get()


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 14:37 pm
Este es el código que llevo por ahora:
Código:
#include<iostream>
using namespace std;
int main()
{
  int numero0, numero1, numero2,numero_reves;
  cout<<"Introduce el numero: ";
  cin>>numero0;
  numero1 = numero2 =numero0;
  numero_reves = 0;
  while( numero1 > numero_reves && numero2 > numero_reves )
   {
       numero_reves  = 10 * numero_reves + numero1 % 10;
       numero2=numero1;
       numero1 /= 10;
   }
   if( numero1 == numero_reves || numero2 == numero_reves)
       cout<<"Es capicua "<< numero0;
   else
     cout<<"No es capicua "<< numero0;
   cin.get( );
   return 0;
}


Título: Re: Números capicúa
Publicado por: amchacon en 10 Marzo 2013, 14:54 pm
Todo correcto, no se te debería cerrar al instante *_*

Prueba a ponerlo otro cin.get() xD


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 15:25 pm
Gracias amchacon!
Efectivamente, le faltaba otro cin.get ( );


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 15:26 pm
Cuando postees código procura elegir las etiquetas "GeSHi" la del C++, así el código sale "coloreado" y es más fácil de seguir.

Saluditos!. ...
(http://smilies-gifs.com/emoticonos-grandes/44grandes.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 18:56 pm
¡Chicos tengo una duda!
¿Cómo se haría para que si se introdujese un número mayor de cuatro cifras el programa me lo diga?
Una ayudita  ;D


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 19:19 pm
¡Chicos tengo una duda!
¿Cómo se haría para que si se introdujese un número mayor de cuatro cifras el programa me lo diga?
.............................

De forma simple, si sólo hay que comprobar que si tiene más de cuatro cifras:

Código
  1. if (numero/10000.>=1)
  2.                     cout<<"tiene mas de cuatro cifras<<endl;

Saluditos!. ...(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 19:28 pm
Mmm... Me da error leosansan, ¿qué hay de mal aquí?
Código
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.  int numero0, numero1, numero2,numero_reves;
  6.  cout<<"Introduce el numero: ";
  7.  cin>>numero0;
  8.  numero1 = numero2 =numero0;
  9.  numero_reves = 0;
  10.  while( numero1 > numero_reves && numero2 > numero_reves )
  11.   {
  12.       numero_reves  = 10 * numero_reves + numero1 % 10;
  13.       numero2=numero1;
  14.       numero1 /= 10;
  15.   }
  16.   if( numero1 == numero_reves || numero2 == numero_reves)
  17.       cout<<"Es capicua "<< numero0;
  18.   else
  19.     cout<<"No es capicua "<< numero0;
  20.   {
  21.                if (numero/10000.>=1)
  22.                        cout<<"tiene mas de cuatro cifras<<endl;
  23.   }
  24.   cin.get( );
  25.   cin.get( );
  26.   return 0;
  27. }
  28.  


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 19:42 pm
Te faltan unas comillas en el último cout, el del if. Pero creo que tienes la intención de comprobar si el número introducido es de más de cuatro cifras con lo que la posición de la condición estaría al principio, así:

Código
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.  int numero0, numero1, numero2,numero_reves;
  6.  cout<<"Introduce el numero: ";
  7.  cin>>numero0;
  8.  if (numero0/10000.>=1)
  9.        cout<<"tiene mas de cuatro cifras"<<endl;
  10.  // aqui la condicion que quieras poner como pedir otro      
  11.  numero1 = numero2 =numero0;
  12.  numero_reves = 0;
  13.  while( numero1 > numero_reves && numero2 > numero_reves )
  14.   {
  15.       numero_reves  = 10 * numero_reves + numero1 % 10;
  16.       numero2=numero1;
  17.       numero1 /= 10;
  18.   }
  19.   if( numero1 == numero_reves || numero2 == numero_reves)
  20.       cout<<"Es capicua "<< numero0;
  21.   else
  22.     cout<<"No es capicua "<< numero0;
  23.   {
  24.  
  25.   }
  26.   cin.get( );
  27.   cin.get( );
  28.   return 0;
  29. }
  30.  
  31.  

Saluditos!. ....(http://smilies-gifs.com/sorpresa/13sorpresa.gif)



Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 19:51 pm
Gracias leosansan!
¿Pero cómo se haría para que, al decirme que tiene más de cuatro cifras, no me diga si es capicúa o no?


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 20:07 pm
Gracias leosansan!
¿Pero cómo se haría para que, al decirme que tiene más de cuatro cifras, no me diga si es capicúa o no?

Entiendo que si tiene más de cuatro cifras "pasas" de comprobar si es o no capicua. Con es premisa:

Código
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.  int numero0, numero1, numero2,numero_reves;
  6.  cout<<"Introduce el numero: ";
  7.  cin>>numero0;
  8.  if (numero0/10000.>=1){
  9.    cout<<"Tiene mas de cuatro cifras. Adios"<<endl;
  10.    reurn 1;
  11.  }
  12.  numero1 = numero2 =numero0;
  13.  numero_reves = 0;
  14.  while( numero1 > numero_reves && numero2 > numero_reves )
  15.   {
  16.       numero_reves  = 10 * numero_reves + numero1 % 10;
  17.       numero2=numero1;
  18.       numero1 /= 10;
  19.   }
  20.   if( numero1 == numero_reves || numero2 == numero_reves)
  21.       cout<<"Es capicua "<< numero0;
  22.   else
  23.     cout<<"No es capicua "<< numero0;
  24.   {
  25.  
  26.   }
  27.   cin.get( );
  28.   cin.get( );
  29.   return 0;
  30. }
  31.  
  32.  

Saluditos, otra vez.....(http://i1280.photobucket.com/albums/a497/leosansan/th_thumbup_zps7a793f22.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 21:50 pm
Cuando introduzco un número de más de cuatro cifras se me cierra el programa  :-(
¿A qué se debe?


Título: Re: Números capicúa
Publicado por: leosansan en 10 Marzo 2013, 22:06 pm
Cuando introduzco un número de más de cuatro cifras se me cierra el programa  :-(
¿A qué se debe?

A que he puesto un return, ¿o querías hacer algo si es de más de cuatro cifras?. Porfi, explica mejor lo que quieres hacer.

Saluditos!. ...
(http://i1280.photobucket.com/albums/a497/leosansan/48grandes_zps82b8e944.gif)


Título: Re: Números capicúa
Publicado por: suzy en 10 Marzo 2013, 22:34 pm
Perdona leosansan, ya lo he resuelto.
¡Muchas gracias por la ayuda!