You are on page 1of 17

Matrices

Matrices

2013
TransversaldeProgramacinBsica
ProyectoCurriculardeIngenieradeSistemas

Matrices

Objetivos

Representarconjuntosdedatosmediantematrices.
Solucionarproblemasutilizandomatrices.

Introduccin
La utilizacin de matrices constituye actualmente una parte esencial en los lenguajes de
programacin, ya que la mayora de los datos se introducen en los ordenadores como tablas
organizadasenfilasycolumnas:hojasdeclculo,basesdedatos,etc.Tambinsonutilizadaspara
resolverproblemasmatemticos,porejemploenlaresolucindesistemasdeecuacioneslineales,
delasecuacionesdiferencialesydelasderivadasparciales.

1.

Definicin

Unamatrizesunaestructuradedatos,omstcnicamente,unespaciodememoriaquepermite
almacenarunacoleccindeelementos,todosdelmismotipo.Ladiferenciaconlosarreglosest
enque,enlasmatrices,loselementosnoestnorganizadoslinealmentesinoquesuorganizacin
es bidimensional, es decir, en filas y columnas. Conviene imaginar una matriz como una
organizacin de celdas de memoria, o casillas, en cada una de las cuales se puede guardar un
elementodelacoleccin.Adems,esusualdibujarlacomoloilustralafigurasiguiente:

0
1
2
3
4
5

0
1
2
3

Esta figura representa un matriz de cuatro filas (numeradas verticalmente de 0 a 3) y seis


columnas(numeradashorizontalmentede0a5).Encadaunadelas24celdasocasillassepuede
guardar un dato. La dimensin o tamao de una matriz es el nmero filas por el nmero de
columnas.Debeserclaroentoncesquelafiguraanterioreslagrficadeunamatrizdedimensin
4x6.

La numeracin de las filas y las columnas determina que cada una de las casillas de una matriz
tiene asociados dos nmeros que la identifican de manera nica. A estos nmeros se les llama

Matrices

ndicedefilaendicedecolumna,respectivamente.Enelseudolenguaje,ytambinenCyC++,las
filasylascolumnassenumerandesde0.

Los lenguajes como C y C++, permiten que el programador declare matrices de cualquier tipo y
prcticamentedecualquiertamao.Enelseudolenguaje,unmatrizsedeclarausandoelsiguiente
formato:

<NOMBRE>:matriz[<N>][<M>]de<TIPO>

En este formato aparecen en maysculas y entre los caracteres < y > los componentes que el
programador puede determinar. As por ejemplo, si se quiere declarar una matriz con nombre
mat, de dimensin 15x4 y que pueda almacenar datos de tipo caracter, se debe escribir la
siguientelnea.

mat:matriz[15][4]decaracter

Segn el formato anterior, el programador debe bautizar la matriz (ponerle un nombre


significativo),debedecirculessudimensin,ytambindebedecirdequtiposonloselementos
quealmacenar.

Enseguidasedanalgunosejemplosdedeclaracionesdematrices.

Sisenecesitaguardarlainformacinrelacionadaconeltablerodeunjuegodetictactoe
(eltradicionaltriqui),sepuededeclararlasiguientematriz:

tablero:matriz[3][3]decaracter

Siserequiereguardarlasnotasquehansacado35estudiantesenlos5talleresyenlos5
laboratorios del curso de Programacin de Computadores se pueden declarar las
siguientesmatrices.

talleres:matriz[35][5]dereal
laboratorios:matriz[35][5]dereal

Noteque,enambasmatrices,cadafilaguardalasnotasdeunestudiantedelcurso.

Si se quiere guardar las letras que conforman una sopa de letras, como aquellas que
vienenenlospasatiempos,sepuededeclararlasiguientematriz.
sopa:matriz[10][15]decaracter

Note que la sopa de letras ms grande que se puede guardar es de 10 filas por 15
columnas.

Los ndices se crearon para permitir que el programador se pueda referir, de forma especfica y
directa, a una cualquiera de las casillas de la matriz, tanto para guardar un dato en esa casilla,

Matrices

comoparaobtenerel datoalmacenadoenella.En elseudolenguaje,parareferirseaunacasilla


particulardeunamatrizsedebeseguirelsiguienteformato:

