funciones en c

Upload: laura-gabriela-reyes

Post on 07-Jul-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

Funciones en C

03

En esta unidad aprenders a: Comprender el desarrollo de un programa utilizando funciones Establecer la diferencia entre la definicin y declaracin de una funcin Conocer y utilizar el paso de valores entre funciones y la devolucin de valores de una funcin Establecer la diferencia entre el paso de argumentos por valor y por referencia Conocer la clasificacin de las variables de acuerdo a su mbito y clase de almacenamiento

3. Funciones en C3.1 Introduccin

3.1 IntroduccinEn la unidad 2 hemos visto que una funcin es un fragmento de cdigo que realiza una tarea bien definida. Por ejemplo, la funcin printf imprime por la salida estndar los argumentos que le pasamos. Al igual que esta funcin, existen otras funciones que realizan diversas tareas ya definidas en el estndar ANSI C y que pueden ser utilizadas por el programador. Este tipo de funciones predefinidas son denominadas funciones de biblioteca. Sin embargo, cada programador puede definir sus propias funciones de acuerdo a sus necesidades. Las funciones que define el programador son conocidas como funciones de usuario. La utilizacin de funciones nos permite dividir un programa extenso en pequeos segmentos que realizan tareas concretas. Probablemente, dentro de un mismo programa se realicen las mismas tareas varias veces, lo que se facilita mediante la utilizacin de funciones. Sin embargo, es probable que ciertas funciones no sean reutilizables, pero al usarlas se mejora la legibilidad del programa. La filosofa en la que se base el diseo de C es el empleo de funciones. Por esta razn, un programa en C contiene al menos una funcin, la funcin main. Esta funcin es particular dado que la ejecucin del programa se inicia con las instrucciones contenidas en su interior. Una vez iniciada la ejecucin del programa, desde la funcin main se puede llamar a otras funciones y, posiblemente, desde estas funciones a otras. Otra particularidad de la funcin main es que se llama directamente desde el sistema operativo y no desde ninguna otra funcin. De esta manera, un programa en C slo puede contener una funcin main. Con el propsito de permitir un manejo eficiente de los datos, las funciones en C no se pueden anidar. En otras palabras, una funcin no se puede declarar dentro de otra funcin, por lo que todas las funciones son globales o externas, lo que hace que puedan llamarse desde cualquier parte de un programa. Se puede acceder (llamar) a una determinada funcin desde cualquier parte de un programa. Cuando se llama a una funcin, se ejecutan las instrucciones que constituyen dicha funcin. Una vez que se ejecutan las instrucciones de la funcin, se devuelve el control del programa a la siguiente instruccin (si existe) inmediatamente despus de la que provoc la llamada a la funcin. Cuando se accede a una funcin desde un determinado punto del programa, se le puede pasar informacin mediante unos identificadores especiales conocidos como argumentos (tambin denominados parmetros). Una vez que la funcin procesa esta informacin, devuelve un valor mediante la instruccin return. La estructura general de una funcin en C es la siguiente:tipo_de_retorno nombre_de_la_funcin (lista_de_parmetros) { cuerpo_de_la_funcin return expresin }

71

3. Funciones en C3.1 Introduccin

Donde: tipo_de_retorno: es el tipo del valor devuelto por la funcin, o, en caso de que la funcin no devuelva valor alguno, la palabra reservada void. nombre_de_la_funcin: es el nombre o identificador asignado a la funcin. lista_de_parmetros: es la lista de declaracin de los parmetros que son pasados a la funcin. stos se separan por comas. Debemos tener en cuenta que pueden existir funciones que no utilicen parmetros. cuerpo_de_la_funcin: est compuesto por un conjunto de sentencias que llevan a cabo la tarea especfica para la cual ha sido creada la funcin. return expresin: mediante la palabra reservada return, se devuelve el valor de la funcin, en este caso representado por expresin. Vamos a suponer que queremos crear un programa para calcular el precio de un producto basndose en el precio base del mismo y el impuesto aplicable. A continuacin mostramos el cdigo fuente de dicho programa:#include float precio(float base, float impuesto); /* declaracin */ main() { float importe = 2.5; float tasa = 0.07; printf("El precio a pagar es: %.2f\n", precio(importe, tasa)); return 0; } float precio(float base, float impuesto) /* definicin */ { float calculo; calculo = base + (base * impuesto); return calculo; }

