Você está na página 1de 161

Pedro Kantek

Algoritmos

UP Jul/07, dez/07 Curitiba

vers ao de 23 de janeiro de 2009

88-09, Pedro Kantek

88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

Sum ario
1 Contrato Pedag ogico 2 Ci encia da Computa c ao 2.1 Representa c ao do conhecimento . . . . . 2.2 Algoritmo . . . . . . . . . . . . . . . . . 2.2.1 Qualidades de um bom algoritmo 2.2.2 Como se escreve um algoritmo . 2.3 Portugol . . . . . . . . . . . . . . . . . . 2.4 Programa c ao Estruturada . . . . . . . . 2.5 A m aquina de Turing . . . . . . . . . . 2.6 Linguagens de programa c ao . . . . . . . 2.6.1 Assembler . . . . . . . . . . . . . 2.6.2 Fortran . . . . . . . . . . . . . . 2.6.3 Lisp . . . . . . . . . . . . . . . . 2.6.4 Prolog . . . . . . . . . . . . . . . 2.6.5 Cobol . . . . . . . . . . . . . . . 2.6.6 APL . . . . . . . . . . . . . . . . 2.6.7 Basic . . . . . . . . . . . . . . . . 2.6.8 Clipper . . . . . . . . . . . . . . 2.6.9 Natural . . . . . . . . . . . . . . 2.6.10 Pascal . . . . . . . . . . . . . . . 2.6.11 C . . . . . . . . . . . . . . . . . . 2.6.12 Java . . . . . . . . . . . . . . . . 2.6.13 PHP . . . . . . . . . . . . . . . . 2.6.14 J . . . . . . . . . . . . . . . . . . 2.6.15 Lua . . . . . . . . . . . . . . . . 3 Escrevendo algoritmos 3.1 Nome . . . . . . . . . . . . 3.2 Vari aveis . . . . . . . . . . . 3.2.1 Tipos de vari aveis . 3.2.2 C odigo de caracteres 3.3 Comando de atribui c ao . . 3.4 Express oes . . . . . . . . . . 3.4.1 Aritm eticas . . . . . 3.4.2 Relacionais . . . . . 3.4.3 L ogicas . . . . . . . 5 9 9 13 14 16 16 21 22 24 24 25 26 27 28 29 30 31 32 32 33 34 35 36 36 39 39 41 41 42 45 46 46 51 51

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . . 3

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

SUMARIO 4 Comandos 4.1 Vis ao Top down e Bottom up . . . . . . . . . . . . 4.2 Seq u encia de execu c ao . . . . . . . . . . . . . . . . 4.3 Entrada/Sa da . . . . . . . . . . . . . . . . . . . . 4.3.1 Comando de Entrada . . . . . . . . . . . . 4.3.2 Comando de Sa da . . . . . . . . . . . . . . 4.4 O comando alternativo . . . . . . . . . . . . . . . . 4.4.1 Alternativa simples . . . . . . . . . . . . . . 4.4.2 Alternativa composta . . . . . . . . . . . . 4.4.3 Alternativas aninhadas . . . . . . . . . . . . 4.5 Estruturas de repeti c ao . . . . . . . . . . . . . . . 4.5.1 Repeti c ao com condi c ao no in cio: enquanto 4.5.2 Repeti c ao com vari avel de controle: para . 4.5.3 Repeti c ao com condi c ao no nal: repita . . 4.5.4 Comando de m ultipla escolha: Escolha . . . 4.5.5 Abandono de itera c ao: abandone . . . . . . 57 57 57 58 58 59 59 59 60 60 65 65 66 68 78 79

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

5 Nassi-Schneiderman 87 5.1 Chines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6 Visualg 6.1 Regras de Visualg . . . . . . . . . . . . . . 6.2 Exemplos de Visualg . . . . . . . . . . . . . 6.2.1 Criando uma raiz quadrada . . . . . 6.2.2 Achando ra zes por Newton-Raphson 6.2.3 Depura c ao de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 91 96 98 99 100

7 Modulariza c ao: fun c oes 101 7.1 Fun c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.1.1 Vari aveis globais e locais . . . . . . . . . . . . . . . . . . . . . . . . 102 8 Vetores e Matrizes 8.1 Deni c ao de Vetor . . . . . . . . . . . . 8.1.1 Origem dos ndices . . . . . . . . 8.2 Opera c oes B asicas . . . . . . . . . . . . 8.3 Ordena c ao . . . . . . . . . . . . . . . . . 8.4 Opera c oes fundamentais na Inform atica 8.5 Tabelas . . . . . . . . . . . . . . . . . . 8.6 Merge (intercala c ao) de dois vetores . . 8.7 Pesquisa seq uencial . . . . . . . . . . . . 8.8 Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 . 105 . 106 . 107 . 111 . 112 . 115 . 117 . 119 . 131

9 Registros 139 9.1 Deni c ao de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 9.2 Processamento de Textos . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 9.2.1 Calend arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

Cap tulo 1

Contrato Pedag ogico


Regras da disciplina Uma aula dupla tem 100 minutos, que ser ao em princ pio assim divididos: 10 minutos para os bons dias, 30 minutos de teoria, 30 de apresenta c ao do exerc cio pr atico e mais 30 minutos para os alunos fazerem o seu exerc cio. Cada aluno vai receber um exerc cio individual e u nico. O exerc cio dever a ser devolvido feito at e a data escrita na pr opria folha do exerc cio. Se entregue atrasado pagar a 50% da nota de multa. Em outras palavras, a nota do exerc cio ser a dividida por 2. N ao haver a segunda chamada de exerc cios perdidos. N ao ser ao aceitos xerox, fax ou e-mail de exerc cios. Apenas o exerc cio original que contiver o nome do aluno ser a aceito. Se o aluno quiser (alguns querem), tire c opia xerox do exerc cio para guardar a cole c ao deles. Entretanto, todo exerc cio entregue ao professor ser a corrigido e devolvido ao aluno. A nota bimestral ser a obtida fazendo a m edia aritm etica dos exerc cios do bimestre, com peso de 60% e a prova bimestral, esta com peso 40%. As provas tamb em s ao individuais e diferentes para cada aluno. Bibliograa para Algoritmos SKI97 SKIENA, Steven S. - The Algorithm Design Manual. New York, Springer. 1997. 486p. (Localizador UP: 005.12 S628a) SKI03 SKIENA, Steven S e REVILLA, Miguel A. Programming Challenges. New York, Springer. 2003. 361p. (Localizador UP: 005.1 S628p) FOR05 FORBELLONE, A. L. V. e EBERSPACHER, H. F. - L ogica de Programa c ao. S ao Paulo. 2005. 214p. FAR85 FARRER, Harry et all. Algoritmos estruturados. Rio de Janeiro, Guanabara, 1985. 241p. (Programa c ao estruturada de computadores). FOR72 FORSYTHE, Alexandra I. et all. Ci encia de Computadores - 1. curso. Volume 1. Rio de Janeiro, Ao Livro T ecnico. 1972. 234p. FOR72b FORSYTHE, Alexandra I. et all. Ci encia de Computadores - 1. curso. Volume 2. Rio de Janeiro, Ao Livro T ecnico. 1972. 560p. GUI75 GUIMARAES, Angelo de Moura & LAGES, Newton Alberto de Castilho. Algoritmos e estruturas de dados. Rio de Janeiro, LTC, 1975. 216p. 5

CAP ITULO 1. CONTRATO PEDAGOGICO KNU71 KNUTH, Donald E. The Art of Computer Programming. Volumes 1 e 2. Reading, Massachussets, Addison Wesley Publishing Company, 1971, 624p. SIL90 SILVA PINTO, Wilson. Introdu c ao ao desenvolvimento de algoritmos e estru turas de dados. S ao Paulo, ERICA, 1990, 201p. WIR89 WIRTH, Niklaus. Algoritmos e estruturas de dados. Rio de Janeiro, PrenticeHall do Brasil, 1989, 245p. Kao08 KAO, Ming-Yang. (ed.) Encyclopedia of Algorithms. Springer. 2008. New York. 1200p.

88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

CAP ITULO 1. CONTRATO PEDAGOGICO

O autor, pelo autor

Meu nome e Pedro Luis Kantek Garcia Navarro, conhecido como Kantek, ou Pedro Kantek. Nasci em Curitiba h a mais de 50 anos. Sou portanto brasileiro, curitibano e coxa-branca com muito orgulho, mas sendo lho de espanh ois (meus 7 irm aos nasceram l a), tenho tamb em a nacionalidade espanhola. Aprendi a falar em castellano, o portugu es e portanto meu segundo idioma. Estudei no Col egio Bom Jesus e quando chegou a hora de escolher a pross ao, l a por 1972, fui para a engenharia civil, mas sem muita convic c ao. Durante a copa do mundo de futebol de 1974 na Alemanha, ao folhear a Gazeta do Povo, achei um pequeno an uncio sobre um est agio na area de processamento de dados (os nomes inform atica e computa c ao ainda n ao existiam). L a fui eu para um est agio na CELEPAR, que hoje, mais de 30 anos ap os, ainda n ao acabou. Na CELEPAR j a fui de tudo: programador, analista, suporte a BD (banco de dados), suporte a TP (teleprocessamento), coordenador de auto-servi co, coordenador de atendimento, ... Atualmente estou na area de governo eletr onico. Desde cedo encasquetei que uma boa maneira de me obrigar a continuar estudando a vida toda era virar professor. Comecei essa desaante carreira em 1976, dando aula num lugar chamado UUTT, que n ao existe mais. Passei por FAE, PUC e cheguei ` as Faculdades Positivo em 1988. Sou o decano do curso de inform atica e um dos mais antigos professores da casa. Na d ecada de 80, virei instrutor itinerante de uma empresa chamada CTIS de Bras lia, e dei um monte de cursos por este Brasil afora (Manaus, Recife, Bras lia, Rio, S ao Paulo, Fortaleza, Floripa, ...). Em 90, resolvi voltar a estudar e fui fazer o mestrado em inform atica industrial no CEFET. Ainda peguei a u ltima leva dos professores franceses que iniciaram o curso. Em 93 virei mestre, e a minha disserta c ao foi publicada em livro pela editora Campus (Downsizing de sistemas de Informa c ao. Rio de Janeiro: Campus, 1994. 240p, ISBN:85-7001-926-2). O primeiro cheque dos direitos autorais me manteve um m es em Nova Iorque, estudando ingl es. Ali as, foi o quarto livro de minha carreira de escritor, antes j a havia 3 outros (MS WORD - Guia do Usu ario Brasileiro. Rio de Janeiro: Campus, 1987. 250p, ISBN:85-7001-507-0, Centro de Informa c oes. Rio de Janeiro: Campus, 1985. 103p, ISBN:85-7001-383-3 e APL - Uma linguagem de programa c ao. Curitiba. CELEPAR, 1982. 222p). Depois vieram outros. Terminando o mestrado, rapidamente para n ao perder o f olego, engatei o doutorado em engenharia el etrica. Ele se iniciou em 1994 na UFSC em Florian opolis. S o terminou em 2000, foram 6 anos inesquec veis, at e porque nesse meio tive que aprender o franc es - mais um m es em Paris aprendendo-o. Finalmente virei engenheiro, 25 anos depois de ter iniciado a engenharia civil. Esqueci de dizer que no meio do curso de Civil desist (c a pra n os o assunto era meio chato...) em favor de algo muito mais emocionante: matem atica. Nessa epoca ainda n ao havia cursos superiores de inform atica. Formei-me em matem atica na PUC/Pr em 1981. Em 2003, habilitei-me a avaliador de cursos para o MEC. Para minha surpresa, fui selecionado e virei delegado do INEP (Instituto Nacional de Pesquisas Educacionais) do Governo Brasileiro. De novo, visitei lugares deste Brasilz ao que sequer imaginava existirem (por exemplo, Rondon opolis, Luizi ania, Rio Grande, entre outros), sempre avaliando os cursos na area de inform atica: sistemas de informa c ao, engenharia e ci encia da computa c ao. Atualmente estou licenciado da PUC e na UP respondo por 4 cadeiras: Algoritmos (1. ano de sistemas de informa c ao), Estrutura de Dados (2.ano, idem) e T opicos Avan cados em Sistemas de Informa c ao (4.ano, idem), al em de Intelig encia Articial ( ultimo ano de Engenharia da Computa c ao). J a z um bocado de coisas na vida, mas acho que um dos meus sonhos e um dia ser professor de matem atica para crian cas: tentar despert a-las para este mundo fant astico, do qual lastimavelmente boa parte delas nunca chega sequer perto ao longo de sua vida.
vers ao de 23 de janeiro de 2009

88-09, Pedro Kantek

CAP ITULO 1. CONTRATO PEDAGOGICO

O autor, h a muitos anos, quando ainda tinha abundante cabeleira

88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

Cap tulo 2

Ci encia da Computa c ao
Programas de qualquer tamanho est ao sujeitos a conterem bugs(erros). Alguns deles acabam custando caro. Em 22/jul/62 um foguete foi lan cado com a miss ao de chegar a Venus. Esta foi a primeira tentativa de explorar qualquer planeta. O foguete desviou-se do curso e foi destruido. Investiga c oes posteriores revelaram que o respons avel pelo problema foi um erro de programa c ao dos computadores. Apesar de testes e depura c oes extensas, a omiss ao de um simples h fen num dos comandos de um programa n ao foi detectada. Este erro causou a falha da miss ao inteira a um custo de US$ 18,5 milh oes. Trecho do livro Software Testing Techniquesde Boris Beizer. Se o construtores constru ssem edif cios da mesma forma que os programadores escrevem programas, o primeiro pica-pau poderia destruir a civiliza c ao.
Gerald Weinberg, citado por James Martin, em O manifesto.

Se alguma coisa pode dar errada, dar a errada.

Lei de Murphy

2.1

Representa c ao do conhecimento

Se olharmos a hist oria deste nosso pequeno planeta e abstrairmos a hip otese Teol ogica (j a que cienticamente ela n ao tem comprova c ao) veremos uma hist oria mais ou menos assim: 1. H a uns 3.000.000.000 de anos, surgem os primeiros seres vivos, capazes de entre outras coisas se reproduzirem por c opia de si mesmos. Aparece aqui o DNA ( acido desoxi-ribonucleico) o elemento comunicador da heran ca. Foi o primeiro e at e hoje bem importante local onde se armazenou o conhecimento. 2. Mais tarde, surge o sexo. Ele tem enorme import ancia nesta hist oria ao permitir que os lhos herdem um pouco do DNA do pai e um pouco da m ae, acelerando a evolu c ao. 3. Um bocado de tempo depois, surgem os animais superiores e nestes o c erebro passa a ser respons avel pelo local onde o conhecimento e produzido e armazenado. Denomina-se esta fase ` a do conhecimento extragen etico. 4. Enquanto limitado ao conhecimento localmente produzido, o c erebro pode armazenar pouco. O pr oximo est agio de amplia c ao e quando surge a fala. Agora o conte udo de um c erebro pode ser repassado a outro, com resultados melhores e crescentes. O nome e conhecimento extrassom atico 9

CAP ITULO 2. CIENCIA DA COMPUTAC AO 5. Com a fala, os dois sujeitos tem que estar t ete-` a-t ete. A seguir, surge a escrita. Agora a comunica c ao e poss vel na modalidade um-muitos (Antes era um-um) e mesmo um c erebro morto pode se comunicar pela escrita. 6. Enquanto a escrita e manuscrita, est a naturalmente limitada. A pr oxima novidade e a imprensa que ao automatizar a produ c ao de textos, amplia signicativamente o acesso e a dissemina c ao de informa c oes. 7. Finalmente, o u ltimo est agio da amplia c ao do conhecimento reside no software. Hoje, 23 milh oes de brasileiros sabem declarar seu IR, sem precisar fazer um exaustivo aprendizado sobre as regras da declara c ao, gra cas a um... software. O nome e intelig encia extrassom atica. Durante o s eculo XX a maior ind ustria foi a do petr oleo. Depois, a do autom ovel e nalmente no nal do s eculo, a ind ustria de computadores passou a ser a maior. A tend encia para o futuro e de que ela suplante todas as demais. Hoje o homem mais rico do mundo construiu a sua fortuna vendendo um software. O computador nasce na cabe ca de um cientista ingl es (Alan Matheson Turing em 1937) e e constru do para a guerra pelos ingleses em 1942. A seq u encia de escopo do computador e guerra a id eia aqui e usar o computador como otimizador dos recursos b elicos, criptograa, pesquisa operacional, tabelas bal sticas... aritm etica o computador se transforma em super-calculadora. A matem atica passa a ser a linguagem da inform atica, por excel encia. O FORTRAN e dessa epoca... neg ocios em plena sociedade capitalista, os neg ocios passam a ser otimizados pelo computador. Dessa epoca e o COBOL a linguagem representante... aldeia global Neg ocios, governos, universidades e organiza c oes sociais passam a compartilhar o ciberespa co. Surge e se robustece a Internet... lazer o computador vira um eletrodom estico. As casas de classe m edia passam a contar com um (ou mais de um) computador. Jogos, m usica, lmes, e-mule, mp3, ... ... realidade virtual N ao se sabe direito o que vir a por aqui. As t ecnicas de simula c ao levadas ao paroxismo permitir ao criar realidades virtuais, com toda a contradi c ao exposta no t tulo. Talvez retornemos ` a d uvida de Plat ao (o universo existe ou e apenas uma sensa c ao que eu tenho? ). O computador se diferencia de qualquer outra m aquina pela sua generalidade. No texto original de Turing isto ca claro pela conceitua c ao de uma m aquina universal. Assim, diferentemente de um liquidicador (que s o serve para picar comida e tem apenas um bot ao de liga-desliga), um computador precisa antes de qualquer coisa ser programado para fazer algo. De fato, se comprar um computador vazio e lig a-lo, ele n ao vai fazer nada. Tecnicamente, chama-se a parte f sica do computador de hardware signicando ferragem, duro (hard), componente f sico, etc. J a a programa c ao recebe o nome de software signicando mole (soft em oposi c ao a hard), componente l ogico, n ao f sico, programa de computador. A fabrica c ao de hardware e engenharia. Sua produ c ao pode ser planejada e otimizada e isso de fato e feito. A fabrica c ao de software, a despeito de ser chamada de engenharia, c a entre n os, n ao o e muito. Est a mais para arte do que para engenharia.
88-09, Pedro Kantek

10

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO Talvez, como seres humanos, devamos dar gra cas aos c eus por esta situa c ao. Pois enquanto a produ c ao de hardware e (ou pode ser) em grande parte robotizada, a produ c ao de software ainda exige um bom c erebro cinzento por tr as. As restri c oes que ainda existem sobre o software e que talvez nunca deixem de existir, impedem a programa c ao dos computadores em linguagem natural. Hoje ainda n ao e poss vel dialogar com um computador como se fala com uma pessoa medianamente inteligente. Os computadores ainda n ao conseguem tal proeza. Para programar um computador necessitamos uma linguagem. O hardware s o entende uma linguagem de pulsos el etricos (chamada de linguagem de m aquina). Para facilitar a nossa vida (j a que e muito dicil para o homem programar nela), criaram-se programas tradutores que recebem comandos e dados em uma linguagem articial e a convertem em linguagem de m aquina. A maioria desses tradutores recebeu o mesmo nome da linguagem que eles traduzem. Assim, temos o Java, o Cobol, Pascal, Apl, Clipper, Dbase, Basic, Natural, Fortran, C, Php, Lisp, Prolog, Modula, entre outras. Veja no s tio www.tiobe.com o ndice TPC que mensalmente lista as 100 linguagens mais usadas no mundo. Quando os primeiros computadores foram construidos, a u nica linguagem por eles entendida era a bin aria. Seq u encias intermin aveis de uns e zeros, algo assim como 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 1 0 0 0 1 0 1 0 1. Era um aut entico samba do crioulo doido. Chamou-se a isto, mais tarde, linguagem de primeira gera c ao. A seguir, o primeiro melhoramento: o assembler (ou montador), programa que era capaz de entender instru c oes escritas em uma linguagem um pouco mais humana, e traduzir cada uma destas instru c oes em sua express ao bin aria equivalente. Junto com este programa criou-se a primeira linguagem digna deste nome: o assembler, at e hoje usado, se bem que muito raramente. Programar em assembler ainda exige muito talento e paci encia. A m aquina precisa ser conhecida em in umeros detalhes de constru c ao, os programas s ao longos e dif ceis (principalmente sua manuten c ao). Entretanto esta e a linguagem mais eciente do ponto de vista dos consumo dos recursos da m aquina, isto e, ela gera programas velozes e pequenos. Depois, vieram as linguagens de terceira gera c ao: a primeira foi o FORTRAN, depois COBOL, PL/I, PASCAL, C, C++, Java, LISP, Prolog e outras menos votadas: BASIC, ADA, APL. H a um distanciamento do programador em rela c ao ` a m aquina, e uma aproxima c ao do mesmo em rela c ao ao problema a resolver. Estas linguagens s ao mais f aceis de aprender e embora gerem programas maiores e mais lentos, aumentam em muito a produtividade humana de escrever c odigo de programa c ao. Um exemplo diferente para mostrar todos estes conceitos de linguagens poderia ser o seguinte: Suponha um engenheiro brasileiro, que s o conhece o idioma portugu es. Ele precisa transmitir certas ordens de fabrica c ao para um colega sovi etico, que s o conhece o idioma russo, com escrita cir lica. Os dois podem tentar conversar quanto quiserem, necess mas provavelmente n ao haver nenhum resultado pr atico u til. E aria a presen ca de um tradutor, algu em que ouvindo o portugu es consiga transformar as ordens em suas equivalentes russas. Finalmente, o engenheiro brasileiro ver a se as ordens foram corretamente traduzidas e executadas analisando o resultado nal do trabalho. Neste exemplo, o engenheiro brasileiro e o programador. O colega sovi etico e a m aquina (que ao inv es de russo, s o entende a linguagem el etrica). O tradutor e a linguagem de programa c ao. Podemos ainda estabelecer dois n veis para linguagens de programa c ao: baixo e alto. Linguagem de baixo n vel e aquela que requer a especica c ao completa do problema nos seus m nimos detalhes. No nosso exemplo, equivaleria ao engenheiro brasileiro descrevendo tin-tin por tin-tin todos os passos para montar uma engenhoca qualquer. J a as linguagens de alto n vel, pressup oe uma tradu c ao inteligente, o que libera o engevers ao de 23 de janeiro de 2009

11

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO nheiro brasileiro de informar todas as etapas. Ele diz o que deve ser feito, sem precisar estabelecer como isto vai ser realizado. Todas as linguagens compartilham uma estrutura parecida, j a que rodam todas no mesmo computador que e constru do usando a chamada Arquitetura de Von Neumann. Bem resumido, essa arquitetura prev e a exist encia da mem oria, de uma unidade aritm etico l ogica, canais e o elemento ativo: a unidade de controle. Essa estrutura comporta os seguintes tipos de comandos (ordens): entrada-sa da de dados, aritm etica, movimenta ca o em mem oria, condicional e desvio. Com apenas essas 5 ordens, s ao constru dos todos os programas que existem ou que existir ao em nosso mundo usando este tipo de computador. Uma pergunta que se pode fazer aqui, e se e melhor aprender tudo de uma linguagem e se tornar um especialista nela, ou se e melhor conhecer v arias, ainda que n ao chegando a muita profundidade em nenhuma. N ao h a resposta f acil, mas apostar todas as suas chas em uma u nica pode ser perigoso. A tecnologia tem substitu do a linguagem da vez mais ou menos a cada 8, 10 anos. Pior, ao se xar em uma linguagem, corre-se o risco de misturar quest oes do problema (do algoritmo) com quest oes do programa (da linguagem). Como na vida real, parece ser melhor buscar ser poliglota, ainda que obviamente haja uma linguagem preferida. Neste caso, todo o esfor co deve ser no n ucleo mais ou menos comum a todas as linguagens e deixar em segundo plano o aprendizado das idiossincrasias de cada uma.

Exerc cio 1 Lembrando que existe muita semelhan ca entre seguir um programa de computador e uma receita culin aria, prepare um uxograma da seguinte receita: Bolo de nozes da Dona Filustreca Ingredientes: 250g de chocolate em p o, 250g de passas, 3 x caras de a cucar, meia x cara de leite condensado, meia x cara de oleo, 1 colher de ch a de baunilha, 250g de manteiga e 1 colher de ch a de sal. Modo de fazer: ponha o leite, o oleo, o a cucar, o chocolate e o sal em uma panela e leve ao fogo, mexendo at e a fervura. Reduza o fogo e continue a fervura at e o ponto de caramelo. Retire do fogo e deixe esfriar por 10 min. Em seguida, bata com a manteiga e a baunilha at e a mistura car homog enea. Distribua as passas no fundo de uma forma grande untada de manteiga. Derrame a massa sobre as passas. Deixe esfriar por 10 minutos, corte em peda cos e o bolo est a pronto para ser comido. Exerc cio 2 Seja agora um exemplo num erico. Eis aqui a seq u encia de Fibonacci
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Escreva um procedimento que informe a soma dos primeiros 1000 n umeros da seq u encia de Fibonacci. Fica claro por estes dois exemplos, que programar um computador e emprestar intelig encia ao computador. Ou seja, para programar a solu c ao de um problema, h a que saber resolver esse problema. E, n ao apenas resolver em tese, mas descrever detalhadamente todas as etapas da solu c ao. De fato, a programa c ao e detalhista ao extremo. Como se disse acima, o computador surge em 1937, descrito em um artigo denominado on a computable numbers. Este artigo era t ao in edito que quase n ao e publicado: faltavam revisores que o atestassem. O conceito matem atico de computador est a l a, quase 10 anos de existir algo f sico que lembrasse o conceito.
88-09, Pedro Kantek

12

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO Ao mesmo tempo, o ex ercito nazista alem ao come ca a usar um esquema criptogr aco muito inteligente atrav es de uma m aquina denominada ENIGMA, a qual, tinham eles certeza, era inexpugn avel. Mal sabiam que do outro lado do canal da Mancha estava Turing. Ele criou um computador, batizado COLOSSUS, que quebrava o c odigo ENIGMA em poucas horas. Foi o primeiro computador constru do pelo homem. O ENIAC de que os americanos se gabam tanto, veio depois. No meio da guerra, Turing foi enviado aos Estados Unidos e l a teve contacto com Von Neumann. Este e o autor da assim chamada arquitetura de Von Neumann, que ea que usamos at e hoje em qualquer computador.

2.2

Algoritmo
Algorithms are the most important, durable, and original part of computer science because they can be studied in a language and machine independent way. This means that we need techniques that enable us to compare algorithms without implementing them. Skiena, Steven - The Algorithm Design Manual.

Segundo mestre Aur elio, algoritmo e Processo de c alculo, ou de resolu c ao de um grupo de problemas semelhantes, em que se estipula, com generalidade e sem restri c oes, regras formais para a obten c ao do resultado ou da solu c ao do problema. a coisa Algoritmo e a id eia que est a por tr as de um programa de computador. E que permanece igual ainda que esteja em um programa Java para rodar num PC em Curitiba, ou esteja em um programa PASCAL rodando em um Cray em Valladolid na Espanha. Do ponto de vista da inform atica, algoritmo e a regra de solu c ao de um problema, isto e, surgida uma necessidade buscar-se- a uma solu c ao, ou construir-se- a um algoritmo capaz de solucionar o problema. J a um programa de computador, (segundo Wirth) e uma formula c ao concreta de algoritmos abstratos, baseados em representa c oes e estruturas espec cas de dadose devidamente traduzido em uma linguagem de programa c ao. Outra deni c ao de algoritmo, esta dos autores Angelo Guimar aes e Newton Lages: Algoritmo e a descri c ao de um padr ao de comportamento, expressado em termos de um repert orio bem denido e nito de a c oes primitivas, das quais damos por certo que elas podem ser executadas. Para encerrar, e tomando alguma liberdade, podemos considerar um algoritmo como sendo uma receita de bolo. O conceito de algoritmo deve ser entendido, para sua correta compreens ao, em seus dois aspectos, a quem chamaremos est atico e temporal. Na sua vis ao est atica, um algoritmo e um conjunto de ordens, condi c oes, testes e verica c oes. No seu aspecto temporal, o algoritmo passa a ser algo vivo, pois atua sobre um conjunto de dados de entrada, para gerar os correspondentes dados de sa da. Tais caracter sticas n ao podem ser separadas, elas est ao instrinsicamente ligadas. A diculdade em fazer bons algoritmos, e ter em mente, enquanto se escreve o algoritmo (aspecto est atico) o que ele vai fazer com seus dados (aspecto temporal). Vamos exemplicar esta discuss ao, comentando sobre o algoritmo de solu c ao de uma equa c ao do segundo grau. Dada a equa c ao Ax2 + Bx + C = 0, para encontrar as duas raizes, segundo a inesquec vel f ormula de Bhaskara, procedemos da seguinte forma:
Calculamos DELTA, que e B ao quadrado, menos o produto de 4,A e C. Se DELTA < 0, as raizes n ao existem no campo dos n umeros reais
vers ao de 23 de janeiro de 2009

13

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO


Se DELTA = 0, as raizes s ao iguais A primeira raiz e (-B) + DELT A dividido por 2A A segunda raiz e (-B) - DELT A dividido por 2A.

No seu aspecto din amico, ter amos que gerar uma s erie de dados de entrada (triplas A,B,C), seguir o algoritmo, e vericar se os resultados que ele gera s ao aqueles esperados de antem ao.

Dado um problema, para o qual temos que escrever um algoritmo, usualmente n ao h a solu c ao u nica. Quanto mais complexo o problema a resolver, maior a quantidade de poss veis algoritmos corretos. Cada um certamente ter a as suas qualidades e os seus defeitos. Alguns s ao muito bons, e outros muito ruins, mas entre um e outro existem in umeras varia c oes, que nem sempre s ao facilmente reconhecidas. Pode-se dizer que um algoritmo e um programa de computador do qual se faz a abstra ca o da linguagem de programa c ao. Neste sentido o algoritmo independe de qual ser a sua implementa c ao posterior. Quando pensamos em algoritmos, n ao nos preocupamos com a linguagem. Estamos querendo resolver o aspecto conte udo. Mais tarde, quando programarmos, a linguagem passa a ser importante, e agora a preocupa c ao e com a forma.

2.2.1

Qualidades de um bom algoritmo

Se um programa e f acil de ler, ele e provavelmente um bom programa; se ele e dif cil de ler, provavelmente ele n ao e bom.(Kernighan e Plauger) Clareza O algoritmo e uma ferramenta de entendimento e solu c ao de um problema. Deve portanto, ser o mais claro poss vel. Ao fazer o algoritmo seu autor deve se preocupar constantemente em se o que est a pensando est a vis vel no que est a escrevendo. Nunca sacricar clareza por eci encia; nunca sacricar clareza pela oportunidade de revelar sua intelig encia.Jean Paul Tremblay. Impessoalidade Nem sempre quem vai examinar, depurar, corrigir, alterar etc , um algoritmo e seu autor. Portanto, nada de usar macetes, regras pessoais, nomes que s o tem sentido para o autor etc. Neste ponto e de muita ajuda a exist encia de um bem organizado conjunto de normas de codica c ao e de elabora c ao de algoritmos para a organiza c ao. As melhores e mais bem organizadas empresas de inform atica dedicam parcela signicativa de seus esfor cos a esta atividade. Simplicidade Poucos programadores resistem ` a tenta c ao de elaborar uma genial sa da para um problema. Nada contra isso, desde que essa sa da n ao ra os princ pios de simplicidade que todo algoritmo deve procurar satisfazer. Nem sempre e f acil fazer algoritmos descomplicados, principalmente porque em geral os problemas que enfrentamos n ao s ao simples. Transformar algo complicado em solu c oes singelas, parece ser a diferen ca entre programadores comuns e grandes programadores. Reaproveitamento Existe in umera bibliograa sobre algoritmos. Grandes instala c oes de inform atica costumam criar o conceito de biblioteca de algoritmos. Muitos softwares tamb em est ao partindo para esta sa da. O programador n ao deve se esquecer nunca de que um algoritmo novo, custa muito caro para ser feito, e custa muito mais caro ainda para ser depurado. Se j a existir um pronto e testado, tanto melhor.
88-09, Pedro Kantek

14

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO Capricho Tenha sempre em mente que a principal fun c ao de um algoritmo e transmitir a solu c ao de um problema a outrem. Desta maneira, um m nimo de capricho e indispens avel a m de n ao assustar o leitor. Letra clara, identa c ao correta, nomes bem atribu dos, tudo isto em papel limpo e sem borr oes. Como o leitor j a pode estar imaginando, esta caracter stica e fundamental em provas, avalia c oes e trabalhos. A primeira conseq u encia pr atica desta regra e: fa ca seus algoritmos a l apis. Documenta c ao Nem sempre o texto que descreve o algoritmo e muito claro. Al em do que, ele informa o que e feito, mas n ao porque e feito, ou quando e feito. Assim, o programador pode e deve lan car m ao de coment arios sempre que sentir necessidade de claricar um ponto. Bons coment arios n ao podem melhorar uma m a codica c ao, mas maus coment arios podem comprometer seriamente uma boa codica c ao. Jean Paul Tremblay. Corre c ao (ou integridade ou ainda robustez) Um algor tmo ntegro e aquele onde os c alculos est ao satisfatoriamente colocados, e atuam corretamente para todos os dados poss veis de entrada. N ao adianta um algoritmo sosticado e cheio de estruturas de controle, se suas opera c oes aritm eticas elementares n ao estiverem mais comum (e perigoso) o algoritmo que funciona em 95% dos casos, corretas. E mas falha em 5% deles. Eci encia Esta caracter stica tem a ver com economia de processamento, de mem oria, de comandos, de vari aveis etc. Infelizmente, quase sempre e uma caracter stica oposta ` a da clareza e da simplicidade, sendo estas mais importantes do que a eci encia. Entretanto, em alguns casos, (principalmente na programa c ao real - dentro das empresas), a eci encia pode ser fundamental. Neste caso, perde-se facilidade, para se ter economia. O bom programador e aquele que alia a simplicidade ao m aximo de eci encia poss vel. Generalidade Dentro do poss vel, um algoritmo deve ser o mais gen erico que puder. Isto signica que vale a pena um esfor co no sentido de deixar nossos algoritmos capazes de resolver n ao apenas o problema proposto, mas toda a classe de problemas semelhantes que aparecerem. Usualmente o esfor co gasto para deixar um algoritmo gen erico e pequeno em rela c ao aos benef cios que se obt em desta preocupa c ao. Modularidade Algoritmos grandes dicilmente cam bons se usarmos uma abordagem praticamente imposs linear. E vel garantir clareza, impessoalidade, documenta c ao etc, quando se resolve um algoritmo de cima a baixo. Uma conveniente divis ao em m odulos (isto e, em sub-algoritmos), para que cada um possa ser resolvido a seu tempo. N ao podemos esquecer que a regra aurea da programa c ao estruturada e dividir para conquistar. Coment arios Permitem a agrega c ao de informa c oes destinadas ao leitor humano do algoritmo. Seu conte udo n ao e levado em considera c ao na an alise da integridade e corre c ao do algoritmo. Tem nalidade apenas explicativa e informativa. Mas isso n ao signica que eles sejam desprez veis. Pelo contr ario, coment arios s ao importantes em algoritmos de um modo geral. Os coment arios s ao delimitados por um abre-chave({) e um fecha-chave(}). Eles podem ser colocados em qualquer ponto do algoritmo e tudo o que estiver entre chaves e desconsiderado no momento de seguir o algoritmo. Exemplo {Isto e um coment ario}
vers ao de 23 de janeiro de 2009

15

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO H a dois tipos de coment arios aqui: aqueles encerrados entre chaves e aqueles colocados depois de uma dupla barra. {Isto e um coment ario, que s o ser a encerrado quando se encontrar o fecha chave, ainda que ele ocupe mais de uma linha } // isto tamb em e um coment ario, desde a dupla barra at e o fim da linha

2.2.2

Como se escreve um algoritmo

A quest ao agora e: como se escreve um algoritmo? Usando uma ferramenta adequada para comunicar algum tipo de computa c ao que o algoritmo execute. Qualquer linguagem poderia ser adequada, mas e melhor inventar uma sublinguagem derivada do portugu es (ou do ingl es em livros nesse idioma) que ajude a treinar o pensamento criativo em algoritmos. A id eia e que a ferramenta ajude a fazer a tarefa. Por analogia, experimente aparafusar algo pequeno usando um p e de cabra. O nome da sublinguagem que usaremos e portugu es estruturado, tamb em conhecida como portugol.

2.3

Portugol

Figura 2.1: Qual a melhor linguagem ?

Figura 2.2: Como se entender com ele ? Como vimos, portugu es estruturado e uma linguagem inventada aqui para simplicar a tarefa de aprender a construir, depurar e documentar algoritmos estruturados. Existem importante salientar que a in umeras vers oes, cada professor de l ogica tem a sua. E
88-09, Pedro Kantek

16

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO s ntaxe e a constru ca o de portugu es estruturado s ao arbitrados por algu em, segundo seus crit erios, mas uma vez estabelecido um padr ao, pele precisa ser seguido. Esta restri c ao tem duas vertentes. A primeira, e que h a que haver um m nimo de concord ancia para que outras pessoas possam ler e entender o que escrevemos. A segunda, e que uma das principais caracter sticas do bom programador e a disciplina intelectual. Nada mais apropriado que come carmos a exercitar esta dif cil qualidade desde j a. ? Portugu Por que PORTUGOL e n ao PORTUGUES es (como qualquer idioma natural) tem in umeras desvantagens:
N ao e entendido pela m aquina (exige tradu c ao complex ssima)

amb E guo muito extenso E Vejamos por exemplo, uma orienta c ao extra da do manual de organiza c ao de uma Empresa. O funcion ario far a jus ao PREMIO PRODUTIVIDADE se estiver trabalhando h a mais de 6 meses da epoca de distribui c ao (fevereiro de cada ano), e trabalhar na area de vendas, ou ent ao se tiver sido especialmente citado como tendo tido alta produtividade. Perdem o direito, funcion arios que tiverem mais de 2 faltas e mais de 5 atrasos, ou que tiverem fruido licen ca sa ude do INSS no per odo aquisitivo. Parece claro, n ao e ? Agora tentemos responder:
Jo ao tem 3 meses de casa e foi citado como de alta produtividade. Ganha ou n ao? Maria teve 3 faltas. Perde ou n ao ?

Outro exemplo, minha tia tem uma gatinha e ela e muito bonita. Quem e bonita, a tia ou a gatinha ? O linguajar acima, n ao e adequado para expressarmos algoritmos pois e inexato, d ubio, e deixa muita margem de interpreta c ao, usa verbos e comandos proibidos, isto e, que o computador n ao saber a executar. Devemos lembrar sempre que a margem de interpreta c ao do computador, qualquer computador, e sempre ZERO, e os computadores tem a p essima mania de fazer o que mandamos eles fazerem, e n ao o que queremos que eles fa cam. Por que PORTUGOL e n ao uma linguagem qualquer como Java? ou qualquer outra linguagem de programa c ao? Uma linguagem de programa c ao, ainda que de alto n vel, caso do Java, exige um conhecimento da m aquina que ainda n ao temos. Tamb em e importante salientar que idealmente falando, n ao e boa pol tica enfrentar dois problemas interligados ao mesmo tempo. Isto e, n ao conv em misturar diculdades de l ogica, (advindas do problema que se quer resolver) com diculdades da linguagem (advindas do ambiente tecnol ogico onde o programa vai rodar), pois ambas somadas podem ser demais para a cabe ca do autor. J a dizia Dijkstra deve-se reconhecer que tem-se uma cabe ca pequena, e que e melhor tratar de conviver com ela e respeitar suas limita c oes. Aproveitando a cita c ao, mais de uma do mesmo autor: A regra aurea da programa c ao estruturada e dividir para reinar.
vers ao de 23 de janeiro de 2009

17

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO Os programas em PORTUGOL v ao deixar de lado in umeras chatea c oes, (que s ao imprescind veis para o programa rodar em um computador real) tais como: instru c oes de ambienta c ao na compila c ao de programas, descri c oes de opera c oes de entrada/sa da complexas, pouca ou nenhuma prepara c ao de controles etc. claro, que anexo a esta disciplina, existe outra de laborat E orio de programa c ao, onde vai se aprender o Java. Nessa hora, os algoritmos j a devem estar consolidados, e a preocupa c ao passa a ser a m aquina e seu ambiente. Na nossa cadeira de algoritmos, devemos esquecer a m aquina e nos concentramos no problema e na sua solu c ao. Portugu es estruturado Cada autor tem a sua vis ao do que seja o ideal em termos de linguagem de especica c ao de algoritmos. Veja, por exemplo, o quadro

O que um computador entende Baseado na arquitetura de Von Neumann, (um processador, uma unidade de controle, uma ULA, mem oria e registradores), todo computador constru do neste paradigma e capaz de obedecer, l a no n vel mais baixo, a um pequeno conjunto de ordens. Note-se como ele e restrito. Entrada/Sa da Este tipo de ordem, e para orientar o computador no sentido de adquirir um dado externo (entrada), ou para divulgar alguma coisa que ele calculou (sa da). Aritm etica Estas ordens s ao similares aquelas que aprendemos no primeiro grau, e destinam-se a informar ao computador como ele deve efetuar algum c alculo. Estas ordens s ao: adi c ao, subtra c ao, multiplica c ao, divis ao, potencia c ao, fun c oes trigonom etricas etc. N ao se esque ca que a linguagem universal dos computadores ea
88-09, Pedro Kantek

18

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO matem atica. Escrever um programa de computador correto e como demonstrar um teorema. talvez a ordem mais importante no universo da computa ela que Alternativa E c ao. E d a ao computador condi c oes de ser inteligente e decidir qual de dois caminhos deve se seguido. Sempre tem a forma de uma pergunta, seguida por duas ordens distintas. Se a pergunta for respondida armativamente, a primeira ordem ser a executada, e se a pergunta for negada, a segunda ordem ser a executada. Desvio Esta ordem e para dar ao computador habilidade de saltar algumas ordens e executar outras. Um programa de computador nem sempre e obrigado a seguir as instru c oes seq uencialmente come cando no come co e terminando no m. O desvio e potencialmente perigoso quando usado sem crit erio, e por isso veremos em seguida que uma das regras da programa c ao estruturada e o estabelecimento de r gidos controles sobre os desvios. Movimenta c ao na mem oria Embora pare ca estranho, esta e ordem mais comum em um programa. Considerando o tamanho das mem orias de computador e a quantidade de coisas que s ao l a colocadas, e imprescind vel que os programas tenham a habilidade de manusear todas estas coisas. Fazendo uma gura de linguagem, suponha que a mem oria do computador e um grande supermercado. Se os artigos n ao puderem se mexer de lugar, bem poucas coisas acontecer ao. Outra observa c ao, e que o verbo mover, quando usado em manipula c oes dentro da mem oria e usado por raz oes hist oricas, e certamente cont em um equ voco. O correto seria usar o verbo copiar, j a que quando um conte udo e levado de um lado a outro, sua inst ancia anterior n ao desaparece. Usa-se aqui uma regra jocosa, mas que sempre e verdadeira. computador n ao usa apagador. ciclo de vida Qual a hist oria de vida de um programa de computador ? Isto e como nasce, cresce e morre um programa ? Grosso modo, pode se dizer que as principais etapas s ao:
estudo do problema: Espera-se que haja algum problema ou diculdade esperando pr ser resolvido pelo programa de computador. E e-requisito antes de tentar a solu c ao de qualquer quest ao, estud a-la, compreender o entorno, as limita c oes, os balizadores, os recursos dispon veis. Uma boa maneira de estudar e compreender um problema e fazer hip oteses, estudar comportamentos, projetar simula c oes. S o se pode passar adiante se boa parte do entorno do problema for entendida. Note-se que nem sempre e poss vel aguardar at e ter 100% do conhecimento antes de seguir ` vezes n adiante. As ao d a tempo, mas o percal co principal nem e esse: e que muitas vezes o conhecimento n ao existe e s o vai aparecer quando se cutucar o problema. Como se diz em espanhol los caminos se hacen al caminar. Quando isto ocorrer, e ocorre muitas vezes, n ao tem jeito: anda-se para frente e para tr as, e a cada passada o conhecimento e maior. bolar ou procurar o algoritmo. Agora e hora de converter a solu c ao encontrada em algo pr oximo a um algoritmo. Isto e, algo formal, com condi c oes iniciais, resultado nal, e manipula c oes entre o que entra e o que sai. Usam-se os comandos permitidos em algoritmos e s o estes. Usualmente, h a aqui o que se chama de aprofundamento interativo. Come ca-se com uma declara c ao gen erica que vai sendo detalhada e especicada at e chegar ao n vel b asico, no qual os comandos algor tmicos (entrada/sa da, aritm eticos, alternativos, movimenta c ao e de repeti c ao) podem ser usados. Note que pode-se copiar ou aproveitar um algoritmo j a
vers ao de 23 de janeiro de 2009

19

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO existente. Entretanto este re-uso dicilmente e imediato. Sempre h a que estudar e eventualmente modicar um algoritmo j a existente, a menos que quando este foi feito seu autor j a tinha a preocupa c ao com o reuso. hora de escolher um computador, um ambiente operacional transcrever em LP. E e sobretudo uma linguagem de programa c ao que esteja dispon vel e seja conhecida. Dessas 3 op c oes (computador, ambiente e linguagem) surge a plataforma denitiva: agora e poss vel escrever, testar, depurar e implementar o programa de computador.
depurar. Usualmente h a uma seq u encia de testes:

compila c ao correta: nenhum erro apresentado pelo compilador testes imediatos sem erro: testes ad hoc para este programa (e s o para ele) d ao os resultados esperados. teste alfa: um esfor co completo de testes, inclusive integrando este programa aos seus antecessores e sucessores. Usualmente o teste e feito pelo(s) autor(es) do programa. teste beta: um teste completo feito por terceiros. H a uma regra aqui de que quem faz (programador) n ao deve ser quem testa (testador).
implementar e rodar. Com o programa testado e liberado e hora de rod a-lo em produ c ao. Nesta hora ocorre o que tem sido chamado de deploy (dizem as m as l nguas que sempre associado a seu irm ao g emeo, o delay ). Dependendo do porte da instala c ao e do sistema, ` as vezes esta passagem e complexa e trabalhosa. manuten c ao. Seria muito bom se a hist oria acabasse na etapa anterior. N ao eo que ocorre, j a que o mundo muda e os programas precisam mudar com ele. Se a manuten c ao e pequena, usualmente pode-se faz e-la sem muito transtorno, mas caso n ao seja, este ciclo recome ca. Note-se que ap os algumas manuten c oes grandes o programa come ca a dar mostrar de instabilidade a popular colcha de retalhos e e hora de come car tudo de novo, na nova vers ao do programa.

Como se aprende algoritmos? N ao e f acil aprender algoritmos. No que t em de engenharia, e mais f acil. H a f ormulas, procedimentos, pr aticas consagradas prontas a serem usadas. Mas, no que s ao arte, tais mais ou menos como tentar ensinar algu receitas desaparecem. E em a desenhar (outra arte) ou a compor m usica (outra ainda). Olhando como se aprende a desenhar, e poss vel ter alguns insights. Aprendizes de desenho copiam desenhos e partes de desenho extensivamente. Pode-se tentar algo parecido aqui. Em resumo, estas seriam as indica c oes
Estudando algoritmos prontos. Pegue bons livros de algoritmos, e estude as implementa c oes que l a aparecem. Transcreva tais algoritmos em um simulador (tipo visualg) ou mesmo em uma linguagem de programa c ao. Execute os algoritmos. Busque entender o que cada parte do mesmo faz. Sugira hip oteses sobre o funcionamento e provoque pequenas mudan cas no c odigo para conrmar (ou rejeitar) suas hip oteses. Tenha intimidade com algum ambiente de compila c ao e testes. Esta proposta e importante para poder testar algoritmos. Se car embatucado diante de uma simples implementa c ao, voc e ter a grandes diculdades de escrever algoritmos.
88-09, Pedro Kantek

20

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO


Escreva pequenos algoritmos. Tente fazer os exerc cios (come cando sempre pelos mais simples) de qualquer bom livro de algoritmos. Treine a interpreta c ao dos enunciados. Enquanto n ao entender o que deve ser feito, n ao adianta olhar para o algoritmo, pois o motivador das a c oes que ele toma estar a ausente. Nunca se deve come car a estudar ou a construir um algoritmo se n ao houver um claro entendimento do que o algoritmo deve fazer.

2.4

Programa c ao Estruturada

O termo programa c ao estruturada veio ` a luz pela primeira vez, nos ns da d ecada de 60, quando Edsger Dijkstra (L e-se como Dikster ) escreveu um artigo, publicado em Communications of the ACM, cujo t tulo e O comando GO TO e prejudicial. Viv amos a epoca de ouro do COBOL, e o comando GO TO e a instru c ao de desvio desta linguagem. Dijkstra observou que a qualidade dos programadores decai em fun c ao do n umero de GO TOs usados em seus programas. Segundo ele, Comandos GO TO tendem a criar caminhos de l ogica confusos e programas pouco claros. A sua recomenda c ao foi de que o comando em quest ao fosse banido das linguagens de alto n vel. Nessa epoca tamb em (1966) dois professores italianos, Giuseppi Jacopini e Corrado Bohm, provaram matematicamente que qualquer l ogica de programa c ao poderia ser derivada de tr es tipos b asicos de procedimentos, a saber: seq u encia, alternativa e repeti c ao. Chegou-se ent ao ao amago da programa c ao estruturada, que e trocar a instru c ao de desvio pelas instru c oes de repeti c ao. Ao fazer isto, todos os componentes de um programa passam a ter uma entrada e sa da u nicas. Atente-se que ao usar uma instru c ao de desvio, essa regra de uma entrada e uma sa da e violada: o conjunto passa a ter no m nimo duas sa das. Sequ encia simples Trata-se de um conjunto de comandos simples, que seguem um ao outro e que s ao executados na ordem em que aparecem. Exemplo A 10 BA + 5 X1 + 2 Dentro de uma seq u encia simples de comandos a entrada sempre e pelo primeiro comando e a sa da sempre e pelo u ltimo. Gra cas ao princ pio da programa c ao estruturada (uma entrada e uma sa da), uma seq u encia simples pode ser substitu da por um bloco com entrada e sa da u nicas. um comando que permite dois caminhos alternativos, da Alternativa E o nome, a depender de alguma condi c ao. Na matem atica convencional isto j a existe, por exemplo na f ormula de Bhaskhara. No momento de calcular a raiz quadrada de , h a que se tomar uma decis ao. Se < 0 os c alculos cessam e a resposta de ra zes imagin arias deve ser dada. Se 0, a raiz pode ser extra da e um ou dois valores de ra zes emergem. O ponto importante aqui e que em algum lugar os dois ramos se juntam novamente, e a regra de ouro da programa c ao estruturada (entrada u nica e sa da u nica tamb em) continua verdadeira. Tal como na seq u encia, um comando alternativo, por mais complexo que seja, pode ser substitu do por u nica caixa.
vers ao de 23 de janeiro de 2009

21

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO Repeti c ao O terceiro bloco da programa c ao estruturada e a resposta ` a necessidade de usar o comando de desvio. Perceba-se que aqui existe um desvio impl cito, j a que ao se terminar o bloco, h a que se desviar para o in cio do mesmo, que e o que caracteriza uma repeti c ao. A restri c ao a obedecer n ao e a aus encia de desvio de resto, imposs vel de obedecer mas sim a regra da entrada e sa da u nicas. Em outras palavras n ao e proibido usar o desvio, desde que ele esteja contido em limites bem determinados. Tal como na seq u encia e na alternativa, um comando de repeti c ao, por maior ou mais complexo que seja, pode ser substitu do por u nica caixa. A import ancia desta descoberta para o software teve tanto impacto quanto a de que qualquer forma l ogica de hardware pode ser construida pelas combina c oes de portas AND, OR e NOT. A grande vantagem dos tr es elementos da programa c ao estruturada e que possuem a caracter stica de pacote ou caixa preta, uma vez que todos tem uma u nica entrada e uma u nica sa da. Isto signica que partes de programas construidos com estas estruturas podem ser tamb em considerados pacotes, sempre com entradas e saidas u nicas. Esta ea melhor qualidade da programa c ao estruturada, e e por esta caracter stica que o GOTO deve ser desprezado na constru c ao de bons algoritmos. Tanto isto e verdadeiro, que as linguagens mais modernas, n ao tem mais a instru c ao de desvio, banida por perniciosa e desnecess aria.

2.5

A m aquina de Turing

Embora a humanidade use o conceito de algoritmo h a mil enios (O de MDC e devido a Euclides), e o pr oprio nome algoritmo derive do autor arabe de um tratado de algebra escrito por volta de 800 dC, a deni c ao precisa do que seja um algoritmo geral e apenas de 1930. Ela e devida a Turing, atrav es do seu conceito de M aquina de Turing. Esta n ao e uma m aquina real, sendo apenas uma abstra c ao matem atica, da o seu poder de encanto. Em 1900, o matem atico alem ao Hilbert apresentou em um congresso uma lista de problemas que segundo ele estariam ocupando as mentes matem aticas no s eculo que ora se iniciava. O d ecimo problema de Hilbert, dizia: ...haver a algum procedimento mec anico geral que possa em princ pio resolver todos os problemas da matem atica ? 1 Em 1937, Turing respondeu a esta pergunta atrav es do conceito de M aquina de Turing. Ela e composta por um n umero nito de estados, ainda que possa ser muito grande. Deve tratar um input innito. Tem um espa co exterior de armazenagem tamb em innito. Turing imaginou o espa co exterior para dados e armazenamento como sendo uma ta, que pode mover-se para frente e para tr as. Al em disso a m aquina pode ler e escrever nesta ta. A ta est a composta por quadrados (ou seja, o nosso ambiente e discreto). Apenas 2 s mbolos podem ser escritos nos quadrados da ta, digamos 0 signicando quadrado em branco e 1 (quadrado preenchido), ou vice-versa. Isto posto, lembremos que: 1. os estados internos do aparelho s ao nitos em n umero 2. o comportamento da m aquina e totalmente determinado pelo seu estado interior e pelo input.
1 Eis o problema original, como proposto por Hilbert: Determination of the solvability of a diophantine equation: Given a diophantine equation with any number of unkown quantities and with rational numerical coecients: to devise a process according to which it can be determined by a nite number of operations whether the equation is solvable in rational integers

88-09, Pedro Kantek

22

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO Ou seja, dado o estado inicial e um s mbolo de input, o aparelho deve ser determin stico 2 . Logo ele,
muda seu estado interno para outro, e/ou Muda o simbolo que foi lido pelo mesmo ou por outro, e/ou movimenta-se para a direita ou para a esquerda, 1 quadrado, e/ou Decide se continua ou interrompe e para.

Deni c ao de uma m aquina de Turing Para especicarmos nossa m aquina de Turing, ter amos que escrever algo do tipo Estado Sinal faz Vai para Escreve Anda atual lido o que estado para onde 0 0 0 0 D 0 1 13 1 E 1 0 65 1 D 1 1 1 0 D 2 0 0 1 D.PARE 2 1 66 1 E Esta deni c ao acima, e adequada para a tarefa de numera c ao das M aquinas de Turing, fen omeno esse que e central na teoria. Entretanto, para operar com esta m aquina, talvez seja mais adequado escrever uma tabela como estado chega escreve? anda vai para 0 0 D 0 0 1 E 13 1 0 1 D 65 1 1 0 D 1 2 0 1 PARE 2 1 E 66 As diversas m aquinas de Turing Para ver isso funcionando, precisa-se numerar as m aquinas de Turing. Necessita-se um pouco de esperteza aqui. Primeiro, converte-se D, E, PARE, e v rgula como os n umeros 2, 3, 4, 5 e 6. Ou usando um sistema un ario, 110, 1110, 11110, 111110 e 1111110. Zero ser a 0, e 1 ser a 10, como j a se viu. As colunas 4 e 5 nas tabelas n ao precisam separa c ao, j a que o conte udo da coluna 5 e apenas 1 ou zero e sempre ocupa 1 caracter. Pode-se dar ao luxo de n ao codicar nenhuma seta, nem nada do que as antecede (colunas 1, 2 e 3) desde que se organize os comandos em rigorosa ordem crescente (e tomando cuidado para preencher comandos que no modo tradicional n ao seriam escritas por nunca ocorrerem na m aquina). Fazendo tudo isso, e escrevendo toda a programa c ao da m aquina que soma 1 a um n umero un ario, ela ca: 101011011010010110101001110100101101011110100001110100101011 10100010111010100011010010110110101010101101010101101010100. Convertendo este n umero bin ario para decimal chegamos a 450813704461563958982113775643437908 O que signica que a m aquina que soma 1 em un ario e a 450.813.704.461.563.958.982.113.775.643.437.908a
2 um fen omeno e deterministico quando gera sempre o mesmo resultado a partir das mesmas condi c oes iniciais. Por exemplo, soltar um corpo em queda livre. Ao contr ario um fen omeno probabil stico (ou rand omico ou estoc astico) e o fen omeno no qual dadas as mesmas condi c oes iniciais o resultado e imprevis vel. Por exemplo, lan car um dado

vers ao de 23 de janeiro de 2009

23

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO m aquina de Turing. Naturalmente, mudando-se (otimizando-se) alguma coisa na programa c ao, esta m aquina muda de n umero. A m aquina que soma 1 em un ario e a 177.642a m aquina. A que multiplica 2 em bin ario expandido e 10.389.728.107a m aquina e a que multiplica por 2 um n umero un ario e a 1.492.923.420.919.872.026.917.547.669 a m aquina. E assim vai. A T7 , e n ao corretamente especicada, j a que existem uma seq u encia de 5 uns, e ela emperra ao processar tal seq u encia. M aquina Universal de Turing Teremos uma m aquina U, que antes de mais nada ler a as informa c oes na ta de entrada para que ela passe a se comportar como a m aquina T. Depois disso vem os dados de input que seriam processados pela m aquina T, mas que ser ao pela U, operando como se fosse a T. Dizendo que quando a n- esima m aquina de Turing atua sobre o n umero m produz o n umero p, podemos escrever Tn (m) = p. Podemos pensar nesta rela c ao como sendo uma fun c ao de 2 par ametros (n e m) que leva a p. Esta fun c ao, pelo que vimos e totalmente algoritmica. Logo, ela pode ser realizada por uma m aquina de Turing, a quem chamaremos de U . Ent ao, fornecendo o par (n, m) a U , obtemos como resposta p. Podemos escrever U (n, m) = Tn (m) A m aquina U quando alimentada primeiro com o n umero n, passa a se comportar como a Tn Como U e uma m aquina de Turing, ela e uma Talgumacoisa . Quanto e essa alguma coisa ? mais ou menos 7.24 101688 , ou seja o n E umero 724 seguido de 1686 zeros. Todos os computadores modernos, desde um humilde Z80 at e um Cray multi-vetorial s ao m aquinas de Turing. Acabamos de ser apresentados a um moderno computador: em U (n, m) = p, U eo hardware, n e o software (ou programa), m s ao os dados de entrada e nalmente p eo resultado esperado. Para efeito de entender a MT, pode-se desenhar algo como segue: Usar como modelo a MT que multiplica por 2 em un ario Construir o modelo acima no quadro e depois testar as sequencias 000010000, 00001100000 e 00001110000. Todas v ao funcionar.

2.6
2.6.1

Linguagens de programa c ao
Assembler

apenas um tradutor de c O assembler n ao e uma linguagem de alto nivel. E odigos e portanto est a muito pr oximo da linguagem de m aquina. Utiliz a-lo e um aut entico calv ario, j a que todas as opera c oes que o computador precisa realizar cam por conta do programador. A produtividade e muito baixa, e a u nica vantagem que se consegue e a eci encia: os programas voam. Por outro lado, tamanha ader encia ` as entranhas da m aquina cobra seu pre co: na mudan ca de plataforma tecnol ogica um monte de coisas precisa ser reestudado e reciclado. N ao e uma boa id eia programar prossionalmente em assembler. Mas, quem domina esta t ecnica, e bastante valorizado no mercado. Mesmo que trabalhando em outras linguagens, quem conhece o assembler, conhece o interior da m aquina. Sem d uvida alguma, isto tem o seu valor. A seguir um trecho pequeno de um programa em assembler para plataforma Intel. L100: MOV AH,2AH ;pega a data
88-09, Pedro Kantek

24

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO

INT 21H PUSH AX ;DEPOIS VOU DAR POR EXTENSO MOV BX,10 MOV DI,OFFSET DIA MOV AH,0 MOV AL,DL DIV BL OR AX,3030H STOSW MOV AL," " STOSB

MOV AH,0 MOV AL,DH PUSH AX ;DEPOIS VOU DAR POR EXTENSO DIV BL OR AX,3030H STOSW MOV AL," " STOSB

2.6.2

Fortran

Fortran e uma linguagem muito antiga, originalmente sugerida pela IBM na d ecada de 50. Seu texto se assemelha a uma descri c ao matem atica e de fato, FORTRAN signica
vers ao de 23 de janeiro de 2009

25

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO ou pelo menos era, uma linguagem franciscana de t FORmula TRANslation. E, ao pobre em recursos. Foi a u nica linguagem ensinada em escolas de engenharia at e a d ecada de 80. O primeiro compilador de FORTRAN foi desenvolvido para o IBM 704 em 1954-57 por uma equipe da IBM cheada por John W. Backus. A inclus ao de um tipo de dados de n umero complexo na linguagem tornou a linguagem Fortran particularmente apta para a computa c ao cient ca. As principais revis ao s ao a Fortran 66, 77, 90 e 95. A mais famosa e usada e a Fortran 90. Sua principal vantagem e a eci encia em calculo num erico pesado. A seguir, um exemplo de FORTRAN C 1 2 3 4 5 6 C2345678901234567890123456789012345678901234567890123456789012345 PROGRAM BASKHARA C REAL A,B,C, DELTA, X1,X2, RE, IM C PRINT *, "Este programa resolve uma equa c~ ao de 2o.grau" PRINT *, "do tipo: a*x**2 + b*x + c = 0" C PRINT 10, "Digite a,b,c: " 10 FORMAT(A,1X,$) 20 READ(*,*,ERR=20) A,B,C C DELTA=B*B-4.*A*C C IF (DELTA.GT.0) THEN ! (DUAS RAIZES REAIS) X1=(-B-SQRT(DELTA))/(2.*A) X2=(-B+SQRT(DELTA))/(2.*A) PRINT *, "RAIZES: X1=",X1 PRINT *, " X2=",X2 ELSE IF (DELTA.EQ.0) THEN ! (DUAS RAIZES REAIS IGUAIS) X1=-B/(2.*A) X2=X1 PRINT *, "RAIZES: X1=X2=",X1 ELSE ! (DUAS RAIZES COMPLEXAS) RE=-B/(2.*A) IM=SQRT(-DELTA)/(2.*A) PRINT *, "RAIZES COMPLEXAS: X1=",RE," -",IM,"i" PRINT *, " X2=",RE," +",IM,"i" ENDIF C END

2.6.3

Lisp

LISP e a segunda linguagem de alto nivel mais antiga. O LISP nasce como lho da comunidade de Intelig encia Articial. Na origem, 4 grupos de pessoas se inseriram na comunidade de IA: os ling uistas (na busca de um tradutor universal), os psic ologos (na tentativa de entender e estudar processos cerebrais humanos), matem aticos (a mecaniza c ao de aspectos da matem atica, por exemplo a demonstra c ao de teoremas) e os inform aticos (que buscavam expandir os limites da ci encia).
88-09, Pedro Kantek

26

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO O marco inicial e o encontro no Dartmouth College em 1956, que trouxe duas conseq u encias importantes: a atribui c ao do nome IA e a possibilidade dos diferentes pesquisadores se conhecerem e terem suas pesquisas beneciadas por uma interfecunda c ao intelectual. A primeira constata c ao foi a de que linguagens existentes privilegiavam dados num ericos na forma de arrays. Assim, a busca foi a cria c ao de ambientes que processassem s mbolos na forma de listas. A primeira proposta foi IPL (Information Processing Language I, por Newel e Simon em 1956). Era um assembl ao com suporte a listas. A IBM engajou-se no esfor co, mas tendo gasto muito no projeto FORTRAN decidiu agregar-lhe capacidade de listas, ao inv es de criar nova linguagem. Nasceu a FLPL (Fortran List Processing Language). Em 1958, McCarthy come cou a pesquisar requisitos para uma linguagem simb olica. Foram eles: recurs ao, express oes condicionais, aloca c ao din amica de listas, desaloca c ao autom atica. O FORTRAN n ao tinha a menor possibilidade de atend e-las e assim McCarthy junto com M. Minsky desenvolveu o LISP. Buscava-se uma fun c ao Lisp Universal (como uma m aquina de Turing Universal). A primeira vers ao (chamada LISP pura) era completamente funcional. Mais tarde, LISP foi sofrendo modica c oes e melhoramentos visando eliminar ineci encias e diculdades de uso. Acabou por se tornar uma linguagem 100% adequada a qualquer tipo de resolu c ao de problema. Por exemplo, o editor EMACS que e um padr ao no mundo UNIX est a feito em LISP. In umeros dialetos LISP apareceram, cada um queria apresentar a sua vers ao como sendo a melhor. Por exemplo, FranzLisp, ZetaLisp, LeLisp, MacLisp, Interlisp, Scheme, T, Nil, Xlisp, Autolisp etc. Finalmente, como maneira de facilitar a comunica c ao entre todos estes (e outros) ambientes, trabalhou-se na cria c ao de um padr ao que foi denominado Common Lisp. Como resultado o Common Lisp cou grande e um tanto quanto heterog eneo, mas ele herda as melhores pr aticas de cada um de seus antecessores. Seja agora um exemplo de uma fun c ao lisp: > (defun li (L1 L2) ; pergunta se duas listas s~ ao iguais (cond ((null L1) (null L2)) ((null L2) nil) ((not (eql (car L1) (car L2))) nil) (t (li (cdr L1) (cdr L2))))) LI

2.6.4

Prolog

O nome Prolog para a linguagem concreta foi escolhido por Philippe Roussel como uma abrevia c ao de PROgrammation LOGique. Foi criada em meados de 1972 por Alain Colmerauer e Philippe Roussel, baseados no conceito de Robert Kowalski da interpreta c ao procedimental das cl ausulas de Horn. A motiva c ao para isso veio em parte da vontade de reconciliar o uso da l ogica como uma linguagem declarativa de representa c ao do conhecimento com a representa c ao procedimental do conhecimento. *Hist orico
Precursores: Newell, Shaw e Simon, com sua Logic Theory Machine, que buscava a prova autom atica de teoremas, em 1956. Robinson, 65, no artigo A machine oriented logic based on the resolution principle. Propunha o uso da f ormula clausal, do uso de resolu c ao e principalmente do algoritmo de unica c ao.
vers ao de 23 de janeiro de 2009

27

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO


Green em 1969, escreveu o Question Answer System, que respondia perguntas sobre um dado dom nio. Na mesma epoca, Winograd escreveu o software Planner. Todos estes tinham problemas de eci encia, por causa, entre outras coisas, da explos ao combinat oria. Em 1970, em Edinbourg, Kowalski bolou o seguinte esquema:

Limitou a expressividade ` as cl ausulas de Horn Criou uma estrat egia de resolu c ao, n ao completa, mas muito eciente
Em 72, em Edinbourg e Marselha, surgiu a linguagem PROLOG. Em 77, Waren escreve o primeiro compilador de PROLOG. Come ca o sucesso de PROLOG na Europa. Nos EUA, sempre deu-se maior aten c ao ao LISP. Foi a base para o computador de 5a gera c ao do Jap ao.

A seguir, um pequeno trecho de uma sess ao PROLOG: parent(maria,jorge):-true. parent(joao,jorge):-true. parent(jorge,ana):-true. ... parent(cris,paulo):-true. Da : podemos perguntar: ? parent(joao,jorge) YES ? parent(celia,cris) NO ? parent(cris,carlos) NO ? parent(X,jorge) X=maria X=joao no (significando acabou) ? parent(X,Y) X=maria Y=jorge X=joao Y=jorge ... ? parent(X,Y),parent(Y,paulo) X=jorge Y=cris

[ler esta v rgula como OU]

2.6.5

Cobol

O nome vem da sigla de COmmon Business Oriented Language (Linguagem Comum Orientada aos Neg ocios), que dene seu objetivo principal em sistemas comerciais, nanceiros e administrativos para empresas e governos. O COBOL foi criado em 1959 pelo Comit e de Curto Prazo, um dos tr es comit es propostos numa reuni ao no Pent agono em Maio de 1959, organizado por Charles Phillips do Departamento de Defesa dos Estados Unidos. O Comit e de Curto Prazo foi
88-09, Pedro Kantek

28

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO formado para recomendar as diretrizes de uma linguagem para neg ocios. Foi constitu do por membros representantes de seis fabricantes de computadores e tr es org aos governamentais, a saber: Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, e Sylvania Electric Products, e a For ca A erea dos Estados Unidos, o David Taylor Model Basin e a Ag encia Nacional de Padr oes (National Bureau of Standards ou NBS). Este comit e foi presidido por um membro do NBS. Um comit e de M edio Prazo e outro de Longo Prazo foram tamb em propostos na reuni ao do Pent agono. Entretanto, embora tenha sido formado, o Comit e de M edio Prazo nunca chegou a funcionar; e o Comit e de Longo Prazo nem chegou a ser formado. Por m, um subcomit e do Comit e de Curto Prazo desenvolveu as especica c oes da linguagem COBOL. As especica c oes foram aprovadas pelo Comit e de Curto Prazo. A partir da foram aprovadas pelo Comit e Executivo em Janeiro de 1960, e enviadas ` a gr aca do governo, que as editou e imprimiu com o nome de Cobol 60. O COBOL foi desenvolvido num per odo de seis meses, e continua ainda em uso depois de mais de 40 anos. O COBOL foi denido na especica c ao original, possuia excelentes capacidades de autodocumenta c ao, bons m etodos de manuseio de arquivos, e excepcional modelagem de dados para a epoca, gra cas ao uso da cl ausula PICTURE para especica c oes detalhadas de campos. Entretanto, segundo os padr oes modernos de deni c ao de linguagens de programa c ao, tinha s erias deci encias, notadamente sintaxe prolixa e falta de suporte da vari aveis locais, recorr encia, aloca c ao din amica de mem oria e programa c ao estruturada. A falta de suporte ` a linguagem orientada a objeto e compreens vel, j a que o conceito era desconhecido naquela epoca. Segue o esqueleto de um programa fonte COBOL. IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. * ENVIRONMENT DIVISION. * DATA DIVISION. * PROCEDURE DIVISION. PARA-1. DISPLAY "Al^ o, Mundo.". * STOP RUN.

2.6.6

APL

Ela nasceu do trabalho de um professor de matem atica canadense de nome Keneth Iverson. Sua proposta original era a de produzir uma nova nota c ao matem atica, menos sujeita ` as ambig uidades da nota c ao convencional. Na d ecada de 60, trabalhando na IBM em conjunto com Adin Falco, ambos produziram a primeira vers ao de APL, quando um interpretador da linguagem cou dispon vel. A principal caracter stica de APL e o uso de um conjunto especial de caracteres que incluem algumas letras gregas (rho, iota...), s mbolos matem aticos convencionais (o sinal de vezes, o de dividido...) e alguns s mbolos especialmente inventados. Este fato sempre limitou a dissemina c ao da linguagem. At e o advento das interfaces gr acas, como o windows, por exemplo, exigia-se um hardware especial para poder programar em APL. Programas em APL em geral sempre s ao muito pequenos, embora poderosos. A linguagem est a preparada para tratar arranjos de grandes dimens oes. Por exemplo, quando em APL se escreve A+B, se A e B forem escalares (isto e um n umero u nico), a resposta tamb em o ser a. Se A e B s ao vetores de 100 n umeros, a resposta tamb em o
vers ao de 23 de janeiro de 2009

29

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO ser a. Idem para matrizes e at e arrays-nd. Em algumas vers oes de APL este n chega a 256 dimens oes. Este e um comando EDIT (troca algo, de... para...)

2.6.7

Basic

A linguagem BASIC (acr onimo para Beginners All-purpose Symbolic Instruction Code), foi criada, com ns did aticos, pelos professores John G. Kemeny e T. Kurtz em 1963 no Dartmouth College. BASIC tamb em e o nome gen erico dado a uma grande fam lia de linguagens de programa c ao derivadas do Basic original. Provavelmente existem mais varia c oes de Basic do que de qualquer outra linguagem de programa c ao. Basic e uma linguagem imperativa de alto n vel, pertencente ` a terceira gera c ao, que e normalmente interpretada e, originalmente, n ao estruturada, por ter sido fortemente baseada em FORTRAN II. Um programa em Basic tradicional tem suas linhas numeradas, sendo que e quase que padr ao usar n umeros de 10 em 10 (o que facilita a coloca c ao de linhas intermedi arias). Os comandos s ao poucos, simples e facilmente compreens veis na l ngua inglesa (LET, IF, ...). Um programa em Basic, que calcula a f ormula de Bhaskara caria como: 10 20 25 30 40 50 60 70 80 90 100 200 410 420 430 440 490 500 REM RESOLVE EQUACAO DO SEGUNDO GRAU READ A,B,C IF A=0 THEN GOTO 410 LET D=B*B-4*A*C IF D<0 THEN GOTO 430 PRINT "SOLUCAO" IF D=0 THEN GOTO 100 PRINT "PRIMEIRA SOLUCAO",(-B+SQR(D))/(2*A) PRINT "SEGUNDA SOLUCAO",(-B-SQR(D))/(2*A) GOTO 20 PRINT "SOLUCAO UNICA",(-B)/(2*A) GOTO 20 PRINT "A DEVE SER DIFERENTE DE ZERO" GOTO 20 PRINT "NAO HA SOLUCOES REAIS" GOTO 20 DATA 10,20,1241,123,22,-1 END

O programa demonstra a falta de estrutura c ao da linguagem original, pois o IF funciona como um GOTO condicional, o que favorece o c odigo espaguete.
88-09, Pedro Kantek

30

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO

2.6.8

Clipper

Tudo come cou com o dbase, que foi o precursor de bancos de dados para micros. Por volta de 83, 84 surgiu o dbase 2 (nunca houve o 1) para micros de 8 bits com mem orias t picas de 64Kb e um ou dois disquetes de 8 polegadas e cerca de 512 KB de capacidade em cada um. O dbase j a era um gerenciador de dados, dentro da vis ao relacional, com m nima redund ancia de dados e com todas as garantias de acesso e uma linguagem estruturada, no melhor padr ao, de uso geral, capaz de garantir um aumento na produtividade na programa c ao. A hist oria do dBASE come ca em 74, no Jet Propulsion Laboratory, conhecido como JPL, e instalado em Pasadena, Calif ornia. Nesta instala c ao da NASA trabalhava Jeb Long, pesquisador que lidava com dados obtidos nas pesquisas espaciais atrav es de naves n ao tripuladas. Estes, por serem em grande n umero, come caram a trazer problemas e dissabores a Jeb Long, que desenvolveu, ent ao, um programa de computador capaz de gerenciar tais informa c oes. Este programa com nome de JPLDIS, foi conclu do e alcan cou razo avel sucesso tendo sido bastante comentado pelo pessoal t ecnico. Foi o que bastou para que um analista de sistemas (Wayne Ratli) come casse a desenvolver um programa gerenciador de dados, gen erico, mas tendo como modelo o JPLDIS. Rapidamente o novo trabalho tornou-se melhor do que o original, e Ratli desenvolveuo cada vez mais. Em 79, Ratli achou que o programa j a estava maduro e pronto para enfrentar o mercado, e ele foi anunciado com o nome de VULCAN. Foi, entretanto, um fracasso: n ao se chegou a vender sequer 50 c opias. Alguns meses depois, um grande distribuidor de programas de micros, George Tate, tomou conhecimento do dBASE. Testou-o e cou entusiasmado. Achou que o que faltava a Ratli era suporte comercial, uma vez que seu trabalho era muito bom. Rapidamente providenciaram-se algumas mudan cas cosm eticas no programa, seu nome foi mudado para dBASE II (nunca houve o dBASE I, tratava-se de estrat egia comercial, para apresentar o produto como um melhoramento), e uma nova empresa (ASHTON TATE) foi criada para vender este produto. Em pouco tempo, dBASE tornou-se um marco na hist oria de softwares para microcomputadores. A grande vantagem de um banco de dados e retirar a amarra c ao entre programas e dados. A explica c ao desta vantagem e que dados s ao muito mais est aveis do que os procedimentos (=programas). Separando-os garante-se que longevidade aos dados, que em geral s ao os mais custosos para adquirir. O dbase como linguagem era interpretado, o que trazia desempenho p o nas aplica c oes, al em da eventual falta de seguran ca (qualquer um podia alterar os dados). Para corrigir estas duas deci encias, logo surgiram in umeros compiladores, dos quais o mais famoso foi o CLIPPER. Eis um programa em CLIPPER, por acaso um trecho do programa que emite provas aleat orias e diferentes: w_nomq = space(8) w_file = "LIXO " @ 08,45 say "Nome Arquivo: " get w_file pict "@!" @ 09,5 say "Qual a turma ? " get w_turm pict "@!" @ 09,40 say "OU arquivo de nomes " get w_nomq pict "@!" oba := 1 do while oba == 1
vers ao de 23 de janeiro de 2009

31

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO oba := 0 W_mess := " " @ 11,15 say "Questao 1:" @ 12,20 say "Topico: " get w_top1 @ 12,50 say "Grupo: " get w_gru1 pict "99"

2.6.9

Natural

NATURAL e uma linguagem de quarta gera c ao que pode ser utilizada, indistintamente por usu arios nais trabalhando em auto-servi co, ou por programadores prossionais em suas atividades normais no CPD. Embora possa ler arquivos seq uenciais, o Natural e mais indicado para ler bancos de dados ADABAS, que a partir da d ecada de 90 foi o padr ao de bancos de dados em nosso pa s e em boa parte do mundo. Eis um exemplo de programa em Natural: 0010 0020 0030 0040 0050 0060 0070 0080 0090 0100 0110 0120 0130 0140 0150 0160 0170 0180 0190 AT TOP OF PAGE DO WRITE 20T "INFORMACOES SALARIAIS PARA SANTA CATARINA" SKIP 1 DOEND FIND PESSOAL WITH ESTADO = "SC" SORTED BY CIDADE AT BREAK OF CIDADE DISPLAY NOTITLE "NOME DA/CIDADE" OLD(CIDADE) "TOTAL/SALARIOS" SUM(SALARIO) (EM=ZZZ,ZZZ,ZZZ) "SALARIO/MEDIO" AVER(SALARIO) "SALARIO/MAXIMO" MAX(SALARIO) "NUMERO/PESSOAS" COUNT(CIDADE) (EM=ZZ99) AT END OF DATA DO SKIP 1 WRITE "TOTAL DE TODOS OS SALARIOS" TOTAL(SALARIO) DOEND END

2.6.10

Pascal

uma linguagem de programa E c ao estruturada que recebeu este nome em homenagem ao matem atico Blaise Pascal. Foi criada em 1970 pelo su co Niklaus Wirth, tendo em mente encorajar o uso de c odigo estruturado. Segundo o autor, Pascal foi criada simultaneamente para ensinar programa c ao estruturada e para ser utilizada em sua f abrica de software. A linguagem reete a libera c ao pessoal de Wirth ap os seu envolvimento com a especica c ao de ALGOL 68, e sua sugest ao para essa especica c ao, o ALGOL W. A linguagem e extremamente bem estruturada e muito adequada para ensino de provavelmente uma das linguagens mais bem resolvidas linguagens de programa c ao. E entre as linguagens estruturadas, e certamente um dos exemplos de como uma linguagem especicada por uma pessoa pode ser bem melhor do que uma linguagem especicada por um comit e. Pascal originou uma enorme gama de dialetos, podendo tamb em ser considerada uma fam lia de linguagens de programa c ao. Grande parte de seu sucesso se deve a cria c ao, na
88-09, Pedro Kantek

32

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO d ecada de 80, da linguagem Turbo Pascal, inicialmente dispon vel para computadores baseados na na arquitetura 8086 (com vers oes para 8080 no seu in cio). Pascal e normalmente uma das linguagens de escolha para ensinar programa c ao, junto com Scheme, C e Fortran. S o mais recentemente o Java entrou nesta lista. Comercialmente, a linguagem foi sucedida pela cria c ao da linguagem Object Pascal, atualmente utilizada nas IDEs Borland Delphi, Kylix e Lazarus. Academicamente, seus sucessores s ao as linguagens subseq uentes de Niklaus Wirth: Modula-2 e Oberon. A partir da vers ao 2005, o Delphi passou a se referir a sua linguagem de programa c ao como Delphi Language. Assim como a Linguagem C, que e padronizado pela ANSI (Ansi C), o Pascal possui padr oes pela ISO, como o Pascal Standard e o Advanced Pascal. Um exemplo: program Teste; var a,b:integer; uses crt; begin writeln (Digite um n umero para A); readln (a); writeln (Digite o n umero para B); readln (b); if (a > b) then { Se A e maior que B ent~ ao } writeln (A e maior que B) else { Sen~ ao... } writeln (B e maior que A); end

2.6.11

C e uma linguagem de programa c ao estruturada e padronizada criada na d ecada de 1970 por Dennis Ritchie e Ken Thompson para ser usada no sistema operacional UNIX. Desde ent ao espalhou-se por muitos outros sistemas operacionais, e tornou-se uma das linguagens de programa c ao mais usadas. C tem como ponto-forte a sua eci encia e e a linguagem de programa c ao de prefer encia para o desenvolvimento de software b asico, apesar de tamb em ser usada para tamb desenvolver aplica c oes. E em muito usada no ensino de ci encias da computa c ao, mesmo n ao tendo sido projetada para estudantes e apresentando algumas diculdades no seu uso. Outra caracter stica importante de C e sua proximidade com a linguagem de m aquina, que permite que um projetista seja capaz de fazer algumas previs oes de como o software ir a se comportar ao ser executado. C tem como ponto fraco a falta de prote c ao que d a ao programador. Praticamente tudo que se expressa em um programa em C pode ser executado, como por exemplo pedir o vig esimo membro de um vetor com apenas dez membros. Os resultados muitas vezes totalmente inesperados e os erros s ao dif ceis de encontrar. Muitas linguagens de programa c ao foram inuenciadas por C, sendo que a mais utilizada atualmente e C++, que por sua vez foi uma das inspira c oes para Java. O exemplo: #include <stdio.h> struct pessoa { unsigned short idade; char nome[51]; /*vector de 51 chars para o nome*/ unsigned long bi;
vers ao de 23 de janeiro de 2009

33

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO }; /*estrutura declarada*/ int main(void) { struct pessoa Sousa={16,"Diogo Sousa",123456789}; /*declaracao de uma variavel tipo struct pessoa com o nome Sousa*/ printf("Idade: %d\n",(int)Sousa.idade); /* "%d" espera um int */ printf("Nome: %s\n",Sousa.nome); printf("BI: %lu\n",Sousa.bi); return 0; }

2.6.12

Java

Java e uma linguagem de programa c ao orientada a objeto desenvolvida na d ecada de 90 pelo programador James Gosling, na empresa Sun Microsystems. Diferentemente das linguagens convencionais, que s ao compiladas para c odigo nativo, a linguagem Java e compilada para um bytecode que e executado por uma m aquina virtual. Desde seu lan camento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programa c ao na hist oria da computa c ao. Em 2003 Java atingiu a marca de 4 milh oes de desenvolvedores em todo mundo. Java continuou crescendo e hoje e uma refer encia no mercado de desenvolvimento de software. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execu c ao presente em web browsers, mainframes, SOs, celulares, palmtops e cart oes inteligentes, entre outros. Principais Caracter sticas da Linguagem Java A linguagem Java foi projetada tendo em vista os seguintes objetivos: Orienta c ao a objeto - Baseado no modelo de Smalltalk e Simula67 Portabilidade - Independ encia de plataforma - write once run anywhere Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a coopera c ao com protocolos TCP/IP, como HTTP e FTP Seguran ca - Pode executar programas via rede com restri c oes de execu c ao Sintaxe similar a Linguagem C/C++ Facilidades de Internacionaliza c ao - Suporta nativamente caracteres Unicode Simplicidade na especica c ao, tanto da linguagem como do ambientede execu c ao (JVM) distribu E da com um vasto conjunto de bibliotecas (ou APIs) Possui facilidades para cria c ao de programas distribu dos e multitarefa (m ultiplas linhas de execu c ao num mesmo programa) Desaloca c ao de mem oria autom atica por processo de coletor de lixo (garbage collector) Carga Din amica de C odigo - Programas em Java s ao formados por uma cole c ao de classes armazenadas independentemente e que podem ser carregadas no momento de utiliza c ao. Eis um exemplo: public abstract class Animal { public abstract void fazerBarulho(); } public class Cachorro extends Animal { public void fazerBarulho() { System.out.println("AuAu!"); } }

88-09, Pedro Kantek

34

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO public class Gato extends Animal { public void fazerBarulho() { System.out.println("Miau!"); } }

2.6.13

PHP

PHP (um acr onimo recursivo para PHP: Hypertext Preprocessor) uma linguagem de programa c ao de computadores interpretada, livre e muito utilizada para gerar conte udo din amico na Web. A linguagem surgiu por volta de 1994, como um subconjunto de scripts Perl criados por Rasmus Lerdof, com o nome Personal Home Page Tools. Mais tarde, em 1997, foi lan cado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta Forms Interpreter, que era na verdade um interpretador de comandos SQL. Trata-se de uma linguagem modularizada, o que a torna ideal para instala c ao e uso em servidores web. Diversos m odulos s ao criados no reposit orio de extens oes PECL (PHP Extension Community Library) e alguns destes m odulos s ao introduzidos como padr ao em novas vers oes da linguagem. Muito parecida, em tipos de dados, sintaxe e mesmo fun c oes, com a linguagem C e com a C++. Pode ser, dependendo da congura c ao do servidor, embutida no c odigo HTML. Existem vers oes do PHP dispon veis para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, IRIX e Solaris Construir uma p agina din amica baseada em bases de dados e simples, com PHP. Este prov e suporte a um grande n umero de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird etc, podendo abstrair o banco com a biblioteca ADOdb, entre outras. PHP tem suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML poss RPC, SOAP. E vel abrir sockets e interagir com outros protocolos. E as bibliotecas de terceiros expandem ainda mais estas funcionalidades. Veja um exemplo de PHP <? ... $tipss =mysql_result($result,0,SSERVTIPSS); $porss =mysql_result($result,0,SSERVPORSS); $daali =mysql_result($result,0,SSERVDAALI); $anexo =mysql_result($result,0,SSERVANEXO); $query = "select * from ANDAM where ANDAMNSERV =$nserv1 " ; $result = mysql_query($query); $quantos = mysql_num_rows($result); $quantos++; ?> <table > <tr> <td>Numero da solicitacao de servico<td><? echo $nserv ?><tr> <td>autor<td><? echo $nomeu ?><tr> <td>cliente<td><? echo $clien ?><tr> <td>CA responsavel<td><? echo $cares ?><tr> <td>interlocutor no cliente<td><? echo $intcl ?><tr> <td>fone<td><? echo $fonic ?><tr> <td>email<td><? echo $emaic ?><tr>
vers ao de 23 de janeiro de 2009

35

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO

2.6.14

Para os que acharam APL uma linguagem meio sem p es nem cabe ca, eis aqui J. Olhando para o J, o APL passa a ser t ao comportada quanto um COBOL da d ecada de 70. Para entender o J, precisamos estudar a vida do cara que inventou o APL, o canadense Ken Iverson. Na minha opini ao, o sujeito foi um g enio. Coloco-o sem nenhum medo de errar na galeria dos grandes matem aticos da humanidade, talvez o primeiro (junto com Mandelbroot) que tenha realmente conseguido casar com sucesso a matem atica e a computa c ao. Depois de propor o APL como uma nota c ao matem atica (d ecada de 50), de liderar o grupo que converteu o APL em linguagem de programa c ao (d ecada de 60 na IBM) e de liderar a populariza c ao da linguagem (anos 70 e come cos dos 80), em meados dos 80, ele chegou a algumas conclus oes:
o uso de um alfabeto n ao usual (para ser educado), restringia o uso do APL (lembremos que ainda n ao havia o windows e portanto para usar APL havia que comprar hardware especializado - e caro). o desenvolvimento continuado por 30 anos da linguagem apontou algumas inconsist encias te oricas no modelo. N ao esque camos que o Iverson era um matem atico da pesada o custo que o APL sempre teve inviabilizava seu uso pelos menos aquinhoados

Dessas elocubra c oes nasceu a linguagem J. O nome n ao tem explica c ao, exceto a dada por um de seus autores (Why J ? It is easy to type.). H a quem diga que J segue Ino alfabeto, sendo este Ia nota c ao Iverson. Seja como for, J n ao tem nada a ver com Java. Para maiores detalhes veja www.jsoftware.com. Eis a seguir um programa J: gerasima =: 3 : 0 r=.(2$y)$(1+?200$2 2 2 2 2 3 3 3 4 4 4 5 6)*2+-<.1.5*?200$2 1 1 1 2 1 2 xx=.(y?(<.y*1.6)) z=.+/|:r*($r)$xx r,.((y,1)$z),.(y,1)$xx ) Equivale ao programa gerasima do workspace vivo128, que gera um sistema de n inc ognitas e n equa c oes, depois o resolve para obter os termos independentes e possibilitar propor ao aluno que descubra as inc ognitas.

2.6.15

Lua

Lua e inteiramente projetada, implementada e desenvolvida no Brasil, por uma equipe na PUC-Rio (Pontif cia Universidade Cat olica do Rio de Janeiro). Lua nasceu e cresceu no Tecgraf, o Grupo de Tecnologia em Computa c ao Gr aca da PUC-Rio. Atualmente, Lua e desenvolvida no laborat orio Lablua. Tanto o Tecgraf quanto Lablua s ao laborat orios do Departamento de Inform atica da PUC-Rio. O projeto e a evolu c ao de Lua foram apresentados em junho de 2007 na HOPL III, a 3a Confer encia da ACM sobre a Hist oria das Linguagens de Programa c ao. Essa confer encia ocorre a cada 15 anos (a primeira foi em 1978 e a segunda em 1993) e somente poucas linguagens s ao apresentadas a cada vez. A escolha de Lua para a HOPL III e um importante reconhecimento do seu impacto mundial. Lua eau nica linguagem de programa c ao de impacto desenvolvida fora do primeiro mundo, estando atualmente
88-09, Pedro Kantek

36

vers ao de 23 de janeiro de 2009

CAP ITULO 2. CIENCIA DA COMPUTAC AO entre as 20 linguagens mais populares na Internet (segundo o ndice TIOBE). (Dados obtidos em www.lua.org) Eis um exemplo de lua function fatorial(n) if n < 2 then return 1 else return n * fatorial(n-1) end end function exemplo() print("Ola mundo\n\n") print("Fatorial de seis: " .. fatorial(6) .. "\n") print("Tchau......\n") end -- execu c~ ao da fun c~ ao exemplo()

vers ao de 23 de janeiro de 2009

37

88-09, Pedro Kantek

CAP ITULO 2. CIENCIA DA COMPUTAC AO

88-09, Pedro Kantek

38

vers ao de 23 de janeiro de 2009

Cap tulo 3

Escrevendo algoritmos
Para escrever algoritmos usando portugu es estruturado (portugol), primeiro necessita-se estabelecer algumas regras de nota c ao e de s ntaxe. Come ca-se descrevendo qual a forma de ler os quadros indicativos da s ntaxe da linguagem. Esta nota c ao resume a linguagem de especica c ao de algoritmos. Ela e um apanhado de no m nimo 4 linguagens (Java, PASCAL, CLIPPER e APL), e tem a nalidade de expressar o funcionamento do algoritmo em bom portugu es, da maneira mais clara poss vel e completamente descompromissado das idiossincrasias dessas e outras linguagens de programa c ao. S mbolo no formato Signicado palavra Na escrita desse comando, palavradeve ser escrita exatamente como aparece no formato. <palavra> <palavra> deve ser substitu do por algum tipo de palavra aceit avel neste contexto [ palavra ] ou [ < pala- O fato de algo estar escrito entre colchetes sigvra > ] nica que e OPCIONAL ... (retic encias) Repeti c ao (de 0 a n vezes) de um determinado item. As retic encias, ` as vezes tamb em aparecem na omiss ao de uma parte opcional em um comando qualquer { op c ao 1 | op c ao 2 | ... A barra vertical indica que uma de v arias op} c oes deve ser a escolhida Eis como usar esta tabela. Seja por hip otese a seguinte especica c ao de comando: <nome> gostaria [muito] de {comer | beber}

A partir da especica c ao acima, seriam v alidos os comandos Jo ao gostaria de beber Maria gostaria muito de comer Ant onio gostaria de comer...

3.1

Nome

O elemento b asico da linguagem e o nome, tamb em conhecido como identicador. Sua constru c ao e dada pelo diagrama a seguir 39

CAP ITULO 3. ESCREVENDO ALGORITMOS

Dentro deste diagrama, (e nos pr oximos que tiverem este formato) qualquer caminho seguido, levar a identicadores v alidos. Consideram-se letra, as 26 letras do alfabeto latino mai usculas, e d gito, os 10 d gitos de 0 a 9. Deve-se atentar que o branco n ao faz parte do rol de caracteres v alidos, o que faz com que o identicador n ao possa ser constitu do de mais de uma palavra. Pode-se usar neste caso o separador ( ), chamado sublinha. Atente-se para a import ancia dos nomes criados pelo programador serem escritos em mai uscula. Exemplos v alidos NOME SOM_TERMOS RAIZ1 SALDO08 SALDO_09 Exemplos n ao v alidos nome (usa-se letras min usculas) Saldo Devedor (usa-se duas palavras) SaldoDevedor (mistura-se letras mai usculas e min usculas) 123SALDO (come ca por um d gito num erico) Embora a maioria dos livros de l ogica n ao fa cam distin c ao entre o uso de mai usculas e min usculas para efeito de estabelecimento de identicadores, aqui vai-se padronizar nossos identicadores sempre EM LETRAS MAIUSCULAS. Isto pode incomodar um pouco no in cio, mas se revelar a uma grande vantagem na an alise de algoritmos feitos por terceiros, ou mesmo fde autoria pr opria, mas feitos h a tempos. O autor do algoritmo tem total autoridade para nomear seus identicadores como queira. Entretanto, h a uma regra de bom senso impl cita. Cada identicador deve ter um nome o mais pr oximo poss vel de sua fun c ao. Exemplo: Se precisarmos um identicador para representar uma somat oria, poderemos cham a-lo de SOMA, SOMAT, SM, etc, mas nunca de ABC, ou XYZ, ou ainda AKLJHJKH. Quanto ao tamanho do identicador, tamb em s o h a uma regra: BOM SENSO. Nem t ao pequeno que que quase imposs vel identic a-lo pelo nome, nem t ao longo que seja cansativo escrev e-lo. Exemplo. Ao gerar um identicador para conter a quantidade total de horas trabalhadas deve-se cham a-lo como QTHT, ou QTDHORAS, ou HORTRAB, ou similar, mas seria um exagero chamar o identicador de QUANTIDADE DE HORAS TRABALHADAS NO MES. Finalmente, deve-se discutir se as palavras que comp oe o algoritmo devem ou n ao ser acentuadas. Parece uma discuss ao bizantina, mas n ao o e necessariamente. Se o leitor do algoritmo for um ser humano, pode-se acentu a-lo sem nenhum problema. Entretanto, se o algoritmo for no futuro processado por algum programa, h a que se ter em mente, que em geral, para qualquer programa a e diferente de a e esta regra vale para todas as letras. Tamb em c e diferente de c.
88-09, Pedro Kantek

40

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS

3.2

Vari aveis

Ao identicador atribui-se um valor, que ser a usado nas computa c oes futuras. Quando este valor pode variar ao longo do processamento, diz-se que o identicador representa uma vari avel. (No contr ario, dir-se-ia que o identicador representa uma constante). Outra deni c ao para vari avel e: Um lugar onde se guarda uma valor. Por norma do portugu es estruturado, todas as vari aveis devem ser declaradas antes de poderem ser utilizadas. Chama-se ` a aten c ao, pois esta n ao e uma regra obrigat oria. In umeras linguagens de programa c ao, permitem que se dena uma vari avel no instante em que ela passa a ser necess aria e em qualquer ponto do programa. (Exemplo: BASIC, dbase, APL etc) Em portugol (e em Pascal, Cobol, Fortran, C, Java etc), isto n ao e poss vel. Assim, nossos programas ter ao dois blocos: O primeiro e o de deni c ao de vari aveis, e o segundo e o de procedimentos, sempre nesta ordem.

3.2.1

Tipos de vari aveis

Existem cinco tipos de vari aveis b asicas em portugol: inteiro, real, caracter, l ogico e cadeia. Inteiro uma vari E avel que pode conter n umeros inteiros (positivos ou negativos, n ao importa). Exemplos: 5, 1009, -6730 etc. O conceito de inteiro e familiar a n os. Qualquer opera c ao de contagem, pode ser estabelecida a partir do conjunto dos valores inteiros. Uma quantidade discreta 1 (i. e. enumer avel) sempre pode ser processada com base nos inteiros. Embora possam ter uma deni c ao formal, para n os e suciente a seguinte descri c ao: Uma vari avel inteira e a que pode armazenar qualquer um dos n umeros do conjunto: , ... (n + 1), n, ..., 2, 1, 0, 1, 2, ..., n, n + 1, ..., + Real outra vari E avel num erica que pode conter qualquer n umero real, isto e, inteiro ou fracion ario. Ex.: 1.5, -0.99, 1700,78 etc. Claramente salta aos olhos que armazenar uma vari avel real e mais caro(em tempo e em recursos) do que processar uma vari avel inteira. Ali as, esta e uma das raz oes porque existem vari aveis inteiras. Outra e a caracter stica da enumerabilidade que n ao est a presente no conjunto dos n umeros reais. Caracter Uma vari avel que pode conter um u nico caracter, como uma letra, ou um u nico d gito. O real conte udo de uma vari avel caracter depende do c odigo b asico que est a em uso. Mas, por enquanto, pode-se simplicar esta quest ao dizendo que qualquer caracter que esteja no teclado do computador pode ser colocado em uma vari avel caracter. Cadeia ou string um tipo de vari E avel formado por um ou mais de um caracteres. Por exemplo, um nome: JOSE, ou uma cidade como CURITIBAetc. Ou seja, a diferen ca entre uma vari avel caracter e uma vari avel cadeia e que a primeira tem tamnho 1 (um u nico caracter) e a segunda tem tamanho maior que um, ou seja, v arios caracteres.
1 discreta

= quantia que exprime valores inteiros, objetos, coisas, enm grandezas n ao cont nuas

vers ao de 23 de janeiro de 2009

41

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS L ogico ou booleano uma vari O nome booleando vem de George Boole, um matem atico. E avel que pode conter apenas 2 valores, conhecidos pelas palavras: VERDADEIRO e FALSO. Algumas linguagens n ao t em este tipo (C ou APL, por exemplo) usando artif cios para simular o conceito.

O tipo cadeia traz consigo uma pequena diculdade, que e a necessidade de estabelecer - quando da deni c ao da vari avel - qual o seu tamanho m aximo, em n umero de caracteres. Esta atitude e necess aria para informar a quem l e o algoritmo (seja um homem ou um computador) quanto de espa co reservar para conter esta vari avel. Esta diculdade n ao existe nas vari aveis num ericas nem nas l ogicas que tem tamanhos predeterminados e principalmente xos. Existe uma caracter stica das linguagens de programa c ao conhecida como tipagem. H a linguagens de tipagem forte (por exemplo Pascal) e as h a de tipagem fraca (por exemplo C). Este conceito tem a ver com restri c oes e verica c oes que a linguagem determina ou executa a cada comando. A tipagem forte torna as linguagens um pouco mais demoradas, mas evita erros cometidos pelo programador ao n ao vericar as opera c oes que comandou. Este tipo de erro, de resto muitas vezes e dif cil de localizar e corrigir, pois o sintoma que surge frequentemente e intermitente e nem sempre tem muito a ver com o real local onde o erro est a acontecendo. Outra vertente de linguagens fracamente tipadas e quando a linguagem tem regras de convers ao entre tipos diversos e elas s ao aplicadas antes de qualquer comando.

3.2.2

C odigo de caracteres

No momento de representar caracteres, aparece um problema: Qual sua lei de forma c ao e representa c ao ?. Tal problema n ao aparece nos n umeros: a matem atica ajuda. Entretanto, n ao h a uma aritm etica para caracteres, e portanto precisa-se construir uma s erie de propriedades e rela c oes entre os caracteres. Para n ao criar um novo conceito, vai-se aproveitar o c odigo de representa c ao padr ao em uso nos computadores atuais. Trata-se do c odigo ASCII (American standard Code for Information Interchange). A seguir, uma parte do pr oprio:

C odigo de caracteres Existem diversos c odigos usados no mundo da computa c ao. O mais usual e o c odigo ASCII (American Standard Code for Intrechange of Informations), embora se usem tamb em o BCD, EBCDIC e mais recentemente haja uma tend encia no uso do UNICODE. Como exemplo, eis uma parte do c odigo ASCII.
88-09, Pedro Kantek

42

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS dec 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 carac sp ! # $ % & ( ) * + , . / dec 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 carac 0 1 2 3 4 5 6 7 8 9 : ; < = > ? dec 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 carac @ A B C D E F G H I J K L M N O dec 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 carac P Q R S T U V W X Y Z [ & ] ^ dec 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 carac a b c d e f g h i j k l m n o dec 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 carac p q r s t u v w x y z { | }

u encia ASCII, e muito importante pois permite estabelecer o atributo de ordem Esta seq no universo dos caracteres. Olhando para ela, podemos armar, por exemplo, que o caractere a e menor do que o caractere b. Da mesma maneira, o amin usculo e maior do que o Amai usculo (ali as, isto vale para todas as letras), e qualquer d gito num erico e menor do que qualquer letra. Um especial cuidado deve ser tomado, pois esta n ao e a u nica seq u encia poss vel, e nem sequer a melhor. Cada m aquina e cada implementa c ao pode ter a sua. Alguns outros c odigos: BRASCII (C odigo padr ao BRASILEIRO para interc ambio de informa c oes), EBCDIC (Extended binary-coded decimal interchange coded), Z-Code etc. Outra observa c ao e que na tabela ASCII n ao existem caracteres acentuados. Duas conseq u encias adv em deste fato: nem sempre se podem usar tais caracteres e se eles forem usados, n ao se sabe qual a sua ordem no conjunto. Trocando em mi udos, se se solicitar a ordena c ao de uma lista de palavras contendo AMORA, ANCORA BROA, CAFE, ARROZ, CEREAL, n ao ser a nenhuma surpresa se a resposta for AMORA, ARROZ, BROA, CAFE, CEREAL e ANCORA.

Exerc cio 3 Uma salada de frutas, produzida industrialmente leva ma c a, banana, abacaxi e a cu car nas propor c oes de 1 Kg : 2 Kg : 0,5 Kg : 0,5 Kg respectivamente. Denir algoritmo que leia 4 quantidades representando os pesos dispon veis dos quatro ingredientes, calcule e escreva a quantidade de salada que poder ser construida, desprezando-se as quantidaSe for lido s o ser ao usadas logo total 10,10,10,10 5,10,2.5,2.5 20Kg des que ultrapassam a propor c ao. Exemplos: 10,20,10,10 10,20,5,5 40Kg 10,10,1,1 2,4,1,1 8Kg Exerc cio 4 Imagine que voc e tem uma entrada com um par de n umeros reais. Eles representam as dimens oes x e y medidas em metros, de um ret angulo. Escreva o algoritmo que leia esse par de n umeros e escreva x, y e a area do ret angulo de lados x e y , apenas se o per metro deste mesmo ret angulo for superior a 12.0 m. Exerc cio 5 Dena e escreva uma fun c ao que receba tr es n umeros reais, encontre e devolva o maior deles.
vers ao de 23 de janeiro de 2009

43

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS

Exerc cio 6 Dena um algoritmo capaz de comparar dois n umeros inteiros e positivos e imprimir a mensagem IGUAIS ou DIFERENTES em fun c ao dos valores de tais n umeros. Eles ser ao considerados IGUAIS quando sua diferen ca for menor a 10% do maior n umero. Ser ao considerados diferentes quando sua diferen ca for maior ou igual a 10% do valor do maior. O algoritmo termina quando for lido um n umero negativo. Exerc cio 7 Dena e escreva um algoritmo que leia um n umero e determine se ele e divis vel por 3. Se for o algoritmo deve imprimir a mensagem E DIVIS IVEL, e se n ao for E DIVIS deve imprimir NAO IVEL . Exerc cio 8 Escrever um algoritmo que leia um conjunto de tr es vari aveis que indicam respectivamente: Nome do funcion ario (cadeia-30), n umero de horas (inteiro) e valor da hora trabalhada (real). Se o n umero de horas e maior que 40, calcule o valor a pagar, sabendo que as horas extras s ao remuneradas a base de 1,5 x a hora normal. Se o sal ario for maior que R$ 650,00 retire 10% do sal ario para o governo (imposto). escreva nome, horas, valor da hora, valor a receber e valor do imposto. Dados terminam quando for lido um n umero de horas igual a zero. Por exemplo, Lido Impresso Jo ao,50,100 Jo ao,50,100,4950,550 Maria,30,10 Maria,30,10,300,0 XXX,0,0 m. Exerc cio 9 O departamento de pessoal de uma empresa solicitou o desenvolvimento de um programa de computador capaz de calcular o desconto devido para a previd encia. Assim, escreva um algoritmo capaz de calcular o desconto para o INSS, sujeito ` as seguintes regras:
Inicialmente o programa deve ler o valor do sal ario de refer encia Depois deve ler uma s erie de dados compostos por RG e sal ario bruto. A s erie termina quando for lido um RG = 0. Para um sal ario bruto at e 10 S.R. o desconto e 8% do sal ario bruto Para um sal ario entre 10,01 S.R. e 20 S.R. desconto e 9% do sal ario bruto Acima de 20 S.R. o desconto e de 10% do sal ario bruto. Ao nal, imprimir o RG, o sal ario bruto, o desconto e o sal ario l quido.

Exerc cio 10 Pretende-se informatizar um estacionamento. Nele existem 3 tipos de pre cos: 2 R $ por hora ou fra c ao para carros pequenos, 2,50 R$/hora para carros m edios e 3 R$/hora para carros grandes. Denir algoritmo que leia uma serie de informa c oes formadas por: Tipo do carro: caracter; hora-entrada: inteiro, minuto-entrada: inteiro; hora-saida: inteiro, minuto-saida: inteiro. Para cada conjunto de informa c oes lidas, o algoritmo deve imprimir a quantidade de dinheiro devida.
88-09, Pedro Kantek

44

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS

3.3

Comando de atribui c ao

Comando de atribui c ao e aquele que permite colocar/alterar valores de conte udo em vari aveis. Para tanto usaremos o s mbolo . 2 Quando dizemos express ao, podemos estar querendo dizer valor (que e a forma mais simples de express ao), ou simplesmente um conjunto de valores e operadores (que e a deni c ao de express ao). Exemplos: A 1 (aqui, a express ao e apenas um valor) B 1 + 2 (neste caso, a express ao e um conjunto de 2 valores e uma opera c ao, no caso, a adi c ao) importante notar, que a express E ao que se encontra do lado direito da echa de atribui c ao () deve ser compat vel com o tipo de vari avel que foi denida. Em outras palavras, no comando A 1+1, a express ao 1+1 tem que ser compat vel com a vari avel A, ou seja A dever a ter sido denida como inteira ou real, mas n ao como caracter, cadeia ou l ogica. Na atribui c ao de vari aveis do tipo inteira, a express ao dever a ser uma express ao inteira, isto e, sem parte fracion aria. Para vari aveis do tipo real, a express ao dever a ser num erica sem nenhuma outra restri c ao. Esta eau nica exce c ao ` a regra acima, pois podemos colocar um valor inteiro em uma vari avel real. Na atribui c ao de vari aveis cadeia, o valor dever a estar envolvido entre aspas simples (). Ele n ao dever a ter um tamanho maior do que aquele estabelecido para a vari avel. Se isto acontecer, o valor ser a truncado. Entretanto, n ao e boa norma de programa c ao usar esta facilidade (ou caracter stica) pois ela diculta a compreens ao do algoritmo. Finalmente, nas vari aveis l ogicas, deveremos usar as palavras VERDADEIRO e FALSO, ou quando n ao houver risco de confus ao, podemos usar as abreviaturas F ou V. Exemplos de atribui c oes: X1 XAC 1 + 1 + 1 DEV 2000 23 N -1 B 1.89 XAD 1 3 N -1.0009 ALF 1000900 X1 NOME ALFREDO COD ABCDEabcde ALFA abcde12345 SIM VERDADEIRO FALSO NAO VARLOG V VARLOG2 F

vari aveis inteiras

vari aveis reais

vari aveis cadeia

vari aveis l ogicas

2 A quest ao do s mbolo da atribui c ao e bem complicada. Poucos ambientes (como o APL) disp oe do s mbolo nativo . Os outros improvisam, com os s mbolos := do Pascal, ou simplesmente = do C e Java. No primeiro caso, s ao 2 s mbolos, ao inv es de um u nico, e no segundo surge a confus ao entre A=1 (signicando A recebe 1) e A=1 (signicando a pergunta: A e igual a 1 ?). Da o C e o Java fazerem a pergunta com ==. N ao h a uma sa da f acil.

vers ao de 23 de janeiro de 2009

45

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS NOME A XUNXO X vari aveis caracter NUM 1 AST * Duas perguntas a responder:
A 1 A e vari avel num erica ou caracter ? B V B e vari avel l ogica ou cadeia ?

Como regra geral, sempre que houver mistura entre elementos inteiros e reais, nas opera c oes +, e o resultado ser a real. Exemplos de uso de operadores em express oes num ericas A 1 1,78 3 B trunc(3.1416) C abs (-6 + trunc (3.4)) D 1 + 10 + 100 - 1000 etc Uma observa c ao nal e bem importante e que dentro de um mesmo algoritmo uma vari avel pode ter diversos (isto e, mais de um) comandos de assinalamento. Isto n ao e erro, e ao contr ario e bem freq uente. Nestes casos, a vari avel ter a o valor que foi nela colocado por u ltimo. Por exemplo, em 1: A 1 2: ... 3: A 10 4: ... 5: escreva (A) 6: ... Se nos comandos representados com ... n ao houver nenhuma altera c ao na vari avel A, o resultado impresso ao nal ser a 10 (e n ao 1).

3.4

Express oes

Express oes s ao conjuntos de vari aveis, valores, opera c oes e eventualmente par enteses, que demandam algum tipo de computa c ao determinada na express ao e produzem um resultado. As express oes se classicam em geral devido ao tipo de opera c oes que existem dentro da express ao, podendo ser aritm eticas, condicionais, l ogicas e de caracteres.

3.4.1

Aritm eticas

As express oes aritm eticas s ao aquelas que envolvem vari aveis num ericas, valores idem e as opera c oes aritm eticas, dando como resultado um n umero (que obviamente pode ser real ou inteiro). Nota c ao Exponencial Para os casos em que seja necess ario representar n umeros muito grandes ou muito pequenos, pode-se lan car m ao da nota c ao exponencial, que ser a escrita de acordo com a seguinte regra: A primeira parte do n umero ser a escrita como um n umero convencional, podendo ter o ponto decimal (constante ponto utuante) ou n ao (constante inteira). Depois, vem a letra mai uscula E, indicando elevado a. Um segundo n umero inteiro, positivo ou negativo indicando a pot encia de 10 ` a qual a primeira parte do n umero est a elevada.
88-09, Pedro Kantek

46

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS Por exemplo: o n umero deve ser entendido como 3E4 3 104 ou 3 10000 ou 30000 6.3E-2 6.3 102 ou 6.3 0.01 ou 0.063 -4.22E6 4.22 106 ou 4.22 1000000 ou -4220000 Opera c oes usuais Fun ca o Adi ca o Formato Objetivo A+B Adicionar A e B Tipos - operandos inteiro ou real Tipo do resultado Se A e B s ao inteiros, A+B e inteiro. Se pelo menos um dos dois e real, o resultado e real idem ao anterior idem ao anterior real real O mesmo tipo de A real real inteiro real ou ou real real inteiro Exemplo 3+7 e 10

Subtra c ao

A-B

Subtrair B de A O produto de A eB O quociente de A por B A elevado ` aB

Multiplica c ao AB Divis ao real Pot encia Absoluto AB A


B

O valor absoluto de A Seno Sin(A) seno de A radianos Cosseno cos(A) cosseno de A radianos Inteiro trunc(A) A parte inteira de A Fracion ario frac(A) A parte fracion aria de A Exponencial exp(A) E (2.718...) elevado a A Log log(A) Logaritmo natuNatural ral de A Arredondamento round(A)Arredonda A para o inteiro mais pr oximo Raiz qua- sqrt(A) Raiz quadrada drada de A Quadrado Somar 1 sqr(A) A++ O quadrado de A A vari avel A e incrementada de 1 unidade

abs(A)

inteiro real inteiro real inteiro real inteiro real inteiro real inteiro real inteiro real real real inteiro real inteiro real real

ou ou ou ou ou ou ou

5-2 e3 312 e 36 102 e5 25 e 32 abs(4) e4 sin(3.14...) e 1 cos(3.14...) e 0 trunc(2.5) e2 frac(2.5) e .5 exp(1) 2.718 log(1) e0 e

round(3.6) e 4 sqrt(4) e2

inteiro real, mas 0 inteiro real inteira real

ou A( ou ou

real

O mesmo de A O mesmo de A

sqr(4) e 16 Se A e 10, A++ coloca 11 em A.

vers ao de 23 de janeiro de 2009

47

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS Subtrair 1 Divis ao inteira Resto A A vari avel A e decrementada de 1 unidade o quociente inteiro da divis ao de A por B O resto da divis ao inteira de A por B inteira real inteiros ou O mesmo de A inteiro Se A e 10, A coloca 9 em A. 4 div 3 e1

A div B A mod B

inteiros

inteiro

10 mod 7 e3

Prioridades Na execu c ao de um comando complexo, podemos encontrar duas ou mais opera c oes num ericas uma ao lado da outra, e neste caso, pode surgir a pergunta: Qual realizar antes ? Exemplo: 2 + 3 4 e igual a 14 ou 20 ? Anal, 2 + (3 4) e 14, e(2 + 3) 4 e 20. Embora na matem atica tradicional j a se tenha uma lista de prioridades que deve ser obedecida, aqui no portugu es estruturado tamb em h a uma lista, que se resume a: 1. Primeira Prioridade: Par enteses 2. Prioridade: Fun c oes 3. Prioridade: Menos un ario (oposto) 4. Prioridade: Potencia c ao 5. Prioridade: Multiplica c ao e divis ao 6. Prioridade: Adi c ao e subtra c ao 7. Prioridade: Compara c oes (>, <, =, , , =) 8. Prioridade: Operadores l ogicos, , , . Se houverem duas opera c oes de mesma prioridade, as mesmas ser ao realizadas em qualquer dire c ao convencionada, por exemplo, da esquerda para a direita. dif E cil decorar esta tabela, al em do que, algumas linguagens de computador podem implementar tabelas ligeiramente diferentes desta. Assim, resta como sugest ao ao aluno:
Denir linhas pequenas (clareza e auto-documenta c ao). Se for necess ario, quebrar um comando complexo em v arios simples. Usar e abusar de par enteses, ainda que redundantes, pois eles refor cam a ordem de execu c ao e desobrigam de conhecer e consultar a tabela de prioridades.

Round e Trunc Arredondar um n umero e converter um real em inteiro aproximando-o do inteiro mais pr oximo. A regra b asica e que n umeros cuja parte fracion aria e menor do que 0.5 s ao trazidos para o inteiro menor e n umeros cuja parte fracion aria e igual ou maior a 0.5 s ao arredondados para mais. J a o truncamento simplesmente despreza a parte fracion ario, trazendo o resultado sempre para o inteiro menor ou igual ao n umero dado. As fun c oes round e trunc operam sobre n umeros positivos e negativos. Quando for este u ltimo caso, a deni c ao continua prevalecendo, o resultado e encontrado como se o operando fosse positivo, e a seguir o sinal de menos e colocado sobre o resultado. Acompanhe nos exemplos:
88-09, Pedro Kantek

48

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS trunc(1.8) e1 trunc(-1.8) e -1 round(1.8) e2 round(-1.8) e -2

Duas considera c oes nais:


Podemos considerar a exist encia no portugu es estruturado de uma constante chamada MAXINT, contendo sempre o MAIOR valor poss vel de ser representado em uma vari avel inteira. Em outras palavras, desde que A seja inteira, quando compararmos A com MAXINT, A ser a menor ou no m aximo igual a MAXINT, nunca maior. Para todos os efeitos pr aticos esse e o nosso innito (). Podem ser introduzidos pela pessoa que est a escrevendo o algoritmo quaisquer novos operadores matem aticos, desde que estes n ao sejam amb guos e sejam facilmente entend veis, a m de poderem ser seguidos mais tarde.

Div e Mod Existem duas importantes fun c oes matem aticas, a quem chamar-se- a div e mod e que s ao usadas em matem atica inteira. Ambas atuam sobre n umeros inteiros e d ao como resultado tamb em n umeros inteiros. Div devolve o resultado inteiro de uma divis ao. J a mod devolve o resto inteiro da divis ao de dois n umeros. Em ambos operadores, o segundo termo tem que ser diferente de zero. Em resumo, A div B, e o resultado inteiro da divis ao de A por B. Exemplo: 10 div 3 e3 5 div 3 e1 890 div 100 e8 1000 div 1 e 1000 A mod B e o resto inteiro da divis ao de A por B. Exemplo 10 mod 3 e1 5 mod 3 e2 890 mod 100 e 90 1000 mod 1 e0 As duas fun c oes se completam na express ao I mod J = I (I div J ) J . Exemplo: 20 mod 6 2 2 2 = = = = 20 - (20 div 6) * 6 20 - 3 * 6 20 - 18 2

c.q.d.

Um especial cuidado deve ser tomado quando o primeiro operando de div for menor que o segundo, por exemplo em 2 div 3. Neste caso, a resposta e 0. Esta regra segue v alida se o primeiro n umero e 0. Por exemplo, em 0 div 5, a resposta segue sendo zero e n ao h a erro nesta chamada. A mesma considera c ao pode ser feita na fun c ao mod. 2 mod 3 e 2 e 0 mod 5 e zero, sem erro nos dois casos.
vers ao de 23 de janeiro de 2009

49

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS suc, pred, ord e chr Para os tipos ordinais pr e-denidos (caracter, inteiro e l ogico), existem algumas fun c oes que podem ser usadas. Para cada tipo de operandos os universos s ao: inteiros neste caso, a seq u encia de ordena c ao e aquela dos n umeros inteiros da matem atica: ... , ..., -2, -1, 0, 1, 2, ... +. caracteres aqui a seq u encia e dada pelo c odigo nativo do ambiente, no caso o ASCII. booleanos a seq u encia e FALSO, VERDADEIRO. Ord A Fun c ao ord devolve o ordinal do operando dentro do seu universo original. Assim, a ord de um operando caracter, devolve o ordinal dentro do c odigo ASCII. A ord de um l ogico, considera o universo de 2 valores (V e F). e a ord de um n umero inteiro, e o pr oprio n umero inteiro. Embora atue sobre os 3 tipos acima, na verdade ela se aplica verdadeiramente aos caracteres. Por exemplo: ORD(-3) e -3. ord(a) e 97. ord(FALSO) e 0. ord(7) e 55, ord(W) e 87, ord(z) e 122, No caso dos caracteres, a resposta ` a fun c ao ord se encontra na tabela vista anteriormente. Consultamos o operando de ord na coluna referente a ASCII, e a resposta de ord e o n umero decimal que estiver na mesma linha. Chr A fun c ao chr e a fun c ao inversa da fun c ao ord, por em s o funciona para caracteres. Dado um n umero inteiro entre 0 e 255, para o c odigo ASCII e 0 e 64536 para o c odigo UNICODE, a fun c ao chr deste n umero devolve o caractere correspondente a ele. Para simular como o portugol faz isto, dado um n umero, procura-se na tabela em qual linha ele ocorre sob a coluna decimal, e a seguir responde-se com o caractere ASCII correspondente ` a mesma linha. Exemplo, CHR(97) e a, etc. Suc Trata-se da fun c ao sucessora, que nos devolve o pr oximo valor ao do operando considerado o seu universo original. Esta fun c ao s o se aplica a operandos ordinais pr edenidos (inteiro, caracter e l ogico). Se o operando for inteiro, a resposta tamb em ser a. Se o operando for l ogico, a resposta tamb em ser a. Da mesma maneira se o operando for caracter. suc(a) e b suc(FALSO) e VERDADEIRO suc(23) e 24, e assim por diante suc(1) e 2, CUIDADO ====> succ(9) e : e succ(9) e 10. Uma aplica c ao interessante para esta fun c ao e a substitui c ao do incremento de vari aveis. Por exemplo, em vez de fazer: I I + 1; podemos fazer I suc(I);
88-09, Pedro Kantek

50

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS Pred Esta fun c ao devolve o predecessor, e tamb em s o se aplica a ordinais pr e-denidos. Tamb em (tal como no suc) o tipo da resposta e o mesmo tipo do operando. Exemplos: pred(b) e a pred(FALSO) e VERDADEIRO pred(23) e 22, e assim por diante.

3.4.2

Relacionais

As express oes relacionais s ao as que envolvem os operadores =, =, >, , < e . Este cooperadores visam a estabelecer se uma dada proposi c ao e falsa ou verdadeira. E mum em qualquer linguagem de programa c ao, comparar-se 2 valores, perguntando, por exemplo, se o primeiro e maior do que o segundo. A resposta, na forma l ogica, dir a se a arma c ao e ou n ao e verdade. S ao eles: igual (=), diferente (=), maior (>), maior ou igual (), menor (<) e menor ou igual (). Estes operadores sempre relacionam duas vari aveis ou constantes de tipos compat veis. Por exemplo ao perguntar 3 > 5?, a resposta ser a falso. Note que n ao e permitido (ou seja gera-se um erro), misturar valores de tipos distintos. Ent ao, a compara c ao A = 3, embora logicamente pudesse estar correta (ou seja a letra A n ao e igual ao n umero 3), d a erro em qualquer linguagem de programa c ao e portanto est a proibida de ser usada na constru c ao de algoritmos. A exce c ao ` a regra acima e quando se comparam dois n umeros, sendo um deles do tipo inteiro e outro do tipo real. Embora de tipos diferentes (inteiro e real), a matem atica permite fazer essa compara c ao, j a que ambos s ao n umeros. Tem-se ent ao que os operandos poder ao ser de qualquer tipo, desde que compat veis, mas a resposta sempre ser a do tipo l ogico. Fun c ao Formato Objetivo Operando Resultado Exemplo Igual A = B Comparar o ambos intei- .V. se A = B 3 = 4 e .F., conte udo de A e ros, reals ou e .F. se A = 66.0 = 66 e .V., de B alfanum eriB. AB= ab e .F. cos Diferente A = B igual ao anterior igual ao an- .V. se A = B 3 = 4 e .V., 66.0 terior e .F. se A = = 66 e .F. B. AB= AB e .F. Maior A > B igual ao anterior ambos intei- .V. se A > B 5 > 2 e .V. ros ou reais e .F. se A 2 > 5 e .F. B. Maior ou A B igual ao anterior igual ao an- .V. se A B 5 2 e .V. igual terior e .F. se A < 2 2 e .V. B. Menor A < B igual ao anterior igual ao an- .V. se A < B 5 < 2 e .F. terior e .F. se A 2 < 5 e .V. B. Menor ou A B igual ao anterior igual ao an- .V. se A B 2 5 e .V. igual terior e .F. se A > 2 2 e .V. B.

3.4.3

L ogicas

As express oes l ogicas envolvem valores l ogicos (verdadeiro e falso) conectados por ope radores l ogicos, que s ao 3: E (), OU () e NAO ( ou ). Estes operadores
vers ao de 23 de janeiro de 2009

51

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS destinam-se as opera c oes l ogicas entre operandos. Eles atuam sobre os valores V (verdade) e F (falso). Acompanhe a seguir as tabelas verdade: Em termos verbais a express ao A B ser a verdadeira quando A e B forem verdadeiros e ser a falsa sen ao. Vendo na tabela a seguir: verdadeiro falso verdadeiro verdadeiro falso falso falso falso

A express ao A B ser a verdadeira quando A for verdadeiro ou B for verdadeiro ou ainda quando ambos forem verdadeiros. A express ao s o ser a falsa quando A e B forem falsos. Veja: verdadeiro falso verdadeiro verdadeiro verdadeiro falso verdadeiro falso

A), devolve o valor l Finalmente, a express ao A (lida como NAO ogico oposto ao de A. Ent ao verdadeiro e falso e falso e verdadeiro. ou verdadeiro falso Fun ca o E-l ogico falso verdadeiro Operando ambos l ogicos Resultado .V. se A e B s ao .V., .F. em caso contr ario .V. se A ou B s ao .V., .F. em caso contr ario .V. se A e .F. .F. se A e .V. Exemplo .V. .V. e .V. .V. .F. e .F. .F. .V. e .F. .F. .F. e .F. .V. .V. e .V. .V. .F. e .V. .F. .V. e .V. .F. .F. e .F. .F. e .V. .V. e .F.

Formato Objetivo A B Realizar a opera c ao E-l ogico

OUl ogico NAOl ogico

AB

Realizar a opera c ao OU-l ogico

ambos cos

l ogi-

A ou A

Nega logicamente A

l ogico

As palavras verdadeiro e falso bem como os s mbolos Ve F podem ser considerados constantes l ogicas tamb em chamadas booleanas e podem ser empregados livremente na constru c ao dos algoritmos. As duas constantes, formam um conjunto ordenado, e podemos dizer que o F (falso) precede o V (verdadeiro). Como uma ajuda, podemos associar o Falso ao zero, e o Verdadeiro ao 1. Com isto todas as rela c oes num ericas entre 0 e 1 continuam verdadeiras entre FALSO e VERDADEIRO. A grande import ancia dos valores l ogicos em portugol, decorre do fato de que qualquer compara c ao usando os operadores relacionais sempre devolve um l ogico. A import ancia das express oes l ogicas e que elas permitem conectar duas ou mais express oes relacionais, formando uma nova e maior express ao relacional. Veja-se nos exemplos:

88-09, Pedro Kantek

52

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS express ao l ogica (A B) C D (E F) G ser a verdadeira quando... A e C forem verdadeira ou B e C forem verdadeiras D for falsa E e F forem verdadeiras ou ent ao se G for verdadeiro

Exerc cio 11 Suponha que voc e vai escrever um algoritmo em portugol para resolver as raizes de ax2 + bx + c = 0. Quais vari aveis seriam necess arias e como elas seriam denidas ? Exerc cio 12 Quando crian ca Gauss resolveu a somat oria 1 + 2 + 3 + ... + 4998 + 4999 + 5000, de uma forma brilhante, intuindo toda a teoria de progress oes. Se voc e tivesse que resolver o problema de Gauss, quais vari aveis deniria, e como elas seriam denidas ? Exerc cio 13 Para cada uma das f ormulas a seguir, supor que ser a criado um algoritmo, no qual voc e dever a dizer quais vari aveis ser ao necess arias e como ser ao denidas:
1. per metro de um ret angulo 2. c alculo do terceiro angulo de um tri angulo, dados 2 angulos. 3. c alculo da quantidade de azulejos a serem colocados em um banheiro. 4. Volume de uma lata de leite 5. Pre co a pagar pelo estacionamento de um ve culo.

Exerc cio 14 Informe qual o resultado esperado para a vari avel VAR1
VAR1 VAR1 VAR1 VAR1 VAR1 VAR1 VAR1 (1 + (2 (3 + 1) 2)) - 2 sqr(3) 2 trunc(1.999) abs(-(3 - 4)) trunc(1.5) - frac(1.5) sen(3.14154) cos(3.14154) 2 (2 3)

Exerc cio 15 Nos exerc cios a seguir, o aluno deve:


Achar o resultado da express ao Descobrir-lhe o tipo Denir uma vari avel para conter este resultado.

Exemplo: 1 + 1 + 2, ter a como resposta: 4, inteiro, SOM:inteiro; SOM 4 1. 1 2 2. 1 + 3 1 3. trunc (3.5 + 2) 4. sen (1) 5. sen (0.33333) + cos (0.33333) 6. 1 2 3 4 5 -6
vers ao de 23 de janeiro de 2009

53

88-09, Pedro Kantek

CAP ITULO 3. ESCREVENDO ALGORITMOS 7. 2 > 3 8. 1 + 3 < 4 9. 5 = 4 + 1

Exerc cio 16 Na s erie de exerc cios a seguir, considere o seguinte conjunto de vari aveis:
X 5 (inteiro) Y 1 (inteiro) AA 0.5 (real) BB 4.9 (real) CC 3 (real) Para cada express ao pedida, calcule o resultado e determine o tipo (inteiro ou real) do resultado. 1. (AA - X) CC 2. CC + abs(trunc(BB)) 3. frac(AA) - AA 4. X + Y + CC 5. sqrt(trunc(BB-AA)) 6. (round(AA+BB)) mod CC 7. 1 + sqr(X - Y) 8. 1 + sqr(X) - Y 9. 5 X round(BB) 10. AA - abs(BB) 11. abs (AA - BB) 12. abs (AA) - abs (BB) 13. frac (int (BB)) 14. (X + Y) AA 15. trunc (Y + AA) 16. X + Y + AA + CC 17. X + CC 18. X + Y 19. cos (int(AA)) 20. round (AA) 21. round (BB + AA) 22. trunc (AA - BB)
88-09, Pedro Kantek

54

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS

Exerc cio 17 Quanto e 400 mod 51


30 mod 7 (5 mod 4) + (22 div 10) + (3 mod 2) 4376 mod 10 4376 mod 100 4376 mod 1000 4376 mod 10000 10 mod 4 10 div 4 cos (9 div 11) trunc (abs (round (6 div 6))) (1 + 5) mod 3 1 + (5 mod 3) (2 4) mod 2 2 (4 mod 2) 10000 mod 1 5 div 0

Exerc cio 18 Informe qual o valor nal para VAR3


VAR3 (3 2) (1 = 3) VAR3 (1 + 1) = (3 - 1) VAR3 (trunc(1.5 4) > 6) (1 = 2)

Exerc cio 19 Informe qual o valor da vari avel VAR2


VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VAR2 VERDADEIRO FALSO VERDADEIRO ( ...Eu n ao disse que nunca viajaria...) FALSO FALSO VERDADEIRO ( VERDADEIRO) ( FALSO) ( VERDADEIRO) (FALSO OU VERDADEIRO) ( VERDADEIRO) FALSO FALSO FALSO FALSO VERDADEIRO ( VERDADEIRO) VERDADEIRO VERDADEIRO

Exerc cio 20 Informe qual o valor para a vari avel VAR4.


VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 ((frac(0.999) - 1) > 0 1=2 1+2=2 0.5 2.5 - trunc(2.9000) 3>1+1 1+34 2 sqr(3 2 + 1) 12340+1 ((2 2) + 2) 3 33 > (32 + trunc(2.45) - frac(0.5)) 0.20 - 0.5 234+234 (4 (2 2 2) 3.5) (1 = 3 0) (trunc (sen (3.14/2)) = 1) VERDADEIRO FALSO ((1 + 2) > (6 div 3)) 55
88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

CAP ITULO 3. ESCREVENDO ALGORITMOS VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 VAR4 (5 div 2) > (trunc (3.5) + frac(3.5)) 72+2>0 5+5-5 (10 + frac(0) + trunc(0) - 10) > 5 5 > 6 div 3 + 2 mod 1 + 0 mod 6 2842 (1 + trunc (13.5) 2) (1 (2 + 1))

88-09, Pedro Kantek

56

vers ao de 23 de janeiro de 2009

Cap tulo 4

Comandos
4.1 Vis ao Top down e Bottom up

Estes termos, consagrados no jarg ao da inform atica, signicam maneiras de atacar e resolver um problema em computador. A maneira top down, que pode ser traduzido como de cima para baixo, pressup oe estudar o problema como um todo, e depois ir realizando a montagem do esquema completo, atrav es da execu c ao das partes, mas sem nunca esquecer o modelo completo. A vis ao bottom up, parte da constru c ao individual de todos os elementos, que poste poss riormente s ao juntados e testados. E vel fazer sistemas de computador usando as duas t ecnicas. Fazendo uma analogia (meio mambembe, mas v a l a) com a montagem de um carro, na vis ao top down a primeira coisa a fazer seria juntar a carroceria e as rodas, de maneira que o carro conseguisse se mover. Depois, os diversos sistemas e componentes iriam sendo instalados pe ca a pe ca no carro e a cada etapa o carro continuaria a andar em suas pr oprias rodas. A montagem terminaria quando o carro andasse sozinho. J a na vis ao bottom up cada um dos sistemas (motor, bancos, instrumenta c ao, ...) seria montado isoladamente, testado e em caso de sucesso levado aonde o carro est a sendo constru do e a posto em conex ao com os outros sistemas do carro. O processo tamb em termina quando o carro sair andando. O exemplo n ao e dos melhores, porque um carro e diferente de um programa de computador. L a se lida com coisas f sicas que ocupam espa co e pesam para ser carregadas. Aqui se fala de entidades abstratas (dados e programas). Outro exemplo, este talvez algo melhor e a proposta de escrever um livro. Antes de tudo h a que se ter o plano completo da obra, mas depois e poss vel visualizar a constru c ao top down e a constru c ao bottom up.

4.2

Sequ encia de execu c ao

Vale lembrar que a menos que o comando em quest ao determine outro caminho, os comandos dentro de um algoritmo v ao sendo executado seq uencialmente, come cando no primeiro e terminando no u ltimo, e sempre esperando terminar este para come car o pr oximo. Diz-se nestes casos que o uxo cai por decanta c ao. Assim, por exemplo, na seq u encia 1: A 1 2: B 2 + A 57

CAP ITULO 4. COMANDOS Pode-se armar com certeza que primeiro ser a executado o comando 1. Depois dele e que ser a executado o comando 2, e a o valor da vari avel A j a estar a estabelecido corretamente.

4.3

Entrada/Sa da

A maioria dos algoritmos necessitar a receber dados externos, e em algum momento do seu processamento precisar a comunicar respostas. Para resolver estes dois problemas atrav existem os chamados comandos de entrada/sa da. E es deles que o algoritmo se comunica com o mundo externo. Desprezando as complexidades inerentes a um processo de transfer encia de dados em um computador real eis a a principal vantagem do portugol , os comandos que se usar ao s ao dois: leia e escreva. O verbo ou comando leia signicar a uma entrada de dados externos para dentro do algoritmo. A forma desta entrada, isto e se os dados v ao entrar pelo teclado, v ao ser lidos do disco ou vir ao por uma linha telef onica e quest ao que n ao interessa agora. Nos pr oximos anos do curso, haver a muitas horas de aula sobre estas quest oes. Agora s o interessa o fato de que o dado entra para o algoritmo e pronto. Da mesma forma, para a sa da dos dados, usar-se- a o comando escreva, que tamb em n ao signica obrigatoriamente impress ao em papel. Estes dados podem estar saindo no v deo, em um plotter, em um disco, linha telef onica etc. O formato destes comandos e: leia (nome1, [nome2, ...]) Ao lado do verbo leia, e entre par enteses, deve-se escrever as vari aveis que dever ao ter seus valores fornecidos neste comando. Os identicadores citados j a dever ao ter sido denidos anteriormente no programa. Em geral (regra heur stica) dados que v ao ser lidos n ao precisam ser inicializados antes. O comando de impress ao e: escreva ([mensagem] nome1) Este comando externa um resultado dispon vel a quem est a operando o algoritmo. E claro que os valores a imprimir ter ao que ter sido inicializados e/ou calculados antes da impress ao. As vari aveis a escrever tem seu nome citado entre par enteses. Exemplos de leitura: VALOR1, VALOR2: inteiro leia (VALOR1, VALOR2) De impress ao VALOR1: inteiro VALOR1 .... escreva (O valor obtido e , VALOR1) Na impress ao e comum se colocar constantes alfanum ericas, mensagens ou textos explicativos antes ou depois dos dados para clarear e facilitar a leitura humana posterior. Por exemplo, ao calcular uma raiz na vari avel RZ, e muito melhor escrever escreva (A raiz e,RZ), do que simplesmente escreva (RZ). Neste u ltimo caso, o dado caria perdido (no v deo, no papel, ...) sem que o operador soubesse o que era aquilo. Identicamente, para imprimir uma area, e melhor fazer escreva (AR,m2), do que fazer s o escreva(AR).

4.3.1

Comando de Entrada

Permite a introdu c ao de valores para vari aveis previamente denidas.


88-09, Pedro Kantek

58

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS leia (<nome-1> [,<nome-2>,...]) Por exemplo, 1: A, B : inteiro 2: RAIZ : real 3: leia (A, B, RAIZ)

4.3.2

Comando de Sa da

Permite a gera c ao de resultados por parte do algoritmo. Permite mesclar vari aveis e express oes. Em geral, as express oes alfanum ericas inclu das no comando servem para auxiliar na interpreta c ao dos resultados gerados. escreva (<nome-1> | <express~ ao-1> [,<nome> | <express~ ao> ...]) Por exemplo, 1: escreva (a raiz procurada e , RAIZ)

4.4

O comando alternativo

Como j a se disse este e o comando que permite versatilidade e generalidade aos algoritmos. Ao permitir-se modicar caminhos tendo em vista certas condi c oes e que o algoritmo habilita o computador a pensar (as aspas, por favor).

4.4.1

Alternativa simples

Existem oportunidades em que um determinado comando dentro de um algoritmo s o deve ser executado se certas condi c oes o permitirem. Por exemplo, ao olhar se uma pessoa est a quites com as suas obriga c oes militares, isto deve ser feito apenas se o sexo da pessoa e masculino. Em nosso pa s, mulheres est ao desobrigadas de tais tratativas. O comando que identica uma a c ao condicional e o comando SE, que tem o seguinte formato: se <condi c~ ao> ent~ ao a c~ ao fimse A condi c ao e uma express ao cujo resultado nal e do tipo l ogico, isto e VERDADEIRO ou FALSO. A a c ao pode ser um comando simples ou uma seq u encia de comandos. Exemplo: 1: se DELTA < 0 ent ao 2: escreva (n ao e poss vel extrair esta raiz); 3: mse Para efeito de clareza na leitura de um algoritmo, costuma-se identar os comandos subordinados a uma condi c ao. Esta e a raz ao pela qual se deixou 3 espa cos em banco ao in cio do comando escreva no exemplo acima. A margem deve ser trazida ao que era antes do comando se, apenas quando se escrever o mse correspondente.
vers ao de 23 de janeiro de 2009

59

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

in cio

1: 2: 3: 4: 5: 6: 7: 8: 9:

se condi c ao ent ao c1 c2 ... sen ao c10 c11 ... mse

condi c ao v c1 c2 ... c10 c11 ...

4.4.2

Alternativa composta

uma extens E ao da alternativa simples. Neste caso podemos determinar o que fazer se a condi c ao verdadeira, e o que fazer se a condi c ao for falsa. O formato deste comando e (` a esquerda em linguagem algor tmica, portugol, e ` a direita em uxograma. Se a condi c ao estabelecida e verdadeira, s ao executados os comandos c1, c2, ... e n ao s ao executados os comandos c10, c11.... Se a condi c ao e falsa, s ao executados os comandos c10, c11, ..., mas n ao os primeiros. Neste caso a identa c ao tamb em e importante. Os comandos se, sen ao e mse come cam na margem corrente. Todos os demais comandos internos a este deixam uma identa c ao de 3 caracteres. Exemplo:

in cio DELTA 4 ACsqr(B )

DELTA < 0

1: 2: 3: 4: 5: 6:

DELTA 4 A C - sqr(B ) se DELTA < 0 ent ao escreva (raizes imagin arias) sen ao X sqrt(DELTA) mse

v escreva (raizes imagin arias) X sqrt(DELTA)

4.4.3

Alternativas aninhadas

Nada impede que exista uma condi c ao dentro de outra, (regra da programa c ao estruturada) e assim por diante. Nestes momentos a identa c ao e mais importante ainda. Repare no exemplo a seguir: Para ver a vantagem da identa c ao analisar-se- a exatamente o mesmo c odigo, por em escrito sem este recurso:
88-09, Pedro Kantek

60

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS

in cio

A=0 v B0

C=0 v D0

1: 2: 3: 4: 5: 6: 7: 8:

se A = 0 ent ao B0 se C = 0 ent ao D0 F3 mse G 77 mse se A = 0 B0 C=0 D0 F3 fimse G 77 fimse

F3

G 77

1: 2: 3: 4: 5: 6: 7: 8:

Exerc cio 21 Reescreva as condi c oes acima usando a condi c ao de igual.


Cada se tem que ter um mse correspondente. Ao percorrer o uxo, encontrando um mse encerra-se o u ltimo se aberto. Esta regra e importante para determinar o m de SEs aninhados. Ao examinar um comando se, deve-se agir da seguinte forma: Se a condi c ao que acompanha o se for verdadeira, os comandos internos ao se devem ser executados. Se, ao contr ario, a condi c ao n ao for verdadeira, ent ao, todos os comandos seguintes devem ser pulados at e ser encontrado o comando mse correspondente. Agora e hora de voltar um pouco na teoria e relembrar o conceito das opera c oes com operadores l ogicos (VERDADEIRO e FALSO). Tais opera c oes eram: , e . Usando-as, em conjunto com o comando se simples ou composto, podemos criar trechos de algoritmo muito ricos. Veja-se alguns exemplos: Denir se um valor esta compreendido entre 10 e 35, inclusive: 1: se VALOR > 9 VALOR < 36 ent ao
vers ao de 23 de janeiro de 2009

61

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS


2: 3: 4: 5:

... valor OK ... sen ao ... valor ERRADO ... mse

Denir se um valor num erico representativo de um m es, est a correto 1: se MES > 0 MES < 13 ent ao 2: ... mes OK ... 3: sen ao 4: ... mes ERRADO ... 5: mse Um certo c odigo pode assumir os seguintes valores: 10, 15, 17, 18 e 30. Testar se ele est a ou n ao correto. 1: se COD = 10 COD = 15 COD = 17 COD = 18 COD = 30 ent ao 2: ... c odigo OK ... 3: sen ao 4: ... c odigo ERRADO ... 5: mse e n As vezes e mais f acil organizar a sa da correta atrav es do SENAO ao do ENTAO, o que inverte o comando. Vejamos um exemplo. Um indicador estar errado, se assumir os valores: 1, 4, 5, 6, 7, ou 9. Organizar o comando: 1: se IND = 1 IND = 4 IND = 5 IND = 6 IND = 7 IND = 9 ent ao 2: ... indicador ERRADO ... 3: sen ao 4: ... indicador CERTO ... 5: mse Se entretanto, quis essemos n ao inverter as saidas, precisar amos negar as condi c oes. Atente-se a que a nega c ao de um conjunto de OUs e um conjunto de Es. 1: se IND = 1 IND = 4 IND = 5 IND = 6 IND = 7 IND = 9 ent ao 2: ... indicador CERTO ... 3: sen ao 4: ... indicador ERRADO ... 5: mse Outra maneira de escrever o comando acima, seria: se (IND = 1) (IND > 3 IND < 8) (IND = 9) ent ao 2: ... indicador ERRADO ... 3: sen ao 4: ... indicador CERTO ... 5: mse Finalmente, se quis essemos manter as saidas sem invers ao: 1: se (IND = 1) (IND 3 ou IND 8) (IND = 9) ent ao 2: ... indicador CERTO ... 3: sen ao 4: ... indicador ERRADO ... 5: mse
88-09, Pedro Kantek

1:

62

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS

Em resumo, a nega c ao de

IGUAL DIFERENTE MAIOR MENOR MENOR OU IGUAL MAIOR OU IGUAL E OU

e DIFERENTE IGUAL MENOR OU IGUAL MAIOR OU IGUAL MAIOR MENOR OU E

Outro Exemplo: Suponhamos o seguinte trecho de l ogica: Um aluno estar a aprovado se:
Tiver m edia maior ou igual a 7,00 E Tiver assistido a 45 ou mais aulas

Supondo que a m edia e a vari avel M, e que o n umero de aulas assistidas e a vari avel AA, poderia car usando SEs aninhados Veja na gura 4.4.3

in cio

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:

se MD 7 ent ao se AA 45 ent ao ...APROVADO sen ao ENCIA ...REPR. FREQU mse sen ao se AA 45 ent ao ...REPR. MEDIA sen ao ...REPR. NOS 2 mse mse

MD 7 v AA 45 v ...APROVADO ...REPR. ENFREQU CIA AA 45 v ...REPR. MEDIA ...REPR. NOS 2

usando SEs compostos 1: se MD 7 AA 45 ent ao 2: ...APROVADO 3: mse 4: se MD 7 AA < 45 ent ao 5: ...REPROVADO POR FREQUENCIA 6: mse 7: se MD < 7 AA 45 ent ao 8: ...REPROVADO POR MEDIA 9: mse 10: se MD < 7 AA < 45 ent ao 11: ...REPROVADO NOS 2 CRITERIOS 12: mse
vers ao de 23 de janeiro de 2009

63

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS misturarando tudo Funciona, embora n ao seja uma boa id eia. 1: se MD 7 AA 45 ent ao 2: ...APROVADO 3: sen ao 4: se AA 45 ent ao 5: ...REPROVADO POR MEDIA 6: sen ao 7: se MD 7 ent ao 8: ...REPROVADO POR FREQUENCIA 9: sen ao 10: ...REPROVADO NOS 2 CRITERIOS 11: mse 12: mse 13: mse Na programa c ao, o dem onio se esconde nos detalhes, Niklaus Wirth

Exerc cio 22 Dena um algoritmo que receba s eries de 3 valores reais indicativos de
lados de um tri angulo, medidos em cent metros. Para cada tripla, o programa deve responder as seguintes perguntas: 1. Tais lados podem formar um tri angulo ? 2. Este tri angulo e ret angulo ? 3. Este tri angulo e equil atero ? 4. Este tri angulo e is osceles ? 5. Este tri angulo e escaleno ? 6. Este tri angulo e acut angulo ? 7. Este tri angulo e obtus angulo ? Condi c oes do problema e triangulo ? maior < A+B retangulo maior2 = A2 + B2 equilatero A=B=C is osceles (A = B) ou (B = C) ou (A = C) escaleno (A = B) e (A = C) acut angulo maior2 < A2 + B2 obtus angulo maior2 > A2 + B2 Por exemplo se for lido dever a ser impresso 3,4,5 sim, ret angulo, escaleno 3,3,3 sim, equil atero, acut angulo 1,2,7 n ao 10,18,10 sim, is osceles, acut angulo

Exerc cio 23 Um c odigo est a certo se for maior que 100, ou igual a 50. Escrever um algoritmo portugol que receba este valor e some 1 no c odigo se ele estiver errado. Exerc cio 24 Uma data vem acompanhada de um campo chamado DIASEM, cujo valor e 1 para domingo, 2 para segunda, ... , 7 para s abado. Escrever um algoritmo portugol que receba DIASEM e verique se o dia corresponde a um dia u til. (semana inglesa).
88-09, Pedro Kantek

64

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS

Exerc cio 25 Escrever um algoritmo portugol que receba (n ao importa como) tr es valores num ericos (chamados A,B e C), e devolva a informa c ao OKquando se satiszerem as seguintes condi c oes: (A deve ser maior que 10 e menor do que 100) OU (B deve ser diferente de C E C deve ser maior que 50). Se a condi c ao n ao for satisfeita, o algoritmo deve devolver a mensagem ERRO

4.5

Estruturas de repeti c ao

Para obedecer ` a terceira estrutura da programa c ao estruturada e visando o reaproveitamento de c odigo, ver-se- ao agora as possibilidades de repetir partes do algoritmo. Estas estruturas cont em impl cito um comando de desvio (go to) e nas linguagens mais modernas eou nico desvio que e aceito. Os trechos de programas que s ao repetidos ao se usar as estruturas de repeti c ao s ao conhecidos genericamente com o nome de loops ou em portugu es la cos. Assim, um erro de programa c ao bastante comum e o chamado loop innito, quando inadvertidamente a condi c ao de sa da e tal, que nunca e alcan cada.

4.5.1

Repeti c ao com condi c ao no in cio: enquanto

Parece razo avel que um algoritmo deve ser criado para a execu c ao de um u nico conjunto de valores fornecidos como entrada. Por exemplo, ao escrever o algoritmo de aprova c ao de alunos na cadeira de algoritmos da UP, o programador s o precisa se preocupar com um u nico aluno, pois a regra de um vale para todos. N ao teria sentido descrever os mesmos procedimentos para todos os alunos, isto seria intermin avel, al em de deixar o algoritmo espec co para um determinado n umero de alunos. Falando em termos mais gen ericos, ao escrever um programa de computador que calcule o sal ario de um empregado, deve-se imaginar apenas um empregado e n ao os milhares que o computador processar a. A chave para este problema est a no reaproveitamento de instru c oes do algoritmo. Em outras palavras, uma vez escrito o caminho principal do algoritmo (o chamado caminho das pedras), n os vamos fazer todos os funcion arios (ou alunos) passarem por este caminho. Uma das chaves para este procedimento e o comando chamado ENQUANTO. Seu formato: enquanto <condi c~ ao> fa ca c1 c2 ... fimenquanto Este comando deve ser assim interpretado. A condi c ao e avaliada. Se ela for falsa, o algoritmo deve saltar todos os comandos subordinados e continuar a execu c ao ap os o comando menquanto. Entretanto, se a condi c ao for verdadeira, os comandos subordinados s ao executados, at e se encontrar o comando menquanto. Neste momento, h a um desvio na seq u encia de processamento e um retorno ao comando enquanto. A condi c ao e novamente avaliada. Se falsa, pulam-se os comandos subordinados. Se verdadeira, os comandos s ao novamente executados, e assim por diante. Se a condi c ao for uma verdade eterna, isto e, algo como 1 = 1, tem-se um la co innito, pois os comandos nunca deixar ao de ser executados. Por outro lado se a condi c ao for uma tautologia (sempre falsa), ent ao os comandos subordinados nunca ser ao executados. Exemplo Calcular a soma dos n umeros inteiros at e 100.
vers ao de 23 de janeiro de 2009

65

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

in cio

SOMA:real NUMERO:inteiro SOMA 0 NUMERO 1

NUMERO < 101 v SOMA SOMA + NUMERO NUMERO NUMERO + 1

1: 2: 3: 4: 5: 6: 7: 8: 9:

SOMA:real NUMERO:inteiro SOMA 0 NUMERO 1 enquanto NUMERO < 101 fa ca SOMA SOMA + NUMERO NUMERO NUMERO + 1 menquanto escreva (SOMA)

NUMERO < 101

escreva (SOMA)

Comandos internos ao comando enquanto devem estar identados de 3 espa cos, para clareza. enquanto <condi c~ ao> <comando-1> <comando-2> ... fimenquanto fa ca

1: 2: 3: 4: 5:

Por exemplo: leia A enquanto A < 11 fa ca escreva A AA+1 menquanto

4.5.2

Repeti c ao com vari avel de controle: para

O segundo comando que se usa para controlar la cos, atende pelo nome de para. Ele pressup oe a exist encia de uma vari avel de controle que ir a (como o nome diz) controlar o in cio e o m do la co. O formato do comando para e para vari avel DE valor-1 AT E valor-2 [PASSO valor-3] fa ca comando 1 comando 2
88-09, Pedro Kantek

66

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS ... comando n fimpara A regra de funcionamento do para e:


Antes de come car o trecho inclu do no para, a vari avel mencionada no comando e inicializada com o valor-1. Se este valor for menor ou igual ao valor-2 o trecho subalterno e executado. Ao chegar ao nal dos comandos, a vari avel e incrementada com o valor-3 (ou com 1 se nada for referenciado) H a um desvio incondicional, ao in cio do comando para, e o teste denido no passo <2> acima e refeito, com id enticas sa das. Dentro dos comandos subalternos ao para, a vari avel de controle n ao pode ser alterada pelos comandos escritos pelo usu ario. Os valores 1, 2 e 3 podem ser valores auto-declarados (caso mais comum) ou podem ser quaisquer vari aveis num ericas. Neste caso, elas tamb em n ao podem ser alteradas dentro do para. Por conven c ao, quando o valor do passo for 1, toda a cl ausula pode ser omitida. Exemplo: o comando PARA K DE 1 ATE 10 equivale ao comando PARA K DE 1 ATE 10 PASSO 1.

Uma especial observa c ao deve ser feita quando o valor-3 (o incremento) for negativo. Nestes casos h a v arias invers oes no comando, a saber:
O valor 1 deve ser maior do que o valor 2, j a que a vari avel de controle vai diminuir ao inv es de aumentar. O teste de saida e para maior ou igual, por id entica raz ao.

Veja-se dois exemplos para ajudar a entender e a guardar estas quest oes: para J de 1 at e 9 passo 2 fa ca escreva J mpara Aqui ser ao impressos os valores 1, 3, 5, 7 e 9. J a em 1: para J de 9 at e 1 passo -2 fa ca 2: escreva J 3: mpara Ser ao impressos os valores 9, 7, 5, 3 e 1. Devemos lembrar que todo comando para pode ser convertido em seu equivalente enquanto. D a mais trabalho (s ao 3 comandos) mas sempre e poss vel. J a a rec proca nem sempre e verdadeira. S o e poss vel transformar um enquanto em um para equivalente, quando se souber o n umero exato de itera c oes que o enquanto faria. Quando isto for desconhecido a convers ao n ao e poss vel. Exemplos: usando para equivalente usando enquanto para I de 1 at e 10 passo 2 I 1 escreva I enquanto (I 10) fimpara escreva I II + 2 fimenquanto
1: 2: 3:
vers ao de 23 de janeiro de 2009

67

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

4.5.3

Repeti c ao com condi c ao no nal: repita

Al em da instru c ao enquanto, a maioria das linguagens de alto n vel oferece outras formas de repetir uma parte do programa. A rigor, com uma u nica estrutura poder-seia resolver todos os problemas (como, demonstraram aqueles dois professores italianos). Entretanto, criar um programa n ao e um exerc cio acad emico, ou n ao e s o isso. Na universidade, n ao h a pressa, e o rigor cient co e o que importa. Na vida pr atica h a pressa, e o rigor e importante na medida em que garante qualidade, ele n ao e um m em s mesmo. Portanto, visando facilitar, acelerar e simplicar, tem-se aqui um outro comandos de repeti c ao: repita comando 1 comando 2 ... comando n at e <condi c~ ao> Os comandos internos ao repita s ao executados enquanto a condi c ao contida na cl ausula at e n ao for satisfeita. Isto e, quando o uxo chega ao at e, a condi c ao e avaliada. Se for verdadeira, o uxo segue ap os o at e. Se for falsa, o uxo retorna ao comando imediatamente seguinte ao repita. Embora parecido com o enquanto, o repita tem algumas diferen cas, a saber
Os comandos internos ao repita s ao executados sempre ao menos uma vez, independente da condi c ao. J a no enquanto, tais comandos podem n ao ser executados nem uma vez. O la co do enquanto ser a realizado se a condi c ao for VERDADEIRA. J a o la co do repita ser a realizado se a condi c ao for FALSA. A estrutura enquanto testa e faz. A estrutura repita faz e testa.

Em geral tudo o que se faz com um deles se pode fazer com o outro. A vantagem e que para determinadas situa c oes (que s ao espec cas de cada algoritmo) um ou outro pode ser mais indicado, isto e pode resolver o problema com menos l ogica adicional (o chamado overhead) tais como contadores, chaves, testes etc. Uma observa c ao meio extempor anea, mas ainda assim importante aos java-parlantes ou aos C-parlantes: Nestas duas linguagens o comando de repeti c ao com condi c ao no in cio e no nal e o mesmo. Trata-se do comando while. Muda apenas o local da condi c ao. Por esta raz ao, n ao existe a invers ao l ogica de sa da explicitada acima. Em Java e em C, a sa da quando a condi c ao aparece depois do bloco e quando a condi c ao e o contr FALSA. E ario do comando repita acima descrito. Veja-se em exemplos: No portugol acima descrito tem-se Neste trecho ser ao impressos os valores 4, 7, 10, 13, 16, 19 e 1000. J a em Java o trecho caria 1: J = 4 2: while { 3: system.out.println (J) // e assim mesmo ? 4: J = J + 3 5: J > 20 6: system.out.println (1000) } Ser a impresso pelo Java: 4, 1000.
88-09, Pedro Kantek

68

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS

in cio

J4

escreva J JJ+3

J > 20

J4 repita escreva J 4: JJ+3 5: at e J > 20 6: escreva 1000


1: 2: 3:

v escreva 1000

tipos de algoritmos (algo jocoso) Uma categoriza c ao com algo de chacota, mas que ajuda a entender os algoritmos: Le e imprime o algoritmo recebe um dado e a partir dele gera resultados (90% dos algoritmos pertencem a esta classe) Le e esquece o algoritmo recebe um dado, mas n ao gera resultado nenhum externo ao computador. (Por exemplo, um programa que atualize o rel ogio da m aquina) Inventa e imprima o algoritmo n ao recebe nada, mas ao ser acionado gera um resultado (Por exemplo, o algoritmo que estabelece letra pequena na impressora matricial. Inventa e esquece ???

Exerc cio 26 Denir algoritmo que escreva a soma dos primeiros 100 n umeros inteiros
(1, 2, 3, ... , 100)..

Exerc cio 27 Denir algoritmo que escreva a soma dos primeiros 100 n umeros pares inteiros (2, 4, 6, ... , 200). Exerc cio 28 Denir algoritmo que some todos os m ultiplos de 7 compreendidos entre 100 e 10000, e informe ao nal, quantos foram os m ultiplos e quanto resultou sua soma. Exerc cio 29 Escreva um algoritmo que leia dois n umeros inteiros n e m e:
Teste se m > n, se n ao for dar uma mensagem de erro e terminar o processamento Somar todos os m ultiplos de 13 que estiverem compreendidos entre n e m, inclusive Imprimir a soma ao nal

Exerc cio 30 Denir algoritmo que leia 17.000 n umeros reais e informe, quantos:
1. foram maiores do que 100;
vers ao de 23 de janeiro de 2009

69

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS 2. foram pares; 3. foram inteiros; 4. foram negativos;

Exerc cio Resolvido 1 Escreva um algoritmo que leia uma s erie de notas (que se
encerram quando for lido um n umero negativo) e ao nal escreva as duas maiores notas que apareceram. Por exemplo, se as notas lidas forem 8, 3, 2, 1, 10, 7, 8, 9, 5, 4 e 3, o algoritmo deve imprimir 10, 9 Como o exerc cio e um pouco mais complexo, vamos ver diversas estrat egias para a sua solu c ao: 1. primeira estrat egia 1: enquanto ... fa ca 2: leia(N) 3: se N > P ent ao 4: PN 5: mse 6: se N > S ent ao 7: SN 8: mse 9: menquanto DEFEITO: ao nal, P e S ter ao o mesmo valor (o maior) 2. segunda abordagem 1: enquanto ... fa ca 2: leia(N) 3: se N > P ent ao 4: PN 5: mse 6: se N > S ent ao 7: se N = P ent ao 8: SN 9: mse 10: mse 11: menquanto DEFEITO: Com a s erie 1, 10, 2, 8, 5 funciona Com a s erie 1, 8, 7, 2, 9 n ao funciona 3. terceira abordagem 1: inteiro NUM, NOT, PNU, PNO, SNU, SNO, X 2: X 1 3: PNO 0 4: SNO 0 5: enquanto X < 100 fa ca 6: leia (NUM, NOT) 7: se NOT > PNO ent ao 8: se PNO > SNO ent ao 9: SNO PNO 10: SNU PNU
88-09, Pedro Kantek

70

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS


11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:

mse PNO NOT SNO NUM mse se NOT > SNO ent ao se NOT = PNO ent ao SNO NOT SNU NUM mse mse menquanto escreva (PNO,PNU) escreva (SNO,SNU)

Eis a lista de vari aveis usada acima NUM = n umero do aluno atual NOT = nota do aluno atual PNU = n umero do aluno com a melhor nota at e agora PNO = melhor nota at e agora SNU = n umero do aluno com a segunda melhor nota at e agora SNO = segunda melhor nota at e agora X = contador at e 100

Exerc cio 31 Denir algoritmo capaz de jogar com o operador oJOGO DO PALITO,
e de vencer, sempre que poss vel. Este jogo tem a seguinte regra.
S ao dois jogadores, a quem chamaremos: m aquina (programa) e humano. O humano escolhe um n umero de palitos qualquer entre 20 e 30. A m aquina retira 1, 2 ou 3 palitos. O humano tamb em retira 1, 2 ou 3 palitos, e a seq u encia prossegue, at e que reste apenas um palito. Quem tirar o u ltimo palito perde. O programa deve atentar para impedir retiradas diferentes de 1 2 ou 3.

Dica: Estrat egia vencedora: deixar o advers ario sempre com 1, 5, 9, 13, 17, 21, 25 ou 29

Exerc cio 32 Dena algoritmo que calcule e escreva o somat orio expresso pela seguinte
s erie: S= 500 480 460 20 + + + ... + 2 3 4 26

Exerc cio 33 Escreva um algoritmo que leia uma seq u encia de n umeros positivos (a
condi c ao de m e a leitura do n umero -1) e escreva ao nal, qual o n umero mais pr oximo de 100 que foi lido. DESAFIO: escreva o n umero par mais pr oximo a 100.

Exerc cio 34 Escreva um algoritmo que leia uma seq u encia de n umeros positivos (a
condi c ao de m e a leitura do n umero -1) e escreva ao nal, qual o u ltimo n umero que foi lido. DESAFIO: escreva o ante-pen ultimo, ou -1 se n ao houver ante-pen ultimo
vers ao de 23 de janeiro de 2009

71

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

Exerc cio 35 Dados o seguinte trecho de l ogica escritos usando o enquanto, escrever
trecho equivalente usando o repita 1: Z 10 2: enquanto Z > 0 fa ca 3: ZZ-3 4: escreva (Z) 5: menquanto

Exerc cio 36 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. 1: GH 5 2: repita 3: escreva (ABC) 4: at e GH = 5

Exerc cio 37 Escreva o trecho a seguir, usando


1. o comando Enquanto e 2. o comando Repita
1: 2:

para J de 2 at e -10 passo -3 fa ca K sqr(J) 3: escreva K 4: mpara

PRIMO maior que 3), e escreva PRIMOse ele for primo, ou NAO se ele for divis vel. Por exemplo, se for lido 10, o programa dever dizer NAO PRIMO , e se for lido 11, dever dizer PRIMO.

Exerc cio 38 Escrever um algoritmo que leia um u nico n umero (que por deni c ao e

Exerc cio 39 Denir algoritmo que leia uma seq u encia de valores num ericos inteiros e determine, ao nal se eles estavam em ordem ascendente ou n ao. Se estiverem, deve imprimir EM ORDEM , e se n ao estiverem, deve imprimir FORA DE ORDEM . Exerc cio 40 Dena algoritmo que calcule e escreva o somat orio expresso pela seguinte s erie. O n umero de termos deve ser lido a priori.
1 1 1 1 S = 1 + 2 + 3 + ... + n 2 3 4 n+1

Exerc cio 41 Escreva o algoritmo que leia N e escreva S, onde


S= N 1 2 3 + + + ... + 2 3 4 N +1

Exerc cio 42 Dados o seguinte trecho de l ogica escritos usando o enquanto, escrever
trecho equivalente usando o repita. 1: A 10 2: B 20 3: enquanto (A + B) < 50 fa ca 4: AA+5 5: B B + 10 6: escreva (A+B)
88-09, Pedro Kantek

72

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS


7:

menquanto

Exerc cio 43 Dados o seguinte trecho de l ogica escritos usando o enquanto, escrever
trecho equivalente usando o repita. 1: K 5 2: enquanto K < 10 fa ca 3: K K + 1.5 4: escreva (K) 5: menquanto

Exerc cio 44 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. 1: T 0 2: repita 3: T T + 0.5 4: escreva (T 2) 5: at e T > 10

Exerc cio 45 Escreva o trecho a seguir, usando


1. o comando Enquanto e 2. o comando Repita para T de 1 at e 2 passo 2 fa ca escreva T 3: mpara
1: 2:

Exerc cio 46 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. a) 1: A 10 2: repita 3: AA+1 4: at e (A > 10) b) 1: GH 5 2: repita 3: escreva (ABC) 4: at e (GH = 5) c) 1: T 0 2: repita 3: T T + 0.5 4: escreva (T * 2) 5: at e (T > 10)

Exerc cio 47 Um comercial de r adio tem seu custo em fun c ao de 2 vari aveis, a saber: dura c ao e hora de irradia c ao, segundo a tabela:
Dura c ao At e 10 segundos De 11 a 30 segs Acima de 30 segs de 0 a 5h59min 5 US$ 12 US$ 16 US$ Hor ario de 6 a 20h59min 12 US$ 21 US$ 26 US$ 73 de 21 a 24h 8 US$ 17 US$ 22 US$
88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS Obs: o pre co acima e para o comercial inteiro, ou seja, NAO e por segundo de comercial. Denir algoritmo que: 1. leia o valor da cota c ao do d olar naquele dia 2. leia s erie de duplas (dura c ao,hora) escreva a dupla e o valor a ser cobrado em reais. A dura c ao est a dada em segundos. Os dados terminam quando for lida uma dupla com dura c ao igual a zero. Valores v alidos: 0 Dura c ao 60, 0 Hora 23 Por exemplo, se o d olar estiver cotado a R$ 2,20 e forem lidos dever ser impresso 10,4 26,40 R$ 20,23 37,40 R$ 10,23 17,60 R$ 0,0 m...

Exerc cio 48 Escreva um algoritmo capaz de determinar o valor da seguinte s erie:


2 3 4 5 6 + + + ... 1 4 9 16 25 O n umero de termos da s erie deve ser lido, e nunca ser a maior que 25. Ao nal do processamento, o algoritmo deve imprimir o valor da s erie. S=

Exerc cio 49 Denir um algoritmo que leia uma s erie indeterminada de valores positivos, sendo que a marca de m e a leitura do n umero -1. O algoritmo deve imprimir qual o u ltimo n umero lido, imediatamente antes do n umero -1. Por exemplo, se for lida a s erie 3, 7, 21, 4, -1, o algoritmo deve imprimir 4. Exerc cio 50 Dena e escreva um algoritmo para imprimir todos os n umeros perfeitos entre 1 e 500. Um n umero perfeito e aquele que e igual a soma de todos os seus fatores. O primeiro n umero perfeito e o 6 (6=1+2+3), logo por deni c ao o n umero 1 n ao e perfeito. Usar uma fun c ao para determinar se um n umero e ou n ao e perfeito. Outros n umeros s ao: 28, 496. Depois disso, descobrir qual o pr oximo n umero perfeito, maior que 500. Exerc cio 51 Dena um algoritmo que calcule e escreva a soma da s erie a seguir, considerando 50 termos:
S= 100 2 4 6 + + + ... + 3 5 7 101

Exerc cio 52 Denir algoritmo que receba uma s erie de triplas de n umeros inteiros. Para cada tripla deve ser gerada uma progress ao aritm etica supondo que:
O primeiro elemento da tripla e o termo inicial O segundo elemento da tripla e a raz ao O terceiro elemento da tripla e o n umero de termos

Os elementos da PA dever ao ser impressos. O processo termina quando for lido um n umero de termos igual a zero.

Exerc cio 53 Escreva um algoritmo que leia uma s erie de n umeros inteiros e positivos e ao nal do processamento escreva qual o maior deles. O processamento se encerra quando for lido qualquer n umero negativo que n ao deve ser considerado para efeitos de compara c ao.
88-09, Pedro Kantek

74

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS

Exerc cio 54 Escrever um algoritmo, que receba conjuntos de 3 notas de um aluno. O primeiro valor corresponde a m edia do primeiro semestre. O segundo valor e m edia do segundo semestre, e o terceiro valor correspondendo a nota nal. Existe uma vari avel no algoritmo (pr e-denida) chamada QTD-APROV. Para cada aluno aprovado, o algoritmo deve somar 1 em QTD-APROV. Regra de aprova c ao:
(N1 3 + N2 3 + N3 4) 10 7 Os dados terminam quando o primeiro valor da s erie for negativo. Por exemplo, se QTDAPROV tiver o valor 0, e forem lidas as triplas (5,7,2), (8,8,6), (1,10,5) e (-1,0,0) o resultado nal de QTD-APROV ser a 1.

Exerc cio 55 Denir um algoritmo que leia uma s erie de pares de valores inteiros que representam COMPRIMENTO e LARGURA de um ret angulo. Calcular e imprimir a area do ret angulo se o per metro do mesmo for superior a 25. Os dados se encerram quando for lida a dupla zero,zero. Por exemplo, se forem lidas as duplas (2,2), (10,8), (10,1) e (0,0) s o ser a impressa a area 80, equivalente ` a dupla (10,8). Exerc cio Resolvido 2 Imagine um rel ogio anal ogico de ponteiros. N ao existe o
ponteiro de segundos, e os ponteiros realizam movimentos discretos, isto e, eles s o se movem a cada 60 segundos. Escreva um algoritmo que leia diversos conjuntos de hora e minuto, e para cada conjunto lido, informe qual o menor angulo que os dois ponteiros fazem entre si ao representar a hora informada. O algoritmo termina quando for lida a dupla 0,0. Os valores permitidos para hora est ao entre 0 e 11 e para minuto os valores v alidos est ao entre 0 e 59. A sa da do resultado pode ser em graus e d ecimos de grau, ou se o aluno preferir em graus e minutos. 1: algoritmo ponteiro 2: inteiro h m 3: real ah am qtm angulo 4: leia (h,m) 5: enquanto h = 99 fa ca 6: qtm (h * 60) + m 7: ah qtm * 0,5 8: am qtm * 6 9: enquanto ah 360 fa ca 10: ah ah - 360 11: menquanto 12: enquanto am 360 fa ca 13: am am - 360 14: menquanto 15: se se ah > am ent ao 16: angulo ah - am 17: sen ao 18: angulo am - ah 19: mse 20: se se angulo > 180 ent ao 21: angulo 360 - angulo 22: mse 23: escreva (angulo) 24: leia(h,m) 25: menquanto 26: m{algoritmo}
vers ao de 23 de janeiro de 2009

75

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

Exerc cio 56 Interprete o seguinte trecho de algoritmo, informando (em portugu es) o que faz ou para que serve o algoritmo analisado. Estude e informe a condi c ao de m. Se necess ario, realize um chin es sobre os dados. 1: inteiro CA,CE 2: leia(CA,CE) 3: enquanto CA = CE fa ca 4: se CA < CE ent ao 5: escreva(CA) 6: mse 7: escreva(CE) 8: leia(CA,CE) 9: menquanto Exerc cio 57 Interprete o seguinte trecho de algoritmo, informando o que faz ou para que serve o algoritmo analisado. Estude e informe a condi c ao de m. Se necess ario, realize um chin es sobre os dados. 1: inteiro A,B,C 2: real X 3: {A e } 4: {B e } 5: {C e } 6: {X e } 7: leia(A) 8: B 0 9: enquanto A = 0 fa ca 10: se A < B ent ao 11: BA 12: mse 13: leia(A) 14: menquanto 15: escreva (B/2) Exerc cio 58 Interprete o seguinte trecho de algoritmo, informando o que faz ou para que serve o algoritmo analisado. Estude e informe a condi c ao de m. Se necess ario, realize um chin es sobre os dados. 1: real PI,R,C 2: {R e } 3: {C e } 4: PI 3.141592 5: leia(R,C) 6: enquanto (R = 0) (C = 0) fa ca 7: se R = 0 ent ao 8: C 2 PI R 9: sen ao 10: R C (2 PI) 11: mse 12: escreva(R,C) 13: leia(R,C) 14: menquanto Exerc cio 59 Siga o seguinte algoritmo, e informe quais os valores de A, B, C e D que s ao impressos ao nal.
88-09, Pedro Kantek

76

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS


1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:

inteiro A, B, C, D A0 B 10 CB3 DB+C+A enquanto D < 0 fa ca AA+1 DD+1 menquanto se A > 0 ent ao DD2 sen ao BB2 mse escreva (A,B,C,D)

A:__________ B:__________ C:__________ D:__________

Exerc cio 60 BrinquedosPIRRALHOS ENDIABRADOS e um grande distribuidor de presentes em todo o pa s. Recentemente, a empresa teve a oportunidade de comprar 15.000 pequenos brinquedos, todos embalados em caixas retangulares. O objetivo da compra, foi colocar cada brinquedo em uma esfera colorida, para revend e-los como surpresa, mais ou menos como o Kinder ovo. Existem esferas de raios 10, 20 e 30 cm. Cada brinquedo, tem um n umero de ordem, e as suas 3 dimens oes A, B e C, medidas em cent metros. Denir um algoritmo que leia 15.000 qu adruplas (ordem,A,B,C) e para cada uma delas escreva a ordem do brinquedo e o raio da esfera necess ario. Todos os brinquedos caber ao em uma das esferas. Exerc cio 61 Supondo um trecho de c odigo escrito em pseudo-c odigo:
para I de 1 at e 100 fa ca para J de 3 at e 11 passo 2 fa ca para K de 5 at e 25 passo 5 fa ca 4: escreva (I,J,K) 5: mpara 6: mpara 7: mpara Imagine que voc e precisa re-escrever este c odigo e a sua nova linguagem n ao e estruturada, o que signica que n ao existem as estruturas para ... mpara, enquanto ... menquanto e nem repita ... at e. Voc e s o conta com labels, testes e desvios. Eis como caria: 1: algoritmo qualquer 2: I 1 3: J 3 4: K (*1) 5: L1: se (I > 100) 6: v apara FIM 7: sen ao 8: se (J > 11) 9: v apara L2 10: sen ao 11: se (K > (*2)) 12: vapara L3
1: 2: 3:
vers ao de 23 de janeiro de 2009

77

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS sen ao escreva (I,J,K) K K + (*3) v apara L1 mse mse mse 20: L3: J J + (*4) 21: K 5 22: v apara L1 23: L2: I++ 24: J (*5) 25: K 5 26: v apara L1 27: malgoritmo Os valores propostos para (*1) (*2) (*3) (*4) e (*5) para que os dois trechos sejam equivalentes s ao
13: 14: 15: 16: 17: 18: 19:

a) b) c) d) e)

5, 5, 5, 1, 1,

25, 5, 25, 25, 25,

5, 5, 5, 1, 1,

2, 2 2, 11 2, 11 1, 2 2, 1

Resposta certa: letra (a)

4.5.4

Comando de m ultipla escolha: Escolha

Nos casos em que h a m ultiplas sa das para um determinado teste, n os podemos usar a estrutura de alternativas simples e compostas, devidamente encadeadas. Tal uso (de acordo com os dois mestres italianos) sempre e suciente para a solu c ao de qualquer problema. Entretanto, para simplicar a poss vel solu c ao, in umeras linguagens tem o comando de teste m ultiplo (COBOL tem o GOTO depending ON, PASCAL tem o comando CASE, dbase tem o CASE, APL tem o desvio para um vetor etc). Aqui, usar-se- a o seguinte formato: escolha <express~ ao> caso valor-1 [: valor-2 caso valor-a [: valor-b ... sen~ ao : comando-z fimescolha ...] : comando-1 ...] : comando-a

O funcionamento deste comando e simples: A express ao que aparece ao lado do comando Escolha e avaliada, e deve gerar um resultado determinado. Este resultado ser a comparado com os valores colocados ao lado direito das palavras caso. Quando um valor igual for encontrado, o comando colocado o seu lado ser a executado. Finalmente, se nenhum valor for igual, e existir a cl ausula sen ao, esta ser a executada. Exemplo 1: ESCOLHA (A + 1) 2: CASO 1 : comando-1; 3: CASO 2 : 3 : 4 : comando-2; omando-3; 4: SENAO: 5: FIMESCOLHA
88-09, Pedro Kantek

78

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS Aqui, se A for zero, ser a executado o comando-1. Se A for 1, 2 ou 3, ser a executado o comando-2. Se A tiver qualquer valor diferente de 0, 1, 2 ou 3, ser a executado o comando-3.

4.5.5

Abandono de itera c ao: abandone

Este comando exige uma sa da incondicional de cada uma das estruturas de repeti c ao (enquanto, repita ou para), independente de condi c oes. Geralmente, este comando e colocado dentro de um se. O desvio sempre se d a para o comando seguinte ao m da estrutura que est a sendo usada. Eis o formato do comando abandone Este comando s o tem sentido quando emitido dentro de um la co de processamento (dentro de um enquanto, repita ou para). Ele e utilizado quando se deseja - a partir de uma determinada condi c ao - abandonar o processo iterativo em curso. Seu funcionamento e simples: ao ser executado, este comando provoca um desvio incondicional para o comando subseq uente ao m do la co. Exemplo 1: enquanto A > 10 fa ca 2: comando 1... 3: comando 2... 4: se B = 5 ent ao 5: abandone 6: mse 7: comando 10... 8: menquanto 9: comando 20... 10: ... Neste caso, quando abandone for executado, independente do estado da vari avel A (e do teste (A > 10), ser a executado o comando 20. Assim, quando abandone e executado dentro de um para, desvia-se para o comando seguinte ao mpara. Da mesma forma, quando dentro de um repita executa-se o seguinte a at e ... . Se existirem dois ou mais la cos (um dentro do outro), e for emitido um abandone, ele vale para o la co mais interno. Exemplo 1: enquanto (X = 10) fa ca 2: comando 1 ... 3: enquanto (Y > 20) fa ca 4: comando 10 ... 5: se (Z = 8) ent ao 6: abandone 7: mse 8: comando 30 ... 9: menquanto 10: comando 40... 11: menquanto 12: comando 50... Neste caso, ao ser executado o abandone, ser a executado o comando 40 e n ao o comando 50 como poderia parecer a primeira vista.

Exerc cio 62 Dados o seguinte trecho de l ogica escritos usando o enquanto, escrever
trecho equivalente usando o repita.
vers ao de 23 de janeiro de 2009

79

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS


1: 2: 3: 4: 5:

A0 enquanto A = 3 fa ca AA+1 escreva (A) menquanto

Exerc cio 63 Dado o seguinte algoritmo que utiliza o comando repita escrever comandos equivalentes usando o comando enquanto. 1: A 10 2: repita 3: AA+1 4: at e A > 10

Exerc cio 64 Dado o trecho a seguir, escrito usando o comando para, reescreve-lo
usando o comando enquanto 1: para J de 1 at e 20 fa ca 2: XJ3 3: escreva (X) 4: mpara

Exerc cio 65 Dado o trecho a seguir, escrito usando o comando para, reescreve-lo
usando o comando enquanto 1: para SEMENTE de 0 at e 100 passo 2 fa ca 2: SEM1 SEMENTE 2 3: SEM2 SEMENTE + 1.5 ABC 4: MEDIA (SEM1 + SEM2) 2 5: escreva MEDIA 6: mpara

Exerc cio 66 Escreva o trecho a seguir, usando


1. o comando Enquanto e 2. o comando Repita
1: 2: 3:

para K de 5 at e 25 passo 3 fa ca escreva K+1 mpara

Exerc cio Resolvido 3 Dois n umeros s ao considerados amigosquando um n umero e igual a soma dos fatores do outro n umero. Por exemplo, 220 e 284 s ao amigos , pois 220 e igual a soma dos fatores de 284 (142,71,4,2,1) e 284 e a soma dos fatores de 220 (110 55 44 22 20 11 10 5 4 2 1). Denir algoritmo que escreva os pares de n umeros amigos existentes entre 1 e 500. 1: inteiro i,j,k,l,m,n 2: inteiro fun c ao somf (inteiro a) 3: inteiro var ind,som 4: som 0 5: para ind 1 to a-1 fa ca 6: se a mod ind = 0 ent ao 7: som som + i 8: mse 9: mpara
88-09, Pedro Kantek

80

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS


10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:

retorne som m{fun c ao} para i 1 to 500 fa ca escreva i para j i to 500 fa ca m somf(i) n somf(j) se (m = j) (n = i) ent ao escreva (i,j) mse mpara mpara

Exerc cio Resolvido 4 Escreva uma fun c ao que receba um n umero inteiro positivo
k , calcule e devolva o pr oximo n umero primo x, onde k x. Solu c ao Para resolver este exerc cio, consideraremos denida e operante a fun c ao EPRIMO, com o seguinte cabe calho l ogico fun c~ ao EPRIMO (inteiro x), que devolve VERDADEIRO quando x e primo e FALSO sen ao. Eis a resposta 1: inteiro fun c ao PROXPRIM (inteiro K) 2: enquanto 1=1 fa ca 3: se EPRIMO(K) ent ao 4: retorne K 5: abandone 6: mse 7: K++ 8: menquanto 9: mfun c ao Atente para a condi c ao terminadora do enquanto. J a que a sa da se dar a atrav es do abandone, qualquer condi c ao sempre verdadeira pode ser colocada a .

Exerc cio Resolvido 5 Voc e tem uma cole c ao seq uencial de 10.000.000 de apostas na sena. Para cada apostador, existem os 6 n umeros em que ele jogou e mais o n umero da aposta, que posteriormente identicar a o apostador. Suponha uma fun c ao l ogico ganhou (inteiro a1, a2, a3, a4, a5, a6) que devolve VERDADEIRO se esta aposta e vencedora e FALSO sen ao. Suponha tamb em que a condi c ao de m de dados ea leitura de a1 negativo. Solu c ao Para resolver este exerc cio, duas hip oteses podem ser consideradas: a primeira faz uma dupla leitura (uma fora e outra dentro do loop). 1: algoritmo SENA 2: inteiro a1, a2, a3, a4, a5, a6, apostador 3: leia (a1, a2, a3, a4, a5, a6, apostador) 4: enquanto a1 > 0 fa ca 5: se ganhou (a1, a2, a3, a4, a5, a6) ent ao 6: escreva apostador 7: mse 8: leia (a1, a2, a3, a4, a5, a6, apostador) 9: menquanto 10: m{algoritmo}
vers ao de 23 de janeiro de 2009

81

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS A segunda abordagem, faz apenas uma leitura, mas a fun c ao e nitidamente menos limpa e clara: 1: algoritmo SENA2 2: inteiro a1, a2, a3, a4, a5, a6, apostador 3: a1 1 {poderia ser qualquer valor maior que zero} 4: enquanto a1 > 0 fa ca 5: leia (a1, a2, a3, a4, a5, a6, apostador) 6: se a1 > 0 ent ao {pode ter chegado o negativo} 7: se ganhou (a1, a2, a3, a4, a5, a6) ent ao 8: escreva apostador 9: mse 10: mse 11: menquanto 12: m{algoritmo}

Exerc cio Resolvido 6 Seja agora a tarefa, muito comum em programa c ao, de
obter n umeros constru dos segundo uma certa lei de forma c ao, a princ pio desconhecida. S o se conhecem os primeiros n umeros de uma seq u encia deles, e o que e pedido, e o resto dos n umeros. Por exemplo, se a seq u encia for 1,2,3,4,5,6 e for pedido o pr oximo n umero, a resposta e 7, por que a lei de forma c ao e a dos n umeros naturais. Entretanto, outras seq u encias podem ser menos evidentes e conseq uentemente mais trabalhosas. Vejamos alguns exemplos: 5 1 4 8 5 4 16 512 36 8 7 9 11 13 15 17 4 9 16 25 36 49 7 12 19 28 39 52 14 24 38 56 78 104 8 13 20 29 40 53 11 30 67 128 219 346 25 36 49 64 81 100 729 1000 1331 1728 2197 2744 144 324 576 900 1296 1764 64 216 512 1000 1728 2744 ... 19 ... 64 ... 67 ... 134 ... 68 ... 515 ... 121 ... 3375 ... 2304 ... 4096

Uma estrat egia e pesquisar os poss veis valores de x, y e z , usando intui c ao, pistas, experi encias passadas, ao estilo de Sherlock Holmes. Uma segunda estrat egia e usar da informa c ao de que 2 x, y, z, 7 e adotar a for ca bruta, fazendo 1: para X de 2 at e 7 fa ca 2: para Y de 2 at e 7 fa ca 3: para Z de 2 at e 7 fa ca 4: para I de 1 at e 10 fa ca 5: escreva ... 6: mpara 7: escreva ... 8: mpara 9: mpara 10: mpara

Exerc cio 67 Escrever um algoritmo que leia uma s erie indeterminada de n umeros positivos. A leitura deve prosseguir at e ser lido o n umero 1203, quando o programa dar a mensagem 1203 ENCONTRADO e terminar o processamento. Se este n umero n ao for encontrado, ao nal dos dados (quando for lido um n umero negativo) o programa deve
88-09, Pedro Kantek

82

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS imprimir o n umero lido mais pr oximo de 1203, com a mensagem xxx MAIS PROXIMO , onde xxx e o n umero em quest ao.

Exerc cio 68 Dena um algoritmo capaz de somar os primeiros 50 n umeros m ultiplos de 4, come cando no 4 (isto e: 4, 8, 12, ...400). O algoritmo deve imprimir o resultado ao nal. Exerc cio 69 Escreva um algoritmo capaz de calcular e imprimir o valor da somat oria dada pela s erie a seguir. O n umero de termos e lido ao in cio do algoritmo.
S= 12 22 32 + + + ... 1 2 4

Para resolver este tipo de exerc cio, deve-se buscar a f ormula do termo gen erico. Sem esta f ormula e dif cil programar a solu c ao. Fica: Tn = e sobretudo S=
i=1

12 + (n 1) 10 2 (n 1)
n

Tn

ou S=

n i=1

12 + (n 1) 10 2 (n 1)

Exerc cio 70 Suponha


X2 Y5 enquanto (X < 5) (Y < 3) fa ca X++ Y- 6: menquanto
1: 2: 3: 4: 5:

Ao se encerrar este algoritmo quais os valores de X e Y ? O que acontece se se tirar o E colocando em seu lugar OU

Exerc cio 71 Seja


1: 2: 3: 4: 5: 6:

A 56 B 10 enquanto (A+B) mod 14 = 0 fa ca A A + 10 BA+2 menquanto


quais os valores de A e B ao nal ? Se A come car com 52, o que acontece com o algoritmo ?

Exerc cio 72 Qual e o 30 n umero primo ? Exerc cio 73 Escreva o algoritmo de uma fun c ao que receba um n umero inteiro positivo X e devolva o pr oximo primo maior ou igual a X.
vers ao de 23 de janeiro de 2009

83

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

Exerc cio 74 Dois inteiros positivos a e b s ao relativamente primos se n ao tiverem fatores comuns exceto 1. Por exemplo, 4 e 25 s ao relativamente primos, apesar de nenhum deles o ser. Escreva uma fun c ao que receba X e Y e devolva .V. se eles forem primos relativos e .F. sen ao. A prop osito, os n umeros 17.773 e 14.973 s ao relativamente primos ? Exerc cio 75 Diamantes s ao classicados atrav es de 3 testes distintos, como segue:
Dureza maior do que 12 Percentagem de impurezas menor que 45 Resist encia ` a tra c ao maior que 600 Kgf

Se o diamante passa nos tr es testes, ele ganha o grau 50. Se passa em dois, ganha o grau 40, se passa apenas em um teste, ganha 30, e se n ao passa em nenhum ganha o grau 15. Escrever um algoritmo que leia um conjunto de vari aveis formado por N umero da partida (inteiro), dureza (real), percentagem de impurezas (real), resist encia (real); e escreva o n umero da partida e a nota do diamante. Os dados terminam quando for lida a partida n umero zero. A nota do diamante deve ser calculada por uma fun c ao.

Exerc cio 76 Escreva algoritmo capaz de criar e imprimir uma tabela de angulos, senos
e cossenos, para todos os angulos de 0 a 90 graus. Exemplo ANGULO SENO COSSENO 0o 0 1 1o 0.01745240644 0.9998476952 2o 0.0348994967 0.999390827 3o 0.05233595624 0.9986295348 4o 0.06975647374 0.9975640503 5o 0.08715574275 0.9961946981 6o 0.1045284633 0.9945218954 7o 0.1218693434 0.9925461516 ...

Exerc cio 77 Denir um algoritmo que escreva a diferen ca entre o 21. n umero primo e o 13. n umero primo. Exerc cio 78 Resolver o seguinte problema usando o comando ESCOLHA. Numa organiza c ao, o n umero de dependentes limita a quantidade de dias que um empregado pode faltar anualmente. Assim, empregados com menos de 3 dependentes podem faltar 5 dias. Quem tem 4, 5 ou 6 dependentes pode faltar 8 dias, e quem tem mais de 6 dependentes pode faltar 11 dias. Escrever algoritmo que leia o n umero de dependentes e escreva a quantidade de dias que podem ser fruidos anualmente para cada caso. Exerc cio 79 Um concurso de vendas e realizado dentro de uma empresa. Por raz oes territoriais, cada venda unit aria, d a direito a um b onus cujo valor depende do estado em que foi feita a venda, segundo a tabela: PR e SC d ao direito a 5 b onus RS, SP e RJ 4 b onus MG, GO, MS e TO 3 b onus BA e PE 2 b onus demais estados n ao citados 1 b onus
88-09, Pedro Kantek

84

vers ao de 23 de janeiro de 2009

CAP ITULO 4. COMANDOS Denir algoritmo que receba uma s erie de vendas no formato (valor, estado) e para cada uma informe a quantidade de b onus de direito. Os dados terminam quando for lido um estado igual a XX ou um valor de vendas negativo.

Exerc cio 80 Denir um algoritmo que leia uma s erie de n umeros inteiros e positivos (condi c ao de m: leitura de um negativo). O algoritmo deve calcular e imprimir a m edia dos n umeros lidos EXCLU IDOS os zeros. Exerc cio 81 Existe um conjunto de muitos n umeros inteiros e positivos, agrupados tr es a tr es. Deve-se escrever um algoritmo capaz de:
Ler os tr es n umeros Identicar o maior deles, e rejeit a-lo Calcular a m edia entre os dois n umeros restantes Imprimir os dois n umeros selecionados e a m edia.

A pesquisa termina quando o primeiro n umero dos tr es lidos, for negativo.

Exerc cio 82 Dados conjunto de 20 pares de n umeros, realizar sobre eles o seguinte
processamento:
Se ambos forem pares, eles devem ser somados Se ambos forem mpares, devem ser multiplicados Se um for par e outro mpar, deve-se imprimir zero.

Para cada conjunto lido, deve-se imprimir os dois n umeros e o resultado obtido segundo as regras acima.

Exerc cio 83 Uma elei c ao e anulada se a somat oria de votos brancos e nulos e superior
` a metade dos votos totais. Suponha que numa elei c ao existem 3 candidatos e para apur a-la, deveremos ler um conjunto indeterminado de votos (n umeros inteiros), usando a regra:
1 = voto no candidato n umero 1 2 = voto no candidato n umero 2 3 = voto no candidato n umero 3 8 = voto em branco 9 = voto nulo.

A entrada de dados termina quando for lido um voto igual a zero. Caso ocorra um empate, dever ser vencedor o candidato mais velho. As idades s ao: 1=55 anos, 2=58 anos e 3=47 anos. Escrever um algoritmo que: 1. Verique se a elei c ao foi v alida 2. Se foi, quem a venceu.

Exerc cio 84 Escreva um algoritmo que leia uma sequ encia de n umeros positivos (a leitura e um depois do outro, por restri c ao do problema n ao se pode usar um vetor) com condi c ao de m igual a leitura de um n umero negativo e escreva o u ltimo n umero lidos que tenha sido maior que 100.
vers ao de 23 de janeiro de 2009

85

88-09, Pedro Kantek

CAP ITULO 4. COMANDOS

Exerc cio 85 Calcular a soma total e o produto total de uma s erie de n umeros inteiros e positivos que ser ao fornecidos. A s erie termina quando for lido o n umero -1. Exerc cio 86 Escreva um algoritmo capaz de move atribu das a atletas de gin astica ol mpica. Tal como na pr atica, este algoritmo deve eliminar a maior e a menor notas, e a seguir calcular e imprimir a m edia entre as duas notas restantes.

88-09, Pedro Kantek

86

vers ao de 23 de janeiro de 2009

Cap tulo 5

Nassi-Schneiderman
Fluxos e Nassi-Schneiderman
Al em da maneira pela qual descreveremos nossos algoritmos (que e atrav es do Portugol), existem outras formas de representar algoritmos. Falaremos de mais duas: a primeira e a linguagem dos uxogramas. Tem import ancia hist orica na inform atica, pois foi a primeira (e durante muito tempo u nica) representa c ao de programas e similares. A seguir uma lista dos principais s mbolos usados em uxogramas
Iniciador/terminador Processo Alternativa

Conector

Entrada/sada Fluxo de processamento

Fluxogramas perderam sua condi c ao de u nicas ferramentas, entre outras raz oes, pelas a seguir expostas:
Prestam-se mal ` a programa c ao estruturada, pois permitem a constru c ao de algoritmos n ao estruturados. Exigem capricho, dando muito trabalho para serem feitos e mantidos. S ao necess arias quantidades enormes de papel, pois h a um overhead muito grande, isto e, s o se escreve dentro dos quadrinhos, e boa parte do papel se perde. Embora hoje j a existam programas para fazer e guardar uxos em computador (como por exemplo o FLOWCHART e o AUTOFLOW), eles n ao s ao muito pr aticos para este trabalho. Assim para seguir a tend encia moderna (que e guardar matriz da documenta c ao em computador e n ao em papel) o uxograma resulta inc omodo.

87

CAP ITULO 5. NASSI-SCHNEIDERMAN Outra possibilidade de representa c ao e atrav es dos diagramas de NASSI & SHNEIDERMAN, tamb em conhecidos como mapas de CHAPIN ou estructogramas. Alguns autores negam import ancia a este trabalho, armando tratar-se de pseudo-c odigo (no caso, PORTUGOL), apenas escrito de outra maneira. Outros, reconhecem for ca e inova c ao nesta id eia. A id eia destes diagramas e formatar em um ret angulo todas as informa c oes do processamento usando marcas que identiquem as diversas opera c oes permitidas. Tem a vantagem sobre os uxogramas de n ao permitirem o desvio. Os s mbolos usados s ao: nome da estrutura objetivo
comando inicial objetivo (nome do procedimento) nome da entrada caminho cr tico

condi ca o a testar falso, a c ao

verdadeiro, a c ao 1 verdadeiro, a c ao 2 comando a repetir condi c ao de m condi c ao comando a executar item do caso condi c ao 1 comando a executar condi ca o 2

condi ca o 3 comando a executar

comando 1 a executar comando 2 a executar

sele ca o caso 1 nome entrada 1 comando a executar nome entrada 2 comando cr tico a executar comando n ao cr tico a executar ao atraso de 10seg sen a c oes do sen ao

A seguir, alguns exemplos de algoritmos feitos em um e noutro esquema Seja o seguinte algoritmo Algoritmo Calcular {a soma dos n umeros inteiros at e 100} real SOMA inteiro NUMERO SOMA 0 NUMERO 1 enquanto {NUMERO < 101}
88-09, Pedro Kantek

88

vers ao de 23 de janeiro de 2009

CAP ITULO 5. NASSI-SCHNEIDERMAN SOMA SOMA + NUMERO NUMERO NUMERO + 1 fimenquanto imprima SOMA fim{algoritmo} calcular soma os 100 primeiros n umeros
real SOMA inteiro NUMERO SOMA 0 NUMERO 1 NUMERO < 101 SOMA SOMA + NUMERO NUMERO NUMERO + 1 imprima SOMA

5.1

Chines

Tamb em conhecido como teste de mesa, o chines e a execu c ao manual, passo a passo, de um algoritmo pelo programador. Em geral, e atrav es do chines que o autor do algoritmo se certica de que ele funciona. Infelizmente, o chines costuma apontar onde e quando o algoritmo falha, mas n ao garante de que o algoritmo esteja 100% correto, pois o caminho eventualmente errado pode n ao ter sido seguido durante o chines. As regras a seguir para um proveitoso chines, s ao: Obter uma massa de dados signicativa O conjunto a testar n ao deve ser extenso, mas precisa ser abrangente e incluir as condi c oes que est ao sendo testadas. Escolher bem os dados a testar e uma arte. Se mal escolhidos n ao v ao certicar nada e s o v ao dar trabalho. Obter o resultado correto Com os dados de entrada em m aos, o programador precisa obter o resultado esperado que estes dados v ao gerar. Como fazer isto, varia de caso a caso, mas e imprescind vel que antes de come car o chines, se saiba qual resultado esperar. Listar os par ametros e vari aveis Deve-se providenciar no alto de uma folha de papel, o nome de todos os par ametros e vari aveis que o algoritmo manuseia. Deve haver bastante espa co abaixo dos nomes, a m de que os valores que ir ao sendo lan cados, caibam. Seguir o algoritmo Em geral, com a ponta cega de uma lapiseira, o programador segue cada um dos comandos escritos. Se houver a necessidade de uma pausa para
vers ao de 23 de janeiro de 2009

89

88-09, Pedro Kantek

CAP ITULO 5. NASSI-SCHNEIDERMAN raciocinar, a ponta da lapiseira ca sobre o ponto de interrup c ao. A tabela de valores das vari aveis vai sendo lida (consultada) e escrita (alterada) durante o chines Decis ao Quando o algoritmo e o chines terminam, um resultado e obtido. Ent ao, ele e comparado com o resultado esperado, acima calculado. Se for diferente, um erro aconteceu. Raras vezes e no processo manual de obten c ao do resultado, mas quando isso ocorre o algoritmo pode estar certo e e o resultado obtido que est a errado. Mas, na hora de procurar o erro e refazer maioria das vezes, e o algoritmo que est a errado. E todo o ciclo. Se ambos s ao iguais, o algoritmo funcionou para este caso de teste. Quanto deste funcionamento adequado pode ser generalizado para qualquer caso de testes ca em aberto.

Exerc cio 87 Fa ca um chines com o algoritmo a seguir:


inteiro fun c ao CALCU (inteiro A, B) se A B ent ao devolva A sen ao 5: devolva B 6: mse
1: 2: 3: 4:

88-09, Pedro Kantek

90

vers ao de 23 de janeiro de 2009

Cap tulo 6

Visualg
O VISUALG e um programa que auxilia o aprendizado de algoritmos na medida em que permite a entrada e execu c ao de um algoritmo escrito em portugol, conforme aqui descrito. Escrito pela empresa Apoio, pode ser obtido em www.apoioinformatica.com.br.

6.1

Regras de Visualg

Em visualg, valem as regras:


cada comando de visualg deve estar em uma linha n ao h a separadores (;), nem blocos (como { e {) nem goto todas as palavras reservadas n ao tem acentos ou cedilha n ao h a separa c ao entre mai usculas e min usculas nos comandos ou vari aveis o limite de vari aveis e de 500 (cada item de vetor conta como 1 vari avel)

e o ponto o ponto decimal


valores caractere est ao entre aspas duplas O s mbolo de atribui c ao e <-. Na verdade s ao dois s mbolos Existe recursividade

a unidade b Algoritmo E asica de escrita de algoritmos. formato 1: algoritmo <nome> 2: var 3: vari aveis 4: se houver, a fun c ao entra aqui 5: inicio 6: comandos 7: malgoritmo exemplo 1: algoritmo teste 2: var 3: N : inteiro 4: inicio 5: leia (N) 6: escreva (N * 2) 7: malgoritmo

Coment arios s ao caracterizados por come car por \\. 91

CAP ITULO 6. VISUALG Fun c ao A fun c ao e uma unidade n ao aut onoma de programa c ao. Ela sempre precisa receber seus dados (atrav es de uma lista de par ametros) e devolver um resultado a quem a chamou. Em Visualg s ao colocadas imediatamente antes da palavra inicio do bloco a que se referem. Formato 1: funcao <nome>( <parametros>) : <tipo-resultado> 2: var 3: vari aveis locais 4: inicio 5: comandos 6: ... retorne ... 7: mfuncao Exemplo 1: funcao teste(N : inteiro; A, B:real) : inteiro 2: var 3: inicio 4: retorne (N * 2) 5: mfuncao O <nome-de-fun c ao> obedece as mesmas regras de nomenclatura das vari aveis. Por outro lado, a <seq u encia-de-declara c oes-de-par ametros> e uma seq u encia de [var] <seq u encia-de-par ametros>: <tipo-de-dado> separadas por ponto e v rgula. A presen ca (opcional) da palavra-chave var indica passagem de par ametros por refer encia; caso contr ario, a passagem ser a por valor. Por exemplo, eis alguns cabe calhos de fun c oes 1: funcao CALC22 (A, B : inteiro; C : real) : real Deniu-se uma fun c ao de nome CALC22, que recebe 3 par ametros, sendo os dois primeiros inteiros e o terceiro real. A fun c ao devolve um resultado real. 1: funcao EQA6 (X : inteiro) : inteiro Deniu-se uma fun c ao de nome EQA6, que recebe um u nico n umero inteiro e devolve outro n umero inteiro. 1: funcao EXA (var X : inteiro) A fun c ao EXA recebe um par ametro inteiro. A presen ca da palavra var implica em que a passagem e por refer encia, ou seja o que a fun c ao modicar na vari avel X permanecer a modicado ap os o retorno da fun c ao EXA. Nomes Ao construir algoritmos e necess ario dar nomes a muitas coisas. A regra de constru c ao de nomes e
Uma u nica palavra Composta de letras e n umeros Come cando com uma letra Escrita em mai usculo

Tipos Os tipos poss veis s ao 4: inteiro, real, l ogico, caracter.


88-09, Pedro Kantek

92

vers ao de 23 de janeiro de 2009

CAP ITULO 6. VISUALG Tipo inteiro real caracter logico Conte udo qualquer n umero inteiro, variando entre e + qualquer n umero inteiro ou n ao inteiro uma cadeia somente pode conter os valores VERDADEIRO e FALSO Exemplo inteiro A A,B,C : inteiro A : real X,Y,Z : real A : caracter // o tamanho n ao e expl cito A : logico

Vetor Um vetor (ou matriz) e denido, escrevendo-se o nome, dois pontos (:) a palavra vetor e as especica c oes de repeti c ao. Veja nos exemplos: Formato <nome> : vetor [inicio..m] [inicio..m] ... de <tipo> Exemplo AAA : vetor [1..10] de real BBB : vetor [0..4] [1..8] de inteiro

Comandos Os comandos em pseudo-c odigo s ao poucos < (recebe), leia, escreva, se...mse, enquanto...menquanto, para...mpara, repita...at e, retorne e abandone. Leia Serve para introduzir um dado externo para dentro do algoritmo. As vari aveis citadas no comando j a ter ao que ter sido denidas e tipadas. formato leia (<lista de vari aveis >) exemplo leia (A)

Escreva Serve para produzir um dado como resposta do algoritmo. As vari aveis citadas no comando j a ter ao que ter sido devidamente atribu das. formato escreva (<lista de vari aveis >) exemplo escreva (o valor procurado e ,x)

Para vari aveis num ericas, pode-se especicar var:tamanho:decimais. < Este comando permite inicializar uma vari avel ou alterar-lhe o conte udo. exemplo A<B B < CURITIBA C < A + 23

formato avel> < <vari avel> OU <vari <vari avel> < <constante> OU <vari avel> < <express ao>

Express ao Num erica Qualquer combina c ao compat vel de fun c oes que acabem gerando um u nico resultado num erico.
vers ao de 23 de janeiro de 2009

93

88-09, Pedro Kantek

CAP ITULO 6. VISUALG Formato adi c ao (+), subtra c ao (), multiplica c ao (), divis ao real (/) divis ao inteira (barra ao contr ario) resto (percentagem) abs(a:real):real arcxxxx(a:real):real asc(s:caracter):inteiro carac(c:inteiro):caracter caracpnum(c:caracter):inteiro real compr(c:caracter):inteiro copia(c:caracter; p,n:inteiro):caracter xxx(a:real):real a div b exp(b,e) grauprad(a:real):real int(a:real):inteiro log(a:real):real logn(a:real):real maiusc(c:caracter):caracter minusc(c:caracter):caracter a mod b numpcarac(n:inteiro real):caracter pi:real pos(subc,c:caracter):inteiro quad(a:real):real radpgrau(a:real):real raizq(a:real):real ou O que faz o usual da aritm etica s o usa inteiros o resto da divis ao inteira o valor absoluto de a arco xxx converte o caracter s em inteiro converte o byte c em caracter ou deve ser o comprimento do string copia um substring funcao trigonometrica divisao inteira de a po b eleva a base ao expoente converte graus em radianos converte real em inteiro logaritmo base 10 logaritmo base e converte para maiuscula converte para minuscula resto da divisao inteira de a por b converte numerica a caracter devolve o valor de pi devolve a posicao de subc em c devolve o quadrado de a converte radiano para grau devolve a raiz quadrada que acabem geExemplo 3=3 e VERDADEIRO 3<>3 e FALSO 3>4 e FALSO 3<4 e VERDADEIRO 3>=3 e VERDADEIRO 3<=3 e VERDADEIRO xxx pode ser sen,cos,tan,cotan Exemplo A+3 A/2.5 5\2 e2 5%2 e1 abs(3) e 3; abs(-3) e 3 xxx pode ser cos, sen e tan

Express ao Relacional Qualquer combina c ao compat vel de rela c oes rando um u nico resultado l ogico. Formato O que faz Igual (=) devolve VERDADEIRO se seus operandos s ao iguais e FALSO sen ao Diferente (<>) devolve VERDADEIRO se seus operandos s ao diferentes e FALSO sen ao Maior (>) Em A > B devolve VERDADEIRO se A e maior do que B Menor (>) Em A < B devolve VERDADEIRO se A e menor do que B Maior ou igual (>=) Em A >= B devolve VERDADEIRO se A e maior ou igual do que B Menor ou igual (<=) Em A <= B devolve VERDADEIRO se A e menor ou igual do que B
88-09, Pedro Kantek

94

vers ao de 23 de janeiro de 2009

CAP ITULO 6. VISUALG Express ao L ogica Qualquer combina c ao compat vel de express oes relacionais e/ou l ogicas que acabem gerando um u nico resultado l ogico. Formato E O que faz Em A E B, devolve VERDADEIRO se A e B s ao verdadeiros e devolve FALSO sen ao Em A OU B, devolve VERDADEIRO se A ou B ou ambos s ao VERDADEIRO e devolve FALSO sen ao Inverte o valor l ogico do operando Exemplo VERDADEIRO E VERDADEIRO e VERDADEIRO Todas as outras combina c oes d ao FALSO FALSO OU FALSO e FALSO Todas as outras combina c oes d ao VERDADEIRO NAO VERDADEIRO e FALSO e NAO FALSO e VERDADEIRO

Ou

N ao (NAO)

Se Este comando e denominado alternativo, pois permite escolher caminhos da programa c ao dependendo de uma condi c ao (express ao l ogica). Note que o trecho entre sen~ ao e o comando imediatamente anterior a fimse s ao opcionais, raz ao pela qual no formato eles aparecem entre colchetes. Os comandos entre ent~ ao e sen~ ao ou fimse (se n ao houver sen ao) ser ao executados apenas se a condi c ao do comando for verdadeira. Se houver comandos entre sen~ ao e fimse os mesmos ser ao executados apenas se a condi c ao for falsa. formato se <condi c ao> entao comando1 comando2 ... senao comando11 comando12 mse exemplo se A >= 4 entao B<B+1 C<C+D+A X<0 senao escreva (N * 2) Y<0 mse

Enquanto Este comando permite a realiza c ao de la cos (loops) dentro de programas. Come cando o comando, a condi c ao e avaliada. Se ela for falsa, h a um desvio para o comando seguinte ao fimenquanto. Se a condi c ao for verdadeira os comando internos ao enquanto s ao executados. Ao se encontrar o fimenquanto h a um desvio incondicional ao in cio do enquanto e a condi c ao inicial e reavaliada. exemplo A<5 enquanto A <= 9 faca escreva (A) A<A+3 menquanto ser ao impressos os valores 5 e 8.

formato enquanto < condi c ao > faca comando1 comando2 ... menquanto

Repita mas.

Este comando tamb em permite a realiza c ao de la cos (loops) dentro de progra-

vers ao de 23 de janeiro de 2009

95

88-09, Pedro Kantek

CAP ITULO 6. VISUALG exemplo A<5 repita escreva (A) A<A+3 ate A > 9 ser ao impressos os valores 5 e 8.

formato repita comando1 comando2 ... ate < condi c ao >

Para Este comando tamb em permite a realiza c ao de la cos (loops) dentro de programas. No in cio a vari avel citada no comando e inicializada com <constante1>. Depois e feita a condi c ao. Se o passo est a ausente ou e positivo, a variavel e testada para <constante2>. (Se o passo e negativo, o teste e com ). Se o resultado e VERDADEIRO os comandos internos s ao executados. Ao nal deles, a vari avel e incrementada (ou decrementada se o passo e negativo) e depois h a um retorno ao teste inicial. Quando o passo n ao e explicito, ele vale 1. formato para <var> de <constante1> ate <constante2> [passo <constante3>] exemplo fa ca para K de 3 ate 8 passo 2 faca comando1 escreva (A) comando2 mpara ... mpara ser ao impressos os valores 3, 5 e 7.

Retorne Usado exclusivamente dentro de fun c oes, tem a nalidade de devolver um resultado a quem chamou esta fun c ao. Ao contr ario do C, n ao necessariamente encerra a execu c ao da fun c ao. exemplo se A > 5 entao retorne A mpara

formato retorne < express ao compat vel >

Outros Comandos aleatorio arquivo <nome-de-arquivo> algoritmo lendo do arquivoarquivo teste.txt timer on / timer o pausa debug eco cron ometro

6.2

Exemplos de Visualg

Exemplo 1 algoritmo "primos" var J,K,R: inteiro


88-09, Pedro Kantek

96

vers ao de 23 de janeiro de 2009

CAP ITULO 6. VISUALG

funcao QP(N: inteiro): inteiro var A,B:inteiro inicio A <- 2 B <- 1 enquanto B <= N faca se EPRIMO(A) entao B <- B + 1 fimse A <- A + 1 fimenquanto retorne A - 1 fimfuncao funcao EPRIMO(M: inteiro): logico var QT,DI:inteiro inicio QT <- 0 DI <- 2 enquanto DI < M faca se M % DI = 0 entao QT<- QT + 1 fimse DI <- DI + 1 fimenquanto retorne QT = 0 fimfuncao inicio leia (J,K) R <- QP(K)-QP(J) escreva (R) escreva (QP(K)) escreva (QP(J)) fimalgoritmo Exemplo 2 algoritmo "palito" var N,SEQ,J,TV:inteiro inicio N<-0 enquanto ((N<20) ou (N>30)) faca escreval ("com quanto comecamos ?") leia (N) fimenquanto enquanto (N>0) faca SEQ <- 1 enquanto ((N-SEQ)>=0) faca
vers ao de 23 de janeiro de 2009

97

88-09, Pedro Kantek

CAP ITULO 6. VISUALG SEQ <- SEQ + 4 // escreval ("depuracao... N=",N," SEQ=",SEQ) fimenquanto J<-4+(N-SEQ) se (J=0) entao J<-1 fimse escreval ("eu joguei ",J) N<-N-J escreval ("Existem ",N," palitos") se (N<=0) entao escreva ("por incrivel que pareca,... perdi,... ") interrompa fimse TV<-0 enquanto ((TV<1) ou (TV>3)) faca escreval ("jogue") leia (TV) fimenquanto N <- N - TV escreval("existem ",N," palitos") se (N<=0) entao escreval("burrao, eu ganhei...") interrompa fimse fimenquanto fimalgoritmo

6.2.1

Criando uma raiz quadrada

Suponha que o VisualG n ao tem a fun c ao raiz quadrada. Como poder amos construir uma ? Eis uma poss vel formula c ao Dado um n umero real x, x > 0, calcular a raiz quadrada dele.

Pensando sobre o que j a aprendemos sobre a raiz quadrada de x, tem-se que y e a raiz quadrada de x se e somente se y 2 = x. Ou reescrevendo, y = x . Isto nos d a uma id eia y de algoritmo:
Chute um valor g para y e teste-o. Calcule Se
x g x g

e sucientemente perto de g , retorne g , sen ao tente com um chute melhor.

Se o processo estiver funcionando adequadamente, o chute inicial poder a ser qualquer n umero, ent ao vai-se padronizar o primeiro chute como sendo 1. Com isso a fun c ao sqrt em VisualG ca funcao sqrt(N:real):real retorne teste(N,1) fimfuncao A seguir, escreve-se a fun c ao teste e ca
88-09, Pedro Kantek

98

vers ao de 23 de janeiro de 2009

CAP ITULO 6. VISUALG funcao teste(X,G:real):real inicio escreval(X,G) se perto((X/G),G) entao retorne G senao retorne teste(X, melhor(X,G)) fimse fimfuncao Sobram 2 fun c oes, melhor e perto. Ei-las: funcao melhor(X,G:real):real inicio retorne (G+(X/G))/2 //a media entre G e X/G fimfuncao funcao perto(A,B:real):logico inicio retorne (B*0.001) > abs(A-B) fimfuncao

6.2.2

Achando ra zes por Newton-Raphson

Agora o algoritmo e para zes n- esimas. Ou seja, dados w e n quaisquer, o que se achar ra pretende agora e achar n w. Para isto, deve-se procurar x tal que xn = w. Reescrevendo xn w = 0. Portanto, em f (x) = xn w procura-se encontrar o valor de x quando f (x) = 0, isto e, onde a curva corta o eixo dos x. Em outras palavras e mais genericamente, dada f (x) como descobrir onde a fun c ao corta o eixo x?. Para poder resolver este problema far-se- ao 3 hip oteses:
a fun c ao cruza o eixo x apenas em um lugar a fun c ao e cont nua, vale dizer e diferenci avel a derivada no intervalo e sempre positiva ou sempre negativa

Supondo uma fun c ao qualquer (sujeita ` as restri c oes acima), imagina-se um chute original g (no eixo x) e f (g ) no eixo y . Calculando a derivada no ponto g e vericando onde esta derivada (que nada mais e do que a inclina c ao da curva no ponto g ) cruza o eixo x obtem-se um novo e melhor chute para a raiz procurada. Este, em ess encia, eo m etodo de Newton. Eis o desenvolvimento, para achar a raiz n do valor w funcao raiz(w:real;n:inteiro):real inicio retorne acharn(w,1,n) fimfuncao funcao acharn(w,g:real;n:inteiro):real var novo:real inicio

vers ao de 23 de janeiro de 2009

99

88-09, Pedro Kantek

CAP ITULO 6. VISUALG novo <- g-(f(w,g,n) / fprime(g,n)) // escreval(w,g,n,novo) se perton(novo,g) entao retorne novo senao retorne acharn (w,novo,n) fimse fimfuncao funcao f(w,g:real;n:inteiro):real inicio retorne (g^n)-w fimfuncao

funcao fprime(g:real;n:inteiro):real inicio retorne n * (g^(n-1)) fimfuncao funcao perton(a,b:real):logico inicio retorne abs(a-b) < abs(b * 0.01) fimfuncao

6.2.3

Depura c ao de algoritmos

Na atividade prossional ou amadora da constru c ao de programas ecientes e ecazes, a programa c ao ocupa apenas uma parte. E, n ao e a maior nem a principal parte. O que toma tempo e preocupa c ao e a atividade de depurar os programas. Entende-se por depura c ao a arte da descoberta, isolamento e corre c ao de erros. Ali as, o programador mais talentoso n ao e o que comete poucos ou nenhum erro (imposs vel), mas aquele que em os cometendo localiza-os e corrige-os com rapidez. Programar e ir das causas para o resultado, e depurar e ao contr ario, ir do resultado para as causas. S o que nesta segunda parte, conspiram contra a atividade:
o ru do ambiente o fato do programa poder ter sido feito por outro a press ao do tempo e do $.

Exerc cio 88 Na v espera desta aula, os alunos ser ao divididos em 4 grupos. A cada
grupo ser a dado um conto de Sherlock Holmes, SEM A PARTE FINAL do mesmo. O grupo ter a entre 5 e 10 minutos para contar a hist oria e toda a turma ser a convidada a descobrir o que aonteceu. Depois deste prazo, o professor contar a o nal da hist oria.

88-09, Pedro Kantek

100

vers ao de 23 de janeiro de 2009

Cap tulo 7

Modulariza c ao: fun c oes


7.1 Fun co es

Existem 2 maneiras de denir um algoritmo. A primeira, e denindo um c odigo completo, auto-suciente, capaz de ser facilmente traduzido em um programa completo e auto-suciente capaz de ser rodado em computador gerando resultados ao instante. Este algoritmo e por um cabe calho reconhecido pela palavra constante algoritmo <nome> Note que a especica c ao <nome> deve ser substitu da por um nome que identique este algoritmo. O bloco se encerra pela especica c ao fimalgoritmo Entre estas duas constantes, deve ser escrito o bloco do algoritmo que sempre ser a formado por 2 componentes: a descri c ao de vari aveis e os procedimentos que o algoritmo far a. Eles devem aparecer nesta ordem: primeiro a deni c ao de vari aveis e depois os procedimentos. Uma diculdade aqui e a necessidade de obter os dados do algoritmo do meio ambiente (possivelmente fazendo uma opera c ao de leitura) e gerar os dados de sa da para serem aproveitados, usualmente atrav es de uma opera c ao de impress ao. Como uma fun c ao Em computa c ao, o uso da palavra fun c ao e ligeiramente diferente do uso similar na matem atica, embora os 2 conceitos tenham muitas similaridades. Aqui, o uso da palavra fun c ao indicar a um sub-programa separado do programa principal que computa alguns valores. A especica c ao do cabe calho de uma fun c ao ser a 1: fun c ao <nome> ([var] <lista-vars> : <tipo> [;...]) : <tipo-resultado> Com a seguinte regra de leitura: <nome> tal como no algoritmo, identica um nome u nico <lista-vars> uma seq u encia de nomes de vari aveis separadas por v rgulas. Se houver a palavra var no in cio a passagem ser a por referEncia e sen ao por valor <tipo> tipo das vari aveis da lista anterior ; separador em as listas de vari aveis (Se mais de uma houver) <tipo-resultado> especica qual o tipo que ser a devolvido por esta fun c ao ap os os c alculos que realizar a. Pode ser um dos 5 tipos conhecidos at e agora A fun c ao de encerra pela especica c ao 101

FUNC CAP ITULO 7. MODULARIZAC AO: OES fimfun c~ ao A parte de deni c ao de vari aveis locais em uma fun c ao nem sempre e necess aria, logo e opcional, mas se presente deve aparecer logo ap os o cabe calho da fun c ao e antes dos procedimentos. Esta deni c ao e mais simples do que a do algoritmo completo. Os dados n ao precisam ser obtidos do exterior, eles ser ao entregues ` a fun c ao simplesmente por referenci a-los no cabe calho da fun c ao. Identicamente n ao e necess ario imprimir resultados bastando retorn a-los (a quem chamou a fun c ao). Acompanhe um mesmo problema resolvido dos dois jeitos. Seja escrever um algoritmo que calcule a m edia entre dois n umeros como algoritmo como fun c ao algoritmo MEDIA fun c ao MEDIA (A, B : real) : real real A B M retorne (A + B) / 2 leia A B mfun c ao MA+B/2 escreva M malgoritmo Do ponto de vista da disciplina de algoritmos, ambos os resultados acima s ao equivalentes. Entretanto, se algu em quisesse testar a segunda implementa c ao (a fun c ao), teria que escrever o programa chamador, que poderia ter o seguinte aspecto: algoritmo T2 real A B leia A B escreva MEDIA (A, B) fimalgoritmo O conceito de fun c ao permite a modulariza c ao dos algoritmos. Deve-se denir e usar uma fun c ao sempre que:
Um processamento espec co tiver que ser feito em diversos locais do algoritmo Um processamento for complexo e auto-contido Outros algoritmos possam vir a usar este mesmo processamento etc

7.1.1

Vari aveis globais e locais

Uma vari avel global existe desde que e criada e pode ser consultada e alterada por qualquer algoritmo ou fun c ao que rode enquanto ela existe. Dito de outra maneira, todas as fun c oes subalternas que forem chamadas ap os a cria c ao da vari avel global a enxergar ao e poder ao modic a-la. O uso de vari aveis globais deve ser fortemente reprimido, pois elas s ao respons aveis por um dos maiores eventos causadores de erros em programas, o chamado efeito colateral. Tanto isto e verdade, que a grande vantagem do paradigma funcional de programa c ao e n ao ter vari avis globais. E, com isto ele acaba gerando programas que t em uma quantidade inacreditavelmente menor de erros. Quando um programa dene vari aveis e em seguida chama uma fun c ao, aquelas vari aveis que o programa deniu s ao consideradas como globais pela fun c ao chamada. Se esta primeira fun c ao chamar uma segunda fun c ao, esta u ltima tamb em enxergar a as variaveis denidas pelo programa, como sendo vari aveis globais.
88-09, Pedro Kantek

102

vers ao de 23 de janeiro de 2009

FUNC CAP ITULO 7. MODULARIZAC AO: OES J a a vari avel local a uma fun c ao e denida dentro da fun c ao e quando esta fun c ao se encerrar o programa original n ao ter a mais acesso a elas. Entretanto se esta primeira fun c ao chamar uma segunda, as vari aveis denidas como locais dentro da primeira fun c ao passam a ser globais e s ao enxergadas pela segunda fun c ao. A fun c ao pode ter suas pr oprias vari aveis internas, tamb em conhecidas como vari aveis locais ` a fun c ao. Existe um comando, tamb em opcional, chamado retorne, que signica devolver para o algoritmo que chamou esta fun c ao, qual o valor calculado por ela. O tipo deste resultado deve ser igual aquele especicado depois da palavra fun c ao. Toda fun c ao usada dentro de um programa deve ter sido denida antes de ser chamada. Em resumo, a regra de alcance das vari aveis e: uma vari avel denida em um local e global para todas as fun c oes chamadas a seguir, mas n ao e enxergada pelas fun c oes chamadas previamente. Por exemplo: 1: algoritmo ALFA 2: var 3: A, B : inteiro 4: funcao BETA (C, D : inteiro) : inteiro 5: var 6: E : inteiro 7: inicio 8: ... 9: mfuncao {funcao BETA} 10: inicio 11: ... 12: malgoritmo Aninhamento de Fun c oes Quando existe uma fun c ao dentro de outra, as vari aveis da fun c ao externa s ao locais para ela e globais para as fun c oes internas. J a as vari aveis da fun c ao interna s ao locais a ela e s ao desconhecidas pela fun c ao externa. Quando existe conito de nomes (duas vari aveis com mesmo nome, sendo uma local e outra global), vale a deni c ao local, e a global deixa de poder ser acessada (Embora continue existindo normalmente). Mas, este e um procedimento que deve ser evitado pelo programador, tanto quanto poss vel. A especica c ao dos par ametros nada mais e do que uma deni c ao de todas as vari aveis que existem na lista-de-par ametros.

Exerc cio Resolvido 7 Um exemplo de algoritmo Escreva uma fun c ao que receba
2 n umeros inteiros, X e Y, (X ( Y) e devolva a diferen ca entre o X- esimo e o Y- esimo n umeros primos. Por exemplo, se X = 10 e Y = 8 a fun c ao dever a devolver 6, pois o 10 n umero primo e 23 e o 8 e 17 e 23 - 17 = 6 Verica c ao se um n umero e primo: Entrada: um inteiro X qualquer Sa da: .V. se X for primo e .F. sen ao 1: l ogico fun c ao EPRIMO (inteiro X) 2: inteiro DV, QT 3: QT 0 4: DV 2 5: enquanto (DV (X div 2)) fa ca 6: se X mod DV = 0 ent ao 7: QT++
vers ao de 23 de janeiro de 2009

103

88-09, Pedro Kantek

FUNC CAP ITULO 7. MODULARIZAC AO: OES


8: 9: 10: 11: 12:

mse DV++ menquanto retorne QT = 0 mfun c ao Localiza c ao do n- esimo primo:

Entrada: um inteiro K qualquer Sa da: o k- esimo numero primo 1: inteiro fun c ao PRIMO (inteiro K) 2: inteiro Z, QTD 3: QTD 1 4: Z 1 5: enquanto (Z K) fa ca 6: se EPRIMO(QTD) ent ao 7: Z++ 8: mse 9: QTD++ 10: menquanto 11: retorne QTD - 1 12: mfun c ao Diferen ca entre 2 n umeros primos: Entrada: dois inteiros M e N Sa da: a diferen ca entre o m- esimo e o n- esimo n umeros primos 1: inteiro EXEMPLO1 (inteiro M, N) 2: retorne PRIMO(M) - PRIMO(N) 3: mfun c ao

88-09, Pedro Kantek

104

vers ao de 23 de janeiro de 2009

Cap tulo 8

Vetores e Matrizes
Se partirmos da premissa que algoritmos sozinhos s ao incapazes de ajudar a resolver problemas, necessitando de completas estruturas de deni c ao de dados, veremos que os quatro tipos de dados vistos at e aqui (inteiro, real, alfanum erico e l ogico) s ao insucientes. Por exemplo, vejamos o caso de um programa capaz de calcular a diferen ca entre o sal ario e a m edia salarial de um grupo de 50 pessoas. O algoritmo em si e f acil, entretanto se faz necess ario:
a cria c ao de 50 vari aveis para conter os sal arios, permitir o c alculo da m edia, e depois das diferen cas individuais, OU A dupla leitura dos dados, a primeira para calcular a m edia, e a segunda para obter as diferen cas individuais.

Nenhuma das duas alternativas e conceitualmente correta, pois ambas complicam desnecessariamente algo que e simples. A solu c ao para resolver este e in umeros problemas similares, e a introdu c ao do conceito de vetor. A caracter stica principal do vetor , e a cria c ao de muitas vari aveis de mesmo tipo, que atender ao pelo mesmo nome, e que ser ao acessadas pelo seu deslocamento dentro do vetor, ou seja pelo seu n umero. No caso acima (dos 50 sal arios), ao usar a solu c ao de vetores, criar amos uma u nica vari avel de nome SALAR, na forma de vetor, contendo 50 ocorr encias de uma vari avel tipo real. O conjunto poderia ser referenciado na totalidade com o nome de SALAR, ou cada um dos valores poderia ser acessado individualmente atrav es do seu ndice. A principal caracter stica que determina o uso de vetores para resolver problemas de programa c ao e o seu acesso direto ou via ndice. Isto signica que, em um vetor, dado um valor de ndice, e imediata o acesso ao elemento do vetor, seja para obt e-lo (leitura) seja para alter a-lo (escrita). Um vetor e uma cole c ao HOMOGENEA de coisas. Essas coisas s ao referenciadas pela sua posi c ao dentro do vetor, j a que s ao todas iguais. A cadeia e um vetor de caracteres, mas e t ao comum que acaba sendo um tipo fundamental. N ao precisaria.

8.1

Deni c ao de Vetor

Na cria c ao de vetores , apenas e necess ario indicar qual o fator de ocorr encia daquela vari avel. Este valor num erico inteiro, ser a escrito entre colchetes logo ap os o nome do vetor. Cuidado, que aqui o colchete n ao signica opcional. Azares de quem tem um universo limitado de caracteres a utilizar para escrever seus algoritmos. 105

CAP ITULO 8. VETORES E MATRIZES Esta especica c ao indica m ultiplas ocorr encias de uma vari avel em uma u nica dimens ao <nome> : vetor [inicio..m] de <tipo> // exemplo: A : vetor [1..10] de inteiro Exemplos Vejamos alguns exemplos: 1. Quantidade de carros em cada dia da semana QTD-CARR : vetor [1..7] de inteiro 2. Valor recebido por dia ao longo do mes VALOR : vetor [1..31] de real

Exerc cio Resolvido 8 Seja denir um vetor para conter as taxas inacionarias
dos u ltimos 12 meses: INFLACAO : vetor [1..12] de real

Exerc cio Resolvido 9 Imaginemos agora a utiliza c ao de um vetor para conter as


notas de uma turma de 60 alunos: NOTA : vetor [1..60] de real

Exerc cio Resolvido 10 Podemos ter um vetor para guardar as popula c oes brasileiras, ano a ano, nos u ltimos 20 anos: POPAA : vetor [1..20] de inteiro Exemplo:
V : vetor [1..5] de inteiro {deni c ao} V 20 10 35 65 47. O vetor V tem 5 inteiros. V[1] e 20, V[4] e 65. V[6] e erro. X : vetor [1..9] de caracter ou cadeia X {no segundo caso o tamanho e impl cito} X ABCDEFGHI. O vetor X tem 9 caracteres ( e portanto, uma cadeia). X[1] e A. X[5] e E. X[32] e erro. A : vetor [1..3] de logico A verdadeiro, falso, falso. A e um vetor de l ogicos. A[2] e falso. F : vetor [1..6] de real F 10.9 10 11 11.2 13 19. F e um vetor de reais. (Lembrar que um inteiro e um real tamb em. V[1] e 10.9, V[2] e 10.0, e assim por diante.

O ndice em um vetor tem que obrigatoriamente ser: 1. inteiro e positivo 2. menor ou igual ao tamanho do vetor

8.1.1

Origem dos ndices

A origem da contagem varia entre 0 e 1. N os sempre que NADA for dito em contr ario, usaremos 1. Quando a origem e zero, conta-se: 0, 1, 2, ... n-1 (para contar n elementos). Quando a origem e 1, a contagem e a trivial: 1, 2, ... , n. Repare que a nota c ao [inicio..nal] a rigor permitiria quaisquer valor inicial e nal, mas o mundo da programa c ao j a e sucientemente complexo. Assim, vai-se combinar que o in cio semore ser a 1 (como no COBOL, PASCAL, BASIC, APL, ...), ou mais raramente 0 (como no C, C++, Java, ...), mas nunca algo diferente de 0 ou 1.
88-09, Pedro Kantek

106

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES

8.2

Opera c oes B asicas

Vetores podem ser processados coletivamente ou elemento a elemento. Por exemplo: V : vetor[1..6] de inteiro V 0 {coletivamente} V 10,20,30,40,50,60 {idem} **** OU **** I1 enquanto I 6 fa ca V[I] I 10 {elemento a elemento} II+1 menquanto Na leitura e a mesma coisa Y : vetor[1..5] de real leia Y {5 pfs s ao lidos e colocados em Y} **** OU **** I1 enquanto I 5 fa ca leia Y[I] {leitura individual de cada elemento} II+1 menquanto Atribui c ao Trata-se de modicar o conte udo dos elementos do vetor. 1: A[i] A[i] + 1 Inicializa c ao a coloca E c ao do valor inicial dos elementos de um vetor , usualmente antes de come car o processamento. 1: B[j] 0 Enumera c ao Percorre-se todos os elementos de um vetor, executando sobre eles uma mesma opera c ao. Por exemplo, seja contar quantos elementos s ao negativos. 1: inteiro VALS[200] 2: inteiro I, QTOS 3: leia VALS 4: QTOS 0 5: para para I de 1 a 200 fa ca 6: se VALS[I] 0 ent ao 7: QTOS++ 8: mse 9: mpara Acumula c ao Parecido com a enumera c ao, mas com o car ater de acumula c ao sobre os resultados da opera c ao. Exemplo: seja somar todos os elementos de um vetor
vers ao de 23 de janeiro de 2009

107

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES


1: 2: 3: 4: 5: 6: 7:

inteiro VALS[200] inteiro I, SOMA leia VALS SOMA 0 para para I de 1 a 200 fa ca SOMA SOMA + VALS[I] mpara

Inser c ao Coloca c ao de um novo elemento dentro do vetor. Usualmente, este novo elemento e encaixado em alguma posi c ao do vetor, e todos os elementos anteriores que tinham ndice igual ou maior a esta posi c ao s ao deslocados uma posi c ao. Exemplo: Seja manter um vetor de 10 notas, com as melhores notas at e ent ao aparecidas. 1: NOTAS : vetor[1..10] de real 2: NOTAS ... as notas at e aqui 3: NOVANOTA 4: I 1 5: enquanto (I < 11) (NOVANOTA < NOTAS[I]) fa ca 6: II+1 7: menquanto 8: se I = 11 ent ao 9: escreva (a nota nova e menor do que as 10 j a existentes) 10: sen ao 11: J9 12: enquanto (J > 0) (NOTAS[J] < NOVANOTA) fa ca 13: NOTAS[J+1] NOTAS[J] 14: JJ-1 15: menquanto 16: NOTAS[I] NOVANOTA 17: mse Supress ao Opera c ao inversa ` a da inser c ao. Retira-se um elemento, trazendo todos os que estavam uma posi c ao abaixo dele uma posi c ao acima. Busca No acesso direto, dado um ndice, obtemos o valor do elemento no vetor. Aqui ocorre o contr ario. Dado um valor do vetor, queremos saber qual seu ndice (isto e, onde ele est a?). Ordena c ao Reordenar os elementos de um vetor com vistas a deix a-los obedecendo alguma rela c ao de ordem.

Acesso aos dados dentro de um vetor


Dado um vetor, seus valores podem ser acessados das seguintes maneiras:
88-09, Pedro Kantek

108

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES Genericamente Neste caso, considera-se um u nico valor para todas as ocorr encias do vetor. Por exemplo, para zerar um vetor pode-se fazer: 1: inteiro VETVEN [10] 2: VETVEN 0 O comando VETVEN 0 e permitido e faz com que TODOS os 10 elementos de VETVEN sejam zerados.

Conjuntamente Neste caso, um conjunto da de mesmo n umero de elementos e usado na refer encia ao vetor. Exemplo: 1: real VETVEN [10] 2: VETVEN (1 2 3 4 5 6 7 8 9 0) Neste caso o conjunto (1 2 3 4 5 6 7 8 9 0) e usado para inicializar o vetor de uma s o vez com conte udos diferentes. Os valores devem aparecer entre par enteses, e devem ser em mesmo n umero do que a deni c ao original do vetor

Individualmente o caso mais comum, e pressup E oe a exist encia de um comando para cada elemento do vetor. 1: real VETVEN [10] 2: VETVEN [1] 0.1 3: VETVEN [2] 0.01 4: VETVEN [5] 1 5: ... 6: VETVEN [8] 100 7: VETVEN [9] 10 8: VETVEN [10] 1000 Estas 3 maneiras de referenciar, n ao se aplicam apenas ` a inicializa c ao, mas tamb em as demais a c oes poss veis em . Assim, podemos ter testes: seVETVEN = 0 - signicando setodos os elementos de VETVEN, leituras: leia (VETVEN) - signicando leiatodos os elementos, grava ca o: escreva (VETVEN) - signicando escrevatodos..., etc. Todos os comandos vistos podem e devem ser usados junto com o conceito de vetores. Entretanto, existe um que e muito orientado para estas estruturas. Trata-se do comando para. Vejamos um exemplo, em que o para e usado para calcular a soma dos elementos de um vetor. 1: algoritmo exemplo 2: inteiro I,SOMA 3: inteiro VET [120] 4: leia(VET) 5: SOMA 0 6: para I de 1 ate 120 fa ca 7: SOMA SOMA + VET[I] 8: mpara 9: escreva(SOMA) 10: m algoritmo
vers ao de 23 de janeiro de 2009

109

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES

Leitura e Impress ao de Vetores


Em algoritmos , podemos ter a necessidade de ler ou imprimir um vetor de uma s o vez. Ent ao faremos: 1: inteiro VET1 [10] 2: ... 3: leia(VET1) 4: ... O caso acima, e o mais comum, e nos assegura que o vetor inteiro foi lido sem complica c ao ou diculdade. Entretanto, algumas vezes necessitaremos ler ou imprimir um vetor, elemento a elemento. Ficar a ent ao: 1: inteiro VET1[10] 2: inteiro I 3: ... 4: para I de 1 at e 10 fa ca 5: leia(VET1[I]) 6: mpara Nem sempre e f acil acostumar-se a trabalhar com vetor. Os conceitos de ndice e conte udo costumam atrapalhar quem nunca lidou com isto. Mas com um pouco de pr atica verica-se que a coisa n ao e muito complicada. Na tentativa de ajudar, v ao aqui alguns exemplos. Sugiro que voc e os leia e os estude atentamente, at e entender cada um e todos eles. Se tiver alguma diculdade insan avel, ou n ao conseguir entender o que est a acontecendo, procure ajuda junto ao professor. Exemplos: Para executar estes exemplos valem as seguintes deni c oes: 1: inteiro VET1,VET2,VETX [10] 2: inteiro I,J,K,L 3: VET1 (10 12 15 18 2 24 40 2 4 6) 4: VET2 (20 18 16 14 12 10 8 6 4 2) 5: VET3 (1 1 1 2 2 2 5 5 5 9) 6: I 3 7: J I+1 8: I 5 9: K 3 10: L 6 ent ao VET1[2] VET2[J] VET1[K+1] VET1[K]+1 VET2[VET3[4]] VET1[1+2+L] VET2[22-VET2[2]] VET3[VET1[10]-2]+1 VET2[(3*VET1[5])-5] VET1[4+VET1[2]] ---> ---> ---> ---> ---> ---> ---> ---> ---> ---> 12 14 18 16 18 4 14 3 20 ERRO!

Um dos erros mais comuns e graves que acontece quando se utilizam vetores e o estabelecimento de um valor para o ndice maior do que o comprimento total do vetor, ou em termos mais rigorosos, o erro acontece quando se usa para ndice de um valor n ao compreendido no intervalo da deni c ao do vetor. Este erro ocorre quase sempre em tempo de execu c ao (o que torna mais dif cil sua corre c ao).
88-09, Pedro Kantek

110

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES Exemplo 1: real W [20] 2: inteiro A 3: A 15 4: escreva(W[A+10]) Indire c ao A indire c ao e uma dupla (ou tripla ou n-upla) indexa c ao. Usualmente e representada por diversos colchetes. Veja no exemplo 1: escreva A[A[x]] O que est a se pedindo acima e a dupla indexa c ao de A. A maneira de resolver o pedido (e descobrir o valor de A[A[x]]) e usando o valor de x, recuperar o conte udo da posi c ao A[x]. De posse deste valor usa-se-o como ndice nal para saber o valor de A[A[x]]. Se houver muita diculdade de entender este conceito o mesmo pode ser desdobrado em 1: escreva A[A[x]] e equivalente a 1: B A[x] 2: escreva A[B] Tipos de erros em vetores a) indice caindo fora do vetor. b) tipo do indice denido inadequadamente (ex: inteiro X[30]; caracter Y; Y <- 2; X[Y] d a erro) Note que a maioria das linguagens exige inteiro (ou real mas sem decimais).

8.3

Ordena c ao

Import ancia do estudo da ordena c ao


Na d ecada de 70, James Martin sugeriu que 40% do tempo de TODOS os computadores e gasto neste algoritmo. O conceito de ordem e fundamental em programa c ao Excelente t opico para estudar algoritmos e estudar comportamentos e complexidades

Antes de come carmos a estudar a classica c ao, vamos denir o problema: Seja X um conjunto composto por i elementos entre os quais se pode estabecer uma rela ca o de ordem. Dados Xi e Xj com i = j , sempre pode-se estabelecer Xi > Xj ou Xi = Xj ou Xi < Xj .
X estar a em ordem crescente se e somente se Xi Xj , i < j . X estar a em ordem estritamente crescente se e somente se Xi < Xj i < j . X estar a em ordem decrescente se e somente se Xi Xj , i < j . X estar a em ordem estritamente decrescente se e somente se Xi > Xj i < j .
vers ao de 23 de janeiro de 2009

111

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES Um algoritmo de ORDENAC AO e aquele que recebe um X qualquer (possivelmente desordenado), permuta seus elementos e devolve X em ordem. Tipicamente fazem parte de Xi um conjunto de informa c oes. Neste caso, haver a uma parte de Xi denominada CHAVE e identicada por k (k=key) pela qual se fara a ordena c ao. Embora devamos ter em mente a exist encia dos outros campos, apenas a chave ser a tratada nos algoritmos. Existem 2 classes de algoritmos de ordena c ao: os que trazem todos os dados para a mem oria (sort interno) e os que ordenam dados em m dia magn etica seq uencial (sort externo). Note que neste caso o algoritmo apenas acessa uma parte do subconjunto total. Um algoritmo de ordena c ao e est avel se no caso particular em que se k[i] = k[j], a sempre bom que um m ordem original dos dados e preservada. E etodo de ordena c ao seja est avel. Antes de prosseguir, vale uma lembran ca. Para conjunto de dados pequenos (quanto?) n ao h a necessidade de grandes pesquisas e deve-se usar o algoritmo mais simples poss vel. O conjunto completo (completo?) de algoritmos de ordena c ao ser a visto e estudado no segundo ano (na disciplina de estrutura de dados), mas por enquanto vamos usar um algoritmo simples e f acil (mas ineciente) para ordenar vetores: Algoritmo de movimenta c ao 1: inteiro[1000] {fun c ao} MOVIMENTA (inteiro V[1000]) 2: inteiro Y[1000] 3: inteiro MAIOR, QUAL 4: inteiro I,J 5: para I de 1 at e 1000 fa ca 6: MAIOR 7: para J de 1 at e 1000 fa ca 8: se V[J] > MAIOR ent ao 9: MAIOR X[J] 10: QUAL J 11: mse 12: mpara 13: Y[I] X[QUAL] 14: V[QUAL] 15: mpara 16: retorne Y 17: m{fun c ao} Este algoritmo e est avel.

Exerc cio 89 Exerc cio: fa ca um chin es com 4, 12, 8, 3, 9, 1, 5

8.4

Opera c oes fundamentais na Inform atica

Dado um conjunto S de chaves, as 3 opera c oes fundamentais em inform atica s ao as seguintes: Pesquisa Dada uma chave desconhecida x, pesquis a-la contra S signica vericar se x pertence ou n ao ao conjunto S. Em termos matem aticos, x S ? Esta fun c ao retorna um valor booleano.
88-09, Pedro Kantek

112

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES Inser c ao Dada uma chave x que reconhecidamente n ao pertence ainda a S (e isto pode ser vericado pela opera c ao acima), a opera c ao de inser c ao signica inserir x em S . Ou S S {x}. A fun c ao pode retornar apenas um indicativo de sucesso. Exclus ao Dada uma chave x que sabidamente pertence a S , a opera c ao de exclus ao signica retirar x do conjunto S . Ou S S {x}. Pode-se retornar apenas um indicativo de sucesso. M aximo Dado um conjunto S , descobrir-lhe seu m aximo e obter o valor x, tal que y = x S, x y . Esta fun c ao retorna um ponteiro ou um cursor para o elemento x. M nimo Muito semelhante ao anterior, s o que busca-se x tal que y = x S, x y . Sucessor Esta opera c ao busca descobrir qual o seguinteelemento do conjunto segundo um crit erio qualquer. A fun c ao recebe como entrada um valor x que est a presente em S e devolve um apontador ou cursor para o n umero imediatamente maior a x em S . Outra hip otese de retorno e um terminador, caso x j a seja o maior elemento em S . Antecessor Esta opera c ao busca descobrir qual o anteriorelemento do conjunto segundo um crit erio qualquer. A fun c ao recebe como entrada um valor x que est a presente em S e devolve um apontador ou cursor para o n umero imediatamente menor a x em S . Outra hip otese de retorno e um terminador, caso x j a seja o menor elemento em S .

Exerc cio 90 Pal ndromo (adj.) Diz-se da frase que quer se leia da direita para a esquerda, quer da esquerda para a direita, tem o mesmo sentido (Aur elio). Exemplos de pal ndromos: sairam o tio e oito marias oto come mocoto socorram me subi no onibus em marrocos roma me tem amor em ingl es: a man, a plan, a cat, a canal, panama
murder for a jar of red rum rotor, radar, me v e se a panela da mo ca e de a co madalena paes e vem a diva da vida luz azul ato idiota o treco certo a base do teto desaba atila toledo mata modelo talita

vers ao de 23 de janeiro de 2009

113

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES anotaram a data da maratona a droga da gorda o romano acata amores a damas amadas e roma ataca o namoro s a d a tapas e sapatadas Denir algoritmo capaz de ler uma frase de at e 80 caracteres e decidir se a mesma e ou n ao e um pal ndromo. O algoritmo deve imprimir a letra S se for, e N se n ao for. Desconsiderar os brancos que est ao ` a direita da frase e tamb em aqueles que est ao entre as palavras. Para executar este exerc cio valem as seguintes deni c oes: 1. inteiro Vet1[10] Vet2[10] Vetx[10] 2. inteiro I J K L 3. Vet1(10 12 15 18 2 24 40 2 4 6) 4. Vet2(20 18 16 14 12 10 8 6 4 2) 5. Vet3(1 1 1 2 2 2 5 5 5 9) 6. I3 7. JI+1 8. I5 9. K3 10. L6

Exerc cio 91 Quanto e:


1. Vet1[2] 2. Vet2[J] 3. Vet1[K+1] 4. Vet1[K]+1 5. Vet2[vet3[4]] 6. Vet1[1+2+L] 7. Vet2[22-Vet2[2]] 8. Vet3[Vet1[10]-2]+1 9. Vet2[(3*Vet1[5])-5] 10. Vet1[4+Vet1[2]]

Exerc cio 92 Escrever um trecho de algoritmo que dena um vetor de 7 elementos inteiros, e inicialize todos os elementos com o valor 5.
88-09, Pedro Kantek

114

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES

Exerc cio 93 Escrever um trecho de algoritmo que dena um vetor de 365 elementos reais, e inicial ze todos os elementos com o valor 0. Exerc cio 94 Escrever um trecho de algoritmo que dena um vetor de 12 elementos
l ogicos, e inicial ze os primeiros 6 com VERDADEIRO e os outros 6 com FALSO.

Exerc cio 95 Escreva um algoritmo capaz de denir e ler um vetor de 28 reais e a seguir calcular e imprimir a somat oria dos elementos do vetor. Cada elemento deste vetor representa o valor da d vida de cada estado brasileiro para com a uni ao, e o que se deseja obter impresso e o valor total desta d vida.

8.5

Tabelas

Pesquisa sequ encial


Dada um vetor, uma das a c oes mais comuns sobre ela, e a pesquisa para saber se determinado elemento se encontra ou n ao contido nela. A maneira mais simples de fazer esta pesquisa e percorrer a tabela em ordem seq uencial, at e que:
O elemento (denominado CHAVE) seja encontrado, ou Chegue-se ao m da tabela, quando ent ao concluiremos que o elemento CHAVE n ao existe na tabela.

Embora seja um algoritmo simples de se imaginar e de implementar, ele n ao e dos mais ecientes, principalmente para tabelas muito grandes e com muitas pesquisas por unidade de processamento. Um primeiro melhoramento que podemos fazer, e classicar a tabela, para diminuir a quantidade de acessos at e chegar a uma conclus ao sobre a exist encia ou n ao da chave. Com a tabela classicada em ordem (digamos ascendente), a pesquisa da chave deve ser feita at e que:
A chave seja encontrada, OU Um elemento maior do que a chave seja encontrado, quando ent ao concluiremos pela n ao exist encia da chave na tabela.

A seguir o algoritmo para fazer esta pesquisa: 1: inteiro V[1000] 2: inteiro I, CHAVE 3: leia V 4: leia CHAVE 5: I 1 6: enquanto I < 100 fa ca 7: se VET[I] = CHAVE ent ao 8: escreva encontrou 9: abandone 10: mse 11: II+1 12: menquanto 13: se I = 101 ent ao 14: escreva N ao encontrou 15: mse
vers ao de 23 de janeiro de 2009

115

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES


16:

m?

Exerc cio 96 Como exerc cio, indique qual a modica c ao que se deveria fazer no algoritmo acima, se o vetor lido estiver em ordem ascendente, a m de n ao ter que percorr e-lo at e o m para certicar-se da n ao exist encia da chave. Exerc cio Resolvido 11 Imagine um poss vel renamento para tornar mais r apido
o acesso seq uencial a uma tabela (de tamanho grande) classicada. R: Basta aumentar o tamanho do salto, de 1 linha para 10, 20 ou qualquer outro valor.

Pesquisa bin aria


Trata-se da um signicativo melhoramento em termos de pesquisa a tabela. Agora a tabela e percorrida aos saltos, e n ao elemento a elemento. A redu c ao de acessos e grande e garante muita eci encia ao processo. Para poder usar esta pesquisa a tabela PRECISA estar ordenada. Se n ao estiver os resultados da t ecnica s ao imprevis veis. Em resumo e o seguinte:
A tabela e dividida ao meio (da o nome bin ria) A chave e comparada com o elemento que dividiu a tabela. Se este for menor, a primeira parte da tabela e abandonada. Se for maior abandona-se a segunda parte. A pesquisa prossegue pela divis ao ao meio da parte que cou. Rapidamente as sucessivas divis oes ao meio esgotam a tabela. O processo termina quando a chave for encontrada, ou quando a parte que restou da divis ao for nula.

Vejamos no algoritmo abaixo 1: inteiro V[100] 2: inteiro INIC,METADE,FIM,CHAVE 3: leia VET,CHAVE 4: INIC 1 {campo delimita o limite inferior da pesquisa} 5: FIM 100 {delimita o limite superior da pesquisa} 6: repita 7: METADE int(INIC + FIM)/2 8: se CHAVE < VET[METADE] ent ao 9: FIM METADE - 1 10: sen ao 11: INIC METADE + 1 12: mse 13: at e VET[METADE] = CHAVE INIC > FIM 14: se VET[METADE] = CHAVE ent ao 15: escreva achou na posi c ao ,metade 16: sen ao 17: escreva n ao achou 18: mse Vamos acompanhar um exemplo, (chinesinho) neste algoritmo. Seja o vetor: 1 7 12 20 40 41 47 49 60 88 Vamos fazer uma pesquisa bin aria para encontrar (ou n ao) a chave 77 nele. primeira itera c ao: INIC 1, FIM 10, METADE 5. Como VET[5] e 40, e 40 < 77, temos: INIC METADE + 1 ou INIC 6.
88-09, Pedro Kantek

116

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES segunda itera c ao: INIC 6, FIM 10, METADE 8. Como VET[8] e 49, e 49 < 77, temos: INIC METADE + 1 ou INIC 9. terceira itera c ao: INIC 9, FIM 10, METADE 9. Como VET[9] e 60 e 60 < 77, temos: INIC METADE + 1 ou INIC 10. quarta itera c ao: INIC 10, FIM 10, METADE 10. Como VET10] e 88 e 88 > 77, temos FIM METADE - 1 ou FIM 9. Neste ponto o ciclo se encerra, pois IN ICIO > FIM. Finalmente descobrimos que a chave n ao est a presente pois, VET [10] e 88 que e diferente de 77. Note-se que o n umero m edio de acessos em uma pesquisa bin aria e da ordem de log2 N , onde N e o n umero de elementos da tabela.

Exerc cio 97 Mediante a regra acima, determine qual o n umero m edio de acessos em
uma pesquisa bin aria para uma tabela de: 1. 5 elementos: 2. 10 elementos: 3. 20 elementos: 4. 50 elementos: 5. 100 elementos: 6. 1.200 elementos: 7. 15.000 elementos: 8. 1.000.000 elementso:

Exerc cio 98 Dado o vetor: 1 4 5 6 8 10 13 18 21 60, realizar o chinez para descobrir


a presen ca ou n ao das chaves, atrav es do algoritmo de pesquisa bin aria: 1. 8 2. 9 3. 50 4. 200

8.6

Merge (intercala c ao) de dois vetores

Este e um problema tradicional em PD: Suponhamos que existam dois vetores, com as caracter sticas:
Id enticos lay-outs Uma chave de controle (em geral n ao repetida> Ambos classicados pela chave de controle.

O objetivo e intercalar os dois vetores formando um s o, e que continue classicado. Por exemplo:
vers ao de 23 de janeiro de 2009

117

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES vetor 1 -----------------------Chave 3 Chave 8 Chave 36 Chave 87 Chave 500 vetor2 -------------------------Chave 1 Chave 9 Chave 10 Chave 11 Chave 450 Chave 490

Resultado ----------------------Chave 1 Chave 3 Chave 8 Chave 9 Chave 10 Chave 11 Chave 36 Chave 87 Chave 450 Chave 490 Chave 500

Exerc cio 99 Dadas duas datas no ano de 89, no formato dia,m es, escrever um algoritmo que as leia, escreva-as e calcule e escreva a diferen ca em dias entre ambas.

Exerc cio Resolvido 12 Dadas duas datas na d ecada de 80, no formato dia,m es,ano,
escrever um algoritmo que as leia, escreva-as e calcule e escreva a diferen ca em dias entre ambas. 1: d1,m1,a1,d2,m2,a2,qt1,qt2 : inteiro 2: V1, V1B [1..12] vetor de inteiro 3: V2 [80..89] vetor de inteiro 4: V1 (0,31,59,90,120,151,181,212,243,273,304,334) 5: V1B (0,31,60,91,121,152,182,213,244,274,305,335) 6: V2 (0,366,731,1096,1461,1827,2192,2557,2922,3288) 7: qt1 qt2 0 8: leia (d1,m1,a1,d2,m2,a2) 9: escreva (d1,m1,a1,d2,m2,a2) 10: se a2 = 80 a2 = 84 a2 = 88 ent ao 11: qt2 d2 + v1b[m2] + v2[a2] 12: sen ao 13: qt2 d2 + v1[m2] + v2[a2] 14: mse 15: se a1 = 80 a1 = 84 a1 = 88 ent ao 16: qt1 d1 + v1b[m1] + v2[a1] 17: sen ao 18: qt1 d1 + v1[m1] + v2[a1] 19: mse 20: escreva (qt2-qt1)

Exerc cio 100 Denir algoritmo que leia um vetor de 28 reais onde cada elemento do vetor representa o valor da d vida de cada estado brasileiro para com a uni ao. Os elementos
88-09, Pedro Kantek

118

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES est ao colocados em ordem decrescente (isto e as maiores d vidas na frente) e escreva a quantidade de estados que s ao necess arios para apresentar uma d vida de no m nimo 50% do total ?

Exerc cio 101 Denir um algoritmo equivalente para a leitura de um vetor de 200 elementos, seguido do c alculo e impress ao da soma dos elementos que s ao maiores que 1000. Deve ser impressa tamb em a quantidade de maiores de 1000. Exerc cio 102 Escrever um algoritmo que seja capaz de ler um conjunto de 10 valores, calcular a m edia, e imprimir todos os valores do conjunto, a m edia, e a diferen ca entre cada valor individual e a m edia calculada. Exerc cio 103 Escreva um algoritmo que leia um vetor de 36 elementos e determine
qual maior, e qual seu ndice, imprimindo ambas as informa c oes, mesmo que haja mais de um.

Exerc cio 104 Denir algoritmo que leia um vetor de 278 inteiros e escreva-o de tr as
para a frente.

Exerc cio 105 Escreva um algoritmo, que leia de uma s o vez um vetor de 100 elementos num ericos reais, e escreva aqueles que forem maiores do que o valor 150, e tamb em a quantidade deles. Exerc cio 106 Escreva um algoritmo que leia 200 valores (um a um), e crie um vetor
com tais valores, informando a seguir qual a m edia dos valores positivos e qual a m edia dos valores negativos.

Exerc cio 107 Denir algoritmo que leia uma frase de 80 caracteres e escreva a quantidade de vogais min usculas que apareceram na frase. Exerc cio 108 Denir algoritmo que leia uma frase de 90 caracteres e escreva a quantidade de consoantes mai usculas que apareceram na frase. Exerc cio 109 Denir algoritmo que leia uma frase de 100 caracteres e escreva a quantidade de palavras que apareceram na frase.

8.7

Pesquisa sequ encial

Dada um vetor, uma das a c oes mais comuns sobre ela, e a pesquisa para saber se determinado elemento se encontra ou n ao contido nela. A maneira mais simples de fazer esta pesquisa e percorrer a tabela em ordem seq uencial, at e que:
O elemento (denominado CHAVE) seja encontrado, ou Chegue-se ao m da tabela, quando ent ao concluiremos que o elemento CHAVE n ao existe na tabela.

Embora seja um algoritmo simples de se imaginar e de implementar, ele n ao e dos mais ecientes, principalmente para tabelas muito grandes e com muitas pesquisas por unidade de processamento. Um primeiro melhoramento que podemos fazer, e classicar a tabela, para diminuir a quantidade de acessos at e chegar a uma conclus ao sobre a exist encia ou n ao da chave. Com a tabela classicada em ordem (digamos ascendente), a pesquisa da chave deve ser feita at e que:
vers ao de 23 de janeiro de 2009

119

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES


A chave seja encontrada, OU Um elemento maior do que a chave seja encontrado, quando ent ao concluiremos pela n ao exist encia da chave na tabela.

A seguir o algoritmo para fazer esta pesquisa: 1: inteiro V[1000] 2: inteiro I, CHAVE 3: leia V 4: leia CHAVE 5: I 1 6: enquanto I < 100 fa ca 7: se VET[I] = CHAVE ent ao 8: escreva encontrou 9: abandone 10: mse 11: II+1 12: menquanto 13: se I = 101 ent ao 14: escreva N ao encontrou 15: mse 16: m?

Exerc cio 110 Como exerc cio, indique qual a modica c ao que se deveria fazer no algoritmo acima, se o vetor lido estiver em ordem ascendente, a m de n ao ter que percorr elo at e o m para certicar-se da n ao exist encia da chave. Exerc cio Resolvido 13 Imagine um poss vel renamento para tornar mais r apido
o acesso seq uencial a uma tabela (de tamanho grande) classicada. R: Basta aumentar o tamanho do salto, de 1 linha para 10, 20 ou qualquer outro valor.

Exerc cio 111 Mediante a regra acima, determine qual o n umero m edio de acessos em uma pesquisa bin aria para uma tabela de:
1. 5 elementos: 2. 10 elementos: 3. 20 elementos: 4. 50 elementos: 5. 100 elementos: 6. 1.200 elementos: 7. 15.000 elementos: 8. 1.000.000 elementso:

Exerc cio 112 Dado o vetor: 1 4 5 6 8 10 13 18 21 60, realizar o chinez para descobrir a presen ca ou n ao das chaves, atrav es do algoritmo de pesquisa bin aria:
1. 8 2. 9
88-09, Pedro Kantek

120

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES 3. 50 4. 200

Exerc cio 113 Denir algoritmo que


Leia um vetor de 6000 sal arios Leia o valor do sal ario m nimo vigente Calcule e escreva quantas pessoas (=sal arios) ganham at e 3,5 S.M. Idem para quem ganha mais de 3,5 e menos de 20 S.M. Idem para quem ganha 20 ou mais S.M.

Exerc cio 114 Denir algoritmo que leia um vetor de 200 inteiros e escreva os elementos que s ao maiores do que seus medonhos de 10 chifres. Dene-se o medonho de n chifresdo elemento ndice k de um vetor, ao elemento do mesmo vetor, com o menor ndice j poss vel (onde j k ) tal que j e divis vel por n, se este existir. Exemplos: Dado o vetor 1 2 3 4 6 7 8 9 0 0 0 2 3, pergunta-se qual o medonho de 3 chifres do elemento 6 (quinto elemento do vetor) ? k e igual a 5. O pr oximo j maior que cinco e divis vel por 3 (3 chifres) e 6. Logo o medonho e o sexto elemento, que e o 7. Se pedirmos o medonho do u ltimo elemento de um vetor, ele s o existir a se o medonho for o pr oprio elemento (no caso de j ser igual a k ). Isto s o ocorrer a se a ordem do u ltimo elemento for divis vel pelo n umero de chifres. Exerc cio 115 Denir algoritmo que leia um vetor de 200 elementos inteiros, e a seguir calcule e escreva a somat oria dos elementos do vetor DE ORDEM PAR. Exerc cio 116 Denir algoritmo que leia um vetor de 200 elementos inteiros, e a seguir calcule e escreva a somat oria dos elementos do vetor DE VALOR PAR. Exerc cio 117 Denir algoritmo que leia um vetor de 300 inteiros, e escreva-o sujeito ` a ordem de entrada, mas imprimindo primeiro os pares e depois os mpares. Exerc cio 118 Dado um vetor VIN de 10 elementos inteiros num ericos, criar o vetor VAI contendo 30 elementos. Onde VAI[1], VAI[2] e VAI[3] recebem VIN[1], e assim por diante. Escrever algoritmo que leia VIN e escreva VAI. Exerc cio 119 Uma grande empresa tem seus pre cos armazenados na forma de dois
vetores de 650 ocorr encias cada. No primeiro, a quem chamaremos COD est ao os c odigos dos produtos [inteiros]. No outro vetor, chamado PRE, est ao os pre cos de cada produto, NA MESMA ORDEM DE APARECIMENTO do que COD. Escrever um algoritmo que leia os vetores contendo CODIGO e QUANTIDADE e escreva o valor a pagar, pela f ormula VALOR = PRE [I] * QUANTIDADE [I].

Exerc cio 120 Dado um vetor ALFA contendo 50 n umeros inteiros e fracion arios misturados, criar um vetor BETA de mesmo tamanho, onde s o aparecem os n umeros inteiros no in cio, e com zeros ao nal. [Tantos zeros quantos eram os fracion arios em BETA]. Escrever um algoritmo que leia o vetor ALFA e escreva BETA. Exemplo: ALFA: BETA: 3 3 1.5 4 4 10 121 2.2 11 10 0 11 0
88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES E se ao nal do vetor, se colocar 99, em vez de zero, que mudan ca precisaria ser feita ?

Exerc cio 121 Denir algoritmo que leia um vetor de 1500 n umeros reais positivos sem qualquer tipo de ordena c ao. O algoritmo deve gerar outro vetor tamb em com 1500 n umeros onde os elementos que forem menores do que 10000 ser ao colocados na frente, e onde os maiores car ao no m. Exceto esta mudan ca, a ordem original do vetor deve ser preservada. Exerc cio 122 Denir algoritmo que leia uma s erie indeterminada de pares de valores formados por CODIGO,VALOR referentes a arrecada c oes do imposto de renda. CODIGO e um entre 137 c odigos poss veis, um para cada tipo de imposto. VALOR e o valor em reais efetivamente cobrado. Os dados terminam quando o c odigo 000 for lido. Ao nal do processamento, o algoritmo deve imprimir quantos reais foram arrecadados em cada um dos c odigos que foram lidos. Os dados n ao tem nenhum tipo de ordena c ao. Exemplos de c odigos poss veis (ct cios):
0246 0211 0192 0432 ... Taxas alfandeg arias Mensal~ ao Tri-le~ ao Multas por recolhimento fora de prazo,

Exerc cio 123 Desejamos analisar o mapa de uso de um disquete. Como sabemos um disquete dupla-dupla de 5 1/4, tem 2 faces, 40 trilhas e 9 setores por trilha, o que d a um total de 720 setores. Denir um algoritmo que leia 20 vetores (um de cada vez, e claro), que correspondem cada vetor a um disco diferente, e determine qual o percentual de setores livre em cada um dos discos, imprimindo tal resultado. O vetor e de inteiros, e se existe um valor zero, isto signica que o setor est a livre. Qualquer valor diferente de zero, implica em que o setor n ao est a livre. Exerc cio 124 Denir um algoritmo que leia um vetor num erico real de 100 elementos, onde est ao misturados: n umeros positivos e negativos e n umeros inteiros e fracion arios. O algoritmo deve criar um vetor de sa da tamb em de 100 elementos, onde a ordem e:
Primeiro os n umeros negativos fracion arios Depois os positivos fracion arios Depois os inteiros

Em cada uma das subclasses, a ordem original do vetor de entrada deve ser preservada. Exemplo: Vetor de entrada: 1.2 3.5 -8 -8.9 0 0 1.2 -3.1 Sa da: -8.9 -3.1 -0.9 1.2 1.2 3.5 1.2 0 0 -4 -4 -0.9

Ap os calcular o vetor de sa da, este deve ser impresso e o algoritmo encerrado.

Exerc cio Resolvido 14 Uma empresa de departamentos, quer saber quais os produtos que ela vende e que rendem mais faturamento. As op c oes de vendas s ao: brinquedos (cod. 11), armarinhos (cod. 21), roupas (cod. 33) e produtos eletr onicos (cod. 40). O cadastro de vendas da empresa tem o seguinte formato: TIPO,inteiro VALOR, real
88-09, Pedro Kantek

122

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES E nele consta 1 registro para cada venda efetuada, isto e, os c odigos se repetem. Escrever um algoritmo que leia o cadastro de vendas e totalize os quatro tipos ao nal. Solu c ao usando vetores: 1: tipo R = registro; 2: inteiro: ti; 3: real:va; 4: mregistro; 5: tipo V = vetor [1:4] R 6: V: tab; 7: R: reg; 8: inteiro: I; 9: tab[1].ti 11; 10: tab[2].ti 21; 11: tab[3].ti 33; 12: tab[4].ti 40; 13: leia (reg); 14: enquanto reg.ti = 0 fa ca 15: I 1; 16: enquanto tab[I].ti = reg.ti fa ca 17: I I + 1; 18: menquanto 19: tab[I].va tab[I].va + reg.va 20: leia(reg); 21: menquanto 22: escreva(tab)

Exerc cio 125 Suponha uma lista sequencial (um vetor num erico) de nome VET, denido globalmente, formada por n umeros inteiros positivos e contendo espa co para 20 n umeros. O preenchimento sempre se d a a partir do come co do vetor sem lacunas. Os dados v alidos se encerram quando e encontrado um n umero negativo, que faz o papel de sentinela e que sinaliza FIM DE DADOS . Obviamente cabem apenas 19 n umeros v alidos pois sempre h a que se reservar espa co para o sentinela. Notar que logo ap os a sentinela os n umeros que porventura aparecerem em VET s ao n ao con aveis e n ao devem ser considerados, isto e, o vetor n ao foi inicializado de alguma maneira antes dele come car a ser usado. A seguir est a o algoritmo de uma fun c ao que recebe como par ametro um determinado n umero inteiro positivo X, e devolve a posi c ao dele dentro de VET (caso ele de fato existisse l a dentro) ou devolve o valor 20 o que deve ser entendido como X n ao se encontra em VET. 1: Inteiro fun c ao ACHANUMERO(inteiro X) 2: Inteiro I, J, K 3: I 1 4: J 0 5: enquanto I < 20 fa ca 6: se VET[I] = X ent ao 7: JI 8: I 21 9: mse 10: I++ 11: menquanto 12: se J = 0 ent ao 13: Retorne (20) 14: sen ao
vers ao de 23 de janeiro de 2009

123

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES


15: 16: 17:

Retorne J mse Fim fun c ao Sobre o algoritmo acima, ser ao feitas 4 arma c oes desnecess 1. E ario inicializar J com o valor 0, pois J tem o valor imediatamente alterado, logo abaixo. 2. Se em vez de fazer I 21 se zesse I 20 a fun c ao deixaria de funcionar 3. Esta fun c ao pode n ao funcionar no caso em que X n ao pertence a VET 4. Esta fun c ao pode n ao funcionar no caso em que X pertence a VET

Est~ ao erradas as afirma c~ oes: a) 1, 2, 3 e 4 b) 1, 2 e 3 c) 1, 2 e 4 d) 2 e 3 e) 1 e 4

Exerc cio 126 Dena um algoritmo que leia e escreva um conjunto de 200 valores num ericos armazenando-os em uma vetor num erico (real). Feito isto, o algoritmo deve:
j calcular e imprimir a somat oria dos termos: a , onde j e um ndice que varia entre 1 j e 200, e aj e a vari avel que foi lida e armazenada no vetor.
2

Calcular e imprimir a quantidade de elementos que s ao menores que seu ndice

Exerc cio 127 Denir algoritmo capaz de receber uma s erie da datas, sempre referentes ao ano de 1988, e no formato dd, mm. Para cada uma delas, o algoritmo deve calcular uma nova data, no mesmo formato, e que corresponda ao per odo de 180 dias posterior a data original. A s erie de datas se encerra quando for lida um dia igual a zero. Exerc cio Resolvido 15 Criar um algoritmo que leia (de uma vez) um vetor de
500 elementos inteiros. A seguir o programa deve determinar qual o valor que mais aparece neste vetor e quantas vezes ele aparece. Estas duas informa c oes (qual e o mais repetido, e quantas vezes ele aparece) devem ser impressas. 1: V [1..500] de inteiro 2: MAT [1..500] [1..2] de inteiro 3: I,J,ix : inteiro 4: MAT[;1] -1 1.coluna inicializada com n umeros negativos 5: leia(V) 6: para I de 1 at e 500 fa ca 7: J1 8: enquanto (J < 500) fa ca 9: se MAT[J,1] = V[I] ent ao 10: MAT[J,2] MAT[J,2] + 1 11: abandone 12: mse 13: se MAT[J,1] < 0 ent ao 14: MAT[J,1] V[I] 15: MAT[J,2] 1 16: abandone
88-09, Pedro Kantek

124

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES


17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:

mse JJ+1 menquanto mpara maior 0 I1 enquanto (I< 500) fa ca se MAT[I,2] > maior ent ao maior MAT[I,2] ix I mse II+1 menquanto escreva (O maior e ,mat[ix,1]) escreva (E a quantidade e ,mat[ix,2])

Exerc cio 128 Uma fazenda resolveu automatizar o processo de tomada de decis ao para escolha de sementes de trigo. Assim, a rea de plantio foi dividida em 8600 lotes distintos, que devidamente semeados, tiveram a cultura de 88/89 observada. A partir dos dados levantados no campo, foi criado um arquivo contendo o seguinte lay-out:
Identifica c~ ao do lote, inteiro Tipo de semente, inteiro Area do lote plantado, em m2, real Quantidade de trigo colhido no lote, em quilogramas, real Qualidade do produto, inteiro Existem 22 tipos de sementes, numerados de 1 a 22. A qualidade do produto e um n umero que signica: 1=excelente, 2=razo avel, 3=inferior. Sup oe-se que o custo de todos os tipos de semente e o mesmo. Deve-se denir um algoritmo que leia o arquivo e determine e escreva qual o tipo de semente mais produtiva, seguindo o crit erio: Se o trigo produzido e excelente, a produtividade do lote deve ser aumentada em 20%. Se o trigo e inferior, a produtividade do lote deve ser diminu da em 15%. Para cada tipo de semente, devem ser totalizadas as informa c oes de area e peso do produto produzido. A semente mais produtiva e aquela que tiver maior coeciente peso / area.

Exerc cio 129 Uma partida de rolamentos e composta de quantidades vari veis de rolamentos tipos 1, 2 e especial. Ela e aceita no TODO quando:
pelo menos 97 % de rolamentos tipo 1 n ao tem defeito E pelo menos 95 % de rolamentos tipo 2 n ao tem defeito E Menos de 1000 rolamentos tipo especial tem defeito.

Os dados referentes a cada partida est ao no computador na forma NUMPAR, inteiro, TIP, caracter, QTDROL, inteiro, QTDDEF, inteiro NUMPAR e um n umero que identica a partida. No arquivo existem diversas partidas, por em todos os dados de uma partida est ao agrupados. TIP, e apenas um caracter cujo conteudo pode ser: 1 , 2 ou E. QTDROL e a quantidade de rolamentos deste tipo que existem na partilha. QTDDEF e a quantidade de rolamentos deste tipo defeituosos. Deve-se denir
vers ao de 23 de janeiro de 2009

125

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES um algoritmo que leia todos os dados do arquivo, e para cada partida, deve-se imprimir seu n umero e a identica c ao ACEITAou REJEITADA Um poss vel exemplo de arquivo poderia ser: 001,1,1200,10 001,E,3000,100 002,1,100,4 002,2,100,6 003,E,10000,800 004... Neste caso, o programa deveria emitir o relat orio: 001 ACEITA 002 REJEITADA 003 ACEITA 004 ...

Exerc cio 130 Uma distribuidora de bebidas abastece o mercado com COCA-COLA.
A empresa, no momento, est a preparando o iminente lan camento da coca diet etica. Assim, resolveu fazer uma pesquisa de opini ao na cidade para determinar qual a melhor estrat egia a seguir. Os dados da pesquisa est ao em um arquivo cujo lay-out e: Identifica c~ ao do quarteir~ ao da cidade, inteiro Quantidade de crian cas no quarteir~ ao, inteiro Quantidade de adolescentes no quarteir~ ao, inteiro Quantidade de pessoas obesas, no quarteir~ ao, inteiro Quantidade de diab eticos no quarteir~ ao, inteiro. Quantidade total de pessoas no quarteir~ ao, inteiro Deve-se criar um algoritmo que leia e processe os dados informando: 1. Quantos quarteir oes tem mais de 100 obesos 2. Qual a percentagem m edia (=m edia das percentagens) de crian cas por quarteir ao 3. Quantos quarteir oes tem mais adolescentes do que crian cas 4. Quantos quarteir oes tem mais de 5 % de diab eticos.

Exerc cio 131 Uma revenda de autom oveis quer fazer uma pesquisa para determinar
se h a correla c ao entre renda familiar e cor do autom ovel adquirido. Para tanto, cada venda realizada no m es passado, gerou um registro magn etico contendo: Renda fam lia, real (em R\$) Cor do carro adquirido, cadeia As cores poss veis s ao: amarelo, azul, branco, cinza, marrom, preto e verde. J a as classes de renda s ao 3: Classe 1, vai de 0 at e 50 Sal arios m nimos. A classe 2, vai de 50,01 SM at e 150 SM. A classe 3 e de quem ganha mais que 150 SM. Para cada registro lido, deve-se ver em qual categoria ele cai (para tanto, o programa ler a no in cio, o valor de um sal ario m nimo) e incrementar 1 em uma vari avel que relacione a cor e a classe. Ao nal, o programa deve imprimir: CLAS 1 2 3 AMARELO xxx xxx xxx AZUL xx xx xx BRANCO xx xx xx CINZA xx xx xx MARROM xx xx xx 126 PRETO xx xx xx VERDE xx xx xx
vers ao de 23 de janeiro de 2009

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES

Exerc cio 132 Um fabricante de margarina planeja homenagear a sua m ae no lan camento de um novo produto no ano que vem. A nova margarina dever a ter um nome formado por alguma combina c ao das letras M,E,R,T,A, que e o nome da m ae do fabricante. O exerc cio deve criar o algoritmo que fa ca e escreva as 120 combina c oes poss veis. Analisando o relat orio, o fabricante escolher a o nome que quiser. Exerc cio 133 O instituto Nacional de Pesquisas Ufol ogicas estuda com interesse a ocorr encia de contactos com seres extraterrestres em 5 pa ses: Brasil, Argentina, Canad a, Estados Unidos e Portugal. Cada contacto e minuciosamente analisado e um resumo e cadastrado no computador. Os dados s ao:
M^ es da ocorr^ encia, inteiro Ano da ocorr^ encia, inteiro Pa s, cadeia Grau do contacto, inteiro (1, 2 ou 3) Confiabilidade, (1=prov avel embuste, 2=razo avel, 3=confi avel, 4=certo!) A partir deste arquivo, deseja-se saber: 1. Qual o pa s com mais relatos ? 2. Qual o pais que proporcionalmente ao n umero de contactos apresenta mais embustes ? 3. Qual o Pais com mais contactos do terceiro grau, con veis ou certos? 4. Qual o m es mais prop cio a ocorr encias ?

Exerc cio 134 Voc e tem a seguir 3 fun c oes que buscam um determinado valor que pode ou n ao estar contido em um vetor, por hip otese, GLOBAL. Considere o nome do vetor como VET, e considere tamb em que ele tem espa co de sobra no seu nal. Assim, por exemplo, ele pode ter espa co para 1.000.000 de valores, mas atualmente usa bem menos do que isso. Considere tamb em a exist encia de uma vari avel GLOBAL chamada ULTIMOUSADO que cont em o valor do u ltimo valor v alido dentro de VET. O algoritmo 1 e o seguinte: 1: inteiro fun c ao BUSCALIN (inteiro CHAVE) 2: inteiro I 1 3: inteiro RESPOSTA -1 4: enquanto I ULTIMOUSADO fa ca 5: se CHAVE = VET[I] ent ao 6: RESPOSTA I 7: I ULTIMOUSADO+1 8: mse 9: I++ 10: menquanto 11: retorne RESPOSTA Para o algoritmo 2: 1: inteiro fun c ao BUSCALINSEN (inteiro CHAVE) 2: inteiro I 1 3: VET[ULTIMOUSADO+1] CHAVE {note que ULTIMO n ao e alterado} 4: enquanto CHAVE = VET[I] fa ca 5: I++
vers ao de 23 de janeiro de 2009

127

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES menquanto se I = ULTIMOUSALDO+1 ent ao retorne I sen ao retorne -1 mse Olhando os 2 algoritmos (que est ao corretos) podem-se fazer algumas arma c oes. Supondo que existem 800.000 valores em VET, analise as arma c oes a seguir e informe ao nal a soma das arma c oes verdadeiras:
6: 7: 8: 9: 10: 11:

1 O algoritmo 1 e o mais r apido 2 O segundo nunca detecta a aus encia da chave, pois logo de cara inclui o elemento a buscar 4 No segundo algoritmo, como a vari avel ULTIMOUSADO n ao e alterada a inclus ao da chave buscada n ao ocorre 8 O segundo algoritmo e mais r apido 16 A eventual ordena c ao em ambos os casos deixa os algoritmos mais r apidos Pede-se a soma das arma c oes verdadeiras

Exerc cio 135 No algoritmo a seguir, de uma fun c ao que detecta se o n umero X e ou n ao e primo, h a quatro lacunas. Informe qual comando deveria ser colocado em cada uma das lacunas: 1: l ogico fun c ao PRIMO(inteiro X) 2: inteiro QTD 0 3: inteiro QUO 2 4: enquanto QUO teto(raiz-quadrada(X)) QTD = 0 fa ca 5: // teto(y) e o pr oximo inteiro maior ou igual a y 6: se X mod QUO = 0 ent ao 7: . 8: mse 9: . 10: menquanto 11: se QTD = 0 ent ao 12: retorne . 13: sen ao 14: retorne . 15: mse
a) b) c) d) e) QTD++; QUO++; QTD++; QTD++; QTD++; QUO++; QTD++; QUO--; QUO--; QUO++; verdadeiro; falso falso; verdadeiro falso; verdadeiro verdadeiro; falso falso; verdadeiro

Exerc cio 136 Suponha 2 pilhas, devidamente denidas para armazenarem n umeros
inteiros, de nomes A e B. Considere que elas tem capacidades grandes (innitas, neste caso espec co). Na situa c ao inicial A pilha A cont em os seguintes elementos: 1 (o primeiro a entrar), 5, 8, 14, 3, 2, 9, 6, 7 e 5 (o u ltimo a entrar) e B est a vazia. Ap os a execu c ao do trecho correto de algoritmo a seguir, qual o conte udo de B (lido do primeiro a entrar para o ultimo a sair)
88-09, Pedro Kantek

128

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES


1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:

inteiro S 10 enquanto (S 50) fa ca Y desempilha (A) SS+Y empilha (B, Y) menquanto enquanto n ao vazia (B) fa ca Y desempilha (B) se Y mod 2 = 0 ent ao empilha (A, Y) mse menquanto 1, 5, 8, 14, 2, 6 14, 2, 6 5, 7, 6, 9, 2, 3, 14 1, 5, 14, 2, 6 1, 5, 8, 14, 3, 2, 9, 6, 7, 5

a) b) c) d) e)

Exerc cio 137 Denir algoritmo que leia uma cadeia de 200 caracteres e escreva a quantidade de letras mai usculas que s ao seguidas por uma letra min uscula. Exerc cio 138 Denir algoritmo que leia um vetor de 208 inteiros e escreva os elementos que est ao entre n umeros maiores ou iguais. Exemplo: Se o vetor lido foi 1 16 4 24 23 22 10 8 8 8 7 1 2 0 3 devem ser impressos os n umeros 16, 24, 8, 8 e 2.

Exerc cio 139 Escreva algoritmo de uma fun c ao que leia um vetor de n umeros de matr cula dos alunos aprovados em estrutura de dados (95 alunos) e que receba a matr cula de um aluno qualquer. A fun c ao deve devolver .V. se o aluno foi aprovado e .F. se foi reprovado. Exerc cio 140 Denir algoritmo que implemente uma variante da linguagem do P, a seguir descrita. Toda s laba formada s o por uma consoante e uma vogal e considerada process avel. A esta, na saida, deve ser agregada outra s laba com a consoante P e a mesma vogal. O resto do texto n ao deve ser alterado. Denir algoritmo que leia uma frase de 150 caracteres, toda em mai uscula e escreva o resultado com os P s incluidos. Exemplo:
O RATO VAI AO BURACO O RAPATOPO VAPAI AO BUPURAPACOPO

Exerc cio 141 Denir algoritmo que leia um vetor de 400 elementos inteiros e gere um segundo vetor de 200 elementos, onde cada elemento e a soma de dois elementos consecutivos do vetor de entrada. Exerc cio 142 Dado um vetor DIST com 15 distribui c oes de freq uencia estat sticas,
criar um vetor ACUM, tamb em de 15 elementos, contendo as distribui c oes acumuladas. O algoritmo deve ler DIST e imprimir DIST e ACUM.

Exerc cio 143 Imagine 2 vetores de nomes A (com 50 elementos inteiros) e B (com 100 elementos inteiros). Dena um algoritmo que crie um terceiro vetor de nome C (com
vers ao de 23 de janeiro de 2009

129

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES 150 elementos), sujeito a seguinte C [1 3 5 ... 97 99] C [2 4 6 ... 98 100] C [101 102 103 ... 149 150] lei de forma c ao: A B [1 2 3 ... 49 50] B [51 52 53 ... 99 100]

Exerc cio 144 Denir algoritmo que leia um conjunto de 20 valores reais, armazene-os em um vetor e a seguir calcule a somat oria expressa pela express ao:
S = (A1 A20 )2 + (A2 A19 )2 + ... + (A10 + A11 )2

Exerc cio 145 Denir algoritmo que leia as notas de 120 alunos. Durante o processo de leitura devem ser calculadas a m edia e o desvio padr ao. Posteriormente, devem-se imprimir as notas que estiverem fora do intervalo:
limite inferior: Media - 3 desvio padr ao limite superior: Media + 3 desvio padr ao.

(X Xm )2 n Exemplo: Dadas 5 notas (8,9,2,5,6), calcular seu desvio padr ao: DP =


C alculo da m edia: 8 + 9 + 2 + 5 + 6 / 5 6 (m edia) pares: (8 - 6), (9 - 6), (2 - 6), (5 - 6), (6 - 6) Resultados: 2, 3, 4, 1, 0 Ao quadrado: 4, 9, 16, 1, 0 Somat orio: 30 Divido por 6: 5 Raiz de 5: 2,2. Logo o D.P. e 2,2.

Exerc cio 146 Existe um livro de 370 p aginas que foi recentemente impresso. A editora deseja fazer um estudo sobre poss veis erros de impress ao. Desta forma, um especialista foi convidado a levantar quantos erros existem em cada p agina. Cada valor foi digitado na forma de um vetor, formando um conjunto de 370 valores. Denir um algoritmo que leia este conjunto de dados, armazene-o na forma de vetor, e responda:
1. Qual a p agina que tem mais erros ? (Suponha que s o existe uma, isto e ela eu nica) 2. Quantas p aginas tem zero erros ? 3. Quantas p aginas tem mais de 10 erros ?

Exerc cio 147 Denir algoritmo que leia datas (sempre referentes a 1990), no formato DD,MM. Os dados devem terminar quando for lido um dia = 0. Ao lado de cada data, o algoritmo deve imprimir o n umero de dias transcorridos desde o dia 1 de janeiro de 1990. Exerc cio 148 Denir um algoritmo que leia valores sempre inferiores a 731. Para cada valor dia, o programa deve informar a qual dia de 89 ou de 90 ele se refere, supondo que o dia 1 corresponde a 1 jan 89 e o dia 730 a 31 dez 90. Dados terminam quando for lido um valor maior do que 730.
88-09, Pedro Kantek

130

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES

Exerc cio 149 Denir algoritmo que leia 2 horas referentes sempre ao mesmo dia. A primeira hora indica quando um determinado processo produtivo come cou, e a segunda hora indica quando ele terminou. Para cada par de horas, o programa deve calcular e imprimir qual a dura c ao do processo em horas, minutos e segundos. Os dados de entrada est ao no formato: HH,MM,SS. O dado de sa da tamb em est a no mesmo formato. Exerc cio 150 Voc e precisa resolver um problema relativo a astronomia. Neste caso, pela magnitude dos n umeros, o tipo real n ao e suciente. O Objetivo do exerc cio e escrever um algoritmo capaz de implementar n umeros inteiros com 40 casas de precis ao, e com eles realizar opera c oes de adi c ao. Exemplo: Se o algoritmo ler os n umeros:
0000000200000300004000032000001000100000 e 0000001010000600007000010010001000800002 a resposta ser : 00000001210000900011000042010002000900002 Deve-se atentar que a resposta pode ter 41 casas.

Exerc cio 151 O ano letivo em uma pr e-escola tem 125 dias de aula. Em cada dia, e escolhido o aluno de melhor comportamento e seu n umero de matr cula e colocado em um vetor de 125 elementos na posi c ao correspondente ao dia espec co (1. elemento do vetor corresponde ao 1.dia de aula, e assim por diante). Denir algoritmo que ao nal do ano, quando o vetor estiver todo preenchido informe (escreva) qual o n umero do aluno que mais apareceu no vetor. O n umero de matr cula varia entre 1 e 2000 inclusive. Exerc cio 152 A Pol cia Rodovi aria vai usar uma nova abordagem para a repress ao ao excesso de velocidade na estrada. Na sa da de Curitiba, em dire c ao a Paranagu a, um posto vai anotar e digitar no computador as placas dos carros que passarem. Na chegada ` as praias, outro posto vai fazer o mesmo trabalho. Desde que o computador tem rel ogio e sabe a que horas aconteceram os dois fatos, e conhecendo a dist ancia entre os dois postos, que e de 92,6 Km, o programa ir a multar os mais afobados. O exerc cio pede que seja feita a rotina do programa que receber a os dois hor arios (no formato hh,mm ambos inteiros) e determine se o carro deve ou n ao ser multado. Lembrar que a velocidade m axima permitida e de 100 Km/h, com uma toler ancia de 10 %.

8.8

Matriz

Pelas mesmas raz oes que nos levaram a criar o conceito de vetor, precisaremos agora tratar de um outro tipo de organiza c ao de dados: as matrizes. Trata-se de arranjos bi-dimensionais; de dados. Apenas para compara c ao, os vetores s ao arranjos unidimensionais de dados. Excepcionalmente, podemos ter mais de duas dimens oes, permitindo algumas linguagens tr es ou mais. Algumas s ao mais privilegiadas neste aspecto: APL por exemplo, permite at e 256 dimens oes em algumas implementa c oes e at e 64 em outras. Nos vetores, n os precis avamos um ndice para referenciar um determinado elemento do vetor. No caso da matriz bi-dimensional, precisaremos 2 ndices: o ndice da linha e o da coluna. No caso de matrizes tridimensionais, s ao tr es os ndices: plano, linha e coluna. O formato e similar ao da deni c ao de vetor, agora acrescentando-se apenas a quantidade de elementos na segunda dimens ao. O formato e <nome> vetor de [in..] [in..] de <tipo> Por exemplo, a deni c ao de uma matriz para conter os pre cos mensais (12 meses) de um produto ao longo dos u ltimos 5 anos, seria 1: PRECO vetor de [1..5] [1..12] de real
vers ao de 23 de janeiro de 2009

131

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES Note-se que a rigor, qual e a primeira dimens ao e qual a segunda e um crit erio do programador. No caso acima, a matriz ter a 5 linhas por 12 colunas, mas nada impediria que ela fosse declarada como 12 linhas por 5 colunas. Exemplos a) A cria c ao de uma matriz 8 x 12 devidamente zerada, poderia ser assim: 1: M vetor de [1..8] [1..12] de real 2: inteiro I,J 3: para I de 1 at e 8 fa ca 4: para J de 1 at e 12 fa ca 5: M [I] [J] 0 6: mpara 7: mpara b) Dada uma matriz 7 x 13 devidamente preenchida, o algoritmo que encontra a transposta desta matriz e 1: M1 vetor de [1..7] [1..13] de real 2: M2 vetor de [1..13] [1..7] de real 3: inteiro I,J 4: leia(M1) 5: I 1 6: enquanto (I < 8) fa ca 7: J1 8: enquanto (J < 14) fa ca 9: M2 [J] [I] M1 [I] [J] 10: JJ+1 11: menquanto 12: II+1 13: menquanto

Exerc cio 153 Denir algoritmo que some duas matrizes A e B, de 7 linhas por 8 colunas cada uma, gerando a matriz C, tamb em 7 x 8, onde cada elemento de C e a soma dos dois elementos correspondentes em A e B. Exerc cio 154 Denir algoritmo que some duas matrizes A e B, de 7 linhas por 8 colunas cada uma, gerando a matriz C, tamb em 7 x 8, onde cada elemento de C e a soma dos dois elementos correspondentes em A e B, com uma restri c ao: S o se pode usar um ndice. Dica: L = f (x); C = f (x). Como s ao f e f ? Exerc cio 155 Denir algoritmo onde dada uma matriz M1 de 6 x 9, devemos totaliz ala na vertical gerando um vetor de 9 elementos. Imprimir este vetor. A seguir deve-se encontrar e imprimir a m edia destes 9 valores.

Exerc cio 156 Dena algoritmo capaz de ler uma matriz quadrada de ordem 23 e
totalizar os elementos colocados abaixo da matriz principal (exclusive esta), imprimindo o total ao nal.

Exerc cio 157 Dena um algoritmo capaz de ler duas matrizes de dimens oes 4 e 9 (a
primeira) e 9 e 7 (a segunda). Ap os lidas as matrizes devem ser multiplicadas matricialmente gerando uma sa da de dimens oes 4 x 7. A matriz resultado deve ser impressa ao nal.

Exerc cio 158 Uma matriz esparsa e aquela que conta com grande n umero de elementos nulos dentro dela. Podemos arbitrar que uma matriz e esparsa quando apenas 5%
88-09, Pedro Kantek

132

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES dos seus elementos n ao s ao nulos. Uma maneira razo avel de armazenar matrizes esparsas e criar matrizes comprimidasque guardam a linha e a coluna dos valores que n ao s ao zero (guardam o valor tamb em). Isto posto:
Escreva algoritmo que receba matriz esparsa e devolva matriz comprimida. O inverso Supondo matrizes de inteiros, indique quais tamanhos e percentuais de valores diferentes de zero recomendam o uso de matrizes comprimidas (despreze o tempo de processamento para convers ao.) Proponha pelo menos outros 2 esquemas distintos deste, de economia de espa co para matrizes esparsas

Exerc cio Resolvido 16 Sejam duas matrizes a quem chamaremos A e B. A tem


i linhas e j colunas, e B tem j linhas e k colunas. Deve-se escrever um algoritmo que tenha como resultado a vari avel C, de i linhas por k colunas, assim constitu dos: O elemento (i,k) de C ser a o menor valor das fra c oes obtidas dividindo-se todos os pares onde o primeiro elemento est a na linha i de A e o segundo elemento est a na coluna k de B. Exemplo: c[i,k] e o menor valor: a[i,1] / b[1,k] ou a[i,2] / b[2,k] ou a[i,3] / b[3,k] ou ... a[i,n] / b[n,k] Escrever um algoritmo para o caso particular em que A tem 3 linhas e 4 colunas e B tem 4 linhas e 5 colunas. Com isto C ter a 3 linhas e 5 colunas. O algoritmo deve ler A e B e imprimir C. 1: algoritmo {exemplo7} 2: MA vetor [1..3] [1..4] de real 3: MB vetor [1..1] [1..5] de real 4: MC vetor [1..3] [1..5] de real 5: inteiro I J K 6: real V1 [4] 7: real menor 8: I 1 9: leia (MA,MB) 10: enquanto I < 3 fa ca 11: J1 12: enquanto J < 5 fa ca 13: K1 14: enquanto K < 4 fa ca 15: V1[K] MA[I] [K] / MB[K] [J] 16: KK+1 17: menquanto 18: menor V1 [1] 19: K2 20: enquanto K < 4 fa ca 21: se V1 [K] < menor ent ao 22: menor V1 [K]
vers ao de 23 de janeiro de 2009

133

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES


23:

24: 25: 26: 27: 28: 29:

mse KK+1 menquanto C [I] [J] menor JJ+1 menquanto II+1 30: menquanto 31: escreva(C) 32: m{algoritmo}

Exerc cio Resolvido 17 Dada uma matriz num erica contendo 30 linhas (uma para
cada aluno) e 5 colunas (1-matricula, 2-nota prova 1, 3-nota prova 2, 4-nota trabalho, 5media), deve-se denir um programa que:
leia a matriz (ela vir a classicada em ordem ascendente de matr cula) Reclassif que-a em ordem descendente de m edia escreva o resultado
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:

algoritmo {exemplo8} MAT vetor [1..30] [1..5] de real MATS vetor [1..30] [1..5] de real V vetor [1..30] de real V (1,2,3,4,5,6,... 28,29,30) inteiro I J K leia(mat) i1 limite 30 enquanto limite > 1 fa ca I1 enquanto I < limite fa ca se MAT[I] [5] < MAT[I+1] [5] ent ao AUX MAT[I] [5] MAT[I] [5] MAT[I+1] [5] MAT[I+1] [5] AUX AUX V[I] V[I] V[I+1] V[I+1] AUX mse II+1 menquanto LIMITE LIMITE - 1 menquanto para I de 1 ate 30 fa ca MATS [I][1] MAT[V[I]][1] MATS [I][2] MAT[V[I]][2] MATS [I][3] MAT[V[I]][3] MATS [I][4] MAT[V[I]][4] MATS [I][5] MAT[V[I]][5] mpara escreva(mats) m{algoritmo} 134
vers ao de 23 de janeiro de 2009

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES

Exerc cio 159 Denir um algoritmo que leia uma matriz 9 x 9, some-a com a sua transposta e escreva o resultado. Exerc cio 160 Denir algoritmo que leia duas matrizes (A e B) de dimens oes 7 x 13 e gere uma terceira matriz, onde cada elemento e o maior entre os elementos correspondentes em A e B. Exerc cio 161 Denir algoritmo que leia duas matrizes A e B, de 9 x 16 elementos num ericos, devendo gerar uma terceira matriz sujeita as seguintes regras:
Se A[L, C ] + B [L, C ] > 100 ent ao C [L, C ] A[L, C ] e se A[L, C ] + B [L, C ] 100 ent ao C [L, C ] B [L, C ]

Exerc cio 162 Denir um algoritmo que leia uma matriz 5 x 7, inverta suas linhas e a seguir, escreva-a. Exemplo: se a matriz lida for (3 x 4):
1 1 0 4 1 0 3 2 3 2 1 3 ser:

a resposta dever 0 0 3 3 1 1 2 1 1 4 3 2

Exerc cio 163 Denir um algoritmo que leia uma matriz 5 x 8, inverta suas colunas de ordem par e a seguir, escreva-a. Exemplo: se a matriz lida for (3 x 8):
1 1 0 4 1 0 3 2 3 2 1 3 1 0 2 2 0 3 3 7 7 4 8 9

a resposta dever 1 4 3 2 1 2 1 8 2 0 0 1 0 9 3 3 2 3

ser: 3 4 7 1 7 0

Exerc cio 164 Denir algoritmo que efetue a multiplica c ao matricial de duas matrizes,
que dever ao ser lidas de uma s o vez: A primeira matriz tem forma 8 linhas por 9 colunas, e a segunda tem 9 linhas por 3 colunas. O resultado, depois de calculado, deve ser impresso.

Exerc cio 165 Escrever um algoritmo que leia (de uma s o vez) uma matriz de 23 linhas por 10 colunas. Esta matriz representa a popula c ao dos 10 maiores munic pios de cada estado Brasileiro. Em cada linhas, as colunas est ao em ordem decrescente, com exce c ao da primeira coluna, que sempre representa a capital. O algoritmo deve imprimir:
1. Qual o n umero do estado de capital mais populosa ? 2. Qual a m edia das popula c oes das capitais do Brasil ? 3. Quais os n umeros (de estado e de munic pio) dos munic pios que tem popula c ao maior que a capital ?
vers ao de 23 de janeiro de 2009

135

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES

Exerc cio 166 Uma matriz representa os valores da cota c ao da soja no mercado de Chicago em d olares por tonelada, de hora em hora (das 09:00 as 18:00 = 10 linhas), e nos 22 dias u teis de julho/89 (22 colunas). Deseja-se um algoritmo que informe:
1. Quais as maiores cota c oes dia a dia (22 valores) 2. Qual a hora em que foi mais freq uente aparecer a maior cota c ao (Neste caso n ao haver a empate, por deni c ao). 3. Em quais dias a m edia da manh a (primeiros 5 valores) foi maior do que a m edia da tarde (5 u ltimos valores).

Exerc cio 167 Dada uma matriz de dimens oes 8 x 15, obter uma outra tamb em de dimens oes 8 x 15, onde cada linha foi dividida pelo menor elemento da linha correspondente na matriz original. Exerc cio 168 Dada uma matriz de dimens oes 9 x 12, obter uma outra tamb em de
dimens oes 9 x 12, onde cada linha foi dividida pela somat oria dos elementos da linha correspondente na matriz original.

Exerc cio 169 Dada uma matriz de 7 linhas por 12 colunas, denir algoritmo que a leia, e a seguir classique as linhas da matriz pelos valores indicados na coluna 4. A matriz resultado deve ser impress ao ao nal. Exerc cio 170 Dada uma matriz de 8 linhas por 6 colunas, deve-se criar um algoritmo capaz de l e-la de uma s o vez, e a seguir gerar uma matriz de id entica forma (8x6) onde cada linha e o produto acumulado da linha da matriz original. Exemplo:
Se a matriz lida for: 1 4 1 2 3 2 2 2 5 0 3 2 0 o resultado ser a 2 4 2 1 4 1 2 3 15 0 8 0 0 2 6 24 4 8 16

Porqu e tudo come ca com 1 ? A palavra digital vem do latim digitus que signica dedo, e por que temos 10 dedos, toda nossa l ogica aritm etica se criou sobre um sistema decimal (de 10). J a que s ao 10 d gitos e qualquer n umero e composto por uma combina c ao desses d gitos seria de se esperar que cada um dos 10 d gitos tivesse uma distribui c ao proporcional quando vai se representar um n umero qualquer. Assim, teoricamente, se analisarmos um grande conjunto de n umeros, seria de se esperar que os d gitos 1, 2, 3, ... aparecessem em 10% das vezes, cada um iniciando os n umeros. Anal, n ao existem d gitos mais bonitos ou mais simp aticos para que apare cam no come co dos n umeros mais do que os outros. Ou ser a que existem ? Em 1938, um matem atico chamado Benford, acabou descobrindo que sim, existem d gitos iniciais mais frequentes do que outros. Ele estudou um monte de distribui c oes e chegou ` a conclus ao que o d gito 1 ocorre no come co em cerca de 30% das vezes, independente da fonte ou do fen omeno que e consultado.
88-09, Pedro Kantek

136

vers ao de 23 de janeiro de 2009

CAP ITULO 8. VETORES E MATRIZES Parece estranho, mas e verdade: em qualquer tabela, uma grande quantidade de n umeros come ca com o d gito 1. Muito mais do que os demais d gitos. Veja-se a seguinte conjunto de dados, extra do do livro de Benford. Veja na tabela 8.1. Parece que a distribui c ao do primeiro d gito em n umeros segue a seguinte distribui c ao logar tmica: P (n) log(n + 1) log n para n = 1, 2, ...9. Este e a Lei do Primeiro D gito.

Col.

Tabela 8.1: Distribui c ao dos primeiros d gitos T tulo do assunto 1 2 3 4 5 6

A B C D E F G H I J K L M N

Popula c oes Constantes Exemplares aleat orios de jornais Calores espec cos de subst ancias Peso molecular Drainage Peso at omico n1 ou n exemplares do Readers Digest Voltagem de raios X Dados da liga americana de baseball Endere cos aleat orios n1 , n2 , ...n! Taxas de Mortalidade M edia

33.9 41.3 30.0 24.0 26.7 27.1 47.2 25.7 33.4 27.9 32.7 28.9 25.3 27.0 30.6

20.4 14.4 18.0 18.4 25.2 23.9 18.7 20.3 18.5 17.5 17.6 19.2 16.0 18.6 18.5

14.2 4.8 12.0 16.2 15.4 13.8 5.5 9.7 12.4 14.4 12.6 12.6 12.0 15.7 12.4

8.1 8.6 10.0 14.6 10.8 12.6 4.4 6.8 7.5 9.0 9.8 8.8 10.0 9.4 9.4

7.2 10.6 8.0 10.6 6.7 8.2 6.6 6.6 7.1 8.1 7.4 8.5 8.5 6.7 8.0

6.2 5.8 6.0 4.1 5.1 5.0 4.4 6.8 6.5 7.4 6.4 6.4 8.8 6.5 6.4

4.1 1.0 6.0 3.2 4.1 5.0 3.3 7.2 5.5 5.1 4.9 5.6 6.8 7.2 5.1

3.7 2.9 5.0 4.8 2.8 2.5 4.4 8.0 4.9 5.8 5.6 5.0 7.1 4.8 4.9

2.2 10.6 5.0 4.1 3.2 1.9 5.5 8.9 4.2 4.8 3.0 5.0 5.5 4.1 4.7

N umeros pesquisados 3259 104 100 1389 1800 159 91 5000 308 707 1458 342 900 418 1011

vers ao de 23 de janeiro de 2009

137

88-09, Pedro Kantek

CAP ITULO 8. VETORES E MATRIZES

88-09, Pedro Kantek

138

vers ao de 23 de janeiro de 2009

Cap tulo 9

Registros
Este tipo indica uma estrutura complexa, formada por v arios tipos primitivos, e que passam a ser usados conjuntamente. Ela e criada em duas etapas. Na primeira, denese do que e composta a estrutura, e na segunda, quais as vari aveis que ser ao mapeadas por essa estrutura. Defini c~ ao da estrutura: estrutura <nome da estrutura> <tipo> <nome campo 1> <tipo> <nome campo 2> ... <tipo> <nome campo n> fim {estrutura} Utiliza c ao da estrutura em vari aveis: <nome da estrutura> <nome da vari avel> // exemplo: ENDERE CO CLIENTE // exemplo: estrutura ENDERE CO // alfanum RUA [30] // inteiro N UMERO // inteiro CEP // alfanum CIDADE [20] // fim {estrutura}

Obviamente, depois que um tipo estrutura foi denido, ele pode ser usado em qualquer local da linguagem onde a indica c ao <tipo> apare ca, por exemplo, em vetores.

9.1

Deni c ao de registros

uma cole registro E c ao HETEROGENEA de coisas. As coisas s ao reconhecidas pelo seu nome. Por exemplo, uma placa de automovel e um conjunto de 3 letras e 4 n umeros. N ao tem como denir estra estrutura usando vetores. estrutura PLACA caracter LETRA[3] inteiro NUMERO m {estrutura} PLACA VEICULO VEICULO.LETRA ABC VEICULO.NUMERO 1234 leia VEICULO leia (VEICULO.LETRA, VEICULO.NUMERO) N ao confunda PLACA ( e apenas uma estrutura, n ao ocupa lugar na mem oria e pode ser referenciada em comandos) com VEICULO (a vari NAO avel cuja estrutura e PLACA, ocupoa lugar, pode ser referenciada... 139

CAP ITULO 9. REGISTROS Deve-se lembrar que uma matriz tamb em pode ser denida com um vetor de vetores (ou um registro). Acompanhe: estrutura LINHAS inteiro COLUNAS[10] m { estrutura } LINHAS MAT[20] Note que neste caso, existe uma matriz MAT contendo 20 linhas por 10 colunas. O acesso agora se d a MAT[3].COLUNAS[4] ... ao inv es de MAT[3] [4] ... que seria o normal de uma matriz. vetor de registros Nada impede que um registro seja vetorizado. Acompanhe. estrutura DEBITO inteiro RG pontoutuante PRESTACAO m {estrutura} DEBITO CLIENTES[100] Neste caso, existe um vetor de 100 (registros) d ebitos. Para acessar a presta c ao do 10o cliente, far amos: CLIENTES[10].PRESTACAO registro de vetores Tamb em nada impede que um registro tenha vetores estrutura ECONOMETRIA pontoutuante INFLACAO[12] inteiro POPULACAO inteirolongo PIB m { estrutura } ECONOMETRIA BRASIL, ARGENTINA, PARAGUAI Neste caso, como acessar as 2 u ltimas taxas de ina c ao de BRASIL e de PARAGUAI ? BRASIL.INFLACAO[12], BRASIL.INFLACAO[11] e PARAGUAI.INFLACAO[12], PARAGUAI.INFLACAO[11]

Exerc cio Resolvido 18 Uma organiza c ao tem um conjunto de registros de vendas


do m es de janeiro de 1988. Tais registros tem o formato: REG: DIA,inteiro; VALOR,real. Criar um algoritmo capaz de ler os dados e imprimir os totais di arios. O processamento termina quando for lido um dia igual a 00. 1: tipo R = registro 2: inteiro: dia 3: real:valor 4: mregistro 5: R: reg 6: tipo V = vetor[1:31] real 7: V: acum 8: acum 0 9: leia(reg)
88-09, Pedro Kantek

140

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS


10: 11: 12: 13: 14:

enquanto dia = 0 fa ca acum [dia] acum [dia] + reg.valor leia(reg) menquanto escreva(acum)

Exerc cio Resolvido 19 Uma organiza c ao tem um conjunto de registros de vendas


do m es de janeiro de 1988. Tais registros tem o formato: REG: DIA,inteiro; VALOR,real. Criar um algoritmo capaz de ler os dados e imprimir os totais di arios. O processamento termina quando for lido um dia igual a 00. Resolver o problema, sujeito ` as restri c oes:
N ao se pode usar vetor Os dados j a v eem classicados por ordem de dia.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:

tipo R = registro inteiro: dia real:valor mregistro R: reg inteiro: diaant real: total total 0 leia(reg) ant dia enquanto dia = 0 fa ca enquanto dia = diaant fa ca total total + valor leia(reg) menquanto escreva (total) total valor diaant dia se dia = 0 ent ao leia(reg) mse menquanto

Exerc cio Resolvido 20 Uma empresa tem registros de vendas de todo o ano de
1987, na forma (dia,m es,valor). Dia e m es s ao inteiros, e valor e real. Criar um algoritmo que leia todo o arquivo e escreva os totais di arios. N ao e necess rio denir registro. 1: inteiro: dia,mes 2: real: valor 3: tipo M = matriz [1:12, 1:31] real 4: M: cad 5: cad 0 6: leia (dia,mes,valor) 7: enquanto dia = 0 fa ca
vers ao de 23 de janeiro de 2009

141

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS


8: 9: 10: 11:

cad [mes,dia] cad [mes,dia] + valor leia (dia,mes,valor) menquanto escreva(cad)

vai distribuir R$ 100.000 de pr Exerc cio 171 A Empresa DEUNOPE emio de m de ano a seus vendedores. Cada vendedor receber um xo de 1.000. A diferen ca, isto e, a quantia que sobrar, ser a distribu da proporcionalmente ao total de vendas de cada um. A Empresa tem no m aximo 50 vendedores , e seus dados est ao em um arquivo que cont em o lay-out Nome do vendedor, cadeia [30] total de vendas, real Para resolver este algoritmo, sem usar vetores, deve-se ler o arquivo duas vezes.

Exerc cio Resolvido 21 Existe uma turma do curso de PD que teve os dados
referentes ao bimestre transcritos em cart oes na forma: MATR,inteiro NT1,NT2:real NOTPROV,real (NT=nota trab) Os dados terminam quando for lida uma matr cula igual a zero. Escreva um algoritmo que dena o registro acima, leia o arquivo, calcule a m edia para cada aluno, usando a f ormula: M = ((T1 2) + T2 + (Nprova 7)) 10 Ap os cada c alculo, deve-se imprimir, o n umero da matr cula, a m edia nal e a mensagem: PARABENS , caso a m edia tenha sido maior ou igual a 7. Se a m edia foi menor que 7, a mensagem e PRECISAMOS ESTUDAR MAIS.... tipo C = registro inteiro: matric real: t1, t2, pr mregistro C: cad real: media caracter: mensagem leia (cad) enquanto matric = 0 fa ca media (t1 * 2) + t2 + (pr * 7) media media / 10 se media 7 ent ao mensagem PARABENS sen ao mensagem PRECISAMOS ESTUDAR MAIS... mse escreva (matric, media, mensagem) leia (cad) menquanto

Exerc cio Resolvido 22 Existe um arquivo que cont em alunos que dever ao se
dirigir a unidades da universidade para fazer vestibular. Tais dados est ao em um cadastro que tem o formato:
88-09, Pedro Kantek

142

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS MATRE,inteiro Dist-unid-1,real DU2,real DU3,real Denir um algoritmo que leia tais registros e para cada um, gere um outro registro no formato MATRS,inteiro Num-uni-mais-prox,inteiro distancia,real Os dados acabam quando for lida uma matr cula zero. tipo E = registro inteiro: ME; real: U1, U2, U3; 4: mregistro 5: E: CADE; 6: tipo S = registro 7: inteiro: MS, UP; 8: real: DU; 9: mregistro 10: S: CADS; 11: leia (CADE); 12: enquanto ME = 0 fa ca 13: se U1 U2 U1 U3 ent ao 14: UP 1; 15: DU U1; 16: mse 17: se U2 U1 U2 U3 ent ao 18: UP 2; 19: DU U2; 20: mse 21: se U3 U1 U3 U2 ent ao 22: UP 3; 23: DU U3; 24: mse 25: MS ME; 26: grave (CADS); 27: leia (CADE); 28: menquanto
1: 2: 3:

Exerc cio 172 Suponha as seguintes estruturas


estrutura X inteiro A real B inteiro C[5] m estrutura estrutura Y inteiro D 8: X E[3] 9: m estrutura 10: Y F
1: 2: 3: 4: 5: 6: 7:
vers ao de 23 de janeiro de 2009

143

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS Pede-se o desenho da area F, com todos os seus componentes

Exerc cio 173 Projete a estrutura necess aria para comportar todas as informa c oes dos alunos da UP. Veja que cada aluno tem NOME (com tamanho m aximo de 40 caracteres), idade e c odigo de matr cula. Os alunos se agrupam em turmas de no m aximo 70 alunos. Cada turno tem 4 turmas e cada curso tem 2 turnos. Finalmente, h a na UP 28 cursos. Para a estrutura acima, responda
Quantos alunos cabem no total ? Supondo que alunos n ao preenchidos cont em idade = 0, qual o algoritmo que conta quantos alunos h a no curso 22 ? Qual o algoritmo que conta quantos alunos estudam pela manh a (1. turno) ? Qual o algoritmo que imprime o nome de todos os alunos do curso de inform atica (curso=8)

Exerc cio 174 Suponha a estrutura necess aria para conter um romance, sujeito as seguintes limites: linhas de 60 caracteres; p aginas de 43 linhas; cap tulos de 20 p aginas; livros de 18 cap tulos.
Dena a estrutura em quest ao Escreva o algoritmo que imprime as capitulares (primeiro caractere de cada cap tulo). Escreva o algoritmo que imprime o cap tulo 2 Escreva o algoritmo que imprime as p aginas mpares dos cap tulos pares.

Exerc cio 175 Suponha que para identicar uma origem ou um destino, h a que se ter 3 informa c oes: nome da cidade, sigla do estado a que pertence e pa s. Isto posto, escreva a estrutura necess aria para identicar uma viagem. Uma viagem e composta pelas informa c oes: origem, destino, data da viagem, dura c ao em dias. Exerc cio Resolvido 23 Na realiza c ao da u ltima feira de moda no Parque Barig ui,
estiveram perto de 100.000 visitantes. Cada fam lia informou seu estado de origem e quantos componentes tinha. Tais dados se encontram em um arquivo com o formato: ESTADO, cadeia[2]; NUMVIS, inteiro. ESTADO e a sigla com 2 caracteres. Criar um algoritmo que leia tal arquivo, exclua os visitantes do estado do Paran a, (sigla PR), e totalize por estado de origem, em ordem alfab etica. Os dados terminam quando for lido um estado igual a XX , que n ao deve ser considerado para efeito de c alculo. tipo R = registro estado : caracter qtd : inteiro mregistro TAB [1:24] vetor de R reg : R tab[1].estado AC 8: tab[2].estado AL 9: tab[3].estado AM 10: tab[4].estado BA
1: 2: 3: 4: 5: 6: 7:

88-09, Pedro Kantek

144

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS


11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:

tab[5].estado CE tab[6].estado DF tab[7].estado ES tab[8].estado GO tab[9].estado MA tab[10].estado MG tab[11].estado MS tab[12].estado MT tab[13].estado PA tab[14].estado PB tab[15].estado PE tab[16].estado PI tab[17].estado RJ tab[18].estado RN tab[19].estado RO tab[20].estado RS tab[21].estado SC tab[22].estado SE tab[23].estado SP leia (reg) enquanto (reg.estado = XX fa ca se reg.estado = PR ent ao I1 enquanto tab[I].estado = reg.estado fa ca II+1 menquanto tab[i].qtd tab[i].qtd + reg.qtd mse leia (reg) menquanto escreva (tab)

Outra possibilidade se solu c ao seria n ao colocar os estados na tabela, e a medida que eles fossem chegando, a tabela fosse sendo incrementada. Neste caso, se a sa da tivesse que ser ordenada este trabalho teria que ser feito a parte ao nal dos dados. A solu c ao caria: 1: tipo R = registro 2: estado : caracter 3: qtd : inteiro 4: mregistro 5: TAB [1:24] vetor de R 6: reg : R 7: tab ... {espa cos e zeros} 8: leia (reg); 9: enquanto (reg.estado = XX fa ca 10: se reg.estado = PR ent ao 11: I1 12: enquanto tab[I].estado = reg.estado TAB[I].ESTADO = fa ca 13: II+1 14: menquanto 15: se TAB[I].ESTADO = ent ao 16: TAB[I].ESTADO REG.ESTADO 17: mse
vers ao de 23 de janeiro de 2009

145

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS


18: 19: 20: 21: 22:

tab[i].qtd tab[i].qtd + reg.qtd mse leia (reg) menquanto escreva (tab)

Exerc cio Resolvido 24 Uma companhia a erea tem 6 tipos de avi oes: 737-200,
737-300, 727, 707, A300 e Bandeirantes. Do cadastro de viagens realizadas no u ltimo ano, obteve-se o seguinte arquivo: TIPO,cadeia[6]; PASSAG,inteiro; DIST,real, onde TIPO e um campo de 6 posi c oes com a identica c ao de tipo de avi ao, PASSAG ea quantidade de pessoas transportadas e DIST e a dist ancia do trecho percorrido. Cada vo que a Companhia realizou no ano tem um correspondente registro neste arquivo. Deve-se escrever um algoritmo que leia o arquivo e crie uma tabela de 6 ocorr encias contendo as quantidades totais de passageiros e dist ancias por tipo de avi ao. O objetivo nal e conhecer a produtividade de cada tipo de avi ao, dada pela raz ao: passageiros / dist ancia. O programa deve imprimir o nome do tipo de todos os avi oes, e ao lado sua produtividade. Os dados terminam quando for lido um tipo totalmente em branco. 1: tipo R = registro 2: aviao : caracter 3: passag : inteiro 4: distancia : real 5: mregistro 6: TAB [1..6] vetor de R 7: tipo R1 = registro 8: av : caracter 9: pa : inteiro 10: di : real 11: mregistro 12: REG : R1 13: inteiro: I; 14: real: prod; 15: leia (reg) 16: enquanto (av = ) fa ca 17: I 1; 18: enquanto (I < 7) fa ca 19: se aviao [I] = av ent ao 20: abandone 21: mse 22: se aviao [I] = ent ao 23: aviao [I] av; 24: passag [I] pa; 25: distancia [I] di; 26: I 7; 27: abandone 28: mse 29: menquanto 30: se I < 7 ent ao
88-09, Pedro Kantek

146

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS


31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:

passag [I] passag [I] + pa; distancia [I] distancia[I] + di; mse leia(reg); menquanto I 1; enquanto I < 7 fa ca prod passag [I] distancia [I] escreva ( Tipo , aviao [I], produtividade, prod); I I + 1; menquanto

Exerc cio Resolvido 25 Exemplo: multiplica c ao matricial


1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:

I0 J0 K0 A [1..3] [1..4] vetor de real B [1..4] [1..5] vetor de real R [1..3] [1..5] vetor de real A[1;1] 1 A[1;2] 2 A[1;3] 3 A[1;4] 4 A[2;1] 5 A[2;2] 6 A[2;3] 7 A[2;4] 8 A[3;1] 9 A[3;2] 10 A[3;3] 11 A[3;4] 12 B[1;1] 1 B[1;2] 2 B[1;3] 3 B[1;4] 4 B[1;5] 5 B[2;1] 6 B[2;2] 7 B[2;3] 8 B[2;4] 9 B[2;5] 10 B[3;1] 11 B[3;2] 12 B[3;3] 13 B[3;4] 14 B[3;5] 15 B[4;1] 16 B[4;2] 17 B[4;3] 18 B[4;4] 19 B[4;5] 20 para I de 1 ate 3 fa ca 147
88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS para J de 1 ate 5 fa ca S0 para K de 1 ate 4 fa ca S S + A[I;K] B[K;J] mpara R[I;J] S mpara 47: mpara 48: escreva R
40:

41: 42: 43: 44: 45: 46:

Exerc cio Resolvido 26 Exemplo: Desvio Padr ao Seja o desvio padr ao


= que e calculado pelo seguinte algoritmo algoritmo dp 2: I 0 3: V [1..10] vetor de real 0 4: M 0 5: para I de 1 ate 10 fa ca 6: V[I] I vezes 2 7: mpara 8: para I de 1 ate 10 fa ca 9: M M + V[I] 10: mpara 11: M M 7 12: R 0 13: para I de 1 ate 10 fa ca 14: R R + (V [I ] M )2 15: mpara 16: R R7 17: R R 18: escreva R
1:

(X X )2 n

9.2

Processamento de Textos

Um cap tulo important ssimo do processamento de dados se refere ao processamento de texto. Trata-se de transformar o computador em uma super m aquina de escrever capaz de realizar todas as tarefas triviais do manuseio de textos e tamb em algumas outras facilidades desejadas. A import ancia deste assunto, em um curso de l ogica de constru c ao de algoritmos est a em que para manusear texto, desenvolvem-se in umeras t ecnicas muito u teis para a interpreta c ao e manuseio de dados na forma alfab etica, que n ao necessariamente precisam ser textos. Um texto, nesta acep c ao e um conjunto indeterminado de caracteres. Pode ser uma vari avel cadeia (limitada a 255), ou um vetor de caracteres, neste caso, sem limite. Alguns caracteres inclu dos no meio do texto podem format a-lo de maneira a mudar seu visualquando o imprimirmos. Um exemplo deste tipo de caracter s ao o RETORNO DE CARROe o MUDANCA DE LINHA. Quando colocados juntos no meio de um texto, eles causam a mudan ca de linha e o retorno ao in cio da pr oxima linha. Os caracteres ASCII referentes: retorno de carro: CR = carriage return = C odigo 13 do ASCII LF = line feed = C odigo 10 do ASCII
88-09, Pedro Kantek

148

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS Em outros textos, cada linha tem no seu in cio, uma vari vel num erica que indica qual o comprimento da linha, e neste caso n ao h a necessidade de usarem-se delimitadores.

Cadeia e vetor de caracteres


Neste ponto, podemos ver com mais clareza, o conceito de cadeia de caracteres. Trata-se de um vetor de caracteres. Falando em termos rigorosos, a deni c ao: caracter VET[30] equivale a uma cadeia VET[30] A explica c ao para a exist encia desta particulariza c ao do conceito de vetor, e que o tipo primitivo (no caso, o caracter, que tem sempre comprimento igual a 1), e muito pouco adequado, pois praticamente todas as informa c oes alfanum ericas exigem mais de um caracter para serem u teis. Entretanto, existem pelo menos tr es diferen cas entre um vetor de caracteres e uma cadeia. A cadeia est a limitada a 255 caracteres de comprimento, e o vetor n ao tem esta limita c ao. Em pascal, a cadeia pode ser lida e gravada de uma vez, ao contr rio dos vetores. Entretanto, tanto a cadeia quanto o vetor podem ser percorridos atrav es de ndices. IMPORTANTE: Ao se fazer o ORD de um elemento indexado, a OBSERVAC AO o resposta ser a a ordem do elemento indexado no universo considerado e NAO ndice do elemento dentro do vetor. Exemplo seja o vetor V ABCDEFGHI Se zermos ord(V[3]) a resposta e ord(C) que e 67, e n ao 3 como poderia parecer aos mais incautos.

Exerc cio 176 Escreva um algoritmo que leia uma frase terminada por um ponto, com tamanho inferior a 80 caracteres, e um u nico espa co em branco separando cada palavra, e escreva o n umero de palavras da frase. DESAFIO: a quantidade de palavras femininas (i. e: terminadas em A ). Exerc cio 177 Denir algoritmo capaz de receber uma frase e converter as letras min usculas lidas em mai usculas, imprimindo este resultado. Exemplo: Se for lida a frase Ivo viu a LARANJA , a resposta ser a IVO VIU A LARANJA . Exerc cio 178 Denir um algoritmo que leia uma frase de at e 80 caracteres, alinhada ` a esquerda e determine e escreva:
1. Qual o n umero da maior palavra da frase 2. Quantos caracteres ela tem de comprimento. Exemplo: Se for lida a frase Maria comeu a melancia , o algoritmo dever a imprimir 4,8.

Exerc cio 179 Escrever um algoritmo para criptografar textos, usando o algoritmo da
Criptograa de Cezar , para k=3.

Exerc cio 180 Justica c ao: Dada uma linha com um comprimento cl, e supondo uma
frase com comprimento cf, e supondo mais, que cl seja maior do que cf, surge o problema de estabelecer a frase na linha ALINHADA pela esquerda e pela direita. Chama-se a isto de justica c ao, e os bons datil ografos fazem isto quase instintivamente. Por exemplo,. se tivermos a frase IVO.VIU.A.UVA (. e branco), que tem um cf de 13, para ser impressa em uma linha de 20 (cl=20), alinhada a esquerda e a direita, como fazer isto ? Um poss vel ataque para o problema e estabelecer: nb = n umero de brancos (nb = cl - cf). No caso: 20 - 13 = 7 np = n umero de palavras. No caso np = 4
vers ao de 23 de janeiro de 2009

149

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS ne = numero de locais receptores de brancos. ne = pred (np). No caso ne=3 b1 = tamanho do primeiro preenchimento. b1 = nb div ne. No caso b1 = 7 div 3 = 2 b2 = tamanho do segundo preenchimento. b2 = succ(b1). No caso b2 = 3 n2 = quantidade de b2s. n2 = nb mod ne. No caso: n2 = 7 mod 3 = 1 n1 = quantidade de b1s. n1 = ne - n2. No caso: n1 = 3 - 1 = 2 Em resumo, para justicar IVO.VIU.A.UVA em 20 posi c oes, devemos inserir 1 (n2) bloco de 3 (b2) espa cos, e 2 (n1) blocos de 2 (b1) espa cos no texto. O local de inser c ao ca a crit erio do usu ario, mas pode-se sugerir a seguinte coloca c ao: (. signica espa co em branco) IVO...VIU....A...UVA.

Exerc cio 181 Imagine um algoritmo capaz de ler uma entrada formada por at e 60 caracteres, que correspondem a uma frase. Esta frase termina quando for encontrado um ponto. O algoritmo deve ser capaz de responder:
Qual o tamanho da frase Quantas palavras existem na frase Quantas vezes a dupla ma apareceu na frase.

Exerc cio 182 Escrever um algoritmo que leia uma linha de caracteres (m aximo de 60) contendo uma frase (palavras separadas por branco). O algoritmo deve imprimir as palavras cujo comprimento for maior que 6 caracteres. Exerc cio 183 Dado um texto, sem nenhum caracter de controle, na forma de um vetor, imprimi-lo com tamanho de linha = 60, alinhado a esquerda. N ao quebrar palavras. Exerc cio 184 Dado um texto, na forma de um vetor e formado por min usculas e mai usculas indistintamente, imprimi-lo todo em mai usculas. Exerc cio 185 Dado um texto, na forma de um vetor e formado s o por min usculas, imprimi-lo colocando cada primeira letra de todas as palavras em mai usculos. Exerc cio 186 Dado um texto, na forma de um vetor, calcular a quantidade de letras, brancos e palavras, imprimindo estes resultados ao nal. Exerc cio 187 Escrever um algoritmo para criptografar textos, usando o algoritmo da Criptograa de Cezar, para k=n, onde n deve ser lido e e vari avel embora xo no texto a criptografar. Exerc cio 188 Dado um texto, sem nenhum caracter de controle, na forma de um vetor, imprimi-lo com tamanho de linha vari avel, informado no in cio do programa, alinhado a esquerda. N ao quebrar palavras. Exerc cio 189 Dado um texto, sem nenhum caracter de controle, na forma de um vetor, imprimi-lo com tamanho de linha vari avel, informado no in cio do programa, alinhado ` a direita. N ao quebrar palavras.
88-09, Pedro Kantek

150

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS

Exerc cio 190 Suponha que todas as palavras terminadas em as ao femininas e todas as terminadas em os ao masculinas. Dena um algoritmo que leia uma frase de no m aximo 80 caracteres contendo palavras separadas por um branco, e com a frase terminando por um . . O algoritmo deve:
1. Contar quantas palavras existem 2. Quantas s ao masculinas 3. Quantas s ao femininas Imprimir estes resultados ao nal

Exerc cio 191 Imagine um algoritmo capaz de ler uma entrada formada por at e 60 caracteres, que correspondem a uma frase. Esta frase termina quando for encontrado um ponto. O algoritmo deve ser capaz de responder: a) Qual o tamanho da frase b) Quantas palavras existem na frase c) Quantas vezes a dupla maapareceu na frase.

Correspond encia de cadeias


Este problema surge com alguma freq u encia em diversos lugares na ci encia da computa c ao. O caso mais comum e o de pesquisar uma palavra dentro de um texto que est a sendo editado. Qualquer processador de texto faz isso. Em outra aplica c ao busca-se comparar 2 cadeias de acidos nucleicos dentro de uma mol ecula de DNA. Aqui s ao apenas 4 letras (ACTG) e largas seq u encias s ao buscadas. Eis a formaliza c ao do problema: H a uma cadeia C composta por 1..n caracteres. H a uma palavra a buscar, P composta por 1..m caracteres. Naturalmente n m. Os caracteres de C e de P foram tirados de algum alfabeto nito . Assim, podemos ter = {0, 1}, ou = {A, C, T, G} ou o alfabeto ASCII ou similar. Diz-se que P ocorre em T com deslocamento s, se a partir da posi c ao s + 1 de T e pelos pr oximos m caracteres, h a uma correspon encia completa entre P e T. O problema da correspond encia de caracteres busca encontrar todos os delocamentos v alidos em T que correspondem a P. H a duas classes de algoritmos de busca aqui: o primeiro, e o mais simples, chamado de for ca bruta, n ao realiza nenhum pr e-processamento nas cadeias

For ca Bruta
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:

Algoritmo For ca Bruta para busca em cadeias (padr ao P, texto T) i1 CONTADOR 0 enquanto (i < tamanho(T)-tamanho(P)) fa ca aux 0; j 1 enquanto (j tamanho(P)) (T[aux + i] = P[j]) fa ca CONTADOR++ aux++ j++ menquanto se j = tamanho(P) + 1 ent ao escreva ocorr encia em ,i 151
88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS


13: 14: 15: 16: 17: 18: 19:

i i + tamanho(P) {pode ser +1. Depende da deni c ao} sen ao i++ CONTADOR++ mse menquanto m algoritmo

Este algoritmo e claramente ruim, tem complexidade no pior caso de O(tamanho(P ) tamanho(T )). Acompanhe no exemplo, a quantidade de testes que e feita: T=o galo o gato e a gata gaguejaram e P=gato QUANTIDADE DE TESTES = 38

Algoritmos ecientes
H a toda uma fam lia de algoritmos que diminuem o tempo de processamento nesta tarefa. Todos realizam algum tipo de pr e-processamento sobre as cadeias T e/ou P. Rabin-Karp A id eia deste algoritmo e converter a cadeia em n umeros (ou melhor dizendo, e usar a interpreta c ao num erica das cadeias) para efeito da busca. Dado que, caracteres em computador s ao representados usando bits, sempre ser a poss vel este procedimento sem perda de generalidade. O algoritmo come ca calculando a representa c ao decimal de P, o que ocupa p d gitos. Depois, um vetor de mesmo comprimento de T e calculado. A cada p d gitos de P a sua representa c ao decimal e calculada e este valor e guardado. O processo e r apido. A cada deslocamento em T, basta excluir o d gito de mais alta ordem e acrescentar um novo d gito ` a direita. A diculdade neste caso e quanto ao tamanho dos n umeros envolvidos, sobretudo se P e grande. A maneira de contornar esta diculdade e usar a aritm etica dos ponteiros do rel ogio, com o m odulo q . Este valor usualmente e escolhido de forma que 10q caiba em uma palavra do computador de modo a poder fazer toda a aritm etica inteira. Entretanto, esta escolha introduz a possibilidade de acertos esp urios. Isto ocorre quando houver a coincid encia de P mod q com T[i..j] mod q, sem que haja P = T[i..j]. Entretanto, pela escolha judiciosa de q , pode-se garantir que haja poucos acertos esp urios. Seja como for, a igualdade num erica n ao garante a localiza c ao de P em T. H a que se fazer o testye expl cito a seguir. A vantagem do algoritmo de Rabin-Karp e excluir a grande maioria de candidatos em uma busca linear simples. Aut omatos de correspond encia O aut omato nito e uma m aquina de estados composto por um conjunto nito de estados, um estado inicial, um alfabeto nito de entrada e uma fun c ao Q em Q, chamada fun ca o de transi c ao. Veja-se um exemplo, extra do de CLR p ag. 726 (vers ao brasileira) Cada palavra P tem o seu pr oprio aut omato de busca. Depois que o aut omato foi constru do ele e eciente: examina-se cada caractere de T uma u nica vez. O problema e que a constru c ao do aut omato pode ser demorada principalmente se e grande. Veja-se a seguir um aut omato para pesquisar P=ababaca, extra da da mesma obra, p ag. 727.
88-09, Pedro Kantek

152

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS

Algoritmo de Boyer-Moore
Este algoritmo, descrito na d ecada de 70, usa 3 artif cios aceleradores que permitem aumentar o tamanho do salto
a busca e feita da esquerda para a direita Pr e-compila uma tabela de ocorr encias de caracteres Pr e-compila uma tabela de ocorr encias de prexos no padr ao.

Os algoritmos s ao: (refer encia para todos CLR, ingl es, pag 870) 1: Algoritmo BOYER-MOORE (texto T, padrao P) 2: tabela1 CARACTERRUIM (padr ao P, alfabeto S) 3: tabela2 SUFIXOBOM (padr ao P) 4: i 0 5: enquanto (i tamanho(T) - tamanho(P)) fa ca 6: j tamanho(P) 7: enquanto (j > 0) P[j] = T[i + j] fa ca 8: j 9: menquanto 10: se (j = 0) ent ao 11: escreva ocorr encia em ,i 12: i i + tamanho(P) 13: sen ao 14: i i + MAX ((j-tabela1[T[i+j]]), tabela2[j])
vers ao de 23 de janeiro de 2009

153

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS


15: 16: 17: 1:

mse menquanto m algoritmo

Algoritmo CARACTERRUIM (padr ao P, alfabeto S) {alfabeto S cont em todos os caracteres de T (n ao repetidos)} 2: para cada caracter do alfabeto fa ca 3: tabela1[indice do caracter] 0 4: mpara 5: para j de 1 at e tamanho(P) fa ca 6: tabela1 [indice do caracter P[j]] j 7: mpara 8: retorne tabela1 9: m algoritmo Exemplo deste algoritmo: CARACTERRUIM (gato, o/galteujrm) 4 0 1 2 0 3 0 0 0 0 0, signicando salto de 4 para /leujrm, salto de 3 (4-1) para g, 2 (4-2) para a e 1 para t. Nenhum salto para o. A segunda tabela e construida pela fun c ao SUFIXOBOM, cujo algoritmo e: 1: Algoritmo SUFIXOBOM (padr ao P) 2: tabelaPI PREFIXO (P) 3: tabelaPILINHA PREFIXO (reverso P) 4: tabela2 tamanho(P) - tabelaPI [tamanho (P)] {repetir tam(P) vezes} 5: para LM de 1 at e tamanho(P) fa ca 6: j tamanho(P) - tabelaPILINHA [LM] 7: se (tabela2 [j] > LM - tabelaPILINHA [LM]) ent ao 8: tabela2[j] LM - tabelaPILINHA [LM] 9: mse 10: mpara 11: retorne tabela2 12: m algoritmo Fun c ao PREFIXO (padr ao P) tabelaPREFIXOS 0..0 (o mesmo tamanho de P) k0 para q de 2 at e tamanho(P) fa ca enquanto (k > 0) (P[k+1] = P[q]) fa ca k tabelaPREFIXOS [k] 7: menquanto 8: se P[k+1] = P[q] ent ao 9: k++ 10: mse 11: tabelaPREFIXOS [q] k 12: mpara 13: retorne tabelaPREFIXOS 14: m algoritmo No exemplo do teste o galo o gato e a gata gaguejaram para o padr ao P=gato aqui, o n umero de testes e de apenas 10. Compare com os 38 da FORCA BRUTA. Vejamos um exemplo:
1: 2: 3: 4: 5: 6:

T=FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES P=PORQUE F O L G A M R E N D P Q U V S 0 2 0 0 0 0 0 3 6 0 0 1 4 5 0 0


88-09, Pedro Kantek

P O R Q U E 6 6 6 6 6 1
vers ao de 23 de janeiro de 2009

154

CAP ITULO 9. REGISTROS Resposta 7 (contra 41 da for ca bruta) Tabela 1: (Caracter ruim) Ao se encontrar um T[x] diferente de um P[y], em T1 se indica de quantas posicoes pode-se saltar em x (no T), ou seja, cada letra em T tem o indice da ultima ocorrencia desse caracter de T em P. Exemplo: Se T=o gato caiu e P=gato, temos a primeira comparacao entre T[4]=a e P[4]=o, como sao diferentes, a T1 manda pular o g a t c i u T1= 4 0 1 2 3 0 0 0 2 posicoes, (ja que j=4 e T[a]=2 e 4-2=2) Tabela 2: (Sufixo bom) Realiza um processamento apenas em P, e busca sufixos do padrao que tenham sido repetidos anteriormente no padrao. Por exemplo, se P=abeb, a T2 e: 4,4,2,1, ja que o sufixo b (na p.4) ja ocorreu anteriormente em P (na p.2). Note que isto so e verdade que ja P[1]<> P[3] FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES F O L G A M R E N D P Q U V S P O R Q U E T1= 0 2 0 0 0 0 0 3 6 0 0 1 4 5 0 0 T2= 6 6 6 6 6 1 FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 3 Prop T1: 3 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE S= 6 *** ACHOU *** --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE
vers ao de 23 de janeiro de 2009

155

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS Salto: 6 Prop T1: 6 versus Prop T2: 1 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 4 versus Prop T2: 6 --------------------------------FOLGA MORRENDO PORQUE ALEM PORVUE DOS ANDES = PORQUE Salto: 6 Prop T1: 6 versus Prop T2: 1 ---------------------------------

Exerc cio 192 Segundo a f sica, quando temos diversas resist encias ligadas em paralelo, podemos substitu -las por uma u nica resist encia chamada EQUIVALENTE, que tem uma resist encia calculada pela f ormula:
1 1 1 1 = + + ... + Req R1 R2 Rn Denir um algoritmo que leia um conjunto indeterminado de resist encias, suponha-as ligadas em s erie, calcule e escreva a resist encia equivalente do conjunto. Dados terminam quando for lido um valor igual a zero. Por exemplo, se forem lidos os valores de resist encias iguais a 5, 10, 1 e zero, a resposta da resist encia equivalente ser a 10/13.

Exerc cio 193 De acordo com o regulamento do servi co postal americano, n ao pode seguir pelo correio, nenhum pacote cujo comprimento (maior dimens ao) somado ` a amarra c ao seja superior a 72 polegadas. Amarra c ao e o comprimento do menor barbante que possa toda a volta ao pacote. Construa um algoritmo portugol que leia 3 dimens oes e escreva PODE se PODE o pacote puder ser mandado via correio, ou NAO se n ao puder. As dimens oes est ao em cent metros, e deve ser usada a convers ao: 1 polegada = 2,5 cm. Exerc cio 194 Escreva uma fun c ao capaz de receber dois n umeros (inteiros) e devolver a m edia geom etrica entre eles (real). Exerc cio 195 Escreva uma fun c ao capaz de receber um valor representativo de uma dist ancia medida em polegadas, e retorne a mesma dist ancia medida em metros (1pol = 2,54cm) Exerc cio 196 Suponha um algoritmo para c alculo de um D.V. para c odigos de 4
d gitos assim formulado: c odigo XYZT-d c alculo de Q Q = X + Y + Z + T c alculo de d d = Q mod 10 Escreva um algoritmo para calcular o DV de uma s erie de c odigos lidos, na forma de 4 inteiros positivos. Para cada c odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n umero negativo. O c alculo do DV deve ser feito por uma fun c ao.

Exerc cio 197 Suponha um algoritmo para c alculo de um D.V. para c odigos de 4 d gitos assim formulado: c odigo XYZT-d c alculo de Q Q = 2X + 3Y + 4Z + 5T c alculo de d d = Q mod 7
88-09, Pedro Kantek

156

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS Escreva um algoritmo para calcular o DV de uma s erie de c odigos lidos, na forma de 4 inteiros positivos. Para cada c odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n umero negativo. O c alculo do DV deve ser feito por uma fun c ao.

Exerc cio 198 Suponha um algoritmo para c alculo de um D.V. para c odigos de 4 d gitos assim formulado: c odigo XYZT-d c alculo de Q Q = 3X + 5Y + 7Z + 9T c alculo de w w = Q mod 11 c alculo de d Se w = 10, ent ao d = 0, sen ao d = w. Escreva um algoritmo para calcular o DV de uma s erie de c odigos lidos, na forma de 4 inteiros positivos. Para cada c odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n umero negativo. O c alculo do DV deve ser feito por uma fun c ao. Exerc cio 199 Suponha um algoritmo para c alculo de um D.V. para c odigos de 4 d gitos assim formulado: c odigo XYZT-d c alculo de q1 q1 = 2X + 3Z c alculo de q2 q2 = 2Y + 3T c alculo de Q q = q1 + q2 c alculo de d d = q mod 10 Escreva um algoritmo para calcular o DV de uma s erie de c odigos lidos, na forma de 4 inteiros positivos. Para cada c odigo lido, o algoritmo deve imprimi-lo junto com o DV. Os dados terminam quando for lido um n umero negativo. O c alculo do DV deve ser feito por uma fun c ao. Exerc cio 200 Denir algoritmo capaz de gerar um d gito vericador alfab etico, para um c odigo formado por 7 d gitos num ericos. A regra deve ser: dv = ((d1 8) + (d2 7) + (d3 6) + (d4 5) + (d5 4) + (d6 3) + (d7 2)) mod 26 dv deve ser transformado de letra em n umero e a seguir impresso. O algoritmo deve ler in umeros c odigos (na forma cadeia[7]) at e ler a cadeia 0000000. Exerc cio 201 Denir algoritmo que leia um conjunto indeterminado, mas menor do que 129, de triplas formadas por:
n umero do bimestre: inteiro de 1 a 4 n umero do aluno: inteiro de 1 a 32 Nota do aluno: real de 0,0 a 10,0.

Os dados terminam quando for lido um n umero de bimestre diferente daqueles valores v alidos. Ap os ler o conjunto, o algoritmo deve imprimir: 1. Qual a m edia anual de cada aluno (32 valores) 2. Qual a m edia da turma em cada bimestre (4 valores) 3. Qual o n umero do aluno e o n umero do bimestre em que ocorreu a MAIOR NOTA absoluta do ano. 4. Qual o bimestre em que ocorreram mais zeros 5. Qual o bimestre com menor amplitude de notas
vers ao de 23 de janeiro de 2009

157

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS

Exerc cio 202 Denir um algoritmo que calcule o d gito vericador do n umero de matr cula dos alunos das FACULDADES NEUTRAS. Tal n umero e formado por 4 d gitos e o vericador e assim calculado: n umero: d1 d2 d3 d4 res = (d1 * 2) + (d2 * 3) + (d3 * 5) + (d4 * 7) d gito = resto da divis ao de res por 9. O algoritmo deve ler uma s erie de n umeros e para cada um, deve imprimir o n umero e o correspondente d gito. A s erie termina quando for lido o n umero 0. 9.2.1 Calend arios

Em 1347 a peste negra devastou a Europa. Esta doen ca e na verdade uma pneumonia que causa bub oes (incha cos nas axilas e virilhas), sendo tamb em chamada de peste bub onica. Os bub oes eram caldos de cultura da bact eria causadora, que tamb em era transmitida por pulgas dos ratos. O nome negra, vem do fato de que (supostamente) a carne das v timas enegrecia pouco antes da morte. A hist oria come ca quando uma tribo Mogol de nome Kipchak resolve atacar um posto comercial genov es no Mar Negro. Usaram para isso uma das primeiras armas biol ogicas que a hist oria registra: cad averes humanos contaminados com a doen ca eram atirados atrav es de catapultas para dentro da cidade. Esta embora armada e provisionada para resistir ao cerco, ao ver-se impotente para enfrentar esta arma resolveu fugir de navio de volta a G enova, abandonando o posto comercial. Junto com eles, foi a doen ca. Durante os 4 anos seguintes a peste foi para a Sic lia, Africa, It alia, Espanha, Fran ca, Inglaterra e depois toda a Europa. Vinte e cinco milh oes de pessoas, um quarto da popula c ao europ eia, morreram. Dois s eculos passariam antes que a popula c ao retornasse ao n umero de 100 milh oes. A devasta c ao da peste negra encerrou um ciclo na hist oria da humanidade. Levantes sociais e pol ticos espoucaram, a m ao de obra escasseou, o campo foi abandonado, os alimentos rarearam. At e aqui, o universo era governado por regras estabelecidas por duas autoridades: Arist oteles (384322 aC) e o eg pcio Cl audio Ptolomeu (100-170 dC). No mil enio anterior, a Igreja havia mesclado essas regras ` a sua vis ao de mundo, resultando um bloco homog eneo: Deus havia criado a Terra no centro do Universo. Estrelas e planetas giravam em orbitas circulares em volta da terra. Oito esferas conc entricas feitas de material imut avel e eterno continham a Lua, o Sol, Marte, Merc urio, J upiter, V enus e Saturno. A u ltima esfera continha as estrelas. Apenas na terra a mat eria se decompunha e morria. Nas esferas tudo era eterno. Veja-se o reexo disso nos nomes dos dias de semana, nos principais idiomas ocidentais: Corpo Celeste Sol Lua Marte Merc urio J upiter V enus Saturno Ingl es Sunday Monday Tuesday Wednesday Thursday Friday Saturday Franc es dimanche lundi mardi mercredi jeudi vendredi samedi Italiano domenica lunedi martedi mercoledi giovedi venerdi sabato Espanhol domingo lunes martes mi ercoles jueves viernes s abado

A rea c ao ` a peste foi um novo cen ario que buscou enterrar e esquecer aquele o mais r apido poss vel: a renascen ca. A It alia, pela localiza c ao central iniciou o movimento do com ercio entre oriente e ocidente. Nasceram aqui os primeiros sistemas administrativos, o conhecimento nanceiro e os bancos. A ci encia (a matem atica) come cou a ser usada: na arquitetura, no com ercio, na cartograa. Sabemos hoje que a Terra demora 365 dias, 5 horas, 48 minutos e 46 segundos para uma volta completa ao redor do sol. Eg pcios haviam estimado este valor em 365,25 dias (ou seja 365 dias e 6 horas. Ficou
88-09, Pedro Kantek

158

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS uma diferen ca de 11 minutos e 14 segundos). Com a ado c ao do calend ario eg pcio por J ulio C ezar no s eculo I dC, esta disparidade foi se acumulando ano ap os ano, afastando as datas do calend ario das esta c oes. Em meados do s eculo XV ja havia dez dias de atraso. Em 1475 o papa Sisto IV pedira um estudo para determinar a causa do erro. N ao houve quem conseguisse compatibilizar Arist oteles e Ptolomeu com o calend ario. Podiam garantir estabilidade pol tica, mas estavam cada vez mais incapazes de calcular a data da P ascoa corretamente. Cop ernico (1473-1543) come cou a desenvolver em 1506 um sistema astron omico baseado em suas pr oprias observa c oes e c alculos. Na tentativa de tirar a Terra do centro do universo e colocar a o Sol, a diculdade era explicar como as coisas n ao ca amem dire c ao ao sol. Achava-se na epoca, que a mat eria era naturalmente atra da para o centro do universo (embaixo da terra). Quando recrutado pelo secret ario do papa, em 1514 para resolver o problema do calend ario, Cop ernico viu-se num dilema: ou rearmava a teoria que a vaidade, o medo e a B blia haviam montado (estamos no centro do universo) e n ao resolvia o problema, ou chutava o pau da barraca para propor um novo calend ario. Ele, que bobo n ao era, recusou o convite, embora continuando a estudar o problema em segredo. Convencido pela corre c ao de seus c alculos e encorajado por amigos, esbo cou um rascunho de suas id eias em 1530. Este escrito provocou rea c oes mistas. Finalmente, em 1543, autorizou a publica c ao de De Revolutionibus Orbium Coelestium, comumentemente conhecido como As Revolu c oes. Cop ernico recebeu o primeiro exemplar em 24 de maio de 1543 e morreu poucas horas depois. O pr oximo personagem desta hist oria e Galileu Galilei. Pulamos Giordano Bruno, queimado na fogueira no Campo di Fiori em 17 de fevereiro de 1600. Galileu teria deixado cair duas bolas de pesos diferentes da Torre de Pisa para provar que ambas chegariam juntas, contrariando Arist oteles que armara chegar a mais pesada antes. H a d uvidas se isso de fato ocorreu. Mais modernamente sup oe-se que tenha sido uma experi encia intelectual apenas. O argumento intelectual e not avel1 Este e o melhor jeito de fazer f sica, ` a la Einstein... Galileu freq uentou diversas universidades na It alia, sempre conitando com os demais professores. Escreveu in umeros livros, inventou o telesc opio 2 Ao usar os telesc opios, viu quatro sat elites orbitando J upiter e os an eis de Saturno e relatou isso no livro Sidereus Nuncius (O Mensageiro Celeste). Escreveu de leve, ainda sem adotar completamente o modelo copernicano. A Igreja j a come cou a enviar mensagens de que n ao concordava com as id eias desse livro. Em 21 de dezembro de 1614, o padre Tom as Caccini, em Floren ca criticou Galileu aformando que se Deus parou o sol a pedido de Josu e para que os israelitas derrotassem os amoritas, como o sol poderia ser o centro do universo ? O padre foi mais longe: acusou Galileu, a matem atica e todos os matem aticos de hereges pol ticos e religiosos. A defesa de Galileu e perfeita: N ao me sinto na obriga c ao de acreditar que o mesmo Deus que nos dotou de sentidos, raz ao e intelecto, tencionava descartar o uso destes e por algum outro meio nos dar o conhecimento que com eles podemos obter [...] A inten c ao do Esp rito Santo e ensinar-nos como se vai para o c eu e n ao como o c eu funciona. Em 5 de mar co de 1616 o cardeal Belarmino da Santa Inquisi c ao decretou que o
1 Suponha jogar as 2 bolas e suponha que Arist oteles estava certo: a mais pesada chega antes. Agora suponha as mesmas duas bolas por em ligadas por o. Por um lado pode-se argumentar que a mais leve segura a mais pesada e esta demora mais a chegar. Por outro lado, pode-se supor que o o transforma as duas massas em uma s o, que passa a ser mais pesada que a bola anterior. O resultado e que agora as bolas chegam antes do que chegavam. Para que ambos os racioc nios estejam certos e est ao, a u nica possibilidade e elas chegarem juntas. 2 Ele e assim considerado pois construiu os maiores telesc opios em uso na Europa, ultrapassando seus modelos anteriores por diversas vezes.

vers ao de 23 de janeiro de 2009

159

88-09, Pedro Kantek

CAP ITULO 9. REGISTROS sistema copernicano era falso e err oneo armando que Deus xou a Terra em seus alicerces para jamais ser movida. Galileu nunca se conformou com este decreto, buscando incessantemente a sua revoga c ao. Em 1624, obteve do papa uma autoriza c ao para escrever seu livro mais famoso Di alogo sobre os dois m aximos sistemas do mundo, que foi publicado em 1632 e recebido com louvores por acad emicos de toda a Europa. Pouco depois, foi acusado pela inquisi c ao de herege. N ao pode ver as acusa c oes ou as provas. Ficou no dilema: ou se retratava ou morria como Giordano Bruno. Em decis ao que alguns criticaram como prejudicial a ci encia, ele resolveu pela vida. Em 22 de junho de 1633, fez uma longa retrata c ao. Diz a lenda que depois de terminada a leitura, ao se erguer da posi c ao de joelhos onde estava,Galileu teria dito E pur, si muove . S o em 1757 a Igreja retirou a proibi c ao sobre a obra. Em 1992, o papa Jo ao Paulo II reconheceu formalmente o erro da Igreja. Depois vem Isaac Newton, um dos 5 maiores cientistas que a Humanidade produziu (decomposi c ao da luz, c alculo diferencial e integral, gravita c ao entre outros). Ao escrever sobre a lei universal da gravita c ao, ele acabou de consolidar o modelo copernicano, que j a havia sido engordado com as leis de Kepler sobre o deslocamento dos planetas.

Calend arios Juliano e Ptolomeico


A encrenca do calend ario est a em que ele lida com 3 ciclos distintos: solar: Alterna as esta c oes e depende do sol. Mede os anos; lunar: Alterna as luas (cheia, nova ...) e depende da lua. Mede os meses; semanal: Mede os dias da semana e tem origem religiosa. Indica o sabath. A diculdade e que estes 3 ciclos n ao s ao m ultiplos entre si. Em 45 aC, J ulio Cezar criou o calend ario juliano, baseado no ptolomeico. Neste o ano tinha 365d e um quarto de dia. Os meses foram batizados de Janius (portas e janelas), Februas (festa da purica c ao), Mars (guerra), Apripe (abertura das ores), Maiores, Juniores, Quint lio, Sext lio, Sept lio, Oct lio, Novit lio e Decit lio. Logo depois, o pr oprio JC mudou o nome do Quint lio para Julius. Seu sucessor, Cezar Augusto n ao deixou por menos, mudando o pr oximo para Augustus. Em 1582, o papa Gerg orio mudou o calend ario, que com a reforma passou a ser conhecido como calend ario gregoriano. Sumiram 10 dias em mar co desse ano. Adotouse a regra dos anos bissextos. A ado c ao deste calend ario demorou. Na Inglaterra ele s o foi aceito em 1752. Em 1793, a Revolu c ao Francesa mudou novamente o calend ario. Nele h a 12 meses de 30 dias e 5 feriados nacionais. Os meses: germinal, oral, thermidor, fructidor, brumaire. Napole ao o aboliu em 1805.

Novas propostas
Em 1954, a ONU prop os um novo calend ario. Ele tem 52 semanas de 7 dias = 364 dias. O dia 365 e no nal do ano e n ao tem n umero nem nome. Os quadrimestres sempre tem 31 + 30 + 30 + 30 dias. Outra proposta foi o do calend ario xo, com 13 meses de 28 dias cada um. Aqui, as segundas sempre ser ao dias 1, 8, 15 e 22. Falta 1 dia, que ca no nal do ano. O dia do bissexto e ap os 28 de junho. O novo m es e o SOL que ca entre junho e julho. Finalmente, h a uma nova proposta de estabelecer um tempo mundial, (desvinculado do sol), orientado a neg ocios e com divis oes decimais.

Regra do bissexto
Sejam R4 resto da divis ao do ano por 4; R100 resto da divis ao do ano por 100 e R400 resto da divis ao do ano por 400. SE R4=0 ((R100 = 0) (R400 = 0)) o ano e bissexto sen ao n ao e.
88-09, Pedro Kantek

160

vers ao de 23 de janeiro de 2009

CAP ITULO 9. REGISTROS

Exerc cio 203 Imagine um cilindro cujo di ametro da base tem o mesmo comprimento de sua altura. Dentro dele est a inscrita uma esfera, cujo raio e o mesmo raio da base do cilindro. Escrever algoritmo que leia uma s erie de raios, e para cada um deles, calcule e escreva a diferen ca de volume entre o cilindro e a esfera. Os raios s ao lidos em cm e a diferen ca deve ser expressa em cm3. O ultimo raio e zero, e indica m. Denir duas fun c oes: uma para o c alculo do volume da esfera, e outra para o c alculo do volume do cilindro.
Vesf era = 4 R3 3

Vcilindro = R2 h

Exerc cio 204 Denir algoritmo que calcule e escreva a soma dos primeiros 50 n umeros
pares acima de 1000 (1000 inclu do), com os 60 primeiros n umeros mpares acima de 500 (501 includo).

Exerc cio 205 Denir algoritmo que determine se uma seq u encia contendo 1000 ele-

ou NAO ESTA classicado em ordem descendente. Ao nal do algoritmo, mentos, ESTA este deve imprimir as mensagens EM ORDEM ou FORA DE ORDEM conforme o caso.

Algoritmo Balance Line


Este algoritmo teve import ancia muito maior h a 30 anos, quando os recursos de hardware n ao eram nem de longe t ao abundantes quanto hoje. Em 1974, existiam na cidade de Curitiba 7 computadores: o da Universidade Federal do Paran a (um IBM 1130 com 8Kb de mem oria), e os computadores da Celepar, Copel, Bamerindus, Banestado, Cr Almeida e URBS, sendo que cada uma destas empresas tinha 1 (um) computador. Como fazer para atualizar 80.000 registros (caso da folha de pagamento do Estado do Paran a) todos os meses com apenas um computador que era usado para todos os sistemas do Goverbo do Estado ? Vale lembrar tamb em que n ao existiam sistemas on-line, nem terminais remotos, muito menos micros. A solu c ao para este problema est a no algoritmo que ser a estudado nesta aula, chamado Balance Line. Ele permite que grandes volumes de dados para tratamento atuarial (inclus ao, altera c ao e exclus ao) sejam serializados e processados sem interfer encia do operador. Import ancia atual Este algoritmo ainda e muito importante, mesmo com abund ancia de hardware. Ele, na verdade, permite economizar tamb em tempo de operador, e este sempre deve ser economizado (principalmente quando o operador somos n os. ;-). Imagine-se um site onde pessoas devem fazer atualiza c oes. Uma coisa e entrar 1 vez por semana e fazer uma pequena atualiza c ao. Outra e precisar entrar de uma s o vez e alterar digamos 400 registros. Para o primeiro caso, a estrat egia atualmente usada (uma transa c ao atuarial que sob o comando do operador altera o dado) est a perfeita. Para a segunda, n ao. Poucos tem paci encia para refazer esta mesma transa c ao 400 vezes. Neste segundo caso, ser a muito bom se o dono do sistema disponibilizar um balance line. Neste caso, o operador preparar a uma massa de atualiza c ao (possivelmente usando o notepad ou similar), far a as verica c oes e corre c oes, e quando a massa estiver OK, submete-la- a, eventualmente via upload para atualiza c ao serializada. Ao inv es de 400 transa c oes, o operador ter a que se preocupar com apenas 1. O resto ca por conta do algoritmo Balance Line. 161
88-09, Pedro Kantek

vers ao de 23 de janeiro de 2009

Você também pode gostar