17
Matrices 2013 Transversal de Programación Básica Proyecto Curricular de Ingeniería de Sistemas

Matrices

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