You are on page 1of 27

MODULO DE FUNCIONES 1. GENERALIDADES.

La utilización de funciones creadas por el programador permite dividir un programa grande en un cierto número de componentes más pequeñas (llamados en ocasiones subprogramas), cada una de las cuales posee un propósito único que lo diferencian de los demás. Por tanto, un programa en se puede modularizar mediante el uso de las funciones. ( no inclu!e otras formas de desarrollo modular de programas, como los procedimientos en Pascal. "a! varias venta#as de desarrollar en forma modular los programas. Por e#emplo, muc$os programas requieren acceder repetidamente a un grupo determinado de instrucciones desde varias partes distintas del programa. Las instrucciones repetidas se pueden incluir dentro de una sola función, a la que se puede acceder cuando sea necesario. %demás, se puede transferir un con#unto de datos diferente a la función cada vez que se accede a ella. Por tanto, el uso de funciones evita la necesidad de repetir las mismas instrucciones de forma redundante (como ocurre en los lengua#es de programación lineal). &e igual forma es importante la claridad lógica resultante de la descomposición de un programa en varias funciones concisas, representando de cada función una parte bien definida del problema global. 'stos programas son más fáciles de escribir ! de depurar, ! su estructura lógica es más fácil de entender que la de aquellos programas que carecen de este tipo de estructuras. 'sto es especialmente cierto en programas grandes ! complicados. La ma!or(a de los programas en se modularizan de esta manera, aún cuando no impliquen la e#ecución repetida de las mismas tareas. &e $ec$o, la descomposición de un programa en módulos individuales se considera generalmente parte de la buena práctica de la programación. ada subprograma se puede separar como una función individual ! almacenar en un arc$ivo de librer(a especial. )i un programa requiere de una determina rutina, se puede añadir la

8

correspondiente función de librer(a al programa durante el proceso de compilación. Por tanto, muc$os programas distintos pueden utilizar una misma función. 'sto evita la reescritura del código de las funciones (una venta#a de la programación modular, es la *'+,-L-.% /0 &' /&-12 cuando se generan funciones que pueden ser implementadas en diferentes programas). %demás favorece la portabilidad, !a que se pueden escribir programas sin prestar atención a las caracter(sticas dependientes del sistema. 'n este módulo veremos cómo se definen las funciones ! cómo se puede acceder a ellas desde diferentes partes de un programa en . 3eremos tambi4n cómo se puede pasar información a una función, trataremos la utilización de prototipos de funciones recomendada por el estándar %0)- (-nstituto 0acional %mericano de 'stándares), actual. 5 finalmente, discutiremos una importante e interesante t4cnica de programación conocida como recursividad, en la que una función puede acceder a s( misma de forma repetida. +na función es un segmento de programa que realiza determinadas tareas bien definidas. ,odo programa en consta de una o más funciones. +na de estas funciones se debe llamar main. La e#ecución del programa siempre comenzará por las instrucciones contenidas en main. )e puede subordinar funciones adicionales a main, ! posiblemente unas a otras. )e debe tener en cuenta que los arc$ivos de cabecera (6.$) no poseen la función main7 dado que sus funciones se constru!en para ser implementadas en otros programas. uando se accede a una función desde alguna determinada parte del programa (llamado a una función), se e#ecutan las instrucciones de que consta. )e puede acceder a una misma función desde varios lugares distintos del programa. +na vez que se $a completado la e#ecución de una función, se devuelve el control al punto desde el que se accedió a ella. 1eneralmente, una función procesa la información que le es pasada desde el punto del programa en donde se accede a ella ! devolverá un sólo valor. La información se le pasa a la función mediante unos identificadores especiales llamados argumentos (tambi4n denominados parámetros) ! es devuelta por medio de la instrucción return (retornar). )in embargo, algunas funciones aceptan información pero no devuelven nada (por e#emplo, la

Los argumentos se denominan argumentos formales. seguido del nombre de la función ! (opcionalmente) un con#unto de argumentos... . &eben seguir al nombre de la función un par de par4ntesis vac(os s( la definición de la función no inclu!e ningún argumento. 'n t4rminos generales.... tipon argn) en donde tipo:de:dato presenta el tipo de dato del valor que devuelve la función ! nombre:de:función es el nombre de la función. argn.) Los identificadores utilizados como argumentos formales son =locales= en el sentido .. ..> función de librer(a printf).. . tambi4n se llaman parámetros o parámetros formales.. . 2. 's de aclarar que los tipos de datos de los argumentos pueden ser iguales o diferentes. !a que definen la información que realmente se transfiere.. (Los argumentos correspondientes en referencia a la función se denominan argumentos reales.. la primera l(nea se puede escribir as(9 tipo:de:dato nombre:de:función(tipo. Los tipos de datos se suponen enteros cuando no se indican e<pl(citamente. ! tipo. arg. arg8. DEFINICIÓN DE UNA FUNCIÓN La definición de una función tiene dos componentes principales9 La primera l(nea (inclu!endo las declaraciones de los argumentos) ! el cuerpo de la función. la omisión de los tipos de datos se considera una práctica de programación pobre. ada argumento viene precedido por su declaración de tipo. %lgunos autores llaman argumentos simplemente a los argumentos reales.. tipo8 arg8... La primera l(nea de la definición de una función contiene la especificación del tipo de valor devuelto por la función. mientas que otras funciones (la función de biblioteca scanf) devuelven varios valores. separados por comas ! encerrados entre par4ntesis. aún cuando estos sean enteros. tipon representa los tipos de datos de los argumentos arg. !a que representan los nombres de los elementos que se transfieren a la función desde la parte del programa que $ace la llamada. . )in embargo. tipo8.

)e suele llamar a esta instrucción implementación de la función. &e $ec$o. puede contener instrucciones de e<presión. Pseudocódigo de la función 'levar.) al e<ponente (parámetro 8). onsideremos la función 'levar que recibe dos parámetros. los nombres de los argumentos formales no tienen por qu4 coincidir con los nombres de los argumentos reales en la parte del programa que $ace la llamada. '<ponente) -nicio:'levar *esultado@.. etc. Por tanto. *esultado -ndeterminado) *etorne A Cin:)i )i0o Para( ontador@A7"asta ontador@'<ponente7 ontador@ ontadorD. )i ('<ponente@A 5 ?ase@A) 'ntonces Bostrar('rror. 'levar (?ase. el primero es un número entero que representa la base de la e<presión ! segundo es un número entero que representa el e<ponente de la misma.) *esultado@*esultado6?ase . +na función puede acceder a otras funciones. )in embargo. 'l resto de la definición de la función es una instrucción que define las acciones que debe realizar 4sta. instrucciones de control. 'sta función retorna el resultado de elevar la base (parámetro .E de que no son reconocidos fuera de la función. cada argumento formal debe ser del mismo tipo de datos que el dato que recibe desde el punto de llamada. '#emplo . omo cualquier otra instrucción. &ebe incluir una o más instrucciones return para retornar un valor al punto de llamada. puede accederse as( misma (ver recursividad).

que describe el elemento devuelto por la función. %demás. % continuación N for( ontador@A7 ontadorI@'<ponente7 ontadorDD) *esultado@*esultado6?ase7 return *esultado7 . ontador7 (>) if('<ponente@@A HH ?ase@@A)G (E) coutIIJKn 'rror.A) (. Los argumentos formales ?ase ! '<ponente son transferidos a la función desde el punto de llamada..) int 'levar(int ?ase. que se inclu!e dentro del par de par4ntesis. 'l nombre de la función viene precedido por el tipo de dato int. se refiere a los argumentos formales. 'l cuerpo de la función comienza en la segunda l(nea. seguido de los argumentos formales ?ase ! '<ponente que se encuentra entre par4ntesis. 'ste último tipo de dato. con la declaración de las variables locales de tipo int *esultado ! ontador7 donde *esultado es inicializado con el valor A. *esultado indeterminadoJ7 (L) return A7 (M) N (O) elseG (P) (Q) (.8) N La primera l(nea contiene el nombre de la función 'levar.L Cin:Para *etorne *esultado Cin:)i0o Cin:'levar F6 función que elevar un número entero positivo a una potencia entera positiva 6F (.. (0ótese la diferencia entre los argumentos formales ! las variable locales).) (. int '<ponente)G (8) int *esultado@. los argumentos formales ?ase ! '<ponente vienen precedidos por el tipo de dato int.

