Dev - C++ - calculadora ecuaciones segundo grado

 
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++

calculadora ecuaciones segundo grado

Publicado por Guerrero15 (9 intervenciones) el 30/01/2021 15:08:39
Buenos días:

Hace una semana me propuse hacer una calculadora que resolviera ecuaciones de segundo grado. Estoy intentando hacer de una manera que no sé cómo puede ser de complicada.

He cogido todas las posibilidades que se puedan dar en una ecuacion de segundo grado y las he resuelto con if y else if, pero mucho de ellos se superponen y a veces no aparecen los printf o simplemente el resultado que me da es -1 #J. A veces en vez de J es una R.

No sé si hay alguna manera de que no se superpongan los if, y la verdad ando escaso de conocimientos, no llevo mucho tiempo con esto.

Llevo varios días haciendo el programa, pero no se me ocurre nada.

Alguna idea?

No me deja adjuntar el programa con formato cpp, así que lo voy a pegar.

Aviso que el programa son 160 lineas:

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale.h>
#include <Wchar.h>
 
int main(){
    float a, b, c, x0, x1, x2, babs, rzc;
 
    /*
        babs es el valor absoluto de b
        rzc es la raiz cuadrada de c
        a = ax^2
        b = bx
        c = c
        1 Resultado
        ===========
        x0 = resultado
        Varios resultados
        =================
        x1 = Primer resultado
        x2 = Segundo resultado
    */
 
    setlocale (LC_ALL, "");
 
    printf ("\n\t CALCULADORA DE SEGUNDO GRADO");
    printf ("\n\t ============================");
 
    printf ("\n\n\t ECUACIÓN DE SEGUNDO GRADO: Ax^2 + Bx + C \n\n\t Por favor, ponga COMAS, NO puntos");
 
    printf ("\n\n\t Inserte el valor de A: ");
    scanf ("%f", &a);
 
    printf ("\n\t Inserte el valor de B: ");
    scanf ("%f", &b);
 
    printf ("\n\t Inserte el valor de C: ");
    scanf ("%f", &c);
 
    babs = fabs (b);
    rzc = sqrt (c);
 
    system ("cls");
 
    if (a==0 && b==0 && c==0){
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t Todos los valores son cero, por lo tanto X = 0");
    }
 
    else if (a==0){
        x0 = -c/b;
 
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t X = %.2f", x0);
    }
 
    else if (b==0){
        if ((c>0 && a>0) || (c<0 && a<0)){
            printf ("\n\t RESULTADO");
            printf ("\n\t =========");
 
            printf ("\n\n\t No existe resultado, ya que es una raiz negativa");
        }
 
        else if (c<0 || a<0){
            x1 = sqrt (-c/a);
            x2 = -x1;
 
            printf ("\n\t RESULTADO");
            printf ("\n\t =========");
 
            printf ("\n\n\t X1 = %.2f", x1);
            printf ("\n\n\t X2 = %.2f", x2);
        }
    }
 
    else if (c==0){
        x1 = 0;
        x2 = -b/a;
 
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t X1 = 0");
        printf ("\n\n\t X2 = %.2f", x2);
    }
 
    else if (a==0 && b==0){
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t El resultado no existe, ya que %.2f no puede ser igual a 0", c);
    }
 
    else if ((b==0 && c==0) || (a==0 && c==0)){
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t X = 0");
    }
 
    else if (pow (b, 2) > 4*a*c){
        x1 = ((-1*b)/(2*a))+(sqrt (pow (b, 2) - 4*a*c))/(2*a);
        x2 = ((-1*b)/(2*a))-(sqrt (pow (b, 2) - 4*a*c))/(2*a);
 
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t X1 = %.2f", x1);
        printf ("\n\n\t X2 = %.2f", x2);
    }
 
    else if (pow (b, 2) == 4*a*c){
        x0 = -b/(2*a);
 
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t X1 = %.2f", x0);
    }
 
    else if (pow (b, 2) < 4*a*c){
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t No existe resultado, ya que es una raiz negativa");
    }
 
    else if (babs/2 == rzc){
        x0 = rzc;
 
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t X = %.2f", x0);
    }
 
    printf ("\n\n\t *En caso de ser el resultado una raiz negativa,");
    printf ("\n\t  esperen a la siguiente versión, intentaremos ");
    printf ("\n\t  solucionarlo. Gracias por su comprensión.");
 
    printf ("\n\n\t Presione una tecla para continuar...");
 
    return 0;
}
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
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++

calculadora ecuaciones segundo grado

Publicado por Guerrero15 (9 intervenciones) el 30/01/2021 15:43:59
Se me había olvidado comentar que los que me dan problemas son los tres que llevan &&.

