flddci idlc iófacultad de ciencias de la...

19
F l dd Ci i d l C F acultad de Ciencias de la Computacn Estructuras de selección Estructuras de selección Estructuras de selección Estructuras de selección Abraham Sánchez López Grupo MOVIS

Upload: dothu

Post on 30-Sep-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

F l d d Ci i d l C ióFacultad de Ciencias de la Computación

Estructuras de selección Estructuras de selección Estructuras de selección Estructuras de selección

Abraham Sánchez LópezGrupo MOVISp

IntroducciónUn programa no se puede sólo ejecutar de modo secuencial, es deciruna sentencia después de otra.Esto es adecuado en problemas sencillos!!Para la resolución de problemas de tipo más general, se necesita lacapacidad de controlar cuáles son las sentencias que se ejecutan y encapacidad de controlar cuáles son las sentencias que se ejecutan y enque momentos.Las estructuras o construcciones de control regulan la secuencia o flujode ejecución de las sentenciasde ejecución de las sentencias.Las estructuras de control se dividen en tres grandes categorías enfunción del flujo de ejecución: secuencia, selección y repetición.

2Otoño 2014 (c) ASL

Estructuras de controlLas estructuras de control regulan el flujo de ejecución de un programa ofunción.Las estructuras de control permiten combinar instrucciones o sentenciasindividuales en una simple unidad lógica con un punto de entrada y unpunto de salida.pLas instrucciones o sentencias se organizan en tres tipos de estructurasde control que sirven para controlar el flujo de la ejecución: secuencia,selección (decisión) y repetición.( ) y pUna sentencia compuesta es un conjunto de sentencias encerradas entrellaves ({ y }) que se utiliza para especificar flujo secuencial.{{

sentencia 1; El control fluye de la sentencia 1 a la sentencia 2 y asísentencia 2; sucesivamente.…

Sin embargo, existen problemas que requieren etapassentencia n; con dos o más opciones a elegir en función del valor de

} di ió ió

3Otoño 2014 (c) ASL

} una condición o expresión.

La sentencia if, IEn C++ la estructura de control de selección principal es una sentencia if.La sentencia if tiene dos alternativas o formatos posibles.La sentencia if tiene dos alternativas o formatos posibles.El formato más sencillo tiene la siguiente sintaxis:if (expression) Accion

expresión lógica que determina Acción se ejecuta si la expresiónsi la acción se debe ejecutar lógica es verdadera

La sentencia if funciona de la siguiente manera.Cuando se alcanza la sentencia if dentro de un programa, se evalúa laexpresión entre paréntesis que viene a continuación de if.Si expresión es verdadera, se ejecuta Acción; en caso contrario no seejecuta Acción (en su formato simple, Acción es una sentencia simple yj ( p , p yen los restantes formatos es una sentencia compuesta).En cualquier caso la ejecución del programa continúa con la siguientesentencia del programa.

4Otoño 2014 (c) ASL

p g

La sentencia if, IIOtra forma de la sentencia if, sería la siguiente:

If (condición) sentencia;condición es una expresión entera (lógica)sentencia es cualquier sentencia ejecutable, que se ejecutará sólo si la

condición toma un valor distinto de cero

If (condición) sentencia;

condición toma un valor distinto de cero.Diagrama de flujo de una sentencia if básica

A continuación, se presentan algunos ejemplos.

5Otoño 2014 (c) ASL

Ejemplosj p#include <iostream>

using namespace std;

int main(){

int n, d;cout << "Introduce dos enteros:\n";cin >> n;cin >> n;cin >> d;if (n%d==0)

cout << n << " es divisible entre " << d << endl; system("PAUSE");

#include <iostream>

using namespace std;return EXIT_SUCCESS;

}

g p ;

int main(){

float numero;cout << "Introduce un numero positivo o negativo\n";cout << Introduce un numero positivo o negativo\n ;cin >> numero;if (numero>0)

cout << numero << " es mayor que cero\n" << endl; if (numero<0)

t " \ " dlcout << numero << " es menor que cero\n" << endl; if (numero==0)

cout << numero << " es igual a cero\n" << endl; system("PAUSE");return EXIT_SUCCESS;

6Otoño 2014 (c) ASL

_}

Sentencia if de dos opciones, IpUn segundo formato de la sentencia if es la sentencia if-else.Este formato de la sentencia if tiene la siguiente sintaxis:Este formato de la sentencia if tiene la siguiente sintaxis:if (Expresión) Acción 1 else Acción 2

E presión lógica q e Acción q e se reali a Acción q e se ejec taExpresión lógica que Acción que se realiza Acción que se ejecutadetermina la acción a si la expresión lógica si la expresión lógicaejecutar es verdadera es falsa

En este formato, Acción 1 y Acción 2, son individualmente, o bien unaúnica sentencia que termina en punto y coma (;) o un grupo desentencias encerrada entre llaves.Cuando se ejecuta la sentencia if-else, se evalúa Expresión.Si Expresión es verdadera, se ejecuta Acción 1 y en caso contrario sep , j yejecuta Acción 2.Ver la siguiente figura, en esta se muestra la semántica de la sentenciaif-else

7Otoño 2014 (c) ASL

if else

Sentencia if de dos opciones, IIp

A continuación se muestran algunos ejemplos

1) if (Salario > 10000)salario_neto = salario-impuestos;

elseelsesalario_neto=salario;

2) if (Nota >= 5)escribir (“Aprobado”);escribir ( Aprobado );

elseescribir (“Reprobado”);

8Otoño 2014 (c) ASL

Ejemplos j p#include <iostream>

using namespace std;

int main(){

int n, d;cout << "Introduce dos enteros:\n";cin >> n;cin >> n;cin >> d;if (n%d==0)

cout << n << " es divisible entre " << d << endl;else

#include <iostream>

using namespace std;cout << n << " no es divisible entre " << d << endl; system("PAUSE");return EXIT_SUCCESS;

}

using namespace std;

int main(){

int x, y;cout << "Introduce dos enteros:\n";cin >> x;cin >> y;if (x > y)

cout << x << " es mayor que " << y << endl;y q y ;else

cout << x << " es menor que " << y << endl; system("PAUSE");return EXIT_SUCCESS;

}

9Otoño 2014 (c) ASL

}

Sentencias if-else anidadas, IHasta ahora, las sentencias if implementan decisiones que implican unao dos opciones.Es posible, utilizar la sentencia if para implementar decisiones queimplican diferentes opciones.Una sentencia if es anidada cuando la sentencia de la rama verdadera oUna sentencia if es anidada cuando la sentencia de la rama verdadera ola rama falsa es su vez una sentencia if.Una sentencia if anidada se puede utilizar para implementar decisionescon varias alternativas o multi-alternativascon varias alternativas o multi-alternativas.Sintaxis:

if (condición 1) else if (condicion n)( ) ( )sentencia 1 sentencia n

else if (condicion 2) elsesentencia 2 sentencia n+1

.

.

.

10Otoño 2014 (c) ASL

Sentencias if-else anidadas, IIEjemplo: if (x > 0)

num pos = num pos + 1;num_pos num_pos 1;else

if (x < 0)num_neg = num_neg + 1;

else

La sentencia if anidada tiene tres alternativas.

elsenum_ceros = num_ceros + 1;

Se incrementa una de las tres variables (num_pos, num_neg ynum_ceros) en 1, dependiendo de que x sea mayor que cero, menor quecero o igual a cero, respectivamente.g pLas cajas muestran la estructura lógica de la sentencia if anidada; lasegunda sentencia if es la acción o tarea falsa (a continuación de else)de la primera sentencia if.pEl formato de multi-bifurcación se compone de una serie de sentencias ifanidadas, en cada línea se puede escribir una sentencia if.La sintaxis de la multi-bifurcación anidada es:

11Otoño 2014 (c) ASL

La sintaxis de la multi-bifurcación anidada es:

Sentencias if-else anidadas, IIIFormato 1:if (expresión_lógica 1)

sentencia 1

Formato 2:if (expresión_lógica 1)

sentencia 1sentencia 1else

if (expresión_lógica 2)sentencia 2

else

sentencia 1else if (expresión_lógica 2)

sentencia 2else if (expresión_lógica 3)

sentencia 3elseif (expresión_lógica 3)

sentencia 3else

sentencia 3else if (expresión_lógica 4)

sentencia 4else

if (expresión_lógica 4)sentencia 4

elsesentencia 5

sentencia 5

Veamos el siguiente ejemploif (x > 0)

z = 2*log(x);g( )else if (y > 0)

z = sqrt(x) + sqrt(y);else

escribir (“No se puede calcular z”);

12Otoño 2014 (c) ASL

escribir ( No se puede calcular z );

Ejemploj p#include <iostream>

using namespace std;

int main(){

float numero;cout << "Introduce un numero positivo o negativo: ";cin >> numero;if (numero > 0){

cout << numero << " es mayor que cero" << endl;cout << "Prueba de nuevo con un numero negativo\n";cout << Prueba de nuevo con un numero negativo\n ;

} else if (numero < 0){

cout << numero << " es menor que cero" << endl; cout << "Prueba de nuevo con un numero positivo\n";

}else{

cout << numero << " es igual a cero" << endl;cout << numero << es igual a cero << endl;cout << "Porque no introduces otro numero??\n";

} system("PAUSE");return EXIT_SUCCESS;

13Otoño 2014 (c) ASL

}

