Informática Ingeniería en Electrónica y Automática Industrial

Documentos relacionados
Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Elementos de un programa en C

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Apuntadores (Punteros)

Las plantillas permiten definir funciones genéricas.

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Principios de Computadoras II

Programación estructurada (Introducción a lenguaje C)

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Apuntadores en C y C++

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

Funciones como Subprogramas en C++

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

2.2 Nombres, Ligado y Ámbito

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

Introducción a C++ y Code::Blocks

5. Sentencias selectivas o condicionales

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

El lenguaje de Programación C. Fernando J. Pereda

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Tema 2. El lenguaje JAVA

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Principios de Computadoras II

Introducción a Lenguaje C. Jornadas de Octubre 2009 Grupo de Usuarios de Linux Universidad Carlos III Tania Pérez

Operadores y Expresiones

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Lenguaje C [Apuntadores y arreglos]

PROGRAMACION ORIENTADA A OBJETOS EN C++

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

GUÍA DE ESTILO EN JAVA

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Java para no Programadores

Introducción al lenguaje C

Uso avanzado de punteros

Tema 6. Gestión dinámica de memoria

El lenguaje C. 1. Identificadores, constantes y variables

Java para programadores

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

Curso de Programación Avanzada en C

Procesadores de lenguaje Tema 6 La tabla de símbolos

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Definición y Conversión de datos. Agustín J. González ELO-329

LENGUAJE. Tema 2 Elementos de un programa

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

OPERADORES Y EXPRESIONES

media = ( temp0 + temp1 + temp2 + temp3 + temp temp23 ) / 24; printf( "\nla temperatura media es %f\n", media );

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Fundamentos de programación

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Por ejemplo, para declarar un arreglo de enteros llamado a con diez elementos se hace de la siguiente forma:

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Sistemas Operativos Practica 1: procesos y concurrencia.

Se guardan en archivos con extencion c y los cabezales con extension h

Guía práctica de estudio 05: Diagramas de flujo

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Reglas básicas de la programación en lenguaje C

4. Operadores Operador asignación

Programación Estructurada

Algoritmos y Programación I

SOLUCION EXAMEN junio 2006

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

Computación II. Introducción a Visual Basic

Procesos e Hilos en C

INTRODUCCIÓN AL LENGUAJE C++

Generador de analizadores léxicos FLEX

Contenido. Capítulo 1. Introducción a lenguaje C 1

TEMA 4. ESTRUCTURAS DE CONTROL

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Funciones. Parámetros por valor

Instituto Tecnológico de Celaya

Estatutos de Control C# Estatutos de Decisión (Selección)

Expresiones y sentencias

GL-PCS2201-L05M FUNCIONES Y LA ESTRUCTURA DEL PROGRAMA EN LENGUAJE C

1 Estructura básica de un programa C++

Elementos léxicos del lenguaje de programación C

Guía práctica de estudio 11: Funciones

El lenguaje C. if (a>3) { printf("hola"); // bloque printf("%d",a); // de getch(); //código } Partes de un programa en C.

Esquema de un programa en C: bloques básicos

PLAN DE MATERIAS ACADEMUSOFT 3.2

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Tabla de Símbolos. Programación II Margarita Álvarez

Introducción al Lenguaje de Programación C

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Ficha de Aprendizaje N 13

Transcripción:

Informática Ingeniería en Electrónica y Automática Industrial Funciones en lenguaje C Funciones en lenguaje C Definición de funciones Declaración de funciones Relación entre variables y funciones Parámetros formales Argumentos Llamadas a funciones Salida de una función Argumentos de la función main() Funciones recursivas Punteros a funciones Declaraciones complejas 2 1

Introducción (I) Las funciones son los bloques de sentencias que constituyen los programas en lenguaje C. En ellas se desarrolla toda la actividad de los programas Cada función constituye un bloque de código y datos discreto, privado, independiente e indivisible. Una función sólo tiene acceso a las variables globales y a sus propias variables Desde el exterior, a una función sólo se puede acceder por su entrada Es el equivalente de las subrutinas o los procedimientos en otros lenguajes de programación 3 Introducción (II) Todos los programas en lenguaje C constan, al menos, de una función: la función main() El programa comienza su ejecución por el comienzo de la función main, independientemente de dónde se localice en el archivo fuente Para aumentar la portabilidad de los programas, las funciones deben Ser genéricas Recibir la información a través de sus parámetros No utilizar variables globales 4 2

Introducción (III) Ejemplo: Programa que lee un conjunto de números y obtiene el máximo, el mínimo y la media aritmética: #include <stdio.h> #define N 10 main() { int max, min, med, listnum[n]; Leedatos(listnum, N); max = Maximo(listnum, N); min = Minimo(listnum, N); med = Media(listnum, N); printf( Máximo: %d, Mínimo: %d, Media: %d, max, min, med); return 0; } 5 Definición de funciones (I) Ventajas de la utilización de funciones El código se agrupa y se organiza en compartimentos estancos Los datos quedan aislados Es más fácil la localización de errores Es posible probar partes del código (funciones) Se ahorra trabajo: Las funciones bien diseñadas pueden ser útiles en diferentes aplicaciones Desventajas El código fuente puede parecer más largo En ejecución, la llamada y el retorno de una función requiere un tiempo adicional 6 3

Definición de funciones (II) La definición de una función, según el estándar ANSI, incluye la cabecera y el cuerpo de la función tipodev nombrefuncion(lista de parámetros) {/* Cuerpo de la función */ Declaraciones de datos Código ejecutable (sentencias); Expresiones opcionales de retorno; } tipodev indica el tipo de dato válido que la función devuelve al punto de llamada (por omisión es int) nombrefuncion es el identificador o nombre de la función 7 Definición de funciones (III) La lista de parámetros representa una relación (opcional) de identificadores de variables precedidas por el tipo de dato y separadas por comas, denominadas parámetros formales Operan como variables locales dentro de la función Recogen los datos que se le pasan a la función La lista de parámetros tiene el siguiente formato: tipo1 iden1, tipo2 ident2, tipon identn tipox representa cualquier tipo de dato válido identx representa a los identificadores de las variables 8 4

Definición de funciones (IV) Ejemplo: Definición de una función que recibe una lista de números y devuelve el mayor int Maximo(int lista[], int numdat) { int i, maximo; maximo = lista[0]; for (i=0 ; i<numdat ; i++) if (maximo<lista[i]) maximo=lista[i]; return maximo; } 9 Declaración de funciones (I) La declaración o prototipo de una función describe la función Declarar una función consiste en escribir una sentencia de código que indica Tipo de dato que devuelve Identificador Parámetros que puede recibir Formato: tipdev nombrefunc (listaparámetros); 10 5

Declaración de funciones (II) tipodev representa el tipo de dato que la función devuelve Si no devuelve nada, el tipodev es void nombrefunc es el identificador asignado a la función listaparámetros es la declaración de cada uno de los parámetros formales de la función precedido por su tipo de dato Van separados por comas El identificador es opcional. Es aconsejable porque facilita la verificación y localización de errores Si se trata de una función que no recibe argumentos, no tendrá parámetros y se declarará expresamente de tipo void 11 Declaración de funciones (III) Los prototipos de las funciones utilizadas en un programa Se deben colocar antes de la primera llamada a la función Se aconseja ponerlos al comienzo del programa, precediendo a la función main. Sirven para avisar al compilador de la presencia de la función y de sus características (identificador, tipo devuelto, parámetros que recibe) Impiden los errores en el envío de datos en las llamadas a funciones Por los tipos de datos Por el número de parámetros Si no se declara el prototipo de una función, en las llamadas a la misma se promociona, por omisión, de char a int y de float a double. Si existe prototipo, se respetan los tipos. 12 6

Declaración de funciones (IV) Es posible declarar funciones con un número indeterminado de parámetros, lo cual se indica mediante tres puntos (puntos suspensivos «...») en la lista de parámetros declarados. Para ello debe haber, al menos, un parámetro definido antes de los puntos suspensivos. Ejemplo: Declaraciones válidas de la función que recibe una lista de números y devuelve el mayor de todos ellos: int Maximo(); int Maximo(int [], int); int Maximo(int [],...); int Maximo(int lista[], int numdat); /* Es recomendable la utilización de la última */ 13 Relación entre variables y funciones (I) Variables locales a una función Se declaran en la propia función (opcionalmente con el modificador auto) Son desconocidas fuera de la función. Sólo existen mientras se estén ejecutando instrucciones de la función Se guardan en una zona de memoria temporal (la pila o stack) No conservan su valor entre llamadas a la función, salvo si se declaran expresamente como static 14 7

Relación entre variables y funciones (II) Parámetros formales de una función Son variables locales a la función que, además, reciben los argumentos que se envían a la función en cada llamada. Se declaran en la definición de la propia función Tienen las mismas características que las variables locales Sus tipos deben coincidir con los tipos de los datos que se envían a la función cuando esta es llamada Son argumentos de una función los valores que inicializan los parámetros formales en la llamada a la función (Son los valores que se pasan a la función en su llamada) 15 Relación entre variables y funciones (III) Variables globales al programa Son las variables que se declaran fuera de todas las funciones Se recomienda que se declaren justo antes de la función main (deben declararse antes de su utilización) Son accesibles desde cualquier punto del programa a partir del punto de declaración Se almacenan en una memoria que pertenece al programa durante todo el tiempo que dure su ejecución Inicialmente toman valores nulos Inconvenientes: Las funciones que las usan son menos portátiles y genéricas Pueden alterarse desde cualquier punto del programa, lo que puede dar lugar a interferencias Suponen una ocupación permanente de memoria y un mayor tamaño de los programas 16 8

Llamadas a funciones (I) Una llamada a una función se realiza escribiendo en el código fuente el nombre de la función, incluyendo entre paréntesis los argumentos necesarios Los argumentos se pueden pasar a la función de dos modos Por valor Los argumentos se copian en los correspondientes parámetros formales Los cambios que se realicen dentro de la función no afectarán a las variables usadas en la llamada (Si a una función se le pasa el valor contenido en una variable, la función no podrá alterar el contenido de esa variable) Por referencia Los argumentos que se pasan a la función son direcciones de variables (punteros) En la función podrán cambiarse los valores contenidos en las variables apuntadas por los argumentos (Si a una función se la pasa la localización en memoria de una variable, la función podrá alterar el contenido de esa memoria y, por lo tanto, el contenido de la variable) 17 Llamadas a funciones (II) Ejemplo: La función Maximo() de prototipo int Maximo(int lista[], int numdat) Recibe En lista, la dirección de un vector de números enteros En numdat el número de datos en el vector Devuelve un número entero: el mayor del vector Tras la llamada max=maximo(array, ndatos); No habrá cambiado en valor de ndatos No habrá cambiado el valor de array Podría haber cambiado el valor de los elementos apuntados por array (array[0], array[1],...) Cambiará el valor de la variable max 18 9

Llamadas a funciones (III) Se dice que una función recibe un vector cuando recibe la dirección del vector (un puntero al vector) No recibe una copia de todos los elementos del vector, sólo una copia de la dirección Podrá manipular sin restricciones todos los elementos Deberá conocer las dimensiones del vector Si se trata de un vector unidimensional, deberá conocer los límites del vector Si es una cadena, por el carácter nulo Mediante una variable que contenga el número de elementos Si se trata de un vector multidimensional Deberá conocer el número total de elementos o deberá conocer las dimensiones Podrá omitirse el tamaño de la primera dimensión si conoce el número total de elementos 19 Llamadas a funciones (IV) Las estructuras y uniones pueden pasarse a las funciones como cualquier otro tipo de dato y de variable: Cuando se pasan por valor, se pasa una copia Si se trata de estructuras grandes y complejas, ralentiza los programas y aumenta el tamaño de la memoria necesaria Cuando se pasan por referencia Al pasar sólo la dirección, la llamada a la función es un proceso rápido La función puede alterar los valores contenidos en la variable original 20 10

Salida de una función (I) La sentencia return permite salir de una función y regresar al punto en el que fue llamada return expresion; expresion representa el valor que devolverá al punto en el que fue llamada Debe corresponder en tipo con el tipo devuelto por la función Si la función es de tipo void, no debe existir Puede aparecer en cualquier punto y más de una vez La llave de cierre «}» de la función es también el punto de finalización de la función y retorno al lugar de la llamada Por omisión en su definición, el tipo de vuelto por una función es int. Para que una función devuelva otro tipo debe indicarse expresamente en la definición y en el prototipo 21 Salida de una función (II) La función exit() fuerza la finalización del programa, Independientemente del punto de ejecución en el que se encuentre Devuelve el control al sistema operativo Está definida en el archivo stdlib.h 22 11

Argumentos de la función main()(i) La función main() puede recibir argumentos y devolver un valor Puede intercambiar información con el sistema operativo Recibe argumentos de la línea de órdenes Devuelve un valor al sistema operativo Prototipo int main(int argc, char *argv[]); int indica que devuelve un entero (por defecto) 23 Argumentos de la función main()(ii) argc y argv[] son los parámetros opcionales definidos por el estándar ANSI para recibir los argumentos Esos nombres son los utilizados normalmente, pero pueden utilizarse otros argc es un entero que indica el número de argumentos presentes en la línea de órdenes, considerando al nombre del programa como primer argumento argv es el identificador de un vector de punteros a carácter (vector y de punteros a cadenas) Cada elemento de ese vector apunta a uno de los argumentos de la línea de órdenes (argv[0] apunta al nombre del programa, argv[1] al siguiente,...) El separador de argumentos en la línea de órdenes es el espacio (salvo si están entre dobles comillas) 24 12

Argumentos de la función main()(iii) A la función main() le llegan tantas cadenas de caracteres como conjuntos de caracteres separados por espacios haya en la línea de órdenes Ejemplo: Si se teclea el comando cp fuese un programa escrito en lenguaje C, al escribir en la línea de comandos cp a archivo_origen archivo_destino en la función main()del programa tendríamos: argc=4 argv[0]= cp argv[1]= -a: argv[2]= archivo_origen argv[3]= archivo_destino 25 Funciones recursivas (I) Se llama recursividad a la posibilidad de que una función pueda llamarse a sí misma Las funciones recursivas suelen llevar alguna instrucción condicional que las finalice Los niveles de recursividad deben limitarse expresamente o estar limitados por definición en el algoritmo, a un número finito y pequeño Cuando una función se llama a sí misma La ejecución previa queda en suspenso Todos los parámetros de la ejecución previa se almacenan en memoria Debe producirse un retorno sucesivo Al programar funciones recursivas debe tenerse presente que Las variables auto y register se inicializan en cada llamada Las variables static sólo se inicializan la primera vez que se ejecuta la función 26 13

