Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

57
Introducción a la Programación con C Copyright © 2005 Código de Curso: CY320

description

rrg

Transcript of Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Page 1: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Introducción a la Programación con C

Copyright © 2005

Código de Curso: CY320

Page 2: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Volumen 6

Tópicos Avanzados en C

Copyright © 2005

Page 3: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Manejo de Archivos

Copyright © 2005

Unidad 1

Page 4: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Objetivos del Aprendizaje

• Identificar diferentes áreas en la resolución de problemas que requieren leer o escribir datos en dispositivos de almacenamiento secundario.

• Aprender a manejar los archivos de datos que ofrece C.

• Discutir el método de manejar archivos secuenciales (stream oriented files) en C.

• Listar y hacer uso de diversas funciones de librería que permiten crear, leer y escribir archivos en disco.

Page 5: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Almacenar Datos en Dispositivos Secundarios

• Algunas aplicaciones requieren que los datos estén disponibles para varias ejecuciones del programa.

• Ejemplos de aplicaciones: - Datos de los empleados, requeridos por las

aplicaciones de nómina de pagos.

- Datos de las cuentas de los clientes en sistemas bancarios.

• A menos que sean explícitamente almacenados en dispositivos de almacenamiento secundario, los datos mantenidos en variables se pierde una vez que el programa termina.

Page 6: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Manejo de Archivos de Datos en C

• Los datos mantenidos en almacenamiento secundario son permanentes a menos que sean eliminados por el usuario

• Los datos se almacenan en forma de archivos de datos.

• C ofrece un conjunto grande de funciones de librería para crear y utilizar archivos de datos.

• Muchos lenguajes de programación clasifican los archivos en:

- Archivos Secuenciales.

- Archivos de Acceso Directo o Acceso Aleatorio.

Page 7: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

• C ofrece dos tipos diferentes de archivos de datos- Archivos secuenciales o archivos estándar (Stream Oriented

Data Files).

- Archivos de datos orientados al sistema o archivos de bajo nivel.

• Los archivos secuenciales son más fáciles de programar y manejar.

• Los archivos secuenciales se dividen en dos categorías:

- Archivos de texto.

- Archivos de datos sin formato.

Manejo de Archivos de Datos en C...2

Page 8: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Archivos Secuenciales

• Archivos de texto:

- Consisten de una secuencia de caracteres.

- Pueden ser un carácter, una cadena de caracteres o números.

- Varias funciones de librería están disponibles para crear, leer y escribir archivos en disco.

• Archivos de datos sin formato:

- Los datos están organizados en bloques de bytes contiguos.

- Se pueden usar para representar estructuras de datos más complejas tales como arreglos, estructuras, etc.

- Existen funciones de librerías específicas para transferir estructuras de datos completas.

Page 9: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Crear un Área de Buffer

• Se debe de crear un área de buffer para trabajar con archivos secuenciales.

• El área de buffer es el espacio en memoria que será utilizado para transferir los datos desde la memoria al dispositivo de almacenamiento secundario y viceversa.

FILE *ptr;

• FILE es un tipo de estructura especial que permite la definición de un área de buffer.

• ptr es un puntero que apunta al inicio del área de buffer, se denomina puntero a cadena (stream pointer).

• La palabra FILE se escribe en mayúsculas.

• La estructura FILE está definida en la librería stdio.h por lo que debe incluirse la librería explicitamente en el código.

Page 10: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Abrir y Cerrar Archivos

• Un archivo de datos en C debe ser abierto antes de que pueda ser procesado (incluso creado).

• Al abrir un archivo se crea una asociación entre el nombre del archivo y el área de buffer.

• Cuando se abre un archivo se especifica su uso.

• Los archivos pueden ser:- Read only (sólo para lectura).

- Write only (sólo para escritura).

- Read/write (lectura y escritura).

Page 11: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Existe una función de librería para abrir archivos:

ptr = fopen(file-name, file-type);

Donde:

file-name: Debe seguir las reglas para crear nombres de archivos en los sistemas operativos específicos.

file-type: Cadena de caracteres que especifica cómo puede ser usado el archivo.

Abrir y Cerrar Archivos...2

Page 12: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Especificaciones de Tipo de Archivo

Tipo de Archivo

Significado

“r” Abrir un archivo existente, en modo de sólo lectura

“w” Abrir un nuevo archivo sólo para escritura. Si el archivo existe, se borra y se crea un nuevo archivo

