Module02 Lec02 v2 0
Module02 Lec02 v2 0
Module02 Lec02 v2 0
Clase 2: Operadores y
Funciones
Temario:
Ejemplo Assembler C
Datos stack
Memoria
de
heap datos
bss
Programa
data
var var
var var
var
var
var var
var
var
var
65 13.0
0x41 0.1247
0b01000001 24.75
Formatos: Formatos:
Operaciones
binarias
Operaciones
unarias
r ↔ ¬p r=p
1.5.- Modularidad
2.- FUNCIONES
bloque bloque
var1
var2
función función
bloque bloque
var1
copia
de Función con parámetros copia
Función sin parámetros
var1 var2 y sin valor de retorno var1 de y con valor de retorno
var2
var2
función función
2.- FUNCIONES
Declaración:
tipo_funcion nombre_función (tipo1 param1, tipo2 param2, … , tipon paramn);
Definición:
tipo_funcion nombre_función (tipo1 param1, tipo2 param2, … , tipon paramn){
Cuerpo de la función:
- Declaración/definición de variables
- Bloques
- Sentencias
return (expresión); Cuando hay
} valor de retorno
2.- FUNCIONES
Observación:
2.- FUNCIONES
2.- FUNCIONES
- Cuando se alcanza el final de esta función, el programa llega a su fin (finaliza la ejecución).
int main(int argc, char *argv[]) int main(void)
2.- FUNCIONES
Ejemplos de uso:
uint16_t a = 2, b = 7;
uint16_t c;
+ Adición c = a + b + 9;
- Sustracción c = b - a;
* Multiplicación c = 5 * a * b;
uint16_t a = 2, b = 7;
uint16_t c;
Ejercicio 01:
Escribir una función que lea una variable global n, entera de 16 bits (sin signo), y que calcule
la suma de los n primeros números naturales. El resultado debe ser retornado y almacenado
en una variable local de 16 bits (sin signo), llamada resultado_sumatoria. Verificar su
correcto funcionamiento mediante el uso de la función printf().
Ejercicio 02:
Escribir una función que reciba dos parámetros enteros de 32 bits (con signo) y que calcule
el cuadrado de la suma de dichos parámetros. El resultado debe ser almacenado en una
variable global entera de 32 bits (con signo) llamada resultado_suma_cuadrado. Verificar
su correcto funcionamiento mediante el uso de la función printf().
Ejercicio 03:
Escribir una función que reciba como parámetros tres números enteros de 8 bits (sin signo) y
que calcule el promedio aritmético de dichos números. El resultado debe ser retornado y
almacenado en una variable local llamada promedio. Verificar su correcto funcionamiento
mediante el uso de la función printf().
Operador
Valores numéricos Valor lógico
de relación
Operador
Valores lógicos lógico Valor lógico
uint16_t a = 2, b = 7;
uint16_t c;
== Igual a c = (b == 3 );
!= Diferente a c = (b != 4 );
uint16_t a = 2, b = 7;
uint16_t c;
|| OR c = (b < 7) || (b == 2);
Observación:
Evaluación de valores numéricos
c = (!a) || b; ↔ c = (a == 0) || (b != 0);
Ejercicio 04:
Escribir una función que reciba como parámetro un número entero de 16 bits (sin signo) y
que determine si el número es par o impar. Si el número es par, la función debe retornar el
valor 1; si el número es impar la función debe retornar el valor 0. Verificar su correcto
funcionamiento mediante el uso de la función printf().
Ejercicio 05:
Modificar la función anterior de modo que retorne 1 si el número es impar, y 0 si el número es
par. Verificar su correcto funcionamiento mediante el uso de la función printf().
Ejercicio 06:
Escribir una función que reciba tres parámetros enteros de 32 bits: número, límite superior
y límite inferior. La función debe verificar si el valor de número es mayor al valor de límite
inferior, y menor o igual al valor de límite superior. Si la condición se cumple, entonces la
función debe retornar el valor 1; de lo contrario, la función debe retornar el valor 0. Verificar
su correcto funcionamiento mediante el uso de la función printf().
int8_t a = 2, b = 7;
int8_t c;
~ NOT c = ~b;
| OR c = a | b;
^ XOR c = a ^ b;
Ejercicio 07:
Escribir una función que reciba como parámetro un número entero de 8 bits (con signo) y
retorne como resultado el inverso aditivo de ese número (Por ejemplo: si la entrada es 4
debe retornar -4; si la entrada es -35, debe retornar 35). No está permitido el uso del signo
de sustracción (-). Verificar su correcto funcionamiento mediante el uso de la función printf().
Ejercicio 08:
Escribir una función que reciba como parámetro un número entero de 32 bits (con signo) y
extraiga el byte más significativo (los 8 bits del extremo izquierdo). El valor de este byte debe
ser almacenado en una variable local de 32 bits (con signo) llamada resultado_msb.
Verificar su correcto funcionamiento mediante el uso de las función printf().
Ejercicio 09:
Escribir una función que reciba como parámetro dos números enteros de 8 bits (con signo):
num, pos. La función debe extraer de num el valor del bit en la posición pos (de 0 a 7). El
valor debe ser retornado a una variable local. Verificar su correcto funcionamiento mediante
el uso de la función printf().
Inicio
V
-Se forma una rama (o bifurcación) en la
lógica de control.
Resultado = Expresión2 Resultado = Expresión3 -Su uso es más intuitivo que el de los
operadores lógicos.
Fin
Ejercicio 10:
Escribir una función que reciba como parámetro un número entero de 16 bits (con signo) y
retorne como resultado el valor absoluto de dicho número. Verificar su correcto
funcionamiento mediante el uso de la función printf().
Ejercicio 11:
Escribir una función que reciba como parámetros dos números enteros de 32 bits (con signo)
y que retorne el valor del número mayor. Verificar su correcto funcionamiento mediante el uso
de la función printf().
Ejercicio 12:
Escribir una función que reciba como parámetros tres números enteros de 32 bits (con
signo): numero, límite inferior, límite superior. La función debe restringir el valor de
número: si número es menor a límite inferior, entonces la función debe retornar el valor de
límite inferior; si número es mayor a límite superior, entonces la función debe retornar el valor
de límite superior; si número se encuentra entre límite inferior y límite superior
(incluyéndolos), entonces la función debe retornar el valor de número. Verificar su correcto
funcionamiento mediante el uso de la función printf().
y = 3 + 4 * 5; P
r
e
y = 3 + 4 * 5 / 10; c
e
y = 8 * 12 % 10; d
e
n
y = 12 % 10 * 8;
c
i
a
Asociatividad
Ejemplo 01:
Escribir una función recursiva que reciba como parámetro un número ‘n’, natural de 16 bits,
y retorne la suma de los ‘n’ primeros números naturales. Verificar su correcto funcionamiento
mediante el uso de la función printf().
Ejemplo 02:
Escribir una función recursiva que reciba como parámetro un número ‘n’, natural de 16 bits,
y retorne el factorial del número ‘n’. Verificar su correcto funcionamiento mediante el uso de
la función printf().
Ejemplos:
valor = 8 * (12 % 10);
resultado = a + (5 * b);
Ejemplo: elevaAlCuadrado(uint16_t num);
Ejemplo: calculaMCM(uint16_t a, uint16_t b, uint16_t c);
Ejemplo: x = a + b; y = (a << 2) + (b & c);
Ejemplo: x = !a; y = ~b;
int sumaDigitos(int n){
int suma = 0;
while(n > 0){
suma += n%10;
n /= 10;
}
return suma;
}
Ejemplos:
uint16_t contador_1ms;
uint32_t valor_promedio;
float factor_de_conversion;
double constante_de_tiempo_filtro_rc;
Ursus americanus
Ursus
Taxonomía: Ursidae
Mammalia
Chordata
Animalia
Eukarya
General Específico
General Específico
Funciones → nombreDeFuncion
Variables → nombre_de_variable
Estilos
recomendados
Funciones → Nombre_De_Funcion
Variables → nombre_de_variable ¡¡¡NO MEZCLAR ESTILOS!!!
5.8.- Comentarios
Criterios generales:
- Escribir comentarios de manera clara. No escribir una “novela”: ser conciso y explícito.
- Introduzca comentarios cuando sean necesarios para aclarar una línea de código, pero
no se sienta obligado a comentar cada línea.
5.8.- Comentarios
- Emplear el formato de comentarios compatible con el estándar C89, el cual utiliza los
símbolos /* y */, en lugar del formato incorporado desde C++, el cual utiliza el
símbolo //.
/* Este comentario es compatible */
// Este comentario no es compatible
- Al comentar una línea de código, de haber un punto y coma, insertar los comentarios
después del punto y coma, dejando antes un espacio en blanco.
while ( ( port & 0x80 ) == 0 ){
; /* espera al pin Correcto */
/* espera al pin */ ; /* Incorrecto, comentario antes de ; */
;/* espera al pin – Incorrecto, falta un espacio después de ; */
}
5.8.- Comentarios
Observación:
/************************************************
* Este comentario no utiliza asteriscos en el
* lado derecho
*************************************************/
5.8.- Comentarios
Recomendación:
/***********************************************************
* Nombre de la función: TIPO foo(TIPO arg1, TIPO arg2...)
* retorna : descripción del valor que retorna
* arg1 : descripción
* arg2 : descripción
* Creado por : nombre del autor
* Fecha de creación : fecha
* Descripcion : descripción detallada
* Notas : restricciones, observaciones
***********************************************************/
6.- REFERENCIAS
[3] Michael Barr, Embedded C Coding Standard, First Edition, Barr Group,
2008.
7.- PREGUNTAS