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

Error en compilación que no se solucionar!!

Estas en el tema de Error en compilación que no se solucionar!! en el foro de C/C++ en Foros del Web. A ver si alguien me puede ayudar.... me da un error en la línea 31, y no se porque!! @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original ...
  #1 (permalink)  
Antiguo 09/04/2010, 04:52
 
Fecha de Ingreso: febrero-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Error en compilación que no se solucionar!!

A ver si alguien me puede ayudar.... me da un error en la línea 31, y no se porque!!

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. #define TAM 40
  7.  
  8.    int palindromo(char[],int);
  9.  
  10.  
  11.     void main (void){
  12.       int res_palind;
  13.       char cad[TAM];
  14.    
  15.       printf("\nIntroduce la cadena\n");
  16.       scanf("%s",cad);
  17.    
  18.       res_palind=palindromo(cad,TAM);
  19.    
  20.       if(res_palind==0) printf ("La cadena '%s' es un palindromo",&cad);
  21.       else printf ("La cadena '%s' NO es un palindromo",&cad);
  22.    
  23.    
  24.    
  25.    }
  26.  
  27.  
  28.  
  29.  
  30.  
  31.     int palindromo(char cad[],int TAM){
  32.    
  33.       int i=0,j,k;
  34.    
  35.       while (cad[i]){
  36.      
  37.          for(k=TAM;k<TAM/2;k++){
  38.             for(j=0,j>TAM/2;j++){
  39.            
  40.                return (cad[j]-cad[k]);
  41.            
  42.             }
  43.          }
  44.          i++;
  45.       }
  46.    
  47.    }

Un saludo y graciaaaas
  #2 (permalink)  
Antiguo 09/04/2010, 07:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 8
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error en compilación que no se solucionar!!

amigo estas declarando a "palindromo" como entero int y por como lo tienes me parec q es una funcion o algo por el estilo,, debes trabajarlo de otra forma por q si le colocas int nates de la palabra c asume q la palabra siguiente en una variable entera... saludos
  #3 (permalink)  
Antiguo 09/04/2010, 07:41
 
Fecha de Ingreso: febrero-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Error en compilación que no se solucionar!!

Gracias por responder anonibox

creo que te refieres a la linea 8 (declaración de la función):

Código C:
Ver original
  1. int palindromo(char[],int);

o 31 (la función en si):

