viernes, 12 de agosto de 2011

ESTRUCTURA CONDICIONAL MULTIPLE

Esta instrucción se utiliza para seleccionar una alternativa dentro de multiples opciones disponibles.
El contenido de la variable selector debe ser ordinal, es decir debe ser de tipo int o char o sus variantes de int: long int, short int, no esta permitido datos de tipo float.
Es decir si la variable selector es exactamente igual a la constante J, entonces se ejecutara la sentencia J(s), luego de encontrar la instrucción break, hara que el control del programa salga fuera del switch.
Si no cumple la condición anterior pasara a evaluar el siguiente caso y así sucesivamente. Si ninguno de los casos se cumple ejecuta las sentencias default.

Pseudocódigo
C++
Según sea(Valor)
      Caso <condicion1>
                Sentencia1(s)
                Salto
      Caso <condicion2>
                Sentencia2(s)
                Salto
      Caso <condicion3>
                Sentencia3(s)
                Salto
      Caso <condicion4>
                Sentencia4(s)
                Salto
      Default
                SentenciaD(s)
                Salto
FinSegunsea   
switch (valor)
{
  Case : <condicion1>
        Sentencia1(s);
        break;
  Case : <condicion2>
        Sentencia2(s);
        break;
  Case : <condicion3>
        Sentencia3(s);
        break;
  Case : <condicion4>
        Sentencia4(s);
        break;
  default:
        SentenciaD(s);
       break;
}

Ejemplos.
E1.
Escribir un algoritmo que pida el colegio de Procedencia que puede ser A, B, C y el modo de educación tipo Nacional (N), y Particular (P). Según el siguiente cuadro hallar el monto a pagar.


Nacional
Particular
A
50
25
B
40
29
C
30
15

(compilado en  dev C++)
#include<iostream.h>

int main(){
char c,p;
int monto;
cout<<"Colegio de procedencia : A / B / C : ";
cin>>c;
cout<<"Ingrese el modo de educación : N / P : ";
cin>>p;

switch(c){
    case 'A':
         if(p=='N')
             monto=50;
         if(p=='P')
             monto=25;
         break;
    case 'B':
         if(p=='N')
             monto=40;
         if(p=='P')
             monto=29;
         break;
    case 'C':
         if(p=='N')
             monto=30;
         if(p=='P')
             monto=15;
         break;
    default:
            monto=0;
         break; 
}
if(monto!=0)
    cout<<"El importe a pagar es  "<<monto<<endl;
else
     cout<<"Asegurese de haber ingresado bien los datos"<<endl;

system("pause");
return 0;
}

Explicación

Se pide el ingreso del colegio y el modo de educación tener en cuenta que una misma letra en mayúscula y en minúscula son diferentes en C++ por lo tanto si se ingresan como colegio: a (en minúscula) no será reconocido.

En el switch(c) se evalúa el colegio de procedencia por ser un dato de tipo char no hay ningún problema (lo mismo con enteros), después se busca en donde coincide el dato; por ejemplo si fuera: B la letra ingresada entra a ejecutar todo en código que esta debajo de case ‘B’  (o al costado depende de cómo esta escrita el código)  hasta encontrar el break que hace que salga de switch (sale del corchete del switch), en caso de no encontrar ninguna coincidencia con los casos en el código entra a ejecutar el código debajo del default (el uso del default es opcional) hasta encontrar el break que hace salir del switch y se continua con las demás senteccias; en el caso de que no se ponga un default y no se encuentre ninguna coincidencia solo saldrá del switch.

E2.
Escribir un programa que dado el tipo de enfermedad (0, 1, 2, 3) y el numero de años del paciente, calcule el costo para la medicina, se sabe que para cualquier paciente que tenga 14 y 22 años el costo para la cura se incrementa en un 10%, además para la enfermedad tipo 0, la medicina esta S/. 25.00 para el tipo 1 la medicina esta S/.16, para el tipo 2 la medicina esta S/.20 y para el tipo 3 la medicina esta S/.32

#include<iostream.h>

int main(){
int tipoe,anios;
float costo=0;

cout<<"Ingrese tipo de enfermedad : 0 / 1 / 2 / 3  : ";
cin>>tipoe;
cout<<"Años del paciente : ";
cin>>anios;


switch(tipoe){
    case 0 :if(anios>=14&&anios<=22)
                costo=25+25*(10/100.); 
            else
                costo=25;
            break;
    case 1 :if(anios>=14&&anios<=22)
                costo=16+16*(10/100.);
            else
                costo=16;
            break;
    case 2 :if(anios>=14&&anios<=22)
                costo=20+20*(10/100.);
            else
                costo=20;
            break;
    case 3 :if(anios>=14&&anios<=22)
                costo=32+32*(10/100.);
            else
                costo=32;
            break;                                   
}

/*si el costo el diferente de cero quiere decir
que entro en algun caso*/

if(costo!=0)
    cout<<"El costo a pagar segun esa enfermedad es : "<<costo<<endl;
else
    cout<<"Error se ingreso los datos incorrectamente "<<endl;

system("pause");
return 0;
}

Explicación

El condicional if(anios>=14&&anios<=22)  evalúa si los años esta en el intervalo de 14 a 22, si los años están dentro de ese intervalo entonces el costo se incrementara en un 10% mas de lo normal ejemplo: costo=20+20*(10/100.)  el punto al final del 100 es para que la división salga con decimales si esta los tiene.

Eso es todo en este tema no se olviden de comentar…J

3 comentarios: