Baixe apuntes de clase de programacion e outras Resumos em PDF para Informática, somente na Docsity!
I N T R O D U C C I Ó N A L A A L G O R I T M I A 9 3
Estructura de Selección Múltiple
switch
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al finalizar la unidad, los alumnos, utilizando estructuras algorítmicas de selección,
diseñarán algoritmos en pseudocódigo que resuelvan problemas que involucren tomas
de decisiones.
TEMARIO
6.1. La estructura de selección múltiple switch.
ACTIVIDADES
Los alumnos desarrollan algoritmos que involucren estructuras de selección múltiple.
UNIDAD DE
APRENDIZAJE
SEMANA
94
6.1. LA ESTRUCTURA DE SELECCIÓN MULTIPLE switch
La e structura de selección múltiple switch permite seleccionar una ruta de entre varias
rutas posibles en base al valor de una variable selector que se compara con una lista
de constantes enteras o de carácter c1 , c2 , c3 , ..., cn. Cuando se encuentra una
correspondencia entre el valor de la variable selector y una constante, se ejecuta la
acción o el grupo de acciones asociadas a dicha constante. Si el selector no coincide
con ninguna constante, se efectúa la acción por defecto, si es que existe.
Figura 6.1 Estructura de Selección Múltiple switch
En la tabla que sigue se muestra el código y el pseudocódigo de la estructura switch.
Código C++ Pseudocódigo
switch ( selector ){ case c1 : accion1 ; break; case c2 : accion2 ; break; . . . case cn : accionn ; break; default : acciondefecto ; }
segun ( selector ){ caso c1 : accion caso c2 : accion . . . caso cn : accionn defecto: acciondefecto }
96
El equivalente switch es el siguiente:
switch ( z ){ case 0: a = 10; break; case 1: case 3: case 5: a = 2; break; case 2: case 4: a = 7; break; default: a = 3; }
Problema 6. 3
Diseñe un programa que determine la cantidad de días y el nombre de un mes
conociendo los valores numéricos del mes y del año.
Algoritmo
Inicio // Declaración de variables entero dias, mes, anio cadena nombre
// Entrada de datos Leer mes, anio
// Determina el nombre del mes según( mes ){ caso 1 : nombre = "Enero" caso 2 : nombre = "Febrero" caso 3 : nombre = "Marzo" caso 4 : nombre = "Abril" caso 5 : nombre = "Mayo" caso 6 : nombre = "Junio" caso 7 : nombre = "Julio" caso 8 : nombre = "Agosto" caso 9 : nombre = "Setiembre" caso 10: nombre = "Octubre" caso 11: nombre = "Noviembre" defecto: nombre = "Diciembre" }
// Determina el número de días del mes según( mes ){ caso 1: caso 3: caso 5: caso 7: caso 8: caso 10: caso 12: dias = 31 caso 4: caso 6: caso 9: caso 11: dias = 30
I N T R O D U C C I Ó N A L A A L G O R I T M I A 9 7
defecto: si((anio%4 == 0) && ((anio%100 != 0) || (anio%400 == 0))) dias = 29 sino dias = 28 }
// Salida Imprimir nombre, dias Fin
Programa
#include #include
using namespace std;
int main() {
// Declaración de variables int dias, mes, anio; string nombre;
// Entrada de datos cout << "Ingrese el mes (Enero = 1, Febrero = 2, etc) : "; cin >> mes; cout << "Ingrese el anio actual : "; cin >> anio;
// Determina el nombre del mes switch( mes ){ case 1 : nombre = "Enero"; break; case 2 : nombre = "Febrero"; break; case 3 : nombre = "Marzo"; break; case 4 : nombre = "Abril"; break; case 5 : nombre = "Mayo"; break; case 6 : nombre = "Junio"; break; case 7 : nombre = "Julio"; break; case 8 : nombre = "Agosto"; break; case 9 : nombre = "Setiembre"; break; case 10: nombre = "Octubre"; break; case 11: nombre = "Noviembre"; break; default: nombre = "Diciembre"; }
I N T R O D U C C I Ó N A L A A L G O R I T M I A 9 9
caso 3: ancho =8.52. alto = 112. caso 4: ancho =8.52. alto = 142. caso 5: ancho =7.252. alto = 10.52. defecto: ancho =5.52. alto = 8.52. }
// Calcula el area imprimible area = (ancho-mrgizq-mrgder)*(alto-mrgsup-mrginf)
// Muestra al área imprimible Imprimir area Fin
Programa
#include #include
using namespace std;
int main() {
// Declaración de variables int tamanio; double mrgsup, mrginf, mrgder, mrgizq, ancho, alto, area;
// Entrada ade datos cout << "TAMANIO DEL PAPEL" << endl; cout << "A4 = 0" << endl; cout << "B5 = 1" << endl; cout << "A5 = 2" << endl; cout << "Carta = 3" << endl; cout << "Legal = 4" << endl; cout << "Ejecutivo = 5" << endl; cout << "Media carta = 6" << endl << endl; cout << "Ingrese el tamanio de papel : "; cin >> tamanio; cout << "Ingrese el margen superior (cm) : "; cin >> mrgsup; cout << "Ingrese el margen inferior (cm) : "; cin >> mrginf; cout << "Ingrese el margen derecho (cm) : "; cin >> mrgder; cout << "Ingrese el margen izquierdo (cm) : "; cin >> mrgizq;
// Determina el ancho y el alto del papel en cm switch(tamanio){ case 0: ancho = 29.7; alto = 21.0; break; case 1: ancho = 18.2; alto = 25.7; break; case 2: ancho = 14.8; alto = 21.0;
100
break; case 3: ancho =8.52.54; alto = 112.54; break; case 4: ancho =8.52.54; alto = 142.54; break; case 5: ancho =7.252.54; alto = 10.52.54; break; default: ancho =5.52.54; alto = 8.52.54; }
// Calcula el área imprimible area = (ancho-mrgizq-mrgder)*(alto-mrgsup-mrginf);
// Muestra al área imprimible cout << "Area imprimible : " << area << " cm2" << endl;
system("pause"); return 0; }
Problema 6.
Diseñe un algoritmo que determine la cifra de las unidades de un número natural como
palabra.
Algoritmo
Inicio // Declaración de variables entero numero, unidades cadena palabra
// Entrada de datos Leer numero
// Determine la cifra de las unidades como número unidades = numero%
// Determine la cifra de las unidades como palabra segun ( unidades ){ caso 0 : palabra = “cero” caso 1 : palabra = “uno” caso 2 : palabra = “dos” caso 3 : palabra = “tres” caso 4 : palabra = “cuatro” caso 5 : palabra = “cinco” caso 6 : palabra = “seis” caso 7 : palabra = “siete” caso 8 : palabra = “ocho” defecto : palabra = “nueve” }
// Salida de resultados Imprimir palabra
Fin
102
Problemas propuestos
Actividad
1. Una heladería vende helados a los precios unitarios dados en la siguiente tabla:
Helado Precio unitario
Sol S/. 1.
Fresa S/. 2.
Mar S/. 1.
Rico S/. 2.
Diseñe un algoritmo que determine el importe a pagar por la compra de cierta
cantidad de helados del mismo tipo.
2. Reemplace la estructura if...else...if por la estructura switch. Considere que n es
de tipo int.
if ( n == 0 ) z = 1; else if ( n == 7 || n == 4 ) { z = 2; if( a < b) z = 7; } else if( n == 5 ) z = 5; else z = 8;
3. Diseñe un algoritmo que califique el puntaje obtenido en el lanzamiento de un
dado de acuerdo a la siguiente tabla:
Puntaje Calificación
1 ó 2 Pésimo
3 ó 4 Regular
5 Muy bien
6 Excelente
4. La empresa Construya Fácil ha puesto a la venta los libros indicados en la
siguiente tabla:
Puntaje Precio en la sede
Manual Práctico de Construcción $ 30
Manual Práctico de Instalaciones Sanitarias $ 27
Manual Práctico de Instalaciones Eléctricas $ 20
Manual Práctico de Acabados $ 35
I N T R O D U C C I Ó N A L A A L G O R I T M I A 1 0 3
Los precios indicados en la tabla se aplican en caso que el pago se efectúe en la
sede de la empresa. Si el pago se efectúa a domicilio, el precio se incrementa en
un 2%. Dada una compra de cierta cantidad de unidades de un mismo título de
libro, diseñe un algoritmo que determine el importe total a pagar y el precio
unitario pagado por cada libro.
Autoevaluación
1. Diseñe un programa que lea un número entero en el intervalo de 1 a 7,
correspondiente a un día de la semana y determine el nombre del día. Considere:
1 para lunes, 2 para martes, 3 para miércoles, 4 para jueves, 5 para viernes, 6
para sábado y 7 para domingo. Si el número no está en el intervalo de 1 a 7,
imprima un mensaje de error.
2. En un instituto, los cursos de matemática, física y química se evalúan en base a
tres prácticas calificadas. Cada práctica tiene un peso dado en la siguiente tabla:
Curso Práctica 1 Práctica 2 Práctica 3
Matemática 1 2 3
Física 1 1 2
Química 1 1 1
Dadas las notas de práctica de un alumno para uno de los tres cursos, diseñe un
programa que determine el peso de cada práctica, el promedio final del alumno y
su condición de aprobado o desaprobado. La nota mínima aprobatoria es 13.
3. En un cine, los precios de las entradas son los mostrados en la siguiente tabla:
Día General Niños
Lunes S/. 9 S/.
Martes S/. 7 S/.
Miércoles a Viernes S/. 10 S/.
Sábado y Domingo S/. 12 S/.
Como oferta, el cine entrega un vale por media entrada si el número total de
entradas adquiridas (la suma del número de entradas generales más el número
de entradas de niños) es mayor que 5. Diseñe un programa que determine cuánto
debe pagar un cliente por la compra de cierta cantidad de entradas generales y/o
de niños.
4. Determine que imprime el siguiente fragmento de programa para cada uno de los
siguientes casos: a). v igual a 1, b). v igual a 2, c). v igual a 3 y d). v igual a 4.
Considere que la variable v es de tipo int.
switch(v){
case 1:
cout << "Uno\n";
case 2:
I N T R O D U C C I Ó N A L A A L G O R I T M I A 1 0 5
Para recordar
Si un case no tiene break, sucederá que al ejecutar las acciones de dicho case
se ejecutarán, también, las acciones de los case que siguen hasta encontrar un
break o hasta llegar al final del switch.
Se puede usar la estructura switch en una toma de decisiones únicamente si las
condiciones consisten en comparaciones de una misma variable con una lista de
constantes enteras o de carácter.
106
108
7.1. PROGRAMACION MODULAR
La programación modular es una metodología de programación que permite construir
un programa grande descomponiéndolo en pequeños subprogramas o módulos. Para
ello se parte de un módulo principal que se descompone en varios submódulos que
son controlados por el módulo principal. Si la tarea asignada a un módulo es
demasiado compleja este deberá descomponerse en otro módulos más pequeños
hasta lograr módulos que hagan tareas relativamente sencillas. A este proceso de
refinamiento sucesivo se conoce también como la técnica de “divide y vencerás”.
Figura 7.1 Descomposición modular de un programa
Las tareas asignadas a los subprogramas pueden ser de diversa índole: entrada,
salida, cálculos, control de otros módulos, etc. Para que un subprograma pueda
efectuar su tarea tiene que ser llamado o invocado por el programa principal o por
algún otro módulo que considere necesario el servicio del subprograma. Una vez que
el subprograma termina su tarea, devuelve el control al punto donde se hizo la
llamada. Un subprograma puede llamar a su vez a otros subprogramas.
Figura 7.2 Un programa con diferentes niveles de subprograma.
En el lenguaje C++ a los módulos o subprogramas se denominan funciones.
I N T R O D U C C I Ó N A L A A L G O R I T M I A 1 0 9
7.2. VARIABLES LOCALES Y GLOBALES
Las funciones pueden utilizar sus propias variables denominadas variables locales o
variables de uso compartido, comunes a todos las funciones, denominadas variables
globales.
7.2.1. Variables Locales
Una variable local tiene las siguientes características:
Declaración : Se declara en el interior de una función.
Alcance : Sólo puede ser utilizada en el interior de la función que la declara
Creación : Se crea al iniciar la ejecución de la función que la declara
Destrucción : Se destruye al finalizar la ejecución de la función que la declara
Inicialización : No se inicializa automáticamente, pero al crearse no se crea vacía,
sino que contienen un valor basura.
7.2.2. Variables Globales
Una variable global tiene las siguientes características:
Declaración : Se declara en el exterior de todos las funciones y antes de la
definición de la primera función.
Alcance : Puede ser utilizada por cualquier función del programa
Creación : Se crea al iniciar la ejecución del programa.
Destrucción : Se destruye al finalizar la ejecución del programa.
Inicialización : Se inicializadas automáticamente: en 0 si es de tipo int , en 0.0 si es
de tipo double , en false si es de tipo bool , en ‘\0’ si es de tipo char
y en "\0" si es de tipo string
7.3. FUNCIONES TIPO void
Una función tipo void es un módulo de programa que puede recibir datos de entrada
a través de variables locales denominadas parámetros ; pero, que no retorna ningún
resultado al punto donde es invocado, razón por el que se le conoce también como
función sin valor de retorno.
Las funciones tipo void pueden dividirse a su vez en dos tipos:
Funciones tipo void sin parámetros.
Funciones tipo void con parámetros.
7.3.1. Función tipo void sin parámetros
Estas funciones no pueden recibir datos de entrada ni retornar ningún resultado al
punto de su invocación.
I N T R O D U C C I Ó N A L A A L G O R I T M I A 1 1 1
Definición
La definición de una función tipo void con parámetros sigue la siguiente sintaxis:
void nombre ( tipo1 p1, tipo2 p2, tipo3 p3,... ){
Declaración de variables locales
Cuerpo de la función
Donde:
nombre : Es el nombre de la función
p1, p2, p3, ... : Son los nombres de los parámetros
tipo1, tipo2, tipo3, … : Son los tipos de datos de los parámetros
Llamada
La invocación o llamada se efectúa de la siguiente manera:
nombre (v1, v2, v3,... );
Donde:
nombre : Es el nombre de la función invocada
v1, v2, v3, ... : Son los valores dados a los parámetros (argumentos)
7.4. PROTOTIPOS DE FUNCIONES
C++ requiere que una función se declare o se defina antes de su uso. La declaración
de una función se denomina prototipo. El prototipo de una función contiene la misma
cabecera usada en la definición de la función, con la diferencia que los prototipos
terminan con punto y coma. En la lista de parámetros de los prototipos únicamente se
requieren los tipos de datos de los parámetros, añadir los nombres de los parámetros
es opcional.
Por ejemplo, la siguiente es una lista de prototipos válidos:
void funcion1();
void funcion2(int x, int z);
void funcion3(string, int, int);
Los prototipos se sitúan normalmente al principio del programa, antes de la definición
de la función main. Los prototipos permiten, al compilador, verificar el uso correcto de
la función al validar que el número y tipo de los argumentos (datos enviados a los
parámetros) sean correctos.
La definición de la función declarada debe existir en alguna parte del programa, antes
o después de la función main.
112
7.5. PROBLEMAS RESUELTOS
Problema 7.
En una universidad, los alumnos están categorizados en cuatro categorías. A cada
categoría le corresponde una pensión mensual distinta dada en la siguiente tabla:
Categoría Pensión
A S/. 550
B S/. 500
C S/. 460
D S/. 400
Semestralmente, la universidad efectúa rebajas en las pensiones de sus estudiantes a
partir del segundo ciclo en base al promedio ponderado del ciclo anterior en
porcentajes dados en la tabla siguiente:
Promedio Descuento
0 a13.99 No hay descuento
14.00 a 15.99 10 %
16.00 a 17.99 12 %
18.00 a 20.00 15 %
Diseñe un programa que determine cuánto de rebaja recibirá un estudiante sobre su
pensión actual y a cuánto asciende su nueva pensión.
Declare todas las variables como globales y use funciones tipo void.
Programa
#include #include
using namespace std;
// ----------------------------------------------------------------------- // Prototipos de funciones void ingresarDatos(); void calcularPensionActual(); void calcularDescuento(); void calcularNuevaPension(); void mostrarResultados(); // ----------------------------------------------------------------------- // Declaración de variables globales char categoria; double promedio, actualpen, nuevapen, descuento; // ----------------------------------------------------------------------- // Ingresa datos void ingresarDatos(){ cout << "Ingrese la categoria (A/B/C/D) : "; cin >> categoria; cout << "Ingrese el promedio ponderado : "; cin >> promedio; } // ----------------------------------------------------------------------- // Calcula la pensión actual