Está en la página 1de 32

Estructuras selectivas

Cátedra de Computación

Elaborado por José Colbes (jcolbes@fiuna.edu.py)


¿Qué veremos?
• Necesidad de estructuras de selección

• Elementos de la programación estructurada

• Estructuras de selección

*Agradecimientos a Cristian Cappo y Diego Stalder por los materiales de referencia


2
Necesidad de estructuras
selectivas/repetitivas
En C/C++ las instrucciones se ejecutan Inicio
sucesivamente una tras otra. Esto define un camino
que va desarrollado el programa (flujo de control).
Instrucción 1
Sin embargo, habrá momentos en que el programa
deba ejecutar determinadas partes dependiendo del Instrucción 2
estado en el que se halle el programa o de las

variables.

Las estructuras de selección, repetición e invocación Instrucción 𝑛


(funciones) permiten que el flujo secuencial del
programa sea modificado en un modo preciso y
definido con anterioridad. Fin

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).

Secuencial Selección Repetición

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.

Flujo del programa

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 permite al programa tomar decisiones. En su forma más simple, la


instrucción sólo se ejecuta si el resultado de evaluar la expresión es
verdadero.

Recordar: en C/C++, un valor de cero es falso; mientras que un valor distinto de


cero es verdadero. También podemos usar los valores booleanos true
(verdadero) y false (falso). Ambos son del tipo de dato bool.
9
Estructura selectiva if
Sólo la primera instrucción luego del if es la que está “adentro” de esta estructura:
---
---
if(expresión)
instrucción; //la sangría es sólo por orden
---
--- if(expresión)
instrucción;

if(expresión) Formas
instrucción; equivalentes

if(expresión) instrucción;

if(expresión) instrucción1; instrucción2;


instrucción2 no está dentro del if!
10
Expresión dentro del if
Expresiones relacionales
Son expresiones que permiten determinar la relación que existe entre dos operandos a
través de un operador relacional. El mismo permite comparar los valores de dos
operandos de igual naturaleza. El resultado de evaluar una expresión relacional
siempre es verdadera (1) o falsa (0).

Operadores relacionales Ejemplos:


o Igual que: == o 10 > 20 ==> 0
o Menor que: < o 20 == 10 ==> 0
o Mayor que: > o 5 == 5 ==> 1
o Menor o igual que: <= o ‘a’ == ‘a’ ==> 1
o Mayor o igual que: >= o 1!=2 ==> 1
o Distinto que: != o 3+5 <= 7 ==> 0

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")

using namespace std;

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

En esta segunda forma tenemos dos posibilidades: si al evaluar la expresión el


resultado es verdadero se ejecuta la instrucción1, pero si el resultado es falso
se ejecuta la instrucción2. En cualquier caso sólo una de las dos instrucciones
se ejecuta.

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”;

Tras evaluarse la expresión en el if y ejecutarse la instrucción adecuada, el


programa continúa con la línea siguiente a la de la última instrucción dentro
del if-else. Como instrucción vale cualquier tipo de instrucción válida en
C/C++, entre ellas la propia estructura if (o if-else).

17
Estructuras selectivas anidadas (o en cascada)

En este caso hablaremos de estructuras if anidadas. Por ejemplo:

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”;

¿Qué pasa si num=5?

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.

Se leen los puntajes de los dos parciales y el correspondiente a trabajos prácticos


y/o laboratorios, y también la letra inicial del nombre del alumno.

Ejemplos:
- Si parc1=20, parc2=30, tps=10, y nombre=”J”
Se debe imprimir:
J tiene firma con 60.

- Si parc1=10, parc2=5, tps=5, y nombre=”J”


Se debe imprimir:
J no consiguió firma.
30
Ejercicios propuestos
Ejercicio 4:
Hacer un algoritmo que determine si tres valores ingresados pueden ser lados de
un triángulo. Ninguno de sus lados puede ser superior o igual a la suma de los otros
dos. Si los valores pueden ser lados de un triángulo, entonces calcular la superficie
según la fórmula del semiperímetro.

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

También podría gustarte