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

¿Porque falla este programa?

Estas en el tema de ¿Porque falla este programa? en el foro de C/C++ en Foros del Web. Buenas tardes. Recientemente me han asignado la creación de un programa en C. Se trata de usar la frase "Dabale arroz a la zorra el ...
  #1 (permalink)  
Antiguo 17/01/2008, 08:17
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Información ¿Porque falla este programa?

Buenas tardes.

Recientemente me han asignado la creación de un programa en C.

Se trata de usar la frase "Dabale arroz a la zorra el abad", que es un palindromo, de modo que:

1) Se quitan los espacios de la frase

2) Se vuelve todo en mayusculas y en minusculas

3) Se ve si es capicua.

Esto es a lo que he llegado hasta ahora (Compilado en Xcode 3.0):

#include <stdio.h>
#include <string.h>

char *quitar_blancos(char *cad1);

int main()
{

char *cad1="Dabale arroz a la zorra el abad"; //longitud cadena 31 caracteres (+ \0)

printf("%s\n",cad1); // Como es la cadena originalmente
cad1=quitar_blancos(cad1);
strupr(cad1); //aqui me da error. Intento convertir la cadena todo en mayusculas

// A partir de aqui vería si es un palindromo, pero primero quiero ver como solucionar el problema anterior.

return 0;
}

char *quitar_blancos(char *cad1)
{

char *sucia; //nueva cadena para almacenar la frase sin espacios
int i=0,j=0;

while (cad1[i]!='\0')
{
if (cad1[i]!=' ')
{

sucia[j]=cad1[i];
j++;

}
i++;
}
sucia[j]='\0';
printf("%s pew\n",sucia); //Aqui se imprime y se ve la frase sin espacios, es decir que funciona
return sucia;
}

El error es:
"_strupr", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Gracias de antemano por cualquier ayuda que puedan prestar ;)
  #2 (permalink)  
Antiguo 17/01/2008, 15:04
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: ¿Porque falla este programa?

Hasta donde sé esa función no forma parte del estántar Ansi C y el error que te está dando es porque no la consigue, es decir no está definida en ninguna parte.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 18/01/2008, 03:55
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

No es eso. Lo he estado estudiando, y el error radica en la funcion.

Ademas, cosa rara fue que mi profesora lo probó en el Borland y funcionó perfectamente.

Ayuda!!
  #4 (permalink)  
Antiguo 18/01/2008, 08:32
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: ¿Porque falla este programa?

Cita:
Iniciado por athiria Ver Mensaje
No es eso. Lo he estado estudiando, y el error radica en la funcion.
...
Si hubieras estado estudiando, sabrías que esa función efectivamente no forma parte del Ansi C, que la tenga ese compilador entre las librerías que trae por defecto es otro asunto, debiste comenzar mencionando que lo estabas usando.

Cita:
Iniciado por athiria Ver Mensaje
...
Ademas, cosa rara fue que mi profesora lo probó en el Borland y funcionó perfectamente.

Ayuda!!
Seguramente ella si incluyó "sdgstd.h" que es donde está definida la función. Si buscas un poco vas a encontrar páginas como esta.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #5 (permalink)  
Antiguo 18/01/2008, 11:20
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

Bueno al final logre solucionar el problema con otra solucion.

Pero igualmente te agradezco mucho la ayuda que te has esforzado en prestarme ;)

Buenos dias
  #6 (permalink)  
Antiguo 18/01/2008, 14:18
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

Este programa me está volviendo loco!

Bueno, con la nueva solucion todo parecia ir perfectamente....le implante tambien lo de ver si era palindromo, pero ahora me da un error que parece casi una burla:

En las ultimas lineas del programa que posteo a continuacion, aparece esta linea:
printf("%s Prueba\n",sucia);

Si se deja como está, el programa parece salir bien y se imprime la frase "Es un palindromo"

Sin embargo, si se elimina este printf, sale la frase "No es un palindromo"

Supuestamente printf no afecta a la ejecución del programa, no?

[Compilado con Xcode 3.0]

Este es el estado actual del programa:

Código:
#include <stdio.h>
#include <string.h>
#include <ctype.h>


