arreglos (arrays)- matrices.

Anuncio
UNIVERSIDAD TECNOLÓGICA DE LOS ANDES
INGENIERÍA DE SISTEMAS E INFORMÁTICA
FUNDAMENTOS DE PROGRAMACIÓN
DOCENTE: Ing. Ronald Rentería Ayquipa.
ARREGLOS (ARRAYS)- MATRICES.
MARCO TEÓRICO:
ARREGLOS BIDIMENSIONALES O MATRICES
Son aquellos que tienen dos dimensiones, se les conoce también como bidimensionales, matrices o
tablas. Una matriz es, como el vector, una colección de elementos del mismo tipo. Sin embargo,
mientras el vector es unidimensional —una sóla fila o columna— en la matriz los datos se organizan
en dos o más dimensiones.
0
1
Arreglo bidimensional de 8 filas y 10 columnas
2
Dimensión 8x10
3
4
Cantidad de elementos 8x10=80 elementos
5
6
7
0
1
2
3
4
5
6
7
8
9
Declaracion de matrices:
Sintaxis:
<tipo> nombre_arreglo[filas][columnas];
Donde:
 tipo= es el tipo de datos del arreglo
 nombre_arreglo= el nombre que le vas a asignar al arreglo
 filas= la cantidad de filas de la matriz.
 columnas= la cantidad de columnas de la matriz.
Cabe destacar que las filas y columnas deben ser cualquier expresión entera
constante mayor que cero.
Ejemplos de declaración de matrices:
int unamba[7][9];
//declara una matriz de 7 filas y 9 columnas, 63 elementos enteros de
nombre unamba
float MiMatriz[50][2]; // declara una matriz de nombre MiMatriz de 100 elementos tipo float,
distribuidos en 50 filas y 2 columnas.
Universidad Tecnológica de los Andes
Fundamentos de Programación
1/5
Ingeniería de Sistemas e Informática
Ing. Ronald Rentería A.
Manejo de matrices:
Cuando declaramos un arreglo, por ejemplo: int mimatriz[5][3]; obtenemos 15 elementos enteros
distribuidos en 5 filas y 3 columnas, bajo el mismo nombre (mimatriz), pero ahora ¿Cómo accedemos
a cada uno de estos elementos individuales del arreglo?

Manipulación de elementos individuales
En las matrices necesitamos dos índices. Usamos el nombre del arreglo seguido de los índices que
identifican la fila y la columna del elemento que se desea acceder: nombre_arreglo[fila][columna].
En este ejemplo se muestra como asignar valores a los elementos de una matriz de forma individual:
int arreglito[2][2];
arreglito[0][0]=4;
arreglito[0][1]=6;
arreglito[1][0]=0;
arreglito[1][1]=15;
// declara un arreglo de 4 enteros llamado arreglito (2x2)
// asigna 4 al primer elemento (posición 0,0)
// asigna 6 al segundo elemento (posición 0,1)
// asigna 0 al tercer elemento (posición 1,0)
// asigna 15 al cuarto elemento (posición 1,1)
El arreglo finalmente quedará lleno de la siguiente manera:
arreglito
6
0
0
15
1
0
1
4
Para imprimir los elementos del arreglo anterior también se acceden a los elementos de la forma
anterior:
cout<<arreglito[0][0];
cout<<arreglito[0][1];
cout<<arreglito[1][0];
cout<<arreglito[1][1];
// imprime el elemento (posición 0,0)
// imprime el elemento (posición 0,1)
// imprime el elemento (posición 1,0)
// imprime el elemento (posición 1,1)
Cada elemento de la matriz es, a todos los efectos, una variable que puede usarse
independientemente de los demás elementos. Así, por ejemplo, un elemento de la matriz arreglito
puede usarse en una instrucción de entrada, salida o de otro tipo igual que cualquier variable simple
de tipo int:
cout<<”Ingrese un valor”;
cin>>arreglito[0][0]; // almacena el valor ingresado en 0,0
cout<<arreglito[0][0]; // imprime el valor del elemento 0,0
arreglito[0][0]= arreglito[0][0]*2;
// duplica el valor del elemento 0,0
cout<<arreglito[0][0]; // vuelve a imprimir el valor del elemento 0,0 ahora duplicado
Cuando se quiere llenar, imprimir o recorrer una matriz por ejemplo de 20x20 (400 elementos)
hacerlo de la forma anteriormente vista es un proceso muy tedioso, lo mejor es usar ciclos para
llenarlo rápido.
Universidad Tecnológica de los Andes
Fundamentos de Programación
2/5
Ingeniería de Sistemas e Informática