El de a y b = 0, a y c = 0 y b y c = 0.
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++

calculadora ecuaciones segundo grado

Publicado por Guerrero15 (9 intervenciones) el 30/01/2021 20:23:00
El problema ya está resuelto. No sé si es la mejor manera, pero lo que sé es que sirve

A continuación añado el código correctamente hecho:

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <Mylib.h>
#include <locale.h>
#include <Wchar.h>
 
int main(){
    float a, b, c, x0, x1, x2, u, b2;
 
    /*
        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
    */
 
    setlocale (LC_ALL, "");
 
    printf ("\n\t CALCULADORA DE SEGUNDO GRADO");
    printf ("\n\t ============================");
 
    printf ("\n\n\t ECUACIÓN DE SEGUNDO GRADO: Ax^2 + Bx + C \n\n\t Por favor, ponga COMAS, NO puntos");
 
    printf ("\n\n\t Inserte el valor de A: ");
    scanf ("%f", &a);
 
    printf ("\n\t Inserte el valor de B: ");
    scanf ("%f", &b);
 
    printf ("\n\t Inserte el valor de C: ");
    scanf ("%f", &c);
 
    b2 = pow (b,2);
 
    system ("cls");
 
    if (a==0 && b==0 && c==0){
        printf ("\n\t RESULTADO");
        printf ("\n\t =========");
 
        printf ("\n\n\t Todos los valores son cero, por lo tanto X = 0");
    }
 
    else if (a==0){
        if (b==0){
            printf ("\n\n\t El resultado no existe, ya que ningún número puede ser igual a 0");
        }
 
        else if (c==0){
            printf ("\n\n\t X = 0");
        }
 
        else if (b!=0 && c!=0){
            x0 = -c/b;
 
            printf ("\n\n\t X = %.2f", x0);
        }
    }
 
    else if (b==0 && a!=0){
        if (c==0){
            printf ("\n\n\t X = 0");
        }
 
        else if ((c>0 && a>0) || (c<0 && a<0)){
            printf ("\n\n\t No existe resultado, ya que es una raiz negativa");
        }
 
        else if (c<0 || a<0){
            x1 = sqrt (-c/a);
            x2 = -x1;
 
            printf ("\n\n\t X1 = %.2f", x1);
            printf ("\n\n\t X2 = %.2f", x2);
        }
    }
 
  else if (c==0 && a!=0 && b!=0){
        x1 = 0;
        x2 = -b/a;
 
        printf ("\n\n\t X1 = 0");
        printf ("\n\n\t X2 = %.2f", x2);
    }
 
    else {
        if (a!=0 && a!=1){
            b = b/a;
            c = c/a;
            a = 1;
 
            b2 = pow (b, 2);
 
            if (b2/4 > c){
                u = sqrt ((b2/4) - c);
 
                x1 = -1* (b/2) + u;
                x2 = -1* (b/2) - u;
 
                printf ("\n\t RESULTADO");
                printf ("\n\t =========");
 
                printf ("\n\n\t X1 = %.2f", x1);
                printf ("\n\n\t X2 = %.2f", x2);
            }
 
            else if (b2/4 < c){
                printf ("\n\t RESULTADO");
                printf ("\n\t =========");
 
                printf ("\n\n\t No existe resultado, ya que es una raiz negativa");
            }
 
            else if (b2/4 == c){
                x0 = -1* (b/2);
 
                printf ("\n\t RESULTADO");
                printf ("\n\t =========");
 
                printf ("\n\n\t X = %.2f", x0);
            }
        }
 
        else {
            if (b2/4 > c){
                u = sqrt ((b2/4) - c);
 
                x1 = -1* (b/2) + u;
                x2 = -1* (b/2) - u;
 
                printf ("\n\t RESULTADO");
                printf ("\n\t =========");
 
                printf ("\n\n\t X1 = %.2f", x1);
                printf ("\n\n\t X2 = %.2f", x2);
            }
 
            else if (b2/4 < c){
                printf ("\n\t RESULTADO");
                printf ("\n\t =========");
 
                printf ("\n\n\t No existe resultado, ya que es una raiz negativa");
            }
 
            else if (b2/4 == c){
                x0 = -1* (b/2);
 
                printf ("\n\t RESULTADO");
                printf ("\n\t =========");
 
                printf ("\n\n\t X = %.2f", x0);
            }
        }
    }
 
    printf ("\n\n\t *En caso de ser el resultado una raiz negativa,");
    printf ("\n\t  esperen a la siguiente versión, intentaremos ");
    printf ("\n\t  solucionarlo. Gracias por su comprensión.");
 
    printf ("\n\n\t Presione una tecla para continuar...");
 
    repetir();
}
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