Sentencia de control switch, ILa sentencia switch se utiliza para seleccionar una de entre múltiplesalternativas.La sentencia switch es especialmente útil cuando la selección se basa enel valor de una variable simple o de una expresión simple denominadaexpresión de control o selector.pEl valor de esta expresión puede ser de tipo int o char, pero no de tipofloat ni double.

Sintaxis:switch (selector){{

case etiqueta 1 : sentencias 1;case etiqueta 2 : sentencias 2;⋅⋅case etiqueta n : sentencias n;default : sentencias d; // opcional

}

14Otoño 2014 (c) ASL

Sentencia de control switch, IILa expresión de control o selector se evalúa y se compara con cada unade las etiquetas de case.La expresión selector debe ser un tipo ordinal (int, char).Cada etiqueta es un valor único, constante y cada etiqueta debe tener unvalor diferente de los otrosvalor diferente de los otros.Si el valor de la expresión selector es igual a una de las etiquetas case,por ejemplo, etiqueta 1, entonces la ejecución comenzará con la primerasentencia de la secuencia sentencia 1 y continuará hasta que sesentencia de la secuencia sentencia 1 y continuará hasta que seencuentre el final de la sentencia de control switch, o hasta encontrar lasentencia break.Es habitual que después de cada bloque de sentencias correspondienteEs habitual que después de cada bloque de sentencias correspondientea una secuencia se desee terminar la ejecución del switch; para ello sesitúa la sentencia break como última sentencia del bloque.La sentencia break hace que siga la ejecución en la siguiente sentenciaLa sentencia break, hace que siga la ejecución en la siguiente sentenciaal switch.A continuación de muestra la sintaxis del switch con break.

15Otoño 2014 (c) ASL

Sentencia de control switch, IIISintaxis:switch (selector){{

case etiqueta 1 : sentencias 1;break;

case etiqueta 2 : sentencias 2;b kbreak;

⋅⋅

case etiqueta n : sentencias n;b kbreak;

default : sentencias d; // opcional}

El tipo de cada etiqueta debe ser el mismo que la expresión de selector.Las expresiones están permitidas como etiquetas pero sólo si cada

d d l ió í i t toperando de la expresión es por sí mismo una constante.Si el valor del selector no está listado en ninguna etiqueta case, no seejecutará ninguna de las opciones a menos que se especifique una

f

16Otoño 2014 (c) ASL

acción de forma predeterminada.

Sentencia de control switch, IVLa omisión de una etiqueta default puede crear un error lógico difícil deprever.Aunque la etiqueta default es opcional, se recomienda su uso, a menosque se esté absolutamente seguro de que todos los valores del selectorestén incluidos en las etiquetas case.qUna sentencia break consta de la palabra reservada break seguida de unpunto y coma.Cuando la computadora ejecuta las sentencias siguientes a una etiquetaCuando la computadora ejecuta las sentencias siguientes a una etiquetacase, continúa hasta que se alcanza una sentencia break.Si la computadora encuentra una sentencia break, termina la sentenciaswitchswitch.Si se omiten las sentencias break, después de ejecutar el código decase, la computadora ejecutará secuencialmente las siguientessentenciassentencias.

17Otoño 2014 (c) ASL

Ejemploj p#include <iostream>// Ejemplo para el uso de switchusing namespace std;

int main(){

char nota;cout << "Introduce tu calificacion (A-D): ";cout Introduce tu calificacion (A D): ;cin >> nota;switch (nota){

case 'A': cout << "Excelente. Examen superado\n";break;

case 'B': cout << "Notable. Suficiencia\n";break;

case 'C': cout << "Aprobado\n";break;break;

case 'D': cout << "Reprobado\n";break;

default: cout << "No es posible esta nota\n";}}cout << "Fin del programa\n";system("PAUSE");return EXIT_SUCCESS;

}

18Otoño 2014 (c) ASL

Ejercicios propuestosj p p1. Escribir una sentencia if-else que visualice la palabra Alta si el valor de la

variable nota es mayor que 100 y Baja si el valor de esa nota es menory y jque 100.

2. Escribir un programa que lea tres enteros e imprima un mensaje queindique si están o no en orden numérico.q

3. Escribir una sentencia if-else que clasifique un entero x en una de lassiguientes categorías y escriba un mensaje adecuado.x < 0 o bien 0 ≤ x ≤ 100x < 0 o bien 0 ≤ x ≤ 100

o bien x > 1004. Escribir un programa que introduzca el numero de un mes (1-12) y

i li l ú d dí dvisualice el número de días de ese mes.5. Escribir un programa que clasifique enteros leídos del teclado, de

acuerdo con los siguientes puntos.* si el entero es 30 o mayor, o negativo, visualizar un mensaje en ese sentido;* en caso contrario, si es un numero primo, potencia de 2, o un numero compuesto

visualizar el mensaje correspondiente.

19Otoño 2014 (c) ASL

* si son cero o 1, visualizar ‘cero’ o ‘unidad’.