Dev - C++ - Problema con la subrutina

 
Vista:
sin imagen de perfil
Val: 46
Ha aumentado su posición en 35 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con la subrutina

Publicado por Guerrero15 (9 intervenciones) el 31/01/2021 14:35:42
Bueno días:

Ayer estuve haciendo un programa un tanto largo.

Como había una parte que se repetía se me ocurrió hacer una subrutina.

Cuando el código repetido estaba en la función principal funcionaba perfectamente, pero ahora que está en la subrutina no funciona. Seguramente sea un problema de la subrutina, pero no soy capaz de verlo. Alguien podría ayudarme?



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
int formula(){
    float b, c, x0, x1, x2, u, b2, disc;
 
/*
        a = ax^2
        b = bx
        c = c
        b2 es b^2
        u es la variable para este metodo
        1 Resultado
        ===========
        x0 = resultado
        Varios resultados
        =================
        x1 = Primer resultado
        x2 = Segundo resultado
*/
 
    b2 = pow (b, 2);
 
    disc = (b2/4)-c;
 
    if (disc > 0){
        u = sqrt (disc);
 
        x1 = (-1* (b/2)) + u;
        x2 = (-1* (b/2)) - u;
 
        printf ("\n\n\t X1 = %.2f", x1);
        printf ("\n\n\t X2 = %.2f", x2);
    }
 
    else if (disc < 0){
        printf ("\n\n\t No existe resultado, ya que es una raiz negativa");
    }
 
    else {
        x0 = -1* (b/2);
 
        printf ("\n\n\t X = %.2f", x0);
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con la subrutina

Publicado por Rodrigo (539 intervenciones) el 31/01/2021 15:56:09
Podrias explicitar que es lo que no funciona?

No deberia ser disc = b2 - 4 * a * c ?
y al calcular las raices, creo que hay que dividir por 2a, pero no lo veo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 46
Ha aumentado su posición en 35 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema con la subrutina

Publicado por Guerrero15 (9 intervenciones) el 31/01/2021 16:05:09
Lo que pasa es que si meto ese código en la subrutina, se dé el caso que se dé siempre coge un if. Al principio siempre cogía el segundo. Desde hace un rato, no sé que hice y solo coge le primero. Sin embargo, si lo pongo en el código copiado todas la veces que se necesita funciona perfectamente.

En este caso no es b2 - 4*a*c ya que no estoy usando la formula general.

Estoy usando el metodo "Po Shen Lo". Este metodo me facilita algo, ya que evito poner un if, debido a la sencillez del metodo.

Este metodo se basa en que -b/2 es la media de las soluciones de x1 y x2, y u es la variable de la diferencia. Es decir, si los resultados son 2 y 8, -b/2 simpre va a ser 5, por lo tanto, al calcular u nos dará 3

La ecuacion es x^2 - 10x +16

-b/2 es 5;

x1 = -b/2 + u; 5 + 3 = 8
x2 = -b/2 - u; 5 - 3 = 2

Este metodo es mucho más facil de calcularlo con la mente, y algo más facil de programar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar