Make your own free website on Tripod.com

Condiciones, Expresiones lógicas y Estructuras de control

 

 

La Estructura Lógica “case”

 

Finalmente, cuando queremos ver varios posibles valores, sería muy pesado tener que hacerlo con muchos “if” seguidos o encadenados. La alternativa es la orden “switch”, cuya sintaxis es

switch (expresión)

    {

case caso1: sentencia1;

break;

case caso2: sentencia2;

sentencia2b;

break;     ...

case casoN: sentenciaN;

break;

default:

otraSentencia;

    };

 

La estructura lógica case sustituye la instrucción múltiple anidada IF/THEN/ELSE cuando usa la lógica positiva y el operador relacional igual. La estructura case provee una serie de instrucciones, de las cuales sólo una es seleccionada por el usuario y es ejecutada por la computadora. Mediante el uso de esta estructura, el programador facilita al usuario entrar el valor de una variable desde el teclado o de un archivo para una de entre muchas opciones que aparecen en una lista. Esta estructura no provee, una vez elegida una opción, regresar a seleccionar otra opción de la lista. Si el problema requiere regresar, el programador tiene que usar la estructura lógica iterativa (loop).

 

Estructura Lógica Case

Algoritmo

Flujograma

 

CASE OF VARIABLE

= constant1:

actions for VARIABLE = constant 1

= constant2:

actions for VARIABLE = constant 2

= constant3:

actions for VARIABLE = constant 3

.

.

OTHERWISE:

actions for VARIABLE = anything else

END-OF-CASE

 

 

 

 

 

 

La estructura decisional equivalente a la estructura case tiene que ser una serie de instrucciones IF/THEN/ELSE anidadas.  En la estructura case, el operador relacional es siempre igual (=). La estructura case es una forma especial de la estructura decisional, que permite a la computadora seleccionar una serie de instrucciones de entre otras muchas series mediante el uso de del operador relacional igual.

 

Para quien venga de Pascal, el equivalente sería case expresión of caso1: sentencia1; caso2: begin sentencia2; sentencia2b; end; ... casoN: sentenciaN; else otraSentencia; end;

Como la mejor forma de verlo es con un ejemplo, vamos allá:

 

Estructura lógoca CASE

 

//************************************************************

// Uso de “case” y de  “switch”

//*************************************************************

#include <iostream>

 

using namespace std;

 

char tecla;

main()

{

cout <<"Pulse una tecla: ";

tecla = getchar();      // Cual;quier tecla

switch (tecla)

   {

case ' ': cout <<"La tecla que pulsaste es la Barra Espaciadora." <<endl;   // Si pulsa un espacio

break;

case '1':    // Si pulsa un número o dígito

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

case '0': cout <<"La tecla es un dígito o numero." <<endl;

break;

default:  cout <<"La tecla no es ni espacio ni dígito." <<endl;     //Si pulsa otra tecla distinta a las anteriores

   }

return 0;

}

 

 

En primer lugar, insisto en una cosa: getchar() es lo mismo que cin >> ¿Por qué lo digo? Porque no basta con escribir la letra: la letra se leerá realmente cuando se procese todo el buffer del teclado, es decir, que debemos pulsar Intro después de la tecla que elijamos.

Otra cosa: no se pueden definir subrangos de la forma ‘0’..’9’ (“desde 0 hasta 9”, cosa que sí ocurre en Pascal), sino que debemos enumerar todos los casos. Pero, como se ve en el ejemplo, para los casos repetitivos no hace falta repetir las sentencias a ejecutar para cada uno, porque cada opción se analiza hasta que aparece la palabra “break”. Por eso, las opciones ‘1’ hasta ‘0’ hacen lo mismo (todas terminan en el “break” que sigue a ‘0’).

Finalmente, “default” indica la acción a realizar si no es ninguno de los casos que se han detallado anteriormente. Esta parte es opcional (si no ponemos la parte de “default”, simplemente se sale del “switch” sin hacer nada cuando la opción no sea ninguna de las indicadas). Después de “default” no hace falta poner “break”, porque se sabe que ahí acaba la sentencia “switch”.

 

 

Ejercicios

 

1.      Crea un flujograma y programa en C++ del siguiente problema de nómina:

 

Se pagará a $5.95 la hora regular. Las horas trabajadas sobre 40 se pagarán a tiempo y medio.

 

Estas son las posibles fórmulas para calcular el pago de horas regulares y extras:

Horas regulares: pago = rate * horas

Horas extra:         pago = rate * (40 + (horas – 40) * 1.5). O también:

              pago =  (HORAS_MAXIMO * rate) + (horas – HORAS_MAXIMO) * rate * OVERTIME

§         Declara las variables necesarias.

§         Entra las horas trabajadas mediante el teclado (cin).

§         Calcula el pago de horas regulares y extras mediante el IF.

§         Imprime las horas trabajadas (regulares y extras).

§         El slario devengado.

 

2.      Examina la siguiente declaración IF/THEN/ELSE. Recuerda que por cada IF debe haber un THEN y un ELSE.

 

                                 IF x < y

                                       THEN

                                             IF y < z

                                                   THEN

                                                                x = x+1

                                       ELSE

                                                   y + y+1

           

a.      ¿Es válida la declaración anterior? ¿Por qué?

b.  ¿Con qué IF va el ELSE?

 

3.      Hacer un algoritmo y flujograma de la siguiente condición:

 

Edad

Costo de entrada

< 16

7

>= 16 y < 65

10

>= 65

5

 

4.      Crea un flujograma y programa en C++ de la siguiente condición:

 

Ventas

Comisión

<= 2000

.02

2001–4000

.04

4001–6000

.07

>6000

.10

 

5.      Calcular el bono, dadas las siguientes condiciones:

 

Bono = 10 cuando el pago es <= 1000

Bono = 50 cuando el pago es  <= 2000

Bono = 100 cuando el pago es > 2000

 

6. Planilla con Excel

 

Usando la función IF anidada, crea la fórmula para saber la cantidad que hay que pagar al rendir la planilla de contribución.
 
 
Tabla para el cómputo de la contribución
Si el ingreso neto sujeto a contribución es
Entonces a pagar
Menor o igual a 2000
8% del ingreso
Mayor de 2000 y menor de 17000
160 + 12% del exceso de 2000
Mayor de 17000 y menor de 30000
1960 +18% del exceso de 17000
Mayor de 30000 y menor de 50000
4300 +31% del exceso de 30000
Mayor de 50000
10500 +33% del exceso de 50000
 
Para efectos del ejercicio, el ingreso neto sujeto a contribución se encuentra en la celda  C9  .