Anda di halaman 1dari 0

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

101















Unidad II

Arreglos Unidimensionales y Bidimensionales


Sumario
La unidad tiene como propsito que el estudiante identifique y comprenda el
manejo de vectores; diseando con eficiencia programas que involucran un
conjunto de datos; valorando la importancia de los conocimientos para su
desarrollo acadmico. Contiene:

Arreglos
Operaciones con arreglos
Tipos de Arreglos
Mtodos de ordenacin y bsqueda
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

102
Leccin 4

Arreglos
En los programas que hemos realizado se han utilizado algunas variables, pero en
algunas ocasiones tendremos que manipular un gran nmero de variables. Por
ejemplo, para hallar el mayor de 1000 nmeros, resulta muy laborioso tener que
utilizar 1000 variables diferentes para almacenar cada uno de estos valores y
compararlas entre si causaria que el cdigo se incremente enormemente
produciendo ineficiencia en la programacin, pues se tendria que declarar una gran
cantidad de instrucciones de similar tipo, como se observa a continuacin:

float n1; float n2; ; float n1000;

Para resolver esta situacin C++ utiliza el concepto de arreglos, de modo que
podamos almacenar, acceder y procesar todas estas variables con un solo nombre,
sin necesidad de definir una variable para cada uno de ellos.

4.1. Arreglos
Un arreglo es un conjunto finito de elementos, todos del mismo tipo, que son
representados mediante una variable del mismo nombre, y se registran en
posiciones consecutivas de memoria. Las posiciones consecutivas de memoria se
denominan celdas o casillas, cada una de las casillas tiene asociado un nmero
llamado ndice o direccin, que se enumera consecutivamente 0, 1, 2, 3,., n-1
(Lpez, 2003).
El tamao o dimensin de un arreglo es el nmero de celdas que lo conforman. Por
ejemplo, un arreglo de dimensin 10.

arreglo
ndice 0 1 2 3 4 5 6 7 8 9 10
En cada una de las casillas se puede almacenar un elemento del conjunto finito.

4.2. Operaciones con Arreglos
Las operaciones que se pueden realizar con arreglos para resolver un problema son
los siguientes:
Lectura/ escritura
Asignacin
Actualizacin(insercin, eliminacin, modificacin)
Recorrido (acceso secuencial)
Ordenacin
Bsqueda

4.3. Tipos de Arreglos
Los arreglos pueden ser unidimensionales, bidimensionales o multidimensionales
(Juregui y Arriola, 2007).


Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

103

4.3.1. Arreglos Unidimensionales
Llamados tambin vectores, son aquellos que tienen un solo ndice. Sus elementos
se diferencian entre s por el valor que toma el ndice.
4.3.1.1. Declaracin un vector
Al igual que sucede con otras variables, es necesario declarar un vector antes de
utilizarlo, por ejemplo en C++, se especifica el tipo de dato de sus elementos,
luego el nombre del vector y despus entre corchetes ([ ]) la longitud del vector.

tipo nombreDelVector[tamao];

Donde:

tipo : tipo de dato del vector puede ser int, double, etc.
nombreDelVector : nombre identificador de la variable
tamao : nmero entero que indica la cantidad de elementos del
vector
Por ejemplo, para declarar un vector x de tipo entero de tamao 10:
int x[10];

4.3.1.2. Acceso a los elementos de un vector
Un ndice describe la posicin de un elemento dentro de un vector, un ndice se
enumera desde 0 hasta tamao-1, siendo tamao el nmero de elementos del
vector. Se tiene acceso a un elemento individual especificando el nombre del vector
y un ndice encerrado entre corchetes, es decir:

nombreDelVector [ndice]

Por ejemplo: Un vector entero x de 10 elementos:

x[10]= 4 8 7 5 6 10 12 3 1 18
Indice 0 1 2 3 4 5 6 7 8 9

Primer elemento del vector : x[0] = 4
Segundo elemento del vector : x[1] = 8
Tercer elemento del vector : x[2] = 7
.
.
.
Ultimo elemento del vector : x[9] = 18

Un elemento de un array se puede utilizar de la misma forma que cualquier otra
variable.

Por ejemplo, las siguientes operaciones son vlidas:

c[2] = 10 // Asignacin de un valor
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

104
z = x[5]
a = x[2] + x[5]
c[k] = a[k] * b[k]

Los ndices pueden alterar o cambiar su valor como resultado de hacer una
operacin aritmtica.
i = 4
x[i + 4] = 40 // asigna el valor de 40 a x[8]

El ndice puede tomar un valor especfico, que al ser utilizado en el vector nos da su
contenido.

i = 7
x[i] // nos da el contenido del elemento x[7]

4.3.1.3. Inicializacin de arreglos unidimensionales
Los vectores como cualquier variable, se les puede dar valores iniciales, esto se
consigue especificando una lista de valores. As tenemos:

tipo nombreDelVector[tamao] = {listaDeValores};

Donde:

tipo Es el tipo de dato del vector que puede ser int, double, etc.
listaDeValores Son lo valores separados por comas que son de tipo
compatible con el tipo de dato del vector.

Por ejemplo:

int a[5] = {1, 31, 2, 16, 8};

significa que a[0] tendr el valor 1, a[1] tendr el valor 31 y que a[4] tendr el
valor de 8.

int x[3] = {4, 3, 6}; // x es un vector de enteros
char cad[5] = {a,e,i,o,u}; // cad es un vector de caracteres
// que contiene las vocals
4.3.1.4. Arreglos sin tamao
Si est inicializando un arreglo de una sola dimensin, no es necesario que
especifique su tamao, sencillamente no ponga nada dentro de los corchetes. Si no
especifica el tamao el compilador cuenta automticamente el nmero de
constantes de inicializacin y usa este valor como el tamao del arreglo.

int num[] = {20, 30, 26, 8 , 6, 4};

Para el ejemplo anterior, el compilador crea un arreglo con 6 elementos de
longitud. Un arreglo sin tamao es til porque le resultar ms fcil cambiar el
tamao de la lista de inicializacin sin tener que contarlas y cambiar luego el
tamao del arreglo.

4.3.1.5. Lectura y salida de datos en vectores
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

105
a) Lectura de datos en vectores
En C++ debe leerse elemento a elemento y para ello se utiliza las estructuras
repetitivas. As tenemos:

// n = nmero de elementos del vector
for ( i = 0; i< n ; i++)
cin>>x[i]; // Leer (x[i])

b) Salida de datos en vectores
Debe de realizarse elemento a elemento y para ello se utiliza las estructuras
repetitivas. As tenemos:

for ( i = 0; i< n ; i++)
cout<< x[i]; // Escribir (x[i])

4.3.1.6. Ejercicios resueltos
Ejemplo 01
Escriba un programa para calcular la suma de los elementos de un vector. Por
ejemplo:

Entrada:

a[] = 1 5 10 15 -30 20 25 50 -100 40

Salida:
La suma del vector es:

Variables a utilizar en el programa:
i controla la estructura repetitiva for
a vector inicializado con los valores correspondientes
suma suma los elementos del vector

Pseudocdigo:
Inicio
// Declarar e inicializar variables y vectores
Entero: a[]={1, 5, 10, 15, -30, 20, 25, 50, -100, 40};
Entero: i, suma0
// Proceso calculo suma de arrays
Desde i 0 Hasta i< 10 con incremento 1 Hacer
suma suma + a[i]
Fin_desde
// Salida de resultados
Desde i 0 Hasta i< 10 con incremento 1 Hacer
Escribir (a[i] )
Fin_desde
Escribir ("La suma del vector ",suma)
Fin

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void main ()
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

106
{
// Declarar e inicializar variables y vectores
int a[ ]={1, 5, 10, 15, -30, 20, 25, 50, -100, 40};
int i, suma=0;
// Proceso calculo suma de arrays
for (i = 0; i< 10; i++)
suma = suma + a[i];
// Salida de resultados
for(i = 0; i< 10; i++)
cout<<a[i]<<setw(4);
cout<<"\nLa suma del vector "<<suma<<endl;
}

Para resolver el ejemplo planteado es necesario inicializar el vector a[] con 10
nmeros enteros entre positivos y negativos, as tambin se inicializa la variable
suma en cero, la cual funciona como un acumulador almacenando la suma de los
10 nmeros del vector y se define una variable i que ser usada como ndice del
vector pudiendo recorrer cada elemento del vector.

int a[] = {1, 5, 10, 15, -30, 20, 25, 50, -100, 40};
int i, suma = 0;

Para sumar los elementos del vector, es necesario recorrer el vector desde su
primer elemento (a[0]) hasta su ltimo elemento (a[9]), para esto se puede
emplear alguna estructura repetitiva, en nuestro caso se utiliza la estructura for, de
esta manera se ir acumulando la suma de cada elemento del vector en la variable
suma.

for (i = 0; i< 10; i++)
suma = suma + a[i];

Finalmente, como salida se muestra todos los elementos del vector, para lo cual es
necesario tambin usar una estructura repetitiva. En nuestro caso se utiliza la
estructura for, que permite mostrar cada elemento del vector, luego de esto, se
muestra el resultado de la suma calculada.

for(i = 0; i< 10; i++)
cout<<a[i]<<setw(4);
cout<<"\n La suma del vector "<<suma<<endl;

La funcin setw(4) se utiliza para imprimir los elementos del vector a, dejando
cuatro espacios.

Ejemplo 02
Escriba un programa que permita ingresar N nmeros enteros a un vector y halle el
menor y el mayor valor. Por ejemplo

Entrada
n=10;

a[] = 70 80 100 50 20 10 30 60 35 40
Salida
Mayor elemento: 100
Menor elemento: 10

Variables a utilizar en el programa:
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

107
i controla la estructura repetitiva for
n nmero de elementos del vector.
a vector inicializado con los valores correspondientes
mayor mayor elemento del vector.
menor menor elemento del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void main ()
{
// Definr e inicializar variables y vectores
int a[], i, mayor, menor, n = 10;
mayor = a[0];
menor = a[0];
//Ingreso de datos
cout<<Ingresar cantidad de elementos del vector: ;
cin>>n;
for ( i = 0; i< n ; i++)
cin>>a[i];
// Proceso: calculo del mayor y menor elemento del vector
for (i = 0; i < n; i++)
{
if (a[i] > mayor)
mayor = a[i];
if (a[i] < menor)
menor = a[i];
}
// Salida de resultados
for (i = 0; i < n; i++)
cout<<a[i]<<setw(4);
cout<<endl<<"El mayor elemento: "<< mayor<<endl
<<"El menor elemento: "<< menor<<endl;
}

Ejemplo 03
Escriba un programa para obtener la cantidad de billetes y monedas que debe
disponer una empresa para pagar el sueldo de sus N trabajadores. Se dispone de
billetes de 200, 100, 50, 20, 10 y monedas de 5, 2, 1. Por ejemplo:

Entrada:

billete[]= 200 100 50 20 10 5 2 1
Salida:
Sueldo: 358
1 billete 200
1 billete 100
1 billete 50
1 moneda 5
1 monedas 2
1 moneda 1
Desea seguir s/n:

Variables a utilizar en el programa:
i ndice que controla la estructura repetitiva for.
n nmero de elementos del vector.
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

108
a que contiene los billetes y monedas correspondientes.
m vector inicializado con billete,...moneda
sueldo sueldo del trabajador.
seguir variable que puede tomar dos valores verdadero o falso.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void main ()
{
// Definir e inicializar variables y vectores
int n = 8, i, sueldo, b[40];
bool seguir = true;
int a[8] = {200, 100, 50, 20, 10, 5, 2, 1};
char m[8][20]={"billete", "billete", "billete", "billete", "billete", "moneda",
"moneda", "moneda"};
char resp;
while (seguir)
{
cout<<"Ingrese sueldo:";
cin>>sueldo;
// Proceso
for (i = 0;i < n;i++)
{
b[i] = sueldo / a[i];
sueldo = sueldo % a[i];
}
// Salida de resultados
for (i = 0; i < n; i++)
{
if(b[i] > 0)
cout<<b[i]<<setw(10)<< m[i]<<setw(5)<<a[i]<<endl;
}
cout<<"Desea seguir s/n:";
cin>>resp;
if (resp == 's')
seguir = true;
else
seguir = false;
}
}

4.3.1.7. Paso de vectores a mdulos
Cuando se pasa un vector a un mdulo, los parmetros pasados de esta manera se
dice que son pasados por referencia, ya que el nombre del vector es una referencia
(puntero) a dicho vector (Gottfried, 1991). De acuerdo con el tipo de parmetro
para pasar un vector a un mdulo se debe de tener en cuenta lo siguiente:
a) Parmetro Actual
El nombre del vector debe de aparecer solo es decir sin corchetes o ndices como
un argumento actual dentro de la llamada al mdulo. As tenemos:

Cuando el mdulo retorna un valor:

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

109
variable = NombreDelModulo(nombreDelVector, );

Cuando el mdulo no retorna un valor:

NombreDelModulo(nombreDelVector, );
Por ejemplo, se tiene dos vectores a y b, con elementos n1, n2 respectivamente, el
mtodo se llama unionVector y sus parmetros actuales son:


unionVector (a, n1, b, n2);

Parmetros actuales
b) Parmetro formal
Se escribe de la misma manera, pero el vector debe de ser declarado,
estableciendo su tamao.

Tipo NombreDelModulo (tipo nombreDelVector[tamao], ...);

Si un elemento del vector es alterado dentro del mdulo, esta alteracin ser
reconocida en la porcin del programa desde la que se hizo la llamada (en realidad
en todo el mbito de la definicin del vector).

Del ejemplo anterior los parametros formales de los vectores a y b son:

void unionVector(int a[50], int n2, int b[50], int n2);


Parmetros formales

Durante la construccin de algunos programas se utilizarn las siguientes
funciones:
igual (int valor1, int valor2) ser verdadero si valor1 y valor2 son iguales
super (int valor1, int valor2) ser verdadero si valor1 es mayor que valor2
infer (int valor1, int valor2) ser verdadero si valor1 es menor que valor2

El siguiente cuadro muestra el desarrollo de las funciones igual(), super(), infer()
usando funciones y expresiones booleanas.

Usando funciones Usando expresiones booleanas
bool igual (int valor1, int valor2)
{
// Definir variable
bool r;
if (valor1 == valor2)
r = true;
else
r = false;
return r;
}
bool igual (int valor1, int valor2)
{
// Definir variable
bool r;
r= (valor1 == valor2);
return r;
}

bool super (int valor1, int valor2)
{
bool super (int valor1, int valor2)
{
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

110
// Definir variable
bool r;
if (valor1> valor2)
r = true;
else
r = false;
return r;
}

// Definir variable
bool r;
r= (valor1 > valor2);
return r;
}

bool infer (int valor1, int valor2)
{
// Definir variable
bool r;
if (valor1< valor2)
r = true;
else
r = false;
return r;
}

bool infer (int valor1, int valor2)
{
// Definir variable
bool r;
r= (valor1 < valor2);
return r;
}


Tabla 4.1. Funciones igual(), super(), infer()

4.3.1.8. Ejercicios resueltos
Ejemplo 04
Programa que determina el mayor elemento de un vector.
Entrada

a[] = 70 80 100 50 20 10 30 60 35 40

Salida
Mayor elemento: 100

El programa se resolver de dos formas:
a) Usando procedimiento
b) Usando funciones

