Escolar Documentos
Profissional Documentos
Cultura Documentos
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 -
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 -
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 ...
}
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.
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.
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 -
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 %
Resultado deseado:
Datos necesarios:
Procesamiento:
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 -
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
Pag. - 9 -
Error
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.
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
FIN
Pag. - 12 -
#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.
INICIO
tipo, n1, n2
tipo
rpta = n1 + n2
rpta = n1 - n2
rpta = n1 * n2
OTROS
rpta = 0
rpta
FIN
Pag. - 14 -
#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
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
tipo , dias
tipo
11
costo = 200
12
costo = 350
costoTotal
FIN
Pag. - 17 -
13
costo = 420
#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 ;
}
Pag. - 18 -