Ing. Ronald Rentería A.
Recorrido de una matriz
Una forma habitual de manipular una matriz es accediendo secuencialmente a todos sus elementos,
uno tras otro, fila por fila. Para ello, se utilizan dos bucles: el primer bucle con contador, de modo
que la variable contador nos sirve como índice para identificar la fila y el segundo bucle anidado con
contador, de modo que la variable contador nos sirve como índice para identificar la columna. Así
mediante los dos contadores podemos acceder a cada uno de los elementos de la matriz . La
estructura más utilizada para recorrer arreglos es for.
Supongamos, por ejemplo, que tenemos una matriz de 15 números enteros declarado como
int v[5][3]; y dos variables enteras declaradas como int i,j;. Por medio de dos bucles uno anidado en
el otro, con ligeras modificaciones, podemos realizar todas estas operaciones:
a. Inicializar todos los elementos a un valor cualquiera (por ejemplo, 0):
for(i=0 ; i<5 ; i++)
{
for(j=0 ; j<3 ; j++)
{
v[i][j]=0;
}
}
// notar el menor estricto (<) para ir de 0 hasta 4
// notar el menor estricto (<) para ir de 0 hasta 2
// asigna el valor ‘0’ a la matriz v en la posición i,j
b. Inicializar todos los elementos con valores introducidos por teclado:
for(i=0 ; i<5 ; i++)
// notar el menor estricto (<) para ir de 0 hasta 4
{
for(j=0 ; j<3 ; j++)
// notar el menor estricto (<) para ir de 0 hasta 2
{
cout<<”Ingrese valor para la posicion [”<<i<<”][“<<j<<”]”;
cin>>v[i][j];
// asigna el valor ingresado a la matriz v en la posición i,j
}
}
c. Mostrar todos los elementos en la pantalla:
for(i=0 ; i<5 ; i++)
// notar el menor estricto (<) para ir de 0 hasta 4
{
for(j=0 ; j<3 ; j++)
// notar el menor estricto (<) para ir de 0 hasta 2
{
cout<<”El valor de la posicion [”<<i<<”][“<<j<<”]=”<<v[i][j];
}
cout<<endl;
// da un salto de linea entre cada fila
}
Universidad Tecnológica de los Andes
Fundamentos de Programación
3/5
Ingeniería de Sistemas e Informática
Ing. Ronald Rentería A.
d. Realizar alguna operación que implique a todos los elementos. Por ejemplo, sumarlos:
suma=0;
for(i=0 ; i<5 ; i++)
// notar el menor estricto (<) para ir de 0 hasta 4
{
for(j=0 ; j<3 ; j++)
// notar el menor estricto (<) para ir de 0 hasta 2
{
suma=suma+v[i][j];
}
}
EJERCICIOS RESUELTOS
Ejemplo Nº 01:
Hacer un programa para sumar dos matrices.
#include<iostream.h>
#include<conio.h>
void main()
{
int A[100][100],B[100][100],C[100][100],a,b,c,d,i,j;
cout<<"Ingrese dimensiones de la matriz A"<<endl;
cout<<"filas : ";
cin>>a;
cout<<"columnas : ";
cin>>b;
cout<<"Ingrese dimensiones de la matriz B"<<endl;
cout<<"filas : ";
cin>>c;
cout<<"columnas : ";
cin>>d;
// COMPROBAR SI LAS DIMENSIONES DE LAS MATRICES SON IGUALES
if(a==c && b==d)
{
cout<<"INGRESAR LOS DATOS A LA MATRIZ A"<<endl;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
cout<<"Posicion ["<<i<<"]["<<j<<"]";
cin>>A[i][j]; // Lee el numero ingresado y lo almacena en la posición i,j de la matriz
}
cout<<"INGRESAR LOS DATOS A LA MATRIZ B"<<endl;
for(i=0;i<c;i++)
for(j=0;j<d;j++)
{
cout<<"Posicion ["<<i<<"]["<<j<<"]";
cin>>B[i][j]; // Lee el numero ingresado y lo almacena en la posición i,j de la matriz
}
Universidad Tecnológica de los Andes
Fundamentos de Programación
4/5
Ingeniería de Sistemas e Informática
Ing. Ronald Rentería A.
// REALIZAR LA SUMA DE LAS MATRICES
for(i=0;i<a;i++)
for(j=0;j<b;j++)
C[i][j]=A[i][j]+B[i][j];
// IMPRIMIR LA SUMA DE LAS MATRICES
cout<<"La SUMA es: "<<endl;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
cout<<C[i][j]<<"\t";
}
cout<<endl;
}
}
else
cout<<"No se pueden sumar las matrices";
getch();
}
Ejemplo Nº 02:
Hacer un programa que imprima la diagonal de una matriz cuadrada.
#include<iostream.h>
#include<conio.h>
void main()
{
int matriz[100][100],i,j,n; //Se declara una matriz de enteros con nombre matriz
cout<<"Ingrese dimension de la matriz";
cin>>n; //solo se ingresa una dimension porque la matriz es cuadrada
cout<<"INGRESAR LOS DATOS A LA MATRIZ"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"Posicion ["<<i<<"]["<<j<<"]";
cin>>matriz[i][j]; // Lee el numero ingresado y lo almacena en la posición i,j de la matriz
}
// IMPRIMIR LA DIAGONAL DE LA MATRIZ INGRESADA
cout<<"La diagonal es: "<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j)
cout<<matriz[i][j]<<endl;
getch();
}
Ejemplo Nº 03:
Encontrar otra forma de resolver el ejercicio 2.
Universidad Tecnológica de los Andes
Fundamentos de Programación
5/5
Descargar