La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

FUNCIONES EN C. MENU DEL DIA Repaso clase anterior. Funciones y variables. ¿Cómo trabajo con funciones? Funciones de biblioteca. Funciones de Carácter.

Presentaciones similares


Presentación del tema: "FUNCIONES EN C. MENU DEL DIA Repaso clase anterior. Funciones y variables. ¿Cómo trabajo con funciones? Funciones de biblioteca. Funciones de Carácter."— Transcripción de la presentación:

1 FUNCIONES EN C

2 MENU DEL DIA Repaso clase anterior. Funciones y variables. ¿Cómo trabajo con funciones? Funciones de biblioteca. Funciones de Carácter. Funciones Matemáticas. Paso de parámetros a una función. Paso de parámetros por valor. Paso de parámetros por referencia. Principales diferencias entre el paso de parámetros por valor y por referencia. Funciones de entrada y salida. Funciones de la librería stdlib. Funciones con cadenas de caracteres. Funciones recursivas

3 REPASO CLASE ANTERIOR #include declaracion_variables_globales; int main() { declaracion_variables_locales; instruccion_1; instruccion_2;... instruccion_N; return 0; } #include protipo_funciones; declaracion_variables_globales; int main() { declaracion_variables_locales; funcion_1(); funcion_2();... funcion_N(); return 0; } funcion_1() { codigo_funcion_1; }... funcion_N() { codigo_funcion_N; }

4 REPASO CLASE ANTERIOR... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida. (Valor de retorno si tiene). capitan_planeta(agua, tierra, aire, fuego, corazon); Por sus poderes reunidos yo soy,… EL CAPITAN PLANETA

5 REPASO CLASE ANTERIOR... Caja negra in_1 in_N out_1 In_2 tipo_retorno nombre_funcion(tipo_1,..., tipo_N); tipo_retorno nombre_funcion(tipo_1 param_1,..., tipo_N param_N) { intruccion_1;... instrucción_N; return expresion; } Declaración de la función (Prototipo). Definición de la función

6 REPASO CLASE ANTERIOR Invocación de la función Definición de la función Declaración de la función

7 REPASO CLASE ANTERIOR #include protipo_funciones; declaracion_variables_globales; int main() { declaracion_variables_locales; funcion_1(); funcion_2();... funcion_N(); return 0; } funcion_1() { codigo_funcion_1; }... funcion_N() { codigo_funcion_N; } #include float suma(float,float); int main() {... float a= suma(2.3,4.1);... return 0; } float suma(float num1, float num2) { float res; res = num1 + num2; return res; }

8 FUNCIONES Y VARIABLES Ámbito: Global. Local (Bloque). Ocultamiento de variables. Caja negra #include int a, b = 1, c = 2; int main() { int d = 3, e = 3; { int f = 8; int g = 9; } return 0; } Ámbito global Ámbito local Bloque 1 Bloque 2 #include int a=1; int main() { int a = 3; { int a = 5; } return 0; } Bloque 1 Bloque 2 Variable global a = 1. Ocultamiento de la variable a, global por la variable local al bloque del main. a = 3. Ocultamiento de la variable a, local a la función main por la variable local al bloque definido al interior del main. a = 5.

9 FUNCIONES Y VARIABLES #include int funcion(int); int a, b = 1, c = 2; int main() { int d = 3, e = 3, x = 2; int a = funcion(3); c = funcion(b); printf("x = %d\n"); b = funcion(x); printf("x = %d\n"); return 0; } int funcion(int x){ int b = 1; c = x + 1; } Bloque 1 Bloque 2 Ámbito global Ámbito local Variables globales y las funciones: Como una variable global es visible en todo el código puede ser accedidas y cambiadas desde cualquier parte incluyendo las funciones. Variables globales y las funciones: Cuando una variable local es declarada dentro de una función, y esta tiene el mismo el mismo nombre que una variable global previamente declarada, la variable local oculta a la global. Los argumentos de una función son variables locales de la función. Una función no puede ver variables locales que se encuentren fuera de su ámbito. Variables globales.vs. Variables locales La ventaja de usar variables globales radica en que facilita en intercambio de información entre funciones en un programa sin hacer uso de argumentos. El uso de variables globales frente a las locales tiene 2 desventajas: La función es mucho menos portable para otros programas. Concepto de dominio local: Si una variable local definida dentro de una función tiene el mismo nombre que una variable global, solo la variable local es cambiada mientras se esta en la función. Variables globales.vs. Variables locales La ventaja de usar variables globales radica en que facilita en intercambio de información entre funciones en un programa sin hacer uso de argumentos. El uso de variables globales frente a las locales tiene 2 desventajas: La función es mucho menos portable para otros programas. Concepto de dominio local: Si una variable local definida dentro de una función tiene el mismo nombre que una variable global, solo la variable local es cambiada mientras se esta en la función.

