Professional Documents
Culture Documents
Computacin
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 aritmticas. En C el valor 1 se interpreta como verdadero y el 0 como falso.
Significado igualdad Diferente Mayor que Menor que Mayor o igual Menor o igual
Ejemplos
1>2 3<5 (7 4) == 3 17 >= (5 + 12) i = 3; j = 7; i * j != 21 float a=0.1; = 0 falso = = = = 0 1 1 1 falso verdadero verdadero verdadero
(3*a 0.3) == 0
3>1>0
=
=
0
1
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)
Sentencia if
La sentencia if permite decidir ejecutar o no una instruccin o un bloque de instrucciones.
Sintaxis if (condicin)
Instruccin o bloque;
Un bloque es una secuencia de instrucciones englobadas entre llaves ({}). La condicin esta formada por una expresin booleana. verdadero condicin
falso
sentencias
Ejemplo de if simple
Prueba si un nmero ledo desde el teclado es par. #include <iostream.h> int main() { int numero; cout << "teclee un nmero: "; cin >> numero; if(numero % 2 == 0) cout << "nmero par"; return 0; }
Ejemplo 2 de if simple
Si el nmero a es divisible por el nmero b, se despliega el nmero de veces que a es mayor que b. #include <iostream.h> int main() { int a,b,n; cout << "teclee un nmero: "; cin >> a; cout << "teclee un nmero: "; 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 instruccin (o un bloque de instrucciones) y otra instruccin (o un bloque de instrucciones)
Sintaxis if (condicin)
Instruccin o bloque;
else Instruccin o bloque;
verdadero
sentencias
Tarea
Escriba un programa que lea tres nmeros reales y decida si forman un tringulo. Suponga que los nmeros se leen de mayor a menor.
Escriba un programa que lea tres nmeros reales representando los lados de un tringulo y decida si el tringulo es rectngulo o no. Suponga que los nmeros se leen de mayor a menor.
Entregar impreso.
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; }
sino
informar que no hay solucin
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 solucin\n"; return 0; }
Tarea
Un punto est sobre una recta si al avaluar la ecuacin 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 lgicos
Existen 4 operadores lgicos en C: and = &&, or = ||, not = !, xor = ^. Los operadores lgicos tienen una prioridad ms baja que los operadores relacionales.
expresin1 0 0 1 1 expresin2 0 1 0 1 expresin1 && expresin2 0 0 0 1 expresin1 0 0 1 1 expresin2 0 1 0 1 expresin1 || expresin2 0 1 1 1
expresin
! expresin
expresin1 0 0 1 1
expresin2 0 1 0 1
expresin1 ^ expresin2 0 1 1 0
0
1
1
0
Discusin
Escriba sentencias que sean verdaderas para: x = 1, 2, 4, 8
x = 7, 14, 21, , 49
x = 1, 2, 3, 6, 7, 8, 9 x = , - 5, -3, -1, 0, 2, 4, 6,
Anidamiento
Una sentencia if puede tener en su parte verdadera o falsa otra sentencia if. O sea if(condicin1) if(condicin2) if(condicin3) sentencias;
else
if(condicin2) if(condicin3) ...
Ejemplo de anidamiento
Se desea un programa para imprimir un letrero dependiendo de la siguiente tabla:
condicin cal < 6 6 <= cal < 7 letrero Reprobado Suficiente
Bien
Muy bien
#include <iostream.h> int main() { float cal; cout << "teclee la calificacin: "; 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; }
#include <iostream.h> int main() { float cal; cout << "teclee la calificacin: "; cin >> cal; if(cal < 6) cout << Reprobado\n"; if(cal >= 6 && cal < 7) cout << Suficiente\n"; if(cal >=7 $$ cal < 8) cout << Bien\n"; if(cal >=8 && cal < 9) cout << Muy bien\n"; else cout << Excelente\n"; return 0; }
Comparacin de 3 nmeros
Se desea comparar 3 nmeros ledos 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.
verdadero
a>b
verdadero
b>c
falso
falso
verdadero
a>c
b mayor
c mayor
c mayor
a mayor
verdadero
a mayor
Anidamiento
#include <iostream.h> int main() { float a, b, c; cout << "teclee 3 nmeros: "; cin >> a >> b >> c; if(a > b) if(a > c) cout << a << endl; else cout << c << endl; else if(b > c) cout << b << endl;
Condiciones compuestas
#include <iostream.h> int main() { float a, b, c; cout << "teclee 3 nmeros: "; cin >> a >> b >> c; if(a >= b && a >= c) cout << a << endl; else if(b >= a && b >= c) cout << b << endl; else if(c >= a && c >= b) cout << c << endl; return 0; }
Tarea
Escriba una sentencia que sea verdadera para x = ...,-2,-1,0,3,6,9,12,15,18,...
Tarea casera
1. Escriba un programa en C que lea tres nmeros y los imprima en orden. Ayuda: existen 6 casos: a>b>c, a>c>b, b>a>c, b>c>a, c>a>b y c>b>a.
Haga una versin con condiciones compuestas y otra con sentencias if anidadas.
Sentencia switch
La sentencia switch permite elegir entre varias alternativas.
Sintaxis switch (<expresin>){ case <constante>:[case <constante>:]<sentencias>;break; ...
[default:<sentencias>;break;]
}
caso a Accin del caso a Accin del caso b break;
caso b
break;
caso z
break;
ejemplo de switch
Programa para leer un nmero de da (1 luns, 7 domingo)
#include <iostream.h> int main(){ int dia; cout << "teclee el nmero del da: "; cin >> dia; switch(dia){ case 1:cout << "Lunes" << endl;break; case 2:cout << "Martes" << endl;break; case 3:cout << "Mircoles" << endl;break; case 4:cout << "Jueves" << endl;break; case 5:cout << "Viernes" << endl;break; case 6:cout << "Sabado" << endl;break; case 7:cout << "Domingo" << endl;break; default: cout << "da no vlido" << endl; } system("PAUSE"); }
Modifique el programa de los das de la semana para desplegar entre semana si el da es de 1 a 5, sabado si es 6 y domingo si es 7. utilice una sola sentencia cout para el caso de los das entre semana.
Ejemplo de men
Se elige entre varias opciones de un men 1 - Microsoft Word"; 2 - Yahoo messenger"; 3 - AutoCAD"; 4 - Java Games"; Cada opcin despliega un mensaje diferente
/* Ejemplo-switch-1 */ #include <iostream.h> main(){ int a; cout << "\t\tMenu"; cout <<"\n-----------------------------------"; cout <<"\n1 - Microsoft Word"; cout <<"\n2 - Yahoo messenger"; cout <<"\n3 - AutoCAD"; cout <<"\n4 - Java Games"; cout <<"\n-----------------------------------"; cout <<"\nIngrese numero de su preferencia: "; cin >> a; // leer entrada switch (a){ case 1: // si entrada es 1 cout <<"\nPersonal Computer Software\n";break; case 2: // si entrada es 2 cout <<"\nWeb based Software\n";break; case 3: // si entrada es 3 cout <<"\nScientific Software\n";break; case 4: // si entrada es 4 cout <<"\nEmbedded Software\n";break; default: cout <<"\nEntrada incorrecta\n"; } system("PAUSE"); }
Ejemplo de empleados
Calcular el sueldo mensual de un empleado que trabaja por horas, el pago de cada hora trabajada depende de su categora: categoria A B C pago x hora 26.90 24.30 21.50
Adems si el empleado trabaja mas de 150 horas mensuales tiene una bonificacin del 5 % de sueldo.
Algoritmo
Se ingresara el nombre del empleado, seguido de su categora y al final el nmero de horas trabajadas. Algoritmo 1. Leer datos
Variables (salida) pagoHora real (float) bono real (float) sueldo real (float)
La lectura solo lee la cadena hasta el primer espacio o hasta la longitud mxima, si teclea juan perez, solo se almacenar juan.
Declaracin y lectura
char nombre[7]; //nombre del empleado char categoria; //categora A, B, C int horas; //horas trabajadas float pagoHora, sueldo, bonificacion; cout << "nombre del empleado: "; cin >> nombre; cout << "categora: "; cin >> categoria; cout << "horas trabajadas: "; cin >> horas;
Salida de resultados
La salida se presentar en forma tabular
Tarea
Escriba un programa que despliegue un men con las opciones: a. Capital de Blgica? b. Ro ms grande se Sudamrica? c. Sistema operativo de Microsoft? d. Premio novel de qumica mexicano? lea un carcter de a a d y despliegue la respuesta de la opcin elegida. Utilice un sentencia switch.
Tarea casera
Modifique el programa de los das de la semana para desplegar entre semana si el da es de 1 a 5, sabado si es 6 y domingo si es 7.
Escriba un programa que lea un valor de temperatura en K, C o F y la convierta a las otras dos escalas, lea el tipo de conversin mediante un men y una sentencia switch.
Escriba un programa que lea dos nmeros reales y un smbolo de operacin y realice la operacin aritmtica seleccionada (+, -, *, /) entre los dos nmeros tecleados. Utilice la sentencia switch. Ejemplo: Teclear 3.5 7.8 * 7.4 16.3 / obtener 27.3 0.45399
b b 2 4ac x 2a
Hay tres casos posibles dependiendo del valor del radicando >0 b2 4ac =0 <0 Dos races diferentes Una raz repetida Races complejas conjugadas
Variables
Coeficientes: a coeficiente de x2, real (float)
cout << x real =\t<< xreal << \nximag =\t << ximg << endl;
}
Ejemplo
Dos vehculos se mueven a diferentes velocidades en t = 0 y con aceleraciones constantes y diferentes y se encuentran en diferente posicin, haga un programa que determine en que tiempos y posiciones ambos vehculos coinciden.
Sea x01, v1 y a1 la posicin, la velocidad y la aceleracin con que se mueve el primer vehculo y x02, v2 y a2 la posicin, la velocidad y la aceleracin en que se mueve el segundo vehculo.
Las ecuaciones de movimiento de cada cuerpo son:
x1 = x01+ v1 t + 0.5a1 t2
b b 2 4ac x 2a
Esta tiene solucin cuando b2 4 a c > 0
Algoritmo
1. Leer los valores del primer vehculo
2. Leer los valores del segundo vehculo 3. Calcular los coeficientes a, b y c 4. Calcular el valor del discriminante
else colgado
if (x < y) if (x < z) cout << "Hola" ; else cout << "Adis" ;
F
x<y
v v
x<z
x<z
Adios
Hola
Solucin
if (x < y){ if (x < z) cout << Hola" ; } else cout << "Adis" ;
o
if (x < y && x < z) cout << Hola" ; else cout << "Adis" ;
Sentencia ?:
La sentencia if puede abreviarse mediante el operador ?:. La sintaxis es: condicin ? operando1 : operando2; Esta muy relacionado a la sentencia if/else. El operador regresa el operando1 si la condicin es verdadera y regresa el operando2 si es falsa. Ejemplo:
Ejemplos
Sentencia if if(a>5) x = 6;else x = 7; sentencia ?: a>5 ? x=6: x=7;
(a>b)?(b>c?x=5*a+c:x=6*a+b;):x=8*a+4*b;
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;
Qu valores se imprimen? int a=8,b=9,x=5,y,z; y = (a>b)?3*a+b:2*a+b; z =a<=2*x?(a<6)?4*a:5*a:3*a+1; cout <<"y = "<< y <<" z= " <<z<<endl;
#include <iostream.h> 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; if(x>=8 && x!=12)
z = sqrt(6*x);
else if(x>0) z = sin(3*x); else z = sin(5*x); Traduzca la siguiente sentencia con ? A if
x = (y>5)?2*y+1:(z<10)?3*y+2:5*z+1;
Tarea casera
Escriba un programa que lea tres nmeros reales representando los lados de un tringulo y decida si el tringulo es rectngulo o no. Suponga que los nmeros se leen de menor a mayor.
(punto extra) Escriba un programa para resolver una ecuacin cuadrtica. Considere el caso en que las soluciones sean complejas utilizando el operador ?:.