Está en la página 1de 10

UNIDAD VI.

- PROCEDIMIENTOS Y FUNCIONES

TIEMPO APROXIMADO: 23 Horas

OBJETIVO DE LA UNIDAD: Conocer las partes que integran los subprogramas.

CONTENIDO
6.1 La importancia de las funciones
6.2 Funciones sin parámetros
6.3 Funciones que reciben y devuelven parámetros
6.4 Prototipos
6.5 Transferencia de parámetros desde el sistema operativo
6.6 Definición de subprogramas
6.7 Funcionamiento de subprogramas
6.8 Manipulación de subprogramas
6.1 La importancia de las funciones

Las funciones dividen tareas grandes de computación en varias más pequeñas, y permiten
la posibilidad de construir sobre lo que otros ya han hecho, en lugar de comenzar desde cero. Las
funciones apropiadas ocultan los detalles de operación de las partes del programa que no
necesitan saber acerca de ellos, así que dan claridad a la totalidad y facilitan la penosa tarea de
hacer cambios.
El lenguaje C se diseñó para hacer que las funciones fueran eficientes y fáciles de usar; los
programas escritos en C se componen de muchas funciones pequeñas en lugar de sólo algunas
grandes. Un programa puede residir en uno o más archivos fuente, los cuales pueden compilarse
por separado y cargarse junto con funciones de biblioteca previamente compiladas.
La declaración y definición de funciones es el área donde el estándar ANSI ha hecho los
cambios más visibles a C.
La mayor parte de los programas de cómputo que resuelven problemas de la vida real, son
mucho más complejos de lo que podríamos creer, la experiencia ha demostrado que la mejor forma
de desarrollar y mantener un programa grande es construirlo a partir de piezas menores o
módulos, siendo cada una de ellas más fácil de manipular que el programa original. Ésta técnica se
conoce como divide y vencerás.

6.2 Funciones sin parámetros


La forma general de la definición de una función es:

tipo_regresado nombre_función(lista_parámetros)
{
cuerpo_de_la_función
}

Siendo tipo_regresado, el tipo de dato devuelto por la función. Si no se especifica ningún


tipo, el compilador interpreta que se devuelve un entero; también se puede regresar nada usando
void. nombre_función representa el nombre dado a la función. Y lista_parámetros son los
argumentos que toma la función. El cuerpo de una función es privado a esa función y sólo se
puede acceder a él mediante una llamada a ésa función. Las variables definidas dentro de una
función son locales (a no ser que las definamos como globales) por lo que no conservan su valor
de una llamada a otra (excepto si se declaran como static, entonces el compilador no las destruye
y almacena su valor para la próxima llamada, aunque la variable tiene limitado el ámbito al interior
de la función).
En C todas las funciones están al mismo nivel, es decir, no se puede definir una función
dentro de otra función. Esto es por lo que C no es técnicamente un lenguaje estructurado por
bloques.
Pero en algunas ocasiones pueden omitirse algunos elementos que componen una función y son
válidas como la siguiente:

nada(){}

El tipo que se devuelve se considera entero y no recibe ningún parámetro, este tipo de
funciones es útil cuando se reserva lugar al desarrollar un programa.

En ésta sección abordaremos las funciones que no reciben ningún valor como argumento.

Cada función debe limitarse a ejecutar una tarea sencilla y bien definida, y el nombre de la
función debería expresar de forma clara dicha tarea. Ello facilitará la abstracción y promovería la
reutilización del software. Si no puede elegir un nombre conciso, que exprese lo que la función
ejecuta, es probable que su función esté intentando ejecutar demasiadas tareas diversas. A
menudo es mejor dividir dicha función en varias funciones más pequeñas.

En las librerías estándar de los compiladores de lenguaje C existen numerosas funciones


que no reciben ningún parámetro y es que hay muchas ocasiones en la que no hay necesidad de
pasar ningún argumento a una función. Por ejemplo, hablemos de una función que forma parte de
la librería <conio.h> (solo windows), la función clrscr(), ésta función limpia la pantalla de trabajo,
es una función que no necesita ningún parámetro, en cambio, si reescribiéramos ésta función de
tal manera que solo se limpie parte de la pantalla podríamos requerir que se pasen las
coordenadas de inicio y fin que se necesite limpiar.

Cuando una función no recibe ningún valor, la lista de parámetros es void. Ejemplo:

void print_hola(){ printf(“Hola”); }


Ésta función no recibe ningún parámetro como argumento y solo imprime la cadena “Hola”.
Esta función puede reescribirse así:

void print_hola (void){ printf(“Hola”); }

Cuando una función no recibe parámetros puede omitirse el tipo void o si se prefiere
puede escribirse.
El determinar si una función debe o no recibir parámetros está a disposición del
programador y sus buenas prácticas de programación.

6.3 Funciones que reciben y devuelven parámetros

La comunicación entre funciones es por argumentos o también llamados parámetros y


valores regresados por las funciones, y a través de variables externas. Las funciones pueden
presentarse en cualquier orden dentro del archivo fuente, y el programa fuente se puede dividir en
varios archivos, mientras las funciones no se dividan.

La proposición return
La proposición return es el mecanismo para que la función que se llama regrese un valor a
su invocador. Al return le puede seguir cualquier expresión.

return expresión;

La expresión se convertirá al tipo de retorno de la función si es necesario. Con frecuencia se


utilizan paréntesis para encerrar la expresión, pero son optativos.
La función que llama tiene la libertad de ignorar el valor regresado. Incluso, no hay
necesidad de una expresión después de return; en tal caso, ningún valor regresa al invocador.
También el control regresa, sin valor, cuando la ejecución cae al final de la función al alcanzar la
llave derecha que cierra. No es ilegal, aunque probablemente un signo de problemas, el que una
función regrese un valor desde un lugar y ninguno desde otro. En cualquier caso, si una función no
regresa explícitamente un valor, su “valor” es ciertamente basura.
Es importante mencionar que un return no debe ir solamente al final de la función, puede ir
en cualquier parte de ella, pues el compilador cuando encuentre una proposición return terminará
la ejecución de la función y regresara el control del programa a su invocador en el punto en que fue
llamado.

Si una función va a usar argumentos, debe declarar variables que acepten los valores de
los argumentos. Éstas variables se llaman parámetros formales de la función y se comportan como
variables locales dentro de la función, creándose al entrar en la función y destruyéndose al salir. La
declaración de parámetros aparece después del nombre de la función al definirla.

Los parámetros formales tienen que ser del mismo tipo que los argumentos usados al
llamar una función (el compilador no dará error pero los resultados serán inesperados).

Al igual que con variables locales, se pueden hacer asignaciones a los parámetros de una
función o usarlos en cualquier expresión válida. Se pueden usar como cualquier otra variable.
Ejemplo:

Y no sólo se pueden pasar o devolver valores enteros, también hay funciones que pueden
recibir otros tipos de valores y a su vez retornar otros valores. Muchas funciones numéricas como
sqrt (para calcular la raíz cuadrada), sin (seno) y cos (coseno) regresan double.
Llamadas a funciones
Lo que hasta aquí hemos visto nos sirve solamente para definir funciones, pero aún no
hemos considerado como hacer uso de ellas en los programas. Para poder usar una función que
ya ha sido definida es necesario invocar la función o hacer una llamada a la función.
Las funciones son llamadas para su ejecución desde cualquier parte del código, teniendo
en cuenta que antes deben haber sido declaradas y definidas.
La llamada de una función se produce mediante el uso de su nombre en una sentencia, pasando
una lista de argumentos que deben coincidir en número y tipo con los especificados en la
declaración. Si la función retorna un valor podemos asignarlo a alguna variable, si no, podemos
ignorar el valor de retorno.

Llamadas por valor y por referencia


Si una función usa argumentos (parámetros), estos se comportan como variables locales de la
función.
Se pueden pasar argumentos a las funciones de dos formas: por valor o por referencia.

Por valor: Este método copia el valor de un argumento en el parámetro formal de la función. De
esta forma, los cambios en los parámetros de la función no afectan a las variables que se usan
en la llamada.
main()
{
int t=10;
printf(“%d %d”, cuad(t), t);
}
int cuad(int x)
{
x=x*x;
return (x);
}
Por referencia: Este método copia la dirección del argumento en el parámetro de la función. De
esta forma, los cambios hechos a los parámetros afectan a la variable usada en la llamada.
Para usar este tipo de paso de argumentos es necesario usar apuntadores, estos se podrán
explicar en apartados más adelante, aquí sólo es importante saber que existe la posibilidad de
modificar los datos que se pasan, dentro de la función.
main()
{
int x=10, y=20;
printf(“X=%d e Y=%d”,x, y);
inter(&x,&y);
printf(“X=%d e Y=%d”,x,y);
}
void inter(int *p, int *q)
{
int temp;
temp=*p; *p=*q; *q=temp;
}

6.4 Prototipos

Ejemplo:
6.5 Transferencia de parámetros desde el sistema operativo
Los detalles de las líneas de código del programa son insignificantes para este momento, lo
interesante aquí es la transferencia de argumentos al programa desde la línea de órdenes. Es
importante recordar que la línea de órdenes a la que nos referimos puede ser el MS-DOS o cmd de
Windows o la consola de Linux.

6.6 Definición de subprogramas

6.7 Funcionamiento de subprogramas

6.8 Manipulación de subprogramas

Los 3 temas anteriores ya fueron considerados en temas anteriores.

También podría gustarte