elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Leer un char como float
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Leer un char como float  (Leído 4,564 veces)
za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Leer un char como float
« en: 23 Octubre 2012, 22:38 pm »

Hola, estoy haciendo un programa sencillo que calcula el radio de Schwarzschild entre otras cosas de un agujero negro a partir de la masa del agujero negro, pero quiero poder escribir Ms (por ejemplo) para no tener que escribir la masa del Sol y que al leer lo lea como float 1.9891e30.
Alguien podría explicarme como hacerlo?

la idea es escribir:

Código:
...
const long float G=6.67e-11,
                       c=3e8;
float m;
cin >> m;
r=2*G*m/(c*c);
...

Y que al escribir Ms cuando te pide la masa (m) el programa entienda que he escrito 1.9891e30

Gracias


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Leer un char como float
« Respuesta #1 en: 23 Octubre 2012, 23:07 pm »

quiero poder escribir Ms (por ejemplo) para no tener que escribir la masa del Sol y que al leer lo lea como float 1.9891e30.
Alguien podría explicarme como hacerlo?

Puedes escribir incluso menos:
Código
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. int main()
  5. {
  6.    const  float G=6.67e-11,c=3e8,Ms=1.9891e30;
  7.    float m,r,a=0;
  8.    cout << "a(1 para Ms )=" ;
  9.    cin >> a;
  10.    if (a==1) m=Ms;
  11.    else {cout << "m=" ;cin >> m;}
  12.    r=2*G*m/(c*c);
  13.    cout << r << endl;
  14.    return 0;
  15. }
Saludos!.


« Última modificación: 24 Octubre 2012, 12:33 pm por leosansan » En línea

za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Leer un char como float
« Respuesta #2 en: 23 Octubre 2012, 23:36 pm »

Pero no quiero tener que escribirlo así, porque de esta manera no puedo calcular el radio de un AN de 1 kg, que puedo querer hacerlo. Además, quiero hacer esto para las masas de un protón, un átomo, la Tierra, Júpiter y el Sol, y tendría que reservar demasiadas variables. Lo que quiero es escribir Mt y que lea 5.98e24 (la masa de la Tierra) sin que tenga que reservar valores concretos que me podría interesar calcular.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Leer un char como float
« Respuesta #3 en: 24 Octubre 2012, 03:30 am »

No puedes hacerlo directamente con una secuencia de sentencias como esta:
Código
  1. float m;
  2. cin >> m;

En su lugar debes leer una linea de texto y verificar si contiene la palabra "Ms", un numero de punto flotante o algo mas, continuas dependiendo del caso.

Eso se puede hacer de varias formas, por ejemplo utilizando las clases "string" e "istringstream":
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5. using std::getline;
  6.  
  7. #include <string>
  8. using std::string;
  9.  
  10. #include <sstream>
  11. using std::istringstream;
  12.  
  13. int main()
  14. {
  15.   double val;
  16.   bool ok;
  17.  
  18.   do {
  19.      ok = true;
  20.  
  21.      cout << "Indica el valor: ";
  22.      string linea;
  23.      getline(cin, linea);
  24.  
  25.      if (linea == "Ms")
  26.         val = 1.9891e30;
  27.      else {
  28.         istringstream ss(linea);
  29.         if (!(ss >> val)){
  30.            cout << "Entrada no valida!" << endl;
  31.            ok = false;
  32.         }
  33.      }
  34.   }while (!ok);
  35.  
  36.   cout << "El valor es " << val << endl;
  37.  
  38.   return 0;
  39. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Leer un char como float
« Respuesta #4 en: 24 Octubre 2012, 12:59 pm »

Ya entiendo, pero me podrías decir en que biblioteca esta la función val?
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Leer un char como float
« Respuesta #5 en: 24 Octubre 2012, 13:57 pm »

Pero no quiero tener que escribirlo así, porque de esta manera no puedo calcular el radio de un AN de 1 kg, que puedo querer hacerlo. Además, quiero hacer esto para las masas de un protón, un átomo, la Tierra, Júpiter y el Sol, y tendría que reservar demasiadas variables. Lo que quiero es escribir Mt y que lea 5.98e24 (la masa de la Tierra) sin que tenga que reservar valores concretos que me podría interesar calcular.
El ordenador no es "adivino", en el sentido de que al introducir Ms él interprete que es la masa del Sol. Tienes que implementarlo, bien a lo sencillo como hice yo o a lo profesional como hizo rir.
En cualquier caso, en el código tienes que introducir previamente los valores de las variables más comunes que uses; masad del Sol, de júpiter, de la Tierra, del protón, etc.
Una vez introducidas en el código dichas masas está la forma de acceder a ellas. Una forma sencilla sería crear un índice donde a cada masa se le va asignando un valor: Ms=0,Mt=1,Mj=2 .... y luego crear un array donde "estén" los valores numéricos: masas[3]={1.9891e30, 5.98e24, 5.98e24}. Lo anterior lo he hecho para el caso de las masa del Sol, Tierra y Júpiter, y tú lo amplias según tus necesidades.
Al corrrer el program tienes una opción para entrar la masa en Kg, si así lo deseas, o con la "chuletilla" de las masas según el índice.
Repito lo primero, el ordenador "no sabe" lo que es Ms, lo tienes que declarar tú.

Código
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. int main ()
  5. {
  6.    double masa=0,r=0,G=6.67e-11,c=3e8,Ms=0,Mt=1,Mj=2;
  7.    double masas[3]={1.9891e30, 5.98e24, 5.98e24};
  8.    int indice;
  9.    cout << "Indique la masa (negativo si va e entrar la masa en Kg)=";
  10.    cin >> indice;
  11.    if (indice<0)
  12.        {
  13.            cout <<"m=";cin >>masa;
  14.            r=2*G*masa/(c*c);
  15.        }
  16.    else
  17.        r=2*G*masas[indice]/(c*c);
  18.    cout <<r;
  19.    return 0;
  20. }
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Leer un char como float
« Respuesta #6 en: 24 Octubre 2012, 15:39 pm »

me podrías decir en que biblioteca esta la función val?
No es una función, es la variable donde se almacena el valor a utilizar (1.9891e30 si la linea es igual a "Ms" o el valor indicado por el usuario).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Leer un char como float
« Respuesta #7 en: 24 Octubre 2012, 17:11 pm »

Vale, gracias a los dos. Veo mas sencillo el codigo que me explica leosansan, pero voy a utilizar el de rir3760 porque aún no controlo los string y tengo que practicar con ellos.
Ya se que tengo que declarar la masa del sol antes de poder utilizarla, el ordenador solo sabe hacer lo que yo le digo que haga, pero lo que preguntaba era como podía indicarlo sin tener que reservar unos valores que me podría interesar calcular.
Gracias a ambos, me ha sido muy útil.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SQLite integer como float
Bases de Datos
Dukatus 0 2,330 Último mensaje 17 Marzo 2013, 01:20 am
por Dukatus
[C] Problema al leer un char dentro de un while
Programación C/C++
cesariox23 3 5,237 Último mensaje 30 Diciembre 2014, 04:13 am
por rir3760
consulta: leer 1 int y un char en una sola sentencia y mostrarlos por separados
Programación C/C++
etcheverrypablol 3 2,511 Último mensaje 19 Enero 2016, 05:46 am
por fary
Problema leer char *
Programación C/C++
Vacka_96 1 1,943 Último mensaje 1 Noviembre 2016, 18:34 pm
por MAFUS
Cómo comparo un int con un float?
Java
afrocardo 2 1,649 Último mensaje 24 Marzo 2017, 17:27 pm
por afrocardo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines