If y Case

Estas estructuras son muy importantes. "If" especifica las condiciones bajo las cuales será ejecutada una o varias sentencias y la sentencia "Case", consiste en una expresión (el selector) y una lista se sentencias, cada una prefijada con un caso.

Sintaxis:
             If  (Expresión)
                 Then  Sentencia;

                      O

             If (Expresión)
                 Then Sentencia
                 Else Sentencia;

Si la expresión resulta verdadera se ejecuta la sentencia de "Then". 
En el otro caso si la expresión del "If" resulta falsa se ejecuta la sentencia de "Else", en caso contrario la de "Then". En esta siempre se va a ejecutar una u otra, pero nunca ambas.

Pero, ¿qué pasa si tenemos más sentencias?. La solución es la de encerrar todas las sentencias dentro de "Begin" y "End".

Veamos unos casos:

Caso 1

If (Expresión)  
     Then
          Begin 
               Sentencias; {Todas las que se necesiten; terminar con ";"}
          End  {Este "End" no termina con ";", porque luego está "Else"}
     Else Sentencia;

Caso 2

If (Expresión) 
     Then
          Begin 
               Sentencias;
          End  {Este "End" no termina con ";", porque luego está "Else"}
     Else 
          Begin
               Sentencias;
          End;  {Se cierra con ";"}

Si a las expresiones de estos casos se le interpone un "Not" (Para negar) se invertirían los resultados, por lo que si el resultado de la expresión resulta verdadera, como tenemos un "Not" delante, ese verdadero se convierte en falso. De esta manera pasaría a ejecutarse "Else" y no "Then".
Ejemplo:

If  Not (2 < 5)
     Then  Write ('2')
     Else Write ('5');

¿Qué nos está diciendo este ejemplo?. Bien si vemos 2 es menor a 5 por lo que el resultado sería verdadero, pero como tenemos un "Not" delante se niega el resultado que dando en falsa, por lo que se muestra en pantalla 5 y no 2. Si no estaría en "Not" se mostraría en pantalla el 2 y no el 5.

Aclaración
  • Sentencia: es una sola instrucción. Por ejemplo: Write (' Dicho Soft') o puede ser Readln (Nombre).
  • Sentencias: en un conjunto de instrucciones. Por ejemplo varios "Write" y "Read", etc;

Otros casos validos:

Caso 3

If (Expresión) 
     Then
          If (Expresión)
               Then  Sentencia
               Else 
                    Begin
                         Sentencias;
                    End
     Else 
          If (Expresión)
               Then 
                    Begin
                         Sentencias
                    End
               Else  Sentencia;

Caso 4

If (Expresión) 
     Then
          If (Expresión)
               Then
                    If (Expresión)
                         Then 
                              If (Expresión)
                                   Then
                                        Begin
                                             Sentencias
                                        End
                                   Else  Sentencia
                         Else Sentencia
               Else Sentencia
     Else Sentencia;


Estos dos casos son validos, para comprobarlo solamente hace falta colocar una expresión en cada "If".

Veamos "Case"

Sintaxis:

            Case (Expresión) of
                  Caso_1: Sentencia;
                  Caso_2:Sentencia;
                  Caso_N:Sentencia;
            End;

                            O

            Case (Expresión) of
                  Caso_1: Sentencia;
                  Caso_2: Sentencia;
                  Caso_N: Sentencia;
               Else Sentencia;
            End;

Un caso consiste en una o más constantes o rangos, separados por coma. La parte "Else" es opcional.

Por ejemplo:

Case Variable of
       'A' .. 'Z', 'a' .. 'z' : Write ('Letra.');
       '0' .. '9' : Write ('Número');
       '-','+','/','*' : Write ('Operador');
     Else Write ('Carácter especial');
End;

Si queremos colocar más de una sentencia debemos encerrarlas entre "Begin" y "End".
Ejemplo:

Case (Expresión) of
        Caso_1: Begin
                           Sentencias;
                      End;
        Caso_2: Begin
                           Sentencias;
                      End;
End;

Caso práctico

Imagínate si en tu programa quieres establecer distintas acciones para todos los número (enteros) que van desde 1 a 9. El número es ingresado por el usuario y obviamente nosotros no lo conocemos, ¿como determinarías que número ha sido ingresado?. Pues no queda otra que ir preguntando uno por uno hasta dar con el número ingresado.

Lo podemos hacer de dos formas:

Forma 1 (Con "If")

Program Forma_1;
Uses Crt;
Var
     N: Integer;
Begin
     Clrscr;
     Write ('Ingrese un número entero entre 0 y 9: '); Readln (N);
     If N = 0
        Then Acción_1
        Else 
           If N = 1
              Then Acción_2
              Else
                 If N = 2
                    Then Acción_3
                    Else 
                       If N = 3
                          Then Acción_4
                          Else
                             If N = 4
                                Then Acción_5
                                Else
                                   If N = 5
                                      Then Acción_6
                                      Else
                                         If N = 6
                                            Then Acción_7
                                            Else
                                               If N = 7
                                                  Then Acción_8
                                                  Else
                                                     If N = 8
                                                        Then Acción_9
                                                        Else 
                                                           If N = 9
                                                              Then Acción_10
                                                              Else  Writeln ('Ingresó un número equivocado.');
     Repeat Until Keypressed;
End.

Forma 2 (Con "Case")

Program Forma_2;

Uses Crt;
Var
     N: Integer;
Begin
  Clrscr;
  Write ('Ingrese un número entero entre 0 y 9: '); Readln (N);
  Case N of
           0: Acción_1;
           1: Acción_2;
           2: Acción_3;
           3: Acción_4;
           4: Acción_5;
           5: Acción_6;
           6: Acción_7;
           7: Acción_8;
           8: Acción_9;
           9: Acción_10;
      Else Writeln ('Ingresó un número equivocado.');
   End;
Repeat Until Keypressed;
End.


¿Con qué forma te quedas?, obviamente que en este caso particular nos conviene toda la vida la forma 2. A simple vista podemos ver que la complejidad es mucho menor y ni hablar de la diferencia de tiempo que se tarda en escribir cada una.
Así que ya sabes que camino tomar cuando tienes muchas acciones y una sola variable que decide cual se ejecutará. Pincha aquí para verlo integrado en un posible menú para un programa hecho en Pascal.


No hay comentarios.:

Publicar un comentario