Está en la página 1de 8

Ingeniera Mecnica y Automotriz 1 Informtica II

Ing. Alberto Moreno C.


CAPITULO 1.- FUNCIONES
Tiempo de vida de los datos
Segn el lugar donde son declaradas puede haber dos tipos de variables.
Globales: las variables permanecen activas durante todo el programa. Se crean
al iniciarse ste y se destruyen de la memoria al finalizar. Pueden ser utilizadas en
cualquier funcin.
Locales: las variables son creadas cuando el programa llega a la funcin en la
que estn definidas. Al finalizar la funcin desaparecen de la memoria.
Si dos variables, una global y una local, tienen el mismo nombre, la local
prevalecer sobre la global dentro de la funcin en que ha sido declarada.
Dos variables locales pueden tener el mismo nombre siempre que estn
declaradas en funciones diferentes.
/ * Variables globales y locales. */
#include <iostream.h>
int num1=1;
void main() / * Escribe dos cifras */
{
int num2=10;
cout<<num1<<endl;
cout<<num2;
}
Funciones
Las funciones son bloques de cdigo utilizados para dividir un programa en
partes ms pequeas, cada una de las cules tendr una tarea determinada.
Su sintaxis es:
tipo_funcin nombre_funcin (tipo y nombre de argumentos)
{
bloque de sentencias
}
tipo_funcin: puede ser de cualquier tipo de los que conocemos. El valor
devuelto por la funcin ser de este tipo. Por defecto, es decir, si no indicamos el
tipo, la funcin devolver un valor de tipo entero ( int ). Si no queremos que
retorne ningn valor deberemos indicar el tipo vaco ( void ).
nombre_funcin: es el nombre que le daremos a la funcin.
tipo y nombre de argumentos: son los parmetros que recibe la funcin. Los
argumentos de una funcin no son ms que variables locales que reciben un valor.
Este valor se lo enviamos al hacer la llamada a la funcin. Pueden existir funciones
que no reciban argumentos.
Ingeniera Mecnica y Automotriz 2 Informtica II
Ing. Alberto Moreno C.
bloque de sentencias: es el conjunto de sentencias que sern ejecutadas cuando
se realice la llamada a la funcin.
Las funciones pueden ser llamadas desde la funcin main o desde otras
funciones. Nunca se debe llamar a la funcin main desde otro lugar del programa.
Por ltimo recalcar que los argumentos de la funcin y sus variables locales se
destruirn al finalizar la ejecucin de la misma.
1.3.- Declaracin de las funciones
Al igual que las variables, las funciones tambin han de ser declaradas. Esto es
lo que se conoce como prototipo de una funcin. Para que un programa en C sea
compatible entre distintos compiladores es imprescindible escribir los prototipos de
las funciones.
Los prototipos de las funciones pueden escribirse antes de la funcin main o
bin en otro fichero. En este ltimo caso se lo indicaremos al compilador mediante
la directiva #include.
En el ejemplo adjunto podremos ver la declaracin de una funcin ( prototipo ).
Al no recibir ni retornar ningn valor, est declarada como void en ambos lados.
Tambin vemos que existe una variable global llamada num. Esta variable es
reconocible en todas las funciones del programa. Ya en la funcin main
encontramos una variable local llamada num. Al ser una variable local, sta tendr
preferencia sobre la global. Por tanto la funcin escribir los nmeros 10 y 5.
/ * Declaracin de funciones. */
#include <iostream.h>
void funcion(void); / * prototipo */
int num=5; / * variable global */
void main() / * Escribe dos nmeros */
{
int num=10; / * variable local */
cout<<num<<endl;
funcion(); / * llamada */
}
void funcion(void){
cout<<num;
}
Paso de parmetros a una funcin
Como ya hemos visto, las funciones pueden retornar un valor. Esto se hace
mediante la instruccin return, que finaliza la ejecucin de la funcin, devolviendo
o no un valor.
En una misma funcin podemos tener ms de una instruccin return. La forma
de retornar un valor es la siguiente:
return ( valor o expresin );
El valor devuelto por la funcin debe asignarse a una variable. De lo contrario,
el valor se perder.
Ingeniera Mecnica y Automotriz 3 Informtica II
Ing. Alberto Moreno C.
En el ejemplo puedes ver lo que ocurre si no guardamos el valor en una
variable. Fjate que a la hora de mostrar el resultado de la suma, en el cout,
tambin podemos llamar a la funcin.
/ * Paso de parmetros. */
#include <iostream.h>
int suma(int,int); / * prototipo */
void main() / * Realiza una suma */
{
int a=10,b=25,t;
t=suma(a,b); / * guardamos el valor */
cout<<"a+b=<<t;
}
int suma(int a,int b){
return (a+b);
}
Ahora veremos lo que se conoce como paso de parmetros.
Existen dos formas de enviar parmetros a una funcin:
Por valor: cualquier cambio que se realice dentro de la funcin en el
argumento enviado, NO afectar al valor original de las variables utilizadas en la
llamada. Es como si trabajaramos con una copia, no con el original. No es posible
enviar por valor arrays, deberemos hacerlo por referencia.
Por referencia: lo que hacemos es enviar a la funcin la direccin de memoria
donde se encuentra la variable o dato. Cualquier modificacin SI afectar a las
variables utilizadas en la llamada. Trabajamos directamente con el original.
/ * Paso por valor. */
#include <iostream.h>
void intercambio(int,int);
void main() / * Intercambio de valores */
{
int a=1,b=2;
cout<<"a=<<a<<endl;
cout<<b=<<b<<endl;
intercambio(a,b); / * llamada */
cout<<a<< , <<b;
}
void intercambio (int x,int y)
{
int aux;
aux=x;
x=y;
y=aux;
cout<<"a=<<x<<endl;
cout<<b=<<y<<endl;
}
Ingeniera Mecnica y Automotriz 4 Informtica II
Ing. Alberto Moreno C.
Para enviar un valor por referencia se utiliza el smbolo & ( ampersand ) delante de
la variable enviada. Esto le indica al compilador que la funcin que se ejecutar
tendra que obtener la direccin de memoria en que se encuentra la variable.
Vamos a fijarnos en los ejemplos. En el ejemplo anterior podrs comprobar que
antes y despus de la llamada, las variables mantienen su valor. Solamente se
modifica en la funcin intercambio ( paso por valor ).
En el siguiente ejemplo podrs ver como las variables intercambian su valor tras
la llamada de la funcin ( paso por referencia ).
Las variables con un * son conocidas como punteros, el nico dato en 'C' que
puede almacenar una direccin de memoria.
/ * Paso por referencia. */
#include <iostream.h>
void intercambio(int *,int *);
void main() / * Intercambio de valores */
{
int a=1,b=2;
cout<<"a=a<<endl;
cout<<b=<<b<<endl;
intercambio(&a,&b); / * llamada */
}
void intercambio (int *x,int *y)
{
int aux;
aux=*x;
*x=*y;
*y=aux;
cout<<"a=<<*x<< , <<b=<<*y;
}
Los argumentos de la funcin main
Ya hemos visto que las funciones pueden recibir argumentos. Pues bin, la
funcin main no poda ser menos y tambin puede recibir argumentos, en este
caso desde el exterior.
Los argumentos que puede recibir son:
argc: es un contador. Su valor es igual al nmero de argumentos escritos en la
lnea de comandos, contando el nombre del programa que es el primer argumento.
argv: es un puntero a un array de cadenas de caracteres que contiene los
argumentos, uno por cadena.
En este ejemplo vamos a ver un pequeo programa que escribir un saludo por
pantalla (Programa : ARGUMENTO.C).
/ * Argumentos de la main. */
Ingeniera Mecnica y Automotriz 5 Informtica II
Ing. Alberto Moreno C.
#include <iostream.h>
main(int argc,char *argv[]) / * argumentos */
{
cout<<"\ nCurso de Programacin en C\ n";
cout<<"Programa de ejemplo.\ n\ n";
if (argc<2)
{
cout<<"Teclee: ARGUMENTO su_nombre";
exit(1); / * fin */
}
cout<<"Hola:<<argv[1];
}
Ingeniera Mecnica y Automotriz 6 Informtica II
Ing. Alberto Moreno C.
PROBLEMAS PROPUESTOS 1
1. Especifique el resultado que se obtiene al ejecutar el siguiente programa.
#include <iostream.h>
void velresult (int distancia, int tiempo ) {
float vel;
vel = (float) distancia / tiempo;
cout<<La velocidad Kmph:<<vel;
}
void main ( )
{
int distancia, tiempo;
distancia = 100;
tiempo = 2;
velresult (distancia, tiempo);
velresult (400, 10);
}
2. Escriba una funcin llamada bisuma que calcule la suma de dos variables
num1 y num2 enteras y regrese un resultado entero.
3. Escriba una funcin llamada media_de_3 que reciba como parmetro un
dato entero y lo divida entre 3. Suponga que el dato enviado a la funcin es
el total de sumar 3 nmeros, por lo que el resultado de esta funcin ser la
media de los 3 datos.
4. Escriba un programa completo que lea tres valores enteros para las
variables a, b, c, que enseguida invoque a las funciones bisuma y
media_de_3 de los ejercicios anteriores y que, por ltimo, despliegue el
valor promedio de los tres datos con un mensaje apropiado. Qu cambios
necesitara realizar a las funciones para obtener el promedio de ms de 3
datos?
5. Escriba una funcin llamada cuadrado que tenga un parmetro de entrada
llamado longitud y entregue como resultado el permetro del cuadrado cuyo
lado sea la longitud especificada y su rea. Todas las variables son reales.
6. Escriba una funcin llamada magnitud que tenga cuatro parmetros de
entrada llamados x
1
, x
2
, y
1
, y
2
y que entregue como resultado la distancia
entre dos puntos cuyas coordenadas son (x
1
, y
1
) y (x
2
, y
2
) segn la siguiente
frmula:
2
1 2
2
1 2
) ( ) ( x x y y dist + =
7. Un piso rectangular que mide 12 metros por 15 metros est cubierto
parcialmente por tapetes circulares. El radio de un tapete es un metro. El
radio del otro es de dos metros.
Ingeniera Mecnica y Automotriz 7 Informtica II
Ing. Alberto Moreno C.
Escriba un programa que encuentre el rea de la parte del piso que est
descubierta.
El programa deber tener:
a) Una funcin que reciba como parmetro el radio de un crculo y que
regrese el valor del rea de ese crculo. Suponga que el radio y el
rea son reales.
b) Una funcin con dos parmetros reales que calcule el rea de un
rectngulo de base y altura dadas.
8. Escriba una funcin llamada digfinal que tenga un parmetro de entrada
llamado nmero y que entregue como resultado el dgito de las unidades del
nmero. Por ejemplo, si el nmero es 234, el resultado es 4.
9. Escribe una funcin que tome 3 parmetros: dos de tipo enteros y uno de
tipo carcter. La funcin deber sumar, restar, multiplicar o dividir los
valores de los dos primeros parmetros dependiendo del cdigo indicado en
el tercer parmetro, y devolver el resultado.
10. Escribe una funcin que devuelva el (a) factorial, (b) n-simo nmero de
Fibonacci, de su argumento.
11. Escribe una funcin que diga si sus dos argumentos son mltiplo el uno del
otro (no importa cul de cul).
12. Escribe una funcin que devuelva si su argumento n es o no es primo.
NOTA: Tener en cuenta que basta con probar la divisibilidad por los nmeros
desde el 2 hasta la n . Lo cual ahorra muchas operaciones. Si
adems consideramos que basta con saber si es par o no al principio,
podemos ahorrarnos la mitad de las pruebas de divisores, eliminando
todos los pares. Por fin una ltima mejora, importante, es eliminar los
mltiplos de tres.
13. Escribe una funcin que devuelva el n-smo nmero primo (1 es el primero),
recibiendo n como argumento.
14. Escribe una funcin que escriba los nmeros primos hasta el numero que se
le pasa como parmetro.
Ingeniera Mecnica y Automotriz 8 Informtica II
Ing. Alberto Moreno C.

También podría gustarte