“a” Abrir un archivo existente para agregar contenido al final. Si el archivo no existe, un nuevo archivo es creado

“r+” Abrir un archivo existente para lectura y escritura

“w+” Abrir un nuevo archivo para lectura y escritura. Si el archivo existe, se borra y se crea un nuevo archivo

“a+” Abrir un archivo existente para leer y agregar al final. Si el archivo no existe, un nuevo archivo es creado

Page 13: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Más acerca de Abrir y Cerrar Archivos• La función fopen retorna un puntero al inicio de la ubicación de

área de buffer asociada con el archivo.

• Si el archivo no puede ser abierto, retorna un valor NULL (cero).

• Un archivo no podrá abrirse si el archivo no puede ser encontrado, o si se produce una falla al intentar abrirlo porque el archivo está dañado.

• Al final de cada programa un archivo abierto debe ser cerrado.

• Una función de librería llamada fclose permite hacer esto:

fclose(buffer_pointer);

• Se recomienda cerrar explícitamente todos los archivos de datos al final del programa, aunque la mayoría de compiladores en C los cierran automáticamente.

• Considerar la previa declaración de: File * buffer_pointer;

Page 14: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Abrir un Archivo

#include <stdio.h>main(){

…FILE *buff_ptr;buff_ptr =

fopen(“misDatos.dat”,”r”);……fclose(buff_ptr);……

}

Page 15: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

#include <stdio.h>#define NULL 0main(){

FILE *buff_ptr;buff_ptr = fopen(“misDatos.dat”,”r+”);if(buff_ptr == NULL)

printf(“Error al abrir archivo\n”);else{

………fclose(buff_ptr);

}}

Chequeo por Condición de fopen()no Exitoso

Page 16: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Chequeo por Condición de fopen()no Exitoso...2

#include <stdio.h>#define NULL 0main(){

FILE *buff_ptr;

if((buff_ptr = fopen(“misDatos.dat”,”r+”)) == NULL) printf(“Error al abrir archivo\n”);

else{ … … … fclose(buff_ptr);

}}

Page 17: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Crear Archivos de Datos

• Los archivos de datos deben ser creados antes de usarlos.

• Los archivos secuenciales se crean:

- Directamente el archivo utilizando un editor de texto o procesador de palabras.

- Indirectamente a través de un programa.

• Para crear un archivo a través de un programa se pueden leer los datos del usuario desde el teclado y escribirlos en el archivo de datos.

• Se usan funciones de librerías:- getchar- putc

Page 18: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Leer y Mostrar Archivo de Texto... Ejemplo 1#include <stdio.h>main(){

FILE *myText; /* Área de buffer */char ch;

/* Abrir el archivo */myText = fopen("myStory.dat","r");if(myText == NULL)

printf("Error al abrir el archivo\n");else{

ch = getc(myText);while(ch != EOF){

putchar(ch);ch = getc(myText);

}}fclose(myText);

}

