Sei sulla pagina 1di 144

101 ECP

Programacin de sistemas
embebidos en lenguaje C
Introduccin al lenguaje C

Agenda
Historia del Lenguaje C
Fundamentos de C
Tipos de datos
Variables, Constantes y Arrays
Palabras claves
Funciones (Revisin)
Declaraciones
printf() Librarias de uso especial

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 2

Agenda
Operadores y Sentencias Condicionales
Sentencias y Expresiones
Sentencias de Control
Funciones
Estructura de un programa
Arrays y Strings
Punteros y Strings
Estructuras y Uniones
Caractersticas adicionales de C
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 3

Section 1
Usando C en un Ambiente
Embebido

Justificando los hechos


C fue desarrollado en 1972 para poder escribir el
sistema operativo UNIX .
C es mas deBajo Nivel" que otros lenguajes de
alto nivel (muy bueno programando MCUs)
C es soportado por compiladores por una amplia
variedad de arquitecturas MCU.
C puede hacer casi cualquier cosa que el
lenguaje assembler
C es usualmente mas facil para escribir cdigo
que el lenguaje assembler
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 5

Terminando con los Mitos


La verdad que forma su eleccin

C no es tan portable entre arquitecturas


como se cree
Las caractersticas del ANSI C son portables
Las Libreras de un procesador NO son portables
El cdigo de un procesador especfica (peripfricos, I/O,
interrupciones, caractersticas espociales) NO son portables

C NO es eficiente como el assembler


C Necesita usar mas memoria que el
Assembler

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 6

Flujo de las herramientas de desarrollo


C Compiler

C Source Files

Compiler
Driver
Program

Assembly Source Files


(.asm or .s)

Assembler

Assembly Source Files


(.asm or .s)

Object
Files

Archiver
(Librarian)

Object File Libraries


(Archives)

Linker

(.lib or .a)

Executable

Memory Map

MPLAB IDE
Debug Tool

Linker Script

COFF
Debug File

(.lkr or .gld)
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 7

Flujo de las herramientas de desarrollo

C Compiler
Archivo Fuente C

.c

Preprocessor

.h

Archivo Header C

Compiler

Archivo Fuente Assembler

2007 Microchip Technology Incorporated. All Rights Reserved.

.s

101 ECP

Slide 8

Entorno Runtime C
Compilador C setea un runtime
Localiza el Espacio para el Stack
Inicializa el stack pointer
Localiza el Espacio para apilar datos
Copia valores desde Flash/ROM para variables
en RAM que se declaren con valores iniciales
Limpia la RAM sin inicializar
Desabilita todas las interrupciones
Llama a la Funcin main() (donde comienza
su cdigo)
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 9

C Runtime Environment
El ambiente del Setup Runtime es
automticamente linkeado dentro de la
aplicacion por la mayoria de
compiladores PIC
Usualmente por cualquiera de estas
formas:
crt0.s / crt0.o (crt = C RunTime)
startup.asm / startup.o

El usuario puede modificarlo si es


absolutamente necesario
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 10

Fundamentos de C
Un programa C simple
Example
Directivas del
Preprocesador

Archivo Header

#include <stdio.h>
#define PI 3.14159
int main(void)
{
float radius, area;

Declaracin de Constantes
(Text Substitution Macro)

Declaracin de variables

//Calculate area of circle


radius = 12.0;
area = PI * radius * radius;
printf("Area = %f", area);

Funcion

Comentario

}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 11

Seccion 2
Comentarios

Comentario
Definition

Comentarios son usados para documentar un programa


funcionalmente y para explicar que hace un bloque
particular o linea de cdigo. Los comentarios soon
ignorados por el compilador.

Dos formas de comentario se puden usar:


Comentario de Bloque

/*

Este es un comentario */
Comentario de Bloque simple

//

Este tambien es un comentario


2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 13

