Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NAESASIMO en 31 Diciembre 2010, 05:17 am



Título: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: NAESASIMO en 31 Diciembre 2010, 05:17 am
Hola a todos!!, tengo un  problema o mejor dicho no se como hacer para graficar los valores de las soluciones de una ecuacion cuadratica, es decir, representar mediante astericos '*' la grafica de la ecuacion dependiendo de si el "discriminante" es mayor, menor o igual a cero. En mi problema original dice: "Sea Disc=B^2 - 4AC, donde Disc= Discriminante, si Disc > 0 es una hiperbola, si Disc < 0 es una elipse, si Disc = 0 es una parabola. Diseñe un algoritmo donde se da como entrada los  numeros A, B, C y se muestra en pantalla si es una parabola, hperbola o elipse."

Tengo un codigo para resolver la ecuacion cuadratica y da el resultado de la operacion dependiendo del discriminante, pero ahora quiero que estos valores sean graficados... el codigo es el siguiente:

Código:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

char opc;
short bucle = 1;
float a,b,c,disc,res,im1,im2;

int main() {
   while (bucle) {
     
      //Introducción
     
      printf("\n Solucion de ecuaciones de 2do grado.\n Introduce los factores A, B y C de la ecuacion: Ax^2+By+C=0\n");
      printf("Teclea A:");
      scanf("%f",&a);
      printf("Teclea B:");
      scanf("%f",&b);
      printf("Teclea C:");
      scanf("%f",&c);

      //Soluciones
      res = (-b)/(2*a);
      disc = (b*b)-(4*a*c);
      im1 = sqrt(fabs(disc))/(2*a);
      im2 = -im1;

      if (disc>0) printf("\n\nSolucion doble: %.3f , %.3f",res+im1,res+im2);
      else if (disc==0) printf("\n\nSolucion unica: %.3f",res);
      else if (disc<0) printf("\n\nSolucion doble imaginaria: %.3f+%.3fi , %.3f+%.3fi",res,im1,res,im2);
     
      //Finalizar o seguir
      printf("\n\n Hacer otra ecuacion [s/n]?");
      opc = 0;
      while (opc!='s' && opc!='n') {
         scanf("%c",&opc);
         if (opc=='n') bucle = 0;
      }
   }
}





Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: N0body en 2 Enero 2011, 04:14 am
Creo que no te responderán, no sólo porque va contra la norma de no resolver tareas porque además está muy poco claro...

La gráfica (en el plano real) de una FUNCIÓN cuadrática es siempre una parábola...

y=-x^2+2

Aquí la gráfica sería igual a la de -x^2 "corrida" dos enteros hacia arriba... y la de -x^2 es el resultado de aplicar simetría axial con respecto al eje x a la gráfica de x^2.

Ahora, si tu te refieres a una ECUACIÓN cuadrática... osea a algo parecido a:

-x^2+2=0

Está es una ecuación (como muy bien el nombre dice), que puedes hallar los valores de x (reales o imaginarios) que satisfagan la ecuación...


Ahora, el post deja confuso si quieres graficar una función cuadrática dependiendo de sus coeficientes o deseas encontrar las soluciones de una ecuación cuadrática (dada sus coeficientes) y representar esos valores en el plano real o imaginario (dependiendo de las soluciones)


El programa que pusiste encuentra las soluciones de la cuadrática... espero que tú mismo lo entiendas y no lo hayas copiado, porque ese ya sería un paso en falso...

Creo que es un programa muy lindo de hacer si se trata de graficar la función cuadrática y sería una pena que no te respondieran porque te expresaste de forma escasa...

Otra cosa: usa las etiquetas GeSHi para que el código se vea de forma más clara...


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: Oblivi0n en 2 Enero 2011, 14:51 pm
Para estas cosas es mejor utilizar WinAPI (o librerias graficas  :xD ), con una simple estructira POINT  y saber un poco de GDI basico lo haces.


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: xassiz~ en 2 Enero 2011, 14:58 pm
¿En C o C++? Título y código se contradicen :rolleyes:


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: leogtz en 2 Enero 2011, 20:57 pm
La gráfica (en el plano real) de una FUNCIÓN cuadrática es siempre una parábola...

Mi profesor de matemáticas te habría corregido diciéndote que en R^2 o en dos dimensiones, al decir "plano" hablamos de otra dimensión.


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: Ferno en 2 Enero 2011, 23:52 pm
Mi profesor de matemáticas te habría corregido diciéndote que en R^2 o en dos dimensiones, al decir "plano" hablamos de otra dimensión.

No habría que seguir desvirtuando pero... 1 dimension = R = recta real.
2 dimensiones = R^2 = plano. (plano xy genéricamente)
3 dimensiones = R^3 = espacio.

