Вы находитесь на странице: 1из 8

1

INGENIERIA ELECTROMECANICA




INTRODUCCION A LA PROGRAMACION.


RESUMEN UNIDAD 4

FUNCIONES



P R E S E N T A:

LUIS ANTONIO MONTES DE OCA NAVA



NUMERO DE CONTROL:

13280715


R E V I S A

ANDREA OLIMPIA NAJERA AVILA.
SEP SNEST DGEST
INSTITUTO TECNOLGICO DE TOLUCA


2
FUNCIONES

Para resolver problemas complejos y/o de gran tamao es conveniente utilizar el
concepto de reduccin de problemas. De esta forma, el problema se descompone
en subproblemas, los cuales a su vez pueden descomponerse en
subsubproblemas, y as continuar hasta que el problema original queda reducido a
un conjunto de actividades bsicas, que no se pueden o no conviene volver a
descomponer. La solucin de cada una de estas actividades bsicas permite,
luego, aplicando razonamiento hacia atrs, la solucin del problema final.
En el lenguaje de programacin C la solucin de un problema se expresa por
medio de un programa; la solucin de un subproblema, por medio de una funcin.
El uso de funciones tiene mltiples ventajas: facilitan la lectura y escritura de los
programas, permiten el trabajo en paralelo diferentes programadores se pueden
encargar de diferentes funciones, facilitan la asignacin de responsabilidades,
permiten que el cdigo de la funcin se escriba solamente una vez y se utilice
tantas veces como sea necesario, facilitan el mantenimiento de los programas,
etc.
De esta manera, un programa en C est constituido por un programa principal y un
conjunto de funciones. El programa principal consta generalmente de pocas
lneas, las cuales pueden ser llamadas a funciones. La llamada a una funcin
indica al procesador que debe continuar con el procesamiento de la funcin. Una
vez que sta concluye, el control regresa al punto de partida en el programa
principal. Por otra parte, la funcin se escribe de forma similar al programa
principal, pero con diferencias principalmente en el encabezado de la misma. Una
funcin resuelve un subproblema de forma independiente y se ejecuta slo cuan-
do recibe una llamada desde el programa principal o desde otras funciones. El
lenguaje de programacin C permite que una funcin pueda incorporar llamadas a
otras funciones.
La comunicacin entre las funciones y el programa principal, al igual que entre las
mismas funciones, se lleva a cabo por medio de parmetros por valor, parmetros
por referencia y variables globales. Estas ltimas son menos utilizadas por
razones de eficiencia y seguridad en la escritura de programas. En los dos ltimos
captulos utilizamos funciones que pertenecen a bibliotecas del lenguaje C. Por
ejemplo, la funcin pow que se encuentra en la biblioteca math.h se ha utilizado en
numerosas ocasiones. Pero cabe aclarar que las funciones que utilizaremos en
este captulo son diferentes, porque tienen la particularidad de que nosotros
mismos las desarrollaremos. Es decir, no se encuentran en ninguna biblioteca del
lenguaje C.



3
Variables locales, globales y estticas
Las variables son objetos que pueden cambiar su valor durante la ejecucin de un
programa. En el lenguaje de programacin C podemos distinguir entre tres tipos
de variables: locales, globales y estticas. Las variables locales son objetos
definidos tanto en el programa principal como en las funciones y su alcance est
limitado solamente al programa principal o a la funcin en la cual estn definidas.
Por ejemplo, cada variable local definida en una funcin comienza a existir slo
cuando se llama a esa funcin, y desaparece cuando el control regresa al
programa principal. Puesto que no retienen su valor, deben ser inicializadas cada
vez que se ejecuta la funcin, de otra forma contendrn basura.
C permite adems definir variables locales a un bloque conjunto de
instrucciones, las cuales desaparecen luego de ejecutar el bloque. Cabe
destacar que las variables locales tienen prioridad sobre las variables globales. Es
decir, si tenemos una variable global entera I y una variable local entera tambin
denominada I en una funcin, cada vez que utilicemos la variable en la funcin
estaremos haciendo referencia a la variable local. Incluso una variable local
definida en un bloque tiene prioridad sobre una variable local definida obviamente
con el mismo nombre en la misma funcin.
Por otra parte, las variables globales son objetos definidos antes del inicio del
programa principal y su alcance es muy amplio, ya que tiene influencia tanto en el
programa principal como en todas las funciones.
Finalmente, las variables estticas son similares a las locales, pero conservan su
valor durante la ejecucin del programa. Es decir, comienzan a existir cuando se
llama a la funcin y conservan su valor aun cuando el control regresa al programa
principal.
En el lenguaje C una funcin se escribe de la siguiente forma:
/* El conjunto de instrucciones muestra la sintaxis de una funcin en el lenguaje C.
*/

