Curso de Programación – CLASE 07

(Creado por el analista de sistemas y docente Leonel Iván Saafigueroa)


Selección múltiple (case)

Es frecuente tener que comprobar más de una condición a la vez, o bien varias condiciones consecutivas. La estructura según nos permite optar por distintos caminos.


¿APROBADO O DESAPROBADO?

Vamos a crear un programa que, de acuerdo con la nota de un examen, nos diga si está
“Aprobado” (notas que van de 7 a 10) o “Desaprobado” (si ingresamos cualquier otro valor).

Veamos el programa en el siguiente diagrama en donde vemos la estructura de selección múltiple (según):

El bloque “De Otro Modo” es opcional, y lo utilizamos para dar una respuesta para todos los demás valores que no sean 7, 8, 9 o 10.
Si detallamos todos los valores posibles, no sería necesario utilizarlo.

Analizamos el código

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Algoritmo prog09
Escribir "Ingrese calificación: "
Leer nota
Según nota Hacer
7:
Escribir "Aprobado."
8:
Escribir "Aprobado."
9:
Escribir "Aprobado."
10:
Escribir "Aprobado."
De Otro Modo:
Escribir "Desaprobado."
FinSegún
FinAlgoritmo
Algoritmo prog09 Escribir "Ingrese calificación: " Leer nota Según nota Hacer 7: Escribir "Aprobado." 8: Escribir "Aprobado." 9: Escribir "Aprobado." 10: Escribir "Aprobado." De Otro Modo: Escribir "Desaprobado." FinSegún FinAlgoritmo
Algoritmo prog09
	Escribir "Ingrese calificación: "
	Leer nota
	Según nota Hacer
		7:
			Escribir "Aprobado."
		8:
			Escribir "Aprobado."
		9:
			Escribir "Aprobado."
		10:
			Escribir "Aprobado."
		De Otro Modo:
			Escribir "Desaprobado."
	FinSegún
FinAlgoritmo

Ejecutamos el programa


Veamos el código en C++:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// PROG09 - SELECCION MULTIPLE.
#include <iostream>
using namespace std;
int nota;
int main()
{
cout << "Ingrese calificación: ";
cin >> nota;
switch(nota)
{
case 10:
case 9:
case 8:
case 7:
cout << "Aprobado." << endl;
break; // Detiene la ejecución en este caso.
default: // Cualquier otro caso responde por defecto.
cout << "Desaprobado." << endl;
}
return 0;
}
// PROG09 - SELECCION MULTIPLE. #include <iostream> using namespace std; int nota; int main() { cout << "Ingrese calificación: "; cin >> nota; switch(nota) { case 10: case 9: case 8: case 7: cout << "Aprobado." << endl; break; // Detiene la ejecución en este caso. default: // Cualquier otro caso responde por defecto. cout << "Desaprobado." << endl; } return 0; }
// PROG09 - SELECCION MULTIPLE.
#include <iostream>

using namespace std;

int nota;

int main()
{
    cout << "Ingrese calificación: ";
    cin >> nota;
    switch(nota)
    {
        case 10:
        case 9:
        case 8:
        case 7:
            cout << "Aprobado." << endl;
        break; // Detiene la ejecución en este caso.
        default: // Cualquier otro caso responde por defecto.
            cout << "Desaprobado." << endl;
        }
    return 0;
}

Vamos a analizar línea por línea este código en C++:

Línea 1: // SELECCION MULTIPLE.

Esta es una línea de comentario, es decir, no se considera código ejecutable. Es un comentario general para el programa.

Línea 2: #include <iostream>

Esta línea incluye la biblioteca iostream, que proporciona funciones de entrada y salida estándar (como cout y cin) en C++.

Línea 4: using namespace std;

Esta línea indica que se va a utilizar el espacio de nombres “std” para acceder a las clases y funciones definidas en ese espacio de nombres. En este caso, se utiliza para acceder a la clase cout y cin.

Línea 6: int nota;

Se declara una variable entera llamada nota. Esta variable almacenará el valor de la calificación introducida por el usuario.

Línea 8: int main()

Se define la función principal del programa, que es donde se inicia la ejecución del programa. La función main devuelve un valor entero que indica el estado de la ejecución del programa (0 significa éxito).

Línea 10: cout << "Ingrese calificación: ";

Se imprime el mensaje “Ingrese calificación:” en la salida estándar.

Línea 11: cin >> nota;

Se lee un valor entero desde la entrada estándar y se almacena en la variable nota.

Línea 12: switch(nota)

Se inicia un bucle switch que evalúa el valor de la variable nota. El caso que se va a ejecutar depende del valor de nota.

Líneas 14-17:

case 10:

case 9:

case 8:

case 7:

Estas líneas especifican los valores de nota que corresponden al caso que se va a ejecutar. En este caso, si el valor de la variable nota es 10, 9, 8 o 7, se ejecutará el código que se encuentra en las siguientes líneas.

Línea 18: cout << "Aprobado." << endl;

Se imprime el mensaje “Aprobado.” seguido por un salto de línea.

Línea 19: break;

Esta línea detiene la ejecución del bucle switch en este caso específico (es decir, si el valor de la variable nota es 10, 9, 8 o 7).

Línea 20: default:

Esta línea especifica el caso por defecto que se va a ejecutar si el valor de la variable nota no coincide con los valores especificados anteriormente.

Línea 21: cout << "Desaprobado." << endl;

Se imprime el mensaje “Desaprobado.” seguido por un salto de línea.

Línea 23: return 0;

La función main devuelve el valor 0, lo que indica que la ejecución del programa ha sido exitosa.


Ahora el código en PYTHON:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print("Ingrese calificación: ")
nota = int(input())
if nota == 10:
print("Aprobado.")
elif nota == 9:
print("Aprobado.")
elif nota == 8:
print("Aprobado.")
elif nota == 7:
print("Aprobado.")
else:
print("Desaprobado.")
print("Ingrese calificación: ") nota = int(input()) if nota == 10: print("Aprobado.") elif nota == 9: print("Aprobado.") elif nota == 8: print("Aprobado.") elif nota == 7: print("Aprobado.") else: print("Desaprobado.")
print("Ingrese calificación: ")
nota = int(input())
if nota == 10:
	print("Aprobado.")
elif nota == 9:
	print("Aprobado.")
elif nota == 8:
	print("Aprobado.")
elif nota == 7:
	print("Aprobado.")
else:
	print("Desaprobado.")

Vamos a analizar línea por línea este código en PYTHON:

Línea 1: print("Ingrese calificación: ")

Esta línea imprime el mensaje “Ingrese calificación:” en la salida estándar. Es una forma de pedir al usuario que ingrese su calificación.

Línea 2: nota = int(input())

Esta línea lee un valor entero desde la entrada estándar y lo almacena en la variable nota. El método input() convierte el input del usuario a cadena, y luego se utiliza el constructor int() para convertir esa cadena a un número entero.

Línea 3: if nota == 10:

Esta línea inicia un bucle if que evalúa si el valor de la variable nota es igual a 10. Si esto es verdad, se ejecutará el código dentro del bloque if.

Línea 4: print("Aprobado.")

Si el valor de la variable nota es igual a 10, esta línea imprime el mensaje “Aprobado.” en la salida estándar.

Línea 5: if nota == 9:

Esta línea inicia un bucle if que evalúa si el valor de la variable nota es igual a 9. Si esto es verdad, se ejecutará el código dentro del bloque if.

Línea 6: print("Aprobado.")

Si el valor de la variable nota es igual a 9, esta línea imprime el mensaje “Aprobado.” en la salida estándar.

Línea 7: if nota == 8:

Esta línea inicia un bucle if que evalúa si el valor de la variable nota es igual a 8. Si esto es verdad, se ejecutará el código dentro del bloque if.

Línea 8: print("Aprobado.")

Si el valor de la variable nota es igual a 8, esta línea imprime el mensaje “Aprobado.” en la salida estándar.

Línea 9: if nota == 7:

Esta línea inicia un bucle if que evalúa si el valor de la variable nota es igual a 7. Si esto es verdad, se ejecutará el código dentro del bloque if.

Línea 10: print("Aprobado.")

Si el valor de la variable nota es igual a 7, esta línea imprime el mensaje “Aprobado.” en la salida estándar.

Línea 11: else:

Esta línea inicia un bucle else que se ejecutará solo si el valor de la variable nota no coincide con los valores evaluados en las líneas anteriores (10, 9, 8 o 7).

Línea 12: print("Desaprobado.")

Si el valor de la variable nota no coincide con los valores evaluados anteriormente, esta línea imprime el mensaje “Desaprobado.” en la salida estándar.


Ahora vamos a crear un programa que funcione como un examen múltiple choice.

En este último ejemplo se descarta como “Opción Incorrecta.“, cualquiera que sea ingresada fuera del rango de posibles respuestas.

Analizamos el código

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Algoritmo prog09b
Escribir '¿Qué color se genera mezclando azul y amarillo?'
Escribir '1 - Rojo.'
Escribir '2 - Violeta.'
Escribir '3 - Verde.'
Escribir '4 - Negro.'
Escribir 'Elija una opción: '
Leer respuesta
Según respuesta Hacer
1:
Escribir 'Respuesta incorrecta.'
2:
Escribir 'Respuesta incorrecta.'
3:
Escribir 'Correcto.'
4:
Escribir 'Respuesta incorrecta.'
De Otro Modo:
Escribir 'Opción Incorrecta.'
FinSegún
FinAlgoritmo
Algoritmo prog09b Escribir '¿Qué color se genera mezclando azul y amarillo?' Escribir '1 - Rojo.' Escribir '2 - Violeta.' Escribir '3 - Verde.' Escribir '4 - Negro.' Escribir 'Elija una opción: ' Leer respuesta Según respuesta Hacer 1: Escribir 'Respuesta incorrecta.' 2: Escribir 'Respuesta incorrecta.' 3: Escribir 'Correcto.' 4: Escribir 'Respuesta incorrecta.' De Otro Modo: Escribir 'Opción Incorrecta.' FinSegún FinAlgoritmo
Algoritmo prog09b
	Escribir '¿Qué color se genera mezclando azul y amarillo?'
	Escribir '1 - Rojo.'
	Escribir '2 - Violeta.'
	Escribir '3 - Verde.'
	Escribir '4 - Negro.'
	Escribir 'Elija una opción: '
	Leer respuesta
	Según respuesta Hacer
		1:
			Escribir 'Respuesta incorrecta.'
		2:
			Escribir 'Respuesta incorrecta.'
		3:
			Escribir 'Correcto.'
		4:
			Escribir 'Respuesta incorrecta.'
		De Otro Modo:
			Escribir 'Opción Incorrecta.'
	FinSegún
FinAlgoritmo

Ejecutamos el programa


Veamos el código en C++:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// PROG09B - SELECCION MULTIPLE. CREANDO UNA PRUEBA MÚLTIPLE CHOICE.
#include <iostream>
using namespace std;
int respuesta;
int main()
{
cout << "¿Qué color se genera mezclando azul y amarillo?" << endl;
cout << "1 - Rojo." << endl;
cout << "2 - Violeta." << endl;
cout << "3 - Verde." << endl;
cout << "4 - Negro." << endl << endl;
cout << "Elija una opción: ";
cin >> respuesta;
switch(respuesta)
{
case 1:
cout << "Respuesta incorrecta." << endl;
break; // Detiene la ejecución en este caso.
case 2:
cout << "Respuesta incorrecta." << endl;
break; // Detiene la ejecución en este caso.
case 3:
cout << "Correcto." << endl;
break; // Detiene la ejecución en este caso.
case 4:
cout << "Respuesta incorrecta." << endl;
break; // Detiene la ejecución en este caso.
default: // default, es el bloque que se ejecuta en caso de que no se dé ningún caso.
cout << "Opción Incorrecta." << endl;
}
return 0;
}
// PROG09B - SELECCION MULTIPLE. CREANDO UNA PRUEBA MÚLTIPLE CHOICE. #include <iostream> using namespace std; int respuesta; int main() { cout << "¿Qué color se genera mezclando azul y amarillo?" << endl; cout << "1 - Rojo." << endl; cout << "2 - Violeta." << endl; cout << "3 - Verde." << endl; cout << "4 - Negro." << endl << endl; cout << "Elija una opción: "; cin >> respuesta; switch(respuesta) { case 1: cout << "Respuesta incorrecta." << endl; break; // Detiene la ejecución en este caso. case 2: cout << "Respuesta incorrecta." << endl; break; // Detiene la ejecución en este caso. case 3: cout << "Correcto." << endl; break; // Detiene la ejecución en este caso. case 4: cout << "Respuesta incorrecta." << endl; break; // Detiene la ejecución en este caso. default: // default, es el bloque que se ejecuta en caso de que no se dé ningún caso. cout << "Opción Incorrecta." << endl; } return 0; }
// PROG09B - SELECCION MULTIPLE. CREANDO UNA PRUEBA MÚLTIPLE CHOICE.
#include <iostream>

