Escolar Documentos
Profissional Documentos
Cultura Documentos
condicional
Computación
Operadores relacionales
Los operadores relacionales permiten construir expresiones booleanas es
decir, expresiones cuyo valor es 1 o 0.
Los operadores relacionales permiten comparar valores o expresiones
aritméticas.
En C el valor 1 se interpreta como verdadero y el 0 como falso.
Operador Significado
== igualdad
!= Diferente
> Mayor que
< Menor que
>= Mayor o igual
<= Menor o igual
Ejemplos
1>2 = 0 falso
3<5 = 1 verdadero
(7 – 4) == 3 = 1 verdadero
17 >= (5 + 12) = 1 verdadero
i = 3; j = 7;
i * j != 21 = 0 falso
float a=0.1;
(3*a – 0.3) == 0 = 0 falso (OJO con los reales)
3>1>0 = 1 verdadero
Asignar a una variable la mayor de otras dos:
a = 17; b = 15;
c = a*(a>=b) + b*(b>=a); c = 17 a>=b = 1 y b>=a = 0
Tarea
Encuentre el valor de las siguientes expresiones relacionales
2 != 7
3>2
-1 <= -2
(5 – 7) > (3 – 4)
(3*2 + 5*4) == (8*5/2 + 4*4 – 10)
verdadero
condición
falso sentencias
Ejemplo de if simple
Prueba 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
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.
#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;
}
Sentencia if - else
La 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;
falso verdadero
condición
sentencias sentencias
Ejemplo de if - else simple
Prueba 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;
}
Tarea
Escriba un programa que lea tres números reales y decida si forman un
triángulo. Suponga que los números se leen de mayor a menor.
Entregar impreso.
Intersección de dos rectas
Programa para determinar si dos rectas se interceptan
Suponga que las rectas se representan por la ecuación de la forma
y=mx+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 2x2
Se desea resolver un sistema de ecuaciones de 2x2 de la forma
ax+by=c
dx+ey=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;
}
Tarea
Un punto está sobre una recta si al avaluar la ecuación y – mx – b se obtiene
un valor positivo y está bajo la recta si se obtiene un valor negarivo. Escriba un
programa que lea los valores de la pendiente m y la ordenada al origen b, y las
coordenadas (x, y) de un punto e imprima si el punto esta sobre o bajo la recta.
(x,y)
y – mx + b > 0 y = mx + b
y – mx + b < 0
Operadores lógicos
Existen 4 operadores lógicos en C: and = &&, or = ||, not = !, xor = ^. Los
operadores lógicos tienen una prioridad más baja que los operadores
relacionales.
!
&&
||
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, ...
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>
#include <iostream.h> int main()
int main() {
{ float cal;
float cal; cout << "teclee la calificación: ";
cout << "teclee la calificación: "; cin >> cal;
cin >> cal; if(cal < 6)
if(cal < 6) cout << “Reprobado\n";
cout << “Reprobado\n";
if(cal >= 6 && cal < 7)
else if(cal < 7) cout << “Suficiente\n";
cout << “Suficiente\n";
if(cal >=7 $$ cal < 8)
else if(cal < 8) cout << “Bien\n";
cout << “Bien\n";
if(cal >=8 && cal < 9)
else if(cal < 9) cout << “Muy bien\n";
cout << “Muy bien\n";
else
else
cout << “Excelente\n";
cout << “Excelente\n";
return 0;
return 0; }
}
Comparación de 3 números
Se desea comparar 3 números leídos desde el teclado, imprimiendo el mayo
de ellos.
Se puede resolver comparando el primero con el segundo, luego si el primero
es mayor, se compara el primero con el tercero.
Si el primero no es mayor que el segundo, entonces se compara el segundo
con el tercero.
verdadero
a>b
falso verdadero
a>=b && a>=c
verdadero
falso “a mayor”
b>=a && b>=c
“b mayor”
verdadero
c>=a && c>=b
“c mayor”
Anidamiento
Condiciones compuestas
#include <iostream.h>
int main()
{ #include <iostream.h>
float a, b, c; int main()
cout << "teclee 3 números: "; {
cin >> a >> b >> c; float a, b, c;
if(a > b) cout << "teclee 3 números: ";
cin >> a >> b >> c;
if(a > c) if(a >= b && a >= c)
cout << a << endl; cout << a << endl;
else else
cout << c << endl; if(b >= a && b >= c)
else cout << b << endl;
if(b > c) else
if ( a < c ) if ( a < b )
if ( b < c ) if ( a >= b )
x = y; x = z;
else else
x = z; x = y;
else else
x = z; x = z;
Tarea casera
Acción del
caso b break;
caso b
Acción del
caso z break;
caso z
Acción por
omisión
ejemplo de switch
#include <iostream.h>
int main(){
int dia;
Programa para leer un cout << "teclee el número del día: ";
número de día (1 – cin >> dia;
lunés,… 7 – domingo) switch(dia){
case 1:cout << "Lunes" << endl;break;
case 2:cout << "Martes" << endl;break;
case 3:cout << "Miércoles" << endl;break;
SIEMPRE PONGA break case 4:cout << "Jueves" << endl;break;
AL FINAL DE CADA case 5:cout << "Viernes" << endl;break;
case 6:cout << "Sabado" << endl;break;
OPCIÓN EN LA case 7:cout << "Domingo" << endl;break;
SENTENCIA SWITCH. default: cout << "día no válido" << endl;
}
system("PAUSE");
}
Switch(variable){
case ‘a’ : cout << “jhsjkhkjhkjfhjkhfjkbkjnfkn”<< endl; break;
………
}
Tarea casera
Modifique el programa de los días de la semana para desplegar “entre
semana” si el día es de 1 a 5, “sabado” si es 6 y “domingo” si es 7.
b b 2 4ac
x
2a
Algoritmo
1. Leer valores de los coeficientes
2. Determinar el valor del discriminante
3. Si el discriminante es mayor que cero encontrar las 2 raíces diferentes y
mostrarlas en la pantalla, sino
4. Si el discriminante es igual a cero determinar la raíz doble y mostrarla
en la pantalla, sino
5. Determinar las raíces complejas conjugadas y mostrarlas en la pantalla.
Variables
Coeficientes:
a – coeficiente de x2, real (float)
b – coeficiente de x, real (float)
c – término independiente, real (float)
d – discriminante, real (float)
Declaración:
float a, b, c, d;
Lectura:
cout << “Teclee los coeficientes a, b, c: ”;
cin >> a >> b >> c;
Determinación del discriminante:
d = b*b – 4*a*c;
Variables para almacenar las raíces:
x1, x2 – raíces diferentes, reales (float)
xdoble – raíz doble (float)
xreal, ximg – parte reala e imaginaria de la raíz compleja
Declaración:
float x1,x2,x, xreal, ximag;
Determinación de cada caso
Utilizaremos una sentencia if anidada:
If(d>0){
x1 = (-b – sqrt(d))/2/a;
x2 = (-b + sqrt(d))/2/a;
cout << “x1 =\t“<< x1 << “\nx2 =\t” << x2 << endl;
}else If(d=){
xdoble = (-b – sqrt(d))/2/a;
cout << “Raiz doble\nx =\t“<< xdoble << endl;
}else{
xreal = -b/2/a;
ximag = (sqrt(-d))/2/a;
cout << “x real =\t“<< xreal << “\nximag =\t” << ximg << endl;
}
Ejemplo
Dos vehículos se mueven a diferentes velocidades en t = 0 y con
aceleraciones constantes y diferentes y se encuentran en diferente posición,
haga un programa que determine en que tiempos y posiciones ambos
vehículos coinciden.
//tiempos
float t1,t2,pos1,pos2;
//lectura de datos
cout << "teclee el t1, x01 y a1: ";
cin >> t1 >> x01 >> a1;
cout << "teclee el t2, x02 y a2: ";
cin >> t2 >> x02 >> a2;
Solución del problema
a = 0.5*(a1-a2); b = v1-v2;
c = x01-x02;
d = b*b - 4*a*c;
if(d>0){
t1 = (-b+sqrt(d))/2/a;
t2 = (-b-sqrt(d))/2/a;
if(t1>0){
pos1 = x01+v1*t1+0.5*a1*t1*t1;
cout << "se encontrarán en "<<t1<<" s en "
<<pos1<<" m"<<endl;
}
if(t2>0){
pos2 = x01+v1*t2+0.5*a1*t2*t2;
cout <<"se encontrarán en "<<t2<<" s en "
<<pos2<<" m"<<endl;
}
}else
cout << "NO se encuentran"<<endl;
system("PAUSE");
}
else colgado
F v
if (x < y) x<y
if (x < z) v
x<z
cout << "Hola" ;
else Adios
cout << "Adiós" ;
Hola
v
if (x < y) x<y
if (x < z)
cout << "Hola" ; F v
x<z
else
cout << "Adiós" ;
Adios Hola
Solución
if (x < y){
if (x < z)
cout << “Hola" ;
}
else
cout << "Adiós" ;
o
if (x < y && x < z)
cout << “Hola" ;
else
cout << "Adiós" ;
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”;
Ejemplos
Sentencia if sentencia ?:
if(a>5) x = 6;else x = 7; a>5 ? x=6: x=7;
if(x>8 && x<12) (x>8 && x<12)?a=2*b+c:a=3*b+c;
a = 2*b+c;
else
a = 3*b+c;
if(a>b) (a>b)?(b>c?x=5*a+c:x=6*a+b;):x=8*a+4*b;
if(b>c)
x = 5*a+c;
else
x = 6*a+b;
else
x = 8*a+4*b;
Ejercicios
Traducir a if
y = (a>b)?3*a+b:2*a+b;
z =a>=2*x?(a<6)?4*a:5*a:3*a+1;
main(){
int n;
//numero par con operador ?:
cout << "teclee n:";
cin >> n;
n%2==0?cout << "numero par\n":cout << "numero impar\n";
system("PAUSE");
}
#include <iostream.h>
main(){
int a,b,c,m;
//numero mayor con operador ?:
cout << "teclee a,b,c:";
cin >> a>>b>>c;
a>=b ? a>=c ? cout << a : cout << c:b>=c ? cout << b:cout << c;
a>=b ? a>=c ? m = a : m = c : b>=c ? m = b : m = c;
cout << endl;
cout << m << endl;
system("PAUSE");
}
Tarea
Traduzca las sentencias if a sentencias con el operador ?:.
if(x>8) y = 23;else z = -5;