Código C:
Ver original
  1. int palindromo(char cad[],int TAM){

En ambas puse el int ya que hago un return en la función "palindromo" y ese return devuelve un entero.

No debería ser así???
  #4 (permalink)  
Antiguo 09/04/2010, 07:59
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error en compilación que no se solucionar!!

Mi pana lo que pasa es q el segundo parametro de tu funcion lo estas llamando 'TAM', y esa palabra ya la habias usado en una definicion :

Código:
#define TAM 40
Es decir, que no puedes usar la palabra TAM como variable en el segundo parametro de tu funcion...
  #5 (permalink)  
Antiguo 09/04/2010, 08:04
 
Fecha de Ingreso: febrero-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Error en compilación que no se solucionar!!

aguirremanuel, pero según veo en mis apuntes de clase, los #define se pueden usar en cualquier parte del código tantas veces como se quiera, ya que el compilador sustituye la palabra indicada en el define por el valor numérico.
En este caso cada vez que hay un TAM el compilador automáticamente sustituye por un 40.

No es así???

Lo que quiero decir es que en mi código, esto:

Código C:
Ver original
  1. int palindromo(char cad[],int TAM){
y esto:
Código C:
Ver original
  1. int palindromo(char cad[],int 40){

es lo mismo.
  #6 (permalink)  
Antiguo 09/04/2010, 08:21
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error en compilación que no se solucionar!!

Ok todo lo que dices está bien, pero hay es donde está el error, cuando comienza el proceso de compilacion el precompilador sustituye las palabras TAM por 40, entonces el

Código C:
Ver original
  1. int palindromo(char cad[],int TAM)

Ahora me queda

Código C:
Ver original
  1. int palindromo(char cad[],int 40)

Ahora cuando el compilador comienza a verificar el codigo, se encuantra con la sentencia "int 40", y piensa que intentaste crear una variable llamada "40" y por eso te da error, espero haberme explicado bien...
  #7 (permalink)  
Antiguo 09/04/2010, 08:25
 
Fecha de Ingreso: febrero-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Error en compilación que no se solucionar!!

Tienes toda la razón del mundo. Perfecta explicación, no habia caido en ello.
Entonces no hace falta que le pase a la función el TAM, ya que el compilador entenderá lo que es gracias al #define no??
Voy a probar eliminando ese argumento de la función.

Un saludo y muchas gracias
  #8 (permalink)  
Antiguo 09/04/2010, 08:39
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error en compilación que no se solucionar!!

Bueno si quieres la quitas, creo que es lo mejor.

Otra cosa, veo que en tu programa en el primer FOR dices que la variable 'K' será igual a 40 y luego pones que se ejecute mientras se cumpla la condicion de que 'K < 40 / 2' y esa condicion, nunka se va a cumplir, ya que 'K' siempre valdrá 40 y cuarenta es mayor que 40/2...

Por otro lado, en dicho FOR no deberias asignarle a 'K' el valor de TAM, ya que si por ejemplo introduces la palabra "ala" que son solo 3 caracteres, el for deberia comennzar en el caracter 'a' que está en la posicion 2, y asi como tienes el codigo actualemente te va a comenzar a leer la posicion 40, que seria basura en este caso...

Te recomiendo que obtengas el tamaño de la cadena y lo guardes en una variable y luego trabajes los FOR con dicha variable...

Saludos y Suerte...!!!
  #9 (permalink)  
Antiguo 09/04/2010, 08:53
 
Fecha de Ingreso: febrero-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Error en compilación que no se solucionar!!

Me estas siendo de mucha ayuda, aguirremanuel ;)

He cambiado el código añadiendo la función para que calcule el tamaño de la cadena, y he modificado los bucles, y ahora creo que si tienen sentido.

El código ha quedado así:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. #define TAM 40
  7.  
  8.    int calcula_longitud (char []);
  9.  
  10.    int palindromo(char[],int);
  11.  
  12.  
  13.     void main (void){
  14.       int res_palind,tam_cadena;
  15.       char cad[TAM];
  16.    
  17.       printf("\nIntroduce la cadena\n");
  18.       scanf("%s",cad);
  19.    
  20.       tam_cadena=calcula_longitud(cad);
  21.       res_palind=palindromo(cad,tam_cadena);
  22.    
  23.       if(res_palind==0) printf ("La cadena '%s' es un palindromo",&cad);
  24.       else printf ("La cadena '%s' NO es un palindromo",&cad);
  25.    
  26.    
  27.    
  28.    }
  29.  
  30.  
  31.  
  32.     int calcula_longitud (char a[]){
  33.    
  34.       int i=0;
  35.       while (a[i]) i++;
  36.    
  37.       return i;
  38.    
  39.    
  40.    }
  41.  
  42.  
  43.     int palindromo(char cad[],int tam_cadena){
  44.    
  45.       int i=0,j,k;
  46.    
  47.       printf ("\n%d\n",tam_cadena);
  48.    
  49.       while (cad[i]){
  50.      
  51.          for(j=0;j<tam_cadena/2;j++){
  52.             for(k=tam_cadena/2;k>=tam_cadena;k++){
  53.            
  54.                return (cad[j]-cad[k]);
  55.            
  56.             }
  57.          }
  58.          i++;
  59.       }
  60.    
  61.    }

Sigue sin funcionar (si compila), y creo que el error puede estar en la linea 23...sino, no se donde!!

Un saludo y gracias!
  #10 (permalink)  
Antiguo 09/04/2010, 09:05
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error en compilación que no se solucionar!!

Bueno esta fué la funcion que hice y me funcionó :

Código C:
Ver original
  1. int palindromo(char cad[])
  2. {
  3.     int largoCadena = strlen(cad);   //calculo el largo de la cadena
  4.     for(int x = 0 ; x < largoCadena / 2 ; x++)
  5.     {
  6.         if (cad[x] != cad[largoCadena - x - 1])
  7.             return false;
  8.     }
  9.     return true;
  10. }

Lo primero que hago es calcular el tamaño de la cadena con la funcion "strlen(cadena)" luego el for se repetirá hasta que x sea mayor a la mitad largo de la cadena.

El if trabaja de la siguiente manera, va preguntando si el primer caracter es distinto al ultimo, luego si el segundo es distinto al penultimo, el tercero distinto al antepenultimo, y así hasta que salga del for, si en algun caso se cumple la condicion del if, significa que la palabra no era un palindromo, en cambio si la ejecucion del codigo llega a salir del for entonces si era un palindromo...

Espero la explicación haya quedado clara, cualquier inquietud no dudes en preguntar mi pana...
  #11 (permalink)  
Antiguo 09/04/2010, 09:07
aguirremanuel
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error en compilación que no se solucionar!!

Ahh se me olvidaba el if del main debe quedar asi : if(res_palind==true)
  #12 (permalink)  
Antiguo 09/04/2010, 09:29
 
Fecha de Ingreso: febrero-2007
Mensajes: 14
Antigüedad: 17 años, 3 meses
Puntos: 0
Respuesta: Error en compilación que no se solucionar!!

Muchas gracias!!!! Probaré así que tiene mejor pinta ;)
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 18:21.