06/08/2015 funciones en c prof. addys de lam dra. addys de lam

22
14/06/22 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

Upload: patricia-olivera-alvarez

Post on 24-Jan-2016

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

FUNCIONES EN C

PROF. ADDYS DE LAM

Dra. Addys de Lam

Page 2: 06/08/2015 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.

21/04/23 Dra. Addys de Lam

Page 3: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

FUNCIONESUna 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 FUNCIONTiene 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

Page 4: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23 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();

Page 5: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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

Page 6: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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

Page 7: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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

Page 8: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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

Page 9: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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

Page 10: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

DECLARACIONES DE FUNCIONESDECLARACIONES 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 losargumentos 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 ladefinició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

Page 11: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

La forma general del La forma general del prototipo prototipo de una funciónde una función

tipo_valor_de_retorno nombre_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

Page 12: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

#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 */}

La función anterior podría ser llamada y comprobada de la La función anterior podría ser llamada y comprobada de la siguiente forma:siguiente forma:

Dra. Addys de Lam

Page 13: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

#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

Page 14: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

/* 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

Función potencia

Page 15: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

#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;}

EJEMPLO: Función para obtener el cuadrado de 1 a 10EJEMPLO: Función para obtener el cuadrado de 1 a 10

Dra. Addys de Lam

Page 16: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23 Dra. Addys de Lam

#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); }

Mayor de tres cantidades : prototipo

Page 17: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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).

USO DE FUNCIONES EXTERNASUSO DE FUNCIONES EXTERNASARCHIVOS DE CABECERA DEFINIDOS POR EL USUARIOARCHIVOS DE CABECERA DEFINIDOS POR EL USUARIO

Dra. Addys de Lam

Page 18: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

EJEMPLO1. Se crea la función que calcula el cuadrado.

int cuadrado (int y)

{

return y*y;

}

2. Se guarda como cuadrado.cDra. Addys de Lam

Page 19: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

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

Page 20: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

EJEMPLOARCHIVO: MATEMATI.C

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;}

Dra. Addys de Lam

Page 21: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

PROGRAMA PROGRAMA.C

#include "d:\cursos\programa\matemati.h"#include <conio.h>#include <stdio.h>#define PI 3.1416void 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;

Dra. Addys de Lam

Page 22: 06/08/2015 FUNCIONES EN C PROF. ADDYS DE LAM Dra. Addys de Lam

21/04/23

PROGRAMAPROGRAMA.C

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);}

Dra. Addys de Lam