Page 19: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Escribir en un Archivo de Datosmain(){

FILE *myText; int ch;

myText = fopen("myStory.dat","w");

if(myText == NULL) printf("Error\n");

else{

printf("Ingrese un texto a ser \

almacenado dentro del archivo\n");

ch = getchar();

while( ch != '\n' ){

ch = toupper(ch);

putc(ch, myText);

ch = getchar();

}

fclose(myText);

}

}

Page 20: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Funciones para Leer y Escribir en Archivos

• Para leer y escribir caracteres:- getc- putc

• Para leer y escribir cadenas de caracteres:- gets- puts- fgets- fputs

• Para leer y escribir estructuras complejas:- fscanf- fprintf

Page 21: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

• Cuando se escribe un un archivo se puede:- Agregar registros - Eliminar registros - Modificar registros - Reordenar los registros

• Un método para hacer esto es:- Tener dos archivos, uno para entrada y el otro para salida.

- Leer los registros del archivo de entrada, hacer el procesamiento y escribir los registros en el archivo de salida.

- Cuando se termina, borrar el archivo de datos de entrada y reemplazarlo con el nuevo archivo actualizado.

• Otro método es:- Leer un registro del archivo.

- Procesarlo y escribir de vuelta al mismo archivo reemplazando el registro.

Procesar un Archivo de Datos

Page 22: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Modo Texto vs Modo Binario

• Los archivos de datos se clasifican de acuerdo a como se abren para su uso en:

- Archivos de texto

- Archivos binarios.

• Los archivos de texto y binarios difieren en tres áreas:

- Como se manejan los caracteres de cambio de línea.

- El manejo de la condición de fin de archivo.

- Como se almacenan números.

Page 23: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Manejo de Caracteres de Cambio de Línea

• En el modo texto, el carácter de cambio de línea se convierte en “retorno de carro y nueva línea” y luego se escribe en el disco

• Cuando se realiza una lectura del disco, el “retorno de carro y nueva línea” se convierte en un carácter de cambio de línea.

• Cuando el archivo se abre en modo binario, no ocurren estas conversiones.

• Para abrir un archivo en modo binario:

fptr = fopen(“miArchivo.dat”,”rb”);

• Se usa “b” para indicar que el archivo se abra en modo binario.

• Se especifica “t” para indicar que el archivo se abra en modo texto. Éste es el valor por defecto si se omite.

Page 24: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Manejo de Fin de Archivo• Para indicar el fin de archivo en modo texto se inserta

como último carácter el valor ASCII de 26.

• Cuando se encuentra el valor ASCII de 26 en el archivo, la función de lectura retorna EOF (fin de archivo) al programa que efectuó la llamada.

• En archivos en modo binario, no existe un carácter especial que indique el fin de archivo.

• Para archivos binarios, el fin de archivo se deduce del número de caracteres presentes en la entrada de directorio del archivo.

• Si se almacenan los números en modo binario, se deben leer también en modo binario.

Page 25: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Manejo de Almacenamiento de Números

Función fprintf

• Los caracteres se almacenan en un 1 byte en memoria.

• Los números se almacenan como cadenas de caracteres.

• La función fprintf no almacena números ya que se requieren 2 bytes en el caso de int y 4 bytes en el caso de float.

• Los números se almacenan como cadenas de caracteres

• El número 5643 se almacena en 4 bytes.

• El número punto flotante 25.625 se almacena en 6 bytes.

• Cuando se utilizan archivos de texto para almacenar números grandes es bastante ineficiente por el espacio que ocupa.

• Una alternativa es abrir el archivo en modo binario y utilizar las funciones fread y fwrite.

Page 26: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Archivos sin Formato

• Algunas aplicaciones requieren el uso de archivos de datos que almacenen bloques de datos y cada bloque consiste de un número fijo de bytes almacenados en forma contigua.

• Los bloques de datos pueden representar estructuras complejas de datos (estructuras de C o arreglos).

• Se debe tener la posibilidad de leer o escribir bloques completos de datos, en lugar de manejar los elementos individuales de las estructuras complejas.

• Se utilizan las funciones de librería de C fread y fwrite son funciones de lectura/escritura sin formato.

• Los archivos son denominan archivos de datos sin formato.

Page 27: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

fwrite y fread

• Las funciones fread y fwrite requieren cuatro argumentos.• Un puntero al bloque de datos.• El tamaño del bloque de datos.• El número de bloques de datos a ser manejados en la

transferencia.• Un puntero cadena (stream pointer).

• Ejemplo de uso de fwrite

fwrite(&stud, sizeof(marks_list), 1, mark_ptr);

donde:stud: la variable estructura de tipo marks_list,

mark_ptr:el puntero asociado con el archivo

1: indica el número de bloques a ser transferidos.

Page 28: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Uso de Archivos sin Formato...Ejemplo 1

1 #include <stdio.h>2 #define SIZE 23 /* Estructura */4 typedef struct{5 char idno[9];6 char nombre[45];7 /* Notas de los 6 cursos */8 float notas[6];9 }LISTA_NOTAS; 10 /* Función para obtener datos del usuario y

almacenarlo en un archivo */11 void almacenarDatos(){12 FILE *in_mark_ptr;13 LISTA_NOTAS in_stud[SIZE]; 14 int j,k;15 /* Abrir archivo modo escritura */16 in_mark_ptr = fopen("history.dat","wb"); 17 k = 0;

Page 29: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Uso de Archivos sin Formato... Ejemplo 1

18 /* Leer datos de los estudiantes */19 while(k < SIZE){20 printf("Introduzca IDNO");21 scanf("%s",in_stud[k].idno);22 fflush(stdin);printf("Ingrese el Nombre\n");23 scanf("%s",in_stud[k].nombre);24 printf("Ingresar las notas de 6 cursos \n");25 for(j = 0; j < 6; j++){26 do{27 printf("Notas de los Cursos No: %d[0-100]\n",j+1);28 scanf("%f", &in_stud[k].notas[j]);29 }while((in_stud[k].notas[j]<0)||(in_stud[k].notas[j]>100));30 } 31 k++;32 }33 for(k = 0; k < SIZE; k++) 34 fwrite(&in_stud[k], sizeof(LISTA_NOTAS),1,in_mark_ptr);35 /* Cerrar archivo */36 fclose(in_mark_ptr);37}

Page 30: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Uso de Archivos sin Formato... Ejemplo 1

38 /* Leer los datos del archivo e imprimirlos */39 void recuperarDatos(){40 FILE *out_mark_ptr; LISTA_NOTAS out_stud[SIZE];41 int j,k;42 /* Abrir archivo modo lectura */43 out_mark_ptr = fopen("history.dat","rb");

44 /* Leer datos de los estudiante del archivo */45 k = 0;46 while (k < SIZE){47 fread(&out_stud[k], sizeof(LISTA_NOTAS), 1, out_mark_ptr);48 k++;49 }50 /* Cerrar archivo */51 fclose(out_mark_ptr);52 for(k = 0; k < SIZE; k++){53 printf("\n%s:%s\n",out_stud[k].idno,out_stud[k].nombre);54 printf("Notas en los Cursos:\n");55 for(j = 0; j < 6; j++)56 printf("%6.2f\n", out_stud[k].notas[j]);57 }58 }

Page 31: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Resumen

• Se identificaron diferentes áreas en la resolución de problemas que requieren leer o escribir datos en dispositivos de almacenamiento secundario.

• Se aprendió a manejar los archivos de datos que ofrece C.

• Se discutió el método de manejar archivos secuenciales (stream oriented files) en C.

• Se presentaron y usaron diversas funciones de librería que permiten crear, leer y escribir archivos en disco.

Page 32: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Unidad 2

Laboratorio de Manejo de Archivos

Page 33: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Unidad 3

Características

Adicionales en C

Page 34: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Objetivos del Aprendizaje

• Aprender a declarar y utilizar enumeraciones en C.

• Aprender a manejar argumentos de línea de comandos para la función main().

• Establecer qué son la directivas del procesador y utilizarlas en los programas.

Page 35: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Enumeración

• Una enumeración es un tipo de dato de C similar a una estructura o a una unión.

• La enumeración contiene miembros que se escriben como identificadores, pero son las constantes del tipo enumeración.

• Cada una de las constantes enumeración tiene un valor entero con signo asociado.

• A las variables del tipo enumeración declaradas en el programa se les puede asignar estos valores constantes.

Page 36: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Declarar Variables Enumeración

• Definición de una enumeración: enum enum-name {member1, member2, …, membern};donde:enum: Palabra clave obligatoria. enum-name: Nombre opcional que identifica a la enumeración. member1, etc.: son las constantes de la enumeración.

• Declaración de las variables del tipo enumeración:

clase-almacen enum enum-name var1, var2, …, varn;

• La definición y declaración de la enumeración pueden combinarse:

clase-almacen enum enum-name {member1, member2, …, membern

}var1, var2, …, varn;

Page 37: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Ejemplo de Enumeración color• Se va a definir un tipo de dato para almacenar los colores del

espectro.enum color {violeta, rojo, azul};enum color libro, cuaderno,

gorra ,camisa;

• La enumeración tiene 3 constantes, las cuales son: violeta, rojo, azul.

• Se han definido libro, cuaderno, gorra ,camisa como variables de tipo color.

• Combinando las dos anteriores se obtiene un equivalenteenum color {violeta, rojo, azul} libro, cuaderno, gorra ,camisa;

oenum {violeta, rojo, azul} libro, cuaderno, gorra ,camisa;

En todos los casos, violeta tiene asignado 0, rojo 1 y azul 2.

Page 38: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Propiedades de la Enumeración• La asignación automática de valores enteros a constantes

enumeración puede ser sobreescrita por el usuario.

• Como en una sentencia de asignación, se puede escribir member = int en la definición/declaración de la enumeración:

enum color {violeta = 3, rojo, azul}

• Asigna 3 a violeta, 4 a rojo y 5 a azul.

• Es posible para dos constantes enumeración tener el mismo valor entero asignado.

• Las variables enumeración pueden ser usadas casi de la misma manera que las variables enteras, en términos de operaciones sobre ellas, sentencias de asignación, etc.

Page 39: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

¿Por qué Utilizar Enumeración?

• Incrementa la claridad lógica del programa.

• Números utilizados directamente en el programa tienden a reducir la facilidad de lectura y mantenimiento del programa.

• Las variables enumeración y sus valores ayudan a introducir lo que bajo un dominio de aplicación particular resulta lógico y normal.

• La enumeración no provee una capacidad nueva sólo mejora la claridad del código.

Page 40: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Argumentos de Línea de Comando del main()

• Usar argumentos de línea de comando permite que información necesaria para un cierto programa sea pasada su main desde el sistema operativo.

• Casi todas las versiones de C permiten pasar dos argumentos especiales:

argc: es una variable entera.argv: es un arreglo de punteros a caracteres o un arreglo strings.

• Cada string en el arreglo representa un parámetro pasado a la función main.

• Usualmente, argc indica el número de parámetros pasados por el main.

Page 41: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Definiendo argc y argv • Se puede definir argc y argv dentro de main como sigue

main(int argc, char *argv[]){…

}• También se puede definir como:

main(int argc, char **argv){…

}• Se puede ejecutar un programa C desde el menú de un

compilador (como en Windows) o desde el nivel de sistema operativo en la forma de un comando (como en Unix)

• Por ejemplo, en Unix, se escribe lo siguiente para ejecutar el programa myProg en C:

myProg colgate anchor

donde argc: es igual a 2 argv: contiene dos cadenas de caracteress: “colgate” y “anchor”

Page 42: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

• Se puede pasar argumentos a un programa a través de la línea de comandos:

myProg colgate anchor

• En general se hace de la siguiente forma:

nombre-programa param1 param2 … paramn

• El nombre del programa se guarda en argv[0].

• Los otros parámetros se almacenan en argv[1] y argv[2].

• En general, si n parámetros se pasan a través de la línea de comandos, entonces argv[0] hasta argv[n] tendrán valores.

• argc se actualiza automáticamente a n.

Argumentos de Línea de Comando de main()

Page 43: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Ejemplo de Uso de argc y argv#include <stdio.h>#define NULL 0main(int argc, char *argv[]){

FILE *in_file, *out_file; in_file = fopen(argv[1], “r”);if(in_file == NULL)

printf(“Error al abrir archivo \n”);else{

out_file = fopen(argv[2], “w”);if(out_file == NULL)

printf(“Error abriendo archivo \n”);else{

…/* Copiar archivo de entrada al de salida */

}}

}

