Está en la página 1de 29

PROGRAMA

DE INGENIERA CIVIL







UNIDAD 1. RECURSIVIDAD

La persona piensa en el equipo.

Introduccin

En la programacin de computadores, se requiere de manera peridica o excepcional


que los datos resultado de operaciones o del ingreso del usuario, sean almacenados
temporalmente para su uso posterior. Surge entonces, la necesidad de que esos datos
permanezcan en la memoria principal del computador, en un orden u organizacin que
facilite su utilizacin.

En la presente unidad, se indica la recursividad como una solucin a problemas a
travs de las funciones que se llaman as mismas. Tambin, se recurre a la memoria

PROGRAMA DE INGENIERA CIVIL



dinmica como una opcin de almacenamiento en la construccin y ejecucin de
programas de computador y los arreglos como parmetros de funciones.


Objetivos

Objetivo general

Reconocer y apropiar las estructuras de datos estticos unidimensionales y


bidimensionales, mediante programas modulares.

Objetivos especficos

Conocer diferentes estructuras estticas para el almacenamiento de datos.



Desarrollar programas modulares que hagan uso del almacenamiento esttico.























PROGRAMA DE INGENIERA CIVIL



1.1 Funciones (parmetros por valor y por referencia)

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).

1.1.1 Sintaxis de una funcin


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

void suma(int numA, int numB)



Si se llegase a omitir el tipo de retorno en la funcin como por ejemplo:

suma(int numA, int numB)

El compilador supone que el tipo de dato devuelto es int (entero).

Nombre_de_la funcin: el nombre identifica la funcin dentro del programa.

Se recomienda que el nombre refleje de manera breve el objetivo de la funcin. El
nombre puede iniciar con una letra o subrayado(_) teniendo en cuenta que en C++ los
nombres son sensibles entre maysculas y minsculas, lo cual significa que es diferente
una funcin con el nombre suma a SumA.

Lista_de_parmetros: describe los parmetros (por valor o por referencia) que recibe
la funcin cuando se invoca y, se denota de la siguiente manera:

tipo_dato1 parmetro1, tipo_dato2 parmetro2, tipo_dato3 parmetro

Cuerpo de la funcin: son las sentencias propias de la funcin y se encierran entre los
smbolos de llaves ({}).

return expresin: es la sentencia que retorna al programa principal el resultado de la
funcin, la palabra reservada para tal fin es return, si sta sentencia no se encuentra
en el cuerpo de la funcin, la ejecucin continuar hasta que encuentre la llave de
cierre (}).

Cuando el tipo de retorno es void, la sentencia se puede escribir como:

return;

Sin ninguna expresin de retorno, se puede omitir la sentencia return.

void suma(void)
{
cout<<Ejemplo de funcin que no devuelve valores;
}

La sentencia puede devolver un nico valor como se muestra a continuacin.

return(expresin) ! Expresin puede ser cualquier tipo de dato.

PROGRAMA DE INGENIERA CIVIL



1.1.2 Declaracin de una funcin

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.

main() 1.- Se hace el llamado de la


{ funcin suma desde el
programa principal main()

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.

Figura 1. Proceso de ejecucin de funcin.

1.1.4 Cdigo en C++ para DevC++

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 }

Explicacin lnea por lnea

Lnea 1 Lnea mensaje


Lnea 2 Lnea mensaje
Lnea 3 Cabecera y librera del programa
Lnea 4 Espacio de nombres donde se incluyen las definiciones para cout, cin, etc.
Declaracin de la funcin llamada operacin.
int operacion(int, int);
int: tipo de dato.
Lnea 5
operacin (sin tildes): nombre de la funcin.
(int, int): se declaran 2 parmetros tipo entero. Recordar que no es necesario darle
un nombre a cada parmetro, slo el tipo.
Lnea 6 Declaracin de la funcin principal main()
Lnea 7 Llave de apertura para la funcin principal.
Lnea 8 Declaracin de 2 variables tipo entero (NumA y NumB)
Mensaje en pantalla el cual debe iniciar con la palabra reservada cout seguida de
Lnea 9
los smbolos << y entre comillas () el mensaje deseado.
En sta lnea se almacena la respuesta del usuario en la variable NumA que para
Lnea 10 cumplir con la funcin de almacenamiento se invoca la palabra reservada cin
seguida de los smbolos >> y el nombre de la variable.

PROGRAMA DE INGENIERA CIVIL


cin>>NumA;

Nota: El nombre de la variable debe ser idntico al que se defini en la lnea 8.


Mensaje en pantalla el cual debe iniciar con la palabra reservada cout seguida de
Lnea 11
los smbolos << y entre comillas () el mensaje deseado.
En sta lnea se almacena la respuesta del usuario en la variable NumA que para
cumplir con la funcin de almacenamiento se invoca la palabra reservada cin
seguida de los smbolos >> y el nombre de la variable.
Lnea 12
cin>>NumB;