<NOMBRE>[<INDICEDEFILA>][<INDICEDECOLUMNA>]

es decir, se debe escribir el nombre de la matriz seguido por el ndice de fila y por el ndice de
columna,ambosentreparntesiscuadrados,delacasillaquesequiereconsultar.

Paralossiguientesejemplos,supongaquesedeclaralamatrizmontos,delasiguientemanera:

montos:matriz[6][10]dereal

Lasiguienteinstruccinasignaoguardaelnmero10,4enlacasilladelaesquinasuperior
izquierdadeestamatriz:

montos[0][0]:=10,4

Lasiguienteinstrucciniterativaguarda5,5encadaunadelascasillasdelaltimafilade
estamatriz:

k:=0
MIENTRAS(k<10)HACER

montos[5][k]:=5,5

k:=k+1
FINMIENTRAS

Lasiguientefiguramuestralamatrizmontos despusdeejecutadaslasinstrucciones delosdos


ejemplosanteriores.Lascasillasvacasnotienenvaloresdefinidos.

0
1
2
3
4
5
6
7
8
9
0 10,4

5,5

5,5

5,5

5,5

5,5

5,5

5,5

5,5

5,5

5 5,5

Matrices

Ejemplo

Una matriz mgica es una matriz cuadrada (tiene igual nmero de filas que de columnas) que
tienecomopropiedadespecialquelasumadelasfilas,lascolumnasylasdiagonalesesigual.Por
ejemplo:

2 7 6
9
4

5
3

1
8

Enestamatrizlassumasson15.

Considereelproblemadeconstruirunalgoritmoquecompruebesiunamatrizdedatosenteroses
mgica o no, y en caso de que sea mgica escribir la suma. El usuario ingresa el tamao de la
matrizmximohasta10.Ademsdebeguardarlasumadelasfilas,lascolumnasylasdiagonales
enunarregloenelordensiguiente:

Fila0

Fila1

Fila2

Columna0

Columna1

Columna2

Diagonal1

Diagonal2

Lasentradas(datosconocidos)paraelalgoritmoson:
Ladimensindelamatriz
Losnmerosquecontienelamatriz

Lasalidaesperada(datosdesconocidos)es:
Lamatrizesmgicaono,ysiesmgicaculeselvalordelasuma.

En este problema, los arreglos son tiles para guardar los datos que conforman la matriz. Los
nmerosquecontienelamatrizsepuedenguardarenunavariableentera.
Lasiguientegrficaresumelasentradasysalidasdelalgoritmoquesepretendedisear.Adems
bautizantodaslasvariablesmencionadas.

mensaje
tam
suma
mgica

Las condiciones iniciales y finales se pueden expresar mediante las clusulas REQUIERE y
GARANTIZA:

Matrices

REQUIERE:
Ladimensindelamatrizquedebesermximo10x10
Cadaelementodelamatrizdebeserunnmeroentero

GARANTIZA
Muestraenpantallasiesmgicaono,ysiloescualeselvalordelasuma.

Unaprimeraversindelalgoritmopuedeserlasiguiente:

Inicio
Paso1.Leereltamaodelamatriz
Paso2.Leerloselementosdelamatriz
Paso3.Determinarsilamatrizesmgicaono
Paso4.Silamatrizesmgicamostrarelvalordelasuma
Fin

Lospasos1y2soninteraccionesconelusuarioquepermitencapturarlosdatosdeentrada.La
versin inicial se puede refinar detallando estos pasos y adems defiendo las variables para
hacerlos:

Procedimientoprincipal
variables
i,j,aux,tam,suma:enteros

//isealalasfilas//jsealalascolumnas

magica:matriz[10][10]deenteros
Inicio
escribir(Porfavordigiteelnmerodefilasdelamatriz(entre2y10):)
leer(tam)
para(i=0hastatam1)hacer

para(j=0hastatam1)hacer

Matrices

escribir(Porfavordigiteeldatoenlaposicin)
escribir(i,j)
leer(magica[i][j])
fin_para
fin_para
Paso3.Determinarsilamatrizesmgicaono
Paso4.Silamatrizesmgicamostrarelvalordelasuma

Sepuedeobservarqueelprimercicloparatienecomocontadorlavariablei,estoindicaquese
llenarlamatrizporfilas,elsegundocicloparaquetienecomocontadorlavariablej,recorrerla
filacolumnaacolumnaparaubicaralleldatocorrespondiente.

