C/Visual C - switch compuesto (con dos variables) en c

 
Vista:

switch compuesto (con dos variables) en c

Publicado por Alejandro Caro (2 intervenciones) el 02/01/2012 02:22:32
como hago un switch compuesto (con dos variables) en c , cuando lo intento me tira error

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

int main(){
double a, b, c, r1, r2, real, compleja, d; //Declaración de variables
int varseleccion;
printf("a = \n"); printf("b = \n"); printf("c =\n");
printf("Ecuaci¢n: %e.x^2 + %e.x + %e", a, b, c);

switch (varseleccion){ //Ecuación degenerada
case a = 0 && case b = 0: //<-- case label does not reduce to an integer constant
printf("La ecuaci¢n es degenerada");
break;
case a = 0 && case b != 0: //Dos raíces reales iguales //<-- case label does not reduce to an integer constant
r1 = -c / b;
//r2 = r1
printf("r1 = r2 = %e", r1);
break;
default:
d = pow(b,2) - 4 * a * c;

switch (varseleccion){
case d >= 0: //Dos raíces reales diferentes //<-- case label does not reduce to an integer constant
r1 = (pow(-b + (pow(b,2) - 4 * a * c), (1 / 2))) / (2 * a);
r2 = (pow(-b - (pow(b,2) - 4 * a * c), (1 / 2))) / (2 * a);
printf("r1 = %e", r1);
printf("r2 = %e", r2);
break;
default: //Dos raíces complejas conjugadas
real = -b / (2 * a);
compleja = ((pow(b,2) + 4 * a * c), ((1 / 2))) / (2 * a); //<-- warning: value computed is not used|
printf("r1 = %e + %e.i", real, compleja);
printf("r2 = %e + %e.i", real, compleja);
}
}
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

switch compuesto (con dos variables) en c

Publicado por eduardo (82 intervenciones) el 08/01/2012 18:22:25
Hola. Cuando deseas que dos o más case ejecuten sentencias comunes, debe hacerlo de la siguiente manera:
1
2
3
4
5
6
7
8
9
switch (valor)   {
      case esto:
      case estoTambien:
         hacerAlgo();
         break;
      case otro:
         hacerOtraCosa();
         break;
      /* ... */


Personalmente opataría por resolverlo utilizando estructuras [b]if ... else[/b}
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
#include <stdio.h>
#include <math.h>
 
int main(void)
{
	double a, b, c, D, x1, x2;
	double p_real, p_imag;
 
	puts("Este programa resuelve una ecuacion de segundo grado con raices reales\n"
        "o complejas.\n");
 
	printf("Ingrese Coeficiente a   : ");
	fflush(stdout);
   scanf("%lf", &a);
 
   printf("Ingrese Coeficiente b   : ");
   fflush(stdout);
   scanf("%lf", &b);
 
   printf("Termino independiente c : ");
   fflush(stdout);
   scanf("%lf", &c);
 
   if (a == 0 && b == 0)
      puts("\nLa ecuacion es degenerada");
 
   else if (a == 0) {
      x1 = -c / b;
 
      printf("\nEcuacion de primer grado\n\n"
             "x = %f\n", x1);
   }
   else {
      D = b * b - 4 * a * c;
 
      if (D < 0) {
         p_real = -b / (2 * a);
         p_imag = sqrt(fabs(D)) / (2 * a);
 
         printf("\nDos raices complejas conjugadas\n\n"
                "x1: %f + %f(i)\n"
                "x2: %f - %f(i)\n", p_real, p_imag, p_real, p_imag);
      }
      else if (D == 0) {
         x1 = -b / (2 * a);
         x2 = x1;
 
         printf("\nDos raices reales e iguales\n\n"
                "x1: %f\n"
                "x2: %f\n", x1, x2);
      }
      else {
         x1 = (-b + sqrt(D)) / (2 * a);
         x2 = (-b - sqrt(D)) / (2 * a);
 
         printf("\nDos raices reales y diferentes\n\n"
                "x1: %f\n"
                "x2: %f\n", x1, x2);
      }
   }
 
   return 0;
}


Un saludo.
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

switch compuesto (con dos variables) en c

Publicado por Capitan Kirk (97 intervenciones) el 17/01/2012 10:29:27
Te he dejado una respuesta (básicamente similar a la que te ha dejado eduardo) en la sec´ción de Preguntas y Respuestas.
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