using namespace std;

int respuesta;

int main()
{
    cout << "¿Qué color se genera mezclando azul y amarillo?" << endl;
    cout << "1 - Rojo." << endl;
    cout << "2 - Violeta." << endl;
    cout << "3 - Verde." << endl;
    cout << "4 - Negro." << endl << endl;
    cout << "Elija una opción: ";
    cin >> respuesta;
    switch(respuesta)
    {
	case 1:
            cout << "Respuesta incorrecta." << endl;
			break; // Detiene la ejecución en este caso.
        case 2:
            cout << "Respuesta incorrecta." << endl;
			break; // Detiene la ejecución en este caso.
        case 3:
            cout << "Correcto." << endl;
			break; // Detiene la ejecución en este caso.
        case 4:
            cout << "Respuesta incorrecta." << endl;
			break; // Detiene la ejecución en este caso.
        default: // default, es el bloque que se ejecuta en caso de que no se dé ningún caso.
            cout << "Opción Incorrecta." << endl;
        }
    return 0;
}

Vamos a analizar línea por línea este código en C++:

Línea 1: // PROG09B - SELECCION MULTIPLE. CREANDO UNA PRUEBA MÚLTIPLE CHOICE.

Esta línea es un comentario que describe el propósito del programa.

Línea 2: #include <iostream>

Esta línea incluye la biblioteca iostream, que proporciona funciones de entrada y salida estándar (como cout y cin) en C++.

Línea 4: using namespace std;

Esta línea indica que se va a utilizar el espacio de nombres “std” para acceder a las clases y funciones definidas en ese espacio de nombres. En este caso, se utiliza para acceder a la clase cout y cin.

Línea 6: int respuesta;

Se declara una variable entera llamada respuesta. Esta variable almacenará el valor de la respuesta del usuario.

Línea 8: int main()

Se define la función principal del programa, que es donde se inicia la ejecución del programa. La función main devuelve un valor entero que indica el estado de la ejecución del programa
(0 significa éxito).

Líneas 10-15

cout << "¿Qué color se genera mezclando azul y amarillo?" << endl;

cout << "1 - Rojo.";

cout << "2 - Violeta.";

cout << "3 - Verde.";

cout << "4 - Negro.";

cout << "Elija una opción: ";

Estas líneas imprimen varios mensajes en la salida estándar, incluyendo un mensaje que pregunta al usuario sobre el resultado de mezclar azul y amarillo, y otro mensaje que pide al usuario que ingrese su respuesta.

Línea 16: cin >> respuesta;

Se lee un valor entero desde la entrada estándar y se almacena en la variable respuesta.

Líneas 17-33:

switch(respuesta) { ... }

Se inicia un bucle switch que evalúa el valor de la respuesta del usuario.

Cada caso (1, 2, 3, 4):

