versão 0.4 capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · símbolos usados em...

9
Versão 0.4 Capítulo 3 Algoritmos e linguagens de programação Um computador é projetado de tal forma que pode desempenhar funções que sequer foram imaginadas quando da época de sua concepção. Mas, para isso, é preciso que um programa seja nele instalado para que possa ser executado. Como vimos nos capítulos anteriores, tudo que o computador executa deve ser feito por circuitos eletrônicos digitais, cujas instruções têm que necessariamente ser expressas em termos de zeros e uns. Para introduzir os conceitos de linguagens de programação iremos simplificar ainda mais uma linguagem de programação que foi desenvolvida com o propósito de ensinar programação em “linguagem de máquina”, que é o nível mais próximo da linguagem que o processador “entende”, que é de zeros e uns. Usaremos a linguagem Hipo (de computador HIPOtético), desenvolvida pelo Prof Valdemar Setzer, a partir de um sub-conjunto das instruções de um computador real (IBM 1620, fabricado na década de 1960, Setzer, 2000). Imaginem que cada instrução corresponda a uma parte de um circuito eletrônico como mostrado no capítulo anterior. Assim, um programa é uma série de instruções.

Upload: trinhhanh

Post on 12-Dec-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

Versão0.4Capítulo3Algoritmoselinguagensdeprogramação

Um computador é projetado de tal forma que pode desempenharfunçõesquesequerforamimaginadasquandodaépocadesuaconcepção.Mas,paraisso, é preciso que um programa seja nele instalado para que possa ser executado.Comovimosnoscapítulosanteriores, tudoqueocomputadorexecutadeveser feitopor circuitos eletrônicos digitais, cujas instruções têm que necessariamente serexpressasemtermosdezeroseuns.

Para introduzir os conceitos de linguagens de programação iremossimplificar aindamais uma linguagem de programação que foi desenvolvida com opropósito de ensinar programação em “linguagem demáquina”, que é o nívelmaispróximodalinguagemqueoprocessador“entende”,queédezeroseuns.

Usaremos a linguagemHipo (de computadorHIPOtético), desenvolvidapelo Prof Valdemar Setzer, a partir de um sub-conjunto das instruções de umcomputadorreal(IBM1620,fabricadonadécadade1960,Setzer,2000).

Imaginem que cada instrução corresponda a uma parte de um circuitoeletrônicocomomostradonocapítuloanterior.Assim,umprogramaéumasériedeinstruções.

Page 2: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

InstruçõesdocomputadoreletrônicodigitalHipo

Núm. Mnemônicoesintaxe

Oqueéexecutado

11 LDANN CopiaoconteúdodamemórialocalizadanoendereçoNNparaoacumulador.

12 STANN CopiaoconteúdodoacumuladorparaamemórialocalizadanoendereçoNN.

21 ADDNN AdicionaoconteúdodamemóriadeendereçoNNcomoconteúdodoacumuladoregravaoresultadonoacumulador.

22 SUBNN SubtraioconteúdodamemóriadeendereçoNNdoconteúdodoacumuladoregravaoresultadonoacumulador

23 MULNN MultiplicaoconteúdodamemóriadeendereçoNNpeloconteúdodoacumuladorecolocaoresultadonoacumulador

24 DIVNN DivideoconteúdodamemóriadeendereçoNNpeloacumuladorecolocaoresultadonoacumulador

25 REMNN DivideoconteúdodamemóriadeendereçoNNpeloacumuladorecolocaorestodadivisãonoacumulador.

29 REV Mudaosinaldoconteúdodoacumulador.31 INNNN Lêumnúmeroquefoidigitadodotecladoeoguardano

endereçoNNdamemória.41 PRNNN Imprimaarepresentaçãodecimaldoconteúdodamemória

comendereçoNN.50 NOP Nãoexecutaoperaçãoalguma.51 JMPNN MudaaposiçãodainstruçãocorrenteparaaposiçãoNN

incondicionalmente.52 JLENN MudaaposiçãodainstruçãocorrenteparaaposiçãoNNse

ovalorarmazenadonoacumuladorformenorouigualazero.

53 JDZNN MudaaposiçãodainstruçãocorrenteparaaposiçãoNNseovalorarmazenadonoacumuladorfordiferentedezero.