char *quitar_blancos(char *cad1);
int main()
{
	int i,j,cont;
	char *cad1="AvEeVa"; 
	
	
	cad1=quitar_blancos(cad1);
	
	
	for (j=0;cad1[j]!='\0';j++)
	{
		cad1[j] = toupper(cad1[j]);
	}
	
	
	if (j%2==0)
	{
		cont=j/2;
	}
	else
	{
		cont=j/2+1;
	}
	
	i=0;
	while (i<cont && cad1[i]==cad1[(j-1)-i])
	{
		i++;
	}
	
	if (cad1[i]==cad1[(j-i)-1])
	{
		printf("Es palindromo\n");
	}
	else
	{
		printf("No es palindromo\n");
	}
	
	
	return 0;
}
// FUNCION
char *quitar_blancos(char *cad1)
{
	
	char *sucia; //nueva cadena para almacenar la frase sin espacios
	int i=0,j=0;
	
	while (cad1[i]!='\0')
	{
		if (cad1[i]!=' ')
		{
			
			sucia[j]=cad1[i];
			j++;
			
		}
		i++;
	}
	sucia[j]='\0';
	printf("%s\n",sucia);
	// Si se quita el printf, sale la opcion final de que no es palindromo. Con el printf, sale que es palindromo.
	return sucia;
}

Última edición por athiria; 19/01/2008 a las 14:46
  #7 (permalink)  
Antiguo 19/01/2008, 14:21
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 3 meses
Puntos: 22
Re: ¿Porque falla este programa?

Hola athiria.

No has reservado memoria para char *sucia.

Recomendación: indenta tú código y utiliza la etiqueta CODE para publicarlo.

Tip: No hace falta crear una cadena extra en la función quitar_blancos, puedes eliminar los espacios en blanco de la misma cadena utilizando 2 punteros que la recorran.

Salu2.
  #8 (permalink)  
Antiguo 19/01/2008, 15:03
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

No soy precisamente un experto en C ^^

Te refieres a Malloc con lo de reservar espacio en memoria?

Y lo de recorrer con dos punteros, eso como se hace?

Saludos ^
  #9 (permalink)  
Antiguo 19/01/2008, 16:36
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 3 meses
Puntos: 22
Re: ¿Porque falla este programa?

Cita:
No soy precisamente un experto en C ^^
No es necesario ser experto en C para publicar código mas legible (me refiero al formato del texto).
No lo tomes a mal, esto en verdad ayuda a identificar mas rápido los posibles problemas dentro de los códigos publicados.
Cita:
Te refieres a Malloc con lo de reservar espacio en memoria?
Así es, necesitas utilizar malloc.
Cita:
Y lo de recorrer con dos punteros, eso como se hace?
Mas que decirte como hacerlo, te doy la idea.
Recorrer la cadena con dos puntero es precisamente para que no utilices malloc. Esto es 2 punteros que van recorriendo la cadena a eliminar los espacios, de tal forma que el primero recorra la cadena de principio a fin y el segundo vaya copiando los caracteres que recorre el primero solo si no es un espacio en blanco de esta forma cada que consiga copiar un caracter avance una posición.
  #10 (permalink)  
Antiguo 19/01/2008, 16:54
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

Gracias simpatico!
  #11 (permalink)  
Antiguo 20/01/2008, 15:38
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

Bueno, lo de los dos punteros me está fallando, y la verdad no se porque.

El ultimo printf no imprime nada. :S

Compilado con xcode 3.0:

Código:
#include <stdio.h> 

char strA[80] = "Dabale arroz a la zorra el abad"; 
char strB[80];
void espacios(void); 

int main(void) 
{ 
	espacios();
	
	return 0; 
}

void espacios(void)
{
	char *pA;
	char *pB;
	
	pA=strA;
	pB=strB;
	
	while (*pA!='\0')
	{
		if (*pA!=' ')
		{
			*pB=*pA;
		        *pB++;
                }     
		*pA++;
	}
	
	*pB='\0';
	
	printf("%s\n",pB);
}

Última edición por athiria; 20/01/2008 a las 15:44
  #12 (permalink)  
Antiguo 21/01/2008, 05:31
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 3 meses
Puntos: 22
Re: ¿Porque falla este programa?

Código:
#include <stdio.h> 

char strA[80] = "Dabale arroz a la zorra el abad"; 
void espacios(void); 

int main(void) 
{ 
	espacios();
	
	return 0; 
}

void espacios(void)
{
	char *pA;
	char *pB;
	
	pA=strA;
	pB=strA;
	
	while (*pA!='\0')
	{
		if (*pA!=' ')
		{
		      *pB=*pA;
		        pB++;
                                 }     
		pA++;
	}
	
	*pB='\0';
	
	printf("%s\n",strA);
}
Un Saludo.
  #13 (permalink)  
Antiguo 21/01/2008, 11:03
 
Fecha de Ingreso: enero-2008
Mensajes: 22
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: ¿Porque falla este programa?

Con esto he aprendido medio año de C jeje :P

Muchas gracias por tu paciencia y tus sabios consejos!

Estudiare esto hasta comprenderlo o se me quemen las retinas, lo que me pase primero!

Viendolo ahora, me doy cuenta de lo tonto que he sido :S

Eran dos punteros recorriendo la misma cadena! Que fantastica manera de resolver el problema!
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 21:47.