selecciÓn -...

13
Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Estatutos de Control C# Estatutos de Decisión (Selección) Antes de ver esta presentación: Lee el Capítulo correspondiente a “Decisiones”, en tu libro de texto. Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed SELECCIÓN IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Estatuto2 Condición . . . true false Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Para representar estas condiciones: Tipo de dato boolean C# tiene el tipo de dato bool, primitivo, que puede tomar los valores verdadero (true) y falso (false). true y false son palabras reservadas. Es posible declarar variables de tipo boleano de la siguiente forma: bool nombre_var; Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Expresiones Boleanas La combinación de condiciones las llamamos expresiones boleanas. Estas son expresiones que al evaluarse dan como resultado un valor de verdadero (true) o falso (false). Una expresión boleana se forma utilizando operadores relacionales o lógicos.

Upload: vuongnhu

Post on 16-Oct-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Estatutos de Control C# Estatutos de Decisión (Selección)

Antes de ver esta presentación: Lee el Capítulo correspondiente a “Decisiones”, en tu libro de texto.

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

SELECCIÓN

IF Condición THEN Estatuto1 ELSE Estatuto2

Estatuto1 Statement

Estatuto2

Condición . . .

true

false

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Para representar estas condiciones: Tipo de dato boolean

  C# tiene el tipo de dato bool, primitivo, que puede tomar los valores verdadero (true) y falso (false).

  true y false son palabras reservadas.

 Es posible declarar variables de tipo boleano de la siguiente forma:

bool nombre_var;

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Expresiones Boleanas

  La combinación de condiciones las llamamos expresiones boleanas. Estas son expresiones que al evaluarse dan como resultado un valor de verdadero (true) o falso (false).

  Una expresión boleana se forma utilizando operadores relacionales o lógicos.

Page 2: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Estatuto condicional if

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Representación Gráfica de las decisiones:

edad >= 21 ?

Eres mayor de edad en EUA

Eres menor de edad en EUA

true false

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

El estatuto if

if (condición) estatuto; else estatuto;

* La parte del else es opcional

La condición es una expresión booleana (true/false)

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

El estatuto if:

if (condición) {

bloque de estatutos } else {

bloque de estatutos }

El else es opcional

Si se requiere poner más de un estatuto, los estatutos se deben encerrar entre llaves

Page 3: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplos: if (num < 0)

Console.WriteLine(“El número es negativo”);

num<0 ?

El número es negativo

true

false

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplos: if (num < 0) {

Console.WriteLine(“núm es negativo, calcular su valor absoluto”); num = Math.Abs(num);

}

num<0 ?

num = Math.Abs(num)

true

false

núm es negativo

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplos: if (num<0)

Console.WriteLine(“El número es negativo”); else

Console.WriteLine(“El número es positivo o cero”);

num<0 ? true false

El número es positivo o cero

El número es negativo

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplo con if anidados:

if (num<0) Console.WriteLine(“El número es negativo”);

else if (num = = 0) Console.WriteLine( “El número es cero”); else Console.WriteLine ( “El número es positivo”);

•  Cuando adentro de una condición if tenemos otro if, se dice que tenemos if ’s anidados, o condiciones anidadas.

Page 4: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Operadores Relacionales

Operador Significado = = Igual != Diferente < Menor que > Mayor que <= Menor o igual que >= Mayor o igual que

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplos de expresiones que utilizan operadores relacionales:

ExpresiónA Operador ExpresiónB

temperatura > humedad B*B - 4.0*A*C >= 0.0 uno + dos < 0 dos * tres <= cuatro numero == 35 inicial != ‘J’

Operadores Relacionales

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Suponiendo que x,y fueron declaradas e inicializadas: int x, y; x = 4; y = 6;

EXPRESION VALOR

x < y true

x + 2 < y false

x != y true

x + 3 >= y true

y == x false

y == x+2 true

Ejemplos de expresiones que utilizan operadores relacionales:

comparación !! y = x+2

asignación !! Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Operadores Lógicos

Operador Significado && And || Or ! Not

Sus operandos deben ser expresiones boleanas

Page 5: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Operadores Lógicos AND OR NOT

X Y X && Y X Y__X | | Y X !X T T T T T T T F T F F T F T F T F T F F T T F F F F F F

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Operadores lógicos C# Expresión Lógica Significado

! p NOT p es false si p es true ! p es true si p es false

p && q p AND q p && q es true si ambos p y q son true. En caso contrario es false.

p || q p OR q p || q es true si cualquiera p o q o ambos son true.

En caso contrario es false

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplos:

  Expresión para saber si un número A es igual a un número B A = = B

  Expresión para saber si un número A es par (A % 2) = = 0

  Expresión para saber si 3 números son iguales ( A = = B) && ( B = = C) (A == B == C) No !

  ¿Cómo sería la expresión para saber si 2 números tienen el mismo signo? _______________________

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplos:

  Expresión para saber si un número “A” está en el rango [0, 100] (incluyendo los valores 0 y 100)