El ejemplo anterior se compone de dos funciones, la funcin requerida main y la funcin creada por el usuario precio, que calcula el precio de un producto tomando como parmetros su precio base y el impuesto aplicable. La funcin precio calcula el precio de un producto sumndole el impuesto correspondiente al precio base y devuelve el valor calculado mediante la sentencia return. Por otra parte, en la funcin main declaramos dos variables de tipo float que contienen el precio base del producto y el impuesto aplicable. La siguiente sentencia dentro de la funcin main es la llamada a la funcin de biblioteca printf, que recibe como parmetro una llamada a la funcin precio, que devuelve un valor de tipo float. De esta manera, la funcin printf imprime por la salida estndar el valor devuelto por la funcin precio. Es importante tener en cuenta que las variables importe y tasa (argumentos) dentro de la funcin main tienen una correspondencia con las variables base e impuesto (parmetros) dentro de la funcin precio respectivamente.

72

3. Funciones en C3.2 Declaracin de funciones

En el ejemplo anterior, justo antes de la funcin main, hemos declarado la funcin precio. La intencin es que la funcin main sea capaz de reconocerla. Sin embargo, la definicin de dicha funcin aparece despus de la funcin main. Las definiciones de funcin pueden aparecer en cualquier orden dentro de uno o ms ficheros fuentes. Ms adelante, en esta unidad, veremos en detalle la declaracin y definicin de funciones. Por otra parte, hemos aadido la sentencia return 0 al final de la funcin main, puesto que se trata de una funcin como otra cualquiera y puede devolver un valor a quien le ha llamado, en este caso el entorno en el que se ejecuta el programa. Generalmente, el valor 0 implica un fin de ejecucin normal, mientras que otro valor diferente implica un final de ejecucin inusual o errneo.

3.2 Declaracin de funcionesAntes de empezar a utilizar una funcin debemos declararla. La declaracin de una funcin se conoce tambin como prototipo de la funcin. En el prototipo de una funcin se tienen que especificar los parmetros de la funcin, as como el tipo de dato que devuelve. Los prototipos de las funciones que se utilizan en un programa se incluyen generalmente en la cabecera del programa y presentan la siguiente sintaxis:tipo_de_retorno nombre_de_la_funcin(lista_de_parmetros);

En el prototipo de una funcin no se especifican las sentencias que forman parte de la misma, sino sus caractersticas. Por ejemplo:int cubo(int numero);

En este caso se declara la funcin cubo que recibe como parmetro una variable de tipo entero (numero) y devuelve un valor del mismo tipo. En ningn momento estamos especificando qu se va a hacer con la variable numero, slo declaramos las caractersticas de la funcin cubo. Cabe sealar que el nombre de los parmetros es opcional y se utiliza para mejorar la comprensin del cdigo fuente. De esta manera, el prototipo de la funcin cubo podra expresarse de la siguiente manera:int cubo(int);

Los prototipos de las funciones son utilizados por el compilador para verificar que se accede a la funcin de la manera adecuada con respecto al nmero y tipo de parmetros, y al tipo de valor de retorno de la misma. Veamos algunos ejemplos de prototipos de funciones:int potencia(int base, int exponente); double area_rectangulo (float base, float altura); int mayor(int, int); struct direccion entrada(void);

73

3. Funciones en C3.3 Definicin de funciones

Las funciones de biblioteca se declaran en lo que se conocen como ficheros de cabecera o ficheros .h (del ingls headers, cabeceras). Cuando deseamos utilizar alguna de las funciones de biblioteca, debemos especificar el fichero .h en que se encuentra declarada la funcin, al inicio de nuestro programa. Por ejemplo, si deseamos utilizar la funcin printf en nuestro programa, debemos incluir el fichero stdio.h que contiene el prototipo de esta funcin.

3.3 Definicin de funcionesTras declarar una funcin, el siguiente paso es implementarla. Generalmente, este paso se conoce como definicin. Es precisamente en la definicin de una funcin donde se especifican las instrucciones que forman parte de la misma y que se utilizan para llevar a cabo la tarea especfica de la funcin. La definicin de una funcin consta de dos partes, el encabezado y el cuerpo de la funcin. En el encabezado de la funcin, al igual que en el prototipo de la misma, se tienen que especificar los parmetros de la funcin, si los utiliza y el tipo de datos que devuelve, mientras que el cuerpo se compone de las instrucciones necesarias para realizar la tarea para la cual se crea la funcin. La sintaxis de la definicin de una funcin es la siguiente:tipo_de_retorno nombre_de_la_funcin(lista_de_parmetros) { sentencias; }