conteniendo cada una de ellas una e<presión distinta. Las funciones que inclu!en varias bifurcaciones suelen requerir varias instrucciones return. Si una función alcanza el final del bloque sin encontrarse una instrucción return . )i no se cumple esta condición se e#ecuta la instrucción de repetición for (para) que tiene como finalidad $allar el *esultado de elevar ?ase elevado a '<ponente ! retornar este *esultado. La e<presión es opcional. se devuelve el control al punto de llamada sin devolverse ninguna información. aunque esto se considera generalmente como una práctica de programación pobre. )e devuelve el valor de e<presión al punto de llamada. sin ninguna transferencia de información. Se recomienda en estos casos una instrucción return vacía ( sin expresión ). para acer más clara la lógica de la función ! acer más cómodas las modificaciones futuras de la función. Por tanto una función sólo puede devolver un valor al punto de llamada mediante la instrucción return. )ólo se puede incluir una e<presión en la instrucción return. Nota. . 'l número de veces en el que opera la instrucción for viene dado por el valor almacenado en el argumento '<ponente. 'n t4rminos generales se puede escribir la instrucción return de la siguiente forma. La instrucción return puede faltar en la definición de una función. return expresión. la instrucción return simplemente devuelve el control al punto del programa desde donde se llamó a la función. )e devuelve información desde la función $asta el punto del programa desde donde se llamó mediante la instrucción return. La instrucción return tambi4n $ace que se devuelva el control al punto de llamada. +na definición de función puede incluir varias funciones return. )i se omite la e<presión.M de la declaración de *esultado ! ontador se encuentra una condición que comprueba si ?ase ! '<ponente son iguales a A7 de cumplirse esta condición se visualiza el mensa#e de error e inmediatamente se retorna A.