Al menos para mí está bien dicho :P


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: leogtz en 3 Enero 2011, 03:58 am
¿Saben qué?, acepto mi error, me he confundido.

Me he confundido con el plano.

Línea recta -> 1 dimensión.
Plano -> 2 dimensión. R^2
Espacio -> 3 dimensión R^3


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: ghastlyX en 3 Enero 2011, 19:01 pm
El caso es que parece que mezcla conceptos diferentes. Por el post se entiende que se refiere a la ecuación de segundo grado de toda la vida, que sin contar los casos degenerados siempre es una parábola como bien se ha dicho.

Sin embargo, por lo que dice sobre decir si es una parábola, hipérbola o elipse, me hace pensar que quizá lo que quiera hacer sea clasificar una cónica según sus invariantes métricos, cuyas ecuaciones también son funciones cuadráticas, sólo que de dos variables.


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: Ferno en 3 Enero 2011, 19:52 pm
El caso es que parece que mezcla conceptos diferentes. Por el post se entiende que se refiere a la ecuación de segundo grado de toda la vida, que sin contar los casos degenerados siempre es una parábola como bien se ha dicho.

Sin embargo, por lo que dice sobre decir si es una parábola, hipérbola o elipse, me hace pensar que quizá lo que quiera hacer sea clasificar una cónica según sus invariantes métricos, cuyas ecuaciones también son funciones cuadráticas, sólo que de dos variables.

Es exactamente esto que dices.
Discriminante de una sección cónica: "http://es.wikipedia.org/wiki/Discriminante#Discriminante_de_una_secci.C3.B3n_c.C3.B3nica"



Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: N0body en 3 Enero 2011, 21:36 pm
Pues si es ésto el que creo el post, no tenía mucha idea de lo que en verdad hace el código que pone.
Es más, me tomaría el atrevimiento de decir que no lo leyó, ya que en el dice:
" Introduce los factores A, B y C de la ecuacion: Ax^2+By+C=0"


y al hablar de una sección cónica tenemos algo así: (sacado del artículo de wikipedia posteado anteriormente)
ax2 + bxy + cy2 + dx + ey + f= 0
Que tiene infinitos pares (x,y) que satisfacen la ecuación. Puediendo ser representados esos pares como puntos siendo "x" la abscisa e "y" la ordenada del punto (no es una gráfica de función ya que pueden existir diferentes "y" para un mismo "x"). La figura determinada ahora sí puede ser cualquier cónica...


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: ghastlyX en 3 Enero 2011, 22:43 pm
Me he estado mirando lo de Wikipedia y en efecto es eso, sólo que la información que tiene es más bien escasa, puesto que la clasificación se suele profundizar un poco más habitualmente.

La cónica ax2 + bxy + cy2 + dx + ey + f = 0, habitualmente se suele poner matricialmente de la forma (X 1)A(X 1)T, donde
Código:
X = (x y)
    (a      b/2     d/2 )
A = (b/2    c       e/2 )
    (d/2    e/2     f   )

Si llamamos B a la submatriz cuadrada que consta de las dos primeras filas y columnas de A y calculamos sus respectivos polinomios característicos, es decir,
det(B - x*Id) = x2 - d1x + d2
det(A - x*Id) = -x3 + D1x2 - D2x + D3

Entonces se cumple:

- Si D3 != 0:
       * Si d2 = 0 es una parábola
       * Si d2 < 0 es una hipérbola (hipérbola equilátera si d1 = 0)
       * Si d2 > 0 es una elipse:
                - Si D3d1 < 0 es real (es una circunferencia si d12 = 4d2)
                - Si D3d1 > 0 es imaginaria
- Si D3 = 0 (cónica degenerada):
       * Si d2 > 0 es un par de rectas imaginarias
       * Si d2 < 0 es un par de rectas reales
       * Si d2 = 0:
                - Si D2 < 0 es un par de rectas paralelas reales
                - Si D2 > 0 es un par de rectas paralelas imaginarias
                - Si D2 = 0 es un par de rectas coincidentes

Donde queda incluida la clasificación de Wikipedia.


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: seTINGAN en 7 Junio 2011, 02:31 am
Leo Gutiérrez. siempre opina de todo, bájale


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: leogtz en 7 Junio 2011, 04:32 am
Leo Gutiérrez. siempre opina de todo, bájale

Así es, ¿te molesta?, pues ahora opino que deberías leer las reglas y no revivir mensajes viejos.


Título: Re: Graficar con '*' en C++ ecuacion cuadratica
Publicado por: Don Pollo en 7 Junio 2011, 16:01 pm
Quizás me equivoque, pero el problema sólo te pide que digas si es una parábola, una hipérbole o elipse, no te pide en ningún momento que las dibujes.