Estos casos son bloques que se ejecutan si el valor de la variable respuesta coincide con el número correspondiente. En este caso, cada caso imprime un mensaje diferente según sea correcto o incorrecto.

  • Case 1 y 2: Imprimen “Respuesta incorrecta.” y detienen la ejecución.
  • Case 3: Imprime “Correcto.” y detiene la ejecución.
  • Case 4: Imprime “Respuesta incorrecta.” y detiene la ejecución.
  • Default (caso no especificado): Imprime “Opción Incorrecta.“.

Línea 34: return 0;

La función main termina y devuelve el valor 0, indicando que la ejecución fue exitosa.


Ahora el código en PYTHON:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print("¿Qué color se genera mezclando azul y amarillo?")
print("1 - Rojo.")
print("2 - Violeta.")
print("3 - Verde.")
print("4 - Negro.")
print("Elija una opción: ")
respuesta = int(input())
if respuesta == 1:
print("Respuesta incorrecta.")
elif respuesta == 2:
print("Respuesta incorrecta.")
elif respuesta == 3:
print("Correcto.")
elif respuesta == 4:
print("Respuesta incorrecta.")
else:
print("Opción incorrecta.")
print("¿Qué color se genera mezclando azul y amarillo?") print("1 - Rojo.") print("2 - Violeta.") print("3 - Verde.") print("4 - Negro.") print("Elija una opción: ") respuesta = int(input()) if respuesta == 1: print("Respuesta incorrecta.") elif respuesta == 2: print("Respuesta incorrecta.") elif respuesta == 3: print("Correcto.") elif respuesta == 4: print("Respuesta incorrecta.") else: print("Opción incorrecta.")
print("¿Qué color se genera mezclando azul y amarillo?")
print("1 - Rojo.")
print("2 - Violeta.")
print("3 - Verde.")
print("4 - Negro.")
print("Elija una opción: ")
respuesta = int(input())
if respuesta == 1:
	print("Respuesta incorrecta.")
elif respuesta == 2:
	print("Respuesta incorrecta.")
elif respuesta == 3:
	print("Correcto.")
elif respuesta == 4:
	print("Respuesta incorrecta.")
else:
	print("Opción incorrecta.")

Vamos a analizar línea por línea este código en PYTHON:

Línea 1 a 6:

print("¿Qué color se genera mezclando azul y amarillo?")
print("1 - Rojo.")

print("2 - Violeta.")

print("3 - Verde.")

print("4 - Negro.")

print("Elija una opción: ")

Estas líneas imprimen varios mensajes en la salida estándar, incluyendo un mensaje que pregunta al usuario sobre el resultado de mezclar azul y amarillo, y otro mensaje que pide al usuario que ingrese su respuesta.

Línea 7: respuesta = int(input())

Esta línea lee un valor entero desde la entrada estándar y lo almacena en la variable respuesta. El método input() convierte el input del usuario a cadena, y luego se utiliza el constructor int() para convertir esa cadena a un número entero.

Líneas 8-15: if respuesta == 1: ... elif respuesta == 4:

Estas líneas inician un bucle if que evalúa el valor de la variable respuesta.

  • Case 1: Si el valor de respuesta es igual a 1, imprime “Respuesta incorrecta.”.
  • Case 2: Si el valor de respuesta es igual a 2, imprime “Respuesta incorrecta.”.
  • Case 3: Si el valor de respuesta es igual a 3, imprime “Correcto.”.
  • Case 4: Si el valor de respuesta es igual a 4, imprime “Respuesta incorrecta.”.

Línea 16: else:

Si el valor de respuesta no coincide con ninguno de los casos anteriores, se ejecuta este bloque de código.

  • Case Else: Imprime “Opción incorrecta.” si el valor de la variable respuesta no es un valor válido.



TAREA PARA EL HOGAR

  1. Crear un examen de 10 preguntas y que al finalizar nos diga la nota final, todo esto de acuerdo a las respuestas correctas. También que analice la nota y que diga si estamos Aprobados o Desaprobados.
  2. Crear un algoritmo en donde se utilice la misma estructura, pero que funcione como un menú de selección para tres de los programas creados anteriormente, y que descarte (como en este último ejemplo) cualquier número que no sea parte del menú.
    Recordar que las variables analizadas en esta estructura deben tener un valor numérico, no pueden ser textos.