/*Hola a todos, leyendo el mensaje de este amigo
me he puesto manos a la obra en lo que podria ser una solucion.
El problema es que te dice si es o no un float
pero la funcion que te convierte el tipo cadena de caracteres a un float no funciona no se porqué,
asi que expongo a continuacion el codigo fuente
y espero que te sirva de ayuda aunque no es una sola funcion predefinida.
Y tb os invito a descubrir que es lo que falla en la conversion TCadena a float.
Suerte;)
*/
/*Realizado por LamKros*/
#include <iostream.h>
#include <stdlib.h>
const int MAXCAD = 20;
const char FINCAD = char(0);
const char CERO = '0';
const char NUEVE = '9';
const char PUNTO = '.';
typedef char TCadena[MAXCAD+1];
//Comprueba que la cadena de caracteres corresponde a un nº en coma flotante
bool esComaFlotante(TCadena d);
//Convierte a numero en coma flotante (CONVertir To(2) Coma Flotante)
float Conv2CF(TCadena d);
//Realiza la potencia de un numero
float Potencia(int num, int indice);
int main()
{TCadena dato;
bool fin=false;
int sal;
float resultado;
while (!(fin))
{
system("cls");
cout << "Introduce un numero en coma flotante: ";
cin >> dato;
if (esComaFlotante(dato))
{
cout <<endl <<"Numero en coma flotante"<<endl;
//resultado = Conv2CF(dato);
//cout << "El numero es" <<resultado;
}
else
{cout <<endl <<"Numero incorrecto"<<endl;}
system("PAUSE");
cout <<endl<< " Pulsa 1 para continuar. ";
cin >> sal;
if(sal!=1)
{fin = true;}
}
return 0;
}
bool esComaFlotante(TCadena d)
{bool r1=false,r2=false;
int i=0;
while ((d>=CERO)&&(d<=NUEVE)&&(i<MAXCAD))
{++i;}
if ((d==PUNTO)&&(d[i+1]!=FINCAD)&&(i>0))
{r1=true;}
else
{r1=false;}
++i;
while ((d>=CERO)&&(d<=NUEVE)&&(i<MAXCAD))
{++i;}
if ((i>=MAXCAD)||(d==FINCAD))
{r2=true;}
else
{r2=false;}
return (r1 && r2);
}
float Conv2CF(TCadena d)
{
int i=0,j=0;
float num=0;
if (esComaFlotante(d))
{
while ((d[j]!=PUNTO)&&(j<MAXCAD))
{++j;}
while ((d!=FINCAD)&&(i<MAXCAD))
{
num = num + (int(d[j])-int(CERO))* Potencia(10,j); }
i=i+1;
j=j-1;
}
return num;
}
float Potencia(int num, int indice)
{int i;
float res=1;
if (indice>=0)
{
for(i=0;i<=indice;++i)
{res = res * num;}
}
else
{
for(i=0;i>indice;--i)
{res = res / num;}
}
return res;
}
//Esto es todo, animo;)