Page 44: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Directivas del Preprocesador• El pre-procesamiento es el paso que precede a la

compilación.

• C proporciona directivas denominadas directivas del compilador o del pre-procesador.

• Las directivas del compilador pueden controlar el código objeto producido. Dentro de estas directivas tenemos tres grupos.

• La siguiente es una lista de algunas directivas no agrupadas:

#define #undef  #if  #elif   #else   #endif   #ifdef   #ifndef   #line   #include

Page 45: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Macros• El lenguaje C provee una forma de manejar segmentos

de código simples usando las macros.

• Las macros permiten definir una expresión o un grupo de expresiones como un solo identificador.

• Cuando se referencia a la macro en el programa se reemplaza la referencia por la definición completa de la macro.

• Las macros proveen una mejor velocidad de ejecución en comparación con las funciones.

• El costo adicional de las llamadas a una función con respecto al manejo de la pila, la llamada y el retorno no están presentes en las macros.

• Las macros incrementan el tamaño del código objeto.

Page 46: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Uso de Macro...Ejemplo 1

Calcular el Área de un Círculo

#include <stdio.h>#define area_del_circulo 3.141 * radio * radiomain(){ float radio; do{

printf("Ingresar el radio [0-32767]:"); scanf("%f", &radio);

}while(radio < 0 || radio > 32767);printf("El area del circulo es = %f\n", \area_del_circulo);

}

