Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sora_ori en 16 Diciembre 2013, 11:04 am



Título: Decir si un vector es palindromo o no
Publicado por: sora_ori en 16 Diciembre 2013, 11:04 am
Hola de nuevo,

De nuevo vengo a pedir ayuda, porque no consigo hacer que me diga si un vector es palindromo o no.

Dejo el código entero para que vean que estoy haciendo, pero la parte incorrecta es el palindromo, siempre me dice "No es palindromo".

Ejemplo: 5 6 6 5 -> Si es palindromo

(http://i42.tinypic.com/34xqrza.png)


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include<conio.h>
  5.  
  6. int main(){
  7.    int n, i, num;
  8.  
  9.    do{
  10.        printf("Grandaria del vector: ");
  11.        scanf("%d", &n);
  12.    }while(n<4 || n>20); //Entre 4 y 20
  13.  
  14.    int vector[n];
  15.  
  16.    for (i=0; i<n; i++){
  17.        do{
  18.           printf("Introduce un numero, vector %i: ", i+1);
  19.           scanf("%d",&num);
  20.           vector[i] = num;
  21.        }while(num<0 || num>9); // Entre 0 y 9
  22.    }
  23.  
  24.    // Mostrar vector
  25.    printf("\n\nVector:\n");
  26.    printf("____________________\n\n");
  27.    for (i=0; i<n; i++)
  28.        printf(" %d ", vector[i]);
  29.  
  30.  
  31.    // PALINDROMO
  32.    int temp = vector[i];
  33.    int extraer = 0;
  34.    int nuevonumero = 0;
  35.  
  36.    for(i = 0; temp > 0; i++){
  37.          extraer = temp%10;
  38.          nuevonumero = (nuevonumero*10) + extraer;
  39.          temp = temp/10;
  40.    }
  41.  
  42.    if(temp == nuevonumero){
  43.              printf("\n\nEs palindromo");
  44.    }
  45.    else{
  46.         printf("\n\nNo es palindromo");
  47.    }
  48.  
  49.  
  50.    getch();
  51.    return 0;
  52. }
  53.  

Muchas gracias!


Título: Re: Decir si un vector es palindromo o no
Publicado por: Almapa en 16 Diciembre 2013, 12:12 pm
La verdad es que no se cómo está comprobando si es o no palíndromo (que si no me equivoco quiere decir que es un vector capicúa no?).
Yo haría algo más simple:

Código
  1. // PALINDROMO
  2.    bool palindromo=1;
  3.    for(i = 0; i<n/2; i++){
  4.          if(vector[i]==vector[n-1-i]){}else{palindromo=0;}
  5.    }
  6.  
  7.    if(palindromo==1){
  8.              printf("\n\nEs palindromo");
  9.    }
  10.    else{
  11.         printf("\n\nNo es palindromo");
  12.    }


Título: Re: Decir si un vector es palindromo o no
Publicado por: sora_ori en 16 Diciembre 2013, 12:44 pm
Muchas gracias, muy sencillo de hacer y entendible =)


Saludos


Título: Re: Decir si un vector es palindromo o no
Publicado por: leosansan en 16 Diciembre 2013, 13:35 pm
Tal como lo tienes planteado no es muy útil introducir el número como vector, sería mejor hacerlo directamente como un número:


Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    int n, i, num;
  5.    do{
  6.        printf("Introduce el numero: ");
  7.        scanf("%d", &num);
  8.    }while(num<10 || num>999999999);
  9.    // Mostrar vector
  10.    printf("\n\nNumero:\n");
  11.    printf("____________________\n\n");
  12.    printf(" %d \n\n", num);
  13.    // PALINDROMO
  14.    int temp = num;
  15.    int extraer = 0;
  16.    int nuevonumero = 0;
  17.    for(i = 0; temp > 0; i++){
  18.        extraer = temp%10;
  19.        nuevonumero = (nuevonumero*10) + extraer;
  20.        printf("nuevonumero=%d\n",nuevonumero);;system("pause");//sobra
  21.        temp = temp/10;
  22.    }
  23.    if(num == nuevonumero)
  24.        printf("\n\nEs palindromo");
  25.    else
  26.        printf("\n\nNo es palindromo");
  27.    return 0;
  28. }
  29.  

Pero si quieres usar el vector y nuevonumero te serviría;

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    int n, i, num;
  5.    do{
  6.        printf("Grandaria del vector: ");
  7.        scanf("%d", &n);
  8.    }while(n<2 || n>20); //Entre 2 y 20
  9.    int vector[n];
  10.    for (i=0; i<n; i++){
  11.        do{
  12.           printf("Introduce un numero, vector %i: ", i+1);
  13.           scanf("%d",&num);
  14.           vector[i] = num;
  15.        }while(num<0 || num>9); // Entre 0 y 9
  16.    }
  17.    // Mostrar vector
  18.    printf("\n\nVector:\n");
  19.    printf("____________________\n\n");
  20.    for (i=0; i<n; i++)
  21.        printf(" %d ", vector[i]);
  22.    int temp = 0;
  23.    for (i=0; i<n; i++){
  24.        temp=temp*10+vector[i];
  25.    }
  26.    printf("\ntemp=%d\n",temp);//sobra
  27.    // PALINDROMO
  28.    int nuevonumero = 0;
  29.    for(i = n-1;  i>=0 ; i--){
  30.        nuevonumero= nuevonumero*10+vector[i] ;
  31.        printf("nuevonumero=%d\n",nuevonumero);system("pause");
  32.    }
  33.    if(temp == nuevonumero)
  34.        printf("\n\nEs palindromo");
  35.    else
  36.        printf("\n\nNo es palindromo");
  37.    return 0;
  38. }
  39.  

Aunque ya que estas usando un array, lo más simple sería ir comparando los extremos del vector:, como indico Almapa

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    int n, i, num;
  5.    do{
  6.        printf("Tam\xA4o del vector: ");
  7.        scanf("%d", &n);
  8.    }while(n<2 || n>20); //Entre 2 y 20
  9.    int vector[n];
  10.    for (i=0; i<n; i++){
  11.        do{
  12.           printf("Introduce un numero, vector %i: ", i+1);
  13.           scanf("%d",&num);
  14.           vector[i] = num;
  15.        }while(num<0 || num>9); // Entre 0 y 9
  16.    }
  17.    // Mostrar vector
  18.    printf("\n\nVector:\n");
  19.    printf("____________________\n\n");
  20.    for (i=0; i<n; i++)
  21.        printf(" %d ", vector[i]);
  22.    // PALINDROMO
  23.    for(i = 0;  i<n/2 ; i++){
  24.        printf("\n\ni=%d  vector[%d]=%d  vector[%d]=%d\n",i,i,vector[i],n-i-1,vector[n-i-1]);//sobra
  25.        system("pause");//sobra
  26.        if (vector[i]!=vector[n-i-1]){
  27.            printf("\n\nNo es palindromo");
  28.            return 1;
  29.        }
  30.    }
  31.    printf("\n\nEs palindromo");
  32.    return 0;
  33. }
  34.  

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