10 FUNCIONES Y VARIABLES Almacenamiento de variables Permanente (static): Sus valores se mantienen cuando termina la función. Una variable declarada como static dentro de una función, mantiene un valor a través de ejecuciones posteriores de la misma función. Una variable de este tipo se crea en tiempo de compilación. Temporal (auto): Sus valores se pierden cuando termina la función. Una variable de este tipo se crea en tiempo de ejecución. #include void ejemplo_estatica(int); int main() { ejemplo_estatica(1); ejemplo_estatica(2); ejemplo_estatica(3); return 0; } void ejemplo_estatica(int llamada){ static int cuenta; if(llamada == 1) cuenta = 1; printf("El valor de la cuenta en la llamada # %d es: %d\n", llamada, cuenta); cuenta++; } La salida cuando una variable declarada dentro de una función sea estática o no depende del compilador

11 ¿COMO TRABAJO CON FUNCIONES? Realizar una función que calcule el valor la potencia de un numero entero.

12 ¿COMO TRABAJO CON FUNCIONES? Comprender el problema. Definir entradas y salidas. Definir el funcionamiento de la función. Codificar la función. Declaración. Definición. Test de la función. Adaptación al programa principal

13 ¿COMO TRABAJO CON FUNCIONES? Comprender el problema Esta etapa consiste en aterrizar el problema (entenderlo), antes de empezar puede ser útil formular preguntas como: ¿Qué es lo que se busca? ¿Cuáles son las entradas y salidas? ¿Cómo se aborda el problema?

14 ¿COMO TRABAJO CON FUNCIONES? Definir entradas y salidas Una vez aterrizado el problema el siguiente paso consiste en definir las entradas y salidas que tendrá la función. Muchas veces el enunciado del problema nos da esta información. x y Entradas r Salida r x y potencia

15 ¿COMO TRABAJO CON FUNCIONES? Definir el funcionamiento de la función Esta parte es sumamente importante por que aquí es donde se definen el conjunto de instrucciones de la función encargados de procesar los función con los argumentos que se le pasan a esta. r x y potencia Instrucciones de asignación. Instrucciones de E/S. Instrucciones condicionales. Instrucciones repetitivas.

16 ¿COMO TRABAJO CON FUNCIONES? Codificar la función Consiste en codificar la función en lenguaje C, básicamente esto es, codificar su prototipo y definición. r x y potencia int potencia(int,int); int potencia(int x,int y) { int r = 1,i; for(i=1;i<=y;i++) { r *= x; } return r; } Prototipo Definición

17 ¿COMO TRABAJO CON FUNCIONES? Codificar la función

18 ¿COMO TRABAJO CON FUNCIONES? Test la función Consiste en probar el correcto funcionamiento de la función anteriormente creada. Para ello esta se invoca en el main pasándole diferentes valores y comprobando que el valor retornado sea el correcto.

19 ¿COMO TRABAJO CON FUNCIONES? Adaptación al programa principal Una vez que se comprueba el correcto funcionamiento de la función el siguiente paso consiste en emplearla en el programa principal siguiendo las especificaciones asignadas.

20 FUNCIONES DE BIBLIOTECA C ofrece una biblioteca estándar de funciones que proporcionan soporte para operaciones utilizadas con mas frecuencia. Estas funciones permiten realizar una operación con solo una llamada a una función (sin tener que escribir su código fuente). Las funciones se dividen en diferentes grupos lo cuales se asocian a cada uno de los archivos cabecera mostrados a continuación: Para usar una función determinada se debe incluir el archivo cabecera asociado al grupo a la cual esta pertenece, para ello se usa la directiva del preprocesador #include : math.h stdio.h

21 FUNCIONES DE BIBLIOTECA Archivo de encabezado de la biblioteca estándar Detalles Contiene macros e información que agrega diagnósticos para depuración de programas Contiene prototipos de función que comprueban ciertas propiedades de los caracteres y prototipos de función para convertir letras minúsculas a mayúsculas y viceversa. Contiene los limites de tamaño de los números de punto flotante del sistema. Contiene los limites de tamaño de los números enteros del sistema. Contiene los prototipos de las funciones de la biblioteca matemática. Contiene los prototipos de las funciones de la biblioteca estándar de entrada/salida e información que utilizan. Contiene prototipos de función para conversión de números a texto, texto a números, asignación de memoria, números aleatorios y varias otras funciones de utilería. Contiene prototipos de función para procesamiento de cadenas de caracteres. Contiene prototipos de función y tipos para manipular la hora y la fecha.