Solucin a:
Mdulos que se utilizan:
void ingresarVector(int a[80], int &n), permite ingresar nmeros enteros al
vector.
void maximo(int a[80], int n, int &max), tiene como precondicin al vector a y
su nmero de elementos n, y como postcondicin el mayor elemento max del
vector a.
void mostrarVector(int vector[80], int numel), visualiza el contenido del vector

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[80], int &n);
void maximo(int a[80], int n, int &max);
void mostrarVector(int vector[80], int numel);
void main ()
{
// Definir e inicializar variables y vectores
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

111
int n, max =0 , a[80];
// Lectura de datos
ingresarVector(a, n);
// Proceso
maximo(a, n, max);
// Salida de resultados
mostrarVector(a, n);
cout<<"\nMayor numero: "<<max;
cout<<endl;
}
void ingresarVector(int a[80], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0;i < n;i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void maximo(int a[80], int n, int &max)
{
// Definir variable
int i;
max = a[0];
for (i = 0;i < n;i++)
{
if (a[i] >= max)
max = a[i];
}
}
void mostrarVector(int vector[80], int numel)
{
// Definir variable
int i;
for (i = 0;i < numel;i++)
cout<<vector[i]<<setw(4);
}

Solucin b:
Mdulos que se utilizan:
void ingresarVector(int a[80], int &n), permite ingresar nmeros enteros al
vector.
int maximo(int a[80], int n), tiene como precondicin al vector a y su nmero
de elementos n, y como postcondicin un nmero entero que representa el
elemento mximo del vector a.
void mostrarVector(int vector[80], int numel), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector (int a[80], int &n);
int maximo (int a[80], int n);
void mostrarVector(int vector[80], int numel);
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

112
void main ()
{
// Definir e inicializar variables y vectores
int n, max, a[80];
// Lectura de datos
ingresarVector(a, n);
// Proceso
max = maximo(a, n);
// Salida de resultados
mostrarVector(a, n);
cout<<"\nEl mayor elemento del vector: "<< max;
cout<<endl;
}
void ingresarVector (int a[80], int &n)
{
//Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0;i < n;i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
int maximo (int a[80], int n)
{
// Definir variables
int i, m;
m =a[0];
i = 0;
while (i < n)
{
if (a[i] >= m)
m = a[i];
i = i+1;
}
return m;
}
void mostrarVector(int vector[80], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
}

Ejemplo 05
Programa para contar el nmero de ocurrencias de un elemento en un vector. Por
ejemplo:

Entrada



Elemento a contar: 4
a[]= 4 5 7 4 3 4 8 4 9 4
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

113

Salida

Nro ocurrencias: 5

Mdulos que se utilizan:
int ocurrencia(int a[10], int n, int ele), tiene como precondicin el vector a, su
nmero de elementos n y elemento a contar ele, y como postcondicin el
nmero de ocurrencias de un valor en un vector.
void mostrarVector(int vector[10], int numel) muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
int ocurrencia(int a[10], int n, int ele);
void mostrarVector(int vector[10], int numel);
void main ()
{
// Definir e inicializar variables y vectores
int a[10]={4,5,7,4,3,4,8,4,9,4};
int n =10, ele, x;
mostrarVector(a, n);
// Lectura de datos
cout<<"\nIngrese elemento:";
cin>>ele;
// Proceso
x = ocurrencia(a, n, ele);
// Salida de resultados
cout<<"El numero de ocurrencias es: "<< x;
cout<<endl;
}
int ocurrencia(int a[10], int n, int ele)
{
// Definir e inicializar variables
int i = 0, ocu = 0;
while (i < n)
{
if (a[i]==ele)
ocu = ocu+1;
i = i+1;
}
return ocu;
}
void mostrarVector(int vector[10], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
}
Ejemplo 06
Programa que permita ingresar N nmeros enteros a un vector y obtenga dos
nuevos vectores. Un vector que contenga los nmeros pares y otro vector que
contenga los nmeros impares.

Entrada:
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

114



Salida:
b[] = 2 4 6 8 10

c[]= 3 5 9 11

Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
void separarpi(int a[50], int n, int b[50], int &n2, int c[50], int &n3), tiene como
precondicin al vector a y su nmero de elementos n, y como postcondicin a
los vectores b y c cada uno con su nmero de elementos n2, n3.
void mostrarVector(int vector[50], int numel), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void separarpi(int a[50], int n1, int b[50], int &n2,int c[50], int &n3);
void mostrarVector(int vector[50], int numel);
void main ()
{
// Definir e inicializar variables y vectores
int n1, n2=0, n3=0, a[50] , b[50], c[50];
//Lectura de datos
ingresarVector(a, n1);
//Proceso
separarpi(a, n1, b, n2, c, n3);
// Salida de resultados
cout<<"\nEl vector A es:";
mostrarVector(a, n1);
cout<<"\nEl vector de pares es:";
mostrarVector(b, n2);
cout<<"\nEl vector de impares es:";
mostrarVector(c, n3);
cout<<endl;
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void separarpi(int a[50], int n1, int b[50], int &n2,int c[50], int &n3)
{
// Definir variables
int i;
i = 0;
a[] = 2 3 4 5 6 8 9 10 11
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

115
while (i<n1)
{
if (a[i] % 2==0)
{
b[n2] = a[i];
n2 = n2+1;
}
else
{
c[n3] = a[i];
n3 = n3+1;
}
i = i+1;
}
}
void mostrarVector(int vector[50], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
}

Pasos del proceso de llamada
1. Se ejecuta el mdulo principal, definiendo los vectores a, b, c y las variables
correspondientes.
2. Se llama al mdulo ingresarVector(), para ingresar los elementos al vector a.
3. Se llama al mdulo separarpi(), para formar los vectores b de pares y c de
impares.
4. Se llama al mdulo mostrarVector() tres veces para mostrar a los vectores a,
b, y c.

Ejemplo 07
Programa para encontrar la interseccion de dos vectores a y b. La interseccin esta
formada por todos los elementos comunes que pertenecen a ambos vectores. Por
ejemplo:

Entrada:

a[] = 3 7 11 15 19

b[] = 4 7 13 15 18 19 20

Salida: el vector interseccin ser:

c[]= 7 15 19

Mdulos que se utilizan:
void ingresarVector(int a[80], int &n), permite ingresar nmeros enteros al
vector.
void interseccion(int a[80], int n1, int b[80], int n2, int c[80], int &n3), tiene
como precondicin a los vectores a y b cada uno con su respectivo nmero de
elementos n1, n2, y como postcondicin el vector c, con su nmero de
elementos n3.
void mostrarVector(int vector[80], int numel), muestra el contenido del vector

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

116
Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[80], int &n);
void interseccion (int a[80], int n1, int b[80], int n2, int c[80], int &n3);
void mostrarVector(int vector[80], int numel);
void main ()
{
// Definir variables y vectores
int n1, n2, n3 =0, a[80], b[80], c[80];
// Lectura de datos
ingresarVector(a, n1);
ingresarVector(b, n2);
// Proceso
interseccion(a, n1, b, n2, c, n3);
// Salida de resultados
cout<<"Vector A: "<<endl;
mostrarVector(a, n1);
cout<<"Vector B: "<<endl;
mostrarVector(b, n2);
cout<<"Vector C: "<<endl;
mostrarVector(c, n3);
}
void ingresarVector(int a[80], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void interseccion (int a[80], int n1, int b[80], int n2, int c[80], int &n3)
{
bool salir;
int i=0, j;
for (i=0;i<n1;i++)
{
salir =false;
for(j=0; j<n2 && !salir; j++)
{
if (a[i]==b[j] )
salir =true;
}
if (salir==true)
{
c[n3]=a[i];
n3++;
}
}

}
void mostrarVector(int vector[80], int numel)
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

117
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
cout<<endl;
}

Ejemplo 08
Programa donde se ingresa N elementos a un vector y sustituya cada par positivo
por una letra p, y cada impar positivo por la letra i, y los nmeros negativos son
eliminados del vector resultado. Por ejemplo:

Entrada:

a[] = 1 4 -3 8 9 10 12 11
Salida:
b[] = i p p i p P i


Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
void sustituyepi(int a[50], int n1, char b[50], int &n2), tiene como
precondicin al vector a y su nmero de elementos n1, y como postcondicin al
vector b y su nmero de elementos n2.
void mostrarVectorA(int vector[50], int numel), muestra el contenido del vector.
void mostrarVectorB(char charvector[50], int numel), muestra el contenido del
vector carcter b

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void sustituyepi( int a[50], int n1, char b[50], int &n2);
void mostrarVectorA(int vector[50], int numel);
void mostrarVectorB(char charvector[50], int numel);
void main ()
{
// Definir e inicializar variables y vectores
int n1, n2 =0, a[50];
char b[50];
ingresarVector(a, n1);
sustituyepi (a, n1, b, n2);
// Salida de resultados
cout<<"\nVector A: ";
mostrarVectorA(a, n1);
cout<<"\nVector resultante: ";
mostrarVectorB(b, n2);
cout<<endl;
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

118
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void sustituyepi( int a[50], int n1, char b[50], int &n2)
{
// Definir variables
int i;
i = 0;
while (i < n1)
{
if (a[i] > 0)
{
if (a[i] %2==0)
b[n2] = 'p';
else
b[n2] = 'i';
n2 = n2 +1;
}
i=i+1;
}
}
void mostrarVectorA(int vector[50], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
}
void mostrarVectorB(char charvector[50], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<charvector[i]<<setw(3);
cout<<endl;
}

Ejemplo 09
Programa donde se ingresa N y M nmeros enteros a dos vectores tal como A y B,
luego se traslada todos los nmeros impares tanto del vector A como del vector B a
un nuevo vector C. Por ejemplo:

Entrada:

a[]= 7 3 14 26 9

b[]= 11 18 17 8 5 20 21
Salida:

c[]= 7 3 9 11 17 5 21

Mdulos que se utilizan:
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

119
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
void separaImpar(int d[50], int n, int c[50], int &n3), tiene como precondicin
al vector d, con su nmero de elementos n y como postcondicin al vector c,
con su nmero de elementos n3.
void mostrarVector(int vector[50], int numel), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void separarImpar(int d[50], int n, int c[50], int &n3);
void mostrarVector(int vector[50], int numel);
void main ()
{
// Definir e inicializar variables
int n1, n2, n3 =0, a[50], b[50], c[50];
// Lectura de datos
ingresarVector (a, n1);
ingresarVector (b, n2);
// proceso
separarImpar(a, n1, c, n3);
separarImpar(b, n2, c, n3);
cout<<"\nvector A:";
mostrarVector(a, n1);
cout<<"\nvector B:";
mostrarVector(b, n2);
cout<<"\nvector C:";
mostrarVector(c, n3);
cout<<endl;
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void separarImpar(int d[50], int n, int c[50], int &n3)
{
// Definir variable
int i;
for (i = 0; i < n; i++)
{
if (d[i] % 2 == 1)
{
c[n3] = d[i];
n3 = n3+1;
}
}
}
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

120
void mostrarVector(int vector[50], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
}

Ejemplo 10
Programa que calcula el promedio entero del mayor y el menor nmero de un
vector y reemplazar este resultado a todos los nmeros pares del vector. Por
ejemplo:
Entrada:

a[]= 7 3 14 31 4 18 9
Salida:

a[]= 7 3 17 31 17 17 9

Nota:
Menor elemento es 3, el mayor elemento = 31
Promedio del mayor y el menor elemento del vector: (31 + 3) Div 2 = 17

Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
void mayorMenor(int a[50], int n, int &mayor, int &menor), tiene como
precondicin al vector a y su nmero de elementos n, y como postcondicin, el
mayor mayor y el menor elemento del vector.
void reemplazaVector(int a[50], int n, int p), tiene como precondicin al vector
a, su nmero de elementos y el promedio, y como postcondicin reemplaza el
promedio a todos los nmeros pares.
void mostrarVector(int vector[50], int numel), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void mayorMenor(int a[50], int n, int &mayor, int &menor);
void reemplazaVector(int a[50], int n, int p);
void mostrarVector(int vector[50], int numel);
void main ()
{
// Definir e inicializar variables y vectores
int n, p, mayor = 0, menor = 0, a[50];
// Lectura de datos
ingresarVector(a, n);
mayorMenor(a, n, mayor, menor);
p = (mayor+menor) / 2;
reemplazaVector(a, n, p);
mostrarVector(a, n);
cout<<endl;
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

121
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void mayorMenor(int a[50], int n1, int &mayor, int &menor)
{
// Definir variables
int i;
mayor = a[0];
menor = a[0];
i = 0;
while (i < n1)
{
if (a[i] > mayor)
mayor = a[i];
if (a[i] < menor)
menor = a[i];
i = i + 1;
}
}
void reemplazaVector(int a[50], int n1, int p)
{
// Definir variable
int i;
for (i = 0;i < n1;i++)
{
if (a[i] % 2 == 0)
a[i] = p;
}
}
void mostrarVector(int vector[50], int numel)
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
}

Ejemplo 11
Programa en el que se ingresa N y M nmeros enteros a dos vectores tal como A y
B. Si el vector A tiene ms elementos que el vector B, trasladar al final del vector B
la cantidad de elementos necesarios del vector A para que tenga el mismo tamao
que el vector A, en el caso de que el vector B tenga mas elementos que el vector A
proceder analogamente. Por ejemplo:

Entrada:

a[]= 7 3 14 26 9 20 21

b[]= 11 18 17 13
Salida:
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

122

b[]= 11 18 17 13 7 3 14

Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
void empareja(int a[50], int &n1, int b[50], int &n2, int d), tiene como
precondicin a los vectores a y b y su nmero de elementos n1, n2, y como
postcondicin obtiene un array a o b con el mismo nmero de elementos
void mostrarVector(int vector[50], int numel), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void empareja(int a[50], int &n1, int b[50], int &n2, int d);
void mostrarVector(int vector[50], int numel);
int i;
void main ()
{
// Definir e inicializar variables
int n1, n2, d, a[50], b[50];
// Lectura de datos
ingresarVector(a, n1);
// Lectura de datos
ingresarVector(b, n2);
// proceso
if (n1 == n2)
cout<<"\nVectores con los mismos elementos";
else
{
if (n1>n2)
{
d = n1-n2;
empareja(a, n1, b, n2, d);
}
else
{
d = n2-n1;
empareja(b, n2, a, n1, d);
}
cout<<"Vector A: "<<endl;
mostrarVector(a,n1);
cout<<"\n Vector B : "<<endl;
mostrarVector(b,n2);
}
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

123
}
}
void empareja(int a[50], int &n1, int b[50], int &n2, int d)
{
// Definir variable
for (i = 0; i < d; i++)
{
b[n2] = a[i];
n2 = n2 + 1;
}
}
void mostrarVector(int vector[50], int numel)
{
// Definir variable
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
cout<<endl;
}



Ejemplo 12
Programa para insertar un elemento en un vector indicando la posicin. La insercin
debe realizarse sobre el mismo vector. Por ejemplo:

Entrada:
a[]= 1 2 13 24 26

Insertar el valor: 20
En la posicin: 2

Salida:
a[]= 1 2 20 13 24 26

Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
void ingresarDatos(int &val, int &pos), permite ingresar el valor que se va a
insertar en el vector y la posicin donde se insertar.
bool insertarPorPosicion(int a[50],int &n1, int posicion, int valor), tiene como
precondicin el vector a, su nmero de elementos n1, la posicin y el valor, y
como postcondicin el vector a, con su nmero de elementos n1+1.
void mostrarVector(int vector[50], int numel), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void ingresarDatos(int &val, int &pos);
bool insertarPorPosicion(int a[50],int &n1, int posicion, int valor);
void mostrarVector(int vector[50], int numel);
void main ()
{
// Definir e inicializar variables y vectores
int n1, valor, posicion, a[50];
ingresarVector (a, n1);
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

124
ingresarDatos(valor, posicion);
cout<<"\nValor a insertar:"<<valor;
cout<<"\nInsertar posicion:"<< posicion;
if (insertarPorPosicion(a,n1, posicion, valor))
{
cout<<"\nnuevo Vector A: ";
mostrarVector(a, n1);
}
else
cout<<"\nno se pudo inserter:"<<endl;
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0;i < n;i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void ingresarDatos(int &val, int &pos)
{
cout<<"Ingresar valor a insertar:";
cin>>val;
cout<<"Ingresar posicion:";
cin>>pos;
}
bool insertarPorPosicion(int a[50],int &n1, int posicion, int valor)
{
bool encontro=false;
int i=0, j;
while (i<n1 && !encontro)
{
if (i==posicion)
encontro= true;
else
i++;
}
if(encontro)
{
j=n1;
while( i< j)
{
a[j]=a[j-1];
j--;
}
a[i]=valor;
n1++;
}
return encontro;

}
void mostrarVector(int vector[50], int numel)
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

125
{
// Definir variable
int i;
for (i = 0; i < numel; i++)
cout<<vector[i]<<setw(4);
cout<<endl:
}

Ejemplo 13
Escriba un programa para eliminar un elemento de un vector ingresando su valor.
Por ejemplo:

Entrada:
a[]= 1 2 13 24 26

Valor a eliminar: 24
Salida:
a[]= 1 2 13 26

Mdulos que se utilizan:
void ingresarVector (int a[50], int &n), permite ingresar nmeros enteros al
vector.
void ingresarDatos(int &val), permite ingresar la posicin (indice) permite
ingresar el valor que se va a eliminar.
bool eliminarPorValor(int a[50],int &n1,int valor), tiene como precondicin el
vector a, con nmero de elementos n1 y como postcondicin la variable entera
valor y el vector a, con su nmero de elementos n1.
void mostrarVector(int vector[50], int numel), muestra el contenido del vector

Pseudocodigo:
Funcion eliminarPorValor(a, n1, valor) : booleano
// Definir variables
Lgico: encontro false
Entero: i 0
Mientras (i<n1 y no encontro) Hacer
Si (a[i] = valor) entonces
encontro true
Sino
i i+1
Fin_si
Fin_mientras
Si (encontro) entonces
Mientras ( i<(n1-1)) Hacer
a[i]a[i+1]
i i+1
Fin_mientras
n1 n1-1
Fin_si
retornar encontro
Fin_funcion

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
void ingresarDatos(int &val);
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

126
bool eliminarPorValor(int a[50],int &n1,int valor);
void mostrarVector(int vector[50], int numel);
void main ()
{
// Definir variables y vectores
int n1, valor, sw = 0, a[50];
ingresarVector(a, n1);
cout<<"\nVector A: ";
mostrarVector(a, n1);
ingresarDatos(valor);
if (eliminarPorValor(a,n1,valor))
{
cout<<"Nuevo vector A:"<<endl;
mostrarVector(a, n1);
}
else
cout<<"\nEl valor no existe dentro del vector: "<<endl;
}
void ingresarVector(int a[50], int &n)
{
// Definir variable
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0;i < n;i++)
{
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
void ingresarDatos(int &val)
{
cout<<"\nIngresar valor a eliminar:";
cin>>val;
}
bool eliminarPorValor(int a[50],int &n1,int valor)
{
bool encontro=false;
int i=0;
while (i<n1 && !encontro)
{
if (a[i]==valor)
encontro= true;
else
i++;
}
if(encontro)
{
while(i<n1)
{
a[i]=a[i+1];
i++;
}
n1--;
}
return encontro;
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

127
}
void mostrarVector(int vector[50], int numel)
{
// Definir variable
int i;
for (i = 0;i < numel;i++)
cout<<vector[i]<<setw(4);
cout<<endl;
}

4.3.1.9. Ejercicios Propuestos
1. Escriba un programa que permita guardar n nmeros enteros a un vector y
calcular su promedio.
2. Programa donde se ingresa N elementos a un vector A y M elementos a un
vector B y se muestra en un nuevo vector C todos los elementos del vector A
que no estn en el vector B. Por ejemplo:
Entrada:
a[] = 3 7 11 15 19

b[] = 4 7 13 15 18 19 20
Salida:
c[]= 3 11
3. Guarde N nmeros enteros en un vector, calcule el promedio entero del mayor y
el menor nmero y reemplace este resultado en todos los nmeros pares del
vector.
4. Ingrese N nmeros enteros a un vector, luego pase a otro vector todos los
nmeros perfectos y en caso no exista ningun nmero perfecto muestre un
mensaje correspondiente.
5. Guarde N y M nmeros enteros en dos vectores tales como A y B, despues si el
vector A tiene mas elementos que B, pase todos los nmeros impares de A al
final del vector B, y en caso contrario pase todos los nmeros impares de B al
final del vector A.
6. Guarde N nmeros en un vector, luego reemplace el contenido del mayor
nmero por el acumulado de la suma de todos los nmeros que se ubican
despus de este. Por ejemplo si el mayor esta en la posicin 4 sume a partir de
la posicin 5 hacia la posicin N - 1.
7. Se proceder con un aumento de sueldo para los trabajadores de una empresa.
Registre en un arreglo los nombres de los trabajadores y en otro arreglo los
sueldos que aun perciben. Calcule el nuevo sueldo de tal modo que para los
empleados con sueldo actual mayor a S/.2800.00 tendr un aumento de 10%,
caso contrario aumentara en 15%. Finalmente halle el promedio de todos los
sueldos y visualice en un nuevo arreglo los nombres de los empleados que
tengan sueldos mayores al promedio.
8. Construya un programa donde se ingrese un nmero entero, luego coloque cada
uno de sus dgitos en un vector y muestre la posicin del dgito menor.
9. Escriba un programa para encontrar la union de dos vectores A y B. La unin de
los vectores A y B es el conjunto formado por todos los elementos que
pertenecen a A o a B o a ambos. Por ejemplo:

Entrada:
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

128
a[] = 0 1 2 3 4 5

b[] = 5 6 8
Salida:
c[]= 0 1 2 3 4 5 6 8
10. Programa que permita eliminar de un primer vector todos los elementos que
coincide con los del segundo vector. Por ejemplo:
Entrada:
a[] = 12 3 5 9 23 70

b[] = 3 9 12
Salida:
a[]= 5 23 70


4.3.2. Arreglos bidimensionales
Llamados tambin matrices o tablas. Es un conjunto de elementos del mismo tipo
de dato que se almacena bajo un mismo nombre y necesita especificar dos ndices
para identificar a cada elemento del arreglo.

4.3.2.1. Declaracin de una matriz
Para declarar una matriz en C++, es necesario especificar el tipo dato de sus
elementos, luego el nombre de la matriz y despus entre corchetes ([ ][ ]) la
longitud de la matriz. El primer par de corchetes contiene el ndice que representa a
la fila y el segundo par de corchetes contiene el ndice que representa a la columna.
Su sintaxis es:
tipo nombreDeLaMatriz[fila][columna];

Donde:

tipo : tipo de dato del arreglo que puede ser int,double, etc.
nombreDeLaMatriz : : nombre identificador de la variable
fila : nmero entero que indica el nmero de filas de la matriz
columna : nmero entero que indica el nmero de columnas de la
matriz

Ejemplo:
int x[4][5];
0 1 2 3 4
0 25 8 2 10 7
x[4][5]= 1 7 13 18 1 6
2 1 9 11 14 4
3 24 17 6 20 15
4.3.2.2. Acceso a los elementos de una matriz
Para tener acceso a cada elemento individual de una matriz se usan dos ndices, el
primero indica la fila y el segundo la columna, es decir
nombreDeLaMatriz[fila][columna]
Por ejemplo si tenemos un matriz x de 3 filas y 4 columnas.
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

129
0 1 2 3
0 5 8 12 7
X[3][4]= 1 2 3 18 6
2 1 9 11 4

Primer elemento de la matriz: x[0][0] = 5
Segundo elemento de la matriz: x[0][1] = 8
Tercer elemento de la matriz: x[0][2] = 12
.
.
.
Ultimo elemento: x[2][3] = 4

4.3.2.3. Inicializacin de arreglos bidimensionales
Las matrices como cualquier variable, se les puede dar valores iniciales, esto se
consigue especificando una lista de valores. As tenemos:

tipo nombreDeLaMatriz[fila][columna]={{valoresFila1},{valoresFila2},,{ valoresFilaN }};

Donde:

valoresFila1 es una lista de valores separados por comas que ser
colocada en la primera fila, valoresFila2 seran colocados en la
segunda fila y as sucesivamente.
Por ejemplo:

int x[2][3] = { {26, 28, 30}, {12, 14, 16} };

Donde:

La primera fila es el primer par de llaves internas:

x[0][0] = 26 ; x[0][1] = 28; x[0][2] = 30;

La segunda fila es el segundo par de llaves internas:

x[1][0] = 12 ; x[1][1] = 14 ; x[1][2 ] = 16;

La matriz finalmente ser:

=
16 14 12
30 28 26
x


4.3.2.4. Lectura y salida de datos en matrices
a) Lectura de datos en matrices
Al igual que en los vectores se debe leer elemento a elemento. As tenemos:
// fila = nmero de filas de la matriz
// columna = nmero de columnas de la matriz
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

130
for ( i = 0; i< fila ; i++)
{
for ( j = 0; j< columna; j++)
cin>>x[i][j]; // Leer (x[i][j])
}

b) Salida de datos en matrices
Al igual que en los vectores se debe escribir elemento a elemento. As tenemos:

for ( i = 0; i< fila ; i++)
{
for ( j = 0; j< columna; j++)
cout<<x[i][j]; // Escribir (x[i][j])
}

4.3.2.5. Ejercicios Resueltos
Ejemplo 01
Escriba un programa para hallar el mayor y menor elemento de una matriz de N
filas y M columnas.

Por ejemplo:
Entrada





Salida
El mayor elemento es: 175
El menor elemento es: 5

Variables a utilizar en el programa:
i, j controla la estructura repetitiva for
fila nmero de filas de la matriz
columna nmero de columnas de la matriz
a matriz de elementos.
mayor mayor elemento de la matriz
menor menor elemento de la matriz

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void main ()
{
// Definir variables y matrices
int i, j, fila, columna, mayor, menor, a[50][50];
// Lectura de datos
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0; i < fila; i++)
35 40 22 70
10 27 42 31
a[][]= 15 18 25 17
90 5 175 85
37 35 45 105
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

131
{
for (j = 0; j < columna; j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
// Se asigna el primer elemento de la matriz al mayor y menor
mayor = a[0][0];
menor = a[0][0];
// Proceso
for (i = 0;i < fila;i++)
{
for (j = 0; j < columna; j++)
{
if (a[i][j] >= mayor)
mayor = a[i][j] ;
if (a[i][j] <= menor)
menor = a[i][j];
}
}
// Salida de resultados
for (i = 0; i < fila; i++)
{
for (j = 0;j < columna;j++)
{
cout<<a[i][j]<<setw(4);
}
cout<<endl;
}
cout<<"El mayor elemento es "<<mayor<<endl
<<"El menor elemento es "<< menor<<endl;
}

Explicacin:
Para desarrollar el ejemplo planteado se definen las variables i, j, fila, columna,
mayor, menor y la matriz a[][], con un tamao de 50 filas y 50 columnas, es decir
se esta reservando 250 espacios de memoria.

int i, j, fila, columna, mayor, menor, a[50][50];

Para ingresar valores a una matriz es necesario emplear dos estructuras
repetitivas, en nuestro caso empleamos un doble for; de esta manera la primera
estructura repetitiva permitir recorrer las filas de la matriz a la vez que la segunda
estructura repetitiva recorre las columnas de la matriz. As mismo, antes de
ingresar los valores a la matriz ingresamos la cantidad de filas y columnas que
tendr la matriz mediante las variables fila, columna:

// Lectura de datos
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0;i < fila;i++)
{
for (j = 0; j < columna; j++)
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

132
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}

Se asigna el primer elemento de la matriz tanto a la variable mayor como a la
variable menor, esto es, para poder realizar la comparacin entre todos los
elementos de la matriz.

mayor = a[0][0];
menor = a[0][0];

Se recorre la matriz mediante una doble estructura for y va comparando la variable
mayor y menor con cada elemento de la matriz empleando dos estructuras if,
obtenindose de esta manera el mayor y el menor elemento de la matriz.

for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
if (a[i][j] >= mayor)
mayor = a[i][j] ;
if (a[i][j] <= menor)
menor = a[i][j];
}
}

Finalmente se muestra los elementos de la matriz empleando tambin una doble
estructura for, as tambin, se muestra el mayor y el menor elemento de la matriz.

for (i = 0;i < fila;i++)
{
for (j = 0;j < columna;j++)
{
cout<<a[i][j]<<setw(4);
}
cout<<"\n";
}
cout<<"\nEl mayor elemento es "<<mayor;
cout<<"\nEl menor elemento es "<< menor;

Ejemplo 02
Escriba un programa que halle el mayor numero entero de cada fila de una matriz
de N filas y M columnas, y los almacene en un vector. Por ejemplo:

Entrada:






Salida: Vector que contiene el mayor de cada fila es:


80 40 50 70
10 27 42 31
a[][]= 15 30 25 10
90 5 175 85
55 35 45 105
mayor[]= 80 42 30 175 105
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

133

Variables a utilizar en el programa:
i, j controla la estructura repetitiva for
fila nmero de filas de la matriz.
columna nmero de columnas de la matriz.
a matriz con elementos.
b vector que contiene el mayor de cada fila.
mayor mayor valor de cada fila de una matriz.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void main ()
{
// Definir variables y matrices
int i, j, fila, columna, mayor, a[50][50], b[50];
// Lectura de datos
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
// Se asigna a la variable mayor el primer elemento
mayor = a[0][0];
// Proceso mayor de cada fila
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
if (a[i][j] >= mayor)
mayor = a[i][j] ;
}
b[i] = mayor;
mayor = 0;
}
// Salida de resultados
for (i = 0; i < fila; i++)
{
for (j = 0;j < columna;j++)
cout<<a[i][j]<<setw(4);
cout<<endl;
}
cout<<"\nMayor de cada fila:";
for(i = 0;i < fila;i++)
cout<<b[i]<<setw(4);
cout<<endl;
}

Ejemplo 03
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

134
Escriba un programa que sume los elementos de cada fila de una matriz y
almacene el resultado en un vector. Por ejemplo:

Entrada






Salida: vector que contiene la suma de cada fila es:



Variables a utilizar en el programa:
i,j controla la estructura repetitiva for
fila nmero de filas de la matriz
columna nmero de columnas de la matriz
a matriz con elementos
suma que contiene la suma de cada fila

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void main ()
{
// Definir variables y matrices
int i, j, fila, columna, a[80][80], suma[80];
// Lectura de datos
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
cout<<"Ingresar elemento: ";
cin>>a[i][j];
}
}
//Proceso
for (i = 0; i < fila; i++)
{
suma[i] = 0;
for (j = 0; j < columna; j++)
suma[i] = suma[i] + a[i][j];
}
// Salida de resultados
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
cout<<a[i][j]<<setw(4);
cout<<endl;
}
cout<<"La suma de cada fila es: ";
80 40 50 70
10 27 42 31
a[][]= 15 30 25 10
90 5 175 85
55 35 45 105
suma[]= 240 110 80 355 240
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

135
for (i = 0; i < fila; i++)
cout<<suma[i]<<setw(4);
cout<<endl;
}

4.3.2.6. Paso de una matriz a mdulo
Cuando se pasa una matriz a un mdulo al igual que en los vectores, los
parmetros son pasados por referencia. De acuerdo al tipo de parmetro para
pasar una matriz a un mdulo se debe de tener en cuenta lo siguiente:
a) Parmetro actual
El nombre de la matriz debe de aparecer solo, es decir sin corchetes o ndices como
un argumento actual dentro de la llamada al mdulo.

