Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Unidad 2 – Funciones y Procedimientos Juan José Ramírez Lama Info2@juaramir.com - www.juaramir.com mailto:Info2@juaramir.com http://www.juaramir.com/ Funciones El uso del lenguaje C permite la utilización de ciertos elementos que ya han sido creados y son incluidos en las bibliotecas stdio.hstdio.h, stdlib.h stdlib.h, etc. Las cuales proveen de dichos elementos para su utilización dentro del programa. Dichos elementos se conocen con el nombre de funcionesfunciones (printf, scanf, return, etc). Una forma de resolver un problema complejo es dividirlo en subproblemas (problemas más sencillos), los cuales son más fáciles de resolver. Con esta subdivisión de problemas se permite manejar la complejidad en los algoritmos, haciéndose patente la frase ”Dividir para vencer”. La subdivisión de problemas en subproblemas se aplica a los algoritmos originando los llamados subalgoritmos o funciones. A su vez cada subproblema puede volver a dividirse en subproblemas. Otra característica importante de los subproblemas es la posibilidad de reutilizarlos para resolver el mismo problema. Una de las principales características del lenguaje C es el manejo de funciones , en C todo es función incluso el programa principal main. La sintaxis de una función en C es: tipo_de_resultado tipo_de_resultado nombre_funcion (listado de nombre_funcion (listado de parametros){parametros){ /* declaracion de variables locales *//* declaracion de variables locales */ /* Acciones *//* Acciones */ return (expresión) ;return (expresión) ; }} DondeDonde: tipo_de_resultadotipo_de_resultado: Indica el tipo de dato que retorna la función. nombre_funcionnombre_funcion: Indica el nombre que se le da a la función y por el cual deberá ser llamada. Listado de parametros:Listado de parametros: Corresponde a los paramatros de entrada de la función, se debe indicar el tipo de dato y nombre de la variable, si existe más de un parámetro se deben separar con ”,,”. Declaración de variables locales:Declaración de variables locales: Es el lugar donde se declaran las variables necesarias para la función acciones Acciones propias de la función. return (expresion)return (expresion): Es el resultado de la función, es el valor de retorno. Ejemplo Una Funcion simple es: int suma_num (int a, int b) {int suma_num (int a, int b) { int suma;int suma; suma = a + b;suma = a + b; return suma;return suma; }} Cuando se ejecuta la función y llega al comando return la función termina de ejecutarse y devuelve el valor de la expresión al lugar en que fue llamado. Para utilizar una función se debe realizar la llamada a la función entregando los valores de entrada. Esto se hace con el nombre de la función y los valores con los que se desea realizar la ejecución de la función. Toda función debe retornar un valor razón por la cual una llamada a función puede utilizarse dentro de una expresión. Una llamada a función implica los siguientes pasos: 11. A cada parámetro formal se le asigna el valor real desde la llamada a dicha función. 22. Se ejecutan las acciones de la función. 33. Se retorna el valor de la función al lugar donde se realizo la llamada. Ejemplo de llamado f = suma_num (2, 3);f = suma_num (2, 3); . . .. . . res = 5 * suma_num(a,c);res = 5 * suma_num(a,c); . . .. . . printf("El resultado es %d", suma_num(f,3)) ;printf("El resultado es %d", suma_num(f,3)) ; Los valores que se entregan en la llamada a la función se conocen como parámetros reales y los que reciben en la función parámetros formales. Cuando se llama a una función la correspondencia entre parametros reales y formales es de uno a uno. Ambito de Variables Las variables que son utilizadas en el programa principal y en las funciones se clasican en 2 tipos: Variables GlobalesVariables Globales Son aquellas variables que pueden ser utilizadas desde cualquier parte del programa. – Debe ser declarada fuera del programa principal main. Variables LocalesVariables Locales Son aquellas variables declaradas dentro de cada función. – Tambien son variables locales aquellas definidas dentro del programa principal main. El uso de variables locales permite entre otras cosas la independencia entre funciones, ya que las variables declaradas dentro de una función solo existen mientras la función se ejecuta. Por lo tanto la forma de comunicarse con ellas es a través de los parámetros de entrada y la salida con la instrucción return. Paso de Parametros Paso por Valor:Paso por Valor: Cuando se hace una llamada a una función se copia"el contenido de los parametros reales en los parámatros formales. int suma(int a, int b){int suma(int a, int b){ int c;int c; c=a+b;c=a+b; return(c);return(c); }} int main(){int main(){ int x1, x2,num;int x1, x2,num; x1 = 2;x1 = 2; x2 = 4;x2 = 4; num = suma (x1, x2);num = suma (x1, x2); printf ("%d", num) ;printf ("%d", num) ; return (0) ;return (0) ; }} En este caso el contenidor de x1->a y x2->b, esto se conoce como paso por valor ya que el valor se copia. Procedimientos Existe otro mecanismo similar a las funciones llamado procedimiento. La gran diferencia es que un procedimiento puede : –No retornar valor. –Retornar un valor (similar a una función). –Retornar más de un valor. – Los procedimientos no llevan la Los procedimientos no llevan la instrucción returninstrucción return Procedimientos con vectores y matrices Existen ciertas tareas con vectores que se repiten. – Ejemplo leer, mostrar, sumar, restar, . . . . Para tales efectos se podrían utilizar funciones, pero debemos recordar que una función solo puede entregar 1 valor y un vector tiene normalmente más de un elemento, por lo cual deben utilizarse procedimientos. Esto tambien es aplicable para el trabajo con matrices. Para utilizar arreglos en procedimientos se deben entregar los parámetros de entrada como salida, el valor de retorno debe ser void. void nombre_procedimiento(parametros_entrada, parametros_salida){void nombre_procedimiento(parametros_entrada, parametros_salida){ . . .. . . }} Procedimientos con Vector A continuación los procedimientos para llenar y mostrar un vector: Ejemplo sin Funciones Ejemplo con Funciones Aquí se presentan las declaraciones de las funciones y la funcion main, todas con sus tipos de archivos. Ejemplo con Funciones Aquí estan las funciones que deben ir posterior al main, todas desarrolladas, con sus llamadas, tipos de datos, etc. Ejemplo con Funciones Esta es la ultima funcion la cual es a la que se le hace el llamado en el main y esta a su vez llama a las 4 funciones anteriores. Funciones dentro de Funciones Si se han dado cuenta en el main solo había una función y a su vez esa misma hacia el llamado al resto de las funciones, la única condición es que se entregaran los parámetros necesarios para no tener que redeclarar las funciones. Las variables xx e yy se declararon en el main y se entregaron a la función ingresaringresar y posteriormente esta función se las ha entregado a el resto de las funciones que contenía. Una forma de omitir este paso de parámetros en cada función es declarándolas como global (antes del main) esto depende del tipo de programa o gusto del programador. Proposición return La proposición return concluye la ejecución de la función y devuelve el control al medio que la llamo. Si la proposición return contiene una expresión, el valor de esta también regresa al medio que hizo la llamada; además, este valor se convertirá al tipo dado por el especificador de tipo de la función. Proposición return double g(char a, int b, float c) {double g(char a, int b, float c) { int i;int i; . . .. . . return i; /* el valor se convertira en un double */return i; /* el valor se convertira en un double */ }} El double que aparece en el ejemplo, es el especificador del tipo de la función; especificael tipo del valor que devuelve la función. En una función puede haber cero o mas proposiciones return; si no hay ninguna, el control vuelve al medio que hizo la llamada al llegar a la llave que delimita el cuerpo de la función. Proposición return Supóngase que se desea una función que devuelva el cuadrado de un entero n, donde n es un parámetro. Cuadrado() Será el nombre de la función y tendrá una lista de parámetros con una sola variable de tipo int. int cuadrado (int n) {int cuadrado (int n) { return (n*n);return (n*n); }} int main (int argc, char argv) {int main (int argc, char argv) { intx, i;intx, i; i=5;i=5; x=cuadrado(i) ;x=cuadrado(i) ; printf("%d\n" ,x) ;printf("%d\n" ,x) ; return0 ;return0 ; }} Las funciones se declaran como objetos individuales que no pueden anidarse. Si un especificador de tipo de una función esta ausente, entonces por defecto asume int. Existen 2 tipos de funciones basicas: – intint – voidvoid Las de tipo voidvoid El especificador de tipo void se usa para declarar funciones que no se pretende que devuelvan valores. Emplear una función void en una expresión que requiere un valor hace que el compilador produzca un mensaje de error. Las de tipo intint Nos permite imprimir solo un resultado por pantalla por medio del returnreturn o utilizarla como funcion recursiva. Funciones Importantes MENÚ Tiempo de Ejecución Random MENÚ MENÚ El menú es una función especial que se utiliza bastante cuando se deben dar opciones al usuario, para que realice diversos procedimientos y una vez finalizado estos poder realizar otras funciones sin salir del programa. Propocición Menú Partes El menú comienza con la función, luego se declara una variable en la cual se almacenara la opción (puede ser charchar o intint) en este caso es un int opint op y se le asigna un valor distinto del que se utilizara asigna un valor distinto del que se utilizara como salidacomo salida (int op=1;int op=1;) ya que si le damos el valor de salida el programa jamas entrara al menú. Partes Luego se crea un ciclo while con la opción ”mientras sea distinto de la salida” (while(op!=5)while(op!=5) {{) Dentro de este ciclo van las impresiones a pantalla con las opciones para el menú, las cuales leerá el usuario final, posteriormente leemos la opción del usuario y se la damos al switch como esta en el código (switch(op){switch(op){) Partes Dentro de es switch va las opciones, en este caso como son de tipo int, las opciones serán numéricas y se definirá cada opción como case 1:case 1:, case 2:case 2:, etc. Después de los ”::” de los case van las llamadas a llamadas a las funciones, impresión de pantalla, lecturas las funciones, impresión de pantalla, lecturas desde teclado, etcdesde teclado, etc. tal y como si fuese una función a la cual vamos a desarrollar. Para cerrarcerrar el case debemos poner al final break;break;, así como esta en el ejemplo. Partes Finalmente como es en el caso anterior para salir del programa o menú (si es que queremos que al dejar de utilizar el menú haga alguna otra cosa nuestro programa) se utiliza la opción 55 y si se fijan en el switch dice case 5: break;,case 5: break;, este trozo de código queda tal cual o también podemos poner algún mensaje, pero recuerden que al presionar la opción de salida el programa saldrá del menú. Tiempo de Ejecución Tiempo de Ejecución Si en algún minuto tuviésemos la necesidad de calcular el tiempo que demora en ejecutarse un programa, el procedimiento es sencillo. Podemos calcular el tiempo de el programa completo o simplemente calcular el tiempo de ejecución de una función. Tiempo de Ejecución //Libreria//Libreria #include<time.h>#include<time.h> tipo_dato tu_funcion(tus parametros){tipo_dato tu_funcion(tus parametros){ float comienzo, final, segundos;float comienzo, final, segundos; clock_t comienzo = clock(); clock_t comienzo = clock(); .......... /*el contenido de tu funcion*/ /*el contenido de tu funcion*/ ..... ..... clock_t final = clock();clock_t final = clock(); segundos = ((float)(final – comienzo)) / (CLOCKS_PER_SEC);segundos = ((float)(final – comienzo)) / (CLOCKS_PER_SEC); /*return*/ printf("El tiempo de Ejecucion de esta funcion es: %f /*return*/ printf("El tiempo de Ejecucion de esta funcion es: %f segundos",segundos);segundos",segundos); }} Núemeros Aleatorios Números Aleatorios Para crear números aleatorios en un algoritmo en C/C++ se requiere de 2 librerías para C y 1 para C++. Librerías En C:En C: #include<stdlib.h> #include<time.h> En C++:En C++: #include<time> Nota: no se deben omitir las librerías básicas de c y c++. Utilización Una vez declaradas las librerías, las funciones que se deben implementar dentro de cada método son las siguientes: srand(time(NULL));srand(time(NULL)); Este debe ir al comienzo de cada método, después de la declaración de las variables locales, su función es inicializar la semilla time en 0. La ventaja de hacer esto es que evitamos que se repita alguna secuencia en las distintas ejecuciones o llamadas de nuestro programa. Requiere la librería timetime o time.htime.h Utilización Para asignar el numero aleatorio a una variable o a un vector se utiliza lo siguiente: rand()rand() Esta semilla por si sola retorna números entre 00 y 2.147.483.6472.147.483.647.. rand(); Si deseamos restringir la cantidad de numero de retorne el rand debemos hacer lo siguiente: Para retornar números entre 0 y 1000 y 100: rand()%101;rand()%101; Para retornar números entre 10 y 10010 y 100: 10+(rand()%91);10+(rand()%91); Así las distintas aplicaciones matemáticas que se pueden crear para retornar los números necesarios. Implementación del rand(); Para utilizar el rand(); debemos utilizarlo de la misma forma como asignamos un valor a una variable. Si deseamos asignarle a YY o a V[i]V[i] un numero aleatorio solo debemos hacer: Y=rand();Y=rand(); ^ V[i]=rand();V[i]=rand(); o Y=rand()%101;Y=rand()%101; ^ V[i]=rand()%101;V[i]=rand()%101; o Y=10+(rand()%91);Y=10+(rand()%91); ^ V[i]=10+(rand()%91);V[i]=10+(rand()%91); Ejemplo en C y C++: #include<stdio.h> #include<time.h> void aleatorio(){ int V[10],x, i; srand(time(NULL));srand(time(NULL)); for(i=0;i<10;i++) V[i]=rand()%88rand()%88;; x=12+(rand()%29);12+(rand()%29); for(i=0;i<10;i++) printf(”%d ”,V[i]); printf(”\n%d”,x); } #include<iostream> #include<time> using namespace std; void aleatorio(){ int V[10],x; srand(time(NULL));srand(time(NULL)); for(int i=0;i<10;i++) V[i]=rand()%88rand()%88; x=12+(rand()%29);12+(rand()%29); for(int i=0;i<10;i++) cout<<V[i]<<” ”; cout<<endl<<x<<endl; } FINFIN Página 1 Página 2 Página 3 Página 4 Página 5 Página 6 Página 7 Página 8 Página 9 Página 10 Página 11 Página 12 Página 13 Página 14 Página 15 Página 16 Página 17 Página 18 Página 19 Página 20 Página 21 Página 22 Página 23 Página 24 Página 25 Página 26 Página 27 Página 28 Página 29 Página 30 Página 31 Página 32 Página 33 Página 34 Página 35 Página 36 Página 37 Página 38 Página 39 Página 40 Página 41 Página 42
Compartir