22 ¿COMO USAR UNA FUNCION? Anotaciones a tener en cuenta en el momento de usar funciones: Consultar la documentación sobre la función (API): Identificar entradas (que es lo que se le mete) y salidas (que es lo que devuelve). Identificar que archivos cabecera se deben incluir para poder usarla. Comprender que es lo que hace la función. Identificar como usarla (su invocación). Ver ejemplos para aclarar como usar la función consultada. Adaptarla al problema particular Algunos APIs:

23 FUNCIONES DE CARACTER El archivo cabecera define un grupo de funciones y macros para la manipulación de variables tipo carácter. La siguiente tabla resume las principales funciones: FunciónDescripción int isalpha(int c)isalpha Testea si el carácter es alfanumérico int isdigit(int c)isdigit Testea si el carácter es un digito entre 0 y 9 int isupper(int c)isupper Testea si el carácter introducido es una letra mayúscula (A - Z). int islower(int c)islower Testea si el carácter introducido es una letra mayúscula (a - z). int isalnum(int c)isalnum Evalúa si el carácter introducido es una letra o digito. int iscntrl(int c)iscntrl Testea si el carácter introducido es de control. int isxdigit(int c)isxdigit Testea si el carácter es un digito hexadecimal int isprint(int c)isprint Test de carácter imprimible incluyendo espacio. int isgraph(int c)isgraph Test de carácter imprimible excepto espacio. int isspace(int c)isspace Test de carácter de espacio (espacio, avance de pagina, nueva línea, retorno de carro, tabulación, tabulación vertical) int ispuntc(int c)ispuntc Testea por carácter de puntuación. int toupper(int c)toupper Convierte a letras mayúsculas. int tolower(int c)tolower Convierte a letras minúsculas.

24 FUNCIONES DE CARACTER Ejemplo: ¿ Hacer un programa que lea un carácter por teclado y compruebe si es letra? #include int main() { char inicial; printf("Cual es su primer caracter inicial? " ); scanf ("%c",&inicial); while (!isalpha(inicial)) { puts("Caracter no alfabetico \n"); printf("Cual es su siguiente inicial? "); scanf ("%c",&inicial); } puts("Terminado!\n"); return 0; }

25 FUNCIONES DE CARACTER Ejemplo: Hacer un programa que compruebe el sexo de un encuestado, el usuario debe digitar M para masculino y F para femenino. #include int main() { char resp; printf("Digite el sexo (F:Femenino o M: Masculino): " ) ; scanf ("%c",&resp); resp = toupper(resp); switch(resp) { case F: printf("Femenino\n"); break; case M: printf("Masculino\n"); break; default: printf("Opción invalida\n"); } return 0; }

26 FUNCIONES MATEMATICAS El archivo cabecera contiene la mayoría de las funciones numéricas para la realización de diferentes operaciones matemáticas: Funciones matemáticas FunciónDescripción ceilceil(x) Redondea al entero mas cercano. fabsfabs(x) Devuelve el valor absoluto de x. floorfloor(x) Redondea por defecto al entero mas próximo. fmodfmod(x,y) Calcula el residuo f en coma flotante para la división x/y. powpow(x,y) Calcula x elevado a la potencia y. Si x es menor o igual que 0, y debe ser entero. Si x es igual a cero, y no puede ser negativo. sqrtsqrt(x) Devuelve la raíz cuadrada de x; x debe ser mayor o igual que cero.

27 FUNCIONES MATEMATICAS Funciones trigonométricas FunciónDescripción acosacos(x) Calcula el coseno inverso del x. x debe estar entre -1 y 1. asinasin(x) Calcula el seno inverso del x. x debe estar entre -1 y 1. atanatan(x) Calcula el tangente inverso de x. atan2atan2(x,y) Calcula el tangente inverso de dividir x entre y (x/y). sinsin(x) Calcula el seno del ángulo x. x se expresa en radianes. coscos(x) Calcula el coseno del ángulo x. x se expresa en radianes. tantan(x) Calcula el tangente del ángulo x. x se expresa en radianes.