Cuando el mdulo retorna un valor:

variable = NombreDelModulo(nombreDeLaMatriz, );

Cuando el mdulo no retorna un valor:

NombreDelModulo(nombreDeLaMatriz, );

Por ejemplo matrizTriangular es el nombre del mtodo, a es una matriz con
elementos fila y columna, entonces la llamada al mtodo y sus parmetros actuales
son:
matrizTriangular (a, fila, columna)

Parmetros actuales
b) Parmetro formal
Se escribe de la misma manera, pero la matriz debe de ser declarada,
estableciendo la cantidad de filas y columnas que tendr.

Tipo NombreDelModulo (tipo nombreDeLaMatriz[fila][columna], ...);

Si un elemento de matriz es alterado dentro del mdulo, esta alteracin ser
reconocida en todo el mbito de la definicin de la matriz.

Del ejemplo anterior, los parametros formales son:

void matrizTriangular(int a[50][50], int fila, int columna);


Parmetros formales


4.3.2.7. Ejercicios Resueltos
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

136
Ejemplo 04
Programa para realizar la transpuesta de una matriz cuadrada. La matriz
transpuesta cambia las filas por las columnas. Por ejemplo:

Entrada:
1 2 3
a[][]= 4 5 6
7 8 9

Salida:
1 4 7
a[][]= 2 5 8
3 6 9

Mdulos que se utilizan:
void ingresarMatriz (int a[50][50], int &fila, int &columna), permite ingresar
nmeros enteros a la matriz.
void transpuesta(int a[50][50], int fila, int columna), tiene como precondicin a
la matriz a y su nmero de filas y columnas, y como postcondicin la matriz
transpuesta de a.
void mostrarMatriz(int a[50][50], int nrofilas, int nrocolumnas), muestra el
contenido de la matriz.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarMatriz (int a[50][50], int &fila, int &columna);
void transpuesta(int a[50][50], int fila, int columna);
void mostrarMatriz(int a[50][50], int nrofilas, int nrocolumnas);
void main()
{
// Definir variables
int fila, columna, a[50][50];
ingresarMatriz(a, fila, columna);
transpuesta(a, fila, columna);
mostrarMatriz(a, fila, columna);
}
void ingresarMatriz (int a[50][50], int &fila, int &columna)
{
// Definir variables
int i, j, n;
cout<<"Ingresar tamao de la matriz:";
cin>>n;
fila=columna=n;
for (i = 0; i < fila; i++)
{
for (j = 0;j < columna;j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
}
void transpuesta(int a[50][50], int fila, int columna)
{
// Definir variables
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

137
int i, j,aux;
for (i = 0;i < fila;i++)
{
for (j = i+1;j < columna;j++)
{
aux = a[i][j];
a[i][j] = a[j][i];
a[j][i] = aux;
}
}
}
void mostrarMatriz(int a[50][50], int nrofilas, int nrocolumnas)
{
// Definir variables
int i, j;
for (i = 0; i < nrofilas; i++)
{
for (j = 0; j < nrocolumnas; j++)
cout<<a[i][j]<<setw(3);
cout<<endl;
}
}

Ejemplo 05
Escriba un programa para intercambiar las columnas de una matriz. El intercambio
se har entre la primera y la ltima columna, la segunda y la penultima, y asi
sucesivamente. Por ejemplo:

Entrada: Salida:
1 7 9 8 10 17 17 10 8 9 7 1
a[][]= 13 2 4 25 6 22 a[][]= 22 6 25 4 2 13
4 0 5 12 15 20 20 15 12 5 0 4

Mdulos que se utilizan:

void ingresarMatriz (int a[50][50], int &fila, int &columna), permite ingresar
nmeros enteros a la matriz.
void interCambio(int a[50][50], int fila, int columna), tiene como precondicin a
la matriz a, nmero de filas y columnas, y como postcondicin el intercambio
de las columnas correspondientes
void muestraMatriz(int a[50][50], int fila, int columna) muestra el contenido de
la matriz

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarMatriz (int a[50][50], int &fila, int &columna);
void interCambio(int a[50][50], int fila, int columna);
void mostrarMatriz(int a[50][50], int fila, int columna);
// Variables globales
int i,j;
void main()
{
// Definir variables y matrices
int fila, columna, a[50][50];
// Lectura de datos
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

138
ingresarMatriz (a, fila, columna);
cout<<"Matriz original\n";
mostrarMatriz (a, fila, columna);
// Salida de resultados
interCambio (a, fila, columna);
cout<<"Matriz intercambio\n";
mostrarMatriz (a, fila, columna);
}
void ingresarMatriz(int a[50][50], int &fila, int &columna)
{
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0;i < fila;i++)
{
for (j = 0;j < columna;j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
}
void interCambio(int a[50][50], int fila, int columna)
{
// Definir e inicializar variables
int t, k = columna-1;
for (i = 0;i < fila;i++)
{
for (j = 0;j < columna;j++)
{
if (i< k)
{
t = a[j][i];
a[j][i] = a[j][k];
a[j][k] = t;
}
}
k = k - 1;
}
}
void mostrarMatriz(int a[50][50], int fila, int columna)
{
for (i = 0;i < fila;i++)
{
for (j = 0;j < columna;j++)
cout<<a[i][j]<<setw(4);
cout<<endl;
}
}

Ejemplo 06
Escriba un programa para ingresar nmeros enteros a un vector de tamao M y a
una matriz de N filas y M columnas, luego sume los elementos de la fila que
contengan al menor valor entero de la matriz con los elementos del vector y
muestre el resultado en un nuevo vector.Por ejemplo:
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

139

Entrada:
7 10 5 12
15 3 13 4
a[] = 10 2 18 7 b[][] = 6 22 4 16
9 14 23 9
17 21 8 11
Salida:
Menor valor de la matriz = 3 (corresponde a la fila 2)
El vector suma es :

c[] = 25 5 31 11

Mdulos que se utilizan:
void ingresarVector(int x[50], int &n), permite ingresar numeros enteros al
vector.
void ingresarMatriz (int a[50][50], int &fila, int &columna), permite ingresar
nmeros enteros a la matriz.
int buscaPosi(int b[50][50], int fila, int columna) , tiene como precondicin a la
matriz a y su nmero de filas y columnas, y como postcondicin un nmero
entero que representa la posicin de la fila que contiene el elemento menor de
la matriz
void sumar(int a[50], int b[50][50], int posi, int columna, int c[50]), tiene como
precondicin al vector a, la matriz b, la posicin y el nmero de columnas, y
como postcondcin el vector c.
void mostrarMatriz(int a[50][50], int fila, int columna) muestra el contenido de
la matriz.
void mostrarVector (int vector[50], int num), muestra el contenido del vector

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int x[50], int &n);
void ingresarMatriz (int a[50][50], int &fila, int &columna);
int buscaPosi(int b[50][50],int fila, int columna);
void sumar(int a[50], int b[50][50], int posi, int columna, int c[50]);
void mostrarMatriz(int a[50][50], int fila, int columna);
void mostrarVector(int vector[50], int num);
int i,j;
void main()
{
// definir e inicializar variables y matrices
int n1, posi, fila, columna, a[50], b[50][50],c[50];
ingresarVector (a, n1);
ingresarMatriz (b, fila, columna);
cout<<"Vector A"<<endl;
mostrarVector (a, n1);
cout<<"Matriz B"<<endl;
mostrarMatriz (b, fila, columna);
posi = buscaPosi (b, fila, columna);
sumar(a, b, posi, columna, c);
cout<<El menor elemento de la matriz es la fila: <<(posi+1)<<\n;
cout<<"Vector suma: "<<endl;
mostrarVector (c, n1);
}
void ingresarVector(int x[50], int &n)
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

140
{
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i < n; i++)
{
cout<<"Ingresar elemento: ";
cin>>x[i];
}
}
void ingresarMatriz (int a[50][50], int &fila, int &columna)
{
// Definir variables
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0; i < fila; i++)
{
for (j = 0;j < columna;j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
}
int buscaPosi(int b[50][50],int fila, int columna)
{
// Definir variables
int m, posi;
m = b[0][0];
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
if (b[i][j] <= m)
{
m = b[i][j];
posi = i;
}
}
}
return posi;
}
void sumar(int a[50], int b[50][50], int posi, int columna, int c[50])
{
// Definir variable
for (i = 0;i < columna;i++)
c[i] = b[posi][i] + a[i];
}
void mostrarMatriz(int a[50][50], int fila, int columna)
{
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
cout<<a[i][j]<<setw(4);
cout<<endl;
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

141
}
}
void mostrarVector(int vector[50], int num)
{
for (i = 0;i < num;i++)
cout<<vector[i]<<setw(3);
cout<<endl;
}

Ejemplo 07
Escriba un programa que permita intercambiar los elementos de una fila y una
columna determinada de una matriz cuadrada. Por ejemplo:

Entrada
N = 5
Fila = 2, columna = 2 Salida:

6 12 18 4 21 6 10 18 4 21
10 7 9 14 2 12 7 16 11 3
a[][]= 13 16 20 3 17 a[][]= 13 9 20 3 17
5 11 22 1 15 5 14 22 1 15
23 3 19 8 12 23 2 19 8 12

Mdulos que se utilizan:
void ingresarMatriz (int a[50][50], int &fila, int &columna), permite ingresar
nmeros enteros a la matriz.
void interFilaColumna(int a[50][50], int posiFila, int posiColumna, int columna),
tiene como precondicin a la matriz a y su nmero de filas y columnas, y como
postcondicin intercambia la fila y columna de una matriz
void mostrarMatriz(int a[50][50], int fila, int columna) muestra el contenido de
la matriz

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarMatriz (int a[50][50], int &fila, int &columna);
void interFilaColumna(int a[50][50], int posiFila, int posiColumna, int columna);
void mostrarMatriz(int a[50][50], int fila, int columna);
// variables globales
int i,j;
void main()
{
// Definir variables
int posiFila, posiColumna, fila, columna, a[50][50];
ingresarMatriz(a, fila, columna);
mostrarMatriz(a, fila, columna);
cout<<"Ingrese fila a cambiar:";
cin>>posiFila;
cout<<"Ingrese columna cambiar:";
cin>>posiColumna;
interFilaColumna(a, posiFila, posiColumna, columna);
mostrarMatriz(a, fila, columna);
}
void ingresarMatriz (int a[50][50], int &fila, int &columna)
{
// Definir variables
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

142
int n;
cout<<"Ingresar tamao de la matriz:";
cin>>n;
fila=columna=n;
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
}
void interFilaColumna(int a[50][50],int posiFila, int posiColumna, int columna)
{
// Definir variables
int temp;
for (i =0; i< columna; i++)
{
temp = a[posiFila-1][i];
a[posiFila-1][i] = a[i][posiColumna-1];
a[i][posiColumna-1] = temp;
}
}
void mostrarMatriz(int a[50][50], int fila, int columna)
{
for (i = 0; i < fila; i++)
{
for (j = 0;j < columna;j++)
cout<<a[i][j]<<setw(3);
cout<<endl;
}
cout<<endl;
}

Ejemplo 08
Escriba un programa que pase a un vector todos los elementos de una matriz de
tamao N*M que forman la letra O.

Entrada:
9 4 11 15 6
a[][]= 2 16 19 1 17
13 10 5 18 8
7 14 20 3 12
Salida:

b[]= 9 4 11 15 6 2 17 13 8 7 14 20 3 12

Mdulos que se utilizan:
void ingresarMatriz (int a[50][50], int &fila, int &columna), permite ingresar
nmeros enteros a la matriz.
void letraO(int a[50][50], int fila, int columna, int b[50], int &k), tiene como
precondicin a la matriz a, nmero de filas y columnas de la matriz, y como
postcondicin al vector b con k elementos.
void mostrarMatriz(int a[50][50], int fila, int columna) muestra el contenido de
la matriz con su nmero de filas y columnas.
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

143
void mostrarVector(int vector[50], int k), muestra el contenido del vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarMatriz (int a[50][50], int &fila, int &columna);
void letraO(int a[50][50], int fila, int columna, int b[50], int &k);
void mostrarMatriz(int a[50][50], int fila, int columna);
void mostrarVector(int vector[50], int k);
int i,j;
void main()
{
// Definir variables
int fila, columna, a[50][50], b[50], k =0;
ingresarMatriz(a, fila, columna);
cout<<"Imprime matriz\n";
mostrarMatriz(a, fila, columna);
letraO(a, fila, columna, b, k);
cout<<"\nImprime vector: ";
mostrarVector(b, k);
}
void ingresarMatriz (int a[50][50], int &fila, int &columna)
{
// Definir variables
cout<<"Ingresar cantidad de filas de la matriz:";
cin>>fila;
cout<<"Ingresar cantidad de columnas de la matriz:";
cin>>columna;
for (i = 0; i < fila ;i++)
{
for (j = 0; j < columna; j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
}
void letraO(int a[50][50], int fila, int columna, int b[50], int &k)
{
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
{
if ((i == 0) || (i == fila - 1))
{
b[k] = a[i][j];
k = k + 1;
}
else
{
if ((j == 0) || (j == columna - 1))
{
b[k] = a[i][j];
k = k + 1;
}
}
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

144
}
}
}
void mostrarMatriz(int a[50][50], int fila, int columna)
{
for (i = 0; i < fila; i++)
{
for (j = 0; j < columna; j++)
cout<<a[i][j]<<setw(3);
cout<<endl;
}
}
void mostrarVector(int vector[50], int k)
{
for (i = 0;i < k;i++)
cout<<vector[i]<<setw(3);
cout<<endl;
}


Ejemplo 09
Escriba un programa para calcular la suma de los elementos de la diagonal principal
y la suma de los elementos de la diagonal secundaria de una matriz cuadrada. Por
ejemplo:

Entrada:
6 10 18 4 21
12 7 16 11 3
a[][]= 13 9 20 3 17
5 14 50 1 15
23 2 19 8 12

Salida: Suma de diagonal principal: 46
Suma de diagonal secundaria: 89

Mdulos que se utilizan:
void ingresarMatriz (int a[50][50], int &n), permite ingresar nmeros enteros a
la matriz.
void sumarDiagonalPrincipal(int a[50][50], int n, int &suma), tiene como
precondicin a la matriz a, nmero de filas, y como postcondicin a la suma de
la diagonal principal.
void sumarDiagonalSecundaria(int a[50][50], int n, int &suma), tiene como
precondicin a la matriz a, nmero de filas, y como postcondicin a la suma de
la diagonal.secundaria.
void mostrarSumas(int suma1, int suma2), muestra las sumas de los elementos
de la diagonal principal y secundaria.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarMatriz (int a[50][50], int &n);
void sumarDiagonalPrincipal(int a[50][50], int n, int &suma);
void sumarDiagonalSecundaria(int a[50][50], int n, int &suma);
void mostrarSumas(int suma1, int suma2);
int i;
void main()
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

145
{
// Definir e inicializar variables y matrices
int filacol, a[50][50], sp=0, ss=0;
ingresarMatriz(a, filacol);
sumarDiagonalPrincipal(a, filacol, sp);
sumarDiagonalSecundaria(a, filacol, ss);
mostrarSumas(sp, ss);
}
void ingresarMatriz (int a[50][50], int &n)
{
// Definir variables
int n;
cout<<"Ingresar tamao de la matriz:";
cin>>n;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
cout<<"Ingresar elemento:";
cin>>a[i][j];
}
}
}
void sumarDiagonalPrincipal(int a[50][50], int n, int &suma)
{
for (i = 0; i<n; i++)
suma=suma + a[i][i];
}
void sumarDiagonalSecundaria(int a[50][50], int n, int &suma)
{
int j=n-1;
for (i = 0; i < fila; i++)
{
suma = suma + a[i][j];
j--;
}
}
void mostrarSumas(int suma1, int suma2){
cout<<La suma de los elementos de la diagonal principal es <<suma1<<endl
<<La suma de los elementos de la diagonal secundaria es <<suma2<<endl;
}


4.3.2.8. Ejercicios Propuestos
1. Calcule la suma de los nmeros pares e impares de una matriz de N filas y M
columnas.Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
Suma de pares = 20
Suma de impares = 25
2. Escriba un programa para intercambiar los elementos de la diagonal principal y
diagonal secundaria de una matriz cuadrada. Por ejemplo:

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

146
Entrada:
6 10 18 4 21
12 7 16 11 3
a[][]= 13 9 20 3 17
5 14 50 1 15
23 2 19 8 12

Salida: al intercambiar obtenemos
21 10 18 4 6
12 11 16 7 3
a[][]= 13 9 20 3 17
5 1 50 14 15
12 2 19 8 23
3. Intercambie el mayor y menor valor de una matriz de N filas y M columnas. Por
ejemplo:
80 40 50 70
5 15 25 10
a[][]= 10 18 34 9
90 30 175 85
55 35 45 105

Mayor elemento = 175
Menor elemento = 5
Intercambiando el mayor elemento con el menor elemento, se tiene:

80 40 50 70
175 15 25 10
a[][]= 10 18 34 9
90 30 5 85
55 35 45 105

4. Ingrese valores a una matriz de tamao N*M y pase a un vector todos los
valores que se encuentren en columnas impares a un vector.
5. Almacene en una fila X los cuadrados de la fila Y de una matriz de tamao
N*M. Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
Fila 1: su cuadrado: 1 4 9
Se almacena en la fila 3:
Obtenemos:
1 2 3
a[][]= 4 5 6
1 4 9
6. Sume los datos de los elementos de cada fila de una matriz de tamao N*M y
almacene el resultado en una nueva fila. Por ejemplo:
1 2 3
a[][]= 4 5 6
7 8 9
Suma fila 1: 6
Suma fila 2: 15
Suma fila 3: 24
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

147
La matriz ahora ser:
1 2 3
a[][]= 4 5 6
7 8 9
6 15 24
7. Escriba un programa para llenar la matriz identidad de orden (tamao) N. Una
matriz identidad es aquella en la que la diagonal principal est llena de unos y
el resto de los elementos son cero. Para este caso:
Se asigna 1, cuando los ndices i y j sean iguales
Se asigna 0, cuando los ndices i y j sean diferentes

1 0 0 0
a[][]= 0 1 0 0
0 0 1 0
0 0 0 1
8. Una empresa ha convocado a un concurso de un puesto de trabajo. En dicho
concurso se presentan N postulantes, cuyos nombres son guardados en un
vector, as mismo, se realiza 4 pruebas cuyos puntajes obtenidos son
guardados en una matriz. Calcule el puntaje total de cada postulante.
Finalmente muestre el nombre del candidato con el mayor puntaje, y en caso
existiera mas de un candidato con el mayor puntaje muestre los nombres de
todos estos.
9. Guarde nmeros enteros en una matriz de tamao N*M luego, devuelva en un
vector la columna que tiene el menor promedio.
10. Guarde nmeros enteros en dos matrices de tamao N*M tal como A y B, luego
copie en dos nuevas matrices tal como C y D los elementos alternos de A y B.
2 15 25 41 5 12 10 6
a[][] = 19 13 22 4 b[][]= 7 16 38 17
23 5 9 13 37 22 12 41

2 12 25 6 5 15 10 41
c[][]= 7 13 38 4 d[][]= 19 16 22 17
23 22 9 41 37 5 12 13

4.3.3. Arreglos Multidimensionales
Son los arreglos con tres o ms dimensiones. A continuacin sintaxis, de un arreglo
de tres dimensiones:
tipo nombreArreglo[fila][columna][profundidad];
Ejemplo:
int a[5][4][2];
0 1 2 3
0 1 0 1 0 1 0 1
0
1
2
3
4
Indice1
Indice3
Indice2
a[5][4][2] =
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

148
Leccin 5

Mtodos de ordenacin y bsqueda

La ordenacin y la bsqueda son dos procesos que frecuentemente se realizan para
resolver problemas por computadora.
La operacin de bsqueda para recuperar informacin normalmente se efecta
sobre elementos ordenados.
Se define la ordenacin de la siguiente manera:
Sea A una lista de N elementos:
A
0
, A
1
, A
2
,A
N
Clasificar u ordenar significa cambiar de posicin estos elementos de tal forma que
los elementos quedan de acuerdo con una distribucin preestablecida.
Ascendente A
0
<= A
1
<= A
2
<=, ... <= A
N
Descendente A
0
>= A
1
>= A
2
>=, ... >=A
N

5.1 Mtodos de ordenacin

5.1.1. Mtodo de ordenacin por seleccin simple
Sea A el vector con N elementos a clasificar en forma ascendente. Se compara el
primer elemento del vector ubicado en A[0] con los elementos ubicados desde A[1]
hasta A[n-1] intercambiando el valor de A[0] si es mayor al elemento con que se
compara, luego se har lo mismo con el resto de elementos (Joyanes et al., 2003).

Ejemplo:
Sea A el vector a clasificar en forma ascendente.

8 40 26 12 1
0 1 2 3 4

Primera pasada: Se compara el elemento ubicado en A[0] con el resto de los
elementos obteniendo al menor elemento en A[0].

8 40 26 12 1
8 40 26 12 1
8 40 26 12 1
8 40 26 12 1
1 40 26 12 8


Segunda pasada: Se compara el elemento ubicado en A[1] con el resto de los
elementos obteniendo al menor elemento en A[1].

1 40 26 12 8
26 40 12 8
12 40 26 8
8 40 26 12
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

149

Tercera pasada: Se compara el elemento ubicado en A[2] con el resto de los
elementos obteniendo al menor elemento en A[2].

1 8 40 26 12
26 40 12
12 40 26

Cuarta pasada: Se compara el elemento ubicado en A[3] con el resto de los
elementos obteniendo al menor elemento en A[3].

1 8 12 40 26
26 40

El vector est ordenado es:

1 8 12 26 40
0 1 2 3 4

Algoritmo
Se tiene un vector de N elementos para clasificar. Primero se escoge el menor
elemento del vector y se ubica en la posicin 0. Luego quedan N-1 elementos para
clasificar de los cuales se evala el menor y se pone en la posicin 1 y as
sucesivamente hasta que quede un solo elemento el cual se coloca en la ltima
posicin del arreglo.

Mdulos que se utilizan:
void ingresarVector (int &n, int a[80])), permite ingresar nmeros enteros al
vector.
void imprimirArreglo(int n, int a[80]), muestra el vector ordenado.
void ordenarArreglo(int n, int a[80]), ordena los elementos del vector.

#include <iostream.h>
void ingresarArreglo(int &n, int a[80]);
void imprimirArreglo(int n, int a[80]);
void ordenarArreglo(int n, int a[80]);
int i;
void main()
{
int n, a[80];
ingresarArreglo(n, a);
cout<<"Arreglo ingresado"<<endl;
imprimirArreglo(n, a);
ordenarArreglo(n, a);
cout<<"Arreglo ordenado"<<endl;
imprimirArreglo(n, a);
}
void ingresarArreglo(int &n, int a[80]){
cout<<"Ingresar cantidad de elementos: ";
cin>>n;
for(i=0; i<n; i++){
cout<<"Ingresar elemento: ";
cin>>a[i];
}
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

150
}
void imprimirArreglo(int n, int a[80]){
for(i=0; i<n; i++)
cout<<a[i]<<"\t";
cout<<endl;
}
void ordenarArreglo(int n, int a[80]){
int j, aux;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(a[i]>a[j]){
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}

5.2 Mtodos de bsqueda

5.2.1. Bsqueda Secuencial
La bsqueda secuencial consiste en revisar elemento hasta encontrar el dato
buscado.
Cuando se habla de bsqueda en arreglos debe de distinguirse entre arreglos
desordenados y arreglos ordenados (Joyanes et al., 2003).

a) En arreglos desordenados
La bsqueda secuencial en arreglos desordenados consiste bsicamente, en
recorrer el arreglo de izquierda a derecha hasta que encuentre el elemento
buscado. Normalmente cuando una funcin de bsqueda concluya con xito,
interesa conocer si el elemento pertenece o no al vector.

Sea A el vector
8 40 26 12 1 4 14

Elemento a buscar 40
Comparamos cada elemento del vector con el elemento a buscar (26), como
encuentra el elemento a buscar devuelve verdad, ya que 26 pertenece al vector.

Algoritmo
Para cada elemento del vector, determina si es igual al elemento buscado, esta
bsqueda es realizado por la funcin buscaVectorDesordenado, que devuelve
verdad si elemento pertenece al vector y falso si elemento no pertenece al vector

Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
bool buscaVectorDesordenado(int a[50], int n, int ele), tiene como precondicin
al vector a, su nmero de elementos n y elemento a buscar n, y como
postcondicin devuelve verdad si elemento pertenece al vector y falso si
elemento no pertenece al vector.
void mostrarVector(int vector[50], int num), muestra el vector ordenado.
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

151

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
bool buscaVectorDesordenado (int a[50] , int n, int ele);
void mostrarVector(int vector[50],int num);
void main()
{
// Definir e inicializar variables y vectores
int n, ele, a[50];
bool z;
// Lectura de datos
ingresarVector (a, n);
cout<<"Ingrese elemento a buscar: ";
cin>>ele;
// Imprimir
mostrarVector (a, n);
z = buscaVectorDesordenado (a, n, ele);
if (z)
cout<<"Elemento se encuentra en el vector"<<endl;
else
cout<<"Elemento no se encuentra en el vector"<endl;
}
void ingresarVector(int a[50], int &n)
{
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0;i<n;i++)
{
cout<<"Ingresar elemento";
cin>>a[i];
}
}
bool buscaVectorDesordenado (int a[50] , int n, int ele)
{
// Definir variables
int i;
bool r;
i = 0;
while (a[i] != ele && i < n)
i = i + 1;
r = (a[i] == ele);
return r;
}
void mostrarVector(int vector[50], int num)
{
int i;
for(i=0; i<num; i++)
cout<<vector[i]<<setw(3);
cout<<endl
}



Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

152
b) En arreglos ordenados
Cuando el arreglo esta ordenado se impone la condicin para controlar la
bsqueda:
A[0] <= elemento a buscar <= A[N-1]
Si es falso el elemento no esta en el rango.

Sea A el vector
1 4 8 12 18 26 40

Elemento a buscar 26
Comparamos cada elemento del vector con el elemento a buscar, como encuentra
el elemento a buscar devuelve verdad, ya que 40 pertenece al vector.

Algoritmo
Para cada elemento del vector a se determina si es igual al elemento buscado, esta
bsqueda es realizado por la funcin buscaVectorOrdenado, que devuelve verdad si
elemento pertenece al vector y falso si elemento no pertenece al vector

Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar nmeros enteros al
vector.
bool buscaVectorOrdenado(int a[50], int n, int ele), tiene como precondicin al
vector a, su nmero de elementos y elemento a buscar, y como postcondicin
devuelve verdad si elemento pertenece al vector y falso si elemento no
pertenece al vector.
void mostrarVector(int vector[50], int num), muestra el vector.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
bool buscaVectorOrdenado (int a[50] , int n, int ele);
void mostrarVector(int vector[50],int num);
void main()
{
// Definir e inicializar variables y vectores
int n, ele, a[50];
bool z;
// Lectura de datos
ingresarVector (a, n);
cout<<"Ingrese elemento a buscar ";
cin>>ele;
// Imprimir
mostrarVector (a, n);
z = buscaVectorOrdenado (a, n, ele);
if (z)
cout<<"Elemento se encunetra en el vector"<<endl;
else
cout<<"Elemento no se encunetra en el vector"<<endl;
}
void ingresarVector(int a[50], int &n)
{
int i;
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

153
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0;i<n;i++)
{
cout<<"Ingresar elemento";
cin>>a[i];
}
}
bool buscaVectorOrdenado (int a[50] , int n, int ele)
{
// Definir variables
int i;
bool r;
i = 0;
while (a[i] < ele && i < n)
i = i + 1;
r = (a[i] ==ele) ;
return r;
}
void mostrarVector(int vector[50],int num)
{
int i;
for(i=0; i<num; i++)
cout<<vector[i]<<setw(4);
cout<<endl;
}