Page 47: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Uso de Macro...Ejemplo 2

Macros en Múltiples Líneas

#include <stdio.h>#define MCD while (x != 0 && y != 0) \if (x >= y) x = x % y; \

else y = y % x; \if (x == 0) respuesta = y; \

else respuesta = x; 

Page 48: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Macros en Múltiples Líneas

main(){ int x, y, respuesta,a,b;/* Entrada x e y */ do{

printf("Ingresar un entero[1-32767]: "); scanf("%d",&x);}while(x<1 || x>32767);

do{ printf("\n Ingresar otro entero:"); scanf("%d",&y);

}while(y<1 || y>32767);

a=x; b=y; MCD /* Referencia de macro */ printf("MCD de %d y %d es %d : ", a,b,respuesta);}

Uso de Macro...Ejemplo 2

Page 49: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Instrucciones Condicionales en Macros

• Instrucción #ifdef - #endif :

- #ifdef significa 'si definido' (if defined).

- #ifdef hace que un bloque de código se procese si el nombre de la macro está definido.

• Formato general de #ifdef y #endif:

#ifdef nombre_de_la_macro

/* Secuencia de sentencias */

#endif

Page 50: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Instrucciones Condicional en Macros...2•#ifndef - #endif :

- #ifndef: significa ‘si no definido’ (if not defined).

