Computing">
Estructuras de Seleccion 1
Estructuras de Seleccion 1
Estructuras de Seleccion 1
Cátedra de Computación
• Estructuras de selección
3
Necesidad de estructuras selectivas
Problema: mostrar la calificación de un alumno a partir del
puntaje obtenido en el examen, de acuerdo a la siguiente tabla:
Puntaje Calificación
Entre 90 y 100 5
Entre 80 y 89 4
Entre 70 y 79 3
Entre 60 y 69 2
Menos de 60 1
4
Programación estructurada
La programación estructurada es un paradigma de programación orientado a
mejorar la claridad, calidad y tiempo de desarrollo de un programa, utilizando
únicamente subrutinas (funciones) y tres estructuras: secuencial, de selección
(if y switch) y de repetición (bucles for y while).
5
Ejemplo - Dengue
6
Ejemplo - Dengue
7
Estructuras selectivas
En la estructura selectiva se tiene una instrucción o grupo de instrucciones
que se pueden ejecutar o no, en función del valor de una condición. También
se la conoce como bifurcación condicional.
Falso Verdadero
NO Condición SI
Instrucciones - NO Instrucciones - SI
8
Estructura selectiva if
Verdadero
La bifurcación condicional if tiene la SI
siguiente sintaxis: expresión
if(expresión)
instrucción
instrucción; Falso
NO
if(expresión) Formas
instrucción; equivalentes
if(expresión) instrucción;
11
Estructura selectiva if
Ejemplo 1: (con una expresión relacional simple)
Imprimir el mensaje “Es un nro. negativo” cuando un número entero
leído por teclado es negativo.
#include<iostream>
#include<cstdlib> //para el system("pause")
int main(){
int n;
cout<<"Ingrese un numero: ";
cin>>n;
if(n<0)
cout<<"\nEs un nro. negativo"<<endl;
system("pause");
}
12
Expresión dentro del if
Expresiones lógicas
Las expresiones lógicas consisten en variables booleanas, constantes booleanas
(recordar que en C/C++ se tiene: 0 para falso, y verdadero en caso contrario),
expresiones relacionales y operadores booleanos (and, or, not).
Operación Símbolo en
C++ Obs: Tener en cuenta el
Y (and) && (and) orden de precedencia de
los operadores!!
O (or) || (or)
NO (not) ! (not)
&& || !
V && V ==> V V || V ==> V !V ==> F
F -> 0 F && V ==> F F || V ==> V !F ==> V
V -> !0
V && F ==> F V || F ==> V
F && F ==> F F || F ==> F
13
Estructura selectiva if
Ejemplo 2: (con una expresión lógica)
Imprimir el mensaje “Es un nro. mayor a 100 y es par” cuando un número
leído por teclado es mayor a 100 y es par.
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"Ingrese un numero: ";
cin>>n;
if(n>100 && n%2==0) // && es and (y)
cout<<"\nEs un nro. mayor a 100 y es par"<<endl;
return 0;
}
14
Estructura selectiva if-else
En el caso de querer ejecutar instrucciones
para cada resultado de la condición:
Falso Verdadero
if(expresión) NO SI
instrucción1; expresión
else
instrucción2;
instrucción2 instrucción1
15
Estructura selectiva if-else
Ejemplo 3:
Imprimir el mensaje “Es un nro. negativo” cuando un número entero leído
por teclado es negativo, y “Es un nro. mayor o igual a cero” cuando no.
#include<iostream>
using namespace std;
int main(){
int n;
cout<<"Ingrese un numero: ";
cin>>n;
if(n<0)
cout<<"\nEs un nro. negativo"<<endl;
else
cout<<"\nEs un nro. mayor o igual a cero"<<endl;
return 0;
}
16
Estructura selectiva if-else
Otro ejemplo:
if(numero1==1)
cout<<“la variable numero1 vale 1”;
else
cout<<“la variable numero1 no vale 1”;
17
Estructuras selectivas anidadas (o en cascada)
if(num>0)
if(num==1)
cout<<“num es igual a 1”;
else
cout<<“num es mayor que 1”;
else
cout<<“num es menor que 1”;
Observación: hay que tener cuidado cuando no se usan las llaves (las cuales
indican bloques de instrucciones). Por más que esté indentado (con sangría), si
una instrucción está luego de la primera instrucción del if, no pertenecerá a él.
18
Estructuras selectivas anidadas (o en cascada)
if(num>0)
if(num==1)
cout<<“num es igual a 1”;
else
cout<<“num es menor que 1”;
19
Necesidad de definir bloques de
instrucciones
Algunas situaciones que pueden darse:
if(num>0)
cout<<"\nTest0"; //marcará error
if(num==1)
cout<<"num es igual a 1";
cout<<"\nTest1"; //marcará error
else
cout<<"num es mayor que 1";
cout<<"\nTest2"; //marcará error
else
cout<<"num es menor que 1";
cout<<"\nTest3"; //imprimirá siempre!
20
Uso de llaves {} para indicar bloques
Entonces, cuando necesitamos ejecutar varias instrucciones que dependen
de un if, utilizaremos los bloques de instrucciones. Un bloque de
instrucciones es un grupo de instrucciones encerradas entre llaves {}. Por
ejemplo:
if(num>=0){
cout<<“num: ”<<num<<endl;
if(num==0)
cout<<“num igual a 0”;
if(num>=1)
cout<<“num mayor o igual a 1”;
}
21
Uso de llaves {} para indicar bloques
22
Uso de llaves {} para indicar bloques
Cuando hay dos if anidados y a continuación hay un else, éste pertenece
al último if. Si queremos que un else pertenezca al primer if de un if
anidado, deberemos encerrar al segundo entre llaves. Por ejemplo:
if(num>=0)
{ //si no están las llaves, cambia todo…
if(num==1)
cout<<“num es igual a 1”;
}
else
cout<<“num es menor que 0”;
23
Ejercicio 1
Mostrar la calificación de un alumno a partir del puntaje
obtenido en el examen, de acuerdo a la siguiente tabla:
Puntaje Calificación
Entre 90 y 100 5
Entre 80 y 89 4
Entre 70 y 79 3
Entre 60 y 69 2
Menos de 60 1
24
Ejercicio 1
Mostrar la calificación de un alumno a partir del puntaje
obtenido en el examen, de acuerdo a la siguiente tabla:
#include<iostream>
using namespace std;
int main(){
int calificacion,puntaje;
cout<<"Ingrese el puntaje: ";
cin>>puntaje;
if(puntaje>=90) calificacion = 5;
else if(puntaje>=80) calificacion = 4;
else if(puntaje>=70) calificacion = 3;
else if(puntaje>=60) calificacion = 2;
else calificacion = 1;
cout<<"\nLa calificacion es: "<<calificacion<<endl;
return 0;
}
25
Bifurcación múltiple: switch
Sirve para agrupar varias estructuras if en una sola, en el caso particular en el
que una variable es comparada a diferentes valores (todos ellos constantes
enteras) y que realiza acciones si coincide con ellos. Su sintaxis es:
switch(expresión){
case expresion1_const:
instrucciones1;
break; expresión
case expresion2_const:
instrucciones2;
caso 1 instrucciones1
break;
//pueden tenerse muchos casos caso 2 instrucciones2
default: //es opcional
instrucciones_def;
break; default instrucciones_def
}
26
Bifurcación múltiple: switch
Algunas observaciones:
switch(expresión){
case expresion1_const: Deben ser constantes o literales, no variables
instrucciones1;
break;
case expresion2_const:
instrucciones2;
break;
//pueden tenerse muchos casos
default: //es opcional
instrucciones_def;
break;
}
• La instrucción break sirve para “salir” de la estructura switch y no seguir
evaluando otros casos.
• Lo mismo que se hace con switch puede hacerse con if-else anidados.
27
Bifurcación múltiple: switch
Ejemplo: #include<iostream>
using namespace std;
int main(){
int num;
cout<<"Ingrese un numero: ";
cin>>num;
switch(num){
case 1:
cout<<"Es un 1\n";
break;
case 2:
cout<<"Es un 2\n";
break;
case 3:
cout<<"Es un 3\n";
break;
default:
cout<<"No es ni 1, ni 2, ni 3\n";
}
return 0;
}
28
Ejercicios propuestos
Ejercicio 1:
Dados dos valores a y b, indicar a través de un mensaje cuál de los 2 es el
mayor (Ej: “El mayor es a”). En caso de que sean iguales, indicarlo a través
de un mensaje.
Ejercicio 2:
Si los días LUN-DOM se ingresan de forma numérica (del 1 al 7), devolver el
nombre del día correspondiente. Si el número es inválido, indicarlo con un
mensaje.
29
Ejercicios propuestos
Ejercicio 3:
Escribir un programa que determine si un alumno tiene o no derecho a examen
final en una materia. Un alumno tiene firma si la suma de los puntajes (1P: 24, 2P:
36, TPs/Lab: 10) es mayor o igual a 28. Si tiene derecho entonces imprimir el
nombre y su puntaje total. Si no tiene derecho indicar que debe rendir el tercer
parcial.
Ejemplos:
- Si parc1=20, parc2=30, tps=10, y nombre=”J”
Se debe imprimir:
J tiene firma con 60.
Ejemplos:
- Si a=10, b=40 y c=100
Se imprime : “No pueden ser lados de un triangulo”.
- Si a=10, b=40 y c=35
Se imprime : “Pueden ser lados de un triangulo”.
Su superficie es:...
Nota: para obtener la raíz cuadrada de un número se utiliza la función sqrt() que está
en cmath: …
#include<cmath>
int main(){
…
y = sqrt(x) // calcula la raíz cuadrada de x y lo asigna a y.
31
Ejercicios propuestos
Ejercicio 5:
Determinar si un año (ingresado por teclado) es bisiesto o no, teniendo en
cuenta lo siguiente:
• Un año es bisiesto si es múltiplo de 4 pero no de 100, a no ser que lo sea
también de 400.
Ejercicio 6 (Desafío):
Diseñar un programa en el que se ingresan tres variables: DIA, MES y ANHO
(en forma númerica); y devuelva la fecha del día siguiente (en formato
DIA/MES/ANHO). Se deben considerar los años bisiestos, cantidad de días de
cada mes, etc. En caso de insertar números reales o fechas inválidas, indicar
con un mensaje.
32