*esultado) Cin:Para Cin:)i )i0o Bostrar('l numero debe ser un entero positivo) Cin:)i0o *etorne vac(o Cin:.abla(int 0umero)G (8) int ontador. ontador.. La siguiente función muestra la tabla de multiplicar de un número que a diferencia del e#emplo .A7 ontadorDD)G *esultado@0umero6 ontador7 coutII0umeroIIJ 6 JII ontadorIIJ @ JII*esultado7 (P) else (Q) coutIIJKn 'l numero debe ser un entero positivoJ7 . Pseudocódigo de la función .) *esultado@0umero6 ontador Bostrar(0umero.abla F6 Cunción que genera la tabla de multiplicar de un numero entero positivo 6F (.O Eje p!" 2.abla(0umero) -nicio:.) void . esta retorna un valor vac(o.abla )i(0umeroR@A) entonces Para( ontador@.7 ontadorI@.abla.A7 ontador@ ontadorD. *esultado7 (>) if(0umeroR@A) (E) (L) (M) (O) N for( ontador@.7"asta ontador @ . .

A) return7 (. La llamada a la función puede formar parte de una e<presión simple (como por e#emplo una instrucción de asignación) o puede ser uno de los operandos de una e<presión más comple#a. de todas formas la función actuar(a igual si la instrucción return no se . ACCESO DE UNA FUNCION. )i la función devuelve un valor. )e puede acceder (llamar) a una función especificando su nombre. ()e llaman simplemente argumentos. 'n una llamada normal a una función. Por otro lado. ada argumento real debe ser del mismo tipo de dato que el argumento formal correspondiente. Los argumentos que aparecen en la llamada a la función se denominan argumentos reales. #. o parámetros reales). D$t" % Fun&i"n1'Nu er"(. se debe escribir a continuación del nombre de la función un par de par4ntesis vac(os. )i la llamada a la función no requiere ningún argumento.. $abrá un argumento real por cada argumento formal. return vac(a como práctica de buena programación. en contraste con los argumentos formales que aparecen en la primera l(nea de la definición de la función. el acceso a la función aparece solo7 esto es. seguido de una lista de argumentos encerrados entre par4ntesis ! separados por comas.)N 0ótese que $a incluido una instrucción encontrara presente. si la función no devuelve nada. 'ste acceso a la función $ace que la variable &ato se le asigne el valor devuelto por la función. el acceso a la función se suele escribir a menudo como una instrucción de asignación7 esto es.P (.

Q C$ptur$r'Nu er") D$t"s(.$R .cpp) 6F FF&efinición del arc$ivo de cabecera Tinclude Iiostream. Eje p!" #.cpp Paridad(0umero) -nicio:Paridad *esiduo @ 0umero MOD 8 )i(*esiduo@A) entonces *etornar SParJ Cin:)i )i0o *etornar S-mparJ Cin:)i0o Cin:Paridad Cuncion:Principal() -nicio:Cuncion:Principal apturar(0umero) Bostrar(Paridad(0umero)) Cin:Cuncion:Principal F6 determinar la paridad de un número entero (Paridad. Pseudocódigo del programa Paridad. 'l siguiente programa determina la paridad de un número entero. 'ste acceso a la función $ace que se capturen los valores de 0umero ! &atos dentro de la función apturar.

visualizando a la vez el valor retornado por la función Paridad.E)N La llamada a la función Paridad se $ace en la l(nea (. al compilar el programa.>) coutII='l número es =IIParidad(0umero)7 (. el argumento real es 0umero.) c$ar 6Paridad(int 0umero)G (8) int *esiduo7 (>) *esiduo@0umeroU87 (E) if(*esiduo@@A) (L) (O) (P)N (Q) void main(void)G (.8) cinRR0umero7 (. 'n tales return =Par=7 return =-mpar=7 (M) else . la función definida por el programador que siempre $a precedido a $in. muc$os programadores prefieren un enfoque =descendente=.A (. en el que aparece antes de la definición de la función definida por el programador. )in embargo.. *RO+O+I*OS DE FUNCIONES 'n los programas de este módulo e<aminamos con anterioridad. Se puede definir ! utilizar en el main una variable de tipo c ar para almacenar el valor que retorna la función "aridad ("or e#emplo. &e este modo. $adena % "aridad(&umero)) ! visualizar el contenido de esta variable' pero esto implica escribir un n(mero ma!or de líneas de código. #.A) int 0umero7 (.) coutII=0umero @ =7 (. Nota.>).. la $in función definida por el programador estar(a definida antes del primer acceso a la función.

'sto puede confundir al compilador..cpp &efinición de arc$ivos de cabecera &efinición del prototipo de la función Primos . 3ale la pena $in).) tip"n representan los tipos de datos de los argumentos $r01) $r02) . puesto que estos son nombres de argumentos =ficticios= que sólo se reconocen dentro del prototipo. son aconse#ables. 'l siguiente programa determina si un número es o no primo.) $r0n...). sin embargo..)tip"n $r0 n(.$t"s de los argumentos son esenciales. Los prototipos de funciones no son obligatorios en C) sin embargo. Eje p!" 1.. !"s tip"s . Para esta finalidad se utilizan los pr"t"tip"s ...e -un&i"nes... !a que facilitan la comprobación de errores entre las llamadas a una función ! la definición de función correspondiente.e . ! tip"1) tip"2) . 'n donde tip". Pseudocódigo del programa Primo.e..e.$t"s representa el tipo de dato del elemento devuelto por la función. &e $ec$o se pueden omitir los nombres de los argumentos..$t"s n" /re'tip"1 $r01) tip"2 $r02).. La forma general de un aclarar que un número es primo si solamente es divisible por s( mismo ! por la unidad (. delante de todas las funciones definidas por el programador (incluida prototipo de función es9 +ip". Los prototipos de funciones normalmente se escriben al comienzo del programa... 0o es necesario declarar en ningún lugar del programa los nombres de los argumentos de un prototipo de función. a menos que se alerte primero al compilador del $ec$o de que la función a acceder se definir(a más adelante en el programa. n" /re representa el nombre de la función. situaciones el acceso a la función (dentro de $in) preceder(a la definición de la función.

$R (.) void primos(int)7 (8) void main(void)G (>) int 0umero7 ..cpp) 6F T includeIiostream.) *esiduo @ 0umero MOD ontador )i (*esiduo@A 5 ontadorIR. Cin:)i Cin:Para )i (?andera@A) entonces Bostrar()i es 0o. Primo) Cin:)i )i0o Bostrar(0o es 0o. Primo) Cin:)i0o Cin:Primos F6 Programa que determina si un número es o no primo (Primo. 5 ontadorIR0umero) entonces ?andera@.8 Cuncion:Principal() -nicio:Cuncion:Principal apturar(0umero) Primos(0umero) Cin:Cuncion:Principal Primos(0umero) -nicio:Primos ?andera@A Para( ontador@.7"asta ontador@0umero7 ontador@ ontadorD.

ontador). ontador7 (. Primo=7 coutII=0o es 0o.?andera@A.. 'sta versión del programa. 'sto es.P) (. ?andera. la cual puede llamar a la función Fun&i"n#. Las llamadas a las funciones pueden abarcar varios niveles en un programa.ambi4n.>) (.7 N coutII=)i es 0o. más adelante en el programa.> (E) coutII=0umero @ =7 (L) cinRR0umero7 (M) Primos(0umero)7 (O) N (P) void Primos(int 0umero)G (Q) int *esiduo. la función Fun&i"n1 puede llamar a la función Fun&i"n2.8) (. $in aparece delante de *ri "s).E) (. utiliza un argumento entero (0umero) ! tres variables locales enteras(*esiduo. . HH ontadorV@0umero) ?andera@. escrita descendentemente (es decir.Q) N *esiduo@0umeroU ontador7 if(*esiduo@@A HH ontadorV@. una función llamada *ri "s) que acepta como argumento una cantidad entera.7 ontadorI@0umero7 ontadorDD)G (.M) (. la función Fun&i"n1 puede llamar directamente a la función Fun&i"n#) ! as( sucesivamente.O) else La función definida por el programador (Primos). 0ótese la presencia del prototipo de la función al comienzo del programa (L(nea .L) if(?andera@@A) (.A) for( ontador@. .).) (.. Primo=7 (. 'l prototipo de la función indica que se definirá.

Primo) Cin:)i )i0o Bostrar(0o es 0o.) *esiduo @ 0umero MOD ontador )i (*esiduo@A 5 ontadorIR. % continuación se presenta una nueva versión del '#emplo E.cpp) 6F . Cin:)i Cin:Para 3isualizar(?andera) Cin:Primos3isualizar(?andera) -nicio:3isualizar )i (?andera@A) entonces Bostrar()i es 0o.cpp&efinición de arc$ivos de cabecera &efinición de prototipo de las funciones Primos ! 3isualizar Cuncion:Principal() -nicio:Cuncion:Principal apturar(0umero) Primos(0umero) Cin:Cuncion:Principal Primos(0umero) -nicio:Primos ?andera@A Para( ontador@. 5 ontadorIR0umero) entonces ?andera@. Primo) Cin:)i0o Cin:3isualizar F6 Programa que determina si un número es o no primo (Primo0. implementando una función llamada (3isualizar).. 'sto se $ace con el fin de mostrar el llamado de una función dentro de otra. que recibe como argumento una variable entera.7"asta ontador@0umero7 ontador@ ontadorD.E Eje p!" 2.Pseudocódigo del programa Primo0.

. si un número es o no primo.8) (.M) (.L) (.O) N void 3isualizar(int ?andera)Gif(?andera@@A) coutII=)i es 0o.?andera@A.L T includeIiostream. HH ontadorV@0umero) ?andera@.>) (.. Primo=7 N 'n este e#emplo la función Primos $ace un llamado a la función 3isualizar que se encarga de mostrar el mensa#e acerca de.) for( ontador@.7 N 3isualizar(?andera)7 .E) (. %demás se define el prototipo de función 3isualizar (L(nea 8) puesto que es necesario para que la función Primos $aga el llamado correspondientes sin que e<iste conflicto alguno.) void Primos(int)7 (8) void 3isualizar(int)7 (>) void main(void)G(E) int 0umero7 (L) coutII=0umero @ =7 (M) cinRR0umero7 (O) Primos(0umero)7 (P) N (Q) void Primos(int 0umero)G (. Primo=7 else coutII=0o es 0o. *ASO DE ARGUMEN+OS A *esiduo@0umeroU ontador7 if(*esiduo@@A HH ontadorV@.$R (. 1.A) int *esiduo. ontador7 (.7 ontadorI@0umero7 ontadorDD)G (.

Programa que contiene una función que %ctualiza el valor de su argumento. 'ste procedimiento para pasar el valor de un argumento a una función se denomina paso de argumentos por valor.cpp) 6F T include I iostream.. Por tanto. se puede modificar el valor del argumento formal dentro de la función.$R . se copia el valor del argumento real a la función. pero el valor del argumento real en la rutina que efectúa la llamada no cambiará.A Bostrar(&ato) %ctualizar(&ato) Bostrar(&ato) Cin:Cuncion:Principal %ctualizar(&ato) -nicio:%ctualizar &ato@&atoD.cpp &efinición de arc$ivos de cabecera &efinición de prototipos Cuncion:Principal() -nicio:Cuncion:Principal &ato @ .A Bostrar(&ato) Cin:%ctualizar F6 'ste programa utiliza un parámetro por valor (%ctualizar. Pseudocódigo del programa %ctualizar. Eje p!" 3.M UNA FUNCION uando se le pasa un valor simple a una función mediante un argumento real.

i-i&$n.e $in) $ntes .) N )e visualiza el valor inicial de D$t" % 14) cuando comienza la e#ecución de valor. '<iste otro tipo de parámetros.es. Cinalmente..O (. denominados parámetros por referencia7 a diferencia de los parámetros por valor estos son utilizados para modificar el valor de una variable para todo el programa.A7 (E) coutIIJ&esde main. uando se e#ecuta el programa.A) coutIIJ&esde la función.A7 (.&ato)7 (.e !!$ $r $ !$ -un&ión A&tu$!i5$r( ".A a D$t" ! se visualiza el nuevo $in (el argumento real) se vuelve a visualizar. aunque se $a!a D$t" % 24 '.e !!$ $r $ !$ -un&ión A&tu$!i5$r( $in. antes de llamar a la función Bodificar =II&ato7 (L) %ctualizar(&ato)7 (M) coutIIJ&esde main.e !$ -un&ión) 'stos resultados muestran que D$t" no se $a actualizado dentro de actualizado el valor correspondiente de D$t" en la función A&tu$!i5$r. despu4s de llamar a la función Bodificar =II&ato7 (O) N (P) void %ctualizar( int &ato)G (Q) &ato@&atoD. $in desde A&tu$!i5$r.) void %ctualizar(int)7 (8) void main(void)G (>) int &ato @ . se genera la siguiente salida9 D$t" % 14 '. 'ste valor se pasa a la función A&tu$!i5$r) en donde se suma .e D$t" % 14 '. &ato @ =.es. ..espu7s . empleando una función para su modificación.es." e! 6$!"r A&tu$!i5$r( $in) . el valor de D$t" en despu4s de $aberse devuelto el control a $in .

