Unidad 6. Mdulos Ing. Hctor Bazarte Torres ITSLP/2014-1 ITSLP/APUNTES DE PROGRAMACIN BSICA
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 1 Unidad 6.- Mdulos 6.1 Diferencia entre Funciones y Procedimientos. 6.2 Activacin / Invocacin de Funciones y Procedimientos 6.3 Uso de Funciones y Procedimientos con Parmetros.
Introduccin
Las funciones son los bloques constructores de C, es el lugar donde se produce toda la actividad del programa. Las funciones realizan una tarea especfica, como mandar a imprimir un mensaje en pantalla, o abrir un archivo. Es la caracterstica ms importante de C. Subdivide en varias tareas el programa, as slo se las tendr que ver con diminutas piezas de programa, de pocas lneas, cuya escritura y correccin es una tarea simple. Las funciones pueden o no devolver y recibir valores del programa. Diseo modular de programas: Descomposicin modular Hasta ahora hemos estado pensando los pasos que deberamos dar para resolver un cierto problema, y hemos creado programas a partir de cada uno de esos pasos. Esto es razonable cuando los problemas son sencillos, pero puede no ser la mejor forma de actuar cuando se trata de algo mas complicado. A partir de ahora vamos a empezar a intentar descomponer los problemas en trozos mas pequeos, que sean mas fciles de resolver. Esto nos puede suponer varias ventajas: Cada trozo de programa independiente ser mas fcil de programar, al realizar una funcin breve y concreta. El programa principal ser mas fcil de leer, porque no necesitara contener todos los detalles de como se hace cada cosa. Podremos repartir el trabajo, para que cada persona se encargue de realizar un trozo de programa, y finalmente se integrara el trabajo individual de cada persona. Esos trozos de programa son lo que suele llamar subrutinas, procedimientos o funciones. En el lenguaje C, el nombre que ms se usa es el de funciones. Concepto y caractersticas Mdulo: Es aqul que est constituido por una o varias instrucciones fsicamente contiguas y lgicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 2 Un mdulo puede ser: Un programa Una funcin Una subrutina (o procedimiento) Caractersticas de un Mdulo Los mdulos deben tener la mxima cohesin y el mnimo acoplamiento. Es decir, deben tener la mxima independencia entre ellos. La salida del mdulo debe ser funcin de la entrada, pero no de ningn estado interno. En la creacin de los mdulos deben cumplirse tres aspectos bsicos: descripcin, rendimiento y diseo. En la descripcin se definen las funciones y objetivos del programa. Para obtener el mximo rendimiento se ha de comprobar que el programa realice el proceso aprovechando al mximo todos los recursos de los que dispone. En cuanto al diseo, se debe comprobar la estructura que sigue el mdulo, as como la estructura de los datos y la forma de comunicaciones entre los diversos y diferentes mdulos. Conforme se extiende el tamao de los algoritmos, se hace ms difcil su revisin, actualizacin y/o correccin. Una poltica comn para solventar este problema consiste en la modularizacin. Esto significa que el algoritmo se fragmenta en partes llamadas mdulos. En realidad, es un mtodo de diseo que tiende a dividir el problema, de forma lgica, en partes perfectamente diferenciadas que pueden ser analizadas, programadas y puestas a punto independiente. Realmente la programacin modular es un intento para disear programas, de forma tal que cualquier funcin lgica pueda ser intercambiada sin afectar a otras partes del programa. Algunas ventajas de utilizar mdulos son: Un programa modular es fcil de mantener y modificar. Un programa modular es ms fcil de escribir y depurar (ejecutar, probar y poner a punto).
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 3 Un programa modular es ms fcil de controlar. El desglose de un problema en mdulos permite encomendar los mdulos ms complejos a los programadores ms experimentados y los ms sencillos a los programadores nveles. Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas. Desventajas del uso de mdulos: No se dispone de algoritmos formales de modularidad, por lo que a veces los programadores no tienen claras las ideas de los mdulos. La programacin modular requiere ms memoria y tiempo de ejecucin. Objetivos de la programacin modular: Disminuir la complejidad. Aumentar la claridad y fiabilidad. Disminuir el coste. Aumentar el control del proyecto. Facilitar la ampliacin del programa mediante nuevos mdulos. Facilitar las modificaciones y correcciones al quedar automticamente localizadas en un mdulo. Clasificacin de los mdulos Pueden ser de dos tipos: Funciones Procedimientos Estas funciones y procedimientos se escriben solamente una vez, pero pueden ser referenciados (invocadas) en diferentes puntos de un programa, tantas veces como se requiera de modo que se puede evitar la duplicacin innecesaria del cdigo.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 4 6.1 Diferencia entre funcin y procedimiento Las funciones y los procedimientos son conjuntos de instrucciones que realizar una tarea en particular y permiten crear programas complejos, mediante un reparto de tareas que permite construir el programa de forma estructurada y modular.
Desde un punto de vista acadmico, se entiende por procedimiento el conjunto de sentencias a las que se asocia un identificador (un nombre), y que realiza una tarea que se conoce por los cambios que ejerce sobre el conjunto de variables.
Y entendemos por funcin el conjunto de sentencias a las que se asocia un identificador (un nombre) y que genera un valor nuevo, calculado a partir de los argumentos que recibe.
Los elementos que componen un procedimiento o funcin son:
1. Un identificador, que es el nombre que sirve para invocar a esa funcin o a ese procedimiento. 2. Una lista de parmetros, que es el conjunto de variables que se facilitan al procedimiento o funcin para que realice su tarea modularizada. Al hacer la abstraccin del sistema, y modularlo en partes ms accesibles, hay que especificar los parmetros formales que permiten la comunicacin y definen el dominio (tipo de dato) de los datos de entrada. Esa lista de parmetros define el modo en que podrn comunicarse el programa que utiliza la funcin y la funcin usada. 3. Un cuerpo o conjunto de sentencias. Las necesarias para poder realizar la tarea para la que ha sido definida la funcin o el procedimiento. Dentro de las sentencias tambin se encuentran las declaraciones de variables locales. 4. Un entorno. Entendemos por entorno el conjunto de variables globales al procedimiento o funcin, que pueden ser usadas y modificadas dentro del mbito de la funcin. Esas variables, por ser globales y por tanto definidas en un mbito ms amplio al mbito local de la funcin, no necesitan ser explicitadas en la lista de parmetros de la funcin.
Es una prctica desaconsejable trabajar con el entorno de la funcin desde el mbito local de la funcin. Hacerlo lleva consigo que esa funcin deja de ser independiente de ese entorno y, por tanto, deja de ser exportable. Perderamos entonces el valor de la independencia funcional, que es una de las propiedades de la programacin por mdulos.
Podemos pues concluir que el uso de variables globales dentro del cuerpo de un procedimiento ofuncin es altamente desaconsejable.
En el lenguaje C no se habla habitualmente de procedimientos, sino slo de funciones. Pero existen de las dos tipos de mdulos. Procedimientos seran, por ejemplo, la funcin printf no se invoca para calcular valores nuevos, sino para realizar una tarea sobre las variables. Ms claro se ve con la funcin scanf que, efectivamente, realiza una tarea que se conoce por los cambios que ejerce sobre una variable concreta. Y funciones seran, por ejemplo, la funcin strlen, que a partir de una cadena de caracteres que recibe como parmetro de entrada calcula un valor, que es la longitud de esa cadena; o la funcin sin, que a partir de un ngulo que recibe como valor de entrada, calcula el seno de ese ngulo como valor de salida.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 5
En definitiva, una funcin o procedimiento es una porcin de cdigo, identificada con un nombre concreto (su identificador), que realiza una tarea concreta, que puede ser entendida de forma independiente al resto del programa, y que tiene muy bien determinado cmo se hace uso de ella, con qu parmetros se la invoca y bajo qu condiciones puede ser usada, cul es la tarea que lleva a cabo, y cul es el valor que calcula y devuelve.
Tanto los procedimientos como las funciones pueden ser vistos como cajas negras: un cdigo del que desconocemos sus sentencias, al que se le puede suministrar unos datos de entrada y obtener modificaciones para esos valores de entrada y/o el clculo de un nuevo valor, obtenido a partir de los valores que ha recibido como entrada.
Con eso se consigue programas ms cortos; que el cdigo pueda ser usado ms de una vez; mayor facilidad para gestionar un correcto orden de ejecucin de sentencias; que las variables tengan mayor carcter local, y no puedan ser manipuladas fuera del mbito para el que han sido creadas. Funciones Las funciones son bloques de instrucciones que tienen por objeto el alcanzar un resultado que sustituir a la funcin en el punto de invocacin (las funciones devuelven un resultado). Cada funcin se evoca utilizando su nombre en una expresin con los argumentos actuales o reales encerrados entre parntesis. Para hacer una referencia a una funcin se invoca mediante un nombre y en caso de existir, una lista de parmetros actuales necesarios (argumentos). Los argumentos deben coincidir en cantidad, tipo y orden con los de la funcin que fue definida. La funcin devuelve un valor nico. Las funciones a que se hace referencia, se conocen como funciones de usuario puesto que son definidas por l mismo y permiten su uso en forma idntica a las funciones estndares. Para coordinar e iniciar el procesamiento, se utiliza un mdulo principal que es colocado al final del algoritmo. Declaracin de funciones funcin nombre_funcin (par1, par2,par3,...) : tipo_del_resultado Inicio accin1 accin2
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 6 : nombre_funcin Resultado_Obtenido Fin
Donde: par1,par2 .... Lista de parmetros formales o argumentos. nombre_funcin Nombre asociado de la funcin, que ser un nombre de identificador vlido. accin1, accin2,.. Instrucciones que constituyen la definicin de las funcin, y que debe contener una accin sola de asignacin que asigne un valor al nombre de la funcin. Ejemplo: Obtener el sexto carcter de un nombre y si dicho carcter no existe, se asumir un asterisco como tal. Funcin SEXTO(n:string):carcter Inicio si longitud(n) >= 6 entonces SEXTO Subcadena(n,6,1) en caso contrario SEXTO * Fin Invocacin a las funciones Una funcin puede ser llamada slo mediante referencia de la forma siguiente: nombre_funcin (lista de parmetros actuales)
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 7 Donde: nombre_funcin Funcin que llama. Lista de param. actuales Constantes, variables, expresiones, valores de funciones, nombres de funciones o procedimientos. Una llamada a la funcin implica los siguientes pasos: A cada parmetro formal se le asigna el valor real de su correspondiente parmetro actual (esta correspondencia se ver ms tarde y se denomina llamada por valor).
Se ejecuta el cuerpo de acciones de la funcin.
Se devuelve el valor de la funcin y se retorna al punto de llamada. Ejercicio: Calcular la potencia de un nmero. funcion POTENCIA(x,n :entero): entero Inicio y 1 Desde i 1 hasta abs(n) hacer y y*x fin Desde si n < 0 entonces y 1/y Fin si POTENCIA y Fin
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 8 Operacin de Mdulos y sus Parmetros PASO DE PARAMETROS Existen diferentes mtodos para el paso de parmetros a subprogramas, un mismo programa puede producir diferentes resultados bajo diferentes sistemas de paso de parmetros. Los parmetros se clasifican de la siguiente manera: 1. Entradas: Las entradas proporcionan valores desde el programa que llama y que se utilizan dentro de un procedimiento. En los subprogramas funcin las entradas son los argumentos en el sentido tradicional. 2. Salidas: Las salidas producen los resultados del subprograma; de nuevo si se utiliza el caso una funcin, mientras que con procedimientos pueden calcularse cero, una o varias salidas. 3. Entradas/Salidas: Un solo parmetro se utiliza para mandar argumentos a un programa y para devolver resultados. Los mtodos ms empleados para realizar el paso de parmetros son: Paso por valor (parmetro valor). Paso por referencia o direccin (parmetro variable). PASO POR VALOR Se utiliza en muchos lenguajes de programacin (pascal, basic, modula-2, algol, etc), debido a su analoga con los argumentos de una funcin, donde los valores se proporcionan en el orden de clculo de resultados. Los parmetros se tratan como variables locales y los valores iniciales se proporcionan copiando los valores de los correspondientes argumentos. Los parmetros formales (locales a la funcin), reciben como valores iniciales los valores de los parmetros actuales y con ello se ejecutan las acciones descritas en el subprograma. La llamada por valor no devuelve informacin al programa que llama. PASO POR REFERENCIA Se utiliza cuando se requiere que ciertos parmetros sirvan como parmetros de salida, es decir, devuelvan los resultados a la unidad o programas que llama. La unidad que llama pasa a la unidad llamada la direccin del parmetro actual (que est en el mbito de la
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 9 unidad llamante). Una referencia al correspondiente parmetro formal se tratra como una referncia a la posicin de memoria, cuya direccin se ha pasado. Entonces una variable pasada como parmetro real es compartida, es decir, se puede modificar directamente por el subprograma. Si el parmetro actual es una expresin, el subprograma recibe la direccin de la posicin temporal que contiene el valor de la expresin.
6.4 Funciones definidas por el usuario
El mecanismo para trabajar con funciones es el siguiente, primero debemos declarar el prototipo de la funcin, a continuacin debemos hacer la llamada y por ltimo desarrollar la funcin. Los dos ltimos pasos pueden cambiar, es decir, no es necesario que el desarrollo de la funcin est debajo de la llamada.
Antes de seguir debemos conocer las reglas de mbito de las funciones. El cdigo de una funcin es privado a ella, el cdigo que comprende su cuerpo est oculto al resto del programa a menos que se haga a travs de una llamada. Todas las variables que se definen dentro de una funcin son locales con excepcin de las variables estticas.
SINTAXIS DEL PROTOTIPO:
tipo_devuelto nombre_funcion ([parmetros]);
SINTAXIS DE LA LLAMADA:
nombre_funcion ([parmetros]);
SINTAXIS DEL DESARROLLO:
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 11
La funcin primer_mensaje despliega un mensaje en pantalla, esta funcin es llamada desde la funcin principal o main (). Cuando se declaran las funciones es necesario informar al compilador el tamao de los valores que se le enviarn y el tamao del valor que retorna. En el caso de no indicar nada para el valor devuelto toma por defecto el valor int.
Al llamar a una funcin se puede hacer la llamada por valor o por referencia. En el caso de hacerla por valor se copia el contenido del argumento al parmetro de la funcin, es decir, si se producen cambios en el parmetro no afecta a los argumentos. C utiliza esta llamada por defecto. Cuando se utiliza la llamada por referencia lo que se pasa a la funcin es la direccin de memoria del argumento, por tanto, si se producen cambios, afectan tambin al argumento. La llamada a una funcin se puede hacer tantas veces como se quiera.
PRIMER TIPO: Las funciones de este tipo ni devuelven valor ni se les pasan parmetros. En este caso hay que indicarle que el valor que devuelve es de tipo void, y para indicarle que no recibir parmetros tambin utilizamos el tipo void. Cuando realizamos la llamada no hace falta indicarle nada, se abren y cierran los parntesis.
void nombre_funcion (void); nombre_funcion();
Ejercicio 4.6. El siguiente programa es muy similar al anterior, este tipo de funciones no tienen parmetros ni devuelven ningn valor.
#include <stdio.h> #include <conio.h> void mostrar(void); void main(void) { printf("Estoy en la principal\n");
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 12 mostrar(); printf("De vuelta en la principal"); getch(); } void mostrar(void) { printf("Ahora he pasado a la funcin, presione cualquier tecla\n"); getch(); }
SEGUNDO TIPO: Son funciones que devuelven un valor una vez que han terminado de realizar sus operaciones, slo se puede devolver uno. La devolucin se realiza mediante la sentencia return, que adems de devolver un valor hace que la ejecucin del programa vuelva al cdigo que llam a esa funcin. Al compilador hay que indicarle el tipo de valor que se va a devolver poniendo delante del nombre de la funcin el tipo a devolver. En este tipo de casos la funcin es como si fuera una variable, pues toda ella equivale al valor que devuelve.
Este programa calcula la suma de dos nmeros introducidos por el usuario, la funcin suma () devuelve el resultado de la operacin a la funcin principal a travs de la funcin return ().
#include <stdio.h> #include <conio.h>
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 13 int suma(void); void main(void) { int total; printf("Suma valores\n"); total=suma(); printf("\n%d",total); getch(); } int suma(void) { int a,b,total_dev; printf("valores: "); scanf("%d %d",&a,&b); total_dev=a+b; return total_dev; }
TERCER TIPO: En este tipo las funciones pueden o no devolver valores pero lo importante es que las funciones pueden recibir valores. Hay que indicar al compilador cuntos valores recibe y de qu tipo es cada uno de ellos. Se le indica ponindolo en los parntesis que tienen las funciones. Deben ser los mismos que en el prototipo.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 14 Este programa utiliza una funcin de nombre resta(), que tiene dos parmetros, los parmetros son los operandos de una resta, adems la funcin devuelve el resultado de la operacin a la funcin principal a travs de la funcin return().
#include<stdio.h> int resta(int x, int y); /*prototipo de la funcin*/ main() { int a=5; int b=93; int c; c=resta(a,b); printf("La diferencia es: %d\n",c); return(0); } int resta(int x, int y) /*declaracion de la funcin*/ { int z; z=y-x; return(z); /*tipo devuelto por la funcin*/ }
Ejercicio 4.9. Realiza un programa que lea un nmero entero y determine si es par o impar.
/*Lee un numero entero y determina si es par o impar */ #include <stdio.h> #define MOD %
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 15 /* %, es el operador que obtiene el resto de la divisin entera */ #define EQ == #define NE != #define SI 1 #define NO 0 void main ( ) { int n, es_impar(int); printf ("Introduzca un entero: \n"); scanf ("%d", &n); if ( es_impar (n) EQ SI ) printf ("El numero %d es impar. \n", n); else printf ("El numero %d no es impar. \n", n); } int es_impar (int x) { int respuesta; if ( x MOD 2 NE 0 ) respuesta=SI; else respuesta=NO; return (respuesta); }
Ejercicio 4.10. Realiza un programa en C que sume, reste, multiplicaque y divida con datos introducidos por el usuario.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 16
#include<stdio.h> int resta(int x, int y); /*prototipo de la funcin*/ int suma(int x, int y); /*prototipo de la funcin*/ main() { int a,b,c,d; printf("Introduce el valor de a: "); scanf("%d",&a); printf("\nIntroduce el valor de b: "); scanf("%d",&b); c=resta(a,b); d=suma(a,b); printf("La diferencia es: %d\n",c); printf("La suma es: %d\n",d); return(0); } int resta(int x, int y) /*declaracin de la funcin*/ { int z; z=y-x; return(z); /*tipo devuelto por la funcin*/ } int suma(int x, int y) /*declaracin de la funcin*/ { int z; z=y+x;
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 17 return(z); /*tipo devuelto por la funcin*/ }
Ejercicio 4.11. Realiza una funcin que eleve un nmero al cubo.
#include<stdio.h> int cubo(int base); void main(void) { int res,num; printf("Introduzca un numero:"); scanf(" %d",&num); res=cubo(num); printf("El cubo de %d es: %d\n",num,res); } int cubo(int x) { int cubo_res; cubo_res=x*x*x; return(cubo_res); }
Ejercicio 4.12. Realiza una funcin que eleve un nmero a un exponente cualquiera.
#include<stdio.h>
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 18 int cubo(int base,int expo); void main(void) { int res,num,ex; printf("Introduzca una base:"); scanf(" %d",&num); printf("Introduzca un exponente:"); scanf(" %d",&ex); res=cubo(num,ex); printf("El numero %d elevado es: %d\n",num,res); } int cubo(int x, int y) { int i,acum=1; for(i=1;i<=y;i++) acum=acum*x; return(acum); }
Ejercicio 4.13. Realiza una funcin que obtenga la raz cuadrada de un nmero.
# include <stdio.h> # include <math.h> void impresion(void); main() {
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 19 printf("Este programa extraer una raiz cuadrada.\n\n"); impresion(); return(0); } void impresion(void) { double z=4; double x; x=sqrt(z); printf("La raz cuadrada de %lf es %lf \n",z,x); } Nota: mbito de variables (locales y globales) Las variables son locales cuando se declaran dentro de una funcin. Las variables locales slo pueden ser referenciadas (utilizadas) por sentencias que estn dentro de la funcin donde han sido declaradas. Las variables son globales cuando son conocidas a lo largo de todo el programa, y se pueden usar desde cualquier parte del cdigo. Mantienen sus valores durante toda la ejecucin. Deben ser declaradas fuera de todas las funciones incluida main (). Parmetros de una funcin Es muy frecuente que nos interese adems indicarle a nuestra funcin ciertos datos especiales con los que queremos que trabaje. Por ejemplo, si escribimos en pantalla nmeros reales con frecuencia, nos puede resultar til que nos los muestre con el formato que nos interese. Lo podramos hacer as: escribeNumeroReal ( float n ) { printf ("%4.2f", n); } Y esta funcin se podra usar desde el cuerpo de nuestro programa as: float x; main() { x= 5.1;
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 20 printf("El primer numero real es: "); escribeNumeroReal(x); printf(" y otro distinto es: "); escribeNumeroReal(2.3); }
Estos datos adicionales que indicamos a la funcin es lo que llamaremos sus parmetros. Como se ve en el ejemplo, tenemos que indicar un nombre para cada parmetro (puede haber varios) y el tipo de datos que corresponde a ese parmetro. Si hay mas de un parmetro, deberemos indicar el tipo y el nombre para cada uno de ellos:
sumar ( int x, int y ) { ... } Valor devuelto por una funcin Tambin es habitual que queramos que nuestra funcin realice una serie de clculos y nos devuelva el resultado de esos clculos, para poderlo usar desde cualquier otra parte de nuestro programa. Por ejemplo, podramos crear una funcin para elevar un nmero entero al cuadrado as:
int cuadrado ( int n ) { return n*n; } main() { int numero; int resultado; numero= 5; resultado = cuadrado(numero); printf("El cuadrado del numero es %d", resultado);
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 21 printf(" y el de 3 es %d", cuadrado(3)); }
Podemos hacer una funcin que nos diga cual es el mayor de dos nmeros reales as:
float mayor ( float n1, float n2 ) { if (n1>n2) return n1; else return n2; } Invocacin a las funciones Una funcin puede ser llamada slo mediante referencia de la forma siguiente: nombre_funcin (lista de parmetros actuales) Donde: nombre_funcin Funcin que llama. Lista de param. actuales Constantes, variables, expresiones, valores de funciones, nombres de funciones o procedimientos. Una llamada a la funcin implica los siguientes pasos: A cada parmetro formal se le asigna el valor real de su correspondiente parmetro actual (esta correspondencia se ver ms tarde y se denomina llamada por valor).
Se ejecuta el cuerpo de acciones de la funcin.
Se devuelve el valor de la funcin y se retorna al punto de llamada. Ejercicio:
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 22 Calcular la potencia de un nmero. funcion POTENCIA(x,n :entero): entero Inicio y 1 Desde i 1 hasta abs(n) hacer y y*x fin Desde si n < 0 entonces y 1/y Fin si POTENCIA y Fin Los mtodos ms empleados para realizar el paso de parmetros son: Paso por valor (parmetro valor). Paso por referencia o direccin (parmetro variable).
Elaboracin de programas 1. El siguiente programa calcula el cubo de los nmeros del 1 al 5 utilizando una funcin definida por el usuario.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 23
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 24 2. Vamos a acceder a las funciones primera y segunda desde la funcin main.
prctico
3. Utilizacin del mismo identificador de variable en diferentes funciones mostrando su localidad.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 25
Crear una funcin que borre la pantalla dibujando 25 lneas en blanco. No debe devolver ningn valor. Crear una funcin que calcule el cubo de un numero real (float). El resultado deber ser otro nmero real. Probar esta funcin para calcular el cubo de 3.2 y el de 5. Crear una funcin que calcule cual es el menor de dos nmeros enteros. El resultado ser otro nmero entero. Crear una funcin llamada signo, que reciba un nmero real, y devuelva un nmero entero con el valor: -1 si el nmero es negativo, 1 si es positivo o 0 si es cero. Crear una funcin que devuelva la primera letra de una cadena de texto. Probar esta funcin para calcular la primera letra de la frase Hola Crear una funcin que devuelva la ltima letra de una cadena de texto. Probar esta funcin para calcular la ltima letra de la frase Hola. Crear una funcin que borre la pantalla dibujando 25 lneas en blanco. No debe devolver ningn valor.
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 26 Crear una funcin que reciba un nmero y muestre en pantalla el permetro y la superficie de un cuadrado que tenga como lado el nmero que se ha indicado como parmetro. Crear una funcin pedirEntero, que reciba como parmetros el texto que se debe mostrar en pantalla, el valor mnimo aceptable y el valor mximo aceptable. Deber pedir al usuario que introduzca el valor tantas veces como sea necesario, volvrselo a pedir en caso de error, y devolver un valor correcto. Probarlo con un programa que pida al usuario un ano entre 1800 y 2100. Crear una funcin escribirTablaMultiplicar, que reciba como parmetro un nmero entero, y escriba la tabla de multiplicar de ese numero (por ejemplo, para el 3 deber llegar desde 3x0=0 hasta 3x10=30). Crear una funcin esPrimo, que reciba un numero y devuelva el valor 1 si es un numero primo o 0 en caso contrario. Crear una funcin que reciba una cadena y una letra, y devuelva la cantidad de veces que dicha letra aparece en la cadena. Por ejemplo, si la cadena es "Barcelona" y la letra es 'a', debera devolver 2 (aparece 2 veces). Crear una funcin que reciba un nmero cualquiera y que devuelva como resultado la suma de sus dgitos. Por ejemplo, si el nmero fuera 123 la suma seria 6. Crear una funcin que reciba una letra y un nmero, y escriba un triangulo formado por esa letra, que tenga como anchura inicial la que se ha indicado. Por ejemplo, si la letra es * y la anchura es 4, debera escribir **** *** ** * 1. Escribir el programa que ordena las lneas de un texto ledo desde la entrada estndar, donde cada lnea tiene diferente longitud, segn lo descrito en la seccin de arreglo de apuntadores. 2. Escribir una funcin que convierta una cadena s a un nmero de punto flotante usando apuntadores. Considerar que el nmero tiene el siguiente formato 99999999.999999, es decir, no se dar en notacin cientfica. La funcin deber suministrrsele una cadena y deber devolver un nmero. 3. Escribir un programa que encuentre el nmero de veces que una palabra dada (esto es, una cadena corta) ocurre en una sentencia (una cadena larga). Leer los datos de la entrada estndar. La primera lnea es una sola palabra, en la segunda lnea se tiene un texto general. Leer ambas hasta encontrar un caracter de nueva lnea. Recordar que se debe insertar un caracter nulo antes de procesar. La salida tpica podra ser:
ITSLP/APUNTES DE PROGRAMACIN BSICA 2014 U n i d a d 6 / I n g . H c t o r B a z a r t e T o r r e s
Pgina 27 La palabra es "el" La sentencia es "el perro, el gato y el canario" La palabra ocurrio 3 veces.