54 JGTNN MudaaposiçãodainstruçãocorrenteparaaposiçãoNNseovalorarmazenadonoacumuladorformaiorquezero.

55 JEQNN MudaaposiçãodainstruçãocorrenteparaaposiçãoNNseovalorarmazenadonoacumuladorforigualazero.

56 JLTNN MudaaposiçãodainstruçãocorrenteparaaposiçãoNNseovalorarmazenadonoacumuladorformenorquezero.

57 JGENN MudaaposiçãodainstruçãocorrenteparaaposiçãoNNseovalorarmazenadonoacumuladorformaiorouigualazero.

70 STP Interrompeaexecuçãodoprograma.

Page 3: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

Umprogramaque lê,no teclado,ovalordedoisnúmeroseapresentaasuasomanodispositivodesaídaseriaescritoassim,deacordocoma linguagemdeprogramaçãosimplificadaacima:010 INN 77 020 INN 78 030 LDA 77 040 ADD 78 050 STA 78 060 PRN 78 070 STP 00

Paracadainstruçãohátrêsvalores(instruçõesquenãosereferemaum

endereçosãopreenchidascom00).Oprimeirovalor(obrigatório)énúmerodeordemda instrução. Os números de ordem não precisam ser sequenciais (como 21,22,23,etc.) mas as instruções serão executadas na ordem crescente a menos que umainstrução de controle de fluxo (desvio) seja executada. Lembrem-se que essalinguagem é da época de cartões perfurados, a numeração dos cartões erammuitoúteis, por exemplo, quando acidentalmente eles se espalhavam ao cair no chão... Onúmeroaseguiréaquelecorrespondenteàinstrução.Oterceirovaloréoendereçodamemóriaqueéacessado(gravadoourecuperado)duranteainstruçãoexecutada.

Evidentementeo computadornão entenderia essas instruções,mas simaquelascorrespondentesaosnúmerosbináriosdessasinstruções.Assim,naprimeiralinhaoprimeirovalor seria1010 (10decimal, ignoraremosos zerosà esquerda), osegundoseria11111(31decimal,quecorrespondeàinstruçãoINN)eoterceiroseria1001101(77decimal,endereçodamemóriaescolhido).

Assim,embinário,completandooszerosàesquerdaparatermos1bytedeinformaçãoparacadavalor,oprogramaquaseinteligívelparaumamáquinaseria:

00001010 00011111 01001101 00010100 00011111 01001101 00011110 00001011 01001110 00101000 00010101 01001110 00110010 00001011 01001110 00111100 00101001 01001110 01000110 01000110 00000000 Masosbitsacimaestãoorganizadosemblocosde8bitsacima, comoo

processadorjásub-entendeisso,oprogramaeletronicamenteviávelseria:0000101000011111010011010001010000011111010011010001

11100000101101001110001010000001010101001110001100100000101101001110001111000010100101001110010001100100011000000000

Essa é a verdadeira “linguagem de máquina”, algo que nós, humanostemosmuitadificuldadeementenderemtermosdoqueocomputadorfazcomessasinstruções,amenosquevocêsejaumengenheiroeletrônicomuitoNERD.

Aslinguagensdeprogramaçãopodemserclassificadasemníveis.Asériedezeroseunsacima,queéaúnicalinguagemqueocomputadorrealmenteentende,está no nível mais baixo. Existem, felizmente, linguagens de níveis mais alto, maisdistantes portanto da “linguagem de máquina” e mais próximas da linguagem

Page 4: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

humana.Aquiloquenóspodemos fazer “manualmente”, que foi a transformaçãodocódigocommnemônicos(assembler)embinário(tabela1)

Tabela 1.Correspondênciade instruçõesemassemblerpara linguagem

demáquina.Códigoassembler Linguagem de máquina 010 INN 77 00001010 00011111 01001101 020 INN 78 00010100 00011111 01001101 030 LDA 77 00011110 00001011 01001110 040 ADD 78 00101000 00010101 01001110 050 STA 78 00110010 00001011 01001110 060 PRN 78 00111100 00101001 01001110 070 STP 00 01000110 01000110 00000000

Essaoperação,emboramuitofácil,émuitomaisqueentedianteesujeita

