• Martes 5 de Noviembre de 2024, 20:52

Autor Tema:  Re: Validar entrada de datos  (Leído 1525 veces)

patitu78

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Validar entrada de datos
« en: Sábado 15 de Junio de 2002, 19:39 »
0
hola quisiera saber como validar entrada de datos. Necesito validar números con coma flotante, pensé en convertir una cadena leida con atof y luego utilizar isdigit, pero se me complica, quisiera saber si existe una función que te diga si una cadena es un float o no?

LamKros

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
    • http://www.lamkros.com
Validar entrada de datos
« Respuesta #1 en: Sábado 29 de Junio de 2002, 20:52 »
0
/*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;)