28 FUNCIONES MATEMATICAS Funciones logarítmicas y exponenciales. FunciónDescripción expexp(x), expl(x) La función exp calcula el exponencial de x (con e = 2,718282), la variante expl calcula el exponencial utilizando un valor long double. loglog(x), logl(x) La función calcula el logaritmo natural de x, logl calcula el logaritmo natural de x siendo este un dato tipo long double. log10log10(x), log10l(x) Calcula el logaritmo en base 10 de x. logl, es la versión de la misma función para datos tipo long double. X debe tener valor positivo.

29 FUNCIONES MATEMATICAS Ejemplo: Hacer un programa que use varias funciones de la librería matemática. #include #define PI 3.14 int main() { double x = 2.0, y = 3.5, z; z = sqrt(pow(x,2)+3*x*pow(x+y,x-1)); printf("%lf",z); x = log(z); printf("%lf",x); y = tan(PI/2); printf("%lf",y); return 0; }

30 PASO DE PARAMETROS A UNA FUNCION En C existen dos formas de pasar parámetros a una función, estas son: Por valor. Por referencia. Paso de parámetros por valor Cuando se pasa un argumento utilizando una llamada por valor, se hace una copia del argumento y se pasa a la función llamada. En este caso, los cambios en la copia no afectan el valor de la variable original. Este es el método de invocación por defecto. En todos los ejemplos anteriormente estudiados el paso de parámetros se ha realizado por valor. Paso de parámetros por referencia A diferencia del paso de parámetros por valor, cuando se pasa un parámetro por referencia, la función accede y manipula directamente el argumento pasado (y no a una copia de este) de tal modo que la variable original puede ser modificada. Este método es muy empleado para pasar arreglos y datos grandes como argumentos por su mayor eficiencia. saludo(8);... void saludo(int x); float x; int y; entrada(&x,&y);... void entrada(float *x,int *y); Invocación de la función Declaración de la función

31 PASO DE PARAMETROS POR VALOR #include void incrementar_por_valor(int); int main() { int y = 3, x = 4; incrementar_por_valor(y); incrementar_por_valor(x); return 0; } void incrementar_por_valor(int x) { x++; } ¿Cuál serán los valores finales de las variables declaradas después de la ejecución del siguiente programa? void incrementar_por_valor(int); Declaración de la función void incrementar_por_valor(int x) { x++; } Definición de la función incrementar_por_valor(y); incrementar_por_valor(x); Invocación de la función

32 PASO DE PARAMETROS POR REFERENCIA #include void incrementar_por_referencia(int *); int main() { int y = 3, x = 4; incrementar_por_referencia (&y); incrementar_por_referencia(&x); return 0; } void incrementar_por_referencia(int *x) { *x=*x+1; } ¿Cuál serán los valores finales de las variables declaradas después de la ejecución del siguiente programa? void incrementar_por_referencia(int *); Declaración de la función void incrementar_por_referencia(int *x) { *x = *x + 1; } Definición de la función incrementar_por_referencia(&y); incrementar_por_referencia(&x); Invocación de la función En la declaración después del tipo de dato se utiliza el operador asterisco unitario (*) para indicar que el paso será por referencia. Cuando se invoca la función la variable pasada como argumento se debe preceder del operador ampersand (&). La única excepción a esto esta cuando a la función se pasan arreglos y cadenas de caracteres. Note el acceso a la variable pasada por referencia siempre se hace anteponiendo el operador asterisco unitario (*) a la variable pasada como parámetro, x para este caso.

33 PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR REFERENCIA Y POR VALOR Declaración void intercambiar1(int,int);void intercambiar2(int *,int *); Definición void intercambiar1(int x, int y){ int aux; aux = x; x = y; y = aux; } void intercambiar2(int *x, int *y){ int aux; aux = *x; *x = *y; *y = aux; } Invocación int a = 3,b = 5; intercambiar1(a,b); int a = 3,b = 5; intercambiar2(&a,&b); Ver código: ejemplo_ref_val.c

34 FUNCIONES DE ENTRADA SALIDA El archivo cabecera contiene funciones de utilidad para la entrada y salida de datos. Entrada (desde teclado) y salida (hacia pantalla) formateada FunciónDescripción scanf Lee una cadena formateada desde stdin (teclado). printf Imprime una cadena formateada a stdout (pantalla). #include int main() { double a = ; float b = ; int c, d, e; char cadena[]="Simon dice que estos son los numeros", caracter = 'z'; printf("Despliegue de algunos datos\n"); printf("a = %10.2lf, b = %10.2f\n",a,b); printf("Digite 3 numeros enteros\n"); scanf("%d%d%d",&c,&d,&e); printf("%s: c = %+4d, d = %+4d, e = %+4d\ny que este es el caracter: %c\n",cadena,c,d,e,caracter); return 0; }

