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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda numeros complejos ec segundo grado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda numeros complejos ec segundo grado  (Leído 2,058 veces)
Chapielchapas

Desconectado Desconectado

Mensajes: 6


Ver Perfil
duda numeros complejos ec segundo grado
« en: 20 Febrero 2018, 15:45 pm »

Hola buenas, me mandaron escribir un programita que calculara las ecuaciones de segundo grado y todo bien, pero cuando salen raices complejas que carajo que no las calcula me cawen to, que hay que asel pa resolvel este drama carajo. Pongo código:

Código
  1. /**Escribe un programa que pida los coeficientes de una ecuación de segundo grado (a · x^
  2. 2 + b · x + c =0) y escriba la solución. Recuerda que una ecuación de segundo grado puede
  3. tener dos soluciones reales diferentes, una única solución real, o dos soluciones complejas
  4. conjugadas.*/
  5.  
  6. #include <stdio.h>
  7. #include <math.h>
  8. #include <complex.h>
  9.  
  10. int main(){
  11.  
  12. float coefa, coefb, coefc, sol1, sol2, discri;
  13.  
  14. /** coefa -> a
  15. coefb -> b
  16. coefc -> c
  17. sol1 -> primera solución de la ecuación
  18. sol2 -> segunda solución de la ecuación
  19. discri -> discrimante, que es igual a   b^2 menos 4ac */
  20.  
  21. printf("\nBienvenido a la calculadora de raices cuadradas\n");
  22.  
  23. //Bloque término al cuadrado
  24.  
  25. printf("\nIntroduzca el coeficiente que acompaña al termino que esta al cuadrado: \n");
  26. scanf("%f",&coefa);
  27. printf("\n\nEl coeficiente que acompaña al termino al cuadrado es: %.4f\n\n",coefa);
  28.  
  29. //Bloque término de grado uno
  30.  
  31. printf("\nIntroduzca el coeficiente que acompaña al termino de primer grado: \n");
  32. scanf("%f",&coefb);
  33. printf("\n\nEl coeficiente que acompaña al termino de primer grado es: %.4f\n\n",coefb);
  34.  
  35. //Bloque término independiente
  36.  
  37. printf("Introduzca el coeficiente correspondiente al termino independiente: \n");
  38. scanf("%f",&coefc);
  39. printf("\n\nEl coeficiente que acompaña al termino independiente es: %.4f\n\n",coefc);
  40.  
  41. //Definimos qué es el discriminante
  42.  
  43. discri = pow(coefb,2) - 4 * coefa * coefc;
  44.  
  45. /** Introducimos los condicionales pues vamos a tener tres casos posibles:
  46. 1. Que el discriminante sea mayor que cero, entonces habra dos soluciones reales
  47. y distintas.
  48. 2. Que el discriminante sea cero, entonces habrá dos soluciones reales iguales.
  49. 3. Que el discrimante sea menor que cero, entonces habrá dos soluciones complejas.
  50. */
  51.  
  52. if (discri > 0) //CASO 1
  53. {
  54. sol1 = (-coefb + sqrt(discri) ) / 2 * coefa;
  55. sol2 = (-coefb - sqrt(discri) ) / 2 * coefa;
  56.  
  57. printf("\n\nLa solucion son dos raices reales %.4f y %.4f \n\n",sol1,sol2);
  58. }
  59.  
  60. if (discri == 0) //CASO 2
  61. {
  62.  
  63. sol1 = (-coefb + sqrt(discri) ) / 2 * coefa;
  64. sol1 = sol2;
  65.  
  66. printf("\n\nLa solucion son dos raices reales iguales %f y %f \n\n",sol1,sol2);
  67.  
  68.  
  69. }
  70. if ( discri < 0) //CASO 3.
  71. {
  72. sol1 = (-coefb + csqrt(discri) ) / 2 * coefa;
  73. sol2 = (-coefb - csqrt(discri) ) / 2 * coefa;
  74.  
  75. printf("\n\nLa solucion son dos raices complejos %f , %f \n\n",sol1,sol2);
  76. }
  77.  
  78. //FALTA SABER COMO OPERAR NUMEROS COMPLEJOS
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86. return 0;
  87. }
  88.  


· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex


« Última modificación: 20 Febrero 2018, 15:57 pm por engel lex » En línea

stderr

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: duda numeros complejos ec segundo grado
« Respuesta #1 en: 20 Febrero 2018, 19:23 pm »

En la wikipedia tienes las fórmulas, según este artículo el discriminante se representa por la letra "D"
https://es.wikipedia.org/wiki/Ecuaci%C3%B3n_de_segundo_grado#Discriminante

Dentro de la cabecera "complex.h" existe una macro llamada "I", que sí, se trata de la constante imaginaria
http://en.cppreference.com/w/c/numeric/complex

Código
  1. float discriminante(float a, float b, float c) {
  2.    sqrt(pow(b, 2) - 4 * a * c);
  3. }
  4.  
  5. float solucionRealDoble(float a, float b) {
  6.    return (-b / (2 * a));
  7. }
  8.  
  9. float solucionReal1(float a, float b, float D) {
  10.    return (-b + sqrt(D)) / (2 * a);
  11. }
  12.  
  13. float solucionReal2(float a, float b, float D) {
  14.    return (-b - sqrt(D)) / (2 * a);
  15. }
  16.  
  17. float solucionCompleja1(float a, float b, float D) {
  18.    return (-b / (2 * a)) + I * (sqrt(-D) / (2 * a));
  19. }
  20.  
  21. float solucionCompleja2(float a, float b, float D) {
  22.    return (-b / (2 * a)) - I * (sqrt(-D) / (2 * a));
  23. }
  24.  


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Resolucion de ecuaciones de segundo grado y primer grado tmb :s
Java
Debci 8 14,238 Último mensaje 8 Noviembre 2009, 12:59 pm
por Debci
duda ecuación de segundo grado c++
Programación C/C++
rub'n 8 9,846 Último mensaje 14 Mayo 2010, 02:31 am
por do-while
Ecuación de segundo grado [Complejos]
Programación C/C++
programator11 6 5,013 Último mensaje 6 Agosto 2014, 16:11 pm
por Xandrete
ayuda con multiplicacion de n numeros complejos
Programación C/C++
cho250425 1 2,804 Último mensaje 27 Noviembre 2016, 16:28 pm
por ivancea96
Ayuda con cola dinámica para calculadora de números complejos
Programación C/C++
evanderxzxtg 1 2,174 Último mensaje 20 Marzo 2019, 06:14 am
por evanderxzxtg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines