CIMAT Inform atica I para...
Transcript of CIMAT Inform atica I para...
C++
CIMAT
Informatica I para BachilleratoC/C++
Funciones
Jose Luis Alonzo Velazquez
CIMAT
Sesion 11
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
¿Que es una funcion?
Una funcion es un conjunto de lıneas de codigo que realizan unatarea especıfica y puede retornar un valor. Las funciones puedentomar parametros que modifiquen su funcionamiento. Lasfunciones son utilizadas para descomponer grandes problemas entareas simples y para implementar operaciones que soncomunmente utilizadas durante un programa y de esta manerareducir la cantidad de codigo. Cuando una funcion es invocada sele pasa el control a la misma, una vez que esta finalizo con su tareael control es devuelto al punto desde el cual la funcion fue llamada.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Sintaxis
1 <t i p o> [ c l a s e : : ] <nombre> ( [ Par ametros ] )2 {3 c u er p o ;4 }
Ejemplo
1 // r e g r e s a r e l cuadrado de un numero2 d o u b l e cuadrado ( d o u b l e n )3 {4 r e t u r n n∗n ;5 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Sintaxis
1 <t i p o> [ c l a s e : : ] <nombre> ( [ Par ametros ] )2 {3 c u er p o ;4 }
Ejemplo
1 // r e g r e s a r e l cuadrado de un numero2 d o u b l e cuadrado ( d o u b l e n )3 {4 r e t u r n n∗n ;5 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Parametros por valor
La funcion cuadrado() es un clasico ejemplo que muestra el pasode parametros por valor, en ese sentido la funcion cuadrado()recibe una copia del parametro n. En la misma funcion se puedeobservar que se realiza un calculo ( n ∗ n ), sin embargo elparametro original no sufrira cambio alguno, esto seguira siendocierto aun cuando dentro de la funcion hubiera una instruccionparecida a n = n ∗ n; o n∗ = n;.
Ejemplo
1 // r e g r e s a r e l cuadrado de un numero2 d o u b l e cuadrado ( d o u b l e n )3 {4 r e t u r n n∗n ;5 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Parametros por valor
La funcion cuadrado() es un clasico ejemplo que muestra el pasode parametros por valor, en ese sentido la funcion cuadrado()recibe una copia del parametro n. En la misma funcion se puedeobservar que se realiza un calculo ( n ∗ n ), sin embargo elparametro original no sufrira cambio alguno, esto seguira siendocierto aun cuando dentro de la funcion hubiera una instruccionparecida a n = n ∗ n; o n∗ = n;.
Ejemplo
1 // r e g r e s a r e l cuadrado de un numero2 d o u b l e cuadrado ( d o u b l e n )3 {4 r e t u r n n∗n ;5 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
1 // r e g r e s a r e l cuadrado de un numero2 d o u b l e cuadrado2 ( d o u b l e &n )3 {4 n ∗= n ;5 r e t u r n n ;6 }
Parametros por referencia
La funcion cuadrado2() es un clasico ejemplo que muestra el pasode parametros por referencia, en ese sentido la funcion cuadrado2()recibe el parametro n. En la misma funcion se puede observar quese realiza un calculo ( n ∗ n ), sin embargo el parametro originalsufrira cambio, esto seguira siendo cierto aun cuando dentro de lafuncion hubiera una instruccion parecida a n = n ∗ n; o n∗ = n;.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
1 // r e g r e s a r e l cuadrado de un numero2 d o u b l e cuadrado2 ( d o u b l e &n )3 {4 n ∗= n ;5 r e t u r n n ;6 }
Parametros por referencia
La funcion cuadrado2() es un clasico ejemplo que muestra el pasode parametros por referencia, en ese sentido la funcion cuadrado2()recibe el parametro n. En la misma funcion se puede observar quese realiza un calculo ( n ∗ n ), sin embargo el parametro originalsufrira cambio, esto seguira siendo cierto aun cuando dentro de lafuncion hubiera una instruccion parecida a n = n ∗ n; o n∗ = n;.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Parametros constantes
Los parametros usados por una funcion pueden declararse comoconstantes ( const ) al momento de la declaracion de la funcion.Un parametro que ha sido declarado como constante significa quela funcion no podra cambiar el valor del mismo ( sin importar sidicho parametro se recibe por valor o por referencia ).
Ejemplo
1 i n t f u n c i o n X ( c o n s t i n t n ) ;2 v o i d p r i n t s t r ( c o n s t c h a r ∗ s t r ) ;
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Parametros constantes
Los parametros usados por una funcion pueden declararse comoconstantes ( const ) al momento de la declaracion de la funcion.Un parametro que ha sido declarado como constante significa quela funcion no podra cambiar el valor del mismo ( sin importar sidicho parametro se recibe por valor o por referencia ).
Ejemplo
1 i n t f u n c i o n X ( c o n s t i n t n ) ;2 v o i d p r i n t s t r ( c o n s t c h a r ∗ s t r ) ;
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Parametros con valor por defecto
Los parametros usados por una funcion pueden declararse con unvalor por defecto. Un parametro que ha sido declarado con valorpor defecto es opcional a la hora de hacer la llamada a la funcion.
Ejemplo
1 v o i d s a l u d o ( c h a r ∗ mensaje = ” Hola s u d a f r i c a 2010 ” ) ;2
3 l a misma puede s e r i n v o c a d a como :4
5 s a l u d o ( ) ; // s i n par ametro6 s a l u d o ( ” Sea u s t e d b i e n v e n i d o a C++” ) ; // con par ametro
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Parametros con valor por defecto
Los parametros usados por una funcion pueden declararse con unvalor por defecto. Un parametro que ha sido declarado con valorpor defecto es opcional a la hora de hacer la llamada a la funcion.
Ejemplo
1 v o i d s a l u d o ( c h a r ∗ mensaje = ” Hola s u d a f r i c a 2010 ” ) ;2
3 l a misma puede s e r i n v o c a d a como :4
5 s a l u d o ( ) ; // s i n par ametro6 s a l u d o ( ” Sea u s t e d b i e n v e n i d o a C++” ) ; // con par ametro
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Funciones sobrecargadas
C++, a diferencia del C estandar, permite declarar funciones conel mismo nombre y a esto se conoce como sobrecarga defunciones. Las funciones sobrecargadas pueden coincidir en tipo,pero al menos uno de sus parametros tiene que ser diferente. Entodo caso, si usted trata de declarar funciones sobrecargadas quecoincidan en tipo y numero de parametros el compilador no se lopermitira. Para poner un ejemplo vamos a considerar el caso de dosfunciones cuyo nombre sera divide, ambas regresaran el cociente dedos numeros, salvo que una de ellas operara sobre numeros enterosy la otra lo hara sobre numeros reales ( de punto flotante ).
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Observacion
Nota: cuando en los programas se hace una llamada a una funcionsobrecargada, el compilador determina a cual de las funcionesinvocar en base al tipo y numero de parametros pasados a lafuncion.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
1 #i n c l u d e <s t d i o . h>2 #i n c l u d e < s t d l i b . h>3
4 u s i n g namespace s t d ;5 // d i v i d e e n t e r o s6 i n t d i v i d e ( i n t a , i n t b ) {7 p r i n t f ( ” d i v i s i o n e n t e r a ” ) ;8 i f ( b !=0){9 r e t u r n a/b ;
10 } e l s e {11 r e t u r n 0 ;12 }13 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
1 // d i v i d e r e a l e s2 d o u b l e d i v i d e ( d o u b l e a , d o u b l e b ) {3 p r i n t f ( ” d i v i s i o n e n t e r a ” ) ;4 i f ( b !=0){5 r e t u r n a/b ;6 } e l s e {7 r e t u r n 0 ;8 }9 }
10 // punto de prueba11 i n t main ( ) {12 p r i n t f ( ” %d” , d i v i d e ( 1 0 , 3) ) ;13 p r i n t f ( ” %l f ” , d i v i d e ( 1 0 . 0 , 3 . 0 ) ) ;14 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Numero variable de parametros
En C,C++ se pueden crear funciones que operen sobre una listavariable de parametros, es decir, en donde el numero deparametros es indeterminado. En esta seccion se mostrara unejemplo de la manera en que podemos crear funciones paramanejar tales asuntos, y para ello haremos uso de tres macrossoportadas por C++:
1 va list puntero de argumentos
2 va start inicializar puntero de argumentos
3 va end liberar puntero de argumentos
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Numero variable de parametros
La sintaxis que usaremos para declarar funciones con lista deparametros variables es:
1 1) t i p o nombre func ion ( . . . )2 2) t i p o nombre func ion ( i n t num , . . . )
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
donde:
1 tipo es el tipo regresado por la funcion
2 nombrefuncion es el nombre de la funcion
3 int num es el numero de parametros que la funcion procesara
4 ... esta notacion se emplea para indicar que el numero deparametros es variable
Nota: observe que la primera forma de declaracion es realmentevariable el numero de parametros a procesar y en estos casos sedebe establecer el mecanismo para determinar cuando se haprocesado el ultimo de los argumentos, en el segundo tipo dedeclaracion el numero total de parametros a procesar es igual alvalor del parametro num.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
1 #i n c l u d e <s t d i o . h>2 #i n c l u d e <s t d a r g . h>3 u s i n g namespace s t d ;4 // Esta f u n c i o n o p e ra s o b r e una l i s t a v a r i a b l e de
numeros e n t e r o s5 i n t suma ( i n t num , . . . ) {6 i n t t o t a l = 0 ;7 v a l i s t a r g p t r ;8 v a s t a r t ( a r g p t r , num ) ;9 w h i l e ( num > 0 ) {
10 t o t a l += v a a r g ( a r g p t r , i n t ) ;11 num−−;12 }13 va end ( a r g p t r ) ;14 r e t u r n ( t o t a l ) ;15 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Continuacion Ejemplo
1 i n t main ( ) {2 p r i n t f ( ” %d” , suma ( 4 , 100 , 200 , 300 , 400) ) ;3 r e t u r n 0 ;4 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Figura : Repaso de funciones
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Problema para clase
Hacer un programa que tenga una funcion que multiplique 4numeros dados por el usuario, y imprima el resultado en pantalla.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Declaracion de funciones
Antes de escribir una funcion es necesario informarle al Compiladorlos tamanos de los valores que se le enviaran en el stack y eltamano de los valores que ella retornara al programa invocante .Estas informaciones estan contenidas en la declaracion delprototipo de la funcion. Formalmente dicha declaracion quedadada por :
1 t i p o d e l v a l o r de r e t o r n o n o m b r e d e l a f u n c i o n ( l i s t ade t i p o s de p a r a m e t r o s )
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Ejemplo
1 f l o a t m i f u n c i o n ( i n t i , d o u b l e j ) ;2
3 d o u b l e o t r a f u n c i o n ( v o i d ) ;4
5 o t r a m a s ( l o n g p ) ;6
7 v o i d l a u l t i m a ( l o n g d o u b l e z , c h a r y , i n t x , u n s i g n e dl o n g w) ;
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Observaciones
El primer termino del prototipo da, como hemos visto el tipo deldato retornado por la funcion; en caso de obviarse el mismo setoma, por omision, el tipo int. Sin embargo, aunque la funciondevuelva este tipo de dato, para evitar malas interpretaciones esconveniente explicitarlo .
Ya que el “default” del tipo de retorno es el int, debemos indicarcuando la funcion NO retorna nada, esto se realiza por medio de lapalabra VOID (sin valor). De la misma manera se actua, cuandono se le enviaran argumentos. Mas adelante se profundizara sobreel tema de los argumentos y sus caracterısticas.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Observaciones
El primer termino del prototipo da, como hemos visto el tipo deldato retornado por la funcion; en caso de obviarse el mismo setoma, por omision, el tipo int. Sin embargo, aunque la funciondevuelva este tipo de dato, para evitar malas interpretaciones esconveniente explicitarlo .
Ya que el “default” del tipo de retorno es el int, debemos indicarcuando la funcion NO retorna nada, esto se realiza por medio de lapalabra VOID (sin valor). De la misma manera se actua, cuandono se le enviaran argumentos. Mas adelante se profundizara sobreel tema de los argumentos y sus caracterısticas.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Observaciones
La declaracion debe anteceder en el programa a la definicion de lafuncion. Es normal, por razones de legibilidad de la documentacion,encontrar todas las declaraciones de las funciones usadas en elprograma, en el HEADER del mismo, junto con los include de losarchivos *.h que tienen los prototipos de las funciones de Librerıa.
Si una o mas de nuestras funciones es usada habitualmente,podemos disponer su prototipo en un archivo de texto, e incluirlolas veces que necesitemos, segun se vera mas adelante.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Observaciones
La declaracion debe anteceder en el programa a la definicion de lafuncion. Es normal, por razones de legibilidad de la documentacion,encontrar todas las declaraciones de las funciones usadas en elprograma, en el HEADER del mismo, junto con los include de losarchivos *.h que tienen los prototipos de las funciones de Librerıa.
Si una o mas de nuestras funciones es usada habitualmente,podemos disponer su prototipo en un archivo de texto, e incluirlolas veces que necesitemos, segun se vera mas adelante.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Definicion de las funciones
La definicion de una funcion puede ubicarse en cualquier lugar delprograma, con solo dos restricciones: debe hallarse luego de dar suprototipo, y no puede estar dentro de la definicion de otra funcion( incluida main() ). Es decir que a diferencia de Pascal, en C lasdefiniciones no pueden anidarse.
NOTA
No confundir definicion con llamada; una funcion puede llamar atantas otras como desee. La definicion debe comenzar con unencabezamiento, que debe coincidir totalmente con el prototipodeclarado para la misma, y a continuacion del mismo, encerradaspor llaves se escribiran las sentencias que la compone.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Definicion de las funciones
La definicion de una funcion puede ubicarse en cualquier lugar delprograma, con solo dos restricciones: debe hallarse luego de dar suprototipo, y no puede estar dentro de la definicion de otra funcion( incluida main() ). Es decir que a diferencia de Pascal, en C lasdefiniciones no pueden anidarse.
NOTA
No confundir definicion con llamada; una funcion puede llamar atantas otras como desee. La definicion debe comenzar con unencabezamiento, que debe coincidir totalmente con el prototipodeclarado para la misma, y a continuacion del mismo, encerradaspor llaves se escribiran las sentencias que la compone.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
1 #i n c l u d e <s t d i o . h>2 /∗ D e c l a r a c i o n o b s e r v e que t e r m i n a en ” ; ” ∗/3 f l o a t m i f u n c i o n ( i n t i , d o u b l e j ) ;4 i n t main ( ) {5 f l o a t k ;6 i n t p ;7 d o u b l e z ;8 . . . . . . . . . . .9 k = m i f u n c i o n ( p , z ) ; /∗ LLAMADA a l a f u n c i o n ∗/
10 . . . . . . . . . . .11 }12 /∗ f i n de l a f u n c i o n main ( ) ∗/13 /∗ D e f i n i c i o n o b s e r v e que NO l l e v a ” ; ” ∗/
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
1 f l o a t m i f u n c i o n ( i n t i , d o u b l e j ) {2 f l o a t n ;3 . . . . . . . . . . . . . . . . . . .4 p r i n t f ( ” %d” , i ) ; /∗ LLAMADA a o t r a f u n c i o n ∗/5 . . . . . . . . . . . . . . . . . . .6 r e t u r n ( 2 ∗ n ) ; /∗ RETORNO d e v o l v i e n d o un v a l o r f l o a t
∗/7 }
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Problema para clase
Hacer una funcion que manda llamar otra funcion que a su vesmanda llamar otra funcion.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Problema extra clase
Utilizar un archivo header y ver como funciona para poder usarloen varios proyectos.
Jose Luis Alonzo Velazquez Informatica I para Bachillerato
C++
FuncionesFunciones sobrecargadasDeclaracion de funcionesDefinicion de las funciones
Como Programar en C/C++, Deitel (Prentice Hall), 2daEdicion.
Programming Principles and Practice Using C++, BjarneStroustrup.
http://www.codeblocks.org
http://www.wxwidgets.org
Jose Luis Alonzo Velazquez Informatica I para Bachillerato