220 likes | 462 Views
FUNCIONES EN C PROF. ADDYS DE LAM. OBJETIVOS DEFINIR QUE ES UNA FUNCIÓN Y CUAL ES SU FORMATO. CODIFICAR FUNCIONES, SU FORMA DE ACCESO, DECLARACIONES Y AMBITO DE LAS VARIABLE. UTILIZACIÓN DE LAS FUNCIONES EN PROGRAMAS COMPLETOS EN C. CREAR FUNCIONES COMO PARTE DE LIBRERIAS. FUNCIONES
E N D
FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam
OBJETIVOS • DEFINIR QUE ES UNA FUNCIÓN Y CUAL ES SU FORMATO. • CODIFICAR FUNCIONES, SU FORMA DE ACCESO, DECLARACIONES Y AMBITO DE LAS VARIABLE. • UTILIZACIÓN DE LAS FUNCIONES EN PROGRAMAS COMPLETOS EN C. • CREAR FUNCIONES COMO PARTE DE LIBRERIAS. Dra. Addys de Lam
FUNCIONES Una función es un segmento de programa que realiza determinadas tareas bien definidas. Las funciones en C son porciones de código que devuelven uno o ningún valor. . DEFINICION DE UNA FUNCION Tiene tres componentes principales: la primera línea, la declaración de argumentos y el cuerpo de la función. FORMATO: tipo nombre (argumento formal 1, ........argumento formal n) declaración de los argumentos formales { cuerpo de la función } Se devuelve información desde la función hasta el punto del programa desde donde se llamó mediante la sentencia return y devuelve el control al punto de llamada. FORMATO: return expresion ; Se devuelve el valor de expresión al punto de llamada. ( expresión es opcional). Dra. Addys de Lam
Funciones sin argumentos Cuando la función no recibe parámetros se declara con void entre paréntesis o paréntesis vacios. Ejemplo: int decide(void) ó int decide( ) { ... }{ ... } Accede: resp = decide(); Dra. Addys de Lam
EJEMPLO 1: Función para convertir un carácter de minúscula a mayúscula. minusc_a_mayusc (c1) /* primera línea */ char c1; /* declaración de argumento */ { char c2; c2 = ( c1 > = ‘a’ && c1 < = ‘z’) ? ( ‘A’+ c1 - ‘a’) : c1; return (c2); } /* Fin del cuerpo de la función */ NOTA: La primera línea no tiene especificado el tipo, asume un valor entero. Dra. Addys de Lam
EJEMPLO 2: Función que determina el mayor de dos cantidades enteras. void maximo ( x,y ) /* Declaración de argumentos formales */ int x, y; { int z; z = (x > = y ) ? x : y; printf (“\n\nValor maximo = %d”, z); return; } NOTA: void indica que la función no devuelve nada. Dra. Addys de Lam
EJEMPLO 3: Función que calcula el factorial de un número entero positivo dado. long int factorial ( n ) int n; { int i; long int prod = 1; if ( n> 1) for ( i= 2; i <= n; ++i ) prod * = i; return ( prod); } Dra. Addys de Lam
ACCESO A UNA FUNCION: FORMATO: nombre de la función ( argumento actual 1,......., argumento actual n) ó nombre de la función ( ) EJEMPLO 1: Convierte un carácter de minúscula a mayúscula. #include < stdio.h> main ( ) { char minusc, mayusc; char minusc_a_mayusc(char minusc);/* declaración de la función */ printf ( “Entre una letra minuscula:”); scanf (“%c”, &minusc); mayusc = minusc_a_mayusc ( minusc);/* acceso a la función */ printf (“\nLa mayuscula equivalente es %c\n\n, mayusc); } minusc_a_mayusc (c1) /* primera línea */ char c1; /* declaración de argumento */ { char c2; c2 = ( c1 > = ‘a’ && c1 < = ‘z’) ? ( ‘A’+ c1 - ‘a’) : c1; return (c2); } Dra. Addys de Lam
EJEMPLO 2: Determinar el mayor de tres cantidades: #include < stdio.h > main ( ) { int a, b, c, d; printf ( “\na =”); scanf (“%d”, &a); printf ( “\nb =”); scanf (“%d”, &b); printf ( “\nc =”); scanf (“%d”, &c); d = maximo ( a, b); /* acceso a la función */ printf (“\nMaximo es %d”, maximo(c, d)); /* acceso a la función */ getch(); } maximo ( x,y ) /* determina el mayor de dos cantidades */ int x, y; { int z; z = (x > = y ) ? x : y; return (z); } Dra. Addys de Lam
DECLARACIONES DE FUNCIONES En principio, en C, la declaración de una función se puede hacer de tres maneras: a) Mediante una llamada a la función. En efecto, cuando una función es llamada sin que previamente haya sido declarada o definida, esa llamada sirve como declaración suponiendo int como tipo del valor de retorno, y el tipo de los argumentos actuales como tipo de los argumentos formales. Esta práctica es muy peligrosa (es fuente de numerosos errores) y debe ser evitada. b) Mediante una definición previa de la función. Esta práctica es segura si la definición precede a la llamada, pero tiene el inconveniente de que si la definición se cambia de lugar, la propia llamada pasa a ser declaración como en el caso a). c) Mediante una declaración explícita, previa a la llamada. Esta es la práctica más segura y la que hay que tratar de seguir siempre. La declaración de la función se hace mediante el prototipo de la función, bien fuera de cualquier bloque, bien en la parte de declaraciones de un bloque. Dra. Addys de Lam
La forma general del prototipo de una función tipo_valor_de_retornonombre_funcion (lista de tipos de argumentos); Ejemplo: intercambia los valores de dos variables. void permutar(double x, double y) /* Paso por valor */ { double temp; temp = x; x = y; y = temp; } Dra. Addys de Lam
La función anterior podría ser llamada y comprobada de la siguiente forma: #include <stdio.h> void permutar(double, double); void main() { double a=1.0, b=2.0; printf("a = %lf, b = %lf\n", a, b); permutar(a, b); printf("a = %lf, b = %lf\n", a, b); /*No se refleja el cambio porque es por valor */ } Dra. Addys de Lam
#include <stdio.h> #include <conio.h> main () { int potencia(int); /* Declaración del prototipo de la función potencia*/ int suma,n,i; clrscr(); printf("\n \t Entre el valor final de la serie:"); scanf(" %d",&n); suma =1; printf ("\n \t La serie es: %d ",suma); /* Calculo de la sumatoria de la serie */ for(i=2;i<=n;i++) suma += potencia(i); /* Llamado a ejecucion de la funcion potencia*/ /* Visualizacion del resultado final*/ printf("\n \t La sumatoria de Potencias es: %d ",suma); getch(); return 0; } Dra. Addys de Lam
Función potencia /* Definición de la función potencia*/ int potencia(int e) { /* Declaraciones Locales */ int pot,a; /* Valor inicial de la potencia */ pot = e; /* Calculo de la base pot elevado a la potencia e */ for (a=2;a<=e;a++) pot *= e; /* Visualización de los siguientes términos de la serie */ printf(" + %d ", pot); return pot; } Dra. Addys de Lam
EJEMPLO: Función para obtener el cuadrado de 1 a 10 #include<stdio.h> int cuadrado (int ); /*Prototipo de Función*/ main() { int x; clrscr(); for (x=1; x<=10; x++) printf("%d ", cuadrado(x)); printf("\n"); getch(); return 0; } /*Definición de la función*/ int cuadrado (int y) { return y*y; } Dra. Addys de Lam
Mayor de tres cantidades : prototipo #include <stdio.h> main ( ) { int a, b, c, d; int maximo(int,int); printf ("\na ="); scanf ("%d", &a); printf ( "\nb ="); scanf ("%d", &b); printf ( "\nc ="); scanf ("%d", &c); d = maximo ( a, b); /* acceso a la función */ printf ("\nMaximo es %d", maximo(c, d)); /* acceso a la función */ getch(); } maximo ( int x, int y ) /* determina el mayor de dos cantidades */ { int z; z = (x >= y ) ? x : y; return (z); } Dra. Addys de Lam
USO DE FUNCIONES EXTERNAS ARCHIVOS DE CABECERA DEFINIDOS POR EL USUARIO • Crear la función, compilar y guardar con extensión c. • Cuando se desea utilizar deberá incluirse con la directriz #include. • El archivo debe estar entre “ “ (comilla doble). Dra. Addys de Lam
EJEMPLO1. Se crea la función que calcula el cuadrado. int cuadrado (int y) { return y*y; } 2. Se guarda como cuadrado.c Dra. Addys de Lam
3. Se utiliza cuadrado.h #include <stdio.h> #include “cuadrado.c” main() { int x; for (x=1; x<=10;x++) printf (“%d”, cuadrado(x)); printf (“\n”); getch(); return 0; } Dra. Addys de Lam
multiplicar(int a,int b) { int mult; mult = a*b; return mult; } double elevar_num(int a) { double elevacion; elevacion = a*a; return elevacion; } suma(int a,int b) { int sum; sum = a+b; return sum; } restar(int a,int b) { int res; res = a-b; return res; } EJEMPLOARCHIVO: MATEMATI.C Dra. Addys de Lam
#include "d:\cursos\programa\matemati.h" #include <conio.h> #include <stdio.h> #define PI 3.1416 void main() { int a,b,opc,resp, radio; double area, areatotal, res; do { clrscr(); printf("\n\t\t***MENU***"); printf("\n\t1.Sumar"); printf("\n\t2.Restar"); printf("\n\t3.Multiplicar"); printf("\n\t4.Elevar"); printf("\n\t5.Area de un circulo"); printf("\n\t6.Salir"); printf("\n\tEscoger opción -->\t "); scanf("%d",&opc); if (opc>=1&&opc<=3){ printf("Introduzca dos números separados por coma (#,#)\t"); scanf("%d,%d",&a,&b); } switch(opc) { case 1: clrscr(); resp = suma(a,b); printf ("\nLa suma de %d + %d = %d",a,b,resp); getch(); break; case 2: clrscr(); resp = restar(a,b); printf ("\nLa resta de %d - %d = %d",a,b,resp); getch(); break; PROGRAMA PROGRAMA.C Dra. Addys de Lam
case 3: clrscr(); resp = multiplicar(a,b); printf ("\nLa Multiplicación de %d * %d = %d",a,b,resp); getch(); break; case 4: clrscr(); printf("Introduzca el numero para elevar al cuadrado\t"); scanf("%d",&a); res=elevar_num(a); printf("\nEl numero elevado es %.2f",res); getch(); break; case 5: clrscr(); printf("Introduzca el radio\t"); scanf("%d",&radio); area = elevar_num(radio); areatotal= PI * area; printf("\nEL area del circulo es:%.2f ",areatotal); getch(); break; case 6: clrscr(); printf("Usted escogio salir"); getch(); break; default: clrscr(); printf("Valor fuera de rango...inténtelo de nuevo"); getch(); } }while(opc!=6); } PROGRAMAPROGRAMA.C Dra. Addys de Lam