(A >= 0) && (A <= 100)

  Expresión para saber si un número “A” está fuera del rango (0, 100) (A < 0) | | (A > 100)

Page 6: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

100 -13 27 califa numero hora

(califa >= 60) ?

(numero > 0) ?

(hora >= 0 && hora < 24) ?

(hora == 12 || hora == 0) ?

¿Cuál es el valor de cada expresión?

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

int edad; boolean esMayor, sabeIngles; double puntos;

edad = 21; puntos = 500.0; esMayor = (edad >= 21); // esMayor es ? sabeIngles = (puntos > 550.0); // sabeIngles es ?

EXPRESION VALOR esMayor && sabeIngles ? esMayor || sabeIngles ? !esMayor ? !sabeIngles ? esMayor && (puntos > 550) ?

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

¿Cuál es el valor de la expresión?

int edad, peso; edad = 25; peso = 70;

EXPRESION VALOR

!(edad < 10) ?

!(peso > 60) ?

Caso de programación

  A un vendedor se le da una comisión sobre su venta, pero además, se le otorga un bono de 200 pesos de recompensa si su venta fue mayor a 15 mil pesos.

  Para hacer esta aplicación desarrolla un método de tipo double llamado CalculaComision, que recibe como parámetros las ventas y el porcentaje de comisión.

  Considera las ventas como double y el porcentaje como entero.

Fundamentos de programación C#. Román Mtz.

Page 7: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

¿Puedo hacer que mi programa tome decisiones?

Fundamentos de programación C#. Román Mtz.

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Evaluación de “Corto circuito”   Evaluación de “Corto circuito”: significa que las expresiones

lógicas son evaluadas de izquierda a derecha, y la evaluación se detiene tan pronto como se pueda determinar el valor final de la expresión completa. Esto es:

  Cuando se evalúa el operador &&, si el primer operando es falso, el segundo nunca se evalúa.

  Cuando se evalúa el operador ||, si el primer operando es verdadero, el segundo nunca se evalúa.

  Se ahorra tiempo en la evaluación de expresiones complejas usando los operadores || y &&

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplo de “Corto circuito” int edad, altura;

edad = 25; altura = 70;

EXPRESIÓN

(edad > 50) && (altura > 60) false

La evaluación se puede detener en la primera condición porque el resultado del && es verdadero solo si ambos lados son verdaderos; con esto se puede determinar que toda la expresión es falsa.

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

int edad, altura;

edad = 25; altura = 70;

EXPRESIÓN (altura > 60) || (edad > 40) true

La evaluación se puede detener en la primera condición porque el resultado del || es verdadero si uno de los 2 lados es verdadero; con esto se puede afirmar que toda la expresión es verdadera.

Ejemplo de “Corto circuito”

Page 8: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

int edad, peso;

edad = 25; peso = 145;

EXPRESIÓN

(peso < 180) && (edad >= 20) true

Debe ser evaluada toda la expresión ya que el valor final de esta

expresión no se conoce hasta evaluar la segunda parte. Por qué? Porque el resultado de && es true si y solo si ambas condiciones son true.

Otro ejemplo:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

int edad, altura;

edad = 25; altura = 70;

EXPRESIÓN !(altura > 60)||(edad > 50)

true

false ¿Necesita ser evaluada esta parte?

Otro ejemplo:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Escribe la expresión según corresponda:

  impuesto mayor a 25% e ingreso menor a $20000

  temperatura menor o igual que 75 o humedad menor que 70%

  edad mayor de 21 y edad menor que 60

  edad es 21 o 22

  tipo de cliente es a, b, c

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Solución (impuesto > .25) && (ingreso < 20000)

(temperatura <= 75) || (humedad < .70)

(edad > 21) && (edad < 60)

(edad == 21) || (edad == 22)

(tipo == ‘a’ || tipo == ‘b’ || tipo == ‘c’)

Page 9: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Jerarquía de operadores

1. paréntesis 2. !, ++, - -, + (positivo), - (negativo) 3. *, /, % 4. +, - 5. < , < =, >, >= 6. ==, != 7. && 8. || 9. =, +=, -=, *=, /=, %=

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Ejemplo que requiere reglas de precedencia

int num; double x;

num != 0 && x < 1 / num

/ mayor prioridad < siguiente prioridad != después && finalmente

¿Qué pasa si num tiene valor 0? Run Time Error (División entre cero) !!

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

El mismo ejemplo: int num; double x;

(num != 0) && (x < 1/ num)

se evalua primero y si num == 0, su valor es false

Ya que el operador es &&, la expresión completa será false; debido al “corto circuito” la parte derecha de la expresión no será evaluada.

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Condiciones múltiples

Page 10: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

if (dia == 1)

Console.WriteLine(“Lunes”);

if (dia == 2)

Console.WriteLine(“Martes”);

if (dia== 3)

Console.WriteLine(“Miercoles”);

if (dia == 4)

Console.WriteLine(“Jueves”);

if (dia == 5)

Console.WriteLine(“Viernes”);

if (dia == 1)

Console.WriteLine(“Lunes”);

else if (dia == 2)

Console.WriteLine(“Martes”);

else if (dia == 3)

Console.WriteLine(“Miercoles”);

else if (dia == 4)

Console.WriteLine(“Jueves”);

else if (dia == 5)

Console.WriteLine(“Viernes”);

Cuál es más eficiente ?

Discusión en el aula. Tema: Decisiones

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Estatuto switch Cuando tenemos una condición que implicaría muchos if’s

anidados, es mejor utilizar una instrucción llamada switch. Veamos un ejemplo:   Si queremos preguntar si el número de día es 1, 2, 3, 4, 5, 6,

7, para desplegar el nombre del día según corresponda: lunes, martes, miércoles... Utilzando if’s la solución sería: if (dia = = 1) Console.WriteLine(“lunes”); else if (dia = = 2) Console.WriteLine(“martes”); else if (dia = = 3) Console.WriteLine(“miercoles”); else if (dia = = 4) y así sucesivamente.....

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Estatuto switch

Formato: switch (expresión) { case const1: estatuto1;

break; ...

case constN: estatuto N;

break; default:

estatuto M; }

El default es opcional

La expresión debe ser de tipo int, char o string

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Estatuto switch: switch (dia) {

case 1: Console.WriteLine(“Lunes”); break;

case 2: Console.WriteLine(“Martes”); break;

case 3: Console.WriteLine(“Miercoles”); break;

case 4: Console.WriteLine(“Jueves”); break;

case 5: Console.WriteLine(“Viernes”); break;

case 6: Console.WriteLine(“Sabado”); break;

case 7: Console.WriteLine(“Domingo”); break;

}

Page 11: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Control de la ejecución al utilizar Switch:   El control de la ejecución salta al estatuto que sigue

después del case, que coincide con el valor de la Expresión entera.

  El control de la ejecución continúa hacia todos los estatutos siguientes, incluyéndose el default, a menos que se redireccione por medio de un break.

  Si ningún case coincide con el valor, el control de la ejecución pasa al default, si es que lo hay; de lo contrario el control pasa al siguiente estatuto después del switch.

  Cuidado: Olvidar el break puede causar errores de lógica !!

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Estatuto Break

  El break puede ser utilizado dentro del switch o cualquier estructura de control.

  El break ocasiona una salida inmediata del switch, while, do, o for en el cual aparece.

  Si el break está dentro de estructuras anidadas, el control de la ejecución sale solamente de la estructura que se encuentra más adentro.

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Sintaxis

Expresion1 ? Expresion2 : Expresion3

Cómo funciona: Si Expresion1 es true, entonces el valor de la expresión es Expression2. De lo contrario, el valor de la expresión será Expresion3.

Ejemplo . . .

Operador Condicional (Ternario) ?

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Operador Condicional (Ternario) ?

// encontrar el menor de 2 números:

double min; double x; double y;

. . .

min = (x < y) ? x : y;

Page 12: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Resumen de Sintaxis: if

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Resumen de Sintaxis:

 El primer tipo de if es el siguiente: if (condition) statement;

o bien if (condition) { statement1; statement2;

}

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Resumen de Sintaxis:

  El segundo tipo de if es el siguiente: if (condition)

statementA; else

statementB; o bien

if (condition) { statement1; statement2:

} else {

statement3; statement4;

} Fundamentos de Programación. TC1014.

Ing. Jakeline Marcos Abed

Resumen de Sintaxis:   Debes ser cuidadoso al usar el if:

  La condición debe estar dentro de paréntesis.   Dentro del if, si se tienen varios estatutos, estos

deben estar entre { }   Todos los enunciados dentro del if deben ser

seguidos por un punto y coma.   El switch tiene una gramática complicada y debe

ser usado cuidadosamente.

Page 13: SELECCIÓN - proyectofinalcisp.weebly.comproyectofinalcisp.weebly.com/uploads/2/2/8/7/22873198/4decisionesc... · Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed Ejemplos:

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed

Tips de programación:   Para checar la condición no olvides ponerla entre paréntesis

como ésta: if (a > b)...

  No olvides que la manera de checar la igualdad no es = sino = = if (a = b)... no compila correctamente,

mientras que if (a = = b)... si está correcto.

  Ahora bien, si lo que quieres es preguntar si una variable está dentro de un rango [18,25]:

if (a >= 18 && <= 25)... es incorrecto. if ((a >=18) && (a <= 25))... esto sí es

correcto.

Caso para programar   Realizar una aplicación en Windows que

sirva para capturar 3 valores, y que verifique si corresponden a los lados de un triángulo. En caso de que si, el programa indicará qué tipo de triángulo es: EQUILATERO, ISOCELES o ESCALENO.

  Condición para que 3 valores correpondan a los lados de un triángulo: la suma de las longitudes de 2 lados cualesquiera debe ser mayor a la longitud del tercer lado. Las longitudes deben de ser mayores a cero.

Fundamentos de Programación. TC1014. Ing. Jakeline Marcos Abed