Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lettro en 8 Diciembre 2012, 23:30 pm



Título: [Ayuda] Comenzando con C++...
Publicado por: Lettro en 8 Diciembre 2012, 23:30 pm
Buenas, me acabo de registrar en el foro, ya que necesitaria ayuda con la creación de un sencillo programa, el cual consiste en resolver una ecuación cuadratica (http://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_segundo_grado).
Tuve varios errores y ahora llege a resolver la mayoría, pero ahora me tira 1 alerta más, la cual es importante ya que es la causante de que no se resuelva la ecuación.

Les dejo el código que tengo:

Código
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <math.h>
  4.  
  5. /*
  6.  
  7.  
  8. ...Codigo generado por el programa...
  9.  
  10.  
  11. */
  12.  
  13. /* Boton que daria el resultado de la ecuacion */
  14. private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
  15. int a = Convert::ToInt16(textBox1->Text);
  16. int b = Convert::ToInt16(textBox2->Text);
  17. int c = Convert::ToInt16(textBox3->Text);
  18.  
  19.        int discriminant = sqrt(float(b*b) -  float(4*a*c));
  20. cout << ((-b + discriminant) / (2*a)) << endl;
  21. }

El warning que me tira es el siguiente:
Citar
warning C4244: 'inicializando' : conversión de 'float' a 'int'; posible pérdida de datos

Busqué el warning y pero nada me dio solución. Tampoco entiendo bien por qué en el sqrt() tengo que aclarar si los valores van a ser float, double, long double..
la cosa es que el usuario agrega los 3 valores de la ecuación cuadrática, uno en cada textbox, y después se toca el boton1 y se supone que tendría que dar el resultado de toda la ecuación, cuya fórmula es la que esta en la última línea de código (cout << ((-b...

Tirenme todos los datos, recomendaciones, explicaciones que quieran que todo me va a sumar. Gracias!

Aclaro, que como dice en el título del post, estoy recién empezando (este sería mi primer programa) con C++ (vengo de programar con PHP, javascript, AJAX) y también, que estoy utilizando Visual C++ Express 2010. Este mismo programita, lo hice antes de ayer en PHP y quedo listo en 30 minutos, me decidí a hacerlo tipo aplicación y me meti en un quilom**


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: Lettro en 9 Diciembre 2012, 00:56 am
En otro foro me dijeron que declare "discriminant" como float, y eso me quito la alerta, pero ahora mi problema es el siguiente:
La cosa ahora es que, no me muestra ningun error/alerta, pero no me tira el resultado de la ecuación. Mi duda también es que, cout en Visual C++ donde se supone que tiraria la línea de texto dentro del form? No tendría que mostrar el resultado en un label algo asi?


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: naderST en 9 Diciembre 2012, 09:10 am
Si estás trabajando con una GUI deberías mostrarlo en un label o algo por el estilo, por otra parte,  Visual Studio si no me equivoco tiene una consola donde debería mostrarse lo que estás imprimiendo con cout. Como te mencionaron en el otro foro, deberías declarar discriminant como float puesto que si lo declaras como int el número se truncará y podrías perder información del mismo. Si te fijas a,b y c los estás trabajando como entero, sería bueno que los trabajes como flotante porque los coeficientes de la ecuación pueden ser cualquier número real.

Te doy un consejo, primero lo primero, si estás empezando con C++ empieza con aplicaciones pequeñas en consola, para luego poder realizar aplicaciones con interfaces gráficas.

EDIT.

Con respecto al casting en la función sqrt() no es necesario debido a que esta función esta sobrecargada, es decir, dependiendo del tipo de dato que le pases como argumento se va a llamar a la función que le corresponda.


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: Lettro en 10 Diciembre 2012, 04:00 am
Lo probe en consola y me muestra el resultado perfectamente. Se ve que en un form el cout no funciona, por lo tanto tendría que mostrar el resultado en un label como decis.. La cosa es que no tengo idea como mostrarlo en un label. Busque bastante y no pude encontrar la simple función para mostrar el resultado en un label.
También probe con print_f pero lo mismo que con cout, no me tira nada, y es más, me tira un error :
error C3861: 'print_f': no se encontró el identificador

Espero su respuesta, gracias!


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: naderST en 10 Diciembre 2012, 04:08 am
Evidentemente ni con cout ni printf vas a mostrar algo en un form... Por lo visto estás utilizando la suite de Visual Studio, no tengo experiencia utilizando VS, pero asumo que de la misma manera en que creaste el botón creas el label y desde el "evento" clicked del botón le asignas el texto al label.

PD: Te recomiendo que leas un libro básico de C/C++


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: Lettro en 10 Diciembre 2012, 04:37 am
Utilizo Visual C++ Express 2010, ya trate de asignarle a un label el resultado, pero me sale el error de que el float no se puede convertir a string...
Tengo un par guardados en la compu, después me voy a poner a leer alguno..


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: naderST en 10 Diciembre 2012, 05:10 am
Deberías ponerte de una vez ya que estás trancado por cosas muy básicas diría yo.


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: Lettro en 10 Diciembre 2012, 20:00 pm
Lo pude solucionar, mostrando el resultado en un label. Aca esta todo:

Código
  1. float a = Convert::ToInt16(textBox1->Text);
  2. float b = Convert::ToInt16(textBox2->Text);
  3. float c = Convert::ToInt16(textBox3->Text);
  4.  
  5. float discriminant = sqrt(float(b*b) -  float(4*a*c));
  6. float solucion_1 = (-b + discriminant) / (2*a);
  7.  
  8. label1 -> Text = solucion_1.ToString();

La cosa ahora es que el resultado final, me lo tira como entero. Por ejemplo, la ecuación tendria que dar -1,66 y da -1. Esto es porque al principio, convierto el texto de los textbox, en int16. Necesito convertirlos a float, pero probe con miles de funciones que encontre en internet y ninguna funciona. Probe con boost::lexical_cast, atof(), sscanf... Espero su respuesta.


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: naderST en 11 Diciembre 2012, 00:44 am
Porque al hacer Convert::ToInt16() te lo convierte a entero lo trunca, por lo tanto no va a mostrar los decimales.


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: Lettro en 11 Diciembre 2012, 00:53 am
Te agradezco toda la ayuda que me estas dando, pero en el 70% de las respuestas que me diste, parece como si no leyeras todos mis mensajes completamente. Ya sé que se trunca el resultado por eso. Te puse :

Citar
Esto es porque al principio, convierto el texto de los textbox, en int16. Necesito convertirlos a float, pero...

Te agradecería muchísimo si pudieses darme una solución a la conversión del string a float. Desde ya, muchísimas gracias!


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: naderST en 11 Diciembre 2012, 03:35 am
Disculpa no me había fijado últimamente he estado algo atareado. En C++ podrías hacer esto:

Código
  1.  
  2. #include <iostream>
  3. #include <sstream>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    float a;
  10.    stringstream ss("2.55",stringstream::in);
  11.    ss >> a;
  12.    return 0;
  13. }
  14.  

atof() debería funcionar, pero me imagino que el texto del campo te devuelve un objeto string, estos objetos tienen un método llamado c_str() que te devuelve un string de C el cual puedes utilizar en las funciones de la librería string de C


Título: Re: [Ayuda] Comenzando con C++...
Publicado por: rir3760 en 11 Diciembre 2012, 06:45 am
No utilizo C++ + .NET pero, si te interesa, la referencia en linea sobre esa clase es MSDN: Convert Class (http://msdn.microsoft.com/en-us/library/system.convert.aspx).

Un saludo