Título: duda numeros complejos ec segundo grado
Publicado por: Chapielchapas 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: /**Escribe un programa que pida los coeficientes de una ecuación de segundo grado (a · x^ 2 + b · x + c =0) y escriba la solución. Recuerda que una ecuación de segundo grado puede tener dos soluciones reales diferentes, una única solución real, o dos soluciones complejas conjugadas.*/ #include <stdio.h> #include <math.h> #include <complex.h> int main(){ float coefa, coefb, coefc, sol1, sol2, discri; /** coefa -> a coefb -> b coefc -> c sol1 -> primera solución de la ecuación sol2 -> segunda solución de la ecuación discri -> discrimante, que es igual a b^2 menos 4ac */ printf("\nBienvenido a la calculadora de raices cuadradas\n"); //Bloque término al cuadrado printf("\nIntroduzca el coeficiente que acompaña al termino que esta al cuadrado: \n"); printf("\n\nEl coeficiente que acompaña al termino al cuadrado es: %.4f\n\n",coefa ); //Bloque término de grado uno printf("\nIntroduzca el coeficiente que acompaña al termino de primer grado: \n"); printf("\n\nEl coeficiente que acompaña al termino de primer grado es: %.4f\n\n",coefb ); //Bloque término independiente printf("Introduzca el coeficiente correspondiente al termino independiente: \n"); printf("\n\nEl coeficiente que acompaña al termino independiente es: %.4f\n\n",coefc ); //Definimos qué es el discriminante discri = pow(coefb ,2) - 4 * coefa * coefc ; /** Introducimos los condicionales pues vamos a tener tres casos posibles: 1. Que el discriminante sea mayor que cero, entonces habra dos soluciones reales y distintas. 2. Que el discriminante sea cero, entonces habrá dos soluciones reales iguales. 3. Que el discrimante sea menor que cero, entonces habrá dos soluciones complejas. */ if (discri > 0) //CASO 1 { sol1 = (-coefb + sqrt(discri ) ) / 2 * coefa ; sol2 = (-coefb - sqrt(discri ) ) / 2 * coefa ; printf("\n\nLa solucion son dos raices reales %.4f y %.4f \n\n",sol1 ,sol2 ); } if (discri == 0) //CASO 2 { sol1 = (-coefb + sqrt(discri ) ) / 2 * coefa ; sol1 = sol2; printf("\n\nLa solucion son dos raices reales iguales %f y %f \n\n",sol1 ,sol2 ); } if ( discri < 0) //CASO 3. { sol1 = (-coefb + csqrt(discri ) ) / 2 * coefa ; sol2 = (-coefb - csqrt(discri ) ) / 2 * coefa ; printf("\n\nLa solucion son dos raices complejos %f , %f \n\n",sol1 ,sol2 ); } //FALTA SABER COMO OPERAR NUMEROS COMPLEJOS return 0; }
· Los códigos deben ir en etiquetas GeSHi · No se debe escribir en mayúsculas >aquí las reglas del foro (http://foro.elhacker.net/reglas.htm) -Engel Lex
Título: Re: duda numeros complejos ec segundo grado
Publicado por: stderr 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 (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 (http://en.cppreference.com/w/c/numeric/complex) float discriminante(float a, float b, float c) { } float solucionRealDoble(float a, float b) { return (-b / (2 * a)); } float solucionReal1(float a, float b, float D) { return (-b + sqrt(D )) / (2 * a ); } float solucionReal2(float a, float b, float D) { return (-b - sqrt(D )) / (2 * a ); } float solucionCompleja1(float a, float b, float D) { return (-b / (2 * a )) + I * (sqrt(-D ) / (2 * a )); } float solucionCompleja2(float a, float b, float D) { return (-b / (2 * a )) - I * (sqrt(-D ) / (2 * a )); }
|