You are on page 1of 18

ESTRUCTURAS LGICAS DE DECISIN

ESTRUCTURA LGICA DE DECISIN MLTIPLE: CUANDO

Definicin:
Una estructura de decisin mltiple CUANDO... FINCUANDO permite alterar el
flujo secuencial de una solucin ejecutando un conjunto de pasos dependiendo del
valor de una variable. Generalmente, para cada posible valor que pueda tener la
variable se define un conjunto de pasos a ejecutar. Tambin se define un conjunto de
pasos a ejecutar en caso que uno de los valores de la variable no tenga asociado un
conjunto de pasos a ejecutar. La variable a utilizar podr ser de tipo CARACTER o
ENTERO.
Este tipo de estructura es til cuando se tiene la necesidad de escoger entre ms de
dos opciones y se presentan mltiples opciones a las cuales se le puede asociar
valores de tipo CARACTER o ENTERO.

Representacin:
Formato para disear algoritmos:

En pseudocdigo:
EXPLICACIN:
CUANDO (variable) SEA
CASO valor 1 :
instrucciones ...
TERMINAR
CASO valor 2 :
instrucciones ...
TERMINAR
CASO valor n :
instrucciones ...
TERMINAR
OTROS:
instrucciones ...
FINCUANDO

Pag. - 1 -

Si el valor de la variable es igual a


uno de los valores colocados
despus de una de las reglas CASO,
se ejecutan las instrucciones que
estn dentro del mismo.
Si el valor de la variable no es igual a
ninguno de los valores colocados
despus de una de las reglas CASO,
se ejecutan las instrucciones que
estn dentro de la regla OTROS. La
regla OTROS es opcional (es decir,
puede aparecer como no).

En diagrama de flujo:

valor
variable

valor 1

instrucciones

valor 2

instrucciones

valor n

instrucciones

OTROS

instrucciones

Figura 0313

valor
variable

valor 1

instrucciones

valor 2

instrucciones

valor n

instrucciones

Figura 0314

Pag. - 2 -

OTROS

instrucciones

valor
variable

valor 1

instrucciones

valor 3

valor 2

instrucciones

instrucciones

OTROS

valor 4

instrucciones

instrucciones

Figura 03-15

valor
variable

valor 1

instrucciones

valor 2

instrucciones

valor 3

instrucciones

valor 4

instrucciones

OTROS

instrucciones

Figura 03-16

EXPLICACIN:
Si el valor de la variable es igual a uno de los valores que tiene como etiqueta el
flujo, se ejecutan las instrucciones que estn seguidas del flujo (las que indica la
flecha).

Pag. - 3 -

Si el valor de la variable no es igual a uno de los valores de las etiquetas de los


flujos, se ejecuta el flujo que tiene como regla OTROS. El flujo con la regla
OTROS es opcional.
Los diagramas de flujo mostrados en figuras 03-3, figura 03-14, figura 03-15 y
figura 0316 se utilizan en forma alternativa para elaborar estructuras lgicas de
Decisin Mltiple, que no requieren evaluar una condicin lgica sino el valor de
una variable. En estas estructuras se evala una variable y dependiendo de su
valor se ejecutarn un conjunto de instrucciones; es importante comprender que
estos diagramas muestran diferentes formas de disear una Estructuras Lgicas
de Decisin Mltiple usando diagramas de flujo.

Formato para codificar algoritmos:

En lenguaje de programacin C++:

EXPLICACIN:
Si el valor de la variable es igual a uno de
los valores colocados despus de la
palabra reservada case (valor 1, valor 2,
etc), se ejecutan las sentencias que estn
dentro del mismo hasta llegar al final (es
decir hasta la llave) a no ser que
encuentre una palabra reservada break
entre las sentencias que se ejecutan.

switch (variable) {
case valor 1 :
sentencias ...
break ;
case valor 2 :
sentencias ...
break ;
case valor n :
sentencias ...
break ;
default :
sentencias ...
}

Si el valor de la variable no es igual a


ninguno de los valores colocados despus
de una de las palabras reservadas case,
se ejecutan las sentencias que estn
dentro de la palabra reservada default. La
palabra reservada default es opcional (es
decir puede aparecer como no).

