-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
1/34
Introduccin a la
Programacin con C
Copyright 2005
Cdigo de Curso: CY320
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
2/34
Volumen 4
Funciones en C
Copyright 2005
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
3/34
Funciones
Copyright 2005
Unidad 1
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
4/34
Copyright 2005
Objetivos del Aprendizaje
Explicar la naturaleza y usos de las unciones! "escribir algunas unciones incorporadas de C
y explicar c#$o se usan!
%dentiicar las dierentes partes del encabezado
de una unci#n!
"escribir los dierentes tipos de argu$entos!
"einir los prototipos de unciones y sus usos!
Explicar c#$o usar las unciones parasolucionar proble$as!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
5/34
Copyright 2005
%ntroducci#n
&na unci#nes un progra$a autocontenido 'ue lleva
a cabo una tarea espec(ica!
&n progra$a en C es real$ente una colecci#n deuna o $)s unciones!
As(*main()
es en eecto una unci#n!
+odos los progra$as en C deben tener una unci#nmain!
,os progra$as en C se inician con la ejecuci#n de la
unci#nmain!
&na unci#n to$a cero o $)s entradas* lleva a cabouna tarea espec(ica y retorna un solo valor co$oresultado!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
6/34
Copyright 2005
-unciones %ncorporadas en C
,as unciones incorporadas son a'uellas 'ue son
parte de la librer(a est)ndar de C! .on dierentes a las unciones deinidas por el
usuario las cuales son dise/adas y escritas por elprogra$ador para un uso espec(ico en lasaplicaciones!
Algunas unciones incorporadas en C sonprintfscanf
touppersqrt
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
7/34Copyright 2005
1)s acerca de -unciones
&na unci#n tiene las siguientes caracter(sticas
+iene un no$bre 3nico o un identiicador!
+rabaja con cero o $)s entradas 4par)$etros!
,as unciones ta$bi6n se pueden invocar dentro deotras unciones y se conoce co$o llamara una unci#n
4calling)!
,a unci#n invocada desde otra unci#n se conoce co$ola funcin llamada(called).
,a funcin llamada ejecuta las sentencias 'ue son
parte de la unci#n* llevando a cabo la tarea deseada yretorna a la unci#n 'ue la invoc#!
,a ejecuci#n se reanuda en la sentencia 'ue siguein$ediata$ente despu6s a la lla$ada de la unci#n!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
8/34Copyright 2005
Caracter(sticas de las -unciones en C
Algunas caracter(sticas relacionadas con -unciones
en C son
.e pueden crear unciones deinidas por el usuario!
Orece dierentes $ecanis$os para
7! 8asar entradas a la unci#n!
2! Aceptar las entradas para luego procesarlas!
9! :etornar un solo valor co$o resultado!
;! Controlar tareas internas involucradas en elproceso de invocar* transerir el control*
ejecutar y retornar a la unci#n 'ue la invoc#!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
9/34Copyright 2005
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
10/34Copyright 2005
8artes de una -unci#n
&na unci#n tiene dos partes principales
Encabezado de la unci#n! Cuerpo de la unci#n!
El encaezado de funcintiene
Especiicaci#n del tipo del valor a ser retornado por la
unci#n! &n no$bre de unci#n* 'ue sigue las reglas para crear un
identiicador!
&n conjunto de argu$entos* datos pasados co$o entrada ala unci#n* 'ue est)n separados por co$as!
El conjunto de argu$entos en un encabezado de unci#nes opcional!
.i una unci#n no to$a ninguna entrada* el encabezadotendr) un no$bre de unci#n seguido por()!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
11/34Copyright 2005
8artes de una -unci#n!!!2
!l cuer"o de la funcin es el conjunto desentencias encerradas entre llaves { }#
El conjunto de sentencias deine la tarea 'ue llevaa cabo la unci#n!
El cuerpo de la unci#n puede contener lossiguientes tipos de sentencias
.entencias "eclarativas!
.entencias de Asignaci#n!
.entencias Co$puestas! ,la$adas a -unciones!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
12/34Copyright 2005
El cuerpo puede contener cero o $)s sentenciasreturn!
,as sentencia return ayudan a pasar el valor delresultado 3nico al progra$a 'ue hizo la lla$ada!
Eje$plonombreFuncion(){ sentencias; return;
}
,a sentencia return causa 'ue el progra$a 'ue
lla$a inicie la ejecuci#n a partir de la sentencia 'uesigue in$ediata$ente despu6s a la lla$ada de launci#n!
&so de -unciones en la .oluci#n de 8roble$as
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
13/34Copyright 2005
-unciones y .entencias return
,as unciones con tipo de retorno voidno necesitan
tener la sentencia returnexpl(cita$ente! ,a sentencia return en este caso se $antiene por
dos razones
,a sentencia return se usa cuando hay $3ltiples
condiciones veriicadas en una unci#n y la unci#ndebe inalizar su ejecuci#n* cuando una de suscondiciones se satisace!
.e considera una buena pr)ctica de progra$aci#ninsertar una sentencia return a3n cuando hay unsolo punto de retorno en la unci#n!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
14/34Copyright 2005
-unciones!!!Eje$plo 7"eter$inar el 1)xi$o de "os =3$eros Enteros/* Versin 1 */
intmax(int x, int ){if(x !" )return (x);
e#sereturn ();
}/* Versin $ */intmax(int x, int ){ int maximo; if(x !" )
maximo"x; e#se
maximo"; return maximo;}
,a unci#n lla$adamaxretorna intco$o resultado!
El cuerpo de la unci#n veriica cu)l de las variables es $ayor
y retorna el valor!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
15/34Copyright 2005
"eter$inar si un Entero es %$par
int es%mpar(int x){ if(x & $ '" )
return (1);e#se
return ();}
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
16/34Copyright 2005
Convertir un Car)cter de 1in3scula a 1ay3scula!
c0arminama(c0ar en){ if(en !" 2a2 33 en 4" 252){
return (en 6 2a2 7 22); }
e#se{ return(en);
}}
8roponer una .egunda
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
17/34
Copyright 2005
-unciones !!! Eje$plo ;
"eter$inar el -actorial de un Entero!
int factoria#(int x){ int 8,fact;
fact " 1; if(x "" 99 x "" 1) return (1);
e#se{ for(8 " $; 8 4" x; 877) fact " fact * 8; return (fact); }}
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
18/34
Copyright 2005
Clases de Al$acena$iento
En C se puede especiicar una clase de
al$acena$iento en la declaraci#n! ,as clases de al$acena$iento se usan en C para
deinir la visibilidad y el tie$po de vida de las variables!
El or$ato es
4c#ase6de6a#mac!4tipo6dato!nom6var; C tiene cuatro clases de al$acena$iento
automatic
extern
re:ister
static
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
19/34
Copyright 2005
Clase de Al$acena$iento tipo automatic
,as variables deinidas dentro de una unci#n se
deno$inan variables locales 8or deecto las variables locales corresponde a laclase de al$acena$iento automatic#
int f1(){
int i; /* Variab#e automatic */
f#oat f;
sentencia1;
sentencia$;
sentencian;
}
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
20/34
Copyright 2005
Clase de Al$acena$iento tipo re:ister
,a clase de al$acena$ientore:ister
asigna$e$oria en los registros de altavelocidad de la C8& !
.e usa para sugerirle al co$pilador 'ue una variablelocal auto$)tica sea guardada en un registro delprocesador* en vez de la $e$oria regular!
int f1(re:isterint a}{
re:isterint i;
}
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
21/34
Copyright 2005
Clase de Al$acena$iento tipo static
,a clase de al$acena$iento static le inor$a al
co$pilador 'ue los valores al$acenados en las variablesest)n disponibles entre lla$adas a unciones!main(){
int i; /* # buc#e invoca #a funcin :enerar%dno */
for(i " 1; i 4" 1; i77)printf(
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
22/34
Copyright 2005
Clase de Al$acena$iento tipo extern
,as variables cuya deinici#n est) uera de cual'uier
unci#n 4incluyendo la unci#n $ain4pertenecen a laclase de al$acena$iento extern!
,as variables de tipo externson visibles a trav6s delprogra$a* a partir del punto en 'ue son deinidas hastael inal del )$bito establecido para ellas!
Cual'uier ca$bio 'ue se haga a los valores de lasvariables de tipo extern aectan al resto delprogra$a!
>.e puede tener una variable declarada co$o
externen otro archivo?
$a res"uesta es s%#
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
23/34
Copyright 2005
Clase de Al$acena$iento tipo extern!!!2
/* rc0ivo1?c */
int 8, m;
main(){
}
/* rc0ivo$?c*/int 8,@; extern int m;int f1(){
}int n;int f$(){ }
/* rc0ivoA?0 */
/* .os prototipos defunciones estBn en Cstearc0ivo */
int f1(); int f$();
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
24/34
Copyright 2005
Archivos de Encabezados 4header
,os archivos de Encabezados 4header centralizan las
deiniciones y declaraciones! 8er$ite tener una sola copia $ientras se desarrolla el
progra$a acilitando el $anteni$iento!
En el eje$plo* el contenido co$3n se coloca en Archivo9!hconocido co$o un arc&i'o &eader'ue se incluye a trav6s dela sentencia (include@Archivo9!h en los archivos Archivo7!cy Archivo2!c!
El $ecanis$o de c#$o co$pilar y cargar un progra$a en C'ue reside en varios archivos uente var(a de un siste$a aotro!
En &=%B* el co$ando ccrealiza el enlace
cc rc0ivo1?c rc0ivo$?c rc0ivoA?0
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
25/34
Copyright 2005
:esu$en
.e explic# la naturaleza y uso de las unciones!
.e describieron algunas unciones incorporadas de C yc#$o se usan!
.e identiicaron las dierentes partes del encabezadode una unci#n!
.e estudiaron los dierentes tipos de argu$entos!
.e deini# el concepto de prototipos de unciones y yse estableci# sus usos!
.e estudiaron los tipos de al$acena$iento!
.e discuti# las ventajas de los archivos deencabezado!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
26/34
Copyright 2005
Unidad 3
)ecursin
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
27/34
Copyright 2005
Objetivos del Aprendizaje
Explicar el concepto de recursi#n!
"iscutir las dierentes condiciones 'ue deben sersatisechas para 'ue las unciones recursivastrabajen correcta$ente!
"escribir c#$o una unci#n recursiva trabajacuando se ejecuta!
"einir el rol de la pila en la ejecuci#n de lasunciones recursivas!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
28/34
Copyright 2005
%ntroducci#n
,a palabra recursi#n tiene ra(z latina re 'ue signiicaDregresar y el suijo latin currere*signiica Dcorrer!
,a palabra recursi#n literal$ente signiica correr haciaatr)s* o 'ue suceda otra vez* especial$ente en unintervalo espec(icoD!
En el contexto de la progra$aci#n de co$putadoras* lapalabra recursin se reiere a una funcin *ue esca"az de llamarse as% misma#
Eje$plo
intmecursive(int x){ mecursive(x61);}
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
29/34
Copyright 2005
"einici#n de :ecursi#n
&na deinici#n de recursion es
+Una t,cnica algor%tmica donde una funcin "araacometer una tarea- se llama a s% misma con'alores modificados de sus argumentos.#
:ecursi#n es real$ente una t6cnica algor(t$ica 'ue se
e$plea para resolver ciertos proble$as! En el contexto de un progra$a en C* la recursi#n
i$plica una unci#n en C 'ue puede ser lla$ada desdeel cuerpo de la $is$a unci#n!
Cuando una unci#n se lla$a a s( $is$a* lo hace conDvalores $odiicados de sus argu$entos usual$ente* atrav6s de los par)$etros 'ue son pasados en lalla$ada!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
30/34
Copyright 2005
Escribir -unciones :ecursivas
Calcular el -actorial de un Entero
!/em"lo de Factorial:
-actorial de 5 F 5 x ; x 9 x 2 x 7=
720
efinicin del Factorial:
0G F 7nG F n x 4n7 x 4n2 x H x 7 para n I 0
.e escribe el actorial de nco$o n' y se lee n6actorial!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
31/34
Copyright 2005
Calcular el -actorial de un Entero :ecursiva$ente
El actorial se puede ta$bi6n deinir usando inducci#n
$ate$)tica* es decir* recursiva$ente* co$o siguen'" n x (n61)' paran !
'" 1 paran "
,a deinici#n or$al recursiva del actorial den
es
if (n"")return 1;
e#sereturn factoria#(n61) * n;
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
32/34
Copyright 2005
:ecursi#n vs %teraci#n
+odas las soluciones recursivas pueden
nor$al$ente ser resueltas usando iteraciones*$ientras lo contrario no es verdadero!
&n c#digo recursivo es co$pacto* )cil de escribiry )cil de entender!
El c#digo* sin e$bargo* no ahorra tie$po niespacio!
8ara proble$as sencillos co$o el actorial*-ibonacci* etc!* las soluciones iterativas son $)s
econ#$icas en t6r$inos de espacio y tie$po!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
33/34
Copyright 2005
:esu$en
Explicar el concepto de recursi#n!
"iscutir las dierentes condiciones 'ue deben sersatisechas para 'ue las unciones recursivas trabajencorrecta$ente!
"escribir c#$o una unci#n recursiva trabaja cuandose ejecuta!
"einir el rol de la pila en la ejecuci#n de las uncionesrecursivas!
-
7/23/2019 Intro to Programming Using C Master Visuals Vol 4 V3 (Espa+ol)
34/34
Unidad 2
$aoratorio de Funciones
Unidad 4
$aoratorio de )ecursin