View
12
Download
0
Embed Size (px)
DESCRIPTION
Matrices
Citation preview
1 Matrices
Matrices
2013TransversaldeProgramacinBsicaProyectoCurriculardeIngenieradeSistemas
2 Matrices
Objetivos Representarconjuntosdedatosmediantematrices. Solucionarproblemasutilizandomatrices.Introduccin La utilizacin de matrices constituye actualmente una parte esencial en los lenguajes deprogramacin, ya que la mayora de los datos se introducen en los ordenadores como tablasorganizadasenfilasycolumnas:hojasdeclculo,basesdedatos,etc.Tambinsonutilizadaspararesolverproblemasmatemticos,porejemploenlaresolucindesistemasdeecuacioneslineales,delasecuacionesdiferencialesydelasderivadasparciales.1. DefinicinUnamatrizesunaestructuradedatos,omstcnicamente,unespaciodememoriaquepermitealmacenarunacoleccindeelementos,todosdelmismotipo.Ladiferenciacon losarreglosestenque,enlasmatrices,loselementosnoestnorganizadoslinealmentesinoquesuorganizacines bidimensional, es decir, en filas y columnas. Conviene imaginar una matriz como unaorganizacinde celdasdememoria,o casillas,en cadaunade las cuales sepuede guardarunelementodelacoleccin.Adems,esusualdibujarlacomoloilustralafigurasiguiente:
0 1 2 3 4 50
1
2
3 Esta figura representa un matriz de cuatro filas (numeradas verticalmente de 0 a 3) y seiscolumnas(numeradashorizontalmentede0a5).Encadaunadelas24celdasocasillassepuedeguardar un dato. La dimensin o tamao de unamatriz es el nmero filas por el nmero decolumnas.Debeserclaroentoncesquelafiguraanterioreslagrficadeunamatrizdedimensin4x6.Lanumeracinde las filasy lascolumnasdeterminaquecadaunade lascasillasdeunamatriztieneasociadosdosnmerosque la identificandemaneranica.Aestosnmeros se les llama
3 Matrices
ndicedefilaendicedecolumna,respectivamente.Enelseudolenguaje,ytambinenCyC++,lasfilasylascolumnassenumerandesde0.Los lenguajescomoCyC++,permitenqueelprogramadordeclarematricesdecualquier tipoyprcticamentedecualquiertamao.Enelseudolenguaje,unmatrizsedeclarausandoelsiguienteformato:
:matriz[][]deEn este formato aparecen enmaysculas y entre los caracteres los componentes que elprogramadorpuededeterminar.Aspor ejemplo, si sequieredeclararunamatriz con nombremat, de dimensin 15x4 y que pueda almacenar datos de tipo caracter, se debe escribir lasiguientelnea.
mat:matriz[15][4]decaracterSegn el formato anterior, el programador debe bautizar la matriz (ponerle un nombresignificativo),debedecirculessudimensin,ytambindebedecirdequtiposonloselementosquealmacenar.Enseguidasedanalgunosejemplosdedeclaracionesdematrices.
Sisenecesitaguardarlainformacinrelacionadaconeltablerodeunjuegodetictactoe(eltradicionaltriqui),sepuededeclararlasiguientematriz:
tablero:matriz[3][3]decaracter
Siserequiereguardarlasnotasquehansacado35estudiantesenlos5talleresyenlos5
laboratorios del curso de Programacin de Computadores se pueden declarar lassiguientesmatrices.
talleres:matriz[35][5]dereallaboratorios: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 15columnas.
Los ndicessecrearonparapermitirqueelprogramadorsepueda referir,de formaespecficaydirecta,auna cualquierade las casillasde lamatriz, tantoparaguardarundatoenesa casilla,
4 Matrices
comoparaobtenereldatoalmacenadoenella.Enelseudolenguaje,parareferirseaunacasillaparticulardeunamatrizsedebeseguirelsiguienteformato:
[][]esdecir,sedebeescribirelnombrede lamatrizseguidoporel ndicede filayporel ndicedecolumna,ambosentreparntesiscuadrados,delacasillaquesequiereconsultar.Paralossiguientesejemplos,supongaquesedeclaralamatrizmontos,delasiguientemanera:
montos:matriz[6][10]dereal
Lasiguienteinstruccinasignaoguardaelnmero10,4enlacasilladelaesquinasuperiorizquierdadeestamatriz:
montos[0][0]:=10,4
Lasiguienteinstrucciniterativaguarda5,5encadaunadelascasillasdelaltimafilade
estamatriz:
k:=0MIENTRAS(k
5 Matrices
EjemploUnamatrizmgica esunamatriz cuadrada (tiene igualnmerode filasquede columnas)quetienecomopropiedadespecialquelasumadelasfilas,lascolumnasylasdiagonalesesigual.Porejemplo:
2 7 69 5 14 3 8
Enestamatrizlassumasson15.Considereelproblemadeconstruirunalgoritmoquecompruebesiunamatrizdedatosenterosesmgicaono, yen casodeque seamgicaescribir la suma.Elusuario ingresael tamaode lamatrizmximohasta10.Ademsdebeguardarlasumadelasfilas,lascolumnasylasdiagonalesenunarregloenelordensiguiente:
0 1 2 3 4 5 6 7
Fila0 Fila1 Fila2 Columna0 Columna1 Columna2 Diagonal1 Diagonal2Lasentradas(datosconocidos)paraelalgoritmoson:
Ladimensindelamatriz Losnmerosquecontienelamatriz
Lasalidaesperada(datosdesconocidos)es:
Lamatrizesmgicaono,ysiesmgicaculeselvalordelasuma.En este problema, los arreglos son tiles para guardar los datos que conforman lamatriz. Losnmerosquecontienelamatrizsepuedenguardarenunavariableentera.Lasiguientegrficaresumelasentradasysalidasdelalgoritmoquesepretendedisear.Ademsbautizantodaslasvariablesmencionadas.
Las condiciones iniciales y finales se pueden expresar mediante las clusulas REQUIERE yGARANTIZA:
tam
mgicasuma
mensaje
6 Matrices
REQUIERE:Ladimensindelamatrizquedebesermximo10x10CadaelementodelamatrizdebeserunnmeroenteroGARANTIZAMuestraenpantallasiesmgicaono,ysiloescualeselvalordelasuma.
Unaprimeraversindelalgoritmopuedeserlasiguiente:
InicioPaso1.LeereltamaodelamatrizPaso2.LeerloselementosdelamatrizPaso3.DeterminarsilamatrizesmgicaonoPaso4.SilamatrizesmgicamostrarelvalordelasumaFin
Lospasos1y2son interaccionesconelusuarioquepermitencapturar losdatosdeentrada.Laversin inicial se puede refinar detallando estos pasos y adems defiendo las variables parahacerlos:
Procedimientoprincipalvariablesi,j,aux,tam,suma:enteros //isealalasfilas//jsealalascolumnasmagica:matriz[10][10]deenterosInicioescribir(Porfavordigiteelnmerodefilasdelamatriz(entre2y10):)leer(tam)para(i=0hastatam1)hacer para(j=0hastatam1)hacer
7 Matrices
escribir(Porfavordigiteeldatoenlaposicin)escribir(i,j)leer(magica[i][j])fin_parafin_paraPaso3.DeterminarsilamatrizesmgicaonoPaso4.Silamatrizesmgicamostrarelvalordelasuma
Sepuedeobservarqueelprimercicloparatienecomocontador lavariable i,esto indicaquesellenarlamatrizporfilas,elsegundocicloparaquetienecomocontadorlavariablej,recorrerlafilacolumnaacolumnaparaubicaralleldatocorrespondiente.Lapartenucleardelasolucineselpaso3.Enesteproblemaenparticularsesabequeelnmerodefilasydecolumnasesigualyquehaydosdiagonales.Paraelejemplomostradoaliniciosera3filas, 3 columnas y dos diagonales. Para almacenar las sumas en un arreglo este tendr unadimensinde2*tam+2.Ladeclaracindelarreglosumases:
sumas:arreglo[22]deenterosAhoraparacalcularlassumassepuedehacerlosiguiente:
Paso3.1:InicializarelarreglodesumasenceroPaso3.2:Sumarfilaporfila,columnaporcolumnaylasdiagonalesyguardarsuvalorenelarreglo.para(i=0hasta2*tam+2)hacer sumas[i]:=0fin_para//Sumascorrespondientesalasfilaspara(i=0hastatam1)hacer para(j=0hastatam1)hacer sumas[i]=magica[i][j]+sumas[i] fin_para
8 Matrices
fin_para//Sumascorrespondientesalascolumnaspara(j=0hastatam1)hacer para(i=0hastatam1)hacer sumas[j+tam]=magica[i][j]+sumas[j+tam] fin_parafin_para//Sumascorrespondientesalasdiagonalespara(i=0hastatam1)hacer sumas[2*tam]=magica[i][i]+sumas[2*tam]fin_parapara(i=0hastatam1)hacer sumas[2*tam+1]=magica[i][(tam1)i]+sumas[2*tam+1]; fin_para
Paso4:Paradeterminarsi lamatrizesmgicasevaarecorrerycompararelvectorsumas,sienalgnmomentoseencuentraunvalordiferentesemuestraenpantallaquelamatriznoesmgicaysellevaelcontadorimsalldelfinaldelarreglo,siporelcontrariosellegaalfinaldelarreglo,es decir que todo este contiene el mismo valor y la matriz si cumple con las caractersticasevaluadas,semuestraenpantallaquelamatrizesmgica.
//Compararelvectorsumaymuestraelresultadointcon=0;con=sumas[0];para(i=1hasta2*tam+1)hacersi(consumas[i])escribir("lamatriznoesmgica)
9 Matrices
Elalgoritmocompletosepresentaenseguida.
i=2*tam+3;fin_sifinparasi(i=2*tam+2)escribir(lamatrizesmgicaylasumaes:)escribir(con);fin_si
Procedimientoprincipalvariablesi,j,aux,tam,suma:entero //isealalasfilas//jsealalascolumnascon=0:enteromagica:matriz[10][10]deenterossumas:arreglo[22]deenterosInicioescribir(Porfavordigiteelnmerodefilasdelamatriz(entre2y10):)leer(tam)para(i=0hastatam1)hacerpara(j=0hastatam1)hacerescribir(Porfavordigiteeldatoenlaposicin)escribir(i,j)leer(magica[i][j])fin_para
10 Matrices
fin_parapara(i=0hasta2*tam+2)hacersumas[i]:=0fin_para//Sumascorrespondientesalasfilaspara(i=0hastatam1)hacerpara(j=0hastatam1)hacersumas[i]=magica[i][j]+sumas[i]fin_parafin_para//Sumascorrespondientesalascolumnaspara(j=0hastatam1)hacerpara(i=0hastatam1)hacersumas[j+tam]=magica[i][j]+sumas[j+tam]fin_parafin_para//Sumascorrespondientesalasdiagonalespara(i=0hastatam1)hacersumas[2*tam]=magica[i][i]+sumas[2*tam]fin_parapara(i=0hastatam1)hacersumas[2*tam+1]=magica[i][(tam1)i]+sumas[2*tam+1];fin_paracon=sumas[0];
11 Matrices
Nota:veranexoProblemasparadesarrollarenclase1. 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 estosaspectos,y luegoescribaelpromedioobtenidoencadaunodeellos.La listadebeaparecerordenadadelaspectomejorcalificadoalpeorcalificado.
2. EnunahaciendahayunhatoquesecomponedeNvacas.Diseeunalgoritmoqueguardeenunamatrizdedimensin7xNlaproduccindelechediaria(enlitros)decadaunadelasvacas,duranteunasemana.Adems,elalgoritmodebecalcularlaproduccintotaldelhatoencadaunodelossietedas,yelnmerodelavacaquediomslecheencadada.
para(i=1hasta2*tam+1)hacersi(consumas[i])escribir("lamatriznoesmgica)i=2*tam+3;fin_sifinparasi(i=2*tam+2)escribir(lamatrizesmgicaylasumaes:)escribir(con);fin_sifinprocedimiento
12 Matrices
Ejerciciosparadesarrollarencasa1. Lossiguientesejerciciostienencomopropsitoqueustedescribaciclosquerecorranlamatriz
completaopartesdeella.SupongaquesehadefinidounaconstantepositivaenteraNyunamatrizmat,dedimensinNxN.
Escribaunalgoritmoquepongaceroenambasdiagonalesdelamatriz. Escribaun algoritmoqueponga ceroen laprimera y laltima fila, yen laprimera y la
ltimacolumnadelamatriz. Escribaunalgoritmoque llenedenmeros lamatrizdetalformaquemat[i][j]sea iguala
i+j. Escribaunalgoritmoquelleneladiagonalprincipaldelamatrizconlosnmeros1,2,3,...N.
Ladiagonalprincipaldeunamatrizestformadapor lascasillasen lascualesel ndicedefilaydecolumnasoniguales.
Escribaunalgoritmoque llene todas las filasparescon losnmeros1,2,3,...N,y las filasimparesconlosnmerosN,N1,N2,...1.
2. Diseeunalgoritmoquepermitaguardarenunarreglo lassumasde lasfilasdeunamatriz.
Estoes, la sumade loselementosde laprimera filadeberquedarguardadaen laprimeraposicindelarreglo,lasumadeloselementosdelasegundafilaenlasegundaposicin,yassucesivamenteparatodaslasfilasdelamatriz.Lamximadimensindelamatrizes100x50(100filasy50columnas)yladelvectores100.
Porejemplo,sielusuarioingresalasiguientematrizde3x5(3filas,5columnas)
3,5 6,5 30 8,2 04 0 1 3,6 1,410 1,5 3,4 6,6 2
Elresultadoseraunarreglosiguiente:
48,2 8 20,5
porque
3,5+6,5+30+8,2+0=48,24+0+(1)+3,6+1,4=8y
10+(1,5)+3,4+6,6+2=20,53. En lgebra lineal lasmatrices son tema central. Sobre ellas se definen varias operaciones,
comoporejemplo:
La sumadedosmatrices. SiA yB sonmatricesde igualdimensin, lamatrizC=A+B secalculahaciendoqueC[i][j]=A[i][j]+B[i][j],paratodoiyjvlidos.
13 Matrices
Latraspuestadeunamatriz.SiAesunamatrizdedimensinNxM,lamatrizB=AtsecalculahaciendoqueB[i][j]=A[j][i],paratodoiyjvlidos.NotequeestoquieredecirquelasfilasseconviertenencolumnasyqueladimensindeBesMxN.
Latrazadeunamatrizcuadrada.SiAesunamatrizdedimensinNxN,lamatriztrazaeslasumadetodosloselementosdeladiagonalprincipal.
La multiplicacin de dos matrices. Si A y B son matrices de dimensiones nxm y mxk,respectivamente,lamatrizC=A*B,dedimensinnxk,secalculahaciendoque:
1
0]][[*]][[]][[
m
pjpBpiAjiC
Especifiqueyescribaunalgoritmoparacadaunadeestasoperaciones.AnexosEnestaseccinsemostraracomoeslacodificacindelateoravistaenclase,paraelloseutilizaracomoherramientadecodificacin:C++.
CodificacinenC++dearreglosymatrices
Seudocdigo C++
Matriz : matriz [][] de
[][];
EjemploEnC++#include#include#include/****Esteprogramaleelosdatosdeunamatriz3x4ymuestraenpantallalasumadelos
datosdecadafila*****/main(){intmatriz[3][4];intarreglo[3];inti,j;//Ingresodelosdatos
14 Matrices
for(i=0;i
15 Matrices
}getch();}//Programadelamatrizmgica#include#includeusingnamespacestd;intmain(intargc,char*argv[]){inti,j,aux,tam,suma;intcon=0;intmagica[10][10];intsumas[22];//Ingresodedatoscouttam;for(i=0;i
16 Matrices
sumas[i]=0;}//filasfor(i=0;i
17 Matrices
for(i=0;i