Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Sothu en 1 Noviembre 2015, 13:24 pm



Título: [Ayuda] Programa capicua
Publicado por: Sothu en 1 Noviembre 2015, 13:24 pm
Buenas,
tengo que hacer un programa en c++ que me diga los numeros capicua que se encuentran entre dos valores(n, m) y no se por donde empezar. He pensado en crear una accion que me diga si el numero es capicua y luego ir comprovando con un ciclo si lo son los numeros entre n, m.
Alguna ayuda?


Título: Re: [Ayuda] Programa capicua
Publicado por: ivancea96 en 1 Noviembre 2015, 13:41 pm
He pensado en crear una accion que me diga si el numero es capicua y luego ir comprovando con un ciclo si lo son los numeros entre n, m.

Es correcto, ahora, empieza a desarrollarlo. Deja la función que comprueba si es capicua para el final, y no tendrás problema.

Como dato, te digo: el operador módulo (%), retorna el resto de una división. Así pues, 123456%10, retorna 6 (la primera cifra).

Puedes convertir el número a un arreglo de caracteres con este método, o puedes hacer como veas. Empieza, luego si tienes dudas, sigue preguntando por aquí.


Título: Re: [Ayuda] Programa capicua
Publicado por: Sothu en 1 Noviembre 2015, 19:55 pm
De momento he intentado crear una accion que me devuelva el numero girado pero no me funciona, soy muy nuevo en la POO. Alguien podria decirme que falla aqui?

Código:
#include <iostream>

using namespace std;

int alReves (int numero)
{
    while (numero != 0)
    {
        numero % 10;
        numero = numero / 10;
    }
    return alReves();
}

int main()
{
    int numero;
    cout << "ENTRAR NUMERO:";
    cin >> numero;
    cout << alReves(numero);
}


Título: Re: [Ayuda] Programa capicua
Publicado por: ivancea96 en 1 Noviembre 2015, 19:59 pm
Descríbe paso a paso que es lo que pretendes hacer en ese algoritmo.

Te voy a describir lo que hace la función:

Mientras que el número sea diferente de 0, lo divides entre 10.

Luego, tienes una línea errónea. Tratas de retornar "alReves()". Estás llamando a la función, sin pasarle ningún argumento.

La línea numero%10; no hace nada. Hace la operación y ya, pero no guarda el resultado en ningún lugar.

Te diría que te pases por aquí: minidosis.org (http://minidosis.org)


Título: Re: [Ayuda] Programa capicua
Publicado por: Sothu en 1 Noviembre 2015, 21:22 pm
Lo de la operacion del numero ya veo que es un error, lo que no entiendo es lo que dices del return. ¿Despues de una accion no va siempre un return de la misma?


Título: Re: [Ayuda] Programa capicua
Publicado por: ivancea96 en 1 Noviembre 2015, 21:28 pm
En el return retornas un valor. Poner la función implica llamar a la función.


Título: Re: [Ayuda] Programa capicua
Publicado por: Sothu en 1 Noviembre 2015, 21:52 pm
Entonces debo hacer return numero; ?


Título: Re: [Ayuda] Programa capicua
Publicado por: ivancea96 en 1 Noviembre 2015, 21:58 pm
Efectivamente. Sin embargo, el algoritmo es incorrecto. Cuando salga del bucle, numero será igual a 0, tenlo en cuenta.


Título: Re: [Ayuda] Programa capicua
Publicado por: Sothu en 1 Noviembre 2015, 22:08 pm
Estoy perdido 100% xd


Título: Re: [Ayuda] Programa capicua
Publicado por: ivancea96 en 1 Noviembre 2015, 22:22 pm
Plantea un algoritmo. Si logras poner un algoritmo en papel, luego pasarlo a programación es más fácil.


Título: Re: [Ayuda] Programa capicua
Publicado por: Zodiak98 en 3 Noviembre 2015, 04:43 am
Como dice ivancea96, plantea el algoritmo en un papel y así te resultará todo más claro cuando lo pases a código ya que sabrá lo que tienes que hacer y no lo harás todo a "pegar" a ver si funciona.

Para invertir un número lo que tienes que hacer es tomar la última cifra, luego tienes que ir desplazándola para sumarle la siguiente, por lo que tienes que multiplicar por 10 y sumarle la siguiente, y así hasta que el valor del número a invertir sea cero.

Teniendo eso en mente, el código quedaría algo así:

Código
  1. #include <iostream>
  2.  
  3. int invertir(int n) {
  4.    int nInvertido = 0;
  5.  
  6.    while(n != 0) {
  7.        nInvertido = (nInvertido * 10) + (n % 10);
  8.        n /= 10;
  9.    }
  10.  
  11.    return nInvertido;
  12. }
  13.  
  14. int main() {
  15.    int numero;
  16.    std::cout << "Introduzca numero: "; std::cin >> numero;
  17.    std::cout << "Numero invertido: " << invertir(numero);
  18.    std::cin.get();
  19.    return 0;
  20. }
  21.  
  22.