5.2.2. Bsqueda binaria
Consiste en dividir el intervalo de bsqueda en dos partes, comparando el elemento
buscado con el elemento medio del vector. En caso de que el elemento a buscar
sea mayor que el elemento medio, se continua la bsqueda en la segunda mitad del
vector; si por el contrario el elemento a buscar es menor que el elemento medio, la
bsqueda contina en la primera mitad del vector, en ambos casos se redefinen los
extremos del intervalo, disminuyendo el espacio de bsqueda, repitiendo el proceso
hasta que se encuentre el valor a buscar o hasta que el elemento a buscar no se
encuentre en el vector (Joyanes et al., 2003).

Hacemos inf = 0 y sup = n1 - 1
Para Calcular el medio:
medio = (inf + sup ) / 2
Si estamos en la primera mitad del vector hacemos sup = medio - 1
Si estamos en la segunda mitad del vector hacemos inf = medio + 1

Sea A el vector:

1 4 12 14 18 26 40
0 1 2 3 4 5 6


inf medio sup

Elemento a buscar: 26
inf = 0
sup = 6
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

154
medio = (inf + sup) / 2 = (0 + 6) / 2 = 3
a[3] =14 se divide el vector en dos partes

1 4 12 18 26 40
0 1 2
14
4 5 6

Como elemento buscado 26 es mayor que elemento central 14, la bsqueda
continua en la segunda mitad del vector.
inf = 4
sup = 6
medio = (inf + sup) / 2 = (4 + 6) / 2 = 5, a[5] = 26,
Como 26 = a[5] la bsqueda acaba, devolviendo verdad, ya que 26 pertenece al
vector.

Algoritmo
Para cada elemento del vector a se determina si es igual al elemento buscado, esta
bsqueda es realizado por la funcin binario, que devuelve verdad si elemento
pertenece al vector y falso si elemento no pertenece al vector
Mdulos que se utilizan:
void ingresarVector(int a[50], int &n), permite ingresar datos al vector.
bool buscaBinario(int a[50], int n, int ele), tiene como precondicin al vector a,
su nmero de elementos y elemento a buscar, y como postcondicin devuelve
un valor booleano de verdad si elemento pertenece al vector y falso en caso
contrario.
void mostrarVector(int vector[50], int num), imprime el vector ordenado.

Cdigo fuente:
#include <iostream.h>
#include <iomanip.h>
void ingresarVector(int a[50], int &n);
bool buscaBinaria (int a[50], int n, int ele);
void mostrarVector(int vector[50],int num);
void main()
{
// Definir e inicializar variables y vectores
int n, ele, a[50];
bool z;
// Lectura de datos
ingresarVector (a, n);
cout<<"Ingrese elemento a buscar";
cin>>ele;
// Imprimir
mostrarVector (a, n);
z = buscaBinaria(a, n, ele);
if (z)
cout<<"Elemento se encuntra en el vector"<<endl;
else
cout<<"Elemento no se encunetra en el vector"<<endl;
}
void ingresarVector(int a[50], int &n)
{
int i;
cout<<"Ingresar cantidad de elementos del vector:";
cin>>n;
for (i = 0; i<n; i++)
{
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

155
cout<<"Ingresar elemento:";
cin>>a[i];
}
}
bool buscaBinaria (int a[50], int n, int ele)
{
// Declarar e inicializar variables
int inf, sup, medio = 0;
bool recorre = false, p = false;
inf = 0;
sup = n - 1;
if (ele >= a[0] && ele <= a[n-1])
recorre = true;
else
recorre = false;
while (recorre)
{
medio = (inf + sup) / 2;
if (ele > a[medio])
inf = medio + 1;
else
sup = medio- 1;
if (inf <= sup && a[medio] != ele)
recorre =true;
else
recorre = false;
}
p = (a[medio] == ele);
return p;
}
void mostrarVector(int vector[50], int num)
{
int i;
for(i=0; i<num; i++)
cout<<vector[i]<<setw(4);
cout<<endl;
}

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

156
Resumen

Esta unidad contiene los conceptos y definiciones necesarias para trabajar con
arreglos unidimensionales y bidimensionales, permitiendo al alumnos manipular un
conjunto de elementos dentro de un programa, en ambos caso se desarrollan
ejemplos algunos de estos implementados mediante programacin modular.
Asimismo se presenta dos mtodos de ordenacin: seleccin, y dos mtodos de
bsqueda: secuencial y binaria.
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

157
Lectura

La vida sin los computadores

Usted despierta y advierte que la maana ya est muy avanzada; el despertador no
se ha activado oportunamente; se pregunta si ha dormido de ms; tiene un
proyecto importante que debe presentar hoy. La cartula de su reloj digital est
en blanco. El televisor y la radio no le ayudan, pues no puede hallar una estacin
en ninguno de ellos. Tampoco puede saber qu saber qu hora es por el telfono,
pues este no funciona.
No encuentra el diario matutino ante su puerta y tendr que hacer su propio
pronstico meteorolgico mirando por la ventana. No hay msica que lo acompae
mientras se viste: su reproductor de discos compactos se rehsa a tender sus
solicitudes. Y qu hay con el desayuno?, no puede programar la cafetera
automtica y el horno de microondas est en huelga.
As que usted decide salir a desayunar. Su automvil no enciende; es ms los
nicos vehculos que se mueven tiene ms de 15 aos de antigedad. Las filas en
el metro son interminables. La gente conversa con nerviosismo sobre la avera en el
dispositivo de programacin del metro, controlado por computador.
Entonces decide entrar a un restaurante de comida rpida y encuentra largas filas
de gente esperando mientras los cajeros hacen las transacciones a mano. Est
hambriento, as que opta por esperar y unirse a la conversacin circundante. Al
parecer, todos parecen interesarse ms en hablar entre s, dado que no funcionan
los instrumentos usuales de comunicacin masiva.
Le queda poco dinero en la cartera, as que, despus de desayunar, decide hacer
una escala en el cajero automtico. Para qu?
Vuelve a casa a esperar que llegue el libro que solicit por correo para entrega en
24 horas. No pasa mucho tiempo antes de darse cuenta de que la espera ser
larga: los aviones no vuelan porque las instalaciones de control de trfico areo
estn fuera de servicio. Se dirige a la biblioteca local para ver si el libro se
encuentra ah. Por supuesto, la tarea ser ardua porque el catlogo de libros est
computadorizado.
Mientras camina a casa piensa en las consecuencias de una vera de los
computadores a nivel mundial. Cmo se encontrar la gente en los rascacielos de
oficinas de alta tecnologa, donde los sistemas de computacin controlan todo,
desde los ascensores hasta el grado de humedad? Podrn funcionar las plantas de
energa sin el control de los computadores?Qu ser de los pacientes en los
pabellones mdicos computadorizados? Qu ocurrir con los satlites que los
sistemas de control computadorizados mantienen en rbita? Se colapsar la
infraestructura financiera si no hay computadores que procesen y comuniquen las
transacciones? Ser ms seguro el mundo si las armas controladas por
computadores son inservibles?
La historia puede continuar, pero su sentido ya debe de ser obvio. Los
computadores son prcticamente ubicuos y nuestra vida es afectada por ellos en
muy distintas formas, tanto por su operacin como por su falta de funcionamiento.
Lo ms sorprendente es que los computadores se hayan infiltrados tanto en nuestra
vida en un tiempo tan corto.

Beekman, George. (1999) Introduccin a la computacin. Buenos Aires. Addison
Wesley. Cap.1. Los computadores en su context. pp 4.

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

158
Glosario
Arreglo: Conjunto finito de elementos, todos del mismo tipo, que son
representados mediante una variable del mismo nombre, y se registran en
posiciones consecutivas de memoria.
Vector: Arreglo unidimensional, que requiere de un solo ndice para identificar a
sus elementos.
Matriz: Arreglo bidimensional, que requiere de dos ndices para identificar a sus
elementos.
Clasificar u ordenar: Significa cambiar de posicin estos elementos de tal forma
que los elementos quedan de acuerdo con una distribucin preestablecida.
Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

159
Autoevaluacin

1. Declarar e inicializar los siguientes arreglos:
51 3 7 44 b[]= 23 19 26 16 12 3
a[][]= 2 14 43 19
34 28 12 5 c[]= F H A S

2. Dada las siguientes sentencias:
#include<iostream.h>
void main()
{
float x[30];
int y[30][20]
}
a) Definir el cdigo de ingreso de datos al vecto x[] y a la matriz y[][].
b) Definir el cdigo de salida de datos del vecto x[].y a la matriz y[][].

3. Describir la salida producida por los siguientes programas:
#include<iostream.h>
void main()
{
int i, x=0, a[] =
{1,2,3,4,5,6,7,8,9};
for(i=0; i<9; i++)
x=x+a[i];
cout<<x<<endl;
}

#include<iostream.h>
void main()
{
int i, j, a[][] = {{1,2,13,4},
{5,16,27,8},
{9,22,7,12}};
for(i=0; i<3; i++)
{
m=9999;
for(j=0; j<4; j++)
if(a[i][j]<m)
m=a[i][j];
}
cout<<m<<endl;
}

4. Usando funciones codificar lo siguiente:
a) Un programa que calcule el promedio de los numerous pares de un vector.
En caso no exista ningn nmero par mostrar un mensaje correspondiente.
b) Un programa para intercambiar los elementos de la primera fila con los
lementos de la ultima fina de una matriz de tamao N*M.

Lenguaje de Programacin I - Unidad II Yuliana Juregui y otros

160
Bibliografa

Joyanes Aguilar, Luis, Rodrguez Baena, Luis y Fernndez Azuela, Matilde
(2003) Fundamentos de programacin. Libro de problemas algoritmos,
estructuras de datos y objetos. 2da Edicin. Madrid. McGraw-Hill.
Interamericana de Espaa. Cap. 10. Ordenacin, Bsqueda e Intercalacin. pp.
235 245.
Juregui Rosas, Yuliana y Arriola Ramirez, Franklin (2007) Algoritmos. Un
enfoque practico. Lima. Fondo Editorial de la UIGV. Cap. 4. Arreglos. pp 225
317.
Gottfried, Byron S. (1991) Programacin en C. Mxico DF. McGraw-Hill. Cap. 9.
Arrays. pp 269 295.
Lpez Romn, Leobardo. (2003) Programacin estructurada: un enfoque
algortmico. 2da. Edicin. Editorial Alfaomega Mxico DF. Cap 8. Arreglos. 181
210.



Enlaces

http://sistemas.itlp.edu.mx/tutoriales/tutorc/index.htm
http://es.tldp.org/Manuales-LuCAS/doc-tutorial-c++/doc-tutorial-c++.pdf
http://bc.inter.edu/facultad/hbruckman/documents/Manual.de.Referencia.de.C%2B
%2B.-.Parte.III.-.Arreglos.pdf

Anda mungkin juga menyukai