a erros dificílimos de serem percebidos posteriormente sem uma verificaçãoincrivelmente maçante. Felizmente, essa tarefa é desempenhada por programas,conhecidos como compiladores ou interpretadores assembler, que fazem atransformação automática do programa escrito em assembler para a linguagem demáquina.

Algoritmos

Algoritmos podem ser considerados como conjuntos de procedimentoslogicamenteencadeadosqueservemparaexecutartarefas.Nósemitimoserecebemosordens para realizar tarefas. Por exemplo, uma mãe pode solicitar aos filhos quearrumem as suas camas depois que levantarem. Essa mãe se expressa em umalinguagemdealtonível,pois “arrumaracama” implicaumasériedeprocedimentosmaissimplesquepoderiamserassimdescritos:

1.Comeceaarrumaracama.2.Verifiqueseacamaestáarrumada. Sim:Encerreasuaatividade;comuniqueãsuamãe:“Mãe,terminei!”; Váparaopasso8. Não:Continuenopasso3.3.Verifiqueseoelemento[fronha],[cobertor],[travesseiro],[lençóis]estásujo: Sim:Coloqueoelementosujonosacodelavanderia;pegueumlimpo. Não:Tireoelementodacama;Verifiqueopróximoelemento.4.Oelementoeraoúltimodalista? Sim:Váparaainstrução5. Não:Volteparaainstrução3emudeparaopróximoelemento.5. Coloque adequadamente os elementosna cama [lençol 1], [travesseiro], [fronha],

[lençol2],[cobertor]6.Oelementoeraoúltimodalista? Sim:Váparaainstrução2. Não:Volteparaainstrução5emudeparaopróximoelemento.8.Términodatarefa.

Serefletirmosmaisprofundamente,mesmocadaumadessas instruções

sãoemitidasemumnívelmuitoalto.Aquiloqueseriaequivalente,emlinguagemde

Page 5: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

máquinadecomputador,para instruçõesexecutadaspornósseriaa intensidadeeaduraçãodecadacontraçãodecadaumdosmúsculosdenossocorpo,em funçãodainformaçãocolhidaporcélulastáteis,pressoceptoras,receptorasdaretina,receptorasdesonsdacócleaedeequilíbriodaorelhainterna,etc.

Assim, existe algo em nosso sistema nervoso que faz o papel deinterpretador e/ou compilador mas que não pertence ao domínio de nossaconsciência.

Page 6: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

FluxogramasUmadasmaneirasdefacilitaroentendimentoeaimplementaçãodeum

algoritmo é a confecção de fluxogramas. Os fluxogramas evidenciam a estrutura doalgoritmoconsiderado.Algunssímbolosusadosemfluxogramasestãomostradosnafigura1.

Figura1.Símbolosusadosemfluxogramaseseusignificado

Figura2.Exemplodefluxogramacomoalgoritmo“arrumeacama”.Linguagensinterpretadaselinguagenscompiladas

Os códigos de nível mais alto do que a linguagem de máquina, comovimos,paraseremexecutados,precisamprimeirosertransformadosemzeroseuns.Issopodeserfeitodeduasmaneiras,atravésdeprogramasinterpretadoreseatravés

Page 7: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

deprogramascompiladores.Comoempregodeprogramasinterpretadores,ocódigode alto nível é transformado em linguagem de máquina, linha a linha, durante opróprio processamento. Os compiladores fazem essa transformação antes doprocessamento, tudodeumavez.Avantagemdosprogramas compiladoséque sãoligeiramentemais rápidosenãonecessitamdapresença,namemória,doprogramainterpretador. Os programas compilados, no entanto, são completamenteininteligíveisetornamatarefadeencontrarerrosemtempodeprocessamentomuitomaisdifícil.Brevehistóricodaslinguagensdeprogramação.

Antes que os programas fossem armazenados na memória, oscomputadores eram programados pela modificação na posição de fios queinterconectam os circuitos eletrônicos. Na figura 3, parte de um computador dadécadade1940mostrandoospainéisdemudançadefiação.Assim,umcomputadorquetivesseumadeterminadacombinaçãodefios interligadosserviriaparaexecutarumtipodetarefasomente.

