Comprobador de palíndromos


/*
Muy buenas a todos. En este programa que os presento hoy, es un comprobador de palindromos.
Para quien no lo sepa, un palindromo es una palabra o numero que se escribe simetricamente, y
se lee igual del derecho y del reves, como por ejemplo "radar", "oso", "oro", "737", "1234321",
etc. Lo que hace este programa es comprobar si el numero que vosotros introducis, puede generar
un palindromo o no, en el numero maximo de intentos que hara el programa por intentar hallarlo.
Pero, ¿como puede un numero generar un palindromo?. Muy sencillo. Se coge el numero que
habeis introducido, y se le da la vuelta para comprobar si el mismo es un palindromo, y si no lo es
se suman el numero sin invertir, mas el numero invertido, y a ese resultado se le vuelve a dar la
vuelta para comprobar el resultado. Si sigue sin ser un palindromo, se repitiria el proceso hasta
dar con uno o hasta que el programa haga su maximo de intentos. Un ejemplo visual seria este:
"64+46=110 ,, 110+011=121 (el 121 ya es palindromo)". Espero que os guste el programa
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_INTENTOS 1000

int leer_num()
{
    int n;
    printf("\n  Introduce un numero: ");
    scanf("%d", &n);
    return n;
}


int pasa_a_vector(int x, int vx[])
{
    int c=0;
    int aux;
    x=aux;
    while(aux>=10)
    {
        vx[c++]=aux%10;
        aux=aux/10;
    }
    vx[c++]=aux;
    return c;
}

void obtiene_reverso(int vx[], int cont, int vy[])
{
    int i;
    for(i=0;i<cont;i++)
    {
        vy[i]=vx[cont-i-1];
    }
}

int suma_vectores(int entrada1[], int entrada2[], int cont, int salida[])
{
    int i, acarreo=0, suma;
    for(i=0;i<cont;i++)
    {
        suma=entrada1[i]+entrada2[i]+acarreo;
        if(suma<=9)
        {
            salida[i]=suma;
            acarreo=0;
        }
        else
        {
            salida[i]=suma%10;
            acarreo=1;
        }
    }
    if(acarreo==1)
    {
        salida[cont++]=1;
    }
    return cont;
}

int es_palindromo(int vsuma[], int cont)
{
    int i;
    int es=1;
    for(i=0;i<cont && es==1;i++)
    {
        if(vsuma[i]!=vsuma[cont-i-1])
        {
            es=0;
        }
    }
    return es;
}

void imprimir_palindromo(int num, int vsuma[], int cont, int iter)
{
    printf("\n\n  El numero %d genera el palindromo siguiente con %d iteraciones:  ", num, iter);
    int i;
    for(i=0;i<cont;i++)
    {
        printf("%d", vsuma[i]);
    }
    printf("\n");
}

void copia_vector(int vsuma[], int vnum[], int cont)
{
    int i;
    for(i=0;i<cont;i++)
    {
        vnum[i]=vsuma[i];
    }
}

int main()
{
    int num;
    int vnum[1000], reverso_vnum[1000], vsuma[1000];
    int cont=0, vueltas=0, encontro=0;
    do
   {
        num = leer_num();
   }
    while (num<=0);
    cont=pasa_a_vector(num, vnum);
    while(vueltas<MAX_INTENTOS && encontro==0)
    {
        obtiene_reverso(vnum, cont, reverso_vnum);
        cont=suma_vectores(vnum, reverso_vnum, cont, vsuma);
        if (es_palindromo(vsuma, cont))
    {
        imprimir_palindromo(num, vsuma, cont, vueltas);
        encontro=1;
    }
    else
    {
        vueltas++;
        copia_vector(vsuma, vnum, cont);
    }
   }
    if (encontro==0) printf("\n\n  No fue posible encontrarlo !!!!");
}



© Todos los derechos de cada programa publicado en la web son reservados
Imágenes creadas en Canva
Creado con Webnode Cookies
¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar