EJERCICIOS RESUELTOS

9. Estructuras Selectivas o Estructuras de Decisión

Las estructuras selectivas o de selección se clasifican en:

  • Estructura de selección simple (SI).
  • Estructura de selección doble (SI - SINO).
  • Estructura de selección múltiple (EN CASO - SEA)

5.2 Estructura de Selección Simple SI
En la estructura de selección simple SI, evalúa una condición lógica y:

  • Si la condición es verdadera se ejecuta la acción A. La acción A puede ser una acción simple (una sola acción) o una acción compuesta (un conjunto de acciones).
  • Si la condición es falsa, no se hace nada.

Ejemplo 9.1:- En una playa de estacionamiento cobran S/. 2.5 por hora o fracción. Diseñe un algoritmo que determine cuanto debe pagar un cliente por el estacionamiento de su vehículo, conociendo el tiempo de estacionamiento en horas y minutos.
Algoritmo
INICIO
    ENTERO horas, minutos
    REAL pago
    LEER horas, minutos

    SI( minutos > 0 )
        horas = horas + 1
    pago = horas * 2.5

    IMPRIMIR pago
FIN    
Ejemplo 9.2:- Diseñe un algoritmo que determine si ún número es o no, par positivo.
Algoritmo
INICIO
    REAL n

    LEER n

    SI( (n%2==0) y (n>0) )
        IMPRIMIR "El número es par positivo"
    SINO
        IMPRIMIR "El número no es par positivo"
FIN
Ejemplo 9.3:- Diseñe un algoritmo que determine el mayor valor de cuatro números a, b, c, d.
Algoritmo 
INICIO
    REAL a, b, c, d, mayor
    LEER a, b, c, d

    mayor = a
    SI( b > mayor )    
        mayor = b
    SI( c > mayor )    
        mayor = c
    SI( d > mayor )
        mayor = d

    IMPRIMIR mayor
FIN    
Observación
En caso que los cuatro números sean iguales entre sí, el algoritmo da como mayor a cualquiera de los cuatro.
Ejemplo 9.4:- Una tienda ha puesto en oferta la venta al por mayor de cierto producto, ofreciendo un descuento del 15% por la compra de más de 3 docenas y 10% en caso contrario. Además por la compra de más de 3 docenas se obsequia una unidad del producto por cada docena en exceso sobre 3. Diseñe un algoritmo que determine el monto de la compra, el monto del descuento, el monto a pagar y el número de unidades de obsequio por la compra de cierta cantidad de docenas del producto. 
Algoritmo
INICIO
    REAL montopag, montocom, montodes, precio 
    ENTERO docenas, obsequio
    LEER docenas, precio

    montocom = docenas*precio    
    SI( docenas > 3 ){
        montodes = 0.15*montocom
        obsequio = docenas-3
    }
    SINO{
        montodes = 0.10*montocom
        obsequio = 0
    }
    montopag = montocom - montodes

    IMPRIMIR montocom, montodes, montopag
FIN  
  

9.5 Selección Doble en Cascada
Se dice que varias estructuras de selección doble están en cascada cuando la instrucción que sigue a un SINO es otro SI a excepción del último SINO. No hay límite en cuanto al número de estructuras de selección doble que pueden ponerse en cascada.

En las figuras 9.3 y 9.4 se muestran dos formas de selección doble en cascada.

Funcionamiento

Las condiciones se evalúan en orden descendente pasando de una a otra si la anterior resulta falsa. En el momento que se encuentra una condición verdadera, se efectúa la acción correspondiente a dicha condición y se corta el resto de la estructura. Si todas las condiciones resultan falsas se efectúa la acción correspondiente al último SINO 
Nota.- En el caso de acciones compuestas, estas serán encerradas entre llaves.


SI( condición C1 )
    acción A1
SINO
    SI( condición C2 )
        acción A2
    SINO 
        SI( condición C3 )
            acción A3
        .
        .          
        .
        SINO
            acción An

Figura 9.3 Selección doble en cascada: Forma 1


SI( condición C1 )
    acción A1
SINO SI( condición C2 )
    acción A2
SINO SI( condición C3 )
    acción A3
.
.
.
SINO
    acción An

