Logo Studenta

Unidad2_01_Funciones_y_Procedimientos

¡Este material tiene más páginas!

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

Continuar navegando

Materiales relacionados