Está en la página 1de 14

8/4/2014

Barra de navegacin

Estructuras de Seleccin
3.1

Concepto

3.2

Estructura de Seleccin Simple SI

3.3

Estructura de Seleccin Doble SI-SINO

3.4

Estructura de Seleccin Doble en Cascada SI-SINO-SI

3.5

Estructura de Seleccin Mltiple SEGUN

3.6

Ejercicios 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15

3.1 Introduccin
Las estructuras de seleccin son estructuras de control utilizadas para la toma decisiones dentro de un
programa. A estas estructuras se conocen tambin como estructuras selectivas o estructuras de
decisin y son las siguientes:
La estructura de seleccin simple (SI).
La estructura de seleccin doble (SI-SINO).
La estructura de seleccin mltiple (SEGUN)

3.2 Estructura de Seleccin Simple SI


La estructura de seleccin simple permite ejecutar una accin o un grupo de acciones slo si se cumple
una determinada condicin. As, en el grfico 3.1, si la condicin es verdadera se ejecuta la accin
acciona; en caso contrario, no se hace nada.
Diagrama de Flujo

Pseudocdigo (accin simple)


SI( condicion )
acciona
Pseudocdigo (accin compuesta)
SI( condicion ){
acciona1
acciona2
.
.
.
accionan
}

Figura 3.1 Estructura de Seleccin Simple


Por ejemplo, si se desea cambiar el signo de un nmero nicamente en caso que sea negativo, podemos
escribir:
SI( numero < 0 )
numero = -1 * numero
Si el nmero no es negativo, simplemente esta estructura se pasara por alto y se continuara en la
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

1/14

8/4/2014

Barra de navegacin

siguiente instruccin despus del SI.

3.3 Estructura de Seleccin Doble SI - SINO


La estructura de seleccin doble permite seleccionar una ruta de dos rutas posibles en base a la verdad o
falsedad de una condicin. As, en la Figura 3.2, si la condicin es verdadera, se ejecuta la accin A; en
caso contrario, se ejecuta la accin B.
En la Figura 3.2 se muestra el diagrama de flujo y el pseudocdigo de la estructura de seleccin doble.
Diagrama de Flujo

Pseudocdigo (accin simple)


SI( condicion )
acciona
SINO
accionb
Pseudocdigo (accin compuesta)
SI( condicion ){
acciona1
acciona2
.
.
.
accionan
}
SINO{
accionb1
accionb2
.
.
.
accionbn
}

Figura 3.2 Estructura de Seleccin Doble


Por ejemplo, la siguiente estructura de seleccin doble determina si una persona es mayor o menor de
edad:
SI( edad >= 18 )
estado = "Mayor de edad"
SINO
estado = "Menor de edad"
Esto imprime "Mayor de edad" si la persona tiene 18 aos ms e imprime "Menor de edad" si la persona
tiene menos de 18 aos. En cualquiera de los casos, despus de efectuar la impresin, se ejecutar la
primera instruccin que sigue a la estructura SI...SINO.

3.4 Estructura de Seleccin Doble en Cascada SI-SINO-SI


La estructura de seleccin doble en cascada esta formada por varias estructuras de seleccin doble SISINO puestas una a continuacin de otra de forma que a un SI-SINO le sigue otro SI-SINO.
En la estructura de seleccin doble en cascada, las condiciones se evalan en orden descendente,
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

2/14

8/4/2014

Barra de navegacin

pasando de una condicin a otra si la condicin anterior resulta falsa. En el momento que se encuentra
una condicin verdadera, se efecta la accin correspondiente a dicha condicin y se corta el resto de la
estructura. Si todas las condiciones resultan falsas, se efecta la accin correspondiente al ltimo SINO,
que se considera como la accin por defecto.
En la Figura 3.3 se muestra el diagrama de flujo y el pseudocdigo de la estructura de seleccin doble en
cascada.
Diagrama de Flujo

Pseudocdigo ( Forma 1 )
SI( condicion1 )
accion1
SINO
SI( condicion2 )
accion2
SINO
SI( condicion3 )
accion3
.
.
.
SINO
acciondefecto
Pseudocdigo ( Forma 2 )
SI( condicion1 )
accion1
SINO SI( condicion2 )
accion2
SINO SI( condicion3 )
accion3
.
.
.
SINO
acciondefecto

Figura 3.3 Estructura de Seleccin Doble en Cascada


Por ejemplo, la siguiente estructura de seleccin doble en cascada determina el signo de un nmero entre
positivo, negativo o cero:
SI( n > 0 )
signo = "Positivo"
SINO
SI( n < 0 )
signo = "Negativo"
SINO
signo = "Cero"
Usando el otro formato tendramos:
SI( n > 0 )
signo = "Positivo"
SINO SI( n < 0 )
signo = "Negativo"
SINO
signo = "Cero"
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