Lapartenucleardelasolucineselpaso3.Enesteproblemaenparticularsesabequeelnmero
defilasydecolumnasesigualyquehaydosdiagonales.Paraelejemplomostradoaliniciosera3
filas, 3 columnas y dos diagonales. Para almacenar las sumas en un arreglo este tendr una
dimensinde2*tam+2.Ladeclaracindelarreglosumases:

sumas:arreglo[22]deenteros

Ahoraparacalcularlassumassepuedehacerlosiguiente:

Paso3.1:Inicializarelarreglodesumasencero
Paso3.2:Sumarfilaporfila,columnaporcolumnaylasdiagonalesyguardar
suvalorenelarreglo.
para(i=0hasta2*tam+2)hacer

sumas[i]:=0

fin_para
//Sumascorrespondientesalasfilas
para(i=0hastatam1)hacer

para(j=0hastatam1)hacer

fin_para

sumas[i]=magica[i][j]+sumas[i]

Matrices

fin_para
//Sumascorrespondientesalascolumnas
para(j=0hastatam1)hacer

para(i=0hastatam1)hacer

fin_para

sumas[j+tam]=magica[i][j]+sumas[j+tam]

fin_para
//Sumascorrespondientesalasdiagonales
para(i=0hastatam1)hacer

sumas[2*tam]=magica[i][i]+sumas[2*tam]

fin_para
para(i=0hastatam1)hacer

sumas[2*tam+1]=magica[i][(tam1)i]+sumas[2*tam+1];

fin_para
Paso4:Paradeterminarsilamatrizesmgicasevaarecorrerycompararelvectorsumas,sien
algnmomentoseencuentraunvalordiferentesemuestraenpantallaquelamatriznoesmgica
ysellevaelcontadorimsalldelfinaldelarreglo,siporelcontrariosellegaalfinaldelarreglo,
es decir que todo este contiene el mismo valor y la matriz si cumple con las caractersticas
evaluadas,semuestraenpantallaquelamatrizesmgica.