Es importante tener presente que deber usar la palabra reservada break al final
de cada bloque de sentencias si se desea que cada alternativa (case) ejecute un
grupo de sentencias sin que ejecute el grupo de sentencias de las alternativas
(case) que estn a continuacin.
Tambin es importante mencionar que la variable utilizada junto a la palabra
reservada switch slo puede ser de tipo ENTERO o de tipo CARACTER.
Si la variable es de tipo ENTERO (definida con la palabra reservada int), se
deber utilizar nmeros enteros despus de la palabra reservada case. En caso

Pag. - 4 -

que la variable sea de tipo CARACTER (definida con la palabra reservada char),
se deber utilizar un caracter encerrado entre apstrofe ( ' ' ) despus de la
palabra reservada case.

Cuando se disee un algoritmo que necesite utilizar estructuras de decisin, se


debe emplear correctamente los formatos establecidos, ya que estos constituyen
lo que denominamos un estndar o acuerdo.
Cuando se codifique un algoritmo recuerde que se tiene que seguir las reglas del
lenguaje de programacin que usar, caso contrario, al momento de ejecutar un
programa, se dar con la sorpresa que tendr errores de sintaxis.

Pag. - 5 -

Problema 011
Etapa 01 - Descripcin del problema.
Enunciado:
Ingresar un nmero del 1 al 7 y mostrar el da de la semana que le corresponde. Asuma que
el lunes es equivalente al da 1 y el domingo al da 7.
Etapa 02 - Definicin de la solucin.

Resultado deseado:
Datos necesarios:
Procesamiento:

Mostrar el da equivalente.
Un nmero.
Se ingresar un nmero por el teclado y se
almacenar en una variable (numero). Luego
se almacenar el da equivalente en una
variable (dia), sabiendo que el nmero 1
equivale al da lunes, el 2 equivale al da
martes y as sucesivamente hasta el 7 que
equivale al da domingo. Finalmente, se
mostrar el contenido de la variable dia.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgDia main ( )
ENTRADA:
SALIDA:

numero
dia

INICIO
ENTERO numero
TEXTO dia =
LEER numero
CUANDO ( numero ) SEA
CASO 1 :
dia = Lunes
TERMINAR
CASO 2 :
dia = Martes
TERMINAR
CASO 3 :
dia = Mircoles
TERMINAR
CASO 4 :
dia = Jueves
TERMINAR
CASO 5 :
dia = Viernes
TERMINAR
CASO 6 :
dia = Sbado
TERMINAR

Pag. - 6 -

Algoritmo PrgDia main ( )