Figura 9.4 Selección doble en cascada: Forma 2
 
Ejemplo 9.5:- Diseñe un algoritmo que determine si un número es negativo, positivo o cero.
Algoritmo ( Formato 1 )
INICIO
    REAL n  

    LEER n
    SI( n > 0 )     
        IMPRIMIR "Positivo"
    SINO                 
        SI( n < 0 ) 
            IMPRIMIR "Negativo"
        SINO        
            IMPRIMIR "Cero"
FIN    
 
Algoritmo ( Formato 2 )
INICIO
    REAL n  

    LEER n
    SI( n > 0 )     
        IMPRIMIR "Positivo"
    SINO SI( n < 0 ) 
        IMPRIMIR "Negativo"
    SINO        
        IMPRIMIR "Cero"
FIN    
Ejemplo 9.6:- Considerando que las estaciones del año se numeran como 1 para primavera, 2 para verano, 3 para otoño y 4 para invierno; diseñe un algoritmo que determine el nombre de la estación del año conociendo el número de la estación.
Algoritmo
INICIO
    ENTERO numero 
    CADENA nombre
    LEER numero

    SI( numero == 1 )
        nombre = "Primavera"
    SINO SI( numero == 2 )
        nombre = "Verano"
    SINO SI( numero == 3 )
        nombre = "Otoño"
    SINO
        nombre = "Invierno"

    IMPRIMIR nombre
FIN    
9.6 Estructuras de Selección Anidadas
Se dice que una estructura SI ( o SI-SINO ) esta anidada cuando esta contenida dentro de otra estructura SI o dentro de otra estructura SI-SINO. No existe límite en cuanto al nivel de anidamiento.
Por ejemplo, una estructura SI con tres niveles de anidamiento tendría el siguiente formato:
SI( condición C1 ){
    acción A1
    SI( condición C2 ){
        acción A2    
        SI( condición C3 )
            acción A3
    }
}
En general, el anidamiento podría evitarse usando el operador lógico "y". Así, la anterior selección SI anidada puede descomponerse en tres estructuras de selección simple no anidadas consecutivas, como se muestra a continuación.
SI( condición C1 ) 
    acción A1

SI( condición C1 y condición C2 )
    acción A2

SI( condición C1 y condición C2 y condición C3 )
    acción A3
La estructura de selección doble en cascada es un caso especial de la estructura SI..SINO anidada.
Ejemplo 9.7:- Diseñe un algoritmo que lea un número de tres cifras y determine si es o no capicúa. Un número es capícua si es igual al revés del número.
Observación
Observe que al ser el número de tres cifras, para ser capicúa es suficiente comprobar que la cifra de las unidades sea igual a la cifra de las centenas.
Algoritmo
INICIO
    ENTERO numero, unidad, centena

    LEER numero

    SI(numero >= 100 && numero <= 999 ){
        unidad   = numero%10
        centena  = numero/100
        SI( unidad == centena )
            IMPRIMIR "El número es capicúa"
        SINO
            IMPRIMIR "El número no es capicúa"
    }
    SINO
        IMPRIMIR "El número no tiene tres cifras"
FIN    
5.7 Estructura de Selección Múltiple SEGUN
La estructura de selección múltiple SEGUN permite elegir una ruta de entre varias rutas posibles, usando para ello una variable denominada selector. El selector se compara con una lista de constantes enteras o de carácter C1, C2, ..., Cn para cada una de las cuales hay una acción A1, A2, ..., An y:

  • Si el selector coincide con una constante de la lista, se ejecuta la acción correspondiente a dicha constante.
  • Si el selector no coincide con ninguna constante de la lista, se ejecuta la acción Df correspondiente al SINO, si es que existe. 

Las acciones A1, A2, A3, ..., An pueden ser acciones simples( una sola acción) o acciones compuestas (un conjunto de acciones).
En la Figura 9.3 se muestra el pseudocódigo de la estructura de selección múltiple.
Nota.- En el caso de acciones compuestas, estas no necesitan estar encerradas entre llaves.


SEGUN ( selector ){
     CASO C1 : acción A1
     CASO C2 : acción A2
     CASO C3 : acción A3
               .
               .
               .
     CASO Cn : acción An
     SINO    : acción Df
}

Figura 9.3 Estructura de selección múltiple: pseudocódigo
Ejemplo 9.8:- Resuelva el ejemplo 9.6 usando selección múltiple.
Algoritmo
INICIO
    ENTERO numero 
    CADENA nombre

    LEER numero

    SEGUN(numero){
        CASO 1 : nombre = "Primavera"
        CASO 2 : nombre = "Verano"
        CASO 3 : nombre = "Otoño"
        SINO   : nombre = "Invierno"
    }

    IMPRIMIR nombre
FIN    
5.8 Ejercicios
Ejercicio 1:- Diseñe un algoritmo que califique el puntaje obtenido en el lanzamiento de tres dados en función a la cantidad seis obtenidos, de acuerdo a lo siguiente:

    - Seis en los tres dados, excelente.
    - Seis en dos dados, muy bien.
    - Seis en un dado, regular.
    - Ningún seis, pésimo.
Algoritmo
INICIO
    // Declaración de variables
    ENTERO d1, d2, d3

    // Entrada de datos
    LEER d1, d2, d3   

    // Obtención de la calificación
    SI( d1 + d2 + d3 == 18 )   
        IMPRIMIR "Excelente"
    SINO SI( d1+d2 == 12 ó d1+d3 == 12 ó d2+d3 == 12 )
        IMPRIMIR "Muy bién"
    SINO SI( d1 == 6 ó d2 == 6 ó d3 == 6 )
        IMPRIMIR "Regular"
    SINO
        IMPRIMIR "Pésimo"
FIN
Ejercicio 2:- Una compañía dedicada al alquiler de automoviles cobra $30 hasta un máximo de 300 km de distancia recorrida. Para más de 300 km y hasta 1000 km, cobra $30 más un monto adicional de $ 0.15 por cada kilómetro en exceso sobre 300. Para más de 1000 km cobra $30 más un monto adicional de $ 0.10 por cada kilómetro en exceso sobre 1000. Los precios ya incluyen el 18% del impuesto general a las ventas, IGV. Diseñe un algoritmo que determine el monto a pagar por el alquiler de un vehículo y el monto incluído del impuesto.
Algoritmo
INICIO
    // Declaración de variables
    REAL kilomrec, montofijo, montoadic, montopag, montoigv 
    REAL IGV = 0.18
    // Entrada de datos
    LEER kilomrec
    
    // Cálculo de montos
    montofijo = 30*kilomrec
    SI( kilomrec <= 300 )   
        montoadic = 0
    SINO SI( kilomrec <= 1000 )
        montoadic = 0.15*(kilomrec-300)
    SINO
        montoadic = 0.15*700 + 0.10*(kilomrec-1000)
    montopag = montofijo + montoadic
    montoigv = IGV*montopag /(1+IGV)

    // Salida de resultados
    IMPRIMIR montoPag, montoIgv
FIN
Ejercicio 3:- Diseñe un algoritmo que determine quienes son contemporáneos entre Juan, Mario y Pedro.
Algoritmo
INICIO
    ENTERO juan, mario, pedro

    LEER juan, mario, pedro

    SI( juan == mario y mario == pedro )
        IMPRIMIR "Los tres son contemporáneos"
    SINO SI( juan == mario )
        IMPRIMIR "Juan y Mario son contemporáneos"
    SINO SI( juan == pedro )
        IMPRIMIR "Juan y Pedro son contemporáneos"
    SINO SI( mario == pedro )
        IMPRIMIR "Mario y Pedro son contemporáneos"
    SINO
        IMPRIMIR "Los tres tienen edades diferentes entre sí"
FIN
Ejercicio 4:- El promedio de prácticas de un curso se calcula en base a cuatro prácticas calificadas de las cuales se elimina la nota menor y se promedian las tres notas más altas. Diseñe un algoritmo que determine la nota eliminada y el promedio de prácticas de un estudiante.
Algoritmo
INICIO
    REAL pc1, pc2, pc3, pc4, pcmenor, promedio

    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 descontando la nota menor
    promedio = (pc1 + pc2 + pc3 + pc4 - pcmenor )/3

    IMPRIMIR promedio, pcmenor
