Beruflich Dokumente
Kultur Dokumente
DE
INGENIERA
CIVIL
UNIDAD 1. RECURSIVIDAD
Introduccin
Objetivos
Objetivo general
Objetivos especficos
Las
funciones
son
unidades
de
programa
o
mdulos
que
se
disean
para
ejecutar
una
tarea
especfica.
Permiten
ahorrar
espacio,
reducir
repeticiones
y
hacer
ms
fcil
la
programacin
al
dividir
un
proyecto
grande
en
mdulos
ms
pequeos
y
manejables,
que
se
codifican,
depuran
y
prueban
de
manera
independiente
a
las
otras
unidades,
que
hacen
parte
del
programa
y
que
una
vez
creados,
pueden
ser
reutilizados
n
nmeros
de
veces
dentro
del
programa.
Cada
programa
en
C++
cuenta
con
una
funcin
denominada
principal
main(),
y
puede
contener
otras
funciones
internas.
(Son
funciones
que
vienen
incorporadas
en
el
sistema)
o
externas
(Funciones
que
son
definidas
por
el
usuario).
Tipo_de_retorno nombre_de_la_funcin (lista de parmetros)
{
cuerpo de la funcin
return expresin
}
Tipo_de_retorno:
este
componente
determina
el
tipo
de
dato
que
devuelve
la
funcin
una
vez
ejecutada.
El
tipo
de
dato
puede
ser:
entero
-int,
carcter
-char
o
flotante
-
float.
Ejemplos
int
suma
(int
numA,
int
numB)
!
Devuelve
un
tipo
entero
int.
Float
suma
(float
numA,
float
numB)
!
Devuelve
un
tipo
flotante
float.
double
suma
(double
numA,
double
numB)
!
Devuelve
un
tipo
doble
double.
Si
una
funcin
no
devuelve
ningn
resultado,
se
utiliza
el
tipo
de
dato
void
que
es
considerado
como
un
tipo
de
dato
especial.
PROGRAMA
DE
INGENIERA
CIVIL
Ejemplo
Para
que
una
funcin
pueda
ser
invocada
desde
cualquier
parte
del
programa,
debe
ser
inicialmente
declarada
conservando
la
misma
cabecera
de
la
funcin
y
finalizando
la
instruccin
con
punto
y
coma(;).
Las
funciones
se
declaran
al
principio
del
programa
antes
de
la
funcin
principal
main()
y
debe
conservar
la
siguiente
sintaxis:
Tipo
de
dato
devuelto
por
la
Nombre
de
la
funcin
funcin
(int,
float,
etc)
o
void
si
no
devuelve
ningn
valor.
Tipo_de_retorno
nombre_de_la_funcion
(declaracin_parmetros);
Declaracin
de
los
parmetros
de
la
funcin
separados
por
comas.
Estos
parmetros
son
el
tipo
de
dato
seguido
del
nombre
del
parmetro.
Ejemplo
#include<iostream>
using namespace std;
int suma(int x, int y); //" Declaracin de la funcin.
main()
{
Sentencias;
}
Nota:
Los
nombres
de
los
parmetros
se
pueden
omitir.
#include<iostream>
using namespace std;
int suma(int, int); //" Declaracin de la funcin sin
nombre de parmetros.
main()
{
Sentencias;
}
PROGRAMA
DE
INGENIERA
CIVIL
1.1.3 Llamado de una funcin
Para
poder
hacer
uso
de
una
funcin,
sta
debe
ser
llamada
o
invocada
a
travs
de
cualquier
expresin
dentro
del
programa
(generalmente
el
principal
main()
o
tambin
desde
otra
funcin).
Cuando
se
invoca
una
funcin,
sta
funcin
recibe
el
control
del
programa,
ejecuta
las
instrucciones
hasta
encontrar
la
sentencia
return
o
la
llave
de
cierre
(})
y
el
control
se
devuelve
a
la
funcin
principal
o
a
la
funcin
que
hizo
el
llamado.
En
la
figura
No.
0
se
ilustra
la
ejecucin
de
una
funcin.
suma();
suma();
} { 2.-
Se
ejecuta
el
cdigo
que
realiza
} la
operacin
suma
3.-
Se
retorna
a
la
funcin
principal
main()
para
continuar
con
las
instrucciones.
Crear
un
programa
que
reciba
dos
nmeros
enteros
digitados
por
el
usuario
y
a
travs
de
una
funcin,
realizar
la
operacin
suma
y
entregar
los
resultados
al
programa
principal.
PROGRAMA
DE
INGENIERA
CIVIL
Lnea
Cdigo
para
DevC++
1 //Programa que recibe dos nmeros enteros e invoca a una funcin que //realiza la
2 operacin suma.
3 #include <iostream>
4 using namespace std;
5 int operacion(int, int);
6 main()
7 {
8 int numA, numB;
9 cout<<"Ingrese el nmero A: ";
10 cin>>numA;
11 cout<<"Ingrese el nmero B: ";
12 cin>>numB;
13 cout<<"\n la suma es: "<<operacion(numA, numB);
14 cout<<"\n \n";
15 system("pause");
16 }
17 int operacion(int x, int y)
18 {
19 int suma;
20 suma= x + y;
21 return;
22 }
cin>>NumA;
Lnea 13 Con la anterior instruccin, se invoca la funcin con los datos ingresados por el
usuario en las lneas 10 y 12.
Ntese que el llamado se hace con la misma cantidad de parmetros enteros con
el cual se declar en la lnea 5.
Lnea 14 La sentencia cout<<"\n \n"; deja dos renglones en blanco.
Sentencia reservada para hacer una pausa y mostrar el resultado del programa al
Lnea 15
usuario.
Lnea 16 Llave de cierre para la funcin principal main()
Funcin: operacin
int operacion(int x, int y)
En sta lnea se inicia la funcin que realizar la operacin suma. Tener en cuenta
las siguientes observaciones:
Lnea 17
La funcin debe conservar la misma estructura que se declar en la lnea 5.
Los valores almacenados en NumA y NumB del programa principal, se
reciben en las variables X y Y respectivamente (que puede ser cualquier otro
nombre de variable.
Las variables X y Y deben ser enteras, tal como se declararon en la lnea 5.
Lnea 18 Llave de apertura para la funcin operacin ({).
Lnea 19 Declaracin de la variable suma de tipo entero.
Operacin que realiza la suma de los valores pasados por las variables NumA y
NumB a las variables X y Y respectivamente.
Lnea 20
suma= x + y;
Sentencia que retorna el resultado de la suma al programa principal.
Lnea 21
return suma;
Lnea 22 Llave de cierre para la funcin operacin (})
PROGRAMA
DE
INGENIERA
CIVIL
1.1.5 Paso de parmetros
Hasta
ahora
se
ha
visto
que
en
la
declaracin
y
llamado
a
las
funciones,
se
hace
uso
de
los
parmetros
que
describen
el
tipo
y
nombre
de
datos
sobre
los
cuales
operarn
las
funciones,
y
el
programa
en
general
o
la
declaracin
de
la
palabra
void
para
cuando
se
carecen
de
estos
parmetros
en
la
funcin.
En
C++
existen
dos
mtodos
para
pasar
parmetros
entre
funciones:
1)
parmetros
por
valor
y
2)
parmetros
por
referencia
o
pueden
no
tener
parmetros.
En
el
siguiente
ejemplo,
se
declara
una
funcin
con
dos
parmetros
de
tipo
entero.
int
suma(int
numA,
int
numB);
El
paso
de
parmetros
por
valor,
significa
que
los
parmetros
que
llegan
a
la
funcin
cuando
sta
es
invocada
pueden
cambiar
al
interior
de
la
funcin,
sin
que
estos
cambios
tengan
efectos
fuera
de
ella.
Algunas
consideraciones:
En
la
llamada
por
valor
no
se
devuelve
informacin
al
programa
que
hace
el
llamado
a
la
funcin.
No
se
hace
diferencia
entre
un
parmetro
que
es
variable,
constante
o
expresin
ya
que
solo
interesa
el
valor
del
argumento.
En
el
siguiente
ejercicio
programado
en
C++
para
DevC++
se
ilustra
una
variable
pasada
por
valor:
Los
parmetros
por
referencia
se
usan
cuando
una
funcin
debe
modificar
el
valor
del
parmetro
pasado
y
devolver
ste
valor
modificado
a
la
funcin
llamadora1.
Para
declarar
una
variable
parmetro
como
paso
por
referencia,
se
utiliza
el
smbolo
&
que
precede
el
nombre
de
la
variable.
En
el
siguiente
ejercicio
programado
en
C++
para
DevC++
se
ilustra
una
variable
pasada
por
referencia:
1
Aguilar, L . Programacin en algoritmos, estructuras de datos y objetos. Mc Graw Hill. Madrid 2000.
PROGRAMA
DE
INGENIERA
CIVIL
11 cout<<"\n\n";
12 system ("pause");
13 }
14 void parametro_referencia(int& x)
15 {
16 cout<<"\n\nEl valor de x dentro de la funcin es = "<<x; //(El mismo valor de a).
x = 100;
17 cout<<"\nEl valor de x dentro de la funcin ahora es= "<<x;
18 }
19
Es
el
tipo
ms
simple
de
arreglos
y
est
conformado
por
una
sola
dimensin
con
n
nmero
de
elementos
del
mismo
tipo.
En
la
figura
No.
1:
arreglo
unidimensional,
se
representa
grficamente
un
arreglo
llamado
Demo
con
3
posiciones,
donde
cada
posicin
representa
un
elemento
que
PROGRAMA
DE
INGENIERA
CIVIL
estar
acompaado
por
un
nmero
denominado
subndice
que
indica
la
posicin
del
elemento
dentro
del
arreglo.
Figura No.1. Arreglo unidimensional.
Como
el
nombre
del
arreglo
es
Demo,
para
referenciar
el
elemento
en
la
posicin
0
donde
est
almacenado
el
nmero
99,
se
utiliza
la
siguiente
sintaxis:
Demo[0].
Para
el
elemento
en
la
posicin
1,
donde
se
almacena
el
nmero
10.4,
la
sintaxis
es:
Demo[1].
Para
el
elemento
en
la
posicin
2,
donde
se
almacena
el
nmero
120,
la
sintaxis
es:
Demo[2].
En
el
ejemplo,
el
tamao
o
longitud
del
arreglo
es
de
3
elementos
(0,
1,
2);
ntese
que
el
primer
elemento
est
ubicado
en
la
posicin
0.
int
Demo[Tam_arreglo]
//Declara
el
arreglo
con
5
posiciones.
Otros
ejemplos
de
declaraciones
de
arreglo
usando
esta
sintaxis
de
2
lneas
son:
Const
int
TAMANO
=
50;
double
edades[TAMANO];
Const
int
NUMERO
=
10;
int
personas[NUMERO];
Const
int
CANTIDAD=10;
char
codigo[CANTIDAD];
En
estas
instrucciones
de
declaracin
a
cada
arreglo,
se
le
asigna
suficiente
memoria
para
contener
el
nmero
de
elementos
de
datos
dado
en
la
instruccin
de
declaracin.
Por
lo
tanto,
el
arreglo
nombrado
edades
tiene
almacenamiento
reservado
en
memoria
para
50
nmeros
tipo
double;
el
arreglo
llamado
personas
tiene
almacenamiento
reservado
en
memoria
para
10
nmeros
tipo
entero;
y
el
arreglo
llamado
codigo
tiene
almacenamiento
reservado
en
memoria
para
10
caracteres.
Los
identificadores
de
la
constante
TAMANO,
NUMERO
Y
CANTIDAD
son
nombres
cualesquiera,
seleccionados
por
el
programador.
Para
acceder
al
primer
elemento
del
arreglo
denominado
Demo
e
imprimir
su
valor
en
C++
se
realiza
de
la
siguiente
manera:
cout<<Demo[0];
La
anterior
instruccin
imprime
en
pantalla
el
valor
de
4
por
estar
en
la
posicin
0.
PROGRAMA
DE
INGENIERA
CIVIL
cout<<Demo[1];
La
anterior
instruccin
imprime
en
pantalla
el
valor
de
5
por
estar
en
la
posicin
1.
cout<<Demo[2];
La
anterior
instruccin
imprime
en
pantalla
el
valor
de
6
por
estar
en
la
posicin
2.
El
subndice
contenido
dentro
de
los
corchetes
no
necesita
ser
siempre
una
constante
en
nmero
entero,
estos
ndices
puede
ser
el
resultado
de
cualquier
expresin
entera,
siempre
y
cuando
ste
resultado
se
encuentre
dentro
del
rango
de
los
subndices
vlidos
definidos
cuando
se
declar
el
arreglo.
Por
ejemplo,
suponiendo
que
i
es
un
nmero
entero,
las
siguientes
variables
subindexadas
son
vlidas:
Demo[i];
Demo[i
+
2]
Demo[i
*
3]
Una
ventaja
importante
en
extremo
de
usar
expresiones
en
nmero
entero
como
subndices,
es
que
permiten
secuenciar
a
travs
de
un
arreglo
usando
un
ciclo,
lo
que
hace
innecesario
instrucciones
como
las
siguientes:
Los
valores
del
subndice
en
la
anterior
instruccin
pueden
reemplazarse
por
un
contador
de
ciclo
for
para
tener
acceso
a
cada
elemento
en
el
arreglo
en
forma
secuencial.
Ejemplo:
Suma
=
0;
//
Inicializa
la
suma
en
cero.
For
(i
=
0;
i
<
4;
i
++)
Suma
=
Suma
+
Demo[i];
//
Agrega
a
suma,
el
valor
almacenado
en
cada
posicin
del
arreglo
Demo
El
anterior
cdigo
recupera
de
manera
secuencial
cada
elemento
del
arreglo
y
agrega
el
elemento
a
la
variable
Suma.
Aqu
la
variable
i
se
usa
como
el
contador
en
el
ciclo
for
y
como
subndice
del
arreglo.
Conforme
i
se
incrementa
en
uno
cada
vez
a
travs
del
ciclo,
el
siguiente
elemento
en
el
arreglo
es
referenciado.
La
ventaja
de
usar
el
ciclo
for
para
procesar
en
secuencia
a
travs
de
un
arreglo
se
hace
evidente
cuando
se
trabaja
con
arreglos
grandes.
Por
ejemplo,
si
el
arreglo
Demo
PROGRAMA
DE
INGENIERA
CIVIL
contuviera
500
valores
en
lugar
de
cinco,
cambiar
el
nmero
4
a
500
en
la
instruccin
for
es
suficiente
para
procesar
en
secuencia
los
500
elementos
y
agregar
cada
elemento
a
la
suma.
Un
arreglo
se
inicializa
indicando
entre
llaves
los
elementos
que
se
contendrn
en
cada
posicin.
Ejemplo:
int
Demo
[4]
=
{4,
5,
6,
7,
9};
char
codigo
[6]
=
{m,
i,
l,
i,
t,
a,
r};
double
peso
[3]
=
{20.5,
89.2,
67.4,
66.9};
Los
valores
iniciales
del
arreglo
se
registran
en
el
mismo
orden
en
que
se
escriben,
es
decir:
el
primer
valor
de
inicializacin
corresponde
al
elemento
0;
el
segundo
valor
de
inicializacin
corresponde
al
elemento
1;
el
tercer
valor
corresponde
al
elemento
2
etc.;
hasta
que
todos
los
valores
se
hayan
usado.
Por
lo
tanto
en
la
declaracin:
int
Demo[4]
=
{4,
5,
6,
7,
9};
Columna
3
Columna
2
Columna
1
Columna
0
Fila
0
Fila
1
Elemento
PROGRAMA
DE
INGENIERA
CIVIL
Fila 2
Para
ubicar
un
elemento
dentro
de
una
matriz
se
utilizan
dos
subndices:
el
primer
subndice
hace
referencia
a
la
fila
y
el
segundo
subndice
hace
referencia
a
la
columna.
Columna
0
1
2
3
0
Fila 1 38 Elemento
Por
consiguiente,
para
ubicar
el
elemento
que
contiene
el
nmero
38
dentro
de
la
matriz
anterior,
se
denota
de
la
siguiente
manera:
Demo
[1,3]
lo
que
significa,
que
el
elemento
que
contiene
el
nmero
38
se
encuentra
en
una
matriz
denominada
Demo
en
la
fila
1
y
la
columna
3.
Una
matriz
se
declara
de
la
misma
manera
que
cualquier
otro
tipo
de
datos
en
el
lenguaje
C++
excepto
que,
debe
indicar
al
compilador
el
tamao
en
filas
y
columnas
de
dicha
matriz.
La
sintaxis
para
hacerlo
es
la
siguiente:
Tipo_dato nombre_matriz[nmero_filas][nmero_columnas];
PROGRAMA
DE
INGENIERA
CIVIL
Ejemplo:
Para
declarar
una
matriz
llamado
Demo
de
6
elementos
(2x3),
que
contenga
en
cada
elemento
un
nmero
entero
es
la
siguiente:
int
Demo[2][3];
Grficamente
un
arreglo
bidimensional
(2x3)
Subndices
de
filas
0
4
5
6
Demo
Subndices
de
1
8
12
88
columnas
0
1
2
Para
acceder
al
elemento
que
contiene
el
valor
entero
de
5
dentro
de
la
matriz
denominado
Demo
e
imprimir
su
valor
en
C++
se
hace
de
la
siguiente
manera:
cout
<<
Demo
[0]
[1];
Subndices
de
filas
Subndices
de
columnas
La
anterior
instruccin
imprime
en
pantalla
el
valor
de
5
por
estar
en
el
punto
de
interseccin
de
la
fila
0
con
la
columna
1.
Construir
un
programa
que
almacene
en
una
matriz
(2x3),
seis
nmeros
reales
digitados
por
el
usuario.
Lnea
Cdigo
para
DevC++
1 #include<iostream>
2 using namespace std;
3 main()
4 {
5 float Demo[2][3] = {0, 0, 0, 0, 0, 0}
6 cout<<"Ingrese el primer nmero para almacenar en la posicin [0,0]: ";
7 cin>>Demo[0][0];
8 cout<<"Ingrese el segundo nmero para almacenar en la posicin [0,1]: ";
9 cin>>Demo[0][1];
10 cout<<"Ingrese el tercer nmero para almacenar en la posicin [0,2]: ";
11 cin>>Demo[0][2];
12 cout<<"Ingrese el cuarto nmero para almacenar en la posicin [1,0]: ";
13 cin>>Demo[1][0];
14 cout<<"Ingrese el quinto nmero para almacenar en la posicin [1,1]: ";
15 cin>>Demo[1][1];
16 cout<<"Ingrese el sexto nmero para almacenar en la posicin [1,2]: ";
17 cin>>Demo[1][2]; //Las siguientes instrucciones son para imprimir los
datos guardados en cada posicin del arreglo llamado Demo.
18 cout<<"\n\nEl nmero que ingreso para la posicin [0,0] fue:
19 "<<Demo[0][0];
20 cout<<"\nEl nmero que ingreso para la posicin [0,1]fue: "<<Demo[0][1];
21 cout<<"\nEl nmero que ingreso para la posicin [0,2] fue:
22 "<<Demo[0][2];
23 cout<<"\n\nEl nmero que ingreso para la posicin [1,0] fue:
24 "<<Demo[1][0];
25 cout<<"\nEl nmero que ingreso para la posicin [1,1]fue: "<<Demo[1][1];
26 cout<<"\nEl nmero que ingreso para la posicin [1,2] fue:
27 "<<Demo[1][2];
28 cout<<"\n\n";
system("pause");
}
PROGRAMA
DE
INGENIERA
CIVIL
O
se
pude
optimizar
el
programa,
haciendo
uso
del
ciclo
for
tal
como
aparece
en
la
siguiente
estructura:
Lnea
Cdigo
para
DevC++
1 //Programa para almacenar nmeros enteros en una matriz (2x3)
2 #include<iostream>
3 using namespace std;
4 main()
5 {
6 float Demo[2][3] = {0, 0, 0, 0, 0, 0}
7 int i=0;
8 int j=0;
9 //Ciclos FOR para ingresar los nmeros enteros a la matriz.
10 for (i=0; i<2; i++)
11 {
12 for (j=0; j<3; j++)
13 {
14 cout<<"Ingrese el nmero real: ";
15 cin>>Demo[i][j];
16 }
17 }
18 //Ciclos FOR para IMPRIMIR los nmeros almacenados a la matriz.
19 for (i=0; i<2; i++)
20 {
21 for (j=0; j<3; j++)
22 {
23 cout<<"\nEl nmero ingresado en la posicin [" <<i <<"]x["
<<j <<"] es:" <<Demo[i][j];
24 cout<<"\n";
25 }
26 }
27 system("pause");
28 }
int estudiantes[5]
PROGRAMA
DE
INGENIERA
CIVIL
Grficamente:
Nombre
vector
Subndices
estudiantes[5]
[0]
[1]
Localidades
de
memoria
[2]
donde
se
almacenarn
[3]
los
nmeros
enteros.
[4]
Crear
un
programa
que
reciba
cinco
nmeros
enteros
ingresados
por
el
usuario,
haciendo
uso
del
ciclo
for
y
al
finalizar,
imprima
un
mensaje
que
indique
la
cantidad
de
nmeros
ingresados.
Lnea
Cdigo
para
DevC++
1 //Programa para almacenar 5 nmeros enteros en un arreglo
2 #include<iostream>
3 using namespace std;
4 main()
5 {
6 int numeros[5];
7 int i=0;
8 for (i=0; i<5; i++)
9 {
10 cout<<"Ingrese el nmero entero: ";
11 cin>>numeros[i];
12 }
13 cout<<"\nEl total de nmeros ingresados es: "<<i;
14 cout<<"\n";
15 system("pause");
16 }
Transmitir
arreglos
como
parmetros
a
una
funcin,
es
un
proceso
que
consiste
en
dar
acceso
al
arreglo
original
desde
una
funcin
y
en
consecuencia,
los
cambios
hechos
dentro
de
sta
funcin
se
aplican
en
forma
directa
al
arreglo
invocado.
PROGRAMA
DE
INGENIERA
CIVIL
Transmitir
un
arreglo
completo
de
valores
a
una
funcin,
en
muchos
aspectos
es
una
operacin
ms
fcil
que
transmitir
elementos
individuales.
La
funcin
llamada
recibe
acceso
al
arreglo
real,
en
lugar
de
una
copia
de
los
valores
de
dicho
arreglo2.
Por
ejemplo,
si
Demo
es
un
arreglo,
la
llamada
a
la
funcin
llamar_arreglo(Demo)
hace
que
el
arreglo
Demo
completo
est
disponible
en
la
funcin
llamar_arreglo().
Vase
los
siguientes
ejemplos:
int
Demo
[4];
char
codigo
[6];
double
peso
[3];
Los
anteriores
son
arreglos
declarados,
a
los
cuales
se
les
puede
realizar
las
siguientes
llamadas
a
funcin:
Llamado
(Demo);
Claves
(codigo);
Mas_pesado
(peso);
En
cada
caso,
la
funcin
llamada
recibe
acceso
directo
al
arreglo
nombrado.
Al
lado
del
receptor,
la
funcin
llamada
debe
ser
informada
sobre
el
arreglo
que
est
disponible.
A
continuacin,
se
describen
las
lneas
adecuadas
para
el
encabezado
de
la
funcin
para
las
funciones
previas.
int
Llamado
(
int
Demo
[4]
);
char
Claves
(
char
codigo
[6]
);
void
Mas_pesado
(
double
peso
[3]
);
//void
hace
que
la
funcin
no
retorne
valor
En
cada
una
de
las
anteriores
lneas
de
encabezado
de
la
funcin,
los
nombres:
Llamado,
Claves
y
Mas_pesado,
son
elegidos
por
el
programador;
y
los
parmetros
que
estn
en
cada
una
de
stas
funciones
entre
parntesis,
deben
coincidir
con
el
nombre
del
arreglo
original.
int i, maximo=valores[0];
Lnea 14
Ntese que la variable maximo acumula el elemento almacenado en la posicin 0 que
corresponde al No. 7.
Inicio del ciclo que recorrer cada posicin del arreglo.
Lnea 15
for (i=1; i<tamano; i++)
Cdigo que compara el valor de la variable maximo con cada elemento del arreglo
valores[]
Lnea 16
if (maximo < valores[i])
Cdigo que almacena en la variable maximo, el mayor valor encontrado en el arreglo
valores []
Lnea 17
maximo = valores[i];
Cdigo que retorna al programa principal, el valor almacenado en la variable maximo.
Lnea 18
return maximo;
Se
debe
tener
en
cuenta,
que
en
la
declaracin
de
la
funcin
int
Num_mayor(int
valores[tamano]);
devolver
un
nmero
entero
y
espera
un
arreglo
de
cinco
nmeros
enteros
como
argumento.
Tambin
se
hace
necesario
identificar,
que
en
la
funcin
principal
main
solo
se
crea
un
arreglo
con
el
nombre
de
numero
y
al
llegar
a
la
funcin
se
conoce
como
valores
(ambos
nombres
se
refieren
al
mismo
arreglo).
Transmitir
arreglos
bidimensionales
a
una
funcin,
es
un
proceso
similar
al
que
se
llev
a
cabo
para
arreglos
unidimensionales.
Observe
el
siguiente
ejercicio:
1.4 Recursividad
Una
funcin
recursiva,
es
aquella
funcin
que
puede
resolver
un
problema
llamndose
as
misma
varias
veces
hasta
obtener
la
solucin
al
problema.
3
Berlanga, LL., Iesta Quereda, J.M. introduccin a la Programacin con Pascal. Universitat Jaume I.
PROGRAMA
DE
INGENIERA
CIVIL
La
recursividad
indirecta
o
cruzada,
en
la
que
una
funcin
llama
a
otra
y
esa
otra
llama
a
la
primera.
Crear
una
funcin
recursiva
para
calcular
el
factorial
de
un
nmero
entero,
teniendo
en
cuenta
las
siguientes
condiciones
en
los
factoriales:
No
es
posible
calcular
el
factorial
de
nmeros
negativos,
no
est
definido.
El
factorial
de
cero
es
1.
Nota:
el
factorial
se
simboliza
como
n!,
se
lee
como
"n
factorial"
y
la
definicin
es:
n!
=
n
*
(n-1)
*
(n-2)
*
...
*
1
Ejemplo:
El
factorial
de
5
se
denota
as:
5!
=
5*4*3*2*1
5!
=
120
En
el
siguiente
cuadro,
se
da
solucin
al
problema
de
factorial
utilizando
programacin
no
recursiva.
Lnea
Cdigo
para
DevC++
(No
recursivo)
1 //Programa calcular factoriales.
2 #include<iostream>
3 using namespace std;
4 main()
5 {
6 int num, acumulador;
7 cout << "Ingrese el nmero al cual le calcular el factorial: ";
8 cin >> num;
9 while (num < 0)
10 {
11 cout << "ERROR, el nmero debe ser positivo. Ingrselo nuevamente!!: ";
cin >> num;
12 }
13 acumulador = 1;
14 for (num; num>=1; num--)
15 acumulador = acumulador * num ;
16 cout << "el factorial es: " << acumulador <<endl;
17 system ("pause");
18 }
19
PROGRAMA
DE
INGENIERA
CIVIL
Para
dar
respuesta
al
mismo
ejercicio
de
factorial
haciendo
uso
de
recursividad,
se
desarrolla
la
siguiente
solucin:
Lnea
Cdigo
para
DevC++
(Recursivo)
1 //Programa calcular factoriales con recursividad.
2 #include<iostream>
3 using namespace std;
4 int factorial(int);
5 main()
6 {
7 int num, acumulador, respuesta;
8 cout << "Ingrese el nmero al cual le calcular el factorial: ";
9 cin >> num;
10 while (num < 0)
11 {
12 cout << "ERROR, el nmero debe ser positivo. Ingrselo nuevamente!!: ";
13 cin >> num;
14 }
15 cout << "El factorial para el nmero ingresado es: " <<factorial(num)<<endl;
16 system ("pause");
17 }
18
int factorial(int valor)
{
if (valor == 0 || valor == 1)
{
return 1;
}
else
{
return valor * factorial(valor - 1);
}
}
En
la
solucin
anterior,
se
hace
uso
de
funciones
con
parmetros
por
valor
a
travs
de
la
funcin
int
factorial
(int
valor).
Observe
en
la
lnea
return
valor
*
factorial(valor
-
1);
como
la
funcin
es
llamada
nuevamente
y
en
cada
llamado
se
disminuye
en
una
unidad
la
variable
valor.
Esto
se
repite
hasta
que
la
variable
valor
alcance
el
valor
de
1,
que
es
donde
termina
la
recursividad
y
se
retorna
al
programa
principal
para
dar
los
resultados
de
la
operacin.
Aunque
la
funcin
factorial
es
un
buen
ejemplo
para
Demostrar
cmo
funciona
una
funcin
recursiva,
la
recursividad
no
es
un
buen
modo
de
resolver
esta
funcin
que
sera
ms
sencilla
y
rpida
haciendo
uso
del
bucle
for
(como
en
la
primera
solucin).
PROGRAMA
DE
INGENIERA
CIVIL
Resumen
Referencias electrnicas