Post on 23-Jan-2016
Estructuras de control condicional
Curso Propedéutico
Maestría en Ingeniería Electrónica
Operadores relacionales
Operador Significado
== igualdad
!= Diferente
> Mayor que
< Menor que
>= Mayor o igual
<= Menor o igual
Los operadores relacionales generan un valor 1 si es verdadera y 0 si es falsa
Sentencia ifLa sentencia if permite decidir ejecutar o no una instrucción o un bloque de instrucciones.
Sintaxis
if (condición)
Instrucción o bloque;
Un bloque es una secuencia de instrucciones englobadas entre llaves (“{}”).
La condición esta formada por una expresión booleana.
condición
sentencias
verdadero
falso
Ejemplo de if simplePrueba si un número leído desde el teclado es par.
#include <iostream.h>int main(){ int numero; cout << "teclee un número: "; cin >> numero; if(numero % 2 == 0) cout << "número par"; return 0; }
Ejemplo 2 de if simple
#include <iostream.h>int main(){ int a,b,n; cout << "teclee un número: "; cin >> a; cout << "teclee un número: "; cin >> b; if(a % b == 0){ n = a / b; cout << a << " es " << n << " veces " << b; } return 0; }
Si el número a es divisible por el número b, se despliega el número de veces que a es mayor que b.
Sentencia if - elseLa sentencia if – else permite decidir entre ejecutar una instrucción (o un bloque de instrucciones) y otra instrucción (o un bloque de instrucciones)
Sintaxis
if (condición)
Instrucción o bloque;
else
Instrucción o bloque;
condición
sentencias
verdadero
sentencias
falso
Ejemplo de if - else simplePrueba si un número leído desde el teclado es par.
#include <iostream.h>int main(){ int numero; cout << "teclee un número: "; cin >> numero; if(numero % 2 == 0) cout << "número par"; else cout << "número impar"; return 0; }
Intersección de dos rectasPrograma para determinar si dos rectas se interceptan
Suponga que las rectas se representan por la ecuación de la forma
y = m x + b
Donde m es la pendiente y b es la ordenada al origen.
La única forma en que las dos rectas no se interceptan en un punto es cuando son paralelas, es decir, cuando las dos tienen la misma pendiente.
Podemos expresar el algoritmo de la siguiente forma
si pendiente1 diferente de pendiente2
calcular la intersección
imprimir resultado
sino
informar que no se interceptan
Programa#include <iostream.h>int main(){ float m1,m2,b1,b2,x,y; cout << "teclee la pendiente y ordenada al origen 1: "; cin >> m1 >> b1; cout << "teclee la pendiente y ordenada al origen 2: "; cin >> m2 >> b2; if(m1 != m2){ x = (b2 - b1)/(m1 - m2); y = m1*x+b1; cout << "Las rectas se interceptan en: " << x << ", " << y << endl; } else cout << "Las rectas no se interceptan..."; return 0; }
Sistema de ecuaciones 2x2Se desea resolver un sistema de ecuaciones de 2x2 de la forma
a x + b y = c
d x + e y = f
El sistema puede resolverse con las fórmulas
x = (c e – b f) / (a e – b d)
y = (a g – c e) / (a e – b d)
El sistema tiene solución si el denominador de estas fracciones es diferente de cero. El algoritmo es:
si (a f – b e ) != 0
calcular solución
mostrar resultado
sino
informar que no hay solución
Programa sis2x2.cpp
#include <iostream.h>int main(){ float a,b,c,d,e,f,x,y; cout << "teclee los coeficientes a, b, c, d, e, f: "; cin >> a >> b >> c >> d >> e >> f; if( (a*f - b*e) != 0){ x = (c*e - b*f)/(a*e - b*d); y = (a*f - c*d)/(a*e - b*d); cout << " x = " << x << "\ny = " << y << endl; } else cout << "El sistema no tiene solución\n"; return 0; }
Sentencia ?:La sentencia if puede abreviarse mediante el operador ?:. La sintaxis es:
condición ? operando1 : operando2;
Esta muy relacionado a la sentencia if/else.
El operador regresa el operando1 si la condición es verdadera y regresa el operando2 si es falsa.
Ejemplo:
cout << ( cal >= 60 ? “Aprobado” : “Reprobado”);
Esta sentencia imprimirá “Aprobado” se cal es mayor o igual a 60 e imprimirá “Reprobado” si es menor que 60. Note que los paréntesis son necesarios dado que el operador ?: tiene la menor precedencia.
También es válido:
cal >= 60 ? cout << “Aprobado” : cout << “Reprobado”;
Tarea #3Escriba un programa que lea un número y determine si es par o impar. Utilice el operador ?:.
Escriba un programa que lea tres números reales representando los lados de un triángulo y decida si el triángulo es rectángulo o no. Escriba una versión con if-else y otra con el operador ?:.
Escriba un programa para resolver una ecuación cuadrática. Considere el caso en que las soluciones sean complejas.
Operadores lógicosExisten 4 operadores lógicos en C: and = &&, or = ||, not = !, xor = ^. Los operadores lógicos tienen una prioridad más baja que los operadores relacionales.
expresión1
expresión2
expresión1 && expresión2
falso falso falso
falso verdadero falso
verdadero falso falso
verdadero verdadero verdadero
expresión1
expresión2
expresión1 || expresión2
falso falso falso
falso verdadero verdadero
verdadero falso verdadero
verdadero verdadero verdadero
expresión1
expresión2
expresión1 ^ expresión2
falso falso falso
falso verdadero verdadero
verdadero falso verdadero
verdadero verdadero falso
expresión !expresión
falso verdadero
verdadero falso
Prioridad de evaluación
!
&&
||
ejemplos de operadores lógicos
x > 5 || x == 3 verdadero para x = 3, 6, 7, ...
! (x == 7) && x % 2 != 0 verdadero para x = 1, 3, 5, 9, 11, ...
x <= -1 || x > 5 || x ==2 verdadero para x = -2, -1, 2, 6, 7, 8, ...
En el siguiente fragmento se despliegan solo los múltiplos de 7 o cuadrados perfectos
if(num % 7 == 0 || sqrt(num)-floor(sqrt(num))==0)
AnidamientoUna sentencia if puede tener es su parte verdadera o falsa otra sentencia if.
O sea
if(condición1)
if(condición2)
if(condición3)
sentencias;
...
Ejemplo de anidamientoSe desea un programa para imprimir un letrero dependiendo de la siguiente tabla:
condición letrero
cal < 6 “Reprobado”
6 <= cal < 7 “Suficiente”
7 <= cal < 8 “Bien”
8 <= cal < 9 “Muy bien”
9 <= cal < 10 “Excelente”
#include <iostream.h>int main(){ float cal; cout << "teclee la calificación: "; cin >> cal; if(cal < 6) cout << “Reprobado\n";
else if(cal < 7) cout << “Suficiente\n";
else if(cal < 8) cout << “Bien\n";
else if(cal < 9) cout << “Muy bien\n";
else
cout << “Excelente\n";
return 0; }
Comparación de 3 números#include <iostream.h>int main(){ float a, b, c; cout << "teclee 3 números: "; cin >> a >> b >> c; if(a > b)
if(a > c)
cout << a << endl;
else cout << c << endl;
else
if(b > c)
cout << b << endl;
else cout << c << endl;
return 0; }
#include <iostream.h>int main(){ float a, b, c; cout << "teclee 3 números: "; cin >> a >> b >> c; if(a >= b && a >= c)
cout << a << endl;
if(b >= a && b >= c)
cout << b << endl;
if(c >= a && c >= b)
cout << c << endl;
return 0; }
Sentencia switchLa sentencia switch permite elegir entre varias alternativas.
Sintaxis
switch (<expresión>){
case <constante>:[case <constante>:]<sentencias>;break; ...
[default:<sentencias>;break;]
}caso a
caso b
Acción delcaso a
break;
Acción delcaso b
break;
caso zAcción del
caso zbreak;
Acción poromisión
ejemplo de switch#include <iostream.h>int main(){ int dia; cout << "teclee el número del día: "; cin >> a; switch(a){
case 0:cout << “Lunes” << endl;break;
case 1:cout << “Martes” << endl;break;
case 2:cout << “Miércoles” << endl;break;
case 3:cout << “Jueves” << endl;break;
case 4:cout << “Viernes” << endl;break;
case 5:cout << “Sabado” << endl;break;
case 6:cout << “Domingo” << endl;break;
default cout << “día no válido” << endl;
return 0; }
Tarea #4Escriba un programa determine el mayor y el menor de dos números. Luego determine el cociente y el residuo del mayor entre el menor y despliegue los resultados.
Modifique el programa de comparación de tres números para que despliegue los tres números leídos en orden ascendente. Si se teclea 3 6 1 deberá desplegar 1 3 6. Haga las dos versiones con if anidados y con condiciones compuestas.
Modifique el programa de los días de la semana para desplegar “entre semana” si el día es de 0 a 4, “sabado” si es 5 y “domingo” si es 6.