- #else: Similar al else en la estructura de control if-else en C.

• Formato de la instrucción:

#ifndef ERROR /* ERROR es el nombre de la macro */

/* Código para una salida */#else /* Código para mensaje de error */#endif

Page 51: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

• #if: Se usa para probar si el valor de una expresión es distinto de cero o no.

El formato es: #if exp

/* sentencias(s) */#endif

• #elif: Se usa para verificar múltiples condiciones en secuencia .

El formato es:

#if exp1 /* sentencia(s)*/#elif exp2 /* sentecias(s)*/#endif

Instrucciones Condicional en Macros...3

Page 52: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Operadores del Preprocesador

•defined: Permite determinar si la macro ya ha sido previamente definida en el programa fuente. Si no ha sido definida la macro se usa la instrucción #define definirla.

• Ejemplo:

#if !defined(MCD)#define MCD while (x != 0 && y != 0) \

if (x >= y) x = x % y; \else y = y % x; \if (x == 0) respuesta = y; \else respuesta = x;

#endif

Page 53: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Operaciones de Manejo de Bits• La manipulación de bits es una de las características del

lenguaje C.

• Permite al programador manipular los bits directamente.

• Pueden ser aplicados sólo a operandos enteros: char e int con signo y sin signo.

• Las operaciones de manejo de bits son:

- Operaciones lógicas de manejo de bits:& AND de manejo de bits. | OR inclusivo de manejo de bits. ^ OR exclusivo de manejo de bits.

- Operaciones de desplazamiento de manejo de bits:<< Desplazamiento a la izquierda. >> Desplazamiento a la derecha .

- Operador de complemento de manejo de bits:~ Complemento a uno (unario).

Page 54: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Operaciones de Manejo de Bits...2

• Ejemplo de manejo de bits con operadores relacionales:

Sea a = 37 = 0000 0000 0010 0101

b = 86 = 0000 0000 0101 0110

• El operador AND (&) se usa para enmascarar un conjunto de bits

a & b = 04 = 0000 0000 0000 0100

• El operador OR (|) se usa para encender bits

a | b = 119 = 0000 0000 0111 0111

• El operador OR exclusivo (^) fija a 1 cada posición de bits donde los operandos tengan diferentes bits y 0 donde sean iguales

a ^ b = 115 = 0000 0000 0111 0011

Page 55: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

• El operador de desplazamiento << mueven los bits del operando izquierdo hacia la izquierda el número de posiciones dado por el operando de la derecha.

• El operador de desplazamiento >> mueven los bits del operando izquierdo hacia derecha el número de posiciones dado por el operando de la derecha.

• Ejemplo:x << 2 desplaza los bits en x 2 posiciones a la izquierda y asigna 0 a los bits que han sido desplazados.x >> 2 desplaza los bits en x, 2 posiciones a la derecha y asigna 0 a los bits que han sido desplazados.

a = 0010 0110 1011 0111a << 3 = 0011 0101 1011 1000a >> 2 = 0000 1001 1010 1101

• El operador unario (~) convierte cada bit 1 en 0 y cada bit 0 en 1 a = 0010 1011 0101 0111~a = 1101 0100 1010 1000

Operaciones de Manejo de Bits...3

Page 56: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Resumen

• Se aprendió a declarar y utilizar enumeraciones en C.

• Se explicaron los métodos para manejar argumentos de línea de comandos para la función main().

• Se estudiaron las directivas del procesador y su uso en los programas.

Page 57: Intro to Programming Using C Master Visuals Vol 6 V3 (Espa+¦ol)

Copyright © 2005

Unidad 4

Laboratorio

Características Adicionales

de C