LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 6 ARRAYS VETORES E MATRIZES) A trdução do termo rry pr língu portugue eri rrnjo. Em progrmção, empreg-e ete termo pr repreentção de um vriável om divero elemento ordendo egundo um eqüêni de índie, Fig. 24. A = ) ) 2) 3) 4) A =,),) 2,) 3,) 4,),),) 2,) 3,) 4,),2),2) 2, 2) 3,2) 4, 2) Figur 24 Form de um Arry Imginr que vetore e mtrize em progrmção ão omprdo à mtrize e vetore tl qul ão repreentdo mtemtimente é um grnde erro. A mplitude d plição de mtrize e vetore em tenologi d informção é muito mi mpl do que e pode imginr mtemtimente. Por exemplo, pode-e empregr um mtriz pr repreentção de um l de tetro, onde o índie que repreent linh e olun de um elemento repreentri fileir poderi er por um letr) e numerção d deir que um indivíduo etri entdo. Ete indivíduo poderi er repreentdo pelo número do eu ingreo e eri o elemento repreentdo n mtriz. Um mtriz poderi repreentr dipoição de me em um returnte, um tbuleiro de xdrez, et.. Vetore podem repreentr lit de ompr, um lit de proedimento pr intlção de um oftwre em um omputdor, um pilh ou um fil de ddo etruturdo ou ordendo egundo um eqüêni lógi, um pilh de rquivo texto que repreent um ix de entrd de mengen de elulr, et.. Em tod lingugen de progrmção, vetore, ão trtdo omo rry unidimenioni e mtrize multidimenioni, ou ej, vetore pouem pen um índie pr repreentção de eu elemento, poi, etão todo dipoto em um úni olun ou linh. Mtrize rry multidimenioni) pouem doi ou mi índie e depende d dimenão deejd e do tipo de elemento repreentdo. A vriávei onheid té ete pítulo erm denomind de vriávei de tipo imple. Já o rry ão onheido, im omo etrutur e enumerçõe, omo vriávei de tipo omplexo. Et vriávei pouem rteríti própri onde e detm: Lingugem de Progrmção Etruturd 57
Lingugem de Progrmção Etruturd 58 O elemento ão trtdo pel u lolizção, ou ej, índie que repreent poição d linh no o do vetor) e poição d linh e d olun pr mtrize, figur 25; O elemento ão de um memo tipo, ou ej, um mtriz ou vetor não podem pouir tipo diferente e A identifição de um elemento e dá pelo identifidor do vetor ou d mtriz e o índie que repreentm u poição dentro d etrutur, figur 25. Oberve d figur 25-, dotndo-e um índie om vlor iniil zero), onforme o pdrão d lingugem C#, o elemento A[3] eri o String São Pulo, já n figur 25-b, que repreent um mtriz de imgem binári, dotndo-e o memo ritério de índie pr lolizção de um vlor, no o repreentdo por um poição em um linh e um olun, tem-e que A[,]=. 6. Vetore A intxe de delrção de um vetor em C# é: <tipobe> [ ] <nome>; Onde tipobe pode er qulquer tipo de vriável, inluive de outro tipo omplexo que não erão trtdo net potil, omo enumerção e etrutur. O vetore devem er rido ou delrdo) e iniilizdo. A iniilizção do vetore pode er feit de vári form. Pode-e epeifir o onteúdo ompleto do vetor ou e eu tmnho e ur plvr-hve new pr iniilizção de eu elemento. ) ) b A Alegre Porto Florinópoli Curitib Pulo São Jneiro Rio de Horizonte Belo Vitóri A = = Figur 25 ) Vetor de String repreentndo piti do Sul e Sudete do Bril b) Mtriz om elemento binário repreentndo imgem d letr B. ) ) b A Alegre Porto Florinópoli Curitib Pulo São Jneiro Rio de Horizonte Belo Vitóri A = = Figur 25 ) Vetor de String repreentndo piti do Sul e Sudete do Bril b) Mtriz om elemento binário repreentndo imgem d letr B.
Ex.: int [ ] myintarry = 5, 9,, 2, 99; O vetor myintarry poui 5 elemento d qul om um vlor de número inteiro tribuído ele. Det form tem-e: myintarry[]=5; myintarry[]=9; myintarry[2]=; myintarry[3]=2; myintarry[4]=99; Nete egundo exemplo: int [ ] myintarry = new int[5]; todo o elemento do rry form iniilizdo om o vlor zero, devendo er tribuído o vlore poteriormente. A intxe de delrção nete o é: int [ ] myintarry = new int[tmnho do Vetor]; Deve-e reltr que em nenhum do o pode-e tribuir um número mior de vlore o elemento do vetor. Atividde em Lbortório: Um fbrinte de motore deej vlir reitêni de um d peç omponente de eu motor em relção à tempertur. Pr tnto, divero experimento form relizdo e d um dele oniti n medição d tempertur d peç em doi ponto diferente. Um lgoritmo foi elbordo om o propóito de reeber omo entrd leitur de d um do termopre medidore de tempertur oniderndo ondução de lor) e preentr omo íd, de form ordend, mior e menor tempertur medid e médi entre du tempertur. Vle reltr que o número de experimento pr um peç é indefinido tendo omo máximo 5 experimento. SOLUÇÃO: Pr entrd de ddo tempertur medid) empregremo doi vetore: T e T2 ontendo 5 elemento d. Deve-e reltr que o não utilizemo o demi elemento o epço reervdo pr ele não erá utilizdo e firá em onteúdo n memóri do omputdor. Sendo im, intxe de delrção dete vetore eri: flot [ ] T:new flot[5]; flot [ ] T2: new flot[5]; Lingugem de Progrmção Etruturd 59
Oberve ind que erão rido vetore om índie e dimenõe orrepondente de form rmzenr o prâmetro de íd reultdo deejdo) do lgoritmo: flot [ ] T_M:new flot[5]; flot [ ] T_m: new flot[5]; flot [ ] T_medi:new flot[5]; Um etrutur de repetição deve er plid om um vriável de ontrole i. Et vriável terá omo função vrição do vlor do índie que repreent poição do elemento no vetor. Com ito fz-e leitur do vetore elemento elemento e o vetore que repreentrão o reultdo do lgoritmo terão índie orrepondente. Fi lro então que, e numerrmo o experimento endo o número máximo nexp ), terímo índie vrindo de zero) nexp- e d um dele orreponderim um experimento. Iníio T[5],T2[5],T_M[5], T_m[5],T-medi[5], nexp,i nexp i ;i < nexp; V T[i], T2[i] F T_medi T[i]+T2[i])/2 F T[i]-T2[i]) > V T_M[i] T2[i] T_m[i] T[i] T_M[i] T[i] T_m[i] T2[i] Temp C) Temp2 C) T Mior C) T Menor C) T Médi C) i ;i < nexp; F V T[i],T2[i],T_M[i],T_m[i],T_medi[i] Fim Figur 26 Algoritmo pr vlição experimentl d tempertur médi de um utopeç - Fluxogrm Lingugem de Progrmção Etruturd 6
O lgoritmo reultnte em C# fi: tti void Mintring[] rg) /* Cálulo d tempertur máxim, mínim e médi em um onjunto de * experimento relizdo em um indútri utomobiliti */ Delrção de vriávei nexp - número de experimento i - vriável de ontrole T[... nexp-] - Tempertur medid no termopr de número T2[... nexp-] - Tempertur medid no termopr de número 2 T_M[... nexp-] - Mior vlor de tempertur entre o termopre; T_m[... nexp-] - Menor vlor de tempertur entre o termopre; T_medi[... nexp-] - Tempertur médi entre o termopre. int i, nexp; flot[] T = new flot[5]; flot[] T2 = new flot[5]; flot[] T_M = new flot[5]; flot[] T_m = new flot[5]; flot[] T_medi = new flot[5]; Entrd de Ddo Número de experimento: nexp Conole.Write**********************\n Digite o número de experimento ==> ); nexp = int.preconole.redline)); for i = ; i < nexp; i++) Entrd de Ddo: Tempertur no termopre: T e T2 Conole.WriteLine ====> Experimento n., i + ); Conole.Write Digite tempertur em C do Primeiro Termopr ==> ); T[i] = flot.preconole.redline)); Conole.Write Digite tempertur em C do Segundo Termopr ==> ); T2[i] = flot.preconole.redline)); T_medi[i] = T[i] + T2[i]) / 2; if T[i] - T2[i] >= ) T_M[i] = T[i]; T_m[i] = T2[i]; ele T_M[i] = T2[i]; T_m[i] = T[i]; Conole.WriteLineT - C) \tt - 2 C) \tmior T C) \tmenor T C) \tt Médi C)); for i = ; i < nexp; i++) Conole.Write \t\t \t\t2 \t\t3 \t\t4\n, T[i], T2[i], T_M[i], T_m[i], T_medi[i]); A íd do lgoritmo é preentd n figur 27. O reultdo referem-e o ddo de entrd tmbém preentdo n figur. ATIVIDADE: Fç implementção do lgoritmo e fç u exeução po po Tel F). Oberve o fluxo de exeução do lgoritmo e onordâni entre vriávei de entrd e de íd. Fç um tete de me e exeute novmente o progrm. Fç um verifição e o reultdo obtido pel exeução do progrm etão de ordo om o tete de me relizdo. Lingugem de Progrmção Etruturd 6
Figur 27 Apreentção do onole reultnte d exeução do lgoritmo. Exeríio Propoto : ) Elbore um lgoritmo que reeb omo entrd doi vetore A e B ujo elemento ão número inteiro. O lgoritmo deverá preentr omo íd trê vetore, C, D e E, endo: C = A + B D = A B E = A * E 2) Elbore um lgoritmo que reeb omo entrd um vetor de rtere ontendo um plvr qulquer. O lgoritmo deverá preentr omo íd et plvr invertid. 3) Elbore um lgoritmo que reeb omo entrd omponente de doi vetore u = x, y, ) e v = x, y, ). O lgoritmo deverá preentr omo reultdo o vetor w z z 2 2 2 que é o vetor reultnte d om entre o vetore, bem omo o módulo do vetore, o produto elr e o ângulo entre o vetore u e v. 4) Elbore um lgoritmo que lule e exib o ângulo formdo por um vetor e o eixo de um item rteino no R 3. Sugetão: Lembre-e que o eixo de um item podem er repreentdo por verore e, o produto elr entre ee vetore e verore reultm em um expreão mtemáti que permite obtenção do ângulo entre ele). Lingugem de Progrmção Etruturd 62
5) Elbore um lgoritmo que reeb omo entrd um tring. Ete lgoritmo deverá trnformr ete tring em um vetor e eguir erever et plvr invertid. Not: fç um tete ou invetigção) d intruçõe bixo: nome_do_tring.tochrarry ); nome_do_tring.tolower ); nome_do_tring.toupper ); nome_do_tring.trimtrim_crtere) e nome_do_tring.length. 6.2 Mtrize O termo mtriz é reervdo pr um rry bidimenionl, no entnto, pode-e ontruir rry om mi de doi índie. O índie ão entidde empregd pr, exluivmente, poiionr e lolizr um elemento de um mtriz. Ete índie, no o de um mtriz, repreentrim poição do elemento egundo linh e olun d mtriz. D mem form que pr o vetore, um mtriz em C# poui índie repreenttivo de linh e olun uj numerção inii no vlor zero. A intxe de delrção de um vriável do tipo mtriz é: < tipo Be> [, ] <nome>; ou <tipo Be> [,] <nome> = new <tipo Be> [n de linh, n de olun] ; Pode-e ind delrr um vriável do tipo mtriz já tribuindo eu vlore, ex.: double [, ] ltur =,2,3,4,2,3,4,5,3,4,5,6; e orreponde mtriz; ltur = 2 3 2 3 3 4 4 5 Det form fi óbvio e evidente que qulquer elemento de um mtriz pode er identifido pel u poição repreentd pelo índie que repreentm linh e olun d mtriz. No o d mtriz ltur, tem-e: 4 5 6 ltur[2,3] = 6 e ltur[,2] = 4 Lingugem de Progrmção Etruturd 63
Oberve que o índie que repreentm linh e olun d mtriz um vez etbeleido) vri de zero) té o nlinh número de linh ),e té nolun número de olun ). Como exemplo verifique repreentção do elemento e índie d mtriz ltur bixo: ltur[,] ltur = ltur[,] ltur[2,] ltur[,] ltur[,] ltur[2,] ltur[,2] ltur[,2] ltur[2,2] ltur[,3] ltur[,3] ltur[2,3] Pr tnto, fi evidente que trblhr om mtrize requer plição de etrutur de repetição ninhd, ou ej, ombind de form relizr vrredur de um mtriz no entido de identifir u linh e u olun. A tividde de lbortório derit eguir motr om lrez form de plição det du etrutur ombind. Atividde em Lbortório: A Pizzri BomDio poui um item interente de gerenimento de me. O gerente reponável pel ditribuição e loção do liente n me ont om um plitivo que lhe expõe um plnt do returnte. Et plnt é repreentd por um mtriz e eu elemento preentm, ou o número d me eguido do número de lugre o me etej livre ou, número d me eguido de *, o me etej oupd. O número de d me é etbeleido pelo gerente. O elemento indido por repreentm o blão de erviço, o repreentdo por, ix e o epço vzio repreentm áre de irulção. A onfigurção iniil d mtriz fi: BD = 3 4 4 6 5 4 32 4 42 6 52 6 33 4 43 6 34 8 53 6 2 2 2 2 44 4 2 2 2 2 22 2 Pr tnto erá elbordo um lgoritmo que etbeleç et ondição iniil pr mtriz BD e, permit, medinte oupção de lugre u tulizção e nov preentção. Oberve que pr dr um mior vertilidde o problem o lgoritmo ri um mtriz onde todo o eu elemento ão preenhido om tring em brno e, poteriormente ão preenhido onforme plnt preentd. Apó rição d mtriz bd[8,4] é implementdo um proedimento de impreão d plnt n tel e é diponibilizdo o funionário d pizzri oupção de um me qulquer. Um vez digitdo o número d Lingugem de Progrmção Etruturd 64
me deej, o plitivo verifi oupção d me, ou ej, e me etá relmente livre ou oupd. Co me etej oupd, plição retorn o funionário um mengem de me oupd, oliitndo digitção de outr me. Co me etej livre, o item tuliz oupção d me, limp tel e preent um nov plnt om me oupd. A figur que eguem preentm tod et ituçõe: Figur 28 Plnt iniil d me d pizzri BomDio Figur 29 Plnt tulizd d me d pizzri BomDio pó um oupção Figur 3 Plnt tulizd d me d pizzri BomDio pó um entrd errd número de me oupdo) A prtir do ódigo implementdo bixo, reente opção de liberção de um me om o retorno do número de lugre d me n plnt do returnte. Segue bixo o lgoritmo já implementdo pr funçõe im. Lingugem de Progrmção Etruturd 65
tti void Mintring[] rg) int i, j; tring[,] bd = new tring[8, 4]; tring op,rme; hr[]nme; hr[]nlyout; Iniilizção d mtriz for i = ; i < 8; i++) for j = ; j < 4; j++) bd[i, j] = ;; Preenhimento do blão de erviço e ix fori=;i<3;i++) for j = ; j < 6; j++)bd[i, j] = ; for j = 7; j < ;j++ ) bd[i, j] = ; bd[,5]= ; bd[2,4]=bd[2,5]= ; Preenhimento d plnt do returnte om me vi Linh i= bd[, ] = -2; bd[, 3] = 2-2; Linh i= bd[, ] = -2; bd[, 3] = 2-2; Linh i=2 bd[2, ] = 2-2; bd[2, 3] = 22-2; Linh i=3 ==> Corredor Linh i=4 bd[4, ] = 3-4; bd[4, 3] = 32-4; bd[4, 6] = 33-4; bd[4, 9] = 34-8; Linh i=5 ==> Corredor Linh i=6 bd[6, ] = 4-6; bd[6, 4] = 42-6; bd[6, 8] = 43-6; bd[6, 2] = 44-4; Linh i=7 bd[7, 3] = 5-4; bd[7, 6] = 52-6; bd[7,] = 53-6; Apreentção d plnt for i = ; i < 8; i++) for j = ; j < 4; j++)conole.write, bd[i, j]); Conole.WriteLine); Conole.RedKey); Conole.Cler); Conole.WriteDeej oupr um me? ou n)); op = Conole.RedLine); whileop.tolower) == ) Lingugem de Progrmção Etruturd 66
Conole.WriteDigite o número d me que deej oupr ==>); rme=conole.redline); nme=rme.tochrarry); fori=;i<8;i++) forj=;j < 4;j++) nlyout=bd[i,j].tochrarry); if nme[] == nlyout[] && nme[] == nlyout[]) if nlyout[3]!= '*') bd[i, j] = rme + -*; ele Conole.WriteMe oupd, digite outr me ou oliite que o liente gurde!); Conole.RedKey); ; Conole.Cler); Apreentção d plnt tulizd for i = ; i < 8; i++) for j = ; j < 4; j++)conole.write, bd[i, j]); Conole.WriteLine); Conole.WriteDeej oupr um me? ou n)); op = Conole.RedLine); Exeríio Propoto ) Elbore um lgoritmo que reeb omo entrd du mtrize A e B de número inteiro om mem dimenão. O lgoritmo deverá exibir, de form ordend, mtrize A e B e, poteriormente mtrize C = A+B e D=A-B. 2) Elbore um lgoritmo que reeb um mtriz om du olun e o número de luno igul o número de luno de um l de ul qulquer máximo 5 luno). Et mtriz deverá onter o nome e o regitro dêmio RA) de d luno d turm. Um egund mtriz om trê olun é tmbém empregd omo ddo de entrd onde, d olun orreponde um not do luno em um determind diiplin P, P2 e APS). O lgoritmo deverá lulr médi emetrl MS) de d luno e preentr omo íd um reltório ontendo em ordem eqüenil: nome e RA do Aluno, Not P, P2 e APS), MS e Sttu. O Sttu do luno é etbeleido em função de u médi emetrl, ou ej, e MS for mior ou igul 7., o luno etrá provdo, o ontrário, o luno etrá de exme. O Cálulo d médi emetrl é relizdo egundo fórmul: MS = 4P + 5P2 + APS)/ 3) Elbore um lgoritmo que reeb omo entrd um mtriz A qulquer e preente omo íd trnpot d mtriz A e u digonl prinipl. 4) Elbore um lgoritmo que preente omo reultdo poição linh e olun) de um elemento de um mtriz qulquer, o exit, prtir de um oliitção do uuário. Lingugem de Progrmção Etruturd 67
Co o elemento não exit, o lgoritmo deverá exibir um mengem de erro e ontinundo u exeução. 5) Elbore um lgoritmo que reeb omo entrd um vetor om o nome do lube de futebol brileiro e um mtriz orrepondente que preente em d um de u olun o eguinte iten: Ponto Gnho, número de jogo, número de vitóri, número de empte e número de derrot. O lgoritmo deverá preentr um reltório dee ddo net ordem e o trê primeiro olodo no mpeonto brileiro. Lingugem de Progrmção Etruturd 68