3/14

8/4/2014

Barra de navegacin

3.5 Estructura de Seleccin Mltiple SEGUN


La estructura de seleccin mltiple SEGUN permite elegir una ruta de entre varias rutas posibles, en base
al valor de una variable que acta como selector. La estructura compara el valor del selector con las
constantes c1, c2, ..., cn en orden descendente. En el momento en que se encuentre una coincidencia, se
ejecuta la accin correspondiente a dicha constante y se abandona la estructura.
En la Figura 3.4 se muestra el diagrama de flujo y el pseudocdigo de la estructura de seleccin mltiple.
Diagrama de Flujo

Pseudocdigo
SEGUN( selector ){
CASO c1 : accion1
CASO c2 : accion2
CASO c3 : accion3
.
.
.
CASO cn : accionn
DEFECTO : acciondefecto
}

Figura 3.4 Estructura de Seleccin Mltiple


Por ejemplo, la siguiente estructura de seleccin mltiple determina el nombre de la estacin del ao
conociendo el nmero de la estacin (1 para Primavera, 2 para Verano, 3 para Otoo y 4 para Invierno) :
SEGUN(numeroEstacion){
CASO 1 : nombreEstacion = "Primavera"
CASO 2 : nombreEstacion = "Verano"
CASO 3 : nombreEstacion = "Otoo"
DEFECTO : nombreEstacion = "Invierno"
}

3.6 Ejercicios
Ejercicio 1:- En una playa de estacionamiento cobran S/. 2.5 por hora o fraccin. Disee un algoritmo
que determine cuanto debe pagar un cliente por el estacionamiento de su vehculo, conociendo el tiempo
de estacionamiento en horas y minutos.
Algoritmo 1
INICIO
// Declaracin de variables
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

4/14

8/4/2014

Barra de navegacin

ENTERO horas, minutos


REAL pago
// Entrada de datos
LEER horas, minutos
// Si hay alguna fraccin de hora, incrementa las horas a pagar en una
unidad
SI( minutos > 0 )
horas = horas + 1
// Determina el importe a pagar
pago = horas * 2.5
// Salida de resultados
IMPRIMIR pago
FIN
Algoritmo 2
INICIO
// Declaracin de variables
ENTERO horas, minutos, horasPagar
REAL pago
// Entrada de datos
LEER horas, minutos
// Determina el nmero de horas a pagar
SI( minutos > 0 )
horasPagar = horas + 1
SINO
horasPagar = horas
// Determina el importe a pagar
pago = horasPagar * 2.5
// Salida de resultados
IMPRIMIR pago
FIN
Ejercicio 2:- Disee un algoritmo que determine si n nmero es o no es, par positivo.
Algoritmo
INICIO
// Declaracin de variables
REAL numero
CADENA tipoNumero
// Entrada de datos
LEER numero
// Determina si el nmero es o no es, par positivo
SI( (numero%2==0) && (numero>0) )
tipoNumero = "El nmero es par positivo"
SINO
tipoNumero = "El nmero no es par positivo"

http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

5/14

8/4/2014

Barra de navegacin

// Salida de resultados
IMPRIMIR tipoNumero
FIN
Ejercicio 3:- Disee un algoritmo que lea tres nmeros y determine el nmero mayor.
Algoritmo
INICIO
// Declaracin de variables
REAL numero1, numero2, numero3, numeroMayor
// Entrada de datos
LEER numero1, numero2, numero3
// Determina el mayor
numeroMayor = numero1
SI( numero2 > numeroMayor )
numeroMayor = numero2
SI( numero3 > numeroMayor )
numeroMayor = numero3
// Salida de resultados
IMPRIMIR mayor
FIN
Ejercicio 4:- Una tienda ha puesto en oferta la venta al por mayor de cierto producto, ofreciendo un
descuento del 15% por la compra de ms de 3 docenas y 10% en caso contrario. Adems por la compra
de ms de 3 docenas se obsequia una unidad del producto por cada docena en exceso sobre 3. Disee
un algoritmo que determine el monto de la compra, el monto del descuento, el monto a pagar y el nmero
de unidades de obsequio por la compra de cierta cantidad de docenas del producto.
Algoritmo
INICIO
// Declaracin de variables
REAL montopag, montocom, montodes, precio
ENTERO docenas, obsequio
// Entrada de datos
LEER docenas, precio
// Determina el monto de la compra
montocom = docenas*precio
// Determina el monto del descuento y el obsequio
SI( docenas > 3 ){
montodes = 0.15*montocom
obsequio = docenas-3
}
SINO{
montodes = 0.10*montocom
obsequio = 0
}
// Determina el monto a pagar
montopag = montocom - montodes
// Salida de resultados
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