35 FUNCIONES DE ENTRADA SALIDA Entrada y salida de caracteres (por teclado y pantalla) FunciónDescripción getchar Obtiene un carácter desde stdin (teclado). putchar Escribe un carácter a stdout (pantalla). gets Obtiene una cadena de caracteres desde stdin (teclado). puts Escribe un carácter a stdout (pantalla). #include int main() { char sexo, nom_apell[60]; printf("Digite nombres y apellidos completos: \n"); gets(nom_apell); printf("Digite sel sexo (F para femenino, M para masculino): "); sexo = getchar(); printf("Usted "); puts(nom_apell); printf(" tiene sexo "); putchar(sexo); printf("\n"); return 0; }

36 FUNCIONES DE LA LIBRERÍA STDLIB El archivo cabecera contiene funciones para manejo dinámico de memoria, generación de números aleatorios, comunicación con el ambiente, aritmética entera, búsqueda, ordenamiento y conversión. Entrada (desde teclado) y salida (hacia pantalla) formateada FunciónDescripción atof Convierte un string a double. atoi Convierte un string a entero. atol Convierte un string a long integer. #include int main () { char n1_c[5],n2_c[5]; int n1; double n2; printf("Digite los tres numeros (int,double): \n"); gets(n1_c); gets(n2_c); n1=atoi(n1_c); n2=atof(n2_c); printf("Los numeros metidos son: %d, %lf\n",n1,n2); return 0; }

37 FUNCIONES DE LA LIBRERÍA STDLIB El archivo cabecera contiene funciones para manejo dinámico de memoria, generación de números aleatorios, comunicación con el ambiente, aritmética entera, búsqueda, ordenamiento y conversión. Entrada (desde teclado) y salida (hacia pantalla) formateada FunciónDescripción rand Genera un numero aleatorio. srand Inicializa un generador de números aleatorios. #include int main () { int N, M, cant, i, aleatorio; printf("Digite la cantidad de números que desea generar: "); scanf("%d",&cant); printf("Digite los limites (primero el superior, luego el inferior): "); scanf("%d%d",&N,&M); srand(time(NULL)); // Inicializacion del generador for(i = 0; i < cant; i ++) { aleatorio = rand()%(N-M+1)+M; //Genera un numero entre M y N printf("%d ", aleatorio); } printf("\n", aleatorio); system("PAUSE"); return 0; }

38 FUNCIONES CON CADENAS DE CARACTERES El archivo cabecera contiene la mayoría de las funciones empleadas para la manipulación de cadenas de caracteres Funciones para copiar FunciónDescripción strcpy Copia un string. strncpy Copia un numero determinado de caracteres de un string. Funciones para concatenar FunciónDescripción strcat Concatena strings. strncat Añade un numero determinado de caracteres a un string. Declaración de variables

39 FUNCIONES CON CADENAS DE CARACTERES Funciones para comparar FunciónDescripción strcmp Compara dos cadenas de caracteres. strncmp Compara un determinado numero de caracteres entre dos cadenas de caracteres. Funciones para buscar FunciónDescripción strpbrk Localiza un carácter en un string. strtok Divide un string en tokens. strcspn Revisa una primera cadena de caracteres hasta que encuentra la primera ocurrencia de uno de los caracteres obtenidos la otra cadena. strchr Localiza la primera ocurrencia de un string en una cadena de caracteres strrchr Localiza la ultima ocurrencia de un carácter en un string strstr Localiza un substring.

40 FUNCIONES RECURSIVAS Una función recursiva es una función que se llama a si misma directa o indirectamente. Recursividad Indirecta Directa Implica mas de una función main() { uno(); } uno() { dos(); } dos() { uno(); } uno() dos() main() La función se llama a si misma desde el propio cuerpo f() { if(condicion) return f(); else return v; }

41 FUNCIONES RECURSIVAS Un proceso recursivo debe tener una condición de terminación, ya que si esto no se da, puede continuar indefinidamente. int factorial(int n) { if(n > 1) return n* factorial(n - 1); else return 1; } x = factorial(4); return 4*factorial(3); return 3*factorial(2); return 2*factorial(1); return 1; 1 2 = 2*1 6 = 3*2 24 = 4*6 x = 24;

42 ¿QUE SE PUEDE HACER CON FUNCIONES?

43


Descargar ppt "FUNCIONES EN C. MENU DEL DIA Repaso clase anterior. Funciones y variables. ¿Cómo trabajo con funciones? Funciones de biblioteca. Funciones de Carácter."

Presentaciones similares


Anuncios Google