FIN
Ejercicio 5:- Diseñe un algoritmo que lea tres longitudes y determine si forman o no un triángulo. Si es un triángulo determine de que tipo de triángulo se trata entre: equilátero (si tiene tres lados iguales), isósceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales). Considere que para formar un triángulo se requiere que: "el lado mayor sea menor que la suma de los otros dos lados".
Algoritmo
INICIO
    REAL L1, L2, L3, suma

    LEER L1, L2, L3
    // Determina el lado mayor
    mayor = L1
    SI( L2 > mayor )
        mayor = L2
    SI( L3 > mayor )
        mayor = L3

    // Determina la suma de los lados a excepción del lado mayor
    suma = L1 + L2 + L3 - mayor

    // Determina de que tipo de triángulo se trata
    SI( mayor < suma ){
        SI( ( L1 == L2 ) y ( L2 == L3 ) )
            IMPRIMIR "Triángulo equilátero"
        SINO SI( ( L1 == L2 ) o ( L1 == L3 ) o ( L2 == L3 ) )
            IMPRIMIR "Triángulo isósceles"
         SINO
            IMPRIMIR "Triángulo escaleno"
    }
    SINO
        IMPRIMIR "No es un triángulo"
FIN
Ejercicio 6:- Diseñe un algoritmo que lea tres números enteros y determine el menor valor positivo. Si los números positivos son iguales, dar como menor a cualquiera de ellos.
Algoritmo
INICIO
    ENTERO a, b, c

    LEER a, b, c
    SI( a > 0 ){      // Aquí a, b y c podrían ser positivos
        menor = a
        SI( b > 0 y b < menor )
            menor = b
        SI( c > 0 y c < menor )
            menor = c
        IMPRIMIR menor
    }
    SINO SI( b > 0 ){ // Aquí sólo b y c podrían ser positivos
        menor = b
        SI( c > 0 y c < menor )
            menor = c 
        IMPRIMIR menor        
    }
    SINO SI( c > 0 ){ // Aquí sólo c podría ser positivo
        menor = c
        IMPRIMIR menor
    }   
    SINO 
        IMPRIMIR "No hay números positivos"
FIN
Ejercicio 7:- Diseñe un algoritmo que lea tres números y los imprima de mayor a menor y de menor a mayor.
Algoritmo
INICIO
    REAL n1, n2, n3, mayor, menor, medio
    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 8:- Diseñe un algoritmo para obtener el grado de eficiencia de un operario de una fábrica de tornillos, de acuerdo a las siguientes condiciones, que se le imponen para un período de prueba:

    - Menos de 200 tornillos defectuosos.
    - Más de 10000 tornillos producidos. 

El grado de eficiencia se determina de la siguiente manera:

    - Si no cumple niguna de las condiciones, grado 5.
    - Si sólo cumple la primera condición, grado 6.
    - Si sólo cumple la segunda condición, grado 7.
    - Si cumple las dos condiciones, grado 8.

Algoritmo 1
INICIO
    ENTERO torpro, tordef, grado
    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
    }

    IMPRIMIR grado
FIN
Algoritmo 2
INICIO
    ENTERO torpro, tordef, grado
    LEER torpro, tordef
    // Determina el grado de eficiencia
    SI( tordef < 200 y torpro > 10000 )
        grado = 8 
    SINO SI( tordef < 200 )
        grado = 6 
    SINO SI( torpro > 10000 )
        grado = 7 
    SINO
        grado = 5

    IMPRIMIR grado
FIN
Ejercicio 9:- Se cuenta con los votos obtenidos por Juan, Pedro y Maria en una elección democrática a la presidencia de un club. Para ganar la elección se debe obtener como mínimo el 50% de los votos más 1. En caso que no haya un ganador se repite la elección en una segunda vuelta. Van a la segunda vuelta los dos que obtengan la más alta votación ó, los tres en caso de producirse un empate doble (entre los dos con menor votación) o un empate triple. Diseñe un algoritmo que determine el resultado de la elección.