6/14

8/4/2014

Barra de navegacin

IMPRIMIR montocom, montodes, montopag, obsequio


FIN
Ejercicio 5:- Disee un algoritmo que lea un nmero de tres cifras y determine si es o no capica. Un
nmero es capica si es igual al revs del nmero.
Observacin
Como el nmero tiene tres cifras, para ser capica basta con que la cifra de las unidades sea igual a la
cifra de las centenas. Por ejemplo: 353, 878, etc.
Algoritmo
INICIO
// Salida de resultados
ENTERO numero, unidades, centenas
CADENA tipoNumero
// Entrada de datos
LEER numero
// Si el nmero tiene tres cifras...
SI(numero >= 100 && numero <= 999 ){
// Determina la cifra de las unidades y la cifra de las centenas
unidades = numero%10
centenas = numero/100
// Determina el tipo de nmero entre capica o no capica
SI( unidades == centenas )
tipoNumero = "El nmero es capica"
SINO
tipoNumero = "El nmero no es capica"
// Muestra el tipo de nmero
IMPRIMIR tipoNumero
}
SINO
IMPRIMIR "Ingrese un nmero de tres cifras"
FIN
Ejercicio 6:- Disee un algoritmo que califique el puntaje obtenido en el lanzamiento de tres dados en
base a la cantidad seis obtenidos, de acuerdo a lo siguiente: tres seis, excelente; dos seis, muy bien; un
seis, regular; ningn seis, psimo.
Algoritmo
INICIO
// Declaracin de variables
ENTERO dado1, dado2, dado3
CADENA calificacion
// Entrada de datos
LEER dado1, dado2, dado3
// Determina la calificacin
SI( dado1 + dado2 + dado3 == 18 )
calificacion = "Excelente"
SINO SI( dado1+dado2 == 12 || dado1+dado3 == 12 || dado2+dado3 == 12 )
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

7/14

8/4/2014

Barra de navegacin

calificacion = "Muy bin"


SINO SI( dado1 == 6 || dado2 == 6 || dado3 == 6 )
calificacion = "Regular"
SINO
calificacion = "Psimo"
// Salida de resultados
IMPRIMIR calificacion
FIN
Ejercicio 7:- Una compaa dedicada al alquiler de automoviles cobra un monto fijo de $30 para los
primeros 300 km de recorrido. Para ms de 300 km y hasta 1000 km, cobra un monto adicional de $ 0.15
por cada kilmetro en exceso sobre 300. Para ms de 1000 km cobra un monto adicional de $ 0.10 por
cada kilmetro en exceso sobre 1000. Los precios ya incluyen el 18% del impuesto general a las ventas,
IGV. Disee un algoritmo que determine el monto a pagar por el alquiler de un vehculo y el monto
includo del impuesto.
Algoritmo
INICIO
// Declaracin de variables
REAL kilomrec, montopag, montoigv, montofijo = 30, igv = 0.18
// Entrada de datos
LEER kilomrec
// Determina el monto a pagar
SI( kilomrec <= 300 )
montopag = montofijo
SINO SI( kilomrec <= 1000 )
montopag = montofijo + 0.15*(kilomrec-300)
SINO
montopag = montofijo + 0.15*700 + 0.10*(kilomrec-1000)
// Determina el monto del impuesto
montoigv = igv*montopag /(1+igv)
// Salida de resultados
IMPRIMIR montopag, montoigv
FIN
Ejercicio 8:- Disee un algoritmo que determine quienes son contemporneos entre Juan, Mario y Pedro.
Algoritmo
INICIO
// Declaracin de variables
ENTERO juan, mario, pedro
CADENA contemporaneos
// Entrada de datos
LEER juan, mario, pedro
// Determina quienes son contemporneos
SI( juan == mario && mario == pedro )
contemporaneos = "Los tres son contemporneos"
SINO SI( juan == mario )
contemporaneos = "Juan y Mario son contemporneos"
SINO SI( juan == pedro )
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

8/14

8/4/2014

Barra de navegacin

contemporaneos = "Juan y Pedro son contemporneos"