//Compararelvectorsumaymuestraelresultado
intcon=0;
con=sumas[0];
para(i=1hasta2*tam+1)hacer
si(con<>sumas[i])
escribir("lamatriznoesmgica)

Matrices

i=2*tam+3;
fin_si
finpara
si(i=2*tam+2)
escribir(lamatrizesmgicaylasumaes:)
escribir(con);
fin_si

Elalgoritmocompletosepresentaenseguida.

Procedimientoprincipal
variables
i,j,aux,tam,suma:entero

//isealalasfilas//jsealalascolumnas

con=0:entero
magica:matriz[10][10]deenteros
sumas:arreglo[22]deenteros
Inicio
escribir(Porfavordigiteelnmerodefilasdelamatriz(entre2y10):)
leer(tam)
para(i=0hastatam1)hacer
para(j=0hastatam1)hacer
escribir(Porfavordigiteeldatoenlaposicin)
escribir(i,j)
leer(magica[i][j])
fin_para

Matrices

fin_para
para(i=0hasta2*tam+2)hacer
sumas[i]:=0
fin_para
//Sumascorrespondientesalasfilas
para(i=0hastatam1)hacer
para(j=0hastatam1)hacer
sumas[i]=magica[i][j]+sumas[i]
fin_para
fin_para
//Sumascorrespondientesalascolumnas
para(j=0hastatam1)hacer
para(i=0hastatam1)hacer
sumas[j+tam]=magica[i][j]+sumas[j+tam]
fin_para
fin_para
//Sumascorrespondientesalasdiagonales
para(i=0hastatam1)hacer
sumas[2*tam]=magica[i][i]+sumas[2*tam]
fin_para
para(i=0hastatam1)hacer
sumas[2*tam+1]=magica[i][(tam1)i]+sumas[2*tam+1];
fin_para
con=sumas[0];

10

Matrices

para(i=1hasta2*tam+1)hacer
si(con<>sumas[i])
escribir("lamatriznoesmgica)
i=2*tam+3;
fin_si
finpara
si(i=2*tam+2)
escribir(lamatrizesmgicaylasumaes:)
escribir(con);
fin_si
finprocedimiento
Nota:veranexo

Problemasparadesarrollarenclase

1. Eldueodeunrestauranteentrevistaacincoclientesdesunegocioylespidequecalifiquen
de1a10lossiguientesaspectos:(1espsimoy10esexcelenteoinmejorable)

Atencindepartedelosempleados
Calidaddelacomida
Justiciadelprecio(elprecioquepagleparecejusto?)
Ambiente (muebles cmodos?, msica adecuada?, iluminacin suficiente?, decoracin,
etc.)

Escriba un algoritmo que pida las calificaciones de los cinco clientes a cada uno de estos
aspectos,yluegoescriba elpromedio obtenido en cadaunode ellos.Lalistadebeaparecer
ordenadadelaspectomejorcalificadoalpeorcalificado.

2. EnunahaciendahayunhatoquesecomponedeNvacas.Diseeunalgoritmoqueguardeen
unamatrizdedimensin7xNlaproduccindelechediaria(enlitros)decadaunadelasvacas,
duranteunasemana.Adems,elalgoritmodebecalcularlaproduccintotaldelhatoencada
unodelossietedas,yelnmerodelavacaquediomslecheencadada.

11

Matrices

Ejerciciosparadesarrollarencasa

1. Lossiguientesejerciciostienencomopropsitoqueustedescribaciclosquerecorranlamatriz
completaopartesdeella.SupongaquesehadefinidounaconstantepositivaenteraNyuna
matrizmat,dedimensinNxN.

Escribaunalgoritmoquepongaceroenambasdiagonalesdelamatriz.
Escriba un algoritmo que ponga cero en la primera y la ltima fila, y en la primera y la
ltimacolumnadelamatriz.
Escribaunalgoritmoquellenedenmeroslamatrizdetalformaquemat[i][j]seaiguala
i+j.
Escribaunalgoritmoquelleneladiagonalprincipaldelamatrizconlosnmeros1,2,3,...N.
Ladiagonalprincipaldeunamatrizestformadaporlascasillasenlascualeselndicede
filaydecolumnasoniguales.
Escriba un algoritmo que llene todas las filas pares con los nmeros 1,2,3,...N, y las filas
imparesconlosnmerosN,N1,N2,...1.

2. Diseeunalgoritmoquepermitaguardarenunarreglolassumasdelasfilasdeunamatriz.
Esto es, la suma de los elementos de la primera fila deber quedar guardada en la primera
posicindelarreglo,lasumadeloselementosdelasegundafilaenlasegundaposicin,yas
sucesivamenteparatodaslasfilasdelamatriz.Lamximadimensindelamatrizes100x50
(100filasy50columnas)yladelvectores100.

Porejemplo,sielusuarioingresalasiguientematrizde3x5(3filas,5columnas)

3,5

6,5

30

8,2

3,6

1,4

10

1,5

3,4

6,6

20,5

Elresultadoseraunarreglosiguiente:

48,2

porque
3,5+6,5+30+8,2+0=48,2
4+0+(1)+3,6+1,4=8y
10+(1,5)+3,4+6,6+2=20,5

3. En lgebra lineal las matrices son tema central. Sobre ellas se definen varias operaciones,
comoporejemplo:

La suma de dos matrices. Si A y B son matrices de igual dimensin, la matriz C=A+B se


calculahaciendoqueC[i][j]=A[i][j]+B[i][j],paratodoiyjvlidos.

12

Matrices

Latraspuestadeunamatriz.SiAesunamatrizdedimensinNxM,lamatrizB=Atsecalcula
haciendoqueB[i][j]=A[j][i],paratodoiyjvlidos.Notequeestoquieredecirquelasfilas
seconviertenencolumnasyqueladimensindeBesMxN.
Latrazadeunamatrizcuadrada.SiAesunamatrizdedimensinNxN,lamatriztrazaesla
sumadetodosloselementosdeladiagonalprincipal.
La multiplicacin de dos matrices. Si A y B son matrices de dimensiones nxm y mxk,
respectivamente,lamatrizC=A*B,dedimensinnxk,secalculahaciendoque:

m 1

C[i ][ j ] A[i ][ p ] * B[ p ][ j ]
p 0

Especifiqueyescribaunalgoritmoparacadaunadeestasoperaciones.

Anexos

Enestaseccinsemostraracomoeslacodificacindelateoravistaenclase,paraellose
utilizaracomoherramientadecodificacin:C++.

Matriz

CodificacinenC++dearreglosymatrices

Seudocdigo
C++
<NOMBRE> : matriz [<N>][<M>] de <TIPO><NOMBRE>[<N>][<M>];
<TIPO>

EjemploEnC++

#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
/****Esteprogramaleelosdatosdeunamatriz3x4ymuestraenpantallalasumadelos
datosdecadafila*****/
main(){
intmatriz[3][4];
intarreglo[3];
inti,j;
//Ingresodelosdatos

13

Matrices

for(i=0;i<3;i++){
for(j=0;j<4;j++){
cout<<"Ingreseelnumeroenterocorrespondientealaposicion["<<i<<"]["<<j<<"]:";
cin>>matriz[i][j];
}
}
//Muestraenpantallalamatrizingresada
cout<<"\nLamatrizqueustedingresoes:\n\n";
for(i=0;i<3;i++){
for(j=0;j<4;j++){
cout<<matriz[i][j]<<"";
}
cout<<"\n";
}
//Sumalosdatosdecadafila
for(i=0;i<3;i++){
arreglo[i]=0;
for(j=0;j<4;j++){
arreglo[i]=arreglo[i]+matriz[i][j];
}
}
//Muestraenpantallalosresultados
for(i=0;i<3;i++){
cout<<"\nLasumadelosdatosdelafila"<<i<<"es:"<<arreglo[i];

14

Matrices

}
getch();
}
//Programadelamatrizmgica
#include<cstdlib>
#include<iostream>
usingnamespacestd;
intmain(intargc,char*argv[])
{
inti,j,aux,tam,suma;
intcon=0;
intmagica[10][10];
intsumas[22];
//Ingresodedatos
cout<<"Porfavordigiteelnumerodefilasdelamatriz(entre2y10)";
cin>>tam;
for(i=0;i<=tam1;i++){
for(j=0;j<=tam1;j++){
cout<<"Porfavordigiteeldatodelaposicion:"<<i<<","<<j<<":";
cin>>magica[i][j];
}
}
//Inicializarelarreglosumas
for(i=0;i<=2*tam+2;i++){

15

Matrices

sumas[i]=0;
}
//filas
for(i=0;i<=tam1;i++){
for(j=0;j<=tam1;j++){
sumas[i]=magica[i][j]+sumas[i];
}
}
//columnas
for(j=0;j<=tam1;j++){
for(i=0;i<=tam1;i++){
sumas[i+tam]=magica[i][j]+sumas[i+tam];
}
}
//Diagonales
for(i=0;i<=tam1;i++){
sumas[2*tam]=magica[i][i]+sumas[2*tam];
}
for(i=0;i<=tam1;i++){
sumas[2*tam+1]=magica[i][(tam1)i]+sumas[2*tam+1];
}
con=sumas[0];
//imprimirarreglosumas
cout<<"arreglosuma\n";

16

Matrices

for(i=0;i<=2*tam+1;i++){
cout<<i<<"="<<sumas[i]<<endl;
}
//Verificarlasumaenelarreglo
for(i=1;i<=2*tam+1;i++){
if(con!=sumas[i]){
cout<<"lamatriznoesmagica\n";
i=2*tam+3;
}
}
if(i==2*tam+2)
cout<<"lamatrizesmgicaylasumaes:"<<con<<endl;
system("PAUSE");
returnEXIT_SUCCESS;
}

LecturadeProfundizacin

Textotomadodehttp://dis.unal.edu.co/~programacion/book/modulo3.pdf

Imgenes:

Lasimgenesutilizadasenestedocumentofuerontomadasdewww.google.com

Fuentes:
http://www.slideshare.net/Edw1a/guia8programacion14671287
http://www.slideshare.net/gonmrod/vectoresmatricesi
http://www.atc.us.es/asignaturas/fi/curso_de_c/Array_bidimensional_o_matriz.html
http://www2.caminos.upm.es/departamentos/matematicas/Fdistancia/PIE/matlab/temas
matlab/TEMA%203.pdf
http://trevinca.ei.uvigo.es/~jgarcia/TO/cursilloCpp/5_manejo_matrices.html

17

You might also like