Professional Documents
Culture Documents
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
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
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
<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
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:
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