SINO SI( mario == pedro )
contemporaneos = "Mario y Pedro son contemporneos"
SINO
contemporaneos = "No hay contemporneos"
// Salida de resultados
IMPRIMIR contemporaneos
FIN
Ejercicio 9:- El promedio de prcticas de un curso se calcula en base a cuatro prcticas calificadas de
las cuales se elimina la nota menor y se promedian las tres notas ms altas. Disee un algoritmo que
determine la nota eliminada y el promedio de prcticas de un estudiante.
Algoritmo
INICIO
// Declaracin de variables
REAL pc1, pc2, pc3, pc4, pcmenor, promedio
// Entrada de datos
LEER pc1, pc2, pc3, pc4

// Determina la nota menor


pcmenor = pc1
SI( pc2 < pcmenor )
pcmenor = pc2
SI( pc3 < pcmenor )
pcmenor = pc3
SI( pc4 < pcmenor )
pcmenor = pc4
// Determina el promedio
promedio = (pc1 + pc2 + pc3 + pc4 - pcmenor )/3
// Salida de resultados
IMPRIMIR promedio, pcmenor
FIN
Ejercicio 10:- Disee un algoritmo que lea tres longitudes y determine si forman o no un tringulo. Si es
un tringulo determine de que tipo de tringulo se trata entre: equiltero (si tiene tres lados iguales),
issceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales). Considere que para
formar un tringulo se requiere que: "el lado mayor sea menor que la suma de los otros dos lados".
Algoritmo
INICIO
// Declaracin de variables
REAL L1, L2, L3, suma
CADENA tipoRectangulo
// Entrada de datos
LEER L1, L2, L3<
// Determina el lado mayor
mayor = L1
SI( L2 > mayor )
mayor = L2
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

9/14

8/4/2014

Barra de navegacin

SI( L3 > mayor )


mayor = L3
// Determina la suma de los lados a excepcin del lado mayor
suma = L1 + L2 + L3 - mayor
// Determina de que tipo de tringulo se trata
SI( mayor < suma ){
SI( ( L1 == L2 ) && ( L2 == L3 ) )
tipoRectangulo = "Tringulo equiltero"
SINO SI( ( L1 == L2 ) || ( L1 == L3 ) || ( L2 == L3 ) )
tipoRectangulo = "Tringulo issceles"
SINO
tipoRectangulo = "Tringulo escaleno"
}
SINO
tipoRectangulo = "No es un tringulo"
// Salida de resultados
IMPRIMIR tipoRectangulo
FIN
Ejercicio 11:- Disee un algoritmo que lea tres nmeros enteros y determine el menor valor positivo. Si
los nmeros positivos son iguales, dar como menor a cualquiera de ellos.
Algoritmo
INICIO
// Declaracin de variables
ENTERO a, b, c, menor
// Entrada de datos
LEER a, b, c
// Determina el menor
// Aqu a, b y c podran ser positivos
SI( a > 0 ){
menor = a
SI( b > 0 && b < menor )
menor = b
SI( c > 0 && c < menor )
menor = c
}
// Aqu slo b y c podran ser positivos
SINO SI( b > 0 ){
menor = b
SI( c > 0 && c < menor )
menor = c
}
// Aqu slo c podran ser positivos
SINO SI( c > 0 ){
menor = c
}
// Guardamos el indicador -1 para saber que no hay positivos
SINO
menor = -1
// Salida de resultados
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

10/14

8/4/2014

Barra de navegacin

SI( menor != -1 )
IMPRIMIR menor
SINO
IMPRIMIR "No se ingres ningn nmero positivo"
FIN
Ejercicio 12:- Disee un algoritmo que lea tres nmeros y los imprima de mayor a menor y de menor a
mayor.
Algoritmo
INICIO
// Declaracin de variables
REAL n1, n2, n3, mayor, menor, medio
// Entrada de datos
LEER n1, n2, n3
// Determina el menor
menor = n1
SI( n2 < menor )
menor = n2
SI( n3 < menor )
menor = n3
// Determina el mayor
mayor = n1
SI( n2 > mayor )
mayor = n2
SI( n3 > mayor )
mayor = n3
// Determina el medio
medio = n1+n2+n3-mayor-menor
// Imprime en orden ascendente
IMPRIMIR menor, medio, mayor
// Imprime en orden descendente
IMPRIMIR mayor, medio, menor
FIN
Ejercicio 13:- Disee un algoritmo para obtener el grado de eficiencia de un operario de una fbrica de
tornillos, de acuerdo a las siguientes condiciones, que se le imponen para un perodo de prueba:
- Menos de 200 tornillos defectuosos.
- Ms de 10000 tornillos producidos.
El grado de eficiencia se determina de la siguiente manera:
- Si
- Si
- Si
- Si

no cumple niguna de las condiciones, grado 5.


slo cumple la primera condicin, grado 6.
slo cumple la segunda condicin, grado 7.
cumple las dos condiciones, grado 8.

