domingo, 25 de noviembre de 2007

Programación en C

Problema Junio 2007

Convertir una cadena de caracteres a un valor entero mediante una función que reciba la dirección de la cadena y la dirección de la variable que almacenará el resultado. (Se supone que hay números el la cadena).

SOLUCIÓN:
-Buscar el comienzo de numero distinto de blanco, supondremos + o -.
-Averiguar el signo, si no es un carácter valido devuelve un error.
-Si el carácter es un digito se pasa a decimal ((ascii)numero-48)*10.
-Si la función finaliza de forma correcta devuelve un uno.

#include
#include
#include

int convierte(char*,float*);

void main()
{
char cadena[50];
float valor;
printf("Dame una cadena:");
gets(cadena);
if (convierte(cadena,&valor))
printf("El valor es:%f",valor);
else
puts("ERROR");
}

int convierte(char *pcadena,float *pvalor)
{
int neg=1,error=0;
while(*pcadena==' ')
pcadena++;

if (!isdigit(*pcadena))
{
if (*pcadena=='-')
neg=-1;
else
if (*pcadena=='+')
neg=1;
else
error=1;
pcadena++;
}

while ((*pcadena) && (!error))
{
if (!isdigit(*pcadena))
error=1;
else
*pvalor=*pvalor*10+((int)(*pcadena-48));
pcadena++;
}

if (error) return 0;
*pvalor=(*pvalor)*(float)neg;
return 1;
}

No hay comentarios: