operadores aritmeticos
TRANSCRIPT
18/11/08
1
Programación 1 (03) Unidad IV: Expresiones
Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas
Facultad de Ingeniería Universidad de Los Andes
Expresión
Puede ser:
✫ Una variable: x ✫ Una constante: 3
✫ Una combinación de operadores y operandos: (y + 1)/2
Prof. Flor Narciso Programación 1 Semestre B-2008
2
18/11/08
2
Expresión
Tipos de expresiones
✫ Aritmé'cas: Los operandos que intervienen en ella son numéricos, el resultado es numérico y los operadores son aritméQcos
✫ Lógicas: Su resultado es CIERTO ó FALSO. Se construyen mediante los operadores relacionales y lógicos
Prof. Flor Narciso Programación 1 Semestre B-2008
3
Operación Operador Expresión algebráica
Operador en C
Expresión en C
Suma + A + 3 + A + 3
Resta - B - C - B - C
Producto x X x Y * X * Y
División / X/Y ó X Y
/ X/Y
Módulo % R % S
Incremento I + 1 ++ I++ ó ++I
Decremento I - 1 -- I- - ó - - I
Programación 1 Semestre B-2008
Prof. Flor Narciso 4
Operadores aritméQcos en C
18/11/08
3
Operadores aritméQcos en C
Operación Módulo
• Operador: %
• Este operador calcula el resto del cociente entero
• Se usa con variables enteras
• Su divisor no puede ser cero
Prof. Flor Narciso Programación 1 Semestre B-2008
5
Operadores aritméQcos en C
Ejemplos
25 % 5 = 0
13 % 2 = 1
23 % 4 = 3
Prof. Flor Narciso Programación 1 Semestre B-2008
6
18/11/08
4
Operadores aritméQcos en C
Incremento (++)
• La expresión a++; es equivalente a la expresión a = a + 1;
• En una sola expresión se Qene:
– Un operador asignación – El operador suma
– Un valor literal: el valor 1
• Es un operador unario Se aplica a una sola variable
Prof. Flor Narciso Programación 1 Semestre B-2008
7
Operadores aritméQcos en C
Incremento (++)
• Para n = 2, la ejecución de la sentencia i = n++; /* post‐incremento */
asigna el valor 2 a i y después incrementa el valor de n a 3 i = 2 n = 3
• La ejecución de la sentencia i = ++n; /*pre‐incremento */
incrementa el valor de n a 4 y después asigna este valor a i n = 4 i = 4
Prof. Flor Narciso Programación 1 Semestre B-2008
8
18/11/08
5
Prof. Flor Narciso Programación 1 Semestre B-2008
Incremento (++)
unsigned short int a, b = 2, c = 5;
a = b + c++;
✩ El operador ++ está ubicado a la derecha de la variable c
✩ Primero se efectúa la suma y la asignación sobre a, que pasa a valer 7
✩ Luego se incrementa la variable c, que pasa a valer 6
✩ La variable b no modifica su valor
9
Operadores aritméQcos en C
Prof. Flor Narciso Programación 1 Semestre B-2008
Incremento (++)
unsigned short int a, b = 2, c = 5;
a = b + ++c;
✩ El operador ++ está ubicado a la izquierda de la variable c
✩ Primero se incrementa la variable c, que pasa a valer 6
✩ Luego se realiza la suma y la asignación sobre a, que pasa a valer 8
✩ La variable b no modifica su valor
10
Operadores aritméQcos en C
18/11/08
6
Operadores aritméQcos en C
Decremento (‐‐)
• La expresión a‐‐; es equivalente a la expresión a = a ‐ 1;
• En uno sola expresión se Qene: – Un operador asignación – El operador resta – Un valor literal: el valor 1
• Es un operador unario: Se aplica a una sola variable
Prof. Flor Narciso Programación 1 Semestre B-2008
11
Operadores aritméQcos en C
Decremento (‐‐)
• Para n = 5, la ejecución de la sentencia i = n‐‐; /* post‐decremento */
asigna el valor 5 a i y después decrementa el valor de n a 4. i = 5 n = 4
• La ejecución de la sentencia i = ‐‐n; /* pre‐decremento */
decrementa el valor de n a 3 y después asigna este valor a i. n = 3 i = 3
Prof. Flor Narciso Programación 1 Semestre B-2008
12
18/11/08
7
Operadores aritméQcos en C
• Los operadores +, ‐, *, /, se pueden usar con operandos (constante, variable o expresión) tanto enteros como reales
• La división de enteros da como resultado un entero y trunca el resultado al mayor entero menor que el cociente. Es importante tener esto en cuenta cuando se trabaja con enteros
5/2 = 2 3/4 = 0 17/5 = 3
• Cuando la división se realiza entre variables de punto flotante, entonces el resultado es también de punto flotante
Prof. Flor Narciso Programación 1 Semestre B-2008
13
Operadores aritméQcos en C
✩ Si ambos operandos son de Qpo entero entonces el resultado es de Qpo entero
✩ Si uno de los operandos o ambos operandos son de Qpo real entonces el resultado es de Qpo real
✩ Si la expresión evaluada da como resultado un valor de Qpo entero y la variable a la cual se le va a asignar este valor es de Qpo real, entonces el resultado será converQdo automáQcamente al Qpo real antes de realizar la asignación
✩ Si la expresión evaluada da como resultado un valor de Qpo real y la variable a la cual se le va a asignar este valor es de Qpo entero, entonces el resultado será converQdo automáQcamente al Qpo entero antes de realizar la asignación
Prof. Flor Narciso Programación 1 Semestre B-2008
14
18/11/08
8
Precedencia de los operadores aritméQcos en C
( ) Subexpresiones encerradas entre paréntesis se evalúan
primero (mayor nivel de precedencia)
++ ‐‐
* / % + ‐ (menor nivel de precedencia)
Nota: La evaluación de los operadores con la misma prioridad se
realiza de izquierda a derecha
Prof. Flor Narciso Programación 1 Semestre B-2008
15
Expresiones aritméQcas
Ejemplo: Evaluar la siguiente expresión aritméQca:
(a + b + c + d + e) % 5 R1 = a + b R2 = R1 + c R3 = R2 + d R4 = R3 + e
R5 = R4%5 ← Resultado
Prof. Flor Narciso Programación 1 Semestre B-2008
16
18/11/08
9
Expresiones aritméQcas
Ejemplo: Evaluar la expresión aritméQca
(a + b + c + d + e)%5 para los valores:
a = 3, b = 2, c = 1, d = 8, e = 4
R1 = 3 + 2 = 5 R2 = 5 + 1 = 6 R3 = 6 + 8 = 14 R4 = 14 + 4 = 18
R5 = 18 % 5 = 3
Prof. Flor Narciso Programación 1 Semestre B-2008
17
Expresiones aritméQcas
Ejemplo: Evaluar la siguiente expresión aritméQca:
a % 2 / b – c * a * y + 18 / c – 3 * h
R1 = a % 2 R2 = R1 / b R3 = c * a R4 = R3 * y R5 = 18 / c R6 = 3 * h R7 = R2 – R4 R8 = R7 + R5
R9 = R8 – R6 ← Resultado
Prof. Flor Narciso Programación 1 Semestre B-2008
18
18/11/08
10
Ejemplo: Evaluar la siguiente expresión aritméQca: a * (b + c) + c * (d + e)
Determine el resultado para los valores: a = 3, b = 2, c = 1, d = 8, e = 4
Prof. Flor Narciso Programación 1 Semestre B-2008
19
Expresiones aritméQcas
Expresiones aritméQcas
Ejercicios
Suponiendo declaradas y asignadas las variables int i = 10, j = 7;
Indique los valores de las siguientes expresiones: a) (3 * i ‐ 2 * j) % (2 * d ‐ c)
b) 2 * ((i / 5) + (4 * (j ‐ 3)) % (i + j ‐2))
Prof. Flor Narciso Programación 1 Semestre B-2008
20
18/11/08
11
Prof. Flor Narciso Programación 1 Semestre B-2008
Convertir grados Fahrenheit a grados Centígrados Análisis E-P-S
Entradas: Temperatura en grados Fahrenheit (fahr ∈ R) Proceso: Calcular la temperatura en grados Centígrados
centi = (fahr - 32.0) × (5.0/9.0) Salidas: Temperatura en grados centígrados (centi ∈ R)
Algoritmo 0. Inicio 1. Escribir (”Introduzca la temperatura Fahrenheit: ”)
2. Leer (fahr) 3. centi = (fahr - 32.0) × (5.0/9.0)
4. Escribir (”Temperatura equivalente en °C es “, centi) 5. Fin
21
Expresiones aritméQcas
Prof. Flor Narciso Programación 1 Semestre B-2008
Codificación /* Convertir grados Fahrenheit a grados Centígrados */ #include <stdio.h>
int main() {
const float MULT = 5.0/9.0, SUB = 32.0; float fahr, centi; printf(“Introduzca la temperatura Fahrenheit: ”); scanf(“%f”, &fahr); centi = (fahr - SUB) * MULT; printf(“Temperatura equivalente en °C es %f”, centi);
return 0; }
22
Expresiones aritméQcas
18/11/08
12
Prof. Flor Narciso Programación 1 Semestre B-2008
23
Operador Asignación Significado
+= x += y x = x + y;
-= x -= y x = x - y;
*= x *= y x = x * y;
/= x /= y x = x / y;
%= x %= y x = x % y;
Operadores compuestos en C
Prof. Flor Narciso Programación 1 Semestre B-2008
Ejemplos
a += b; a = a + b;
x -= y; x = x - y;
pot *= 2; pot = pot * 2;
x /= y + 1; x = x/(y + 1);
suma %= 4; suma = suma % 4;
24
Operadores compuestos en C
18/11/08
13
Prof. Flor Narciso Programación 1 Semestre B-2008
A = B = C = D = 1 asigna a las variables A, B, C y D el valor de 1
Solamente para asignar el mismo valor a diferentes variables
25
Sentencia de asignación múlQple
Prof. Flor Narciso Programación 1 Semestre B-2008
Cuatro maneras de asignar valores a las variables
variable = valor constante x = 3;
variable = variable x = y;
variable = expresión x = (y + 1)/2;
Leer (variable) scanf(“%d”, &x);
26
Recuerde !!!!!
18/11/08
14
Ejercicios
• Evaluar cada una de las siguientes expresiones aritméQcas:
a) A % B + C / D – 6 b) A + 2 * (3 + B) c) 3 * (A % (B / C)) + 5 d) 6 * 5 / 10 * 2 + 10 e) (6 * 5 )/ (10 * 2) + 10 f) (6 * 5) /( 10 * 2 + 10) g) (6 * 5) / (10 * (2 + 10)) h) A * B / C * D
Prof. Flor Narciso Programación 1 Semestre B-2008
27
Ejercicios
• Evaluar la expresión 4 / 2 * 3 / 6 + 6 / 2 / 1 / 5 % 2 / 4 * 2
• Escribir las siguientes expresiones algebraicas como expresiones en C
a) 4x ‐ 2y + 7 b) a + b c) 3x + 2y c ‐ d 2z d) x + y ‐ 3x e) y2 ‐ y1 x 5 x2 ‐ x1
Prof. Flor Narciso Programación 1 Semestre B-2008
28
18/11/08
15
Ejercicios
• Si A = 4, B = 5 y C = 1, evaluar las siguientes expresiones
a) B * A ‐ B * B / 4 * C b) (A * B) / 3 * 3 c) (((B + C) / 2 * A + 10) * 3 * B) ‐ 6
• Evaluar la siguiente expresión para A = 2 y B = 5 3 * A ‐ 4 * B / A % 2
Prof. Flor Narciso Programación 1 Semestre B-2008
29
Ejercicios
• Dadas las declaraciones: float w;
int i, j = 2, k = 4;
Determinar el valor de las variables i, w y k después de la ejecución de las siguientes sentencias de asignación: i = j / k; w = i / j; k = i % j; w = 8.0 / j;
Prof. Flor Narciso Programación 1 Semestre B-2008
30
18/11/08
16
Ejercicios
• Realizar el análisis E‐P‐S, diseño y codificación en C para resolver este problema.
– Si para tres números enteros cualesquiera, a, b y c, se cumple que a2 + b2 = c2 entonces ellos consQtuyen una tripla Pitagórica. Existe un número infinito de tales triplas. A conQnuación se expone una manera de generar estas triplas:
Considere dos números enteros m, y , n tal que m > n. Entonces se Qene que los tres números m2 ‐ n2, 2mn y m2 + n2 son una tripla Pitagórica
El programa debe leer los valores de m y n, tomando en consideración que m es mayor que n. Además, debe imprimir los valores correspondientes a la tripla Pitagórica una vez verificado que se cumple que a2 + b2 = c2
Prof. Flor Narciso Programación 1 Semestre B-2008
31
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C
para resolver los siguientes problemas:
– Calcular el número total de hojas que Qene un árbol, si por ejemplo, Qene doscientos ochenta y cuatro ramas y sabiendo que cada rama Qene como promedio trescientas cuarenta y siete hojas
– Un joyero vino de Siria para vender joyas en Bagdad. PromeQó que pagaría por el hospedaje 20 dinares si el dueño de la hostería vendía todas las joyas por 100 dinares; y 35 dinares si las vendía por 200 dinares. Al cabo de varios días, tras andar de aquí para allá, acabó vendiéndolas todas por 140 dinares. ¿ Cuánto debe pagar el joyero de acuerdo con el trato de hospedaje ?
Prof. Flor Narciso Programación 1 Semestre B-2008
32
18/11/08
17
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver
los siguientes problemas:
– Calcular los números del 0 al 10 uQlizando cuatro cuatros y cualquiera de las operaciones aritméQcas. Por ejemplo 44 ‐ 44 = 0
– Calcular el promedio de cinco notas
– Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio de la hora de trabajo y, considerando unos descuentos, el sueldo bruto en concepto de impuestos (20%)
Prof. Flor Narciso Programación 1 Semestre B-2008
33
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver los
siguientes problemas:
– Dado el peso de una persona en libras, calcular su peso en kilogramos y gramos
– Leer cuatro números reales. Calcular y escribir su producto, suma y su media aritméQca
– Leer el radio de un círculo y calcular e imprimir su superficie y la longitud de la circunferencia
Prof. Flor Narciso Programación 1 Semestre B-2008
34
18/11/08
18
Ejercicios • Realizar el análisis E‐P‐S, diseño y codificación en C para resolver los
siguientes problemas:
– Si un cuerpo pesa a kp (kilopondios) en un lugar en el que la gravedad es g = 9.8 m/s2, calcular su masa
– Una fuerza actúa sobre un cuerpo de n kg de masa, pasando la velocidad de éste de v0 a vf m/s en t segundos. Calcular la fuerza
Prof. Flor Narciso Programación 1 Semestre B-2008
35
Expresión lógica
• El resultado de la evaluación de la expresión es un valor lógico (cierto o falso)
• Los operadores relacionales y los operadores lógicos crean expresiones que se evalúan como ciertas o falsas
• En lenguaje C operan sobre operandos (constantes, variables, expresiones) de diferentes Qpos (numéricos, caracteres)
Prof. Flor Narciso Programación 1 Semestre B-2008
36
18/11/08
19
Programación 1 Semestre B-2008
Prof. Flor Narciso 37
Operadores relacionales en C
a b a==b a!=b a < b a<= b a > b a >=b
2 3 falso cierto cierto cierto falso falso
‘a’ ‘d’ falso cierto cierto cierto falso falso
4.5 4.5 cierto falso falso cierto falso cierto
Operadores relacionales en C
Ejemplos
Programación 1 Semestre B-2008
Prof. Flor Narciso 38
18/11/08
20
( ) Subexpresiones encerradas entre paréntesis se evalúan primero (mayor nivel de precedencia)
< <= > >= == != (menor nivel de precedencia)
Nota: La evaluación de las operadores con la misma prioridad se realiza de izquierda a derecha
Precedencia de los operadores relacionales en C
Programación 1 Semestre B-2008
Prof. Flor Narciso 39
Programación 1 Semestre B-2008
(a + b) < c Expresión mixta!
votos > electores
a != (x*x + b*x + c) Expresión mixta!
(alto - bajo) == 2 Expresión mixta!
(horas*3600) >= (minutos*60 + segundos) Expresión mixta!
numero <= 2
40
Expresiones lógicas en C
Prof. Flor Narciso
18/11/08
21
Programación 1 Semestre B-2008
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica:
x >= (y+z) R1 = y + z R2 = x >= R1 ← Resultado
Para los valores x = 3, y = 4, z = 1 se Qene
R1 = 4 + 1 = 5 R2 = 3 >= 5 = falso ← Resultado
41 Prof. Flor Narciso
Programación 1 Semestre B-2008
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica:
num % 4 == 0
R1 = num % 4 R2 = R1 == 0 ← Resultado
Para el valor num = 7 se Qene
R1 = 7 % 4 = 3
R2 = 3 == 0 = falso ← Resultado
42 Prof. Flor Narciso
18/11/08
22
Programación 1 Semestre B-2008
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica:
(a + b ‐ 1) < (x * y)
43 Prof. Flor Narciso
Programación 1 Semestre B-2008
Prof. Flor Narciso
Expresiones lógicas Ejemplo: Evaluar la siguiente expresión lógica:
(a + b ‐ 1) < (x * y)
R1 = a + b R2 = R1 ‐ 1 R3 = x * y R4 = R2 < R3 ← Resultado
Para los valores a = 31, b = ‐1, x = 3, y = 2 se Qene
R1 = 31 + (‐1) = 30 R2 = 30 ‐ 1 = 29 R3 = 3 * 2 = 6 R4 = 29 < 6 = falso ← Resultado
44
18/11/08
23
Programación 1 Semestre B-2008
Operan sobre operandos (constantes, variables, expresiones) de tipo lógico (cierto o falso) y evalúan a un valor de tipo lógico (cierto o falso)
Operación
Operador algebraico
Operador en C
Expresión en C
Y-lógico (AND) ∧ && a && b
O-lógico (OR) ∨ || a || b
Negación (NOT) ¬ ! !a
45 Prof. Flor Narciso
Operadores lógicos en C
Programación 1 Semestre B-2008
a b a && b a || b !a cierto cierto cierto cierto falso cierto falso falso cierto falso falso cierto falso cierto cierto falso falso falso falso cierto
46 Prof. Flor Narciso
Operadores lógicos en C
Ejemplos
18/11/08
24
Programación 1 Semestre B-2008
!(p && q) || s
p && q && s
(a || b) && (c || d)
a > 5 && !(b < c) || 3 <= d
(op < min) || (op > max)
(edad >= 18) && (edad <= 60 + a)
!encontrado
47 Prof. Flor Narciso
Operadores lógicos en C
Ejemplos
Programación 1 Semestre B-2008
( ) → Sub-expresiones encerradas entre paréntesis se evalúan primero (mayor nivel de precedencia) !
&& || (menor nivel de precedencia)
48 Prof. Flor Narciso
Precedencia de los operadores lógicos en C
18/11/08
25
Programación 1 Semestre B-2008
49
Precedencia y asociaQvidad de los operadores en C
Prof. Flor Narciso
Programación 1 Semestre B-2008
Ejemplo: Evaluar la siguiente expresión lógica
!(x < 5) && !(y >= 7) R1 = x < 5 R2 = y >= 7 R3 = !R2 R4 = !R1 R5 = R4 && R3 →Resultado
Para los valores x = 1, y = -1 se tiene
R1 = 1 < 5 = cierto R2 = -1 >= 7 falso R3 = !falso cierto R4 = !cierto falso R5 = falso && cierto = falso →Resultado
50 Prof. Flor Narciso
Expresiones lógicas
18/11/08
26
Programación 1 Semestre B-2008
Ejemplo: Evaluar la siguiente expresión lógica
!((i > 4) || (j <= 6)) R1 = i > 4 R2 = j <= 6 R3 = R1 || R2 R4 = !R3 → Resultado
Para los valores i = 22 y j = 3 se tiene
R1 = 22 > 4 cierto R2 = 3 <= 6 cierto R3 = cierto || cierto cierto R4 = !cierto falso
51 Prof. Flor Narciso
Expresiones lógicas
Programación 1 Semestre B-2008
Ejemplo: Evaluar la siguiente expresión lógica
!(a + b == c) || (c != 0) && (b - c > = 19)
R1 = R2 = R3 = R4 = R5 = R6 = R7 = R8 = → Resultado
52 Prof. Flor Narciso
Expresiones lógicas
18/11/08
27
Programación 1 Semestre B-2008
Ejemplo: Evaluar la siguiente expresión lógica
!(a + b == c) || (c != 0) && (b - c > = 19)
R1 = a + b R2 = R1 == c R3 = c != 0 R4 = b - c R5 = R4 >= 19 R6 = !R2 R7 = R3 && R5 R8 = R6 || R7 → Resultado
53 Prof. Flor Narciso
Expresiones lógicas
Programación 1 Semestre B-2008
Ejercicios
Evaluar cada una de las siguientes expresiones
a) (b + (b * b ‐ 4 * a * c)) / (2 * a) <= 25
b) (x >= MINIMO) && (x <= MAXIMO)
c) (contador < MAXIMO) && !encontrado
d) (mes1 < mes2) || (mes1 == mes2) && (anyo1 <= anyo2) e) anyo%4 == 0 && anyo % 100 != 0 || anyo%400 == 0 f) (A ‐ 1) < B || A != (B ‐ C) || A >= C
54 Prof. Flor Narciso
18/11/08
28
Programación 1 Semestre B-2008
Ejercicios Suponiendo declaradas y asignadas las variables int i=8, j=5; double x=0.005, y=‐0.01;
Indique los valores de las siguientes expresiones: a) (3 *i ‐2 *j) % (2 *i ‐j) b) 2 * ((i /5) + (4 * (j ‐3)) % (i + j ‐ 2)) c) ‐(i + j) / 2 d) i++; e) j‐‐; f) (x > y) && (i > 0)||(j < 5) g) (x > y) || (i > 0) && (j < 5)
55 Prof. Flor Narciso
Programación 1 Semestre B-2008
Ejecicios
Si A = 1, B = ‐2, C = 3, y D = 4, determine cual de los siguientes pares de expresiones lógicas son ambas verdaderas:
( ) Exp1: ((A+C)>(B‐D)) && ((B+C)<(D‐A)) Exp2: (B+C > D) ( ) Exp1: (A<C && B>D) Exp2: (B+C > D) ( ) Exp1: (A>B || C<D)
Exp2: (A<C && B<D) ( ) Exp1: A == B
Exp2: (A>B || C<D)
56 Prof. Flor Narciso
18/11/08
29
Programación 1 Semestre B-2008
Ejercicios Dadas las siguientes definiciones de constantes #define MIN 1 #define MAX 5 #define NUM1 5 #define NUM2 8 #define NUM3 ‐1 y la siguiente declaración de variable int num;
Escriba las expresiones lógicas que sean verdaderas si a) El valor de num se encuentra en el rango definido por
las constantes MIN y MAX. b) El valor de num es uno de los tres valores constantes
NUM1, NUM2 o NUM3.
57 Prof. Flor Narciso