Autor Tema: pregunta muy de principiante... como usar un case  (Leído 774 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
pregunta muy de principiante... como usar un case
« en: 11 de Noviembre de 2018, 08:51:13 »
Hola mi pregunta es esa como usar un case pero con un ejemplo de un codigo mio para entender mejor como se hace puede ser?
parte de un codigo que tengo es así

Código: [Seleccionar]
if (valorpin38mm == HIGH)
    {
      mm38 = mm38 + 19;

      if (mm38 < 100)
      {
        Lcd.setCursor(0, 2);
        Lcd.print("                    ");
        Lcd.setCursor(0, 2);
        Lcd.print("mm: ");
        Lcd.print(int(mm38));
      }

      if ((mm38 > 100) && (mm38 < 1000))
      {
        Lcd.setCursor(0, 2);
        Lcd.print("                    ");
        Lcd.setCursor(0, 2);
        Lcd.print("Cm: ");
        Lcd.print(mm38 / 10);
      }

      if (mm38 > 1000)
      {
        Lcd.setCursor(0, 2);
        Lcd.print("                    ");
        Lcd.setCursor(0, 2);
        Lcd.print("Mtrs: ");
        Lcd.print(mm38 / 1000);
      }

    }

pero no se como "acomodar" las lineas...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7583
Re:pregunta muy de principiante... como usar un case
« Respuesta #1 en: 11 de Noviembre de 2018, 10:11:19 »
En ese caso no hay forma de usar un switch..case, ya que la condicion del switch..case es una igualdad.. Por ejemplo:

Código: C
  1.   switch(var) {
  2.   case 0:
  3.          //Aca algo
  4.          break;
  5.   case 1:
  6.          // Aca entra si var es 1
  7.          break;
  8.   default:
  9.          //Aca entra si no se cumple ninguna de las anteriores
  10.          break;
  11.   }

Si observas se necesita que el case sea el valor justo que tiene var.
En tu caso lo correcto, para no repetir algunas condiciones seria:

Código: C
  1.       if (mm38 < 100)
  2.       {
  3.         Lcd.setCursor(0, 2);
  4.         Lcd.print("                    ");
  5.         Lcd.setCursor(0, 2);
  6.         Lcd.print("mm: ");
  7.         Lcd.print(int(mm38));
  8.  
  9.       } else if ( mm38 < 1000 ) {
  10.  
  11.         Lcd.setCursor(0, 2);
  12.         Lcd.print("                    ");
  13.         Lcd.setCursor(0, 2);
  14.         Lcd.print("Cm: ");
  15.         Lcd.print(mm38 / 10);
  16.  
  17.       } else {
  18.  
  19.         Lcd.setCursor(0, 2);
  20.         Lcd.print("                    ");
  21.         Lcd.setCursor(0, 2);
  22.         Lcd.print("Mtrs: ");
  23.         Lcd.print(mm38 / 1000);
  24.       }

Si observas priemro se pregunta si es menor a 100, si no lo es pasaria al else que pregunta si es menor a 1000, el mayor o igual a 100 ya esta incluido gracias al else. y Finalmente el ultimo else significa que ya paso por todos los anteriores y no se cumplio, es decir no es menor a 100 ni menor a 1000. Por lo tanto el unico que queda es que al entrar ahi es amyor o igual a 1000.

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 273
Re:pregunta muy de principiante... como usar un case
« Respuesta #2 en: 11 de Noviembre de 2018, 12:11:31 »
Además  de las comparaciones redundantes como señala Killerjc , estás repitiendo código inútilmente pues el borrado de la línea es común a todo.

Si en lugar de 3 rangos a comparar hubiese mas, convendría una secuencia de este tipo.

Código: C
  1.    if (valorpin38mm == HIGH) {
  2.       mm38 = mm38 + 19;
  3.    
  4.       Lcd.setCursor(0, 2);
  5.       Lcd.print("                    ");
  6.       Lcd.setCursor(0, 2);
  7.      
  8.       if (mm38 < 100) {
  9.         Lcd.print("mm: ");
  10.         Lcd.print(int(mm38));
  11.       }
  12.       if (mm38 < 1000) {
  13.         Lcd.print("Cm: ");
  14.         Lcd.print(mm38 / 10);
  15.       }
  16.       else {
  17.         Lcd.print("Mtrs: ");
  18.         Lcd.print(mm38 / 1000);
  19.       }
  20.     }
  21.     }

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re:pregunta muy de principiante... como usar un case
« Respuesta #3 en: 12 de Noviembre de 2018, 10:09:13 »
gracias por responder y por los consejos y con razón me estaba quebrando la cabeza y no podia... por otro lado en el codigo de eduardo donde dices

 
Código: [Seleccionar]
if (mm38 < 100) {
        Lcd.print("mm: ");
        Lcd.print(int(mm38));
      }
      if (mm38 < 1000) {
        Lcd.print("Cm: ");
        Lcd.print(mm38 / 10);
      }

si supongamos tengo un valor (10) entraria por las dos condiciones... eso no entendi bien...

Desconectado Eduardo2

  • PIC18
  • ****
  • Mensajes: 273
Re:pregunta muy de principiante... como usar un case
« Respuesta #4 en: 12 de Noviembre de 2018, 12:06:06 »
....
si supongamos tengo un valor (10) entraria por las dos condiciones... eso no entendi bien...

Perdón , perdón :)  El primero solo es if , los demás son else if .    A la primer coincidencia debe dejar de comparar.

Si fueran 5  rangos 

Código: C
  1.       if (mm38 < x1) {
  2.         ............
  3.       }
  4.       else if (mm38 < x2) {
  5.         ............    
  6.       }
  7.       else if (mm38 < x3) {
  8.         ............    
  9.       }
  10.       else if (mm38 < x4) {
  11.         ............    
  12.       }
  13.       else {             ; El ultimo tramo
  14.         ............    
  15.       }
  16.  
  17.  













 

anything