Funciones. Forma de una función: f x, y, Ejemplo: f x =ln x 3x 2 4x sin x. si x= f a =ln a 3a 2 4a sin a. f a =ln sin =18.

20  12  Download (0)

Full text

(1)

1

Funciones

Forma de una función:

Ejemplo:

f

x , y ,

argumentos

valor de la función

f

x

=

ln

x



3x

2

4x

sin

x

si x

=

a

f

a

=

ln

a



3a

2

4a

sin

a

si x

=

f

a

=

ln



3

2

4



sin

=

18.18717247

(2)

2

Funciones (cont.)

Las funciones en programación nos

ayudan a:

– Dividir tareas grandes en varias más

pequeñas, p.e. imagine tener que poner el código de como calcular el cos(x) donde lo necesitemos, el resultado sería que el programa original

acabaría muy largo.

– Reusar código escrito por nosotros o

por alguien mas. P.e. Recuerde cuantas veces tuvo que escribir la función en el código del método de bisección.

(3)

3

Funciones (Reglas de uso)

Un programa puede contener tantas

funciones como sea necesario.

Para crear una función se debe

tener claro:

– Lo que la función tiene que hacer.

– Cuales y de que tipo son los

argumentos de entrada.

– La necesidad o no de usar argumentos

de salida.

(4)

4

Funciones (sintaxis)

Hay dos partes que se tienen que

escribir al hacer una función:

Declaración de la función, o también

llamada prototipo o encabezado:

tipo_de_dato nombre_funcion(vacio, void, o lista de argumentos con su tipo de dato, con o sin

nombres);

● Por ejemplo:

int hora();

int fecha(void);

double area_circulo(double); int min(int x, int y);

● Aquí solo se indica el tipo de dato de salida,

el nombre de la función y el o los tipos de argumentos usados.

(5)

5

Funciones (sintaxis, cont.)

Definición de la función, o también

llamado implementación:

tipo_de_dato nombre_funcion(vacio, void, o lista de argumentos con su tipo de dato y nombres)

{

cuerpo de la función;

//El valor de regreso debe coincidir en tipo //con el declarado en la función.

return valor_de_regreso; }

● Note que el ; de la primera linea no aparece,

esto es distinto distinto a la declaración.

● En este caso los nombres de los argumentos son

obligatorios

● Los parámetros en la declaración y en la

definición DEBEN coincidir en número y en

tipo. Los nombres no tienen por que ser los mismos.

(6)

6

Funciones (sintaxis, cont.)

● Las declaraciones (o prototipos) DEBEN ser

colocadas ANTES de donde son utilizadas en alguna parte del código.

● En C no se pude declarar una función dentro de otra

● Las definiciones (o implementación) pueden ser

colocadas antes o después de donde se invoquen.

– Si las definiciones son colocadas antes de la

función principal se puede evitar escribir la definición.

– Lo importante es que el compilador tenga

declarado el nombre, tipo y numero de argumentos de la función antes de ser invocada.

● El archivo math.h contiene las declaraciones

de las funciones de matemáticas.

● La opción -lm del likeador junta las

definiciones (previamente compiladas) de las funciones de matemáticas.

(7)

7

Funciones (llamadas a)

● Para invocar (o llamar) a una función la

sintaxis es la siguiente:

<nombre_de_variable>=nombre_funcion(lista de

variables, constantes, expresiones o funciones);

– Ejemplos:

x=sin(y); x=tan(1.2);

x=cos(fabs(y)); asin(x);

● El número, tipo y orden de argumentos DEBE

coincidir con los indicados en la declaración, si no coinciden el compilador indicará un error.

(8)

8

Funciones

(llamadas a (fallas))

● Si en el código solo se declaró la

función pero la definición no está hecha o alguna biblioteca externa no contiene la definición de la función, quien

indicará la falla es el linkeador, de la misma manera que lo hace cuando usamos

una función matemática y no incluimos en el comando de compilación la opción -lm.

● Si ni la declaración ni la definición

están en el código quien indicará la falla es el compilador avisando que la función no existe.

(9)

9

Funciones

(ejemplo básico)

● Para ver un ejemplo básico de como

declarar, definir y llamar a una función ver:

http://ifug.ugto.mx/~gonzart/notas/circulo.c http://ifug.ugto.mx/~gonzart/notas/promediofuncion.c

● Se presentan algunas dudas:

– Como se pasan los datos en la llamada

a la función?.

– Como pueden declararse variables con

el mismo nombre? (ver area en el main y area en la función fun_area)