El tipo_de_retorno representa el tipo de dato del valor que devuelve la funcin. Este tipo debe ser uno de los tipos simples de C, un puntero a un tipo de C o bien un tipo struct. De forma predeterminada, se considera que toda funcin devuelve un tipo entero (int). En otras palabras, si en la declaracin o en la definicin de una funcin no se especifica el tipo_de_retorno, el compilador asume que devuelve un valor de tipo int. El nombre_de_la_funcin representa el nombre que se le asigna a la funcin. Se recomienda que el nombre de la funcin est relacionado con la tarea que lleva a cabo. En caso de que la funcin utilice parmetros, stos deben estar listados entre parntesis a continuacin del nombre de la funcin, especificando el tipo de dato y el nombre de cada parmetro. En caso de que una funcin no utilice parmetros, se pueden dejar los parntesis vacos o incluir la palabra void, que indica que la funcin no utiliza parmetros. Despus del encabezado de la funcin, debe aparecer, delimitado por llaves ({ y }), el cuerpo de la funcin compuesto por las sentencias que llevan a cabo la tarea especfica de la funcin. Veamos la definicin de la funcin cubo declarada en el apartado anterior:int cubo(int base) { int potencia; potencia = base * base * base; return potencia; }

74

3. Funciones en C3.3 Definicin de funciones

Como ya hemos visto, a los argumentos que recibe la funcin tambin se les suele llamar parmetros. Sin embargo, algunos autores consideran como parmetros a la lista de variables entre parntesis utilizada en la declaracin o en la definicin de la funcin, y como argumentos los valores utilizados cuando se llama a la funcin. Tambin se utilizan los trminos argumentos formales y argumentos reales, respectivamente, para hacer esta distincin. Cuando un programa utiliza un nmero elevado de funciones, se suelen separar las declaraciones de funcin de las definiciones de las mismas. Al igual que con las funciones de biblioteca, las declaraciones pasan a formar parte de un fichero cabecera (extensin .h), mientras que las definiciones se almacenan en un fichero con el mismo nombre que el fichero .h, pero con la extensin .c. En algunas ocasiones, un programador no desea divulgar el cdigo fuente de sus funciones. En estos casos, se suele proporcionar al usuario el fichero de cabecera, el fichero compilado de las definiciones (con extensin .o, de objeto) y una documentacin de las mismas. De esta manera, cuando el usuario desea hacer uso de cualquiera de las funciones, sabe qu argumentos pasarle y qu tipo de datos devuelve, pero no tiene acceso a la definicin de las funciones.

Ejemplo prctico1

El siguiente programa calcula el cubo de los nmeros del 1 al 5 utilizando una funcin definida por el usuario.

#include int cubo(int base); main() { int numero; for(numero=1; numero DEVUELVE 2 return ( 3 * 2) Fin Llamada # 2 -> DEVUELVE 6

89

3. Funciones en C3.12 Recursividad

return ( 4 * 6) Fin Llamada #1 -> DEVUELVE 24

En la Figura 3.3 podemos ver ilustrado el proceso descrito anteriormente.

main() valor =4 factorial(4) numero factorial() 24

Pila

factorial() factorial(3) Pila numero 4 factorial() 6 retorno 4 * 6

factorial(4)

factorial() factorial(2) retorno 3 * 2

Pila

numero 3

factorial() 2

factorial(3) factorial(4) factorial() factorial(1) Pila factorial(2) factorial(3) factorial(4) factorial() retorno 1 numero 1 factorial() numero 2 factorial() 1 retorno 2 * 1

Fig. 3.3. Llamadas recursivas.

En muchas ocasiones, la resolucin de un problema mediante una funcin recursiva resulta conceptualmente ms clara que la resolucin mediante una funcin iterativa. Tal es el caso de algunas estructuras de datos como los rboles binarios, cuyo manejo es sencillo mediante una funcin recursiva. Sin embargo, la funcin iterativa resulta algo ms compleja. Es evidente que hay tareas que se pueden resolver mediante funciones recursivas o funciones iterativas, aunque es el programador el que tiene que optar por una solucin u otra.

90

3. Funciones en C3.13 Funciones de biblioteca