Nota: El nombre de la variable debe ser idntico al que se defini en la lnea 8.


Se invoca la funcin llamada operacin

cout<<"\n La suma es: " <<operacion(numA, numB);

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);

Parmetros por valor

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:

Lnea Cdigo para DevC++


1 //Programa que muestra el mecanismo de pasos de parmetro por valor
2 #include<iostream>
3 using namespace std;
4 void parmetro_valor(int x);
5 main()
6 {
7 int a= 5;
8 cout<<"En este momento a = "<<a;
9 parmetro_valor(a);
10 cout<<"\n\nObserve que regresando a la funcin main() el valor de a se
mantiene = "<<a;
11 cout<<"\n\n";
12 system ("pause");

PROGRAMA DE INGENIERA CIVIL



13 }
14 void parametro_valor(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

En el anterior programa ntese:



Antes de hacer el llamado a la funcin parmetro_valor, a = 5.
Dentro de la funcin parmetro_valor, x inicialmente tiene el valor de = 5.
Dentro de la funcin parmetro_valor, x ahora tiene el valor de = 100.
Despus de llamar a parmetro_valor, y regresar a la funcin principal a = 5.

Lo cual significa que cuando la funcin recibe el parmetro nmero en la variable
valor de la funcin parmetro_valor ste se cambia solo dentro de la funcin
denominada.

Parmetros por referencia

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:

Lnea Cdigo para DevC++


1 //Programa que muestra el mecanismo de pasos de parmetro por referencia
2 #include<iostream>
3 using namespace std;
4 void parametro_referencia(int& x);
5 main()
6 {
7 int a= 5;
8 cout<<"En este momento a = "<<a;
9 parametro_referencia(a);
10 cout<<"\n\nObserve que regresando a la funcin main() el valor de 'a' se cambio
a = "<<a;


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

En el anterior programa ntese:



Antes de hacer el llamado a la funcin parmetro_ referencia, a = 5.
Dentro de la funcin parmetro_referencia, x inicialmente tiene el valor de = 5.
Dentro de la funcin parmetro_ referencia, x ahora tiene el valor de = 100.
Despus de llamar a parmetro_ referencia, y regresar a la funcin principal a =
100.

Observe la diferencia de resultado entre parmetros por valor y parmetros por
referencia, donde ste ltimo cambi (a travs de la funcin denominada
parmetro_valor) el valor original de a en la funcin principal.

1.2 Arreglos (unidimensionales y bidimensionales)

Un arreglo (array) es una secuencia finita y ordenada de posiciones de memoria que


almacena datos del mismo tipo (Ej. Caracter- char, entero- int o flotante float) y a los
cuales se puede acceder directamente haciendo uso de subndices.

Los tipos de arreglos a estudiar son:

Arreglos unidimensionales
Arreglos bidimensionales

1.2.1 Arreglos unidimensionales

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.

Declaracin de un arreglo unidimensional en C++

Un arreglo se declara de la misma manera que cualquier otro tipo de datos en el


lenguaje C++ excepto que, debe indicar al compilador el tamao o longitud del arreglo.

La sintaxis para realizar es la siguiente:

Tipo_dato nombre_arreglo[nmero_elementos];

Ejemplo: para declarar un arreglo llamado Demo de 5 posiciones que contenga en cada
elemento un nmero entero es el siguiente:

int Demo[4];

PROGRAMA DE INGENIERA CIVIL



Tener en cuenta que las cinco posiciones son: 0, 1, 2, 3, 4.

Grficamente:

Demo 4 5 6 7 8
0 1 2 3 4

Una buena prctica de programacin, requiere definir el nmero de elementos en el
arreglo como una constante antes de declarar el arreglo. Por tanto, la declaracin del
arreglo para Demo se declarara, en la prctica, usando dos elementos como:

Const int Tam_arreglo = 4 // Define una constante para el nmero de elementos.


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:

Suma= Demo[0] + Demo[1] + Demo[2] + Demo[3] + Demo[4];


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.

Inicializacin de arreglos unidimensionales

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};

Demo[0] //Es inicializado con 4.


Demo[1] //Es inicializado con 5.
Demo[2] //Es inicializado con 6.
Demo[3] //Es inicializado con 9.

Nota: si el nmero de inicializadores es menor que el nmero de elementos declarado
entre los corchetes, los dems elementos del arreglo sern inicializados en cero.

Una caracterstica de los inicializadores es que puede omitirse el tamao de un arreglo
cuando los valores de inicializacin estn incluidos en la instruccin.

Ejemplo:
int Demo[] = {4, 5, 6, 7, 9};

En la anterior declaracin separa 5 posiciones de almacenamiento para 5 elementos.

Ejercicio para DevC++



PROGRAMA DE INGENIERA CIVIL



Construir un programa que almacene 3 nmeros reales digitados por el usuario dentro
de un arreglo de 3 posiciones.

Lnea Cdigo para DevC++


1 #include<iostream>
2 using namespace std;
3 main()
4 {
5 float Demo[2] = {0, 0}
6 cout<<"Ingrese el primer nmero para almacenar en la posicin 0: ";
7 cin>>Demo[0];
8 cout<<"Ingrese el segundo nmero para almacenar en la posicin 1: ";
9 cin>>Demo[1];
10 cout<<"Ingrese el tercer nmero para almacenar en la posicin 2: ";
11 cin>>Demo[2]; //Las siguientes instrucciones son para imprimir los
datos guardados en cada posicin del arreglo llamado Demo.
12 cout<<"\n\nEl nmero que ingres para la posicin 1 fue: "<<Demo[0];
13 cout<<"\nEl nmero que ingres para la posicin 2 fue: "<<Demo[1];
14 cout<<"\nEl nmero que ingres para la posicin 3 fue: "<<Demo[2];
15 cout<<"\n\n";
16 system("pause");
17 }


1.2.2 Arreglos bidimensionales

Los arreglos bidimensionales conocidos tambin como tablas o matrices, consisten en


una composicin de filas y columnas de elementos del mismo tipo.

En la figura No. 2, se ilustra una matriz de 12 elementos (3x4) con 3 filas y 6 columnas.

Columna 3

Columna 2
Columna 1
Columna 0


Fila 0

Fila 1 Elemento

PROGRAMA DE INGENIERA CIVIL


Fila 2

Figura No. 2. Arreglo bidimensional


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

Figura No. 2.1. Demo


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.

Declaracin de una arreglo bidimensional en C++

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.

Inicializacin de arreglos bidimensionales

Como en los arreglos unidimensionales, los arreglos bidimensionales pueden


inicializarse desde su declaracin en el programa. Ello se logra enlistando los valores
iniciales dentro de llaves y separndolo con comas. Adems, las llaves pueden usarse
para separar filas individuales. Por ejemplo:

int Demo[2][3] = {{4,5,6},
{8, 12, 88}};

La anterior instruccin declara, que Demo es un arreglo de nmeros enteros con dos
filas y tres columnas, con los valores dados en la declaracin. El primer conjunto de

PROGRAMA DE INGENIERA CIVIL



llaves internas contiene los valores para la fila 0 y el segundo conjunto de llaves
internas contiene los valores para la fila 1.

Aunque siempre se requieren las comas en las llaves de inicializacin, las llaves
internas pueden omitirse. Por tanto, la inicializacin para Demo puede escribirse
como:

int Demo[2][3] = {{4,5,6
8, 12, 88}};
O tambin:
int Demo[2][3] = {4,5,6, 8, 12, 88}

Ejercicio para DevC++

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 }