se genera la siguiente salida9 D$t" % 14 '.A7 (E) coutIIJ&esde main. Eje p!" 8. antes de llamar a la función %ctualizar =II&ato7 (L) %ctualizar*(H&ato)7 (M) coutIIJ&esde main. &ato @ =. despu4s de llamar a la función %ctualizar =II&ato7 (O) N (P) void %ctualizar*( int 6&ato)G (Q) 6&ato % 9&atoD.) void %ctualizar*(int6)7 (8) void main(void)G (>) int &ato @ .A) coutIIJ&esde la función.A7 (.A a la variable &ato ! $in (el argumento real) se $in desde A&tu$!i5$r. uando se e#ecuta el programa (%ctualizar*.$R (. el valor de D$t" en vuelve a visualizar.8) N $in .. veamos.P Podemos utilizar el e#emplo anterior pero enviando el parámetro por referencia. F6 'ste programa utiliza un parámetro por referencia (%ctualizar*.cpp).e !!$ $r $ !$ -un&ión A&tu$!i5$r( .e $in) $ntes .cpp) 6F T include I iostream.6&ato)7 (.es. 'ste )e visualiza el valor original de D$t" @ 14) cuando comienza la e#ecución de se visualiza el nuevo valor. despu4s de $aberse devuelto el control a valor se pasa a la función A&tu$!i5$r) en donde se asigna el valor de . Cinalmente. &emostración de parámetros por referencia.

es. .A 5 0umeroR@A) entonces *esultado@0umero6 ontador Bostrar(0umero.Q D$t" % 24 '. por e#emplo.espu7s .e ".)7 Cin:)i Cin:. el problema de la tabla de multiplicar..e !!$ $r $ !$ -un&ión A&tu$!i5$r( omo podemos ver el cambio es netamente de sinta<is.cpp.es." e! 6$!"r A&tu$!i5$r( $in) .abla . Eje p!" . ontador. 'l siguiente programa muestra la tabla de multiplicar de un número entero positivo utilizando recursividad. 'l proceso se utiliza para tareas repetidas en las que cada acción se determina en función de un resultado anterior.i-i&$n.abla*(0umero.abla )i ( ontadorI@.*esultado) . RECURSI:IDAD Por recursividad se entiende al proceso en el cual una función se llama a s( misma de forma repetida. ontador) -nicio:.. $asta que se satisface alguna determinada condición. ontadorD. Para que un problema pueda ser resuelto recursivamente debe cumplir como m(nimo la condición de que una instrucción del problema debe incluir una condición de fin. &onde (6) indica el contenido de posición de memoria de la variable &ato7 ! (H) $ace referencia a la dirección de memoria que es asignada para la variable &ato. Pseudocódigo del programa . 2.e !$ -un&ión) D$t" % 24 '. )upongamos.abla*.abla*(0umero.

abla* se llama as( misma recursivamente.A HH 0umeroR@A)G *esultado@0umero6 ontador7 coutII0umeroIIJ 6 JII ontadorIIJ @ JII*esultado7 . La función . int ontador)G (8) int *esultado7 (>) (E) (L) (M) (O) (P)N (Q) void main(void)G (.>) ..abla*(0umero.abla*. .) Cin:Cuncion:Principal F6 Programa que genera la tabla de multiplicar de un numero entero positivo utilizando recursividad (.) coutIIJ0úmero @ J7 (..abla*(0umero.)7 La parte $in del programa simplemente lee la cantidad entera 0umero ! llama a continuación a la función +$/!$R.abla*(int 0umero.)7 (.$R (.) void .cpp)6F TincludeIiostream.8) cinRR0umero7 (.A) int 0umero7 (.E) N N if ( ontadorI@.abla*(0umero.. ontadorD.8A Cuncion:Principal -nicio:Cuncion:Principal apturar(0umero) .

LA. &esarrollo lógico9 Las variables a.. W uál es la finalidad de la instrucción returnY O.A. WXu4 es la recursividadY ! WXu4 venta#as tiene $acer uso de ellasY ..AA. d tomara el valor de a7 en otro caso se compara b con a ! con c.8.. b ! c contienen los valores ( introducidos por teclado) a evaluar. Programa que obtenga el cambio óptimo (m(nimo número de monedas posible) de una cantidad entera positiva en monedas de . c. +$!!er. b. WXu4 se entiende por una llamada a una funciónY E. . )e compara el valor de a con b ! c. 8.. >.) que incrementa en cada llamada sucesiva. L ! . WXu4 es un argumentoY ! cuál es su propósitoY L. con un argumento entero ( otadorD.. W uál es la finalidad de la palabra reservada voidY P. . peso. &esarrollo lógico9 . Bencione tres venta#as de la utilización de funciones. Programa que asigne a la variable d el valor m(nimo de los valores que contienen las variables a. WXu4 diferencias $a! entre argumentos por valor ! argumentos por referenciaY M. 8L. Las llamadas recursivas terminan cuando el valor del argumento se $ace igual a . WXu4 son los prototipos de las funcionesY Q. introduciendo su valor en d en caso de ser menor escrito que a ! menor o igual al valor de b7 en otro caso se introduce el valor de c en la variable d. respectivamente7 en caso de ser menor o igual entre cada uno de ellos. WXu4 es una funciónY.

! suma8.>. &esarrollo lógico9 )ean a. indicando cual de ellos es ma!or en valor absoluto.88 'n n se introduce la cantidad a cambiar ! las variables c. . respectivamente..8. )i este valor es cero. LA.. L. cL contendrán al final del proceso el número de monedas de . c8. Programa que sume los números positivos por una parte ! los negativos por otra. estas variables valen A. si es negativo en suma8. . b ! c las variables que contienen los coeficientes de la ecuación de segundo grado7 disc contendrá el valor del discriminante (bZ8[ E6a6c). Programa que calcula las ra(ces de una ecuación de segundo grado. ! .. La entrada de datos termina al encontrarse un ser. indicando cual de las dos sumas es ma!or en valor absoluto.AA. ! as( sucesivamente $asta llegar a la moneda de ma!or valor. para calcular las ra(ces de la ecuación se aplica la fórmula9 \ @ ([b D o [ ra(z(bZ8[Eac))F8a .. e<iste una ra(z doble7 si es ma!or que cero posee dos ra(ces reales distintas7 ! si es menor que cero. -nicialmente. c>. &esarrollo lógico9 Por medio de un proceso iterativo se introduce cada vez un numero entero7 si es positivo se acumula en suma. 'n cada uno de los casos. 8L. Primero se divide la cantidad a cambiar por el valor de la moneda ma!or introduciendo el cociente en c. +na vez introducidos todos los números se comparan suma. posee dos soluciones imaginarias con#ugadas. cE. on el resto se repite el proceso con la moneda de valor inmediatamente inferior.

. 'n cada iteración se acumula en suma su valor anterior más el valor del siguiente t4rmino (este se obtiene sumando al t4rmino anterior de la diferencia) ! se disminu!e en .AAA mil pesos. .E. Ejer&i&i"s 'L$/"r$t"ri"(. Programa que multiplique dos números enteros por el m4todo de las sumas sucesivas. )e suman dic$os valores ! si sobrepasan los dic$os ingresos se escribe su numero ! los $onorarios recibidos. la diferencia (d) ! el primer t4rmino (a. &esarrollo lógico9 Los t4rminos necesarios para definir una progresión aritm4tica son el número de t4rminos (n). 'l proceso iterativo termina cuando n valga A. el valor de n. 'ste proceso se repite $asta que el numero de empleado sea A. &escribir mediante un programa el proceso necesario para obtener una relación de todos aquellos empleados que por uno u otro concepto reciban más de 8AA.8> . alcular la suma de los n primeros t4rminos de una progresión aritm4tica.L. acumulando esta suma en la variable llamada producto. &esarrollo lógico9 )e introduce a ! b ( números a multiplicar ). dada por el valor de su primer t4rmino ! la diferencia entre dos t4rminos consecutivos cualesquiera. on los valores de sueldo numero de oras e<tras precio de la ora e<tra ! otros ingresos recibidos por dic$o empleado al mes. La suma de la progresión se obtiene sumando los t4rminos de la sucesión.'l proceso consiste en sumar a tantas veces indique b.. . &esarrollo lógico9 'n la variable n estará el numero de empleado estudiado en cada momento.).

'l proceso prosigue $asta que suma sobre pase a valor. 'n suma. destinada a contener al final del proceso el número de t4rminos necesarios para rebasar valor. .Fn para rebasar un cierto valor positivo llamado valor. -nicialmente.A. b).. n ! suma valen A. ! al final del proceso el número de cifras de n. Programa que $alle el número de t4rminos necesarios de la serie ... >.  a. &esarrollo lógico9 Bediante dos procesos repetitivos anidados.. D .F> D ^ D .  contador. D ] D . inicialmente vale . aumenta su valor en . as( como el valor de a %0& b ! a 2* b. contador ! a de tipo entero9  n. &esarrollo lógico9 Las variables que intervendrán en el proceso son n. contiene el número del cual se calculará el número de cifras. ada vez que ocurre este $ec$o la variable entera n.. contendrá sucesivamente el menor número de 8 cifras. inicialmente contiene el valor . Programa que visualice la tabla de verdad de los operadores lógicos %0& ! 2*.8E 8. siendo a ! b variables lógicas.. Programa que determine cuantas cifras posee un número entero positivo introducido por teclado. tambi4n de tipo real se irán acumulando uno a uno los t4rminos de sucesión. de >. 'n cada uno de los pasos de estos procesos se escriben los valores de a ! b.. . &esarrollo lógico9 La cantidad a rebasar se introduce en forma interactiva en la variable real valor. se recorren todos los posibles valores del par (a..

es igual al primer número. es igual al segundo número. E. el segundo es . para cada número comprendido entre 8 ! LAA (por definición el . &os números son amigos si la suma de los divisores del primer número. )eguidamente. )e calcula los divisores de m menores que 4l ! se acumulan en la variable b. )i el número . Programa que encuentre los números perfectos menores o iguales a LAA. no es perfecto) se calculan sus divisores. acumulándolos en la variable d. si la suma de los divisores del segundo número. +n número es perfecto cuando la suma de sus divisores e<cluido 4l. ! se acumulan en la variable b. e<cluido 4l. los dos primeros números de Cibonacci A ! . &esarrollo lógico9 )ucesivamente. &e igual forma se procede con n. quedando as( preparado para calcular el siguiente número en la pró<ima iteración. e<cluido 4l. de#ando en la variable a el valor de b ! en b el valor de c. &esarrollo lógico9 'n a ! b se introducen. es igual a dic$o número.. ! viceversa7 es decir. >. respectivamente. 'l primer número de la serie es A.8L 8. de los que se decidirá si son amigos o no. en las variables m ! n. e<cluido 4l. en un proceso con n [ 8 iteraciones se calculan los n [ 8 números restantes de Cibonacci. ! cada uno de los siguientes es la suma los dos anteriores a el. onfeccionar un programa que decida si dos números son amigos. Programa que escriba los n primero números de la sucesión Cibonacci. 'n cada vuelta se calcula el siguiente número sumando los dos anteriores ! se introduce en la variable c. &esarrollo lógico9 )e introducen los número enteros.

alcular el m(nimo de veces que $abrá que realizar esta operación para que el depósito contenga .Fn del vino de la mezcla anterior. 'n cada una de ellas se comprueba si f es factor primo de n7 si lo es.). &e 4l se e<trae un litro ! se añade un litro de agua. ! el agua es el agua anterior menos . -nicialmente. M.8M estudiado coincide con b. La variable f será en cada momento un posible factor primo de n. &esarrollo lógico9 'n n se introduce el valor del número a descomponer en factores primos. indicando en cada paso la composición de la mezcla. Las variables reales agua ! vino están destinadas a contener las cantidades de agua ! vino de la mezcla en cada momento7 la variable entera etapa contendrá el número de veces que se realiza el trasiego. &espu4s de cada una de las operaciones de trasiego.Fn del agua de la mezcla más el litro que se añade. en caso contrario no lo es. )e $ace un número de iteraciones indeterminado $asta que n valga .. %l iniciar la evaluación de cada número. más agua que vino. Programa que descompone un número en sus factores primos. si no lo es. el vino que compone la mezcla es el vino que conten(a antes del trasiego menos . &e la mezcla se vuelve a sacar un litro añadiendo otro de agua. si el resto de dividir n entre f es A. 'l te<to acaba con el carácter punto (. -nicialmente.7 f es factor primo de n. el depósito contiene n litros de vino ! A de agua. Programa que cuenta número de letras (d) que aparecen en un te<to. se incrementa el valor de la variable f en . &esarrollo lógico. f vale 8. la variable b tomará el valor A. +n depósito contiene n litros de vino. O. dic$o número es perfecto. en la variable n queda el cociente de dividir n por f. L.

'laborar un programa que $alle la siguiente )umatoria9 i@0 5 @ ∑ (([. onstru!a un programa que $alle la siguiente )umatoria utilizando recursividad9 i@0 5 @ ∑ ii i@.. 'l proceso finaliza cuando la variable dd tenga como valor A.8O &esarrollo lógico9 recorrerá carácter a carácter todo el te<to. F iV) i@A . . P. .A. . de octubre de . -nicialmente con es A.QQO). a la variable con cuando se encuentre el carácter (d). 'laborar un programa que genere la siguiente serie9 . . &iseñe un programa que $alle los números primos que e<isten entre A ! ..)i[.AAA utilizando recursividad. d(a e<cepto febrero.)(86i[.8. Q. Programa que acepte una sucesión de fec$as con el formato dd mm aa (d(a. mes. onstru!a un programa que $alle la siguiente )umatoria utilizando recursividad9 i@0 5 @ ∑ (.. %suma que todos los meses tienen >. > E O .>. . 0ota. 'l número de t4rminos a generar debe ser capturado por teclado.P 8Q EO__.)) 6 (i[. año) ! las escriba en su forma normal (>.) i@. sumando ..F(86i[.