CASO 7 :
dia = Domingo
FINCUANDO
ESCRIBIR dia
FIN
Intente disear el algoritmo en diagrama de flujo.

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgDia
#include <iostream>
#include <string>
using namespace::std;
int main ( ) {
int numero ;
string dia = ;
cout << Ingrese un nmero del 1 al 7: ;
cin >> numero ;
switch ( numero ) {
case 1 :
dia = Lunes ;
break ;
case 2 :
dia = Martes ;
break ;
case 3 :
dia = Mircoles ;
break ;
case 4 :
dia = Jueves ;
break ;
case 5 :
dia = Viernes ;
break ;
case 6:
dia = Sbado ;
break ;
case 7 :
dia = Domingo ;
default :
dia = Valor no valido...!!!! ;
}
cout << dia << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 7 -

Problema 012
Etapa 01 - Descripcin del problema.
Enunciado:
Leer la categora y sueldo de un trabajador y calcular el aumento correspondiente de acuerdo
a la tabla adjunta. Mostrar el sueldo incrementado del trabajador.
Categora
A
B
C
D

Aumento
18 %
12 %
09 %
06 %

Si se ingresa una categora no existente, mostrar un mensaje de error.


Etapa 02 - Definicin de la solucin.

Resultado deseado:
Datos necesarios:
Procesamiento:

Mostrar sueldo incrementado del trabajador.


Categora y sueldo del trabajador.
La categora y el sueldo del trabajador sern
almacenados en variables (categoria y sueldo o
s). Dependiendo la categora ingresada se
proceder a incrementar el sueldo del trabajador
(sueldo o s), teniendo como base la tabla
mostrada. Finalmente, se mostrar el sueldo
incrementado del trabajador.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgAumentoSueldo main ( )
ENTRADA:
SALIDA:

categoria, sueldo
sueldo

INICIO
NUMERO sueldo
CARACTER categoria
LEER
sueldo, categoria
CUANDO (categoria) SEA
CASO A :
CASO a :
sueldo = sueldo * 1.18
TERMINAR
CASO B :
CASO b :
sueldo = sueldo * 1.12
TERMINAR
CASO C :
CASO c :

Pag. - 8 -

Algoritmo PrgAumentoSueldo main ( )


sueldo = sueldo * 1.09
TERMINAR
CASO D :
CASO d :
sueldo = sueldo * 1.06
TERMINAR
OTROS:
ESCRIBIR Categora no vlida
FINCUANDO
ESCRIBIR sueldo
FIN

En diagrama de flujo:
Algoritmo PrgAumentoSueldo main ( )

INICIO

NUMERO s

CARACTER categoria

categoria , s

categoria

s = s*1.18

s = s*1.12

s = s*1.09

OTROS

s = s *1.06

FIN

Donde: la variable sueldo ha sido renombrada por s por motivos de espacio.

Pag. - 9 -

Error

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgAumentoSueldo
#include <iostream>
using std::cout ;
using std::cin ;
using std::endl ;

int main ( ) {
double sueldo ;
char categoria ;
cout << Ingrese el sueldo del trabajador : ;
cin >> sueldo ;
cout << Ingrese la categora del trabajador : ;
cin >> categoria ;
switch ( categoria ) {
case A :
case a :
sueldo = sueldo * 1.18 ;
break ;
case B :
case b :
sueldo = sueldo * 1.12 ;
break ;
case C :
case c :
sueldo = sueldo * 1.09 ;
break ;
case D :
case d :
sueldo = sueldo * 1.06 ;
break ;
default :
cout << Categora no vlida << endl ;
}
cout << El sueldo incrementado es: << sueldo << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 10 -

Problema 013
Etapa 01 - Descripcin del problema.
Enunciado:
En una dulcera se venden 4 tipos de sndwich, de acuerdo a la siguiente tabla:
Tipo
1 = Moderado
2 = Mediano
3 = Extra Grande
4 = Full

Costo
S/. 4.5
S/. 5.0
S/. 7.5
S/. 13.5

Calcule y muestre el monto total a pagar por un sndwich, sabiendo que, adicionalmente, hay
que pagar el 5% por el servicio y 2% por propinas. Si se ingresa otro tipo de sndwich
considerar costo = 0 y mostrar un mensaje de error.
Etapa 02 - Definicin de la solucin.
Intente desarrollar la definicin de la solucin.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgPagoSandwich main ( )
ENTRADA:
SALIDA:

tipo
montoPago

INICIO
ENTERO tipo
REAL costo , montoPago
LEER
tipo
CUANDO ( tipo ) SEA
CASO 1 :
costo = 4.5
TERMINAR
CASO 2 :
costo = 5.0
TERMINAR
CASO 3 :
costo = 7.5
TERMINAR
CASO 4 :
costo = 13.5
TERMINAR
OTROS :
ESCRIBIR Tipo de sndwich no vlido
costo = 0
FINCUANDO
montoPago = costo + costo * 0.05 + costo * 0.02
ESCRIBIR montoPago
FIN

Pag. - 11 -

En diagrama de flujo:
Algoritmo PrgPagoSandwich main ( )

INICIO

NUMERO tipo
REAL costo, montoPago

tipo

tipo

costo = 4.5

costo = 5

costo =7.5

costo = 13.5

OTROS

Error

costo = 0

montoPago = costo + costo * 0.05 + costo * 0.02

montoPago

FIN

Pag. - 12 -

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgPagoSandwich

#include <iostream>
using std::cout ;
using std::cin ;
using std::endl ;

int main ( ) {
int tipo ;
double costo, montoPago ;
cout << Ingrese el tipo de sndwich: ;
cin >> tipo ;
switch ( tipo ) {
case 1 :
costo = 4.5 ;
break ;
case 2 :
costo = 5.0 ;
break ;
case 3 :
costo = 7.5 ;
break ;
case 4 :
costo = 13.5 ;
break ;
default :
cout << Tipo de sndwich no vlido << endl ;
costo = 0 ;
}
montoPago = costo + costo * 0.05 + costo * 0.02 ;
cout << Monto a pagar: << montoPago << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 13 -

Problema 014
Etapa 01 - Descripcin del problema.
Enunciado:
Desarrollar una solucin que permita realizar operaciones de suma, resta o multiplicacin. Se
deber ingresar dos nmeros y el tipo de operacin que se desea realizar. Muestre un
mensaje de error si se ingresa un operador no vlido.
Etapa 02 - Definicin de la solucin.
Intente desarrollar la definicin de la solucin.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En diagrama de flujo:
Algoritmo PrgOperaciones main ( )

INICIO

REAL n1, n2, rpta


CARACTER tipo

tipo, n1, n2

tipo

rpta = n1 + n2

rpta = n1 - n2

rpta = n1 * n2

OTROS

rpta = 0

rpta

FIN

Intente disear el algoritmo en pseudocdigo.


Observe la forma como se finaliza la estructura lgica de decisin CUANDO. Esta es una
forma alternativa de hacer el diagrama de la estructura CUANDO.

Pag. - 14 -

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgOperaciones

#include <iostream>
using namespace::std ;

int main ( ) {
double n1, n2, rpta ;
char tipo ;
cout << Ingrese el tipo de operacin: ;
cin >> tipo ;
cout << Ingrese el primer nmero: ;
cin >> n1 ;
cout << Ingrese el segundo nmero: ;
cin >> n2 ;
switch ( tipo ) {
case + :
rpta = n1 + n2 ;
break ;
case - :
rpta = n1 - n2 ;
break ;
case * :
rpta = n1 * n2 ;
break;
default :
cout << Operacin no vlida !!! \n\n ;
rpta = 0 ;
}
cout << Resultado: << rpta << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Pag. - 15 -

Problema 015
Etapa 01 - Descripcin del problema.
Enunciado:
Calcular y mostrar el costo total que representa un paciente para un hospital de acuerdo al
tipo de enfermedad, segn los datos de la tabla. Considere que el costo mostrado en la tabla
es por cada da que el paciente estuvo internado en el hospital.
Enfermedad tipo
11
12
13

Costo del paciente por da


200
350
420

Etapa 02 - Definicin de la solucin.


Intente desarrollar la definicin de la solucin.

Etapa 03 - Diseo de la lgica.


1. Diseo del algoritmo.
En pseudocdigo:
Algoritmo PrgHospital main ( )
ENTRADA:
SALIDA:

tipo, dias
costoTotal

INICIO
ENTERO tipo , dias
REAL costo = 0, costoTotal
LEER tipo, das
CUANDO ( tipo ) SEA
CASO 11 :
costo = 200
TERMINAR
CASO 12 :
costo = 350
TERMINAR
CASO 13 :
costo = 420
OTROS :
ESCRIBIR Tipo de enfermedad no vlida!!!
FINCUANDO
costoTotal = costo * dia
ESCRIBIR costoTotal
FIN

Pag. - 16 -

En diagrama de flujo:
Algoritmo PrgHospital main ( )

INICIO

ENTERO tipo, dias


REAL costo = 0, costoTotal

tipo , dias

tipo
11

costo = 200

12

costo = 350

costoTotal = costo * dias

costoTotal

FIN

Pag. - 17 -

13

costo = 420

Etapa 04 - Desarrollo de la codificacin.


En lenguaje de programacin C++:
Clase PrgHospital

#include <iostream>
using namespace::std ;

int main ( ) {
int tipo, dias ;
double costo = 0, costoTotal ;
cout << Ingrese el tipo de enfermedad: ;
cin >> tipo ;
cout << Nmero de das de internamiento: ;
cin >> dias ;
switch ( tipo ) {
case 11 :
costo = 200 ;
break ;
case 12 :
costo = 350 ;
break ;
case 13 :
costo = 420 ;
break ;
default :
cout << \n Tipo de enfermedad no valida!!! << \n ;
}
costoTotal = costo * dias ;
cout << El costo total es: << costoTotal << \n\n ;
system ( PAUSE ) ;
return 0 ;
}

Ahora, se recomienda solucionar los problemas propuestos del 11 al 15.

Pag. - 18 -

You might also like