(10)

10

Funciones

(paso de valores)

● Lo que hace C es que cuando hace una

llamada a una función se pasan el valor de las variables, en el caso del código circulo.c:

– La variable r pertenece a la función

fun_area. En la llamada de la linea 21, el valor de la variable rad se pasa al valor de la variable r.

● A este tipo de llamada que pasa

valores se le denomina llamada por valores.

(11)

11

Funciones

(variables)

● En C las variables tienen una

característica que se llama “alcance”.

– El alcance de una variable es la parte

del programa dentro de la cual se puede utilizar. Reglas:

● Una variable declarada en una

función solo puede usarse dentro de la misma función.

– La variable vive desde su

declaración hasta el lugar donde se encuentre una } que cierre la correspondiente { del bloque.

(12)

12

Funciones

(variables (cont.))

– Ejemplo:

int main (void) { //aqui se declara a: int a; ... if (a>0) { float b; ...

//hasta aqui vivie b. }

...

//hasta este punto vive a. }

(13)

13

Funciones

(variables (alcance))

En el mismo bloque

NO

se pueden

tener dos variables con el mismo

nombre. Como explicar el caso de

área en el código circulo.c?.

– Si dentro de una función o bloque ({})

existe un nombre de variable repetido, el que se usa es la variable definida en la parte más “interna” del bloque {}.

Si una variable se define fuera de

(14)

14

Funciones

(variables (alcance))

Las variables declaradas en el

encabezado de la función se

consideran variables locales a la

función.

Repitiendo, cuando en C se hace una

llamada a una función, el paso de

datos es heredando el valor hacia

las variables locales de la

(15)

15

Funciones

(variables (alcance))

● Ejemplo:

int a; //variable global, no está dentro de ningun //bloque

void f(void) {

float a; /* diferente de 'a' global */ float b;

a = 0.0; /* da a 'a' declarada en este bloque 0.0 */ /* la variable global 'a', no es tocada*/

{

int a; /* nueva 'a' de este bloque*/

a = 2; /* la variable 'a' del bloque anterior permanece intacta */

}

b = a; /* da a 'b' el valor de 0.0 */ }

(16)

Funciones con argumentos

del tipo arreglo.

● Declaración (ejemplo):

float prom(float dat[], int ndat);

– Al poner los [] se indica que ese

argumento es un arreglo del tipo definido.

– En este caso si se modifican los valores

del arreglo dentro de la función también se están modificando los valores del

arreglo que se usa para llamar a la

función. Se dice que la llamada es por

referencia. A diferencia de las llamadas

por valor de las variables convencionales.

(17)

17

Funciones

(comentarios)

● Es ampliamente recomendado (y para fines del curso

obligatorio) comentar la utilidad y la forma de uso de una función, el esquema propuesto es el siguiente:

/*---Nombre de la función:

Explicación de lo que hace la función: Argumentos de entrada:

Descripción de cada argumento, explicar el significado.

Argumentos de salida:

Descripción de cada argumento, explicar el significado.

Valor Regresado:

Explicar lo que regresa la función.

(18)

18

Función Main

● Existe una función especial que hemos usado

desde el principio, la función main. Ésta, como todas las funciones puede tener

valores de salida y argumentos de entrada.

– Que puede sacar la función main?, para

que serviría que main entregue algún valor?

– Más aún, quen llama a main para invocarla

con argumentos de entrada??!!!.

● Quien llama y recibe argumentos de main es

el sistema operativo desde donde se ejecuta el programa.

(19)

19

Función Main (cont.)

● Y que argumentos puede pasar el sistema

operativo?. Veamos el caso de un comando común en unix, acuérdese que la mayoría de los comandos en unix son archivos

ejecutables, cuando se escibe: cat arch1.txt arch2.tx

se está invocando al programa cat con dos argumentos de entrada de tipo cadena de caracteres.

● Lo que regresa el comando es una bandera

que indica si se pudo ejecutar

correctamente (por convención regresa un 0), o un estado de error (regresa algún número negativo).

(20)

20

Función Main (cont.)

● Para que la función main acepte los

argumentos con los que fue invocado el

programa se define se la siguiente manera: int main(int argc, char* argv[])

donde argc nos indica el número de

argumentos + 1 que fueron usados al invocar el programa. el segundo argumento es un

arreglo de cadenas de caracteres, el índice 0 contendrá el subdirectorio desde donde se invocó al programa; los demás indices

contendrán la cadena para cada argumento de entrada.

Figure

Updating...

References

Related subjects :