tipo-de-resultado Nombre-de-funcin (Parmetros)
{
instrucciones; /* cuerpo de la funcin. */
}
Donde: tipo-de-resultado representa el tipo de resultado que devuelve la funcin
(entero, real, caracter, cadena de caracteres, etc.); si no regresa ningn resultado,
entonces se escribe la palabra reservada void.

4
Nombre-de-funcin representa el nombre de la funcin. Es conveniente utilizar
un nombre representativo de lo que realiza la funcin.
Parmetros se utiliza para indicar la lista de parmetros que recibe la funcin
instrucciones representa, como su nombre lo indica, al conjunto de instrucciones
que pertenecen a la funcin A continuacin presentamos diferentes ejemplos para
clarificar los conceptos anteriores. Cabe destacar que a partir de este captulo, por
cuestiones bsica- mente didcticas y dando por sentado que ya conoces y
puedes desarrollar diagramas de flujo, omitiremos el uso de stos en la solucin
grfica de los diferentes problemas.
EJEMPLO 1
Escribe un programa que calcule, utilizando una funcin, el cubo de los 10
primeros nmeros naturales.
Programa 1
#include <stdio.h>
/* Cubo-1.
El programa calcula el cubo de los 10 primeros nmeros naturales con la ayuda de
una funcin. En la solucin del problema se utiliza una variable global, aunque
esto, como veremos ms adelante, no es muy recomendable. */
int cubo(void); /* Prototipo de funcin. */
int I; /* Variable global. */
void main(void)
{
int CUB;
for (I = 1; I <= 10; I++)
{
CUB = cubo(); /* Llamada a la funcin cubo. */
printf(\nEl cubo de %d es: %d, I, CUB);
}
}
int cubo(void) /* Declaracin de la funcin. */
/* La funcin calcula el cubo de la variable global I. */
{
return (I*I*I);
}



5
Observa que la segunda instruccin del programa:
int cubo(void);
es un prototipo de la funcin. Puesto que esta funcin se declara posteriormente,
pero se utiliza en el programa principal, el compilador del lenguaje C requiere estar
enterado de la existencia de la misma. Toma nota de que el tipo de la funcin es
entero (int) y no tiene parmetros. Las funciones pueden regresar resulta- dos de
diferentes tipos de datos o bien no regresar ninguno, en cuyo caso al inicio se
debe incluir la palabra reservada void.
La lnea
int I;
indica que I es una variable global de tipo entero. Observa que la variable global
se defini antes del programa principal.
La instruccin
CUB = cubo();
expresa que el resultado de la funcin cubo() se asigna a la variable local CUB.
Observa la forma de invocar o llamar a la funcin. Cabe destacar que es posible
evitar el uso de la variable local CUB escribiendo el resultado del llamado a
la 4 funcin cubo como se muestra a continuacin:
printf(\nEl cubo de %d es: %d, cubo());
Finalmente, ya en la funcin cubo, la instruccin:
return (I*I*I);
regresa el resultado obtenido al programa principal. Siempre que la funcin es de
un tipo de datos determinado es necesario utilizar un return para regresar tanto el
resultado como el control al programa principal.
A continuacin se muestra el resultado que arroja el programa:
El cubo de 1 es: 3
El cubo de 2 es: 8
El cubo de 3 es: 27
El cubo de 4 es: 64
El cubo de 5 es: 125
El cubo de 6 es: 216
El cubo de 7 es: 343
El cubo de 8 es: 512
El cubo de 9 es: 729
El cubo de 10 es: 1000