Almacenamiento de datos en arreglos

El almacenamiento de datos en arreglos consiste, en asignar a cada posicin de


memoria un dato del mismo tipo del cual fue definido el arreglo. Los elementos de un
arreglo se almacenan en posiciones contiguas.

Ejemplo: definir un arreglo de tipo int (entero), cuyo nombre es estudiantes con
cinco (5) posiciones de memoria.

Sintaxis:

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]

Cdigo en C++ para DevC++

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 }


1.3 Arreglos como parmetros de funciones

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.

Cdigo en C++ para DevC++

Crear un programa que contenga un arreglo unidimensional de 6 elementos con los


siguientes valores: 7, 9, 10, 12, 1, 99, invoque una funcin que reciba como parmetro

2
Bronson Gary, J. C++ para Ingeniera y Ciencias. Editorial: Thomson, 2007.

PROGRAMA DE INGENIERA CIVIL



ste arreglo y busque dentro de los elementos, el mayor valor almacenado y lo
imprima en pantalla.

Lnea Cdigo para DevC++
1 //Programa para pasar como parmetro un arreglo unidimensional.
2 #include<iostream>
3 using namespace std;
4 const int tamano=5;
5 int Num_mayor(int valores[tamano]);
6 main()
7 {
8 int numero[tamano]={7, 9, 100, 12, 99};
9 cout << "El nmero mayor es: " << Num_mayor(numero) <<endl;
10 system("pause");
11 }
12 int Num_mayor(int valores[tamano])
13 {
14 int i, maximo=valores[0];
15 for (i=1; i<tamano; i++)
16 if (maximo < valores[i])
17 maximo = valores[i];
18 return maximo;
19 }

Explicacin lnea por lnea

Lnea 1 Lnea mensaje