Comentarios
Las mejores Prcticas
/********************************************************
* Program: hello.c
* Author: R. Ostapiuk
********************************************************/
#include <stdio.h>
/********************************************************
* Function: main()
********************************************************/
int main(void)
{
/*
int i;
// Loop count variable
char *p;
// Pointer to text string
*/
printf(Hello, world!\n); // Display Hello, world!
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 14

Seccion 3
Variables, Identificadores, y
Tipos de datos

Variables y Tipos de datos


Un Programa C simple
Example

#include <stdio.h>
#define PI 3.14159
Tipo de
datos

int main(void)
{
float radio, area;

Declaracin de Variable

//Calcula area de circulo


radio = 12.0;
area = PI * radius * radio;
printf("Area = %f", area);

Variables
en uso

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 16

Variables
Definition

Una variable es un nombre que representa una o mas


localizaciones de memoria usadas para tener los datos.

Una variable puede ser entendida como un


contenedor que puede almacenar datos usados
en un programa

int myVariable;
myVariable = 5;

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

myVari

able

Slide 17

Variables
Variables son nombres
para almacenar en
localizaciones de
memoria
int warp_factor;

15

Memoria de datos (RAM)

4116

char first_letter;

float length;

5.74532370373175
10-44

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 18

Variables
La Declaracin de
variables consiste de
un nico identificador
(nombre)

15

int warp_factor;

Memoria de datos (RAM)

4116

char first_letter;

float length;

5.74532370373175
10-44

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 19

Variables
y un tipo de dato
Determina Tamao
Determina como son
interpretados los valores

int warp_factor;

15

Memoria de datos (RAM)

4116

char first_letter;

float length;

5.74532370373175
10-44

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 20

Identificadores
Proporcionan Nombres a elementos del
programa:
Variables, Funciones, Arrays, Otros elementos
Ejemplos de identificadores en un programa

#include <stdio.h>
#define PI 3.14159
int main(void)
{
float radius, area;
//Calculate area of circle
radius = 12.0;
area = PI * radius * radius;
printf("Area = %f", area);
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 21

Identificadores
Caracteres vlidos en identificadores:

Identifier
Primer Caracter
_ (entre apstrofes)
A to Z
a to z

Resto de Caracteres
_ (entre apstrofes
A to Z
a to z
0 to 9

Caso sensible!
Solo los primeros 31 caracteres son
validos*
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 22

Palabras Claves ANSI C


auto
break
case
char
const
continue
default
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

Algunos compiladores implementados pueden


definir palabras claves adicionales
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 23

Tipos de Datos
Tipos fundamentales
Type

char
int
float
double

Description

Bits

Caracter simple

8
16
32
64

entero
Nmero de punto flotante simple presicin
Nmero de punto flotante doble presicin

El tamao de un entero (int) varia con compilador


MPLAB-C30 int es 16-bits
MPLAB-C18 int es 16-bits
CCS PCB, PCM & PCH int es 8-bits
Hi-Tech PICC int es 16-bits
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 24

Cualificadores de tipos de Datos


Modifican el tipo de Entero
Cualificadores: unsigned, signed, short ylong
Tipos de Cualificadores

Min

unsigned char
0
char, signed char
-128
unsigned short int
0
short int, signed short int -32768
unsigned int
0
int, signed int
-32768
unsigned long int
0
long int, signed long int
-231
unsigned long long int
0
long long int,
-263
signed long long int
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Max

Bits

255

127

65535
32767

16
16

65535

16

32767
232-1

16
32

231-1
264-1

32
64

263-1

64
Slide 25

Cualificadores de tipos de Datos


Modifican el tipo de punto flotante
Qualified Type

Absolute Min

Absolute Max

Bits

float

~10-44.85

~1038.53

32

double (1)

~10-44.85

~1038.53

32

long double

~10-323.3

~10308.3

64

MPLAB-C30:

double es equivalente a long


double si fno-short-double es
usado
(1)

MPLAB-C30 Usa el Formato punto flotante IEEE-754


MPLAB-C18 Usa el formato modificado IEEE-754

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 26

Variables
Como declarar una variable
Syntax

type identifier1, identifier2,,identifiern;

Una variable debe ser declarada antes de ser


usada
El compilador necesita asignarle un espacio y
por lo tanto debe ser identificada
Example

int x, y, z;
float warpFactor;
char text_buffer[10];
unsigned index;
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 27

Variables
Como declarar una Variable
Variables pueden ser declaradas en las siguientes formas:
Syntax

Una declaracin sobre una linea

type identifier;
Una declaracin sobre una linea con un valor inicial

type identifier = InitialValue;


Multiples declaraciones en una linea

type identifier1, identifier2, identifier3;


Multiples declaraciones en una linea con valores iniciales

type identifier1 = Value1, identifier2 = Value2;


2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 28

Variables
Como declarar una variable

Examples

unsigned int x;
unsigned y = 12;
int a, b, c;
long int myVar = 0x12345678;
long z;
char first = 'a', second, third = 'c';
float big_number = 6.02e+23;

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 29

Variables
Como declarar variables

Algunas veces, las variables (y otros


elementos del programa) son declarados
en un archivo separado llamado Archivo
de header (cabecera)
Un archivo Header termina con .h
Archivos Header son asociados con un
programa atravez de la directiva
#include
MyProgram.h
2007 Microchip Technology Incorporated. All Rights Reserved.

MyProgram.c
101 ECP

Slide 30

Directiva #include
Tres formas usan esta directiva #include:
Syntax

#include <file.h>

En este caso el compilador busca el archivo en el directorio actual


y en el resto de los directorios
Por ejemplo: C:\Program Files\Microchip\MPLAB C30\*.*

#include file.h

busca solo en el directorio actual

#include c:\MyProject\file.h

Usa un path especfico para buscar un archivo include


2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 31

Directiva #include
archivo HEADER main.h y achivo FUENTE main.c
main.h
unsigned
unsigned
unsigned

main.c
int
int
int

a;
b;
c;

#include "main.h"
int main(void)
{
a = 5;
b = 2;
c = a+b;
}

El contenido del archivo


main.h son efectivamente
pasados dentro del
comienzo del main.c en las
lineas de directivas
#include

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 32

Directiva #include
Archivo main.c Equivalente

Antes que el
preprocesador
funcione debe definir
las variables del
archivo main.c sino
usa un archivo header
previo donde defina
las variables usadas.

main.c
unsigned
unsigned
unsigned

int
int
int

a;
b;
c;

int main(void)
{
a = 5;
b = 2;
c = a+b;
}

Archivo equivalente
main.c sin #include

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 33

Lab 01
Variables y tipos de datos

On the CD
\ARG_C\Lab01\Lab01.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 34

Seccion 4
Constantes Literales

Constantes Literales
Definition

Un literal o una constante litera es un valor, semejante a un


number, caracter o string, el cual puede ser asignado a una
variable o una constante.
Esto tambien puede ser usado
directamente como una funcin de un parmetro o un operando en
una expresin.

Literales
Son valorados como "hard coded"
Pueden ser numeros, caracteres o strings
Pueden ser representados en un nmero de formatos
(decimal, hexadecimal, binario, caracter, etc.)
Siempre representa el mismo valor (5 siempre
representa la cantidad cinco)
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 36

Constantes vs. Literales


Cual es la diferencia?

Los terminos son usados intercambiados


en mucha literatura de programacin
Un literal es una constante, pero una
constante no es un literal
#define MAXINT 32767
const int MAXINT = 32767;

Para esta presentacin:


Constantes son etiquetas que representan un literal
Literales son valores, muchas veces asignadas
constantes simblicas y variables
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 37

Constantes literales
Cuatro tipos bsicos de literales:
Entero
Punto Flotante
Caracter
String

Entero y Punto Flotante son numricas y


Tipo constantes:
Comas y espacios no son permitidos
El valor no puede exceder tipo limitado
Puede ser precedido por el signo menos
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 38

Literales Enteros
Decimal (Base 10)

No pueden comenzar con cero (excepto


para el 0 )
No puede incluir punto decimal
Valores enteros vlidos:

127

-1021

65535

Decimales enteros Invlidos:

32,767

25.0

2007 Microchip Technology Incorporated. All Rights Reserved.

1 024
101 ECP

0552
Slide 39

Literales Enteros
Hexadecimal (Base 16)

Pueden comenzar con 0x o 0X


Pueden incluir los digitos 0-9 y A-F / a-f
Entero Hexadecimal validos:

0x 0x1

0x0A2B

0xBEEF

Entero Hexadecimal invlidos :

0x5.3

0EA12

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

0xEG

53h
Slide 40

Literales Enteros
Octal (Base 8)

Puede comenzar con 0 (zero)


Puede incluir digitos 0-7
Enteros Octales vlidos:
0 01
012
073125
Enteros Octales Invlidos:
05.3

0o12

2007 Microchip Technology Incorporated. All Rights Reserved.

080

101 ECP

53o

Slide 41

Literales Enteros
Binario (Base 2)

Pueden comenzar con 0b o 0B


Pueden tener dgitos 0 y 1
Enteros Binarios vlidos:

0b

0b1

0b0101001100001111

Enteros Binarios Invlidos:

0b1.0

01100

0b12

10b

ANSI C No especifica el formato de los enteros binarios.


Por lo tanto, esta notacin es usada por la mayora de los
compiladores
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 42

Literales de Punto Flotante


Decimal (Base 10)

Cualquier Entero literal decimal pero


esta permitido punto decimal
Notacin e es usada para
especificar exponentes (ken k10n)
Literales de Punto Flotante vlidos:
2.56e-5 10.4378 48e8 0.5
Literales de Punt Flotante Invlidos:
0x5Ae-2
02.41
F2.33
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 43

Caracteres Literales
Specificados con apstrofes simples (')
Pueden incluir cualquier caracter imprimible
Puede incluir cualquier caracter no-imprimible
usando secuencia de escape (e.g. '\0' = NULL)
Caracteres Vlidos: 'a', 'T', '\n', '5', '@', '
' (espacio)
Caracteres Invlidos: 'me', '23', '''

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 44

String Literales
Especificado con doble comillas (")
Puede incluir cualquier caracter
imprimible o no-imprimible (usando
secuencias escape)
Usualmente terminan en caracter nulo \0
String Vlido: "Microchip", "Hi\n",
"PIC", "2500","rob@microchip.com",
"He said, \"Hi\""
String Invlido: "He said, "Hi""
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 45

String Literales
Declaracin

Los Strings son un caso especial de arrays


Si no se declara la dmensin, el caracter nulo
indica el final del string:

Ejemplo 1 Forma incorrecta

Ejemplo 2 Forma correcta

char color[3] = "RED";


Es almacenado como:
color[0] = 'R'
color[1] = 'E'
color[2] = 'D'

char color[] = "RED";


Es almacenado como:
color[0] = 'R'
color[1] = 'E'
color[2] = 'D'
color[3] = '\0'

NO completo el String no '\0' al final


2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 46

String Literales
Como incluir caracteres especiales en el Strings
Escape Sequence

\a
\b
\t
\n
\v
\f
\r
\"
\'
\?
\\
\0

ASCII Value

Character

BELL (alert)
Backspace
Horizontal Tab
Newline (Line Feed)
Vertical Tab
Form Feed
Carriage Return
Quotation Mark (")
Apostrophe/Single Quote (')
Question Mark (?)
Backslash (\)
Null

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

7
8
9
10
11
12
13
34
39
63
92
0
Slide 47

String Literales
Como incluir caracteres especiales en Strings
Example

char message[] = "Please enter a command\n"

Este String incluye un caracter newline


Secuencias Escape pueden ser incluidas
en un string like any ordinary character
El contragolpe extra el caracter que sigue
a este son considerados un caracter
simple y tiene un valor ASCII simple
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 48

Seccion 5
Constantes Simblicas

Constantes Simblicas
Definition

Una constante o a smbolo constante es una etiqueta


que representa un literal. En cualquier parte la etiqueta
encontrada en el cdigo, esta ser interpretada como el
valor del literal representado.

Constants
Cuando se asigna, el valor de este nunca
cambia
Elimina el uso de nmeros mgicos
Existen dos Tipos de constantes
Etiquetas que sustituyen texto
Variables constantes (!!??)
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 50

Constantes Simblicas
Constantes Variables Usando const

Algunos textos sobre C declaran las siguientes


constantes:
Example

const float PI = 3.141593;


Esto no es eficiente para un sistema embebido:
Una variable es localizada en memoria de
programa, pero esta no deber cambiar debido a
la palabra clave const
Este no es el uso tradicional de const
En la vasta mayoria de casos, es mejor usar
#define para constantes
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 51

Constantes Simblicas
Texto sustituido por etiquetas Usando #define
Define una etiqueta para sustituir un texto
Syntax

#define etiqueta texto


Cada instancia de label puede reemplazar el text por el
preprocesador a menos que la etiqueta sea parte de un string
No usa memoria del microcontrolador
Example

#define
#define
#define
#define

PI 3.14159
mol 6.02E23
MCU "PIC24FJ128GA010"
COEF 2 * PI

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 52

Lab 02
Constantes Simblicas

Sobre el CD
\ARG_C\Lab02\Lab02.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 53

Seccion 6
Funcin printf()

printf()

Funcin de la Librera Standard


Usada para escribir texto en la salida standard"
Normalmente en una computadora el monitor o la
computadora
Muchas veces en los sistemas embebidos es la UART
SIM Uart1 window en MPLAB-SIM

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 55

printf()
Funcin de la Librera Standard
Syntax

printf(ControlString, arg1,argn);
Imprime todo palabra por palabra dentro del string excepto %d's los
cuales son reemplazados por los valores de los argumentos del
listado
Example

int a = 5, b = 10;
printf("a = %d\nb = %d\n", a, b);
Result:

a=5
b = 10
2007 Microchip Technology Incorporated. All Rights Reserved.

NOTE: el 'd' en %d es la conversion


del caracter. (ver la siguiente lamina
para mas detalles)
101 ECP

Slide 56

printf()

Conversion Caracteres para Control de String


Conversion
de caracter

%c
%s
%d
%o
%u
%x
%X
%f
%e
%E
%g
%G

Significado

Caracter simple
String (todo los caracteres hasta '\0')
Entero sin signo
Entero octal sin signo
Entero decimal sin signo
Entero decimal sin signo con digitos minuscula(1a5e)
como x, pero con dgitos mayusula (e.g. 1A5E)
Valor decimal con signo(floating point)
Valor decimal con exponente(e.g. 1.26e-5)
como e, pero usando E para el exponente (e.g. 1.26E-5)
como e o f, pero dependiendo del tamao y precision del valor

como g, pero usando E para el exponente

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 57

printf()
Gotchas

El valor mostrado es interpretado


enteramente por el formato del string:
printf("ASCII = %d", 'a');
permite sacar : ASCII = 97
Un string mas problemtico :
printf("Value = %d", 6.02e23);
permite sacar: Valor = 26366
Resultados incorrectos pueden ser
mostrados si el tipo de formato no
corresponde al tipo de formato verdadero
del argumento
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 58

Lab 03
Funcin de librera
printf()

On the CD
\ARG_C\Lab03\Lab03.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 59

Seccin 7
Operadores

Operadores
Como hacer expresiones aritmticas
Definicion

Una expresin aritmtica es una expresin que contiene


uno o mas operandos y operadores artimticos.

Operandos pueden ser variables, constantes o


funciones que retornan un valor
Un registro de un MCU es usualmente tratado
como una variable
Son 9 los operadores aritmticos que pueden
ser usados
Operadores binarios: +, -, *, /, %
Operadores singulares: +, -, ++, - 2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 61

Operadores
Aritmticos
Operador
*
/
%
+
+ (unary)
- (unary)

Operacin

ejemplo

resultado

Multiplicacin

Adicin
Sustraccin

x * y
x / y
x % y
x + y
x - y

Positivo
Negativo

+x
-x

Producto de x e y
Relacin de x e y
Resto de x dividido por y
Suma de x e y
Diferencia de x e y
Valor de x
Valor negativo de x

Division
Modulo

NOTA - Un int dividido por un int retorna un int:


10/3 = 3
Use el mdulo para obtener el resto:
10%3 = 1
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 62

Operadores
Operador de divisin

Si ambos operandos son del tipo entero , el


resultado puede ser del tipo entero (int, char)
si uno o ambos operandos son del tipo punto
flotante, el resultado puede ser del tipo punto
flotante (float, double)
Ejemplo: Divisin entera

Ejemplo: Divisin flotante

int a = 10;
int b = 4;
float c;
c = a / b;
cc==2.2.0000000
00000

int a = 10;
float b = 4.0f;
float c;
c = a / b;
cc==2.2.5500000
00000

porque: int / int int

porque: float / int float

porque: int / int int

2007 Microchip Technology Incorporated. All Rights Reserved.

porque: float / int float

101 ECP

Slide 63

Operadores
Tipo conversin implcita

En cualquier expresin, el tipo de un operando


puede ser temporalmente "promovido" para la
mayora de otros operandos
Example

int x = 10;
float y = 2.0, z;
z = x * y;

// x promoted to float

Un tipo de datos mas pequeos sern


promovidos al mas grande tipo de
expresion para la duracin de la operacion
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 64

Operadores
Operaciones aritmticas implcitas Tipo conversin

Ejemplo conversiones tipo implcitas


Asume que X esta definido como:
short x = -5;
Expression

Conversin tipo Implcita

-x
x * -2L

x es promovida a int
x es promovida a long
porque -2L es un long
x es promovido a int
x es promovido a int

8/x
8%x
8.0/x

x es promovido a double
porque 8.0 es un double

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Expresiones

resultado

int
long

5
10

int
int
double

-1
3
-1.6

Slide 65

Operadores
Aplicacin del operador de Mdulos (%)
Truncar: x % 2n donde n es el ancho de la palabra
deseada (e.g. 8 for 8 bits: x % 256)
Retorna el valor de la parte mas baja n-bits de x
Puede ser usado para forzar aparte un numero en
cualquier base dentro de estos dgitos individuales
Example
#define MAX_DIGITS 6
long number = 123456;
int i, radix = 10; char digits[MAX_DIGITS];
for (i = 0; i < MAX_DIGITS; i++)
{
if (number == 0) break;
digits[i] = (char)(number % radix);
number /= radix;
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 66

Operadores
Como declarar sentencias de cdigo
Definition

Una sentencia asignada es una sentencia que se asigna


un valor a una variable.

Existen 2 tipos de asignar una sentencia


Asignacin simple
variable = expression;
La expresin es evaluada y la variable es
asignada
Asignacin compuesta
variable = variable o expresin;
la variable aparece a ambos lados del =
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 67

Operadores
Asignacin
Operado
r
=
+=
-=
*=
/=
%=
&=
^=
|=

Operacion

Ejemplo

Resultado

Asiganacin

x = y
x += y
x -= y
x *= y
x /= y

Compuesta
Asignacin

x %= y
x &= y
x ^= y
x |= y

Asigna x al valor de y
x = x + y
x = x - y
x = x * y
x = x / y
x = x % y
x = x & y
x = x ^ y
x = x | y
x = x << y
x = x >> y

<<=
>>=
2007 Microchip Technology Incorporated. All Rights Reserved.

x <<= y
x >>= y
101 ECP

Slide 68

Operadores
Asignacin compuesta

Declaraciones con la misma variable a cada


lado del signo de igualdad:
Example

x = x + y;
Esta operacin se puede entender como: El nuevo valor de
x ser igual al valor actual de x ms el valor de y

Puede usarse para acortar la asignacin


de operadores (asignacin compuesta):
Example

x += y;

//Incrementa x por el valor de y

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 69

Operadores
Relacin
Operador Operacin

Ejemplo

Resultado (FALSE= 0, TRUE 0)


1 si x menor que y, sino 0

<

Menor que

x < y

<=

Menor que o
igual a

x <= y

>

Mayor que

x > y

>=

Mayor que o
igual a

x >= y

==

Igual a

x == y

1 si x igual a y, sino 0

!=

No igual a

x != y

1 si x no igual a y, sino 0

1 si x menor o igual a y, sino 0


1 si x mayor que y, sino 0
1 si x mayor o igual a y, sino 0

En expresiones condicionales, cualquier valor no 0 es


es interpretado TRUE. Un valor de cero 0 es siempre FALSE.
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 70

Operadores
Diferencia entre = y ==

Tenga cuidado de no confundir = y ==.


No son intercambiables!
= es el operador asignado

x = 5 asigna el valor 5 a la variable x

== es el operador relacional 'igual a'


x == 5 prueba si es el valor de x es 5

if (x == 5)
{
haga si el valor de x es 5
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 71

Operadores
Logicos
Operado
r
&&

Operacion

Ejemplo

Resultado (FALSE = 0, TRUE 0)

Logica AND

x && y

1 Si ambos x 0 y y 0,
sino 0

||

Logica OR

x || y

0 Si ambos x = 0 e y = 0,
sino 1

Logica NOT

!x

1 if x = 0, sino 0

En expresiones condicionales, cualquier valor no zero es


interpretado como TRUE. Un valor 0 es siempre FALSE.
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 72

Operadores
Bitwise
Operator

Operation

Example

Result (for each bit position)

&

Bitwise AND

x & y

Bitwise OR

x | y

1, if 1 in both x and y
0, if 0 in x or y or both
1, if 1 in x or y or both
0, if 0 in both x and y

Bitwise XOR

x ^ y

Bitwise NOT
(Complemento a uno)

~x

1, if 1 in x or y but not both


0, if 0 or 1 in both x and y
1, if 0 in x
0, if 1 in x

La operacin se realiza en cada Bit del


primer operando con cada Bit
correspondiente del segundo operando
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 73

Operadores
Diferencias entre & y &&

Tenga cuidado de no confundir el


& y & &. No son intercambiables!
intercambiables
& es el bitwise y operador
0b1010 & 0b1101 0b1000

&& es el operador logico AND

0b1010 && 0b1101 0b0001 (TRUE)


<Valor-No Cero> && <Valor No Cero> 1 (TRUE)

if (x && y)
{
Si x y y son TRUE (no-cero)
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 74

Operadores
Difference Between & and &&

Qu sucede cuando cada uno de estos


fragmentos del cdigo se ejecuta?
Ejemplo 1 usando un Bitwise AND

char x = 0b1010;
char y = 0b0101;
if (x & y) printf("Hi!");
Ejemplo 2 Usando un operador logico AND
Operator

char x =
char y =
if (x &&

0b1010;
0b0101;
y) printf("Hi!");

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 75

Operadores
Evaluacin de Operadores lgicos y Circuitos
Cortos

La evaluacin de expresiones en una operacin


lgica para TRUE o FALSE es un resultado
desconocido
Example
Si tenemos dos expresiones que son probadas en una operacin AND:

expr1 && expr2


Las expresiones son evaluadas desde la izquierda hacia la derecha. Si
expr1 es 0 (FALSE), entonces expr2 no ser evaluado en absoluto puesto
que el resultado total se sabe ya que ser falso.
Tabla de verdad para AND
(&&)
FALSE = 0
TRUE = 1
2007 Microchip Technology Incorporated. All Rights Reserved.

expr1
0
0
1
1

expr2
X (0)
X (1)
0
1
101 ECP

Result
0
0
0
1

expr2 no se evala en

los primeros dos casos


puesto que su valor no es
relevante en el resultado
Slide 76

Operadores
Desplazamiento
Operator

Operation

<< Desplaza a la Izq

Example

Result

x << y

Shift x por y bits a la Izq

>> Desplaza a la Derecha x >> y Shift x por y bits a la Derecha

Ejemplo de desplazamiento a la Izquierda:

x = 5;
y = x << 2;

// x = 0b00000101 = 5
// y = 0b00010100 = 20

En cambio se fue y se pierde a la derecha del cambio, los


bits se cambian de puesto hacia fuera
Para desplazar hacia la izquierda, 0's desplazados dentro
(Rellena con ceros)
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 77

Operadores
Desplazamientos Casos Especiales

Desplazamiento Lgico a la derecha


(Rellena con ceros)
Si x es UNSIGNED (unsigned char en este caso):

x = 250;
y = x >> 2;

// x = 0b11111010 = 250
// y = 0b00111110 = 62

Desplazamiento Aritmtico a la derecha


(Sign Extend)
Si x es SIGNED (char en este caso):

x = -6;
y = x >> 2;
2007 Microchip Technology Incorporated. All Rights Reserved.

// x = 0b11111010 = -6
// y = 0b11111110 = -2
101 ECP

Slide 78

Operadores
Potencia de 2 Divididos vs. Desplazamiento derecho

Si usted est dividiendo por una energa de 2,


ser generalmente ms eficiente utilizar un
desplazamiento correcto en lugar de otro

y = x >> n

y = x / 2n
0 0 0 0 1 0 1 0

>>

0 0 0 0 0 1 0 1

Right Shift
1010
510
Trabajos con enteros o puntos flotantes
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 79

Operadores
Enteros divididos en potencias de 2 vs.
Desplazamientos en MPLAB C30
Example: Divide by 2

int
int
y =
10:
00288
0028A
0028C
0028E
00290

x = 20;
y;
x / 2;
804000
200022
090011
D80002
884010

Example: Right Shift by 1

int
int
y =

yy==10
10

y = x / 2;
mov.w 0x0800,0x0000
mov.w #0x2,0x0004
repeat #17
div.sw 0x0000,0x0004
mov.w 0x0000,0x0802

2007 Microchip Technology Incorporated. All Rights Reserved.

9:
00282
00284
00286

101 ECP

x = 20;
y;
x >> 1;
804000
DE8042
884010

yy==10
10

y = x >> 1;
mov.w 0x0800,0x0000
asr 0x0000,#1,0x0000
mov.w 0x0000,0x0802

Slide 80

Operadores
El Operador Condicional
Sintaxis

(test-expr) ? do-if-true : do-if-false;


Ejemplo

int x = 5;
(x % 2 != 0) ?
printf("%d es impar\n", x) :
printf("%d es par\n", x);
Resultado:
55 es
es impar
impar
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 81

Operadores
El operador condicional
El operador condicional puede ser usado para
condicionar asignar un valor a una variable
Ejemplo 1 (el mas usado comunmente)

x = (condicion) ? a : b;
Ejemplo 2 (el menos usado)

(condicion) ? (x = a):(x = b);


x = a si la condicion es true
En ambos casos: x = b si la condicin es false
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 82

Operadores
Los Operadores explcitos de formato
Anteriormente, sacamos un literal para mecanografiar el
float entrndolo en como: 4.0f
Podemos cambiar la variable en lugar de otro usando al
operador del :

(type)variable

Ejemplo: divisin entera

Ejemplo: Divisin decimal

int x = 10;
float y;

int x = 10;
float y;

y = x / 4;

y = (float)x / 4;

yy==2.2.0000000
00000

Porque: float / int float


yy==2.2.5500000
00000

Porque:
Porque:int
int/ /int
int
int
int
2007 Microchip Technology Incorporated. All Rights Reserved.

Porque: float / int float

101 ECP

Slide 83

Lab 04
Operadores

Sobre el CD
\ARG_C\Lab04\Lab04.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 84

Seccin 8
Tomar Decisiones

Delcaracin if
Syntax

Declaracin if (expresin)
expresin es evaluada para declaraciones TRUE (0) o
FALSE (=0)
Si TRUE, entonces declaracin es ejecutada
Note
Siempre que usted vea statement
en una gua de sintaxis, puede ser
substituido por una declaracin
compuesta (del bloque). Recuerde: los
espacios y las nuevas lneas no son
significativos.
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

if (expression)
{
statement1
statement2
}
Slide 86

Declaracin if
Diagrama de Flujo

Syntax

if (expression) statement

expression 0
TRUE

FALSE

expression = 0

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 87

Declaracin if
Example

int x = 5;
Si x es TRUE (no-cero)
if (x)
{
printf("x = %d\n", x); entonces imprime el valor de x.
}
while (1);

Que permite imprimir si x = 5? Si x = 0?

Si x = -82?
Si x = 65536?
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 88

Declaracin if
Testeando para TRUE

if (x) vs. if (x == 1)
if (x) necesita solamente testear para no igual a 0
if (x == 1) necesita probar para la igualdad con 1
Recuerde: TRUE es definido como no-cero, FALSE es
definido como cero
Ejemplo: if (x)

Ejemplo: if (x ==1)

if (x)
8:
011B4
011B6

E208C2
320004

if (x == 1)
11:
011C0
011C2
011C4

if (x)
cp0.w 0x08c2
bra z, 0x0011c0

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

804610
500FE1
3A0004

if (x == 1)
mov.w 0x08c2,0x0000
sub.w 0x0000,#1,[0x001e]
bra nz, 0x0011ce

Slide 89

Anidando Declaraciones if
Example

int power = 10;


float band = 2.0;
float frequency = 146.52;
if (power > 5)
{
if (band == 2.0)
{
if ((frequency > 144) && (frequency < 148))
{
printf("Yes, it's all true!\n");
}
}
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 90

Declaracin if-else
Syntax

if (expression) sentencia1
else entencia2
expression es evaluada por TRUE (0) o
FALSE (=0)
Si TRUE, entonces sentencia1 es ejecutada
Si FALSE, entonces sentencia2 es ejecutada

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 91

Declaracin if-else
Diagrama de flujo

Sintaxis

if (expression) statement1
else statement2

expresion 0
TRUE
FALSE

expresion = 0

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 92

Declaracin if-else
Example

{
float frequency = 146.52;

//frequency in MHz

if ((frequency > 144.0) && (frequency < 148.0))


{
printf("You're on the 2 meter band\n");
}
else
{
printf("You're not on the 2 meter band\n");
}
}

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 93

if-else if Sentencia
Syntax

if (expression1) sentencia1
else if (expression2) sentencia2
else sentencia3

expression1 es evaluada para TRUE (0) o


FALSE (=0)
Si TRUE, entonces sentencia1 is ejecutada
Si FALSE, entonces expresion2 es evaluada
Si TRUE, entonces sentencia2 es ejecutada
Si FALSE, entonces sentencia3 is ejecutada
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 94

if-else if Sentencia
Diagrama de Flujo

Syntax

if (expresion1) sentencia1
else if (expresion2) sentencia2
else sentencia3
TRUE
FALSE
TRUE
FALSE

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 95

if-else if Sentencia
Example

if ((freq > 144) && (freq < 148))


printf("You're on the 2 meter band\n");
else if ((freq > 222) && (freq < 225))
printf("You're on the 1.25 meter band\n");
else if ((freq > 420) && (freq < 450))
printf("You're on the 70 centimeter band\n");
else
printf("You're somewhere else\n");

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 96

Lab 05
Making Decisions (if)

On the CD
\101_ECP\Lab05\Lab05.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 97

Sentencias switch
Sintaxis

switch (expresion)
{
case const-expr1: sentencia1

case const-exprn: sentencian


default: sentencian+1

expresion es evaluada y testeada para


igualar con la const-expr en cada
clusula case
La sentencia en la clausula igualada case
es ejecutada

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 98

Sentencia switch
Diagrama de flujo (default)

YES

Note que cada


sentencia fracasa a
la siguiente

NO
YES

Este es el
comportamiento
por defecto de la
sentencia switch

NO

YES

NO

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 99

Sentencia switch

Diagrama de Flujo (modificado)

YES

Adicionando una
sentencia break a
cada bloque de
sentencias permite
eliminar fracasos,
permitiendo
solamente un caso
de bloque de
clausulas de la
sentencias que se
ejecutar

NO
YES

NO

YES

NO

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 100

Sentencia switch
switch Ejemplo 1

switch(channel)
{
case 2: printf("WBBM Chicago\n"); break;
case 3: printf("DVD Player\n"); break;
case 4: printf("WTMJ Milwaukee\n"); break;
case 5: printf("WMAQ Chicago\n"); break;
case 6: printf("WITI Milwaukee\n"); break;
case 7: printf("WLS Chicago\n"); break;
case 9: printf("WGN Chicago\n"); break;
case 10: printf("WMVS Milwaukee\n"); break;
case 11: printf("WTTW Chicago\n"); break;
case 12: printf("WISN Milwaukee\n"); break;
default: printf("No Signal Available\n");
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 101

Sentencia switch
switch Ejemplo 2

switch(letter)
{
case 'a':
printf("Letter 'a' found.\n");
break;
case 'b':
printf("Letter 'b' found.\n");
break;
case 'c':
printf("Letter 'c' found.\n");
break;
default:
printf("Letter not in list.\n");
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 102

Sentencia switch
switch Ejemplo 3

switch(channel)
Apply this case to channel 4, 5,
{
6, and 7
case 4 ... 7:
printf("VHF Station\n"); break;
case 9 ... 12:
printf("VHF Station\n"); break;
case 3:
Case 3 and 8 are allowed to fall
case 8:
through to case 13
case 13:
printf("Weak Signal\n"); break;
case 14 ... 69:
printf("UHF Station\n"); break;
default:
printf("No Signal Available\n");
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 103

Lab 06
Tomando Decisiones
(switch)

Sobre el CD
\ARG_C\Lab06\Lab06.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 104

Seccin 9
Loops

Lazos for
Syntax

for (expresion1; expresion2; expresion3)


sentencia
expression1 inicializa una variable de cuenta del lazo
en el comienzo del lazo (e.g. i = 0)
expression2 es la condicin de testeo el lazo
continua siempre que esta sea true
(e.g. i <= 10)
expression3 es ejecutada al final de cada iteracin
usualmente para modificar la variable de conteo del
lazo (e.g. i++)

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 106

Lazos for

Diagrama de Flujo

Syntax

for (expresion1; expresion2; expresion3)


sentencia
Inicializqa la
variable de conteo

i = 0

Modifica la variable
del loop

i++

Test de la variable del


loop

TRUE

i < n
FALSE

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 107

Lazos for
Example (Code Fragment)

int i;
for (i = 0; i < 5; i++)
{
printf("Loop iteration #%d\n", i);
}
Expected Output:
Loop
Loop iteration
iteration 00
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 108

Lazos for
Lo que sea deen las tres expresiones puede ser
blanquedo (los puntos y comas deben
permanecer)
Si expresion1 o expresion3 fallan , sus
acciones simplemente desaparecen
If expression2 falla, esta siempre se asume
como true
Note
Loops infinitos
for
(( ;; ;; ))
for
Un
loop
for
sin
cualquier
expresin {{
permite la ejecucin

indefinida (puede dejar el }


}
lazo va la sentencia
break )
101 ECP
2007 Microchip Technology Incorporated. All Rights Reserved.

Slide 109

Lazo while
Syntax

while (expresion) sentencia

Si expresion es true, sentencia puede


ser ejecutada y entonces expresion
puede ser re-evaluada determinar puede o
no ejecutarse la sentencia otra vez
Es posible que sentencia no se ejecute
nunca si expresion es falsa cuando esta
es evaluada primero
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 110

Lazos While
Diagrama de flujo

Syntax

while (expresion) sentencia

TRUE

FALSE

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 111

Lazos While
Ejemplo

Ejemplo

int i = 0;

Contador del Loop


inicializado fuera del loop
Condicin de chekeo
inicial al iniciar el loop

Contador del loop incrementa


manualmente fuera del lazo

while (i < 5)
{
printf("Loop iteration #%d\n", i++);
}
Salida esperada:
Loop
Loop iteration
iteration 00
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 112

Lazos While
La expresion siempre debe estar all, es la
diferencia con un loop for
while se usa mas a menudo que for cuando se
implementan loops infinitos, aunque es
solamente una cuestin de gusto personal
Frecuentemente usada para un loop min en el
programa
Nota
Infinitos Loops
Un
loop
while
con
expression = 1 se ejecuta
indefinidamente (se ouede
abandonar
el
loop
via
sentenciabreak )
2007 Microchip Technology Incorporated. All Rights Reserved.

while
while ((11))
{{

}}
101 ECP

Slide 113

Loop do-while
Syntax

do statement while (expression);

sentencia es ejecutada y entonces la


expresion es evaluada para determinar
cuando o no se ejecuta sentencia
statement se ejecutar siempre por lo
menos una vez, incluso si la expresin es
falsa cuando el lazo comienza

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 114

Loop do-while
Diagrama de flujo

Syntax

do sentencia while (expression);

TRUE

FALSE

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 115

Loop do-while Loop


Ejemplo

Example (Code Fragment)

int i = 0;

Inicializa el contador
del loop fuera del loop

do
{

Contador del loop es


incrementado manualmente fura
del loop

printf("Loop iteration #%d\n", i++);


Condicion checkeda al
} while (i < 5);
Salida esperada:

final de la iteracin del


loop

Loop
Loop iteration
iteration 00
Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 116

Sentencia break
Syntax

break;

Causa la inmediata terminacin de un loop


incluso si la condicin de la salida no se ha
cumplido
Existe una sentencia switch de modo que la
ejecucin no fracase a despus clausula
case
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 117

Sentencia break

Diagrama de flujo con un loop while


Sintaxis

break;

TRUE

FALSE

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 118

Sentencia break
Ejemplo

Ejemplo

int i = 0;
while (i < 10)
Existe en el loop si i = 5.
{
Iteraciones 6-9 no son ejecutadas.
i++;
if (i == 5) break;
printf("Loop iteration #%d\n", i);
}
Salida esperada:

Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 22
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 119

Sentencia continue
Syntax

continue;

Hace al programa saltar de nuevo al


principio de un lazo sin la realizacin de la
iteracin actual

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 120

Sentencia continue
Diagrama de flujo con un loop while
Syntax

continue;

TRUE

FALSE

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 121

Sentencia continue
Ejemplo

Ejemplo

int i = 0;
while (i < 6)
Salta la iteracin remanente
cuando
{
i = 2. La iteracin 2 puede no
i++;
ejecutarse.
if (i == 2) continue;
printf("Loop iteration #%d\n", i);
}
Resultado esperado:

Loop
Loop iteration
iteration 11
Loop
Loop iteration
iteration 33
Loop
Loop iteration
iteration 44
Loop
Loop iteration
iteration 55
2007 Microchip Technology Incorporated. All Rights Reserved.

Iteracin 2 No es ejecutada

101 ECP

Slide 122

Lab 07
Loops

Sobre el CD
\ARG_C\Lab07\Lab07.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 123

Seccin 10
Funciones

Funciones
Estructura un programa

main()
{
...
eat();
...
drink();
...
}

2007 Microchip Technology Incorporated. All Rights Reserved.

eat()
{
...
return;
}
drink()
{
...
be_merry();
return;
}
101 ECP

be_merry()
{
...
return;
}

Slide 125

Funciones
Qu es una funcin?
Definition

Funciones son segmentos de programa autnomos


diseados para realizar una tarea especfica, bien definida.

Todos los programas en C tienen una o mas


funciones
La funcin main() es requerida
Las funciones pueden tomar valores desde el
cdigo que las llama
Las funciones retornan un valor simple
Las funciones ayudan a organizar un programa
en segmentos logicamente manejables
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 126

Funciones
Recuerda las clases de Algebra?

Las Funciones en C son conceptualmente son


similares a las funciones matemticas
Definicin de la funcin
Nombre de la
funcin

f(x) = x2 + 4x +3
Parmetro de la funcin

Si usted pasa un valor 7 a la funcin: f(7),


el valor 7 obtenido "copiado" dentro de x y
usado donde quiera que x exisista con la
funcin definida: f(7) = 72 + 4*7 + 3 = 80
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 127

Funciones
Definiciones
Sintaxis

Tipo de dato retornado


expresion

Parametro listado
(opcional)

Nombre

type identifier(type1 arg1,,typen argn)


{
declaracn de sentencias
Cuerpo
retorna expression;
}
Cabecera

Retorna Evaluacin (opcional)

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 128

Funciones
Definicin de Funciones: Ejemplos de Errores de
Sintaxis
Ejemplo

int maximum(int x, int y)


{
int z;

z = (x >= y) ? x : y;
return z;

Ejemplo una versin mas eficiente

int maximum(int
{
return ((x >=
}
2007 Microchip Technology Incorporated. All Rights Reserved.

x, int y)
y) ? x : y);
101 ECP

Slide 129

Funciones
Definiciones de funciones: Retorna tipo de datos
sintaxis

type identifier(type1 arg1,,typen argn)


{
declarations
statements
return expresion;
}

Un funcin type debe emparejar el tipo de


datos en la vuelta expression

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 130

Funciones
Definicin de Funciones: Tipo de datos retornado

Una funcin puede tener declaraciones de


retornos mltiples, pero solamente una
ser ejecutada y deben todas ser del
mismo tipo
Example

int bigger(int a, int b)


{
if (a > b)
return 1;
else
return 0;
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 131

Funciones
Definicin de Funciones: Tipo de datos retornado
El tipo de funcin es void si:
La sentencia return no tiene expression
La sentencia return no esta presente en todas
Esto a veces llama a una funcin de procedimiento
puesto que no se devuelve nada
Example

void identifier(type1 arg1,,typen argn)


{
declarations
statements
return; puede ser omitida si no
return;
se retorna nada
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 132

Funciones
Definicin de Funciones: Parmetros

Los parmetros de una funcin se declaran


apenas como variables ordinarias, pero una
coma delimita la lista dentro del parntesis
los nmbres de los parmetros slo son vlidos
dentro de la funcin (local a la funcion)
Sintaxis

type identifier(type1 arg1,,typen argn)


{
Parmetros de funciones
declarations
statements
return expression;
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 133

Funciones
Definicin de funciones: Parmetros

Lista de parmetros puede mezclar datos


int foo(int x, float y, char z)

Los parmetros del mismo tipo se deben


declarar por separado - es decir:
int maximum(int x, y) no puede trabajar
int maximum(int x, int y) es correcta
Ejemplo

int maximum(int
{
return ((x >=
}

x, int y)
y) ? x : y);

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 134

Funciones
Definicin de funciones: Parmetros

Si no se requieren parmetros , usa la


palabra clave void en lugar de la lista de
parmetro al definir la funcin

Ejemplo

type identifier(void)
{
declarations
statements
return expression;
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 135

Funciones
Como llamar o invocar una Funcion
Function Call Syntax

Sin parmetros y no retorna valor


foo();
Sin parmetros pero con retorno de valor
x = foo();
Con parmetros pero sin retorno de valor
foo(a, b);
Con parmetros y retorna un valor
x = foo(a, b);

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 136

Funciones
Funcion Prototipos
Justificada como variables, una funcin debe ser
declarada antes de que pueda ser utilizada
La declaracin debe ocurrir antes de main () o de otras
funciones que la utilicen
Declaraciones pueden tener dos formas:
La definicin de funcin entera
Justificada como funcion prototype la definicin de
funcin en s mismo se puede entonces poner
dondequiera en el programa

2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 137

Funciones
Funciones Prototipos

Funcin prototipo puede tener dos


formatos diferentes:
Una exacta copia de la funcin HEADER:
Ejemplo Funcion Prototipo 1

int maximum(int x, int y);

Como la funcin main, pero sin los nombres


de parmetro - solamente los tipos necesitan
estar presentes para cada parmetro:
Ejemplo Funcion Prototipo 2

int maximum(int, int);


2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 138

Funciones
Declaracion y Uso: Ejemplo 2
Example 2

int a = 5, b = 10, c;
int maximum(int x, int y);
int main(void)
{
c = maximum(a, b);
printf("The max is %d\n", c)
}
int maximum(int x, int y)
{
return ((x >= y) ? x : y);
}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Funcion es
declarada con
prototipo antes
de ser usada en
el main()

Funcion es
definida despues
de ser usada en el
main()
Slide 139

Funciones
Pasando Parametros por Valor

Parametros pasados a una funcin son


pasados valor por valor
Valores pasados a una funcin son
copiados dentro de los parmetros de las
variables locales
La variable original que es pasada a la
funcin no puede ser modificada por la
funcinpuesto que solamente una copia de
su valor fue pasada
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 140

Funciones
Pasaje de parmetros por Valor
Ejemplo

int a, b, c;
int foo(int x, int y)
{
x = x + (++y);
return x;
El valor
}
int
{
a
b
c
}

main(void)
=
=
=

5;
10;
foo(a, b);

2007 Microchip Technology Incorporated. All Rights Reserved.

de a es copiado en x.
El valor de b es copiado en y.
La funcin no cambia el valor
de a o b.

101 ECP

Slide 141

Funciones y Alcances
Parametros

Los parmetros de una funcin son


locales a la funcin
Los nombres de parmetro pueden tener
el mismo identificador que variable
declarado fuera de la funcin

Estas no son el mismo n.

int n;
long int factorial(int n){}
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 142

Funciones y Alcances
Declaracin de variables
Las variables declaradas dentro de un bloque de
la funcin son locales a la funcin
Example

int x, y, z;
int foo(int n)
{
int a;

El n refiere al prmetro n de la funcin


a += n;
}
el a refiere a la a declarada localmente
dentro del cuerpo de la funcin
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 143

Lab 08
Funciones

Sobre el CD
\ARG_C\Lab08\Lab08.mcw
2007 Microchip Technology Incorporated. All Rights Reserved.

101 ECP

Slide 144

Potrebbero piacerti anche