6
Parmetros por valor y por referencia
La comunicacin entre las funciones y el programa principal, o bien entre las
mismas funciones, se lleva a cabo mediante variables globales y parmetros por
valor y por referencia. El uso de variables se estudi ampliamente en la seccin
anterior, y en sta nos concentraremos en los parmetros por valor y por
referencia.
Los parmetros por valor permiten pasar datos entre el programa principal y las
funciones, e incluso entre las mismas funciones. En el parmetro se escribe una
copia de la variable original. Si el parmetro sufre una alteracin en la funcin que
lo recibe, la variable original no se ve afectada.
Los parmetros por referencia tambin permiten la comunicacin entre el pro-
grama principal y las funciones, o entre las mismas funciones. Sin embargo, en
este caso, en lugar de escribir una copia de la variable en el parmetro se escribe
la direccin de la misma. Si el parmetro sufre una alteracin en la funcin que lo
recibe, la variable original tambin se ve afectada. En C, las llamadas por
referencia se realizan mediante apuntadores. Un apuntador es una variable que
con- tiene la direccin de otra variable y se representa por medio de operadores
de direccin (&) e indireccin (*).
Observemos a continuacin diferentes ejemplos para clarificar estos conceptos.
EJEMPLO 2
Escribe un programa que calcule el cubo de los 10 primeros nmeros naturales,
utilizando una funcin y realizando la comunicacin mediante parmetros por
valor.
Programa 2
#include <stdio.h>
/* Cubo-3.
El programa calcula el cubo de los 10 primeros nmeros naturales con la
ayuda de una funcin y utilizando parmetros por valor.
int cubo(int); /*
Prototipo
de funcin. El parmetro es de
tipo entero. */
void main(void)

{
int I;
for (I = 1; I <= 10; I++)

printf(\nEl cubo de I es:%d, cubo(I));

7
/* Llamada a la funcin cubo.
El
paso del parmetro es por
valor. */

}

int cubo(int K) /* K es un parmetro por valor de tipo entero. */ /* La funcin calcula
el cubo del parmetro K. */
{
return (K*K*K);
}
Observa que la instruccin:
int cubo(int);
es un prototipo de funcin que informa al compilador que el parmetro que se
utilizar es por valor y de tipo entero.
La siguiente instruccin permite escribir el resultado de la funcin. Observa que el
parmetro que se utiliza es una copia de la variable I.
printf(\nEl cubo de %d es: %d, cubo(I));
Finalmente, ya en la funcin cubo, la instruccin:
return (K*K*K);
regresa el resultado obtenido al programa principal.



Paso de funciones como parmetros
En la prctica encontramos problemas cuyas soluciones se podran formular
fcilmente si pudiramos pasar funciones como parmetros. Por fortuna, en el
lenguaje de programacin C es posible realizar esta actividad, es decir, pasar una
funcin a otra funcin como parmetro por referencia en el parmetro se es-
cribe la direccin de la funcin. Debemos recordar que en C las llamadas por
referencia se llevan a cabo por medio de apuntadores, y un apuntador no es ms
que una variable que contiene la direccin de otra variable o de una funcin y se
representa por medio de los operadores de direccin (&) e indireccin (*). Este
paso de una funcin como parmetro permite que una funcin se transfiera a otra
como si fuera simplemente una variable.



8
EJEMPLO 3
En el siguiente programa pasaremos una funcin a otra funcin como parmetro
por referencia. Nota que la funcin Control recibe como parmetro una funcin.
Dependiendo de cul sea sta, realiza la llamada a la funcin correspondiente
Suma o Resta.

#include <stdio.h>
/* Paso de una funcin como parmetro por referencia. */
int Suma(int X, int Y)
/* La funcin Suma regresa la suma de los parmetros de tipo entero X y Y. */
{
return (X+Y);
}
int Resta(int X, int Y)
/* Esta funcin regresa la resta de los parmetros de tipo entero X y Y. */
{
return (X-Y);
}
int Control(int (*apf) (int, int), int X, int Y)
/* Esta funcin recibe como parmetro otra funcin la direccin y
dependiendo de cul sea sta, llama
a la
funcin Suma
o Resta. */
{
int RES;
RES = (*apf) (X, Y); /* Se llama a
la funcin
Suma o Resta. */
return (RES);
}
void main(void)
{
int R1, R2;
R1 = Control(Suma, 15, 5); /* Se pasa como parmetro la funcin Suma.
*/
R2 = Control(Resta, 10, 4); /* Se pasa como parmetro la funcin
Resta.*/
printf(\nResultado 1: %d, R1);
printf(\nResultado 2: %d, R2);
}

Вам также может понравиться