3.13 Funciones de bibliotecaC ofrece un conjunto de funciones estndar que dan soporte a las operaciones que se utilizan con ms frecuencia. Estas funciones estn agrupadas en bibliotecas. Para utilizar cualquiera de las funciones que forman parte de las bibliotecas estndar de C, slo hace falta realizar una llamada a dicha funcin. Las funciones que forman parte de la biblioteca estndar de C, funciones estndar o predefinidas, estn divididas en grupos. Todas las funciones que pertenecen a un mismo grupo se definen en el mismo fichero de cabecera. Los nombres de los ficheros cabeceras de C se muestran en la siguiente tabla:assert limits signal stdlib ctype locale stdarg string errno math stddef time float setjmp stdio

Tabla 3.1. Nombre de los ficheros cabecera.

Cuando deseamos utilizar cualquiera de las funciones estndar de C, primero debemos utilizar la directiva de precompilacin #include para incluir los ficheros cabecera en nuestro programa. Por otra parte, antes de utilizar una funcin, primero debemos conocer las caractersticas de dicha funcin, es decir, el nmero y tipo de datos de sus argumentos y el tipo de valor que devuelve. Esta informacin es proporcionada por los prototipos de funcin. Los grupos de funciones estndar ms comunes son: entrada/salida estndar matemticas de conversin diagnstico de manipulacin de memoria control de proceso ordenacin directorios fecha y hora bsqueda manipulacin de cadenas grficos etctera

Podemos incluir tantos ficheros de cabecera como nos haga falta, incluyendo los ficheros de cabecera que hemos creado y donde hemos definido nuestras funciones. En el resto de este apartado veremos algunas de las funciones de la entrada/salida estndar ms utilizadas.

91

3. Funciones en C3.14 Entrada/salida estndar

3.14 Entrada/salida estndarHasta ahora hemos utilizado la funcin printf para escribir datos en la salida estndar del ordenador (consola). Sin embargo, no es la nica funcin para la salida de datos en C. De la misma manera, al igual que existen funciones para la salida de datos, existen funciones para la entrada de los mismos, entre las que se encuentra la funcin scanf. La funcin printf es la salida genrica por consola que es utilizada por cualquier compilador de C. Por otra parte, la entrada estndar, que generalmente es por teclado, se realiza mediante la funcin scanf. Tanto la funcin printf como la funcin scanf permiten especificar el formato en que se van a escribir o leer los datos. Esto se conoce como entrada/salida formateada. C proporciona otros mecanismos de entrada/salida menos sofisticados que permiten leer o escribir simplemente un carcter por la entrada/salida estndar. Esto se realiza mediante las funciones getchar y putchar.

A. La funcin printfComo ya hemos visto a lo largo de esta unidad y de unidades anteriores, la funcin printf bsicamente imprime una cadena de caracteres sobre la pantalla del ordenador. Tanto esta funcin como otras funciones de entrada/salida estn definidas en la biblioteca stdio. Por esta razn, cada vez que deseamos hacer uso de la misma tenemos que incluir el fichero stdio.h mediante la directiva de precompilacin #include . La sintaxis de la funcin printf es la siguiente:printf("cadena de control", lista de argumentos);

La cadena de control contiene los especificadores de formato de los argumentos. stos le indican a printf cmo han de visualizarse los argumentos por pantalla y su nmero. Despus de la cadena de control, aparecen los argumentos de la funcin separados por comas. El la Tabla 3.2 mostramos algunos de los especificadores de formato utilizados en funcin printf.Tabla 3.2. Especificadores de formato.

Especificador%c %d %e %f Carcter Decimal Notacin cientfica

Tipo de argumento

Decimal en coma flotante

92

3. Funciones en C3.14 Entrada/salida estndar

Especificador%g %o %s %u %i %x %X

Tipo de argumentoUsar %e o %f, el que resulte ms corto Octal Cadena de caracteres Decimal sin signo (unsigned) Entero Hexadecimal

