Está en la página 1de 8

Ingeniera Mecnica y Automotriz

Informtica II

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.

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz

Informtica II

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.

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz

Informtica II

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;

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz

Informtica II

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. */

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz

Informtica II

#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];

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz PROBLEMAS PROPUESTOS 1


1.

Informtica II

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. 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. 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? 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. Escriba una funcin llamada magnitud que tenga cuatro parmetros de entrada llamados x1, x2, y1, y2 y que entregue como resultado la distancia entre dos puntos cuyas coordenadas son (x1, y1) y (x2, y2) segn la siguiente frmula:

3.

4.

5.

6.

dist = ( y 2 y1 ) 2 + ( x 2 x1 ) 2
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.

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz

Informtica II

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. Una funcin con dos parmetros reales que calcule el rea de un rectngulo de base y altura dadas.

b)

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. 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. Escribe una funcin que devuelva el (a) factorial, (b) n-simo nmero de Fibonacci, de su argumento. Escribe una funcin que diga si sus dos argumentos son mltiplo el uno del otro (no importa cul de cul). 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.

9.

10. 11. 12.

13. 14.

Escribe una funcin que devuelva el n-smo nmero primo (1 es el primero), recibiendo n como argumento. Escribe una funcin que escriba los nmeros primos hasta el numero que se le pasa como parmetro.

Ing. Alberto Moreno C.

Ingeniera Mecnica y Automotriz

Informtica II

Ing. Alberto Moreno C.

También podría gustarte