Post on 01-Feb-2016
description
UNIVERSIDAD INCA GARCILASO DE LA VEGAFacultad de Ingeniería de Sistemas, Computo y Telecomunicaciones
AsignaturaLenguaje de Programación I
Tema
Selectiva
ProfesorLic. Carlos A. Ruiz De La Cruz MeloCorreo: ruizdelacruzmel@uigv.edu.pe
En la solución de la mayoría de los problemas algorítmicos se requiere tomar decisiones en base a evaluaciones de expresiones lógicas que señalan el camino alternativo a seguir.
El tipo de resultado de una estructura selectiva es lógico (booleano), es decir verdadero o falso.
Las estructuras selectivas se clasifican en:
ESTRUCTURA SELECTIVA
Estructura de selección simple ( Si- Fin_si)Estructura de selección doble ( Si – Sino- Fin_si)Estructura de selección múltiple ( Si anidado y En caso sea –Fin_caso)
Estructura de selección simple: Si- Fin_si
Evalúa una expresión lógica y si su resultado es verdadero, se ejecuta una acción determinada. Su sintaxis es:
Si (expresion_logica) entonces
Acción (s) Fin_si
La acción puede ser simple (una sola acción) o una acción compuesta (un conjunto de acciones)
Si la acción es falsa no se hace nada
PSEUDOCÓDIGO
Acción simple
Si (expresion_logica) entoncesAcción
Fin_si
Acción Compuesta
Si (expresion_logica) entoncesAcción1Acción2……AcciónN
Fin_si
#include <iostream.h>#include <stdlib.h>int main(){ int nro; cout<<"\n ingresar numero: "; cin>>nro; if(nro<0) nro=- nro; cout<<"\n nro="<<nro<<"\n"; getch(); return 0;}
PSEUDOCÓDIGO Y PROGRAMA
Inicioentero: nroescribir ”Ingresar numero “Leer nroSi (nro < 0) entonces
nro - nroFin_si.
Escribir nroFin
Ejemplo
Haga el pseudocodigo que permita cambiar un numero negativo a un numero positivo
Estructura de selección doble: Si - Sino-Fin_si
Se evalúa la expresión lógica, si este resultado es verdadero se ejecuta la accion1, si el resultado es falso se ejecuta la accion2. Su sintaxis es la siguiente:
Si (expresión_lógica) entoncesaccion1
Sinoaccion2
Fin_si
La acción1 o accion2, puede ser simple (una sola acción) o una acción compuesta (un conjunto de acciones)
#include <iostream.h>#include <stdlib.h>int main(){ int nro; cout<<"\n ingresar numero: "; cin>>nro; if((nro % 2)==0) cout<<"\n es par\n"; else cout<<"\n es impar\n"; system("PAUSE"); return 0;}
InicioEntero: nroLeer (nro)Si (nro Mod 2 = 0 ) entonces
Escribir “par” Sino
Escribir “impar “Fin_si
Fin
Pseudocódigo y programa
Ejemplo
Haga el pseudocodigo para determinar si un número es par o impar
IF ELSE
if (expresion) sentencia1
else sentencia2
Si expresión es verdadera se ejecuta sentencia1, si es falsa se ejecuta sentencia2
El else es opcional Tanto sentencia1 como sentencia2
pueden ser un bloque se sentencias entre llaves { }
Expresion no termina con ;
ORDEN EN IF ELSE
Dado que el else es opcional, una sentencia else siempre va con el if inmediatamente anterior
if (n>0) if (a>b) cout<<"a es mayor que b"; else cout<<“n es menor que 0";
Este código es incorrecto:
Cuando n no sea mayor que 0 se desea que salga un mensaje con n es menor que 0, sin embargo no sera asi.
El else depende del segundo if.
Forma correcta
if (n>0) { if (a>b) cout<<"a es mayor que b";}else cout<<“n es menor que 0";
if (expresion1) sentencia1 else if(expresion2) sentencia2 else if(expresion3) sentencia3 . . . else sentencian
Estructura de selección múltiple: Si- anidado
Un Si anidado es una sentencia Si que esta contenido dentro de otro Si o Sino. Su sintaxis es la siguiente:
Si (expresión_lógica1) entoncesaccion1
Sino Si(expresión_lógica2) entonces
accion2 Sino
accion3Fin_si
Fin_si
Inicioentero: nrocadena: mescribir “Ingresar numero:”Leer nroSi (nro = 0 ) entonces
m “Cero”Sino
Si (nro>0) entonces m “Positivo” Sino m “Negativo”Fin_si
Fin_siEscribir nro, m
Fin
Inicio
Fin
SI
nro >0
m”negativo” m”positivo”
nro =0
mcero
Escribirnro, m
Escribir“ingresar numero”
Leer (nro)
NO
NO SI
Pseudocódigo y diagrama de flujo
Escribir un pseudocódigo, que lea un número y determine si es positivo, negativo o cero.
Ejemplo
Cual seria el código en C?
Inicioentero: nrocadena: mescribir “Ingresar numero:”Leer nroSi (nro = 0 ) entonces
m “Cero”Sino
Si (nro>0) entonces m “Positivo” Sino m “Negativo”Fin_si
Fin_siEscribir nro, m
Fin
Estructura selectiva múltiple: En caso sea-Fin_caso
Permite elegir un camino entre los “n” 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 1, 2, ..., N
En caso sea (selector) hacerc1: Acción 1c2: Acción 2
.cn: Acción N
SinoAccion c
Fin_Caso
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 c correspondiente al SINO.
En un centro de enseñanza se han incrementado las pensiones de acuerdo a la siguiente tabla:
Elaborar un pseudocódigo que permita calcular el nuevo monto de la pensión de un alumno que se encuentra en una categoría determinada.
CATEGORÍA INCREMENTO(%)
A 6
B 5
C 4
Ejemplo
InicioEntero: sw 0Real: pension, nuevaPensionEscribir (“Ingresar pension:”)Leer (pension)Escribir (“Ingresar categoria:”)Leer (cat)En caso sea (cat) hacer
‘A’ : inc 0.06 * pension‘B’ : inc 0.05 * pension‘C’ : inc 0.04 * pension
SinoEscribir (“Fuera de rango”)sw 1
Fin_CasoSi (sw = 0) entonces nuevaPension pension + inc Escribir (“pension “, nuevaPension)Fin_si
Fin
InicioEntero: sw 0Real: pension, nuevaPensionLeer (pension)Escribir (“Ingresar categoria:”)Leer (cat)En caso sea (cat) hacer
‘A’ : inc 0.06 * pension‘B’ : inc 0.05 * pension‘C’ : inc 0.04 * pension
SinoEscribir (“Fuera de rango”)sw 1
Fin_CasoSi (sw = 0) entonces nuevaPension pension + inc Escribir (“pension “, nuevaPension)Fin_si
Fin
Pseudocódigo y diagrama de flujo
SInro =‘A’
m0.06*pension
EscribirPension, nueva Pension
Leer (cat)
NO
SI NO
m0.05*pension NO
sw1
sw =0
nuevaPensionpension+inc
FIN
INICIO
sw0
nro =‘B’
nro =‘C’
m0.04*pension
SI
SI
NO
#include <conio.c>#include "iostream.h"int main(){ int sw=0; char cat; float pension, nuevaPension,inc; cout<<"\n ingresar pension: "; cin>>pension; cout<<"\n ingresar categoria: "; cin>>cat; switch(cat){ case 'A':inc=0.05*pension; break; case 'B':inc=0.05*pension;break; case 'C':inc=0.04*pension;break; default: cout<<"\n fuera de rango"; sw=1; } if(sw==0){ nuevaPension=pension+inc; cout<<"\n pension="<<pension; cout<<"\n nuevaPension="<<nuevaPension<<"\n"; } system("pause"); return 0; }
PROGRAMA
InicioEntero: sw 0Real: pension, nuevaPensionLeer (pension)Escribir (“Ingresar categoria:”)Leer (cat)En caso sea (cat) hacer
‘A’ : inc 0.06 * pension‘B’ : inc 0.05 * pension‘C’ : inc 0.04 * pension
SinoEscribir (“Fuera de rango”)sw 1
Fin_CasoSi (sw = 0) entonces nuevaPension pension + inc Escribir (“pension “, nuevaPension)Fin_si
Fin
#include <conio.c>#include "iostream.h"int main(){ int sw=0; char cat; float pension, nuevaPension,inc; cout<<"\n ingresar pension: "; cin>>pension; cout<<"\n ingresar categoria: "; cin>>cat; switch(cat){ case 'A':inc=0.05*pension; break; case 'B':inc=0.05*pension;break; case 'C':inc=0.04*pension;break; default: cout<<"\n fuera de rango"; sw=1; } if(sw==0){ nuevaPension=pension+inc; cout<<"\n pension="<<pension; cout<<"\n nuevaPension="<<nuevaPension<<"\n"; } system("pause"); return 0; }
PROGRAMA
En caso sea múltipleSe presenta de dos formas:
A) Cuando mas de una alternativa debe ejecutar la misma acción.
B) Cuando se presentan selecciones basadas en dos o mas niveles.
Ejemplo
Mostrar la estación al cual pertenece, si se ingresa el numero de mes:
Verano: enero, febrero, marzoOtoño: abril, mayo, junioInvierno: julio, agosto, setiembrePrimavera: octubre, noviembre, diciembre
InicioEntero: nroMesLeer (nroMes)En caso sea (nroMes) hacer
1: 2: 3: Escribir(“Verano”)4: 5: 6: Escribir(“Otoño”)7: 8: 9: Escribir(“Invierno”)10: 11: 12: Escribir(“Primavera”)
SinoEscribir (“Fuera de rango”)
Fin_CasoFin
#include <conio.c>#include "iostream.h"int main(){
int nroMes; cout<<"\n Ing Num de mes: "; cin>>nroMes; switch(nroMes){ case 1: case 2: case 3:cout<<"\n verano\n"; break; case 4: case 5: case 6:cout<<"\n otoño\n";break; case 7: case 8: case 9:cout<<"\n invierno\n";break; case 10: case 11: case 12:cout<<"\n primavera\n";break; default: cout<<"\n fuera de rango"; } system("pause"); return 0;
}
PROGRAMA
Cuando se presentan selecciones basadas en dos o mas niveles.
ejemplo Pseudocódigo para calcular la pensión
que tiene que pagar un alumno de un instituto cuya cuota de matricula tiene un porcentaje de descuento que se establece en la siguiente tabla y esta en función del colegio de procedencia del alumno y de las tres categorías que existe en el instituto. Considere que la pensión esta exonerada de impuesto.
Colegio de procedencia
categoría
A B C
Nacional 50 40 30
Particular 15 20 25
Pensión Colegio Categoría Descuento Pensión final
1000 Nacional A 1000*0.50=500 500
1500 Particular B 1500*0.20=300 1200
En la siguiente tabla se muestran resultados para diferentes valores de las variables:
Inicio real: cuota, dscto, importe 0 caracter: colegio, categoría entero: sw 0 Leer (colegio) Escribir (“Ingresar categoría (A, B, C):”) Leer (categoria) Escribir (“Ingresar cuota:”) Leer (cuota) En caso sea (colegio) hacer ‘N’: En caso sea (categoria) hacer ‘A’ : dscto 0.50 * cuota ‘B’ : dscto 0.40 * cuota ‘C’ : dscto 0.30 * cuota Sino Escribir (“Opción no contemplada”) sw 1 Fin_caso
‘P’: En caso sea (categoria) hacer ‘A’ : dscto 0.25 * cuota ‘B’ : dscto 0.20 * cuota ‘C’ : dscto 0.15 * cuota Sino Escribir (“Opción no contemplada”) sw 1 Fin_caso Sino Escribir (“Opción no contemplada”) sw 1 Fin_caso Si (sw = 0) entonces importe cuota – dscto Escribir(“El importe a pagar es: ”, importe) Fin_siFin
Pseudocodigo Cual seria el código en C?
1. Escriba un pseudocódigo lea como dato el sueldo de un trabajador, aplique un aumento del 15% si su sueldo es inferior a 500 y 10% en caso contrario. Imprima el nuevo sueldo del trabajador.
2. Escriba un pseudocódigo que calcule el total a pagar por la compra de camisas. Si se compran cinco camisas o más se aplica un descuento del 25% sobre el total de la compra, sino se aplica un descuento del 10%.
3. En una tienda se realizan descuentos en las compras en función del importe total de dichas compras. Se desea calcular el importe que se cobra a un cliente, teniendo en cuenta los siguientes supuestos:
Si el importe total de la compra es menor de 200 soles no hay descuentos.
Si el importe total de la compra está comprendido entre 200 y 800 se hace un descuento del 10%
Si el importe total de la compra es mayor de 800 se hace un descuento del 20%.
Se pide mostrar el nombre del cliente, el importe total, el descuento y el importe a cobrar a un cliente cualquiera
EJERCICIOS