La cadena de control puede contener tanto caracteres a imprimir como especificadores de formato de los argumentos de la funcin. Los especificadores de formato pueden aparecer en cualquier parte de la cadena de control. Cuando se llama a la funcin printf, lo primero que hace es analizar la cadena de control. Aquellos caracteres imprimibles que no estn precedidos por un smbolo de tanto por ciento (%) se muestran por pantalla directamente. Cuando encuentra un especificador de formato dentro de la cadena de control, utiliza ste para determinar cmo se muestra el argumento correspondiente. Debemos tener en cuenta que los especificadores de formato y los argumentos deben coincidir de izquierda a derecha. Por otra parte, el nmero de especificadores en la cadena de control le indican a printf cuntos argumentos debe esperar. El smbolo % se utiliza para identificar los especificadores de formato. Si queremos imprimir este smbolo dentro de la cadena de control, tendremos que utilizar dos smbolos de tanto por ciento (%%). Cuando deseamos imprimir un argumento de tipo carcter que utiliza el especificador de formato %c, ste debe ir encerrado entre comillas simples, por ejemplo, 'b'. Por otro lado, si lo que deseamos imprimir es una cadena de caracteres que utiliza el especificador de formato %s, sta debe ir encerrada entre comillas dobles, por ejemplo "esto es una cadena de caracteres". Por otra parte, es muy comn la utilizacin de secuencias de escape dentro de la funcin printf, por ejemplo, el salto de lnea (\n). En la unidad anterior hemos visto las secuencias de escape y su utilizacin en C.

B. La funcin scanfUn programa puede recibir datos a travs de diversas fuentes, por ejemplo el teclado o ficheros almacenados en disco. En este apartado, vamos a considerar la entrada estndar por teclado. La funcin de entrada ms utilizada es la funcin scanf ya que es verstil y permite una entrada con formato. Al igual que la funcin printf, la funcin scanf est definida en el fichero de cabecera

93

3. Funciones en C3.14 Entrada/salida estndar

stdio.h. En trminos generales, scanf permite leer datos de la entrada estndar, de acuerdo con el formato especificado en el primer argumento y almacenar estos datos en las variables que recibe como argumento. La sintaxis de esta funcin es la siguiente:scanf ("cadena de control", lista de argumentos);

Donde la cadena de control contiene los tipos de datos y, si se lo desea, la anchura de los mismos, mientras que la lista de argumentos son las variables del tipo indicado por los especificadores de formato. Los especificadores de formato ms comunes son los que hemos utilizado en la funcin printf, salvo %h que se utiliza para indicar el tipo de enteros short. A diferencia de la funcin printf que recibe los argumentos por valor, la funcin scanf recibe los argumentos por referencia. De esta manera, puede rellenarlos con los valores ledos. Por ejemplo, la siguiente sentencia devolver en la variable dato el entero ledo del teclado:scanf("%i", &dato);

Ejemplo prctico6

Un programa que pide que se introduzcan dos cantidades, una entera y otra en coma flotante, y los escribe a continuacin dentro de una frase.

#include main ( ) { int edad; char sexo; printf ("Escriba su edad (en aos) y sexo (H o M):\n"); scanf ("%i %c", &edad, &sexo) ; printf("Su sexo es %c y su edad %i aos\n", sexo, edad); return 0; }

Si introducimos por teclado 30 y H, la salida es:Su sexo es H y su edad 30 aos

C. Otras funciones de entrada/salidaExisten otras funciones de entrada/salida estndar definidas en el fichero de cabecera stdio.h. Entre estas funciones estn las funciones getchar y putchar. La funcin getchar nos permite leer caracteres uno a uno. Esta funcin no requiere argu-

94

3. Funciones en C3.14 Entrada/salida estndar

mentos y simplemente devuelve el carcter ledo por la entrada estndar en forma de entero sin signo. El prototipo de esta funcin es:int getchar (void);

Por otra parte, la funcin putchar es la funcin simtrica a getchar. Esta funcin recibe un nico argumento que es el carcter que se imprimir por la salida estndar. Su prototipo es:int putchar (int);

Ejemplo prctico7

En el siguiente ejemplo se muestra la utilizacin de las funciones getchar y putchar.

#include main ( ) { char x; printf("Introduzca un carcter:\n"); x = getchar( ) ; printf("El carcter introducido es:\n"); putchar (x) ; return 0; }

La salida es:Introduzca un carcter 6 El carcter introducido es: 6

Existen en C otras funciones de entrada/salida por consola que iremos viendo a lo largo del desarrollo de este libro. Entre esas funciones podemos mencionar las siguientes: getch: Leer un carcter sin que aparezca en pantalla.

getche: Lee un carcter visualizndolo en pantalla. gets: puts: Leer una cadena de caracteres. Escribir una cadena de caracteres

95

3. Funciones en C3.14 Entrada/salida estndar

Ejemplo prctico8

El siguiente programa lee 10 caracteres por teclado y luego los imprime en una tabla en orden inverso acompaados de sus respectivos cdigos ASCII.

