Autor
|
Tema: Leer un char como float (Leído 4,575 veces)
|
za.asi
Desconectado
Mensajes: 62
|
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: ... 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
Mensajes: 1.314
|
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:#include <iostream> #include <cstdio> using namespace std; int main() { const float G=6.67e-11,c=3e8,Ms=1.9891e30; float m,r,a=0; cout << "a(1 para Ms )=" ; cin >> a; if (a==1) m=Ms; else {cout << "m=" ;cin >> m;} r=2*G*m/(c*c); cout << r << endl; return 0; }
Saludos!.
|
|
« Última modificación: 24 Octubre 2012, 12:33 pm por leosansan »
|
En línea
|
|
|
|
za.asi
Desconectado
Mensajes: 62
|
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
Mensajes: 1.639
|
No puedes hacerlo directamente con una secuencia de sentencias como esta: float m; 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": #include <iostream> using std::cin; using std::cout; using std::endl; using std::getline; #include <string> using std::string; #include <sstream> using std::istringstream; int main() { double val; bool ok; do { ok = true; cout << "Indica el valor: "; string linea; getline(cin, linea); if (linea == "Ms") val = 1.9891e30; else { istringstream ss(linea); if (!(ss >> val)){ cout << "Entrada no valida!" << endl; ok = false; } } }while (!ok); cout << "El valor es " << val << endl; return 0; }
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
Mensajes: 62
|
Ya entiendo, pero me podrías decir en que biblioteca esta la función val?
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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ú.#include <iostream> #include <cstdio> using namespace std; int main () { double masa=0,r=0,G=6.67e-11,c=3e8,Ms=0,Mt=1,Mj=2; double masas[3]={1.9891e30, 5.98e24, 5.98e24}; int indice; cout << "Indique la masa (negativo si va e entrar la masa en Kg)="; cin >> indice; if (indice<0) { cout <<"m=";cin >>masa; r=2*G*masa/(c*c); } else r=2*G*masas[indice]/(c*c); cout <<r; return 0; }
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
Mensajes: 62
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
SQLite integer como float
Bases de Datos
|
Dukatus
|
0
|
2,336
|
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,249
|
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,514
|
19 Enero 2016, 05:46 am
por fary
|
|
|
Problema leer char *
Programación C/C++
|
Vacka_96
|
1
|
1,951
|
1 Noviembre 2016, 18:34 pm
por MAFUS
|
|
|
Cómo comparo un int con un float?
Java
|
afrocardo
|
2
|
1,654
|
24 Marzo 2017, 17:27 pm
por afrocardo
|
|