Figura3.PainéisdemudançadefiaçãodocomputadorENIAC(circa1950).Fotografiacortesiadasforçasarmadasnorte-americanas(domíniopúblico). AprimeiralinguagemdenívelmaiorqueoassemblerdeusodisseminadofoialinguagemFORTRAN,elaboradaem1944.Onomeseoriginadacontraçãodossufixosde formula e de translation, algo como “tradutor de fórmulas”. Essa linguagem, emsuasprimeirasversões,admitiaqueosprogramaseramparaserescritosemcartõesperfuradosde80colunas.Asprimeiras6 colunaseramreservadasparanumeraçãodas linhas de código, onde fosse necessário. A sétima coluna era reservada para

Page 8: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

continuação de linhas que precisassem ultrapassar os espaços disponíveis de umúnicocartão.Asinstruçõeseramescritasda8aatéa72acoluna.Oscomentários(quenãosãolevadosemconsideraçãoduranteaexecução),sãoextremamenteúteisparaaspessoasentenderemoqueoprogramaexecutaemcadamomento,sejaporpessoasque não foram os criadores do programa, seja pelo próprio programador, quefacilmentepodeseesquecerdoqueelepretendiacomaquelasinstruçõesapóscertotempo.Oscomentáriosobrigatoriamenteiniciavam-secomaletra“C”(de“comment”)naprimeiracoluna.C AREA DE UM TRIANGULO – FORMULA DE HERON C ENTRADA – LEITOR DE CARTOES UNIDADE 5, NUMEROS INTEIROS C SAIDA – IMPRESSORA UNIDADE 6, REAL SAIDA NUMERO INTEIRO C INPUT ERROR DISPAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING INTEGER A,B,C READ(5,501) A,B,C 501 FORMAT(3I5) IF(A.EQ.0 .OR. B.EQ.0 .OR. C.EQ.0) STOP 1 S = (A + B + C) / 2.0 AREA = SQRT( S * (S - A) * (S - B) * (S - C)) WRITE(6,601) AREA 601 FORMAT(4H AREA= ,F10.2,12HSQUARE UNITS) STOP END

Figura4.ExemplodeumprogramaemFORTRANquecalculaaáreadeumtriânguloapartirdainformaçãodocomprimentodeseuslados.Ovalordecadaumdosladosfoi armazenadonas posições denominadas “A”, “B” e “C”.Note qua nesse programanão há necessidade de se lidar com endereços dememória, o compilador fará essatarefa. O comando “IF” verifica se algum dos lados tem valor zero e interrompe oprograma caso houver. O valor da área fica armazenado na posição da memóriadenominada“AREA”.

Durante as décadas de 1960 e 1970 foram criadas a maioria daslinguagensatéhojeempregadas.Umatarefamuitodifícilésefazercomparaçãoentrelinguagensdecomputação.Háinúmerosfatoresqueinfluenciamaescolha.Umfatormuitoimportanteéoacessoàsprópriaslinguagens.Comoacurvadeaprendizadoémuito lenta, o esforço investido implica uma certa inércia. Além disso, o esforço járealizadopode contarmuito na escolha de uma linguagemde computação. Existemainda membros da academia que se dedicam à linguagem FORTRAN de formabastante ativa, pois existem muitas soluções prontas para problemas científicos,resultado de esforços de cientistas brilhantes que se debruçaram por décadas nasolução de problemas. Embora haja alguns programas que fazem conversão delinguagens de programas, eles apresentam certas limitações e os códigos geradosficammuitasvezesincompreensíveis.Oresultadodeumlevantamentofeitopelositehttp://phylonetworks.blogspot.com.br/2013/12/results-of-some-bioinformatics-polls.htmlsobre linguagens favoritasdebioinformatasestáapresentadona figura5.Esselevantamentopodeajudarnaescolhadeumalinguagem,emborahajatambémapossibilidadequeseaprendaduasoumaislinguagensdeprogramação.

Page 9: Versão 0.4 Capítulo 3 - dreyfus.ib.usp.brdreyfus.ib.usp.br/bio456/cap3.pdf · Símbolos usados em fluxogramas e seu significado Figura 2. Exemplo de fluxograma com o algoritmo “arrume

Figura5.Levantamentodaslinguagensdeprogramaçãofavoritasporbioinformatas.