#include char caracteres[10]; int i; main() { for(i=0; i=0;i){ putchar(caracteres[i]); printf("\t\t"); /* imprime dos tabulaciones */ printf("%d",caracteres[i]); printf("\n"); } return 0; }

Suponiendo que introducimos las 10 primeras letras del alfabeto, la salida es:*********************************** CARCTER CDIGO ASCII j 106 i 105 h 104 g 103 f 102 e 101 d 100 c 99 b 98 a 97

96

3. Funciones en CEjercicios

Ejercicios

1

Escribe un programa en C que implemente y haga uso de una funcin que calcule el factorial de un nmero entero para determinar los posibles podios que pueden darse en una carrera entre 8 corredores. Utiliza la frmula de variacin:

2

Escribe un programa en C que permita calcular la probabilidad de que aparezcan las figuras al escoger tres cartas de entre las de un palo de la baraja. Utiliza la frmula de combinacin:

3

Calcula el Mximo Comn Divisor (MCD) de dos nmeros ledos por teclado utilizando una funcin sigprimo(num,comienzo) que devuelva el siguiente divisor primo de num mayor que comienzo. Calcula el Mnimo Comn Mltiplo (MCM) de dos nmeros ledos por teclado utilizando una funcin sigprimo(num,comienzo) que devuelva el siguiente divisor primo de num mayor que comienzo.Ejemplo (problemas 3 y 4) Nmeros: 120, 144 120=23x3x5 144=24x32 mcd= mcm= 23x3 = 24 24x32x5= 720

4

5

Escribe un programa que implemente y utilice una funcin para determinar si un nmero es positivo o negativo. Lee un nmero entero por teclado e imprime por pantalla si el nmero ledo es positivo o negativo haciendo uso de la funcin definida. Realiza una funcin que, dada una cadena de caracteres y un carcter, devuelva el nmero de apariciones de dicho carcter en la cadena. Realiza un programa que lea una cadena de caracteres por teclado y escriba por pantalla el nmero de apariciones en la cadena de cada una de las vocales haciendo uso de la funcin definida.

6

97

3. Funciones en CEvaluacin

Evaluacin

1 2 3 4 5 6 7 8 9 10

Qu es una funcin? Qu es la llamada a una funcin? Cul es la diferencia entre argumentos formales y argumentos reales? La instruccin return slo puede aparecer una vez dentro de una funcin? Podemos llamar a una funcin ms de una vez desde distintas partes de un programa? Qu diferencia existe entre el paso de argumentos por valor y el paso de argumentos por referencia? De qu se vale C para implementar el paso de argumentos por referencia? Cundo es recursiva una funcin? Qu son las funciones de biblioteca? Cmo se pasan los argumentos a la funcin scanf?

98

3. Funciones en CActividades prcticas

Actividades prcticas

1

Escribe un programa en C que simule una pequea calculadora que implementa las siguientes operaciones: Multiplicacin Suma Resta Divisin Potencia Raz

Todas las operaciones deben ser implementadas como funciones. La seleccin de la operacin se realizar mediante un pequeo men desplegado por pantalla. Cada operacin utilizar dos operandos.2

Se tiene una matriz de temperaturas (valores reales positivos y negativos) en distintos puntos medidas en distintos das (matriz n x m, siendo n, el nmero de puntos, y m el nmero de das). Calcula la media y la dispersin de temperatura en cada uno de esos das. La dispersin es la raz cuadrada de la varianza, y la varianza a su vez se calcula de la siguiente forma:1 n

i=1

n

(x - x )

2

2

donde

x

corresponde a la media y xi a cada uno de los elementos.

Desarrolla un programa en C que contenga una funcin que reciba como argumento un puntero a un vector que contiene todas las temperatura tomadas en un da, o sea un vector de tamao n, y que devuelva en otro vector de tamao 2 la media y la dispersin. Para ello esta funcin se ayudar de otras dos funciones de tipo real que calcularn una la media y la otra la varianza; la primera recibiendo un puntero al vector de temperaturas y la segunda un puntero al vector de temperaturas y la media ya calculada. El programa principal deber, utilizando sucesivas llamadas a la funcin, mostrar por pantalla la media y la dispersin para cada uno de los das (m). Para el problema considera cualquier valor para n y m que quieras, pero ten en cuenta que debe resultar fcil cambiarlos en el programa (uso de constantes).

99