Algoritmo
INICIO
    ENTERO vjuan, vpedro, vmaria
    LEER vjuan, vpedro, vmaria

    // Determina la votación total
    vtotal = vjuan + vpedro + vmaria

    // Determina la votación máxima
    vmax = vjuan
    SI( vpedro > vmax )
        vmax = vpedro
    SI( vmaria > vmax )
        vmax = vmaria

    // Determina el resultado de la elección
    SI( vmax > vtotal/2 + 1 ){ // Hay ganador
        SI( vjuan == vmax )
            IMPRIMIR "Ganó Juan"
        SINO SI( vpedro == vmax )
            IMPRIMIR "Ganó Pedro"
        SINO
            IMPRIMIR "Ganó María"
    }
    SINO{                      // No hay ganador
        SI( vjuan < vpedro y vjuan < vmaria  )
           IMPRIMIR "Debe haber segunda vuelta entre Pedro y María" 
        SINO SI( vpedro < vjuan y vpedro < vmaria )
           IMPRIMIR "Debe haber segunda vuelta entre Juan y María" 
        SINO SI( vmaria < vjuan y vmaria < vpedro )
           IMPRIMIR "Debe haber segunda vuelta entre Juan y Pedro" 
        SINO
           IMPRIMIR "Debe haber segunda vuelta entre los tres"
    }
FIN
Ejercicio 10:- Diseñe un algoritmo que lea un número entero de 3 cifras, y forme el mayor número posible con las cifras del número ingresado. El número formado debe tener el mismo signo que el número ingresado.
Algoritmo
INICIO
    ENTERO num1, num2, numaux, uni, dec, cen, menor, mayor, medio
    LEER num1

    SI( ( num1 >= 100 y num1 <= 999 ) y ( num1 >= -999 y num1 <= -100 ) ){
        // Guarda el número 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 número
        cen = num1/100
        dec = (num1%100)/10
        uni = (num1%100)%10

        // 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 número
        SI( numaux > 0 )
            num2 = mayor*100 + medio*10 + menor
        SINO
            num2 = -1*(menor*100 + medio*10 + mayor*100)

        // Imprime el nuevo número
        IMPRIMIR num2
    }
    SINO
        IMPRIMIR "El número no tiene tres cifras"
FIN

11.- Determinar cual es el cuadrado, de un determinado número, primero haga la lista de pasos a utilizar, luego el algoritmo en pseudocódigo y finalmente el diagrama de flujo.
Pasos:
Inicio
Ingrese un número: a
Lea numero: a
Cuadrado = a^2;
Escriba el resultado
Fin

12.- Elaborar un diagrama de flujo que permita determinar si un número es Positivo o Negativo.
13.- Elabore en pseudocódigo y en diagrama de flujo un algoritmo que halle el área de un triangulo.

14.- Ejercicio de conversión, desarrollar un algoritmo en pseudocódigo y luego un diagrama, que permita ingresar una cantidad en metros y la convierta a Centímetros, Kilómetros, Pies, pulgadas (utilice las sentencias de selección).
PSEUDOCODIGO
1. algoritmo de conversión de metros a: centímetros, kilometros, pies, pulgadas;
2. var
3. m,km,cm,pies,pulgadas:real
4. inicio
5. escriba(“por favor ingrese un numero”);
6. lea(m);
7. cm = m*100;
8. escriba(“el valor es:”,cm);
9. km = m*0.001;
10. escriba(“el valor es:”,km);
11. pies = m*3.281;
12. escriba(“el vlor es:”,pies);
13. pulgadas = m*39.37;
14. escriba(“el valor es:”,pulgadas);
15. imprimir(c,km,pies,pulgadas)
16. fin

15.- Leer una determinada temperatura en grados centígrados y convertirla a Fahrenheit
PSEUDOCODIGO
1. leer una temperatura en grado centigrados y convertirla en grados fahreheit.
2. var
3. c = (“grados centigrados”); real
4. inicio
5. ingrese(“el valor en grados”);
6. lea(c);
7. Fahrenheit = c(9/5)+32;
16. escriba(“grados Fahrenheit es:”,f);
9. fin

17.- Elabore un algoritmo en pseudocódigo y un diagrama de flujo que teniendo como datos de entrada el radio y la altura de un cilindro calcule el área total y el volumen del cilindro.

10.- Elaborar un diagrama de flujo, que permita ingresar 3 valores y los imprima en forma descendente.