Lnea 2 Cabecera y librera del programa.
Lnea 3 Espacio de nombres donde se incluyen las definiciones para cout, cin etc.
Lnea 4 Definicin de la constante tamano de tipo entero con un valor de 5.
Declaracin de la funcin Num_mayor.

int Num_mayor(int valores[tamano]);


Lnea 5
int: Tipo de dato entero.
Num_mayor: Nombre de la funcin.
(int valores[tamano]): Se declara 1 parmetro tipo arreglo denominado valores con un
tamao de 5 elementos.
Lnea 6 Declaracin de la funcin principal main()
Lnea 7 Llave de apertura para la funcin principal.
Declaracin e inicializacin de un arreglo llamado numero con 5 elementos.
Lnea 8
int numero[tamano]={7, 9, 100, 12, 99};
Mensaje en pantalla el cual debe iniciar con la palabra reservada cout seguida de los
smbolos << y entre comillas () el mensaje deseado.
Lnea 9
cout << "El nmero mayor es: "

En sta misma lnea se invoca la funcin Num_mayor(numero)



PROGRAMA DE INGENIERA CIVIL



Cdigo que se utiliza para pausar la ejecucin del programa y mostrar los resultados en
Lnea 10 pantalla.
system("pause");
Lnea 11 Llave de cierre para la funcin principal (})
Inicio de la funcin Num_mayor.

Lnea 12 int: Funcin tipo entero.


Num_mayor: Nombre de la funcin.
int valores[tamano]): Arreglo como parmetro a la funcin.
Lnea 13 Llave de aperture a la funcin.
Declaracin de variables locales a la funcin:

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;

Lnea 19 Llave de cierre para la funcin Num_mayor (}).


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:

Cdigo en C++ para DevC++

Crear un programa que contenga un arreglo bidimensional (2X3) que equivale a 6


elementos con los siguientes valores: {700, 9, 100, 12, 99, 40}, invoque una funcin que

PROGRAMA DE INGENIERA CIVIL



reciba como parmetro ste arreglo bidimensional y busque dentro de los elementos el
mayor valor almacenado y lo imprima en pantalla.

Lnea Cdigo para DevC++
1 //Programa para pasar como parmetro un arreglo bidimensional.
2 #include<iostream>
3 using namespace std;
4 const int FILA=2;
5 const int COLUMNA=3;
6 int Num_mayor(int valores[FILA] [COLUMNA]);
7 main()
8 {
9 int numero[FILA][COLUMNA]={700, 9, 100, 12, 99, 40};
10 cout << "El nmero mayor es: " << Num_mayor(numero) <<endl;
11 system("pause");
12 }
13 int Num_mayor(int valores[FILA][COLUMNA])
14 {
15 int i,j, maximo=valores[0][0];
16 for (i=0; i<FILA; i++)
17 for (j=0; j<COLUMNA; j++)
18 if (maximo < valores[i][j])
19 maximo = valores[i][j];
20 return maximo;
21 }


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.

1.4.1 Tipos de recursividad3

La recursividad simple no final, donde el caso recursivo consiste en una sola


llamada a la funcin.
La recursividad mltiple, donde el caso recursivo consta de ms de una llamada
de la funcin.
La recursividad anidada, en las que hay llamadas recursivas en el argumento de
la funcin.


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.

Ejercicio para DevC++

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

En la programacin de computadores, es esencial, tener especial cuidado en el manejo


y administracin de memoria y recursos de procesamiento, ya que es un factor
determinante en la eficiencia y efectividad de la solucin de un problema a travs de un
lenguaje de programacin.

En el tema (funciones), se abord la solucin de problemas haciendo uso de las
funciones como un principio de modularidad, mantenimiento y recursividad; as
mismo, se present el manejo de memoria dinmica a travs de arreglos
unidimensionales y bidimensionales que facilitan el almacenamiento y recuperacin de
datos de manera directa o haciendo uso de funciones que tiene como parmetros estas
estructuras.

Y por ltimo, se destaca la recursividad en las funciones para lograr soluciones
algortmicas eficientes optimizando las lneas de codificacin.




























PROGRAMA DE INGENIERA CIVIL



Bibliografa

Aguilar, L. (2000). Programacin en algoritmos, estructuras de datos y objetos.


Madrid: McGraw Hill.
Bronson, G. (2007). C++ para Ingeniera y Ciencias. Editorial Thomson.
Ceballos, J. (1997). Programacin orientada a objetos con C++. Espaa: Ra-Ma 2
edicin.
Deitel, H. (2003). Cmo programar en C++. Mxico: Pearson Education - cuarta
edicin.
Langsam, Y., Augenstein, M. y Tenenbaum, A. (1997). Estructura de datos con
C++. Mxico: Pearson Education.

Referencias electrnicas

http://eperdomo89.wordpress.com/. Recuperado el 26 de marzo de 2014 a las


3:43 p.m.