Las condiciones impuestas por la fbrica son:


torpro < 200
siendo torproel nmero de tornillos producidos
tordef > 10000 siendo tordefel nmero de tornillos defectuosos
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

11/14

8/4/2014

Barra de navegacin

Algoritmo 1
INICIO
// Declaracin de variables
ENTERO torpro, tordef, grado
// Entrada de datos
LEER torpro, tordef
// Determina el grado de eficiencia
SI( tordef < 200 ){
SI( torpro > 10000 )
grado = 8
SINO
grado = 6
}
SINO{
SI( torpro > 10000 )
grado = 7
SINO
grado = 5
}
// Salida de resultados
IMPRIMIR grado
FIN
Algoritmo 2
INICIO
// Declaracin de variables
ENTERO torpro, tordef, grado
// Entrada de datos
LEER torpro, tordef
// Determina el grado de eficiencia
SI( tordef < 200 && torpro > 10000 )
grado = 8
SINO SI( tordef < 200 )
grado = 6
SINO SI( torpro > 10000 )
grado = 7
SINO
grado = 5
// Salida de resultados
IMPRIMIR grado
FIN
Ejercicio 14:- Se cuenta con los votos obtenidos por Juan, Pedro y Maria en una eleccin democrtica a
la presidencia de un club. Para ganar la eleccin se debe obtener como mnimo el 50% de los votos ms
1. En caso que no haya un ganador se repite la eleccin en una segunda vuelta. Van a la segunda vuelta
los dos candidatos que obtengan la ms alta votacin. Se anula la eleccin en caso de producirse un
empate doble por el segundo lugar o un empate triple. Disee un algoritmo que determine el resultado de
la eleccin.

Algoritmo
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

12/14

8/4/2014

Barra de navegacin

INICIO
// Declaracin de variables
ENTERO vjuan, vpedro, vmaria, vmingan
CADENA resultado
// Entrada de datos
LEER vjuan, vpedro, vmaria
// Determina la votacin mnima para ganar
vmingan = (vjuan + vpedro + vmaria)/2 + 1
// Determina el resultado de la eleccin
SI( vjuan >= vmingan )
resultado = "Gana Juan "
SINO SI( vpedro >= vmingan )
resultado = "Gana Pedro"
SINO SI( vmaria >= vmingan )
resultado = "Gana Mara"
SINO SI( vpedro > vjuan && vmaria > vjuan )
resultado = "Pasan a la segunda vuelta Pedro y Mara"
SINO SI( vpedro > vmaria && vjuan > vmaria )
resultado = "Pasan a la segunda vuelta Pedro y Juan"
SINO SI( vmaria > vpedro && vjuan > vpedro )
resultado = "Pasan a la segunda vuelta Mara y Juan "
SINO
resultado = "Eleccin anulada"
// Salida de resultados
IMPRIMIR resultado
FIN
Ejercicio 15:- Disee un algoritmo que lea un nmero entero de 3 cifras, y forme el mayor nmero
posible con las cifras del nmero ingresado. El nmero formado debe tener el mismo signo que el nmero
ingresado.
Algoritmo
INICIO
// Declaracin de variables
ENTERO num1, num2, numaux, uni, dec, cen, menor, mayor,medio
// Entrada de datos
LEER num1
// Si el nmero tiene tres cifras...
SI( ( num1 >= 100 && num1 <= 999 ) && ( num1 >= -999 && num1 <= -100 ) ){
// Guarda el nmero en una variable auxiliar para preservar el signo
numaux = num1
// Cambia el signo de num1 en caso de ser negativo
SI( num1 < 0 )
num1 = -num1
// Determina las cifras del nmero
cen = num1/100
dec = (num1%100)/10
uni = (num1%100)%10
http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

13/14

8/4/2014

Barra de navegacin

// Determina la cifra menor


menor = cen
SI( dec < menor )
menor = dec
SI( uni < menor )
menor = uni
// Determina la cifra mayor
mayor = cen
SI( dec > mayor )
mayor = dec
SI( uni > mayor )
mayor = uni
// Determina la cifra del medio
medio = cen+dec+uni-mayor-menor
// Forma el nuevo nmero
SI( numaux > 0 )
num2 = mayor*100 + medio*10 + menor
SINO
num2 = -1*(menor*100 + medio*10 + mayor)
// Imprime el nuevo nmero
IMPRIMIR num2
}
SINO
IMPRIMIR "El nmero no tiene tres cifras"
FIN
David Espinoza Sandoval
Lima, Per

http://www.fceqyn.unam.edu.ar/infoiq/temas/Algoritmia/Algoritmia/cap03.htm

14/14