Funciones recursivas (II) Ventajas de las funciones recursivas Pueden crear, a veces, versiones más claras y sencillas de algunos algoritmos Se adaptan mejor a la forma de pensar de algunos programadores en determinadas situaciones Desventajas de las funciones recursivas Aumentan la memoria utilizada Con frecuencia el programa resultante es más lento Suelen resultar difíciles de entender 27 Funciones recursivas (III) Ejemplo: programa que muestra los números naturales hasta el número introducido por teclado (I) #include <stdio.h> void Presenta (int num); /* Prototipo de la función */ main() { int n; printf("introduce el número: "); scanf("%d", &n); } fflush(stdin); Presenta(n); return 0; /* Llamada a función con el número introducido */ 28 14

Funciones recursivas (IV) Ejemplo: programa que muestra los números naturales hasta el número introducido por teclado (II) void Presenta(int num) /* Función recursiva */ { if (num==1) printf ("%d\t", num); /* Si num == 1 se imprime y termina */ else { Presenta(num-1); /* Si num!=1 decrementa num y se llama a sí misma */ printf("%d\t", num); } } /* Al volver de las llamadas se imprimen los números */ 29 Declaraciones complejas (I) La combinación de El operador puntero a «*» Los corchetes indicadores de vector «[]» Los paréntesis «()» que agrupan operaciones o nos indicadores de función dan lugar a declaraciones complejas y difíciles de descifrar Para interpretar correctamente las declaraciones 1. Se debe comenzar con el identificador, mirando a su derecha Los paréntesis indicarán que es una función Los corchetes indicarán que es un vector 2. Mirar si a la izquierda hay un asterisco lo que indicará que es un puntero 3. Aplicar las reglas anteriores a cada nivel de paréntesis y de dentro hacia fuera 30 15

Declaraciones complejas (II) Ejemplos int (*lista)[20]; /* lista es puntero a un vector de 20 enteros */ char *datos[20]; /* datos es un vector de 20 void (*busc)(); punteros a carácter */ /* busc es un puntero a una función que no devuelve nada*/ char (*(*Fun())[])(); /* Func es una función que devuelve un puntero a un vector de punteros a funciones que devuelven cada una un carácter*/ int (*(*tim[5])())[3]; /* tim es un vector de 5 punteros a funciones que devuelven cada una un puntero a un vector de 3 enteros */ 31 16