Anda di halaman 1dari 69

UNIVERSIDADE FEDERAL DO ESPRITO SANTO CENTRO DE CINCIAS AGRRIAS DEPARTAMENTO DE ENGENHARIA RURAL

ENG06842
PROGRAMAO I

PARTE 1

Prof. Geraldo Regis Mauri

CCA-UFES Agosto - 2009

ENG06842 Programao I

Apresentao A disciplina Programao I (ENG06842) visa dotar os acadmicos de uma viso geral do processo de programao e da investigao das tcnicas e ferramentas que podem ser utilizadas para a gerao de programas estruturados. Ao final do curso, os acadmicos devero ser capazes de conhecer e entender os principais conceitos referentes construo de algoritmos estruturados e implementao desses algoritmos na Linguagem Pascal. Esta apostila foi elaborada a partir das notas de aula, dos livros da bibliografia recomendada e de outros materiais encontrados na Internet, e visa auxiliar na compreenso dos conceitos abordados ao longo do curso, bem como promover a prtica na construo de algoritmos atravs de um grande nmero de exerccios apresentados no final de cada captulo. Esta apostila deve ser usada somente como material complementar, e NUNCA como nica fonte de estudo, ou seja, o seu objetivo no substituir os livros, mostrar aos alunos o curso que os aguarda, possibilitando um planejamento prvio do estudo e do aprendizado. Considero que a programao deve ser entendida como uma arte de construir algoritmos, sendo que estes so mtodos ou receitas para se resolver problemas. A melhor forma de aprender a programar programando, assim como a melhor forma de aprender a dirigir entrar num automvel e sair com ele por a, ou seja, o simples fato de ler esta pequena e simples apostila no basta para aprender a programar. Por fim, estou disposio de todos que se aventurem a acompanhar este curso, tanto para tirar dvidas quanto para receber crticas e sugestes.

ENG06842 Programao I

Contato: mauri@grmauri.pro.br ou mauri@cca.ufes.br Este material est disponvel para download no site:

http://www.grmauri.pro.br.

ENG06842 Programao I

Sumrio Apresentao...............................................................................................................................2 1.Lgica de programao............................................................................................................5 1.1.Introduo ............................................................................................................................ 5 1.2.Instrues.............................................................................................................................. 5 1.3.Seqncias lgicas................................................................................................................ 6 1.4.Exerccios..............................................................................................................................7 2.Resoluo de problemas atravs do computador................................................................... 11 2.1.Introduo .......................................................................................................................... 11 2.2.Programao........................................................................................................................15 2.3.Programas............................................................................................................................17 2.4.Exerccios............................................................................................................................17 3.Algoritmos............................................................................................................................. 18 3.1.Introduo........................................................................................................................... 18 3.2.Principais caractersticas dos algoritmos............................................................................ 19 3.3.Regras para construo de algoritmos................................................................................ 20 3.4.Refinamentos sucessivos.....................................................................................................23 3.5.Representao de algoritmos.............................................................................................. 25 3.6.Exerccios............................................................................................................................30 4.Elementos fundamentais de programao..............................................................................32 4.1.Tipos bsicos de dados........................................................................................................32 4.2.Constantes ..........................................................................................................................33 4.3.Variveis............................................................................................................................. 34 4.4.Identificadores.....................................................................................................................35 4.5.Comentrios ....................................................................................................................... 36 4.6.Expresses aritmticas ....................................................................................................... 38 4.7.Expresses lgicas.............................................................................................................. 39 4.8.Prioridade entre operadores................................................................................................ 40 4.9.Comandos de atribuio......................................................................................................41 4.10.Comandos de entrada e sada............................................................................................42 4.11.Esquema genrico em pseudolinguagem.......................................................................... 42 4.12.Exerccios..........................................................................................................................44 5.Estruturas de controle.............................................................................................................49 5.1.Seqencial...........................................................................................................................49 5.2.Condicional.........................................................................................................................49 5.3.Repetio.............................................................................................................................51 5.4.Loop infinito....................................................................................................................... 54 5.5.Variveis especiais..............................................................................................................55 5.6.Exerccios............................................................................................................................57 6.Tcnicas de verificao de algoritmos...................................................................................63 6.1.Exerccios............................................................................................................................65 Referncias................................................................................................................................69

ENG06842 Programao I

1. Lgica de programao

1.1. Introduo

Desde os primrdios da histria da computao existe uma base de conhecimento que no mudou e no mudar nunca a Lgica de Programao. A Lgica de Programao pode ser associada diretamente com o Raciocnio Matemtico, onde o importante a interpretao de um problema e a utilizao correta de uma frmula. O saber da Lgica est no praticar. No existem frmulas em computao, o que existe o

aperfeioamento de nossa forma de pensar e raciocinar sobre um problema, podendo extrair do mesmo uma soluo eficiente e eficaz, sob um determinado ngulo de viso. informaes. A soluo que criamos para um determinado problema necessita ser exteriorizada e expressa numa linguagem publicamente conhecida. Assim, utilizamos a lgica de programao para desenvolver nossas solues e os algoritmos para apresentar essas solues ao mundo. A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, pois ela permite definir a seqncia lgica para o desenvolvimento destes. Ento, o que lgica de programao? a tcnica de encadear Assim, verificamos que preciso aprender a pensar sobre os problemas, extraindo deles o mximo de

pensamentos para atingir determinado objetivo.


1.2. Instrues

Na linguagem comum, entende-se por instrues um conjunto de regras

ou normas definidas para a realizao ou emprego de algo . Em

ENG06842 Programao I

informtica, porm, instruo a informao que indica a um computador uma ao elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem seqencial lgica. Por exemplo, se quisermos fazer uma omelete com queijo, precisaremos colocar em prtica uma srie de instrues: picar o queijo, bater os ovos, acrescentar o queijo, etc... evidente que essas instrues tm que ser executadas em uma ordem adequada no se pode fritar o queijo e depois adicion-lo aos ovos. Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Ento, pode-se definir instrues como sendo um conjunto de regras ou

normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.
1.3. Seqncias lgicas

Pode-se definir uma seqncia lgica como sendo um conjunto de passos

executados at atingir um objetivo ou soluo de um problema.


At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas. Por exemplo: Chupar uma bala Pegar a bala Retirar o papel Chupar a bala Jogar o papel no lixo

ENG06842 Programao I

1.4. Exerccios

1. Crie uma seqncia lgica para tomar banho. 2. H trs suspeitos de um crime: o cozinheiro, a governanta e o mordomo. Sabe-se que o crime foi efetivamente cometido por um ou por mais de um deles, j que podem ter agido individualmente ou no. Sabe-se, ainda que: se o cozinheiro inocente, ento a governanta culpada; ou o mordomo culpado ou a governanta culpada, mas no os dois; o mordomo no inocente. Logo: (a) a governanta e o mordomo so os culpados (b) o cozinheiro e o mordomo so os culpados (c) somente a governanta culpada (d) somente o cozinheiro inocente (e) somente o mordomo culpado. 3. Qual o nmero que completa a seqncia: 1, 3, 6, 10, ... (a) 13 (b) 15 (c) 12 (d) 11 (e) 18 4. Faa a seqncia lgica para somar dois nmeros e multiplicar o resultado pelo primeiro nmero. 5. Qual o nmero que completa a seqncia: 1, 1, 2, 3, 5, ... (a) 5 (b) 6 (c) 7

ENG06842 Programao I

(d) 8 (e) 9 6. Descreva com detalhes a seqncia lgica para trocar um pneu de um carro. 7. Num concurso de saltos, Maria foi, simultaneamente, a 13 melhor e 13 pior. Quantas pessoas estavam em competio? (a) 13 (b) 25 (c) 26 (d) 27 (e) 28 8. Bruno mais alto que Joaquim. Renato mais baixo que o Bruno.

Ento, Joaquim o mais alto dos trs. ( ) Verdadeiro ( ) Falso 9. Faa um algoritmo para trocar uma lmpada. 10. O preo de um produto foi reduzido em 20% numa liquidao. Qual

dever ser a percentagem de aumento do preo do mesmo produto para que ele volte a ter o preo original? (a) 15% (b) 20% (c) 25% (d) 30% (e) 40% 11. Chapeuzinho Vermelho ao entrar na floresta, perdeu a noo dos

dias da semana. A Raposa e o Lobo Mau eram duas estranhas criaturas que freqentavam a floresta. A Raposa mentia s segundas, teras e quartas-feiras, e falava a verdade nos outros dias da semana. O Lobo

ENG06842 Programao I

Mau mentia s quintas, sextas e sbados, mas falava a verdade nos outros dias da semana. Um dia Chapeuzinho Vermelho encontrou a Raposa e o Lobo Mau descansando sombra de uma rvore. Eles disseram: Raposa: Ontem foi um dos meus dias de mentir Lobo Mau: Ontem foi um dos meus dias de mentir a) A partir dessas afirmaes, Chapeuzinho Vermelho descobriu qual era o dia da semana. Qual era? b) Em qual dia da semana possvel a Raposa fazer as seguintes afirmaes? Eu menti ontem. Eu mentirei amanh. 12. Joo quer ir ao cinema assistir ao filme Matrix, mas no tem

certeza se o mesmo est sendo exibido. Seus amigos, Maria, Luis e Julio tm opinies discordantes sobre se o filme est ou no em cartaz. Se Maria estiver certa, ento Julio est enganado. Se Julio estiver enganado, ento Lus est enganado. Se Luis estiver enganado, ento o filme no est sendo exibido. Ora, ou o filme Matrix est sendo exibido, ou Joo no ir ao cinema. Verificou-se que Maria est certa. Logo: (a) O filme Matrix est sendo exibido (b) Luis e Julio no esto enganados (c) Julio est enganado, mas Luis no. (d) Luis est enganado, mas Julio no. (e) Joo no ir ao cinema.

ENG06842 Programao I

10

ENG06842 Programao I

2. Resoluo de problemas atravs do computador

2.1. Introduo

Todos os computadores, independentemente dos seus tamanhos e/ou fabricantes, so conceitualmente semelhantes ao esquema da figura abaixo (h algumas diferenas, mas no trataremos aqui dos casos especiais). Essa figura apresenta uma mquina hipottica para a qual criaremos nossos programas.
CPU (Unidade Central de Processamento) Unidade Lgica e Aritmtica (2) Dispositivo de entrada (1) Unidade de Controle (3) Dispositivo de sada (5)

Memria Principal (4)

Fluxo de controle Fluxo de dados

Cada uma das partes constituintes da figura acima tem os seguintes significados: (1) Dispositivo de entrada (o teclado, mouse, etc...): o meio pelo qual os dados que sero trabalhados pelo algoritmo vo ser introduzidos em nosso computador hipottico; (2) Unidade Lgica e Aritmtica (ULA): Parte responsvel pelas operaes matemticas e avaliaes lgicas; (3) Unidade de Controle: Exerce controle sobre as demais partes do nosso computador. uma verdadeira gerente que distribui tarefas s outras unidades; 11

ENG06842 Programao I

(4) Memria: Guarda o algoritmo a ser executado e os dados a serem utilizados pelo mesmo. Todo dado fornecido ao computador e o resultado de suas operaes ficam guardados na memria; (5) Dispositivo de Sada (vdeo, impressora, etc...): o meio que se dispe para apresentao dos resultados obtidos. Resumidamente, pode-se afirmar que existem quatro operaes bsicas que qualquer computador pode executar: a) operaes de entrada e sada: ler dados do teclado e escrever dados na tela so exemplos destas operaes. Elas servem para introduzir dados na memria do nosso computador e exibir os dados que j estejam l armazenados; b) operaes aritmticas: so utilizadas na realizao de operaes matemticas (adio, subtrao, multiplicao e diviso); c) operaes lgicas e relacionais: tm aplicabilidade em comparaes, testes de condies lgicas (2>6?; X=Y?); d) movimentao de dados entre os vrios componentes: as operaes aritmticas so executadas na Unidade Lgica e Aritmtica, necessitando da transferncia dos dados para essa unidade e da volta do resultado final para ser guardado na memria. Os computadores podem ser usados de forma eficiente na soluo de certos tipos de problemas. Os problemas que suportam tratamento por computador, em geral, envolvem grandes quantidades de dados ou so problemas de natureza complexa, exigindo a execuo de um grande nmero de passos para alcanar a soluo. Basicamente so problemas na rea de processamento de dados e na rea cientfica. O computador uma ferramenta que permite a realizao do

processamento automtico (ou eletrnico) de dados. Define-se por Processamento de Dados qualquer atividade que, utilizando informaes (ou dados), efetua transformaes para obter novas informaes (ou 12

ENG06842 Programao I

dados) como resultado. Entretanto, o computador uma mquina capaz de executar processos de acordo com regras precisamente definidas, sendo que: Existe um repertrio finito de instrues elementares que o computador entende e capaz de executar. Os elementos desse repertrio finito podem ser agrupados (ou programados) de modo a dar origem a um nmero infinito de combinaes. Exemplos: o Msica (composta pela combinao das 7 notas musicais) o Representao decimal de nmeros reais (a partir de dgitos de 0 a 9) A tarefa desempenhada pelos computadores apenas parte do processo de soluo de problemas, sendo todo esse processo descrito pelas seguintes etapas: i) ii) Entendimento do problema; Criao de uma seqncia de operaes (ou aes) que, quando executadas, produzem a soluo para o problema; iii) Execuo desta seqncia de operaes. iv) Verificao da adequao da soluo. As etapas de entendimento do problema, criao de seqncia de aes e

verificao da adequao da soluo so tarefas desempenhadas por


pessoas. J a execuo das operaes pode ser desempenhada por computadores. Os computadores tm a capacidade de executar processos complicados e com grande quantidade de informaes com rapidez e confiabilidade. Exemplo: Suponha que queiramos resolver o seguinte problema: a partir de dois nmeros que sero informados, calcular a soma dos mesmos. Se 13

ENG06842 Programao I

voc fosse encarregado de efetuar essa tarefa, seria bem provvel que utilizasse os passos a seguir: a) saber quais so os nmeros; b) calcular a soma dos nmeros; c) responder questo com o valor do resultado. Entretanto, o computador burro, apesar de ele saber somar, ele no sabe o que saber e nem responder. A seguir apresentada uma forma de como esse mesmo problema seria resolvido em termos das operaes bsicas citadas anteriormente: a) operao de entrada de dados dos nmeros; b1) movimento do valor dos nmeros entre a memria e a ULA; b2) operao aritmtica de somar os 2 nmeros; b3) movimentao do resultado da ULA para guardar na memria; c) operao de sada do resultado, que est guardado na memria, para o dispositivo de sada desejado. Deve-se salientar que os passos b1 e b3, normalmente, ficam embutidos na operao matemtica, no sendo explicitados. Em resumo, pode-se dizer que escrever algoritmos ou, em ltima anlise, programar consiste em dividir qualquer problema em muitos pequenos passos, usando uma ou mais das quatro operaes bsicas citadas. Esses passos que compem o algoritmo so denominados de comandos (ou instrues). Os comandos de uma linguagem de programao podem estar mais prximos da mquina (linguagens de baixo nvel) ou serem mais facilmente entendidos pelo homem (linguagens de alto nvel). A seqncia de operaes bsicas, dada anteriormente, para resolver o problema de adicionar dois nmeros, est em uma linguagem de baixo

14

ENG06842 Programao I

nvel para o nosso computador hipottico. Em uma linguagem de alto nvel teramos um resultado assim: leia (X,Y); SOMA X + Y; escreva (SOMA);
2.2. Programao

o ato de agrupar instrues em seqncias de forma que, quando seguidas, produzem um resultado esperado, ou seja, a seqncia de planejamento, projeto, escrita e testes de instrues desempenhadas pelo computador. uma arte e uma cincia. Arte porque existem muitas maneiras de se realizar o trabalho de programao. Existe espao para uma considervel dose de criatividade. tambm uma cincia, porque existem algumas regras que devem ser seguidas, porque necessrio o uso de lgica e porque existem alguns mtodos rigorosos de programao que asseguram a eficincia, economia e a utilidade dos programas gerados. O trabalho de programao pode se tornar mais fcil se o dividirmos sistematicamente em partes menos complexas (esta tcnica denomina-se dividir para conquistar). Um programa considerado confivel quando conseguir fazer com que o computador cumpra com o objetivo proposto. Os programas construdos devem ser eficazes quando realizam a tarefa definida, e eficientes quando utiliza os melhores meios para realiz-la. O maior problema na construo de programas a complexidade; esta complexidade representa a quantidade de situaes diferentes que um problema pode apresentar e que devem ser previstas na soluo do mesmo. Portanto, ao se construir um programa, o objetivo principal vencer a complexidade do problema a ser solucionado.

15

ENG06842 Programao I

A fim de lidar com esta complexidade, pode-se dividir a programao em duas fases distintas:

Problema

(1) Fase de resoluo do problema Soluo na forma de algoritmo

Soluo na forma de programa de computador

(2) Fase de implementao

Modelizao (ou Resoluo) do Problema: determinao do modelo de soluo para o problema proposto na forma de um algoritmo computacional. Assim, a elaborao de um algoritmo o primeiro passo para a preparao de um programa de computador. Este algoritmo deve ser independente da linguagem de programao que ser utilizada. Implementao: a transformao (ou codificao) do algoritmo em alguma Linguagem de Programao adequada ao modelo elaborado. Programao estruturada: uma forma de programao de computadores que preconiza que todos os programas possveis podem ser reduzidos a apenas trs estruturas: seqncia, deciso e iterao. A programao estruturada orienta os programadores para a criao de estruturas simples em seus programas, usando as sub-rotinas e funes. Foi a forma dominante na criao de software entre a programao linear e a programao orientada por objetos. Apesar de ter sido sucedida pela programao orientada por objetos, pode-se dizer que a programao estruturada ainda marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programao atravs dela. Alm disso, por exigir formas de pensar relativamente complexas, a programao orientada ao objeto at hoje ainda no bem compreendida ou usada pela maioria.

16

ENG06842 Programao I

2.3. Programas

Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic, etc...) e que so interpretados e executados por uma mquina, no caso um computador.
2.4. Exerccios

1. Cite e explique com suas palavras as operaes bsicas executadas pelos computadores. 2. Imagine que o computador queira multiplicar dois nmeros e depois dividir o resultado por 2 (tira a mdia). Descreva os passos para o computador realizar essa tarefa (utilizando a entrada e manipulao pela ULA, memria etc...). 3. Descreve com suas palavras o significado de um comando. 4. Qual a possvel diferena entre um programa eficiente e eficaz? Um mesmo programa pode ser eficiente e eficaz? 5. Defina com suas palavras o que implementao. 6. Qual a principal caracterstica da programao estruturada?

17

ENG06842 Programao I

3. Algoritmos

3.1. Introduo

A palavra algoritmo, primeira vista, parece estranha. Embora possua designao desconhecida, est constantemente presente em nosso cotidiano: a maneira como uma pessoa toma banho um algoritmo. Outros algoritmos freqentemente encontrados so: instrues para se utilizar um aparelho eletrodomstico; uma receita para preparo de algum prato; guia de preenchimento para declarao do imposto de renda; a regra para determinao de mximos e mnimos de funes por derivadas sucessivas; a maneira como as contas de gua, luz e telefone so calculadas mensalmente; etc. Existem diversos conceitos para algoritmo, sendo os principais descritos abaixo:

Um conjunto finito de regras que prov uma seqncia de operaes para resolver um tipo de problema especfico [KNUTH]

Seqncia ordenada, e no ambgua, de passos que levam soluo de um dado problema [TREMBLAY]

Processo de clculo, ou de resoluo de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restries, as regras formais para a obteno do resultado ou da soluo do problema [AURLIO]

Formalmente, um algoritmo uma seqncia finita de passos (instrues) que levam a execuo de uma tarefa. Pode-se pensar em algoritmo como uma receita, uma seqncia de instrues que resultam em uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. 18

ENG06842 Programao I

A importncia do algoritmo est no fato de especificar uma seqncia de passos lgicos para que o computador possa executar uma tarefa qualquer, pois o mesmo por si s no tem vontade prpria, faz apenas o que mandado. Com uma ferramenta algortmica, pode-se conceber uma soluo para um dado problema, independendo de uma linguagem especfica e at mesmo do prprio computador. Duas frases resumem a importncia dos algoritmos:

A noo de algoritmo bsica para toda a programao de computadores.


[KNUTH - Professor da Universidade de Stanford, autor da coleo The art of computer programming]

O conceito central da programao e da cincia da computao o conceito de algoritmo.


MODULA-2] [WIRTH - Professor da Universidade de Zurique, autor de diversos livros na rea e responsvel pela criao de linguagens de programao como ALGOL, PASCAL e

Como exemplos de algoritmos, pode-se citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais. Outros exemplos seriam os manuais de aparelhos eletrnicos, como um telefone celular, que explicam passo-a-passo como, por exemplo, armazenar um nmero de telefone de contato, uma receita de bolo, a soluo de uma equao do 2 grau, uma pesquisa na lista telefnica, etc.
3.2. Principais caractersticas dos algoritmos

Todo algoritmo deve apresentar algumas caractersticas bsicas: ter fim; no dar margem dupla interpretao (no ambguo); capacidade de receber dado(s) de entrada do mundo exterior; poder gerar informaes de sada para o mundo externo ao ambiente do algoritmo; ser efetivo (todas as etapas especificadas no algoritmo devem ser alcanveis em um tempo finito).

19

ENG06842 Programao I

Pode-se dizer ento que o algoritmo uma seqncia de instrues, e cada instruo representa uma AO que deve ser entendida e realizada. Surge ento uma questo:

Como saber se j existe detalhes suficientes em um algoritmo para que a AO possa ser entendida e realizada?
Vai depender do agente que ir executar o algoritmo. No caso de

algoritmos computacionais, sabe-se que o computador possui um conjunto


limitado de instrues (ver Captulo 2) e o algoritmo deve ser expresso nos termos destas instrues. Essas aes podem ser vistas como uma srie finita e bem definida de passos ou regras que, quando realizadas, atingem um objetivo previamente definido. Assim, outra definio para algoritmos poderia ser: Algoritmo a descrio de um conjunto de aes que, obedecidas, resultam numa sucesso finita de passos, atingindo um objetivo esperado. Dessa forma, nota-se que o que importa no algoritmo o efeito das aes para a obteno do resultado esperado. Para isso, deve-se fazer uso de: aes simples e bem definidas (no ambguas); seqncia ordenada de aes; seqncia finita de passos.

3.3. Regras para construo de algoritmos

Para escrever um algoritmo precisa-se descrever a seqncia de instrues de maneira simples e objetiva. Para isso deve-se utilizar algumas tcnicas: Usar somente um verbo por frase Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica

20

ENG06842 Programao I

Usar frases curtas e simples Ser objetivo Procurar usar palavras que no tenham sentido dbio

Entretanto, ao montar um algoritmo, precisa-se primeiro dividir o problema apresentado em trs fases fundamentais:
Entrada Processamento Sada

Onde: Entrada: so os dados de entrada do algoritmo. Processamento: so os procedimentos utilizados para chegar ao resultado final. Sada: So os dados j processados.

Exemplo: Imagine o seguinte problema: Calcular a mdia final dos alunos de Lgica e Tcnica de Programao. Os alunos realizaro quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = (P1 + P2 + P3 + P4)/4. Para montar o algoritmo proposto, deve-se fazer trs perguntas: a) Quais so os dados de entrada? R: P1, P2, P3 e P4 b) Qual ser o processamento a ser utilizado? R: Somar todos os dados de entrada e dividi-los por 4 c) Quais sero os dados de sada? R: A mdia final Algoritmo Receba a nota da prova1 Receba a nota de prova2 Receba a nota de prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso

21

ENG06842 Programao I

Por fim, pode-se enumerar as diretrizes para construo de um algoritmos da seguinte maneira: 1. Identificao do problema: determinar o que se quer resolver ou qual objetivo a ser atingido. 2. Identificao das entradas de dados: informaes fornecidas, a partir das quais se desenvolvero os clculos. 3. Identificao das sadas de dados: as informaes a serem geradas como resultado. 4. Identificao das regras e limitaes do problema ou das limitaes do agente executante (ex: se o agente fosse uma calculadora nocientfica, iriam existir limitaes no clculo de funes, por exemplo). 5. Determinao do que deve ser feito para transformar as entradas em sadas. Neste ponto deve ser determinada a seqncia de aes que leve soluo do problema. Para isto preciso: a. observar as regras e limitaes j identificadas. b. determinar aes possveis de serem realizadas pelo agente. 6. Construo do algoritmo, utilizando uma das formas de

representao de algoritmos (ver Seo 3.5). 7. Teste da soluo - execuo de todas as aes do algoritmo, seguindo o fluxo estabelecido para verificar se ele est realmente gerando os resultados esperados ou detectar possveis erros em sua descrio (ver Captulo 6). Deve-se destacar que essas diretrizes so genricas e podem ser usadas ou adaptadas na organizao dos passos que iro compor a soluo de um determinado problema, ou seja, na criao de um algoritmo para atingir um objetivo determinado.

22

ENG06842 Programao I

3.4. Refinamentos sucessivos

Um algoritmo considerado completo se os seus comandos forem do entendimento do seu agente. Num algoritmo, um comando que no for do entendimento do agente ter que ser desdobrado em novos comandos, que constituiro um refinamento do comando inicial, e assim sucessivamente, at que todos os comandos sejam entendidos pelo agente. Por exemplo, o algoritmo para calcular a mdia aritmtica de dois nmeros pode ser escrito da seguinte forma: Receba os dois nmeros Calcule a mdia dos dois nmeros Exiba o resultado

Pode-se notar que, o comando Calcule a mdia dos dois nmeros pode ser desdobrado em: Some os dois nmeros Divida o resultado por 2

Aps esse refinamento, o algoritmo pode ser considerado completo, a menos que o agente no saiba fazer as operaes de adio e diviso, ou no seja capaz de entender diretamente algum comando. A partir de um algoritmo completo, pode-se reescrev-lo inserindo o refinamento na posio do comando que foi refinado. Assim sendo, obtmse: Receba os dois nmeros Some os dois nmeros Divida o resultado por 2 Exiba o resultado

23

ENG06842 Programao I

Reescrever um algoritmo completo com os refinamentos sucessivos inseridos nos seus devidos lugares, permite ter uma viso global de como o algoritmo deve ser executado. Exemplo: Ensinar rob a fazer um bolo. Bata no liquidificador 2 cenouras, 4 ovos e 1 xcara de leo. J na batedeira, adicione fermento e acar a gosto. Leve ao forno como um bolo normal. 1 Passo: Identificar ambigidades, indefinies e efeitos no previsveis. Ex: Fermento e acar a gosto???? (Quanto a gosto?). Como um bolo normal???? (O que um bolo normal?). 1 refinamento: bata no liquidificador 2 cenouras, 4 ovos e 1 xcara de leo por 2 minutos. colocar na batedeira e acrescentar um tablete de fermento e 1 xcara de acar, bata por 3 minutos. leve ao forno por 1 hora.

2 Passo: Novamente identificar ambigidades... Ex: Bata no liquidificador 2 cenouras, 4 ovos e 1 xcara de leo???? (O que bater no liquidificador?). 2 refinamento: pegar o liquidificador inserir 2 cenouras inserir 4 ovos inserir 1 xcara de leo ligar o liquidificador esperar por 2 minutos desligar o liquidificador

24

ENG06842 Programao I

Passo:

Mais

uma

vez

identificar

ambigidades...

Ex:

Pegar

liquidificador??? (Aonde? Como?). 3 refinamento: ir at o armrio abrir a porta do armrio estender as mos at o liquidificador segur-lo ir at a mesa posicionar o liquidificador sobre a mesa solt-lo e assim por diante... at que todas as aes possam ser compreendidas pelo rob. medida que o algoritmo passa a ser maior e mais complexo, esta viso global torna-se menos clara e, neste caso, um algoritmo apresentado com os refinamentos sucessivos separados oferece uma melhor abordagem para quem precisar entend-lo. Exemplo: Imagine o algoritmo do Windows, todo escrito de forma seqencial, e com todos os refinamentos. O entendimento e a anlise desse algoritmo seriam praticamente impossveis. Dessa forma, esse algoritmo deve ser modularizado, ou seja, os refinamentos devem ser apresentados de forma independente. A modularizao ser estudada mais a diante.
3.5. Representao de algoritmos

A descrio de um algoritmo de forma clara e fcil de ser seguida ajuda no seu desenvolvimento, depurao (correo de erros) e a subseqente transformao do mesmo num programa. Descrio Narrativa: especificao verbal dos passos em linguagem natural, ou seja, faz-se uso do portugus para descrever algoritmos.

25

ENG06842 Programao I

Vantagens: O portugus bastante conhecido por ns; Desvantagens: a linguagem natural prolixa (normalmente, escreve-se muito para dizer pouca coisa) e imprecisa e freqentemente pouco confivel como um veculo de transferir informao. Sua utilizao pode ser adotada, entretanto, para a apresentao de comentrios (ver Captulo 4) sobre o algoritmo (ou parte dele), esclarecendo ou realando pontos especficos. Exemplo: Calcular a mdia de um aluno. Receba a nota da prova 1 Receba a nota da prova 2 Receba a nota da prova 3 Receba a nota da prova 4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso Se a mdia for maior ou igual a 7,0, mostre APROVADO, seno REPROVADO Diagrama de blocos (Fluxograma): uso de ilustraes grficas para transmitir informaes (Ex. gerais: mapas, diagramas explicativo para montagem de aparelhos, etc.). Um diagrama de blocos apresenta de forma grfica a lgica de um algoritmo, enfatizando passos individuais e o fluxo de execuo. No diagrama de blocos existem smbolos padronizados para incio, entrada de dados, clculos, sada de dados, fim, etc. O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento. Esses smbolos so apresentados a seguir: Indica o INCIO ou FIM de um processamento. Exemplo: Incio do algoritmo.

26

ENG06842 Programao I

Indica entrada de dados. Exemplo: Digite a


Terminal

nota da prova 1. Processamento em geral. Exemplo: Calculo de dois nmeros. Mostra informaes ou resultados. Exemplo:

Entrada

Processamento

Mostre o resultado do calculo. Verifica uma a validade de uma condio.

Sada

Exemplo: Se a mdia for inferior a 7,0 ento o aluno est reprovado, seno ele est aprovado.

Condio

Vantagens: Uma das ferramentas mais conhecidas; Figuras dizem muito mais que palavras; Padro mundial

Desvantagens: Pouca ateno aos dados, no oferecendo recursos para descrevlos ou represent-los; Complica-se medida que o algoritmo cresce.

Exemplo: Calcular a mdia de um aluno.

27

ENG06842 Programao I

Linguagem algortmica ou Pseudolinguagem: linguagem especial para expresso de algoritmos; funciona como uma linguagem simplificada de programao, utilizando expresses concisas e prdefinidas para representar as aes e o fluxo de execuo. uma descrio textual, estruturada e regida por regras que descrevem os passos executados no algoritmo. Utiliza-se palavras-chaves, indentao, apenas um passo por linha, onde normalmente usa-se um smbolo para indicar o final do passo (como por exemplo o ponto-e-virgula ;), etc. Nesse curso, ser utilizada uma pseudolinguagem denominada Portugol, pois ela possui uma estrutura similar linguagem de programao Pascal, que tambm ser utilizada neste curso. Obs: Indentao um termo aplicado ao algoritmo para indicar que os elementos hierarquicamente dispostos tm o mesmo avano relativamente posio (y,0). Na maioria das linguagens a indentao tem um papel meramente esttico, tornando a leitura do cdigo fonte muito mais fcil (read-friendly), porm obrigatria em outras. Python e Haskell, por exemplo, utilizam-se desse recurso tornando desnecessrio o uso de certos identificadores de blocos ("incio" e/ou "fim"). A verdadeira valia deste processo visvel em arquivos de cdigo fonte extensos, no se fazendo sentir tanto a sua necessidade em arquivos pequenos (relativamente ao nmero de linhas). Para qualquer programador, deve 28

ENG06842 Programao I

ser um critrio a ter em conta, principalmente, por aqueles que pretendam partilhar o seu cdigo com outros. A indentao facilita tambm a modificao, seja para correo ou aprimoramento, do cdigo fonte. Existem centenas de estilos de indentao, mas, basicamente, ela se consiste na adio de tabulaes no incio de cada linha na quantidade equivalente ao nmero de blocos em que cada linha est contida. Vantagens: Usa o portugus como base; Pode-se definir quais e como os dados vo estar estruturados; Passagem quase imediata do algoritmo para uma linguagem de programao qualquer. Desvantagens: Exige a definio de uma linguagem no real para trabalho; No padronizado.

Exemplo: Calcular a mdia de um aluno. algoritmo CALCULA_MEDIA; var P1, P2, P3, P4, MEDIA: real; inicio leia (P1); leia (P2); leia (P3); leia (P4); MEDIA (P1 + P2 + P3 + p4) / 4; escreva (MEDIA); se MEDIA 7,0 ento escreva (APROVADO); seno escreva (REPROVADO); fim-se; fim.

29

ENG06842 Programao I

3.6. Exerccios

1. Defina algoritmo com suas palavras. 2. Cite 3 exemplos de algoritmos que voc costuma utilizar no seu dia-adia. Procure algoritmos diferentes dos j citados nessa apostila. 3. Cite as caractersticas bsicas de um algoritmo. 4. Um algoritmo no pode conter um comando como Escreva todos os nmeros inteiros positivos. Por qu? 5. Cite trs regras bsicas para construo de um algoritmo. 6. Imagine que voc ter que fazer um algoritmo para calcular o saldo de uma pessoa no final do ms. Quais seriam as entradas, sadas e o processamento necessrio para esse algoritmo. 7. Escreve um algoritmo para resolver a questo anterior utilizando a sua resposta (entradas, sadas e processamentos). 8. Faa o refinamento sucessivo (pelo menos 3 refinamentos) para o algoritmo abaixo. Abrir minha caixa de e-mails; Escrever um novo e-mail; Enviar o novo e-mail; Fechar minha caixa de e-mails;

9. Defina com suas palavras o que descrio narrativa e cite suas vantagens e desvantagens. 10. Defina com suas palavras o que um diagrama de blocos e cite suas

vantagens e desvantagens. 11. Faa um diagrama de blocos para cada algoritmo que voc

apresentou na questo 2. 12. Descreva as vantagens e as desvantagens das pseudolinguagens. 30

ENG06842 Programao I

13.

Em sua opinio, qual a melhor forma de se representar algoritmos?

Justifique sua resposta. 14. Escreva cada algoritmo que voc apresentou na questo 2 em

linguagem algortmica.

31

ENG06842 Programao I

4. Elementos fundamentais de programao

4.1. Tipos bsicos de dados

Um tipo define um padro de comportamento para constantes e variveis. Por exemplo, objetos do tipo fruta podem ser descascados, objetos do tipo carro no. tipo carro = civic, punto, bmw, ferrari. tipo fruta = banana, mamo, laranja, ma, goiaba.

A partir dos tipos, pode-se saber quais as aes possveis de serem realizadas sobre as constantes e variveis. Ex: No possvel multiplicar duas palavras, porm possvel multiplicar dois nmeros inteiros. Os principais tipos pr-definidos em programao so: Inteiro: toda e qualquer informao numrica que pertena ao conjunto dos nmeros inteiros (negativa, nula ou positiva). Ex: -32, 0 e 15. Nos algoritmos esse tipo descrito como inteiro. Real: toda e qualquer informao numrica que pertena ao conjunto dos nmeros reais (negativa, nula ou positiva). Ex: -32.0, 0.1 e 15.978. Por conveno, em programao utiliza-se o sistema internacional de numerao, ou seja, as casas decimais so separadas por . e no por , como no padro brasileiro. Nos algoritmos esse tipo descrito como real. Lgico: toda qualquer informao que possa assumir apenas dois valores: verdadeiro ou falso. Ex: verdadeiro, falso. Nos algoritmos esse tipo descrito como booleano (devido lgebra Booleana, que foi criada pelo matemtico e filsofo George Boole, e base da atual aritmtica computacional) Literal: toda e qualquer informao composta de um conjunto de caracteres alfanumricos (numricos, alfabticos e especiais). Ex: 1, A, @.

32

ENG06842 Programao I

Em programao, comum utilizar dois tipos literais, o caractere e a

string.
Caractere: apresenta apenas uma unidade literal. Por conveno, deve-se representar esse tipo entre aspas simples. Ex: a, 1, @. Nos algoritmos esse tipo descrito como char. String: apresenta uma ou mais unidades literais (no mximo 255). Por conveno, deve-se representar esse tipo entre aspas simples. Ex: a, a1b343, teste@gmail.com, Joo da Silva. Nos algoritmos esse tipo descrito como string. Tambm pode ter tamanho prdefinido, nesse caso, string[10], por exemplo, permite no mximo 10 caracteres, e no 255. possvel acrescentar novos tipos de dados (como tipo fruta, tipo carro, etc.) ao conjunto de tipos conhecidos de qualquer linguagem de programao. Esse tema ser tratado posteriormente.
4.2. Constantes

Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa, ou seja, no variam no decorrer do algoritmo. Conforme o seu tipo, a constante classificada como sendo numrica, lgica ou literal. A declarao de constantes deve ser feita antes da declarao das variveis. Ex: 148, Opo:, -8.69, Tecle algo para continuar, falso... Sintaxe geral em Portugol: const constante1 = valor1; constante2 = valor2; etc... O tipo pode ser inteiro, real, caractere (alfanumrico) ou booleano. Ex: const pi = 3.14; status = falso;

33

ENG06842 Programao I

nome = matrix;
4.3. Variveis

Sabe-se da Matemtica que uma varivel a representao simblica dos elementos de um certo conjunto. Nos programas destinados a resolver um problema no computador, cada varivel corresponde uma posio de memria, cujo contedo pode variar ao longo do tempo durante a execuo de um programa. Embora a varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante. Toda varivel identificada por um nome ou identificador. Assim, por exemplo, num programa para calcular a rea de um tringulo retngulo pelo teorema de Pitgoras (a2 = b2 + c2), os identificadores a, b e c podem representar as posies de memria que armazenam o valor da hipotenusa e dos catetos. Uma varivel composta de dois elementos bsicos: contedo - valor atual da varivel identificador manipulao. nome dado varivel para possibilitar sua

Declarao de Variveis: a criao (ou definio) de locais na memria rotulados com o identificador da varivel (ou constante) que ser utilizada no algoritmo para a manipulao de um determinado tipo de informao. Sintaxe geral em Portugol: var lista de variveis: tipo1; lista de variveis: tipo2; etc...

34

ENG06842 Programao I

O tipo pode ser inteiro, real, caractere (alfanumrico) ou booleano. Ex: var pi: real; num, x: inteiro; status: booleano; sexo: char; endereco: string; nome: string[20]; Neste momento (aps a declarao), as variveis ainda no contm nenhum valor associado a elas. A declarao de variveis deve ser feita antes da definio das aes do algoritmo.
4.4. Identificadores

So nomes escolhidos para representar constantes, variveis, tipos, funes, procedimentos, unidades, programas e campos de um registro. Ou seja, nome de um local onde se pode colocar qualquer valor do conjunto de valores possveis de um tipo associado. Usado para manipular todos os dados variveis do algoritmo. Pode tambm ser usado para rotular valores constantes (ex: uso do identificador pi para representar o valor constante 3.14). Regras para definio de identificadores em pseudolinguagem (Portugol): devem comear por um caractere alfabtico (uma letra). pode ser seguido de letras e/ou dgitos. permitido o uso do caractere especial _ situado entre letras e/ou dgitos. Ex. de identificadores vlidos: Operador, Nome, X, y, ENDERECO, Aluno_01. no permitido o uso de acentos, , ?, etc...

35

ENG06842 Programao I

deve representar de forma significativa o contedo desejado, ou seja, deve ser um MNEMNICO (que se refere a memria fcil de lembrar).

pode ter qualquer comprimento, mas deve-se evitar o uso de identificadores longos;

letras maisculas e minsculas so indiferentes (no PASCAL, mas em C, C++ e Java por exemplo, fazem diferena);

no podem haver identificadores repetidos; no pode ser uma palavra reservada.

Palavras reservadas: so palavras que fazem parte da estrutura da linguagem e tm significados pr-determinados. Elas no podem ser redefinidas e no podem ser utilizadas como identificadores. Por notao, as palavras reservadas devem ser sublinhadas. Ex: inicio, fim, var, const, etc... Exemplos de identificadores vlidos Aluno X A34 NotaDoAluno

Exemplos de identificadores no vlidos 23 Nota do Aluno 1treco

4.5. Comentrios

Os comentrios representam qualquer texto que explique uma ao ou um dado usado no algoritmo. Eles podem ser colocados em qualquer ponto do algoritmo, utilizando { } como delimitadores. Os comentrios 36

ENG06842 Programao I

no interferem na lgica de um algoritmo ou programa. O objetivo dos comentrios proporcionar maior clareza ao programa, e devem ser expressos da seguinte forma. { texto } Deve-se escrever os comentrios no momento que estiver escrevendo o algoritmo. Um programa mal documentado um dos piores erros que um programador pode cometer. O melhor momento para se escrever os comentrios aquele em que o programador tem maior intimidade com o algoritmo, ou seja, durante a sua confeco. Existem 02 tipos de comentrios que devem ser usados. Prlogo ou cabealho: so comentrios que contm uma identificao geral do algoritmo. O que faz o algoritmo (programa ou mdulo); Como cham-lo ou utiliz-lo; Significado dos parmetros, variveis de entrada, de sada e variveis mais importantes; Arquivos utilizados; Outros mdulos utilizados; Mtodos especiais utilizados, com referncias nas quais possa se encontrar mais informaes; Autor, data de escrita e ltima atualizao;

Exemplo: No incio do algoritmo para calcular a mdia dos alunos, deve-se colocar, por exemplo, o seguinte comentrio: { } PROGRAMA PARA CALCULAR A MEDIA DE ALUNOS

37

ENG06842 Programao I

{ Autor: Fulano de tal. } { Data de criao: 21/08/2007 } Comentrios de linha: so comentrios de passos que podem ser mais obscuros para o leitor, como o uso de variveis como acumuladores, contadores, flags, etc. Exemplo: var NomeDoIndividuo: string; EstadoCivil: booleano; falso solteiro }
4.6. Expresses aritmticas

Ultima atualizao: 30/07/2007

{ armazena o nome do indivduo } { verdadeiro significa casado,

Expresses cujos operadores so aritmticos e cujos operandos so constantes e/ou variveis do tipo numrico (inteiro ou real). Por notao, os operadores so descritos da seguinte forma: Operado r + * / DIV MOD Operao adio Subtrao Multiplicao Diviso real Diviso inteira Resto da diviso Operando s inteiro, real inteiro, real inteiro, real inteiro, real inteiro inteiro Resultado inteiro, real inteiro, real interior, real real inteiro inteiro

Exemplo: Express o 1+2 5.0 1 2 * 1.5 5/2 5 DIV 2 5 MOD 2 Resultado 3 4.0 3.0 2.5 2 1 38

ENG06842 Programao I

4.7. Expresses lgicas

Expresses cujos operadores so lgicos e cujos operandos so relaes, constantes e/ou variveis do tipo lgico (booleano). comum nos algoritmos surgirem situaes em que a execuo de uma ao, ou seqncia de aes, est sujeita a uma certa condio. Esta condio representada no texto do algoritmo por meio de uma expresso lgica. Relaes: so comparaes realizadas entre dois valores de mesmo tipo. Estes valores so representados na relao atravs de constantes, variveis ou expresses aritmticas, estas ltimas para o caso de valores numricos. Os operadores relacionais, que indicam a comparao a ser realizada entre os termos da relao, so conhecidos da Matemtica, ou seja: = igual > maior que >= maior ou igual a <> diferente < menor que <= menor ou igual a

Por conveno, os smbolos descritos acima so utilizados. interessante destacar que o resultado de uma relao sempre um valor lgico (booleano), ou seja, verdadeiro ou falso. Ex: A <> B; NOME = Joo; B 4 * 3 <= 0; etc. Operadores lgicos: Existem trs operadores lgicos: e, ou e no. Esses operadores so utilizados na formao de proposies lgicas a partir de outras j conhecidas. De forma anloga a teoria de conjuntos encontrada na Matemtica, tem-se que: e: usado para conjuno; uma expresso e verdadeira se todas as condies forem verdadeiras. ou: usado para disjuno; uma expresso ou verdadeira se pelo menos uma condio for verdadeira.

39

ENG06842 Programao I

no: usado para negao; uma expresso no inverte o valor da expresso ou condio, se verdadeira inverte para falsa e viceversa.

A tabela abaixo (Tabela Verdade) descreve as possveis situaes com uso desses operadores com dois operandos A e B. Considere V como verdadeiro e F falso. A V V F F B V F V F AeB V F F F A ou B V V V F no A F F V V no B F V F V

Exemplos: Suponha a existncia de trs variveis A = 5, B = 8 e C =1. A partir dessa informao, pode-se afirmar que: Expresso (A = B) e (B > C) (A <> B) ou (B < C) no (A > B) (A < B) e (B > C) (A >= B) ou (B = C) no (A <= B) Resultado falso verdadeiro verdadeiro verdadeiro falso falso

Obs.: Sempre utilize parntesis para organizar as expresses, tanto as lgicas e relacionais quanto as aritmticas.
4.8. Prioridade entre operadores

Pode-se ter mais de um operador na mesma expresso. Em alguns casos, a ordem em que so efetuadas as operaes pode afetar o resultado final da expresso. Assim como na Matemtica possui uma ordem entre os operadores (/,*, +,-), nas expresses lgicas isso tambm acontece. A prioridade dos operadores aritmticos e lgicos descrita a seguir. Prioridade 1 2 Operador parntesis aritmtico

40

ENG06842 Programao I

3 4 5 6

relacional no e ou

Exemplo: A = 1 e (B + C <> 0 ou K <= 2); A seqncia de execuo nesse exemplo : somar B + C, comparar o resultado com 0, depois verificar se K <= 2 e se A = 1, e finalmente fazer as comparaes ou e e. Note que nesse caso o ou ser executado antes devido ao uso de parntesis. Nesse caso, ficaria mais claro escrever a expresso da seguinte forma: (A = 1) e (((B+C) <> 0) ou (K <= 2)).
4.9. Comandos de atribuio

Serve para atribuir (ou associar) um valor a uma varivel ou constante. Sintaxe geral em pseudolinguagem: identificador expresso; onde expresso pode ser uma: constante, varivel, expresso matemtica, funo matemtica, expresso booleana, etc. Ou seja, possvel atribuir um valor qualquer a uma varivel, sendo que o valor atribudo precisa ser compatvel com o tipo da varivel. Ex: NOME Fulano de Tal; PI 3.14; Erro verdadeiro; Media (P1 + P2)/2; Exemplos: Considerando as variveis declaradas: var X: inteiro; Y, Z: real; Disciplina: string; Turma: char; Status: booleano; Tem-se: Casos vlidos X 5; X X + 1; Y Z; Z Y + 5 + X; Casos invlidos X Y; Z + Y 5; 5 X;

41

ENG06842 Programao I

Turma B; Status verdadeiro; Disciplina Qumica I;


4.10. Comandos de entrada e sada

Representam as aes bsicas de algoritmos para recebimento e apresentao de dados, respectivamente. Entrada de dados: informaes que so fornecidas ao programa pelo usurio durante a resoluo do problema. Entrada de dados, ou ainda leitura de dados, seria anlogo a atribuir a uma varivel um valor obtido externamente. O exemplo mais natural para leitura de dados pedir ao usurio fornecer valores via teclado. Mas pode-se tambm ler dados de arquivos, ou ainda de outros dispositivos de entrada. Obs.: No possvel ler variveis do tipo booleano. Representao em Portugol: leia (identificador1, identificador2, ...); Ex: leia (altura, idade, sexo); Sada de dados: informaes que so mostradas ao usurio como resposta ao problema. A sada de dados significa mostrar tais dados em um dispositivo de sada, como vdeo, impressora ou arquivo. A forma mais simples de sada de dados ocorre quando se escreve valores de variveis, constantes ou expresses no vdeo. Representao em pseudolinguagem: escreva (expresso1, expresso2, ...); Ex: escreva (Seu peso ideal e: , peso_ideal); escreva (Media final = , (P1 + P2)/2);
4.11. Esquema genrico em pseudolinguagem

Um esquema genrico para escrever algoritmos em pseudolinguagem apresentado a seguir: Declarao de constantes Declarao de variveis incio inicializao de variveis; bloco de comandos de entrada de dados; {comentrios} {comentrios}

42

ENG06842 Programao I

bloco de comandos de clculo (processamento); bloco de comandos de sada de dados; fim.

{comentrios} {comentrios}

Exemplo: Algoritmo em pseudolinguagem para o problema do clculo da mdia final. algoritmo CALCULA_MEDIA; const NUM_NOT = 4; { constante com o nmero de notas } var P1, P2, P3, P4, MEDIA: real; { variveis com as notas e a mdia } incio leia (P1); { leitura da nota da prova 1} leia (P2); { leitura da nota da prova 2} leia (P3); { leitura da nota da prova 3} leia (P4); { leitura da nota da prova 4} MEDIA (P1 + P2 + P3 + p4) / NUM_NOT; { clculo da mdia } escreva (MEDIA); { mostrar a mdia } fim. interessante destacar que a palavra reservada fim no final de um algoritmo deve sempre ser seguida por ponto, e no ponto-e-vrgula.

43

ENG06842 Programao I

4.12. Exerccios

1. Cite os tipos bsicos de dados em programao e d exemplos. 2. Escreva o tipo de dado ideal para se representar as seguintes informaes: a) O nmero da conta bancria b) A altura de uma pessoa em metros c) A placa de um veculo d) O nmero de filhos de uma pessoa e) A populao de um pas f) A cor de um objeto 3. Defina constante com suas palavras e d exemplos. 4. Quais os valores possveis em um dado do tipo booleano? 5. O que uma string? 6. Qual o tamanho mximo de uma string? 7. Identifique os tipos dos seguintes dados: a) 'Processamento de Dados' b) 0.4 c) '4.5' d) falso e) '?' f) ' g) -5.3 h) '.05' i) 'verdadeiro' j) 0 8. Defina variveis com suas palavras e d exemplos. 9. Defina declarao de variveis com suas palavras e d exemplos. '

44

ENG06842 Programao I

10.

Utilizando tipos primitivos de dados, crie declaraes de variveis,

que armazenem as seguintes informaes: o nome de uma figura geomtrica, a quantidade de lados, a rea, o permetro e se a figura regular ou no. 11. 12. Quais so as regras para definio de identificadores? Assinalar os identificadores invlidos, justificando. b) XA,1d c) NomeDoAluno d) 198aberto e) incio

a) A1BC 13. 14. 15.

O que so palavras reservadas? Defina comentrios com suas palavras e d exemplos. Diferencie os comandos de atribuio, entrada e sada. D

exemplos. 16. Faa 02 exemplos para cada um dos conceitos abaixo: a) entrada de dados b) sada de dados c) declarao de variveis d) inicializao de variveis e) atribuio do resultado de uma expresso aritmtica a uma varivel 17. Qual o resultado das expresses aritmticas abaixo, sabendo-se que os valores de X, Y e Z so, respectivamente, 1, 2 e 5 ? a) Z mod Y div Y b) X + Y + Z / 3 c) (X / Z) + (Z / Y) * (Z / Y) d) Z div Y + X * Y e) Z - (X - Y)

45

ENG06842 Programao I

18. Escreva uma expresso para se calcular o valor de 25. 19. Preencha a tabela abaixo: A B V V F F 20. V F V F no A ou B A e no B no (A e B) (A ou B) e (no B)

Escreva o resultado das seguintes comparaes: a) 1 <> 1.0 b) 'abc' > 'ABC' c) ' '=' ' d) falso = falso e) verdadeiro <> verdadeiro f) 'JOSE' > 'JOSEFINA' g) '50' < '100'

21. Qual o resultado das expresses lgicas abaixo, sabendo-se que os valores de A e B so, respectivamente, verdadeiro e falso? a) no A e B ou A e no B b) no (no (A ou B) e (A ou B)) c) A ou B e no A ou no B d) (A ou B) e (no A ou no B) 22. Sabendo que A=3, B=7 e C=4, informe se as expresses abaixo so

verdadeiras ou falsas. a) (A+C) > B b) B >= (A + 2) c) C = (B A) d) (B + A) <= C e) (C+A) > B ( ( ( ( ( ) ) ) ) )

46

ENG06842 Programao I

23. Sabendo que A=5, B=4 e C=3 e D=6, informe se as expresses abaixo so verdadeiras ou falsas. a) (A > C) AND (C <= D) b) (A+B) > 10 OR (A+B) = (C+D) c) (A>=C) AND (D >= C) ( ( ( ) ) )

24. Escreva um programa para ler o nome e o sobrenome de uma pessoa e escrev-los na seguinte forma: sobrenome seguido por uma vrgula e pelo nome. Exemplo: entrada: Antonio, Soares; sada: Soares, Antonio. 25. Escreva um algoritmo para ler uma temperatura dada na escala Fahrenheit e exibir o equivalente em Celsius.
C= 5 ( F 32) 9

26. A ordem das atribuies importante? A B e C A tem o mesmo efeito de C A e A B? Justifique. 27. Em quais dos seguintes pares importante a ordem dos comandos? Justifique. a) X Y YX Y b) X Y c) X Z ZX d) Z Y XY X

47

ENG06842 Programao I

48

ENG06842 Programao I

5. Estruturas de controle Controlam a ordem e a seqncia de execuo de um algoritmo. Como apresentado no captulo anterior em Expresses Lgicas, pode-se notar que na maioria das vezes necessria uma tomada de decises no andamento do algoritmo. Essas decises interferem diretamente no andamento do programa. Para isso, so utilizadas trs estruturas:

Seqencial, Condicional e de Repetio.


5.1. Seqencial

Os comandos de um programa so executados na seqncia em que aparecem, ou seja, os comandos so executados numa seqncia linear, de cima para baixo, na mesma ordem em que aparecem. Sintaxe geral: comando 1; comando 2; comando 3; .... Exemplo: leia (P1); leia (P2); leia (P3); leia (P4); Note que esses comandos sero executados na seqncia em que esto escritos.
5.2. Condicional

Permite a escolha de um grupo de aes para serem executadas de acordo com a aceitao ou no de certas condies. So testados parmetros e, a depender de seus valores, toma-se um caminho ou outro. As condies que so testadas num algoritmo so do tipo booleano (expresses lgicas), portanto podem ter somente dois resultados: verdadeiro ou falso. Assim, a seleo de aes pode seguir, no mximo, duas alternativas: uma se a condio for verdadeira e outra se a condio testada for falsa. Existem selees mais simples, selees compostas de outras selees e selees mltiplas.

49

ENG06842 Programao I

Selees simples: Opo 1: se condio ento bloco de comandos 1; fim-se; Exemplo: se MEDIA < 7.0 ento escreva (reprovado); fim-se;

Opo 2: se condio ento bloco de comandos 1; seno bloco de comandos 2; fim-se;

Exemplo: se MEDIA < 7.0 ento escreva (reprovado); seno escreva (aprovado); fim-se;

Selees Compostas: Aninhamento de condies. Deve-se tomar cuidado na utilizao de se's aninhados, pois a clusula seno sempre relacionada ao ltimo se. Se dentro de algum programa precisarmos contornar este fato, podemos faz-lo com o delimitador fim-se. Exemplo: se condio1 ento bloco de comandos 1; seno se condio2 ento bloco de comandos 2; fim-se; fim-se; se MEDIA >= 7.0 ento escreva (aprovado); seno se MEDIA > 5.0 ento escreva (prova final); fim-se; fim-se;

50

ENG06842 Programao I

Exemplo: se condio1 ento bloco de comandos 1; se condio2 ento bloco de comandos 2; fim-se; seno bloco de comandos 3; fim-se; se MEDIA < 7.0 ento escreva (prova final); se ento escreva (aprovado); seno escreva (reprovado); fim-se; seno escreva (aprovado); fim-se; NOTA_PF >= 5.0

Selees mltiplas: Utilizada quando se deseja executar um entre vrios comandos (ou uma entre vrias seqncias de comandos) dependendo do resultado de uma expresso. A estrutura de seleo mltipla descrita como caso, e obedece a seguinte sintaxe: caso expresso1 seja: valor1, valor2,... : bloco de comandos 1; valor3, valor4,... : bloco de comandos 2; ... seno bloco de comandos n; fim-caso; Exemplo: caso MEDIA seja: 7.0, 5.0, seno escreva (reprovado); fim-caso; 6.0: 8.0: escreva escreva (prova (aprovado); final);

5.3. Repetio

Pode-se ter repeties condicionais (a repetio ocorre condicionada a uma condio lgica) e incondicionais (que tem um nmero pr-definido de repeties). 51

ENG06842 Programao I

a) Repetio condicional: existem dois tipos distintos de repetio condicional. Tipo 1: Condio testada no incio da repetio. Sintaxe: Exemplo: enquanto condio faa bloco de comandos; fim-enquanto; enquanto SOMA < 1000 faa SOMA SOMA + 10; fim-enquanto;

Exemplo prtico: algoritmo EXEMPLO_PRATICO; {escrever os nmeros inteiros de 1 a 100} var N: inteiro; incio N 1; enquanto N <= 100 faa escreva (N); N N + 1; fim-enquanto; fim. Caractersticas: Testa a condio antes da execuo do bloco. Enquanto a condio for verdadeira, o bloco de comandos executado. Assim, o bloco de comandos pode ser executado 0 ou mais vezes. Pra a execuo do bloco quando a condio se tornar falsa.

Tipo 2: Condio testada no final da repetio. Sintaxe:

52

ENG06842 Programao I

repita bloco de comandos; at condio;

Exemplo: repita SOMA SOMA + 10; at SOMA = 1000;

Exemplo prtico: algoritmo EXEMPLO_PRATICO; {escrever os nmeros inteiros de 1 a 100} var N: inteiro; incio N 1; repita escreva (N); N N + 1; at N > 100; fim. Caractersticas: Testa a condio aps da execuo do bloco. Enquanto a condio for verdadeira, o bloco de comandos executado. Assim, o bloco de comandos executado pelo menos uma vez. Pra a execuo do bloco quando a condio se tornar verdadeira (denominada de Condio de Parada). b) Repetio incondicional: Nmero pr-definido de repeties.

Sintaxe: para varivel_de_controle valor_inicial at valor_final faa bloco de comandos; fim-para;

53

ENG06842 Programao I

Exemplo: para i 0 at 1000 faa SOMA SOMA + i; fim-para; Exemplo prtico: algoritmo EXEMPLO_PRATICO; {escrever os nmeros inteiros de 1 a 100} var N: inteiro; incio para N 1 at 100 faa escreva (N); fim-para; fim. Caractersticas: Repete o bloco de comandos (valor_final valor_inicial + 1) vezes. Incrementa (atualiza) automaticamente a varivel de controle cada vez que o bloco executado (incremento default de 1 at alcanar o valor final). Se o valor final definido for menor que o valor inicial, o lao (loop) de repetio no executado nenhuma vez. A varivel de controle deve ser do tipo inteiro. A varivel usada como controle da estrutura no pode ser modificada dentro do bloco.
5.4. Loop infinito

Ao se usar estruturas de repeties deve-se tomar muito cuidado para garantir que as repeties tenham fim, ou seja, a condio de parada seja alcanada. Caso contrrio, o algoritmo ficar preso dentro da repetio, e

54

ENG06842 Programao I

nunca ir sair, causando um travamento do computador. Esse problema muito comum, e conhecido como loop infinito.
5.5. Variveis especiais

As variveis representam a informao manipulada pelo algoritmo, e portanto, pode aparecer em diversas situaes. Alm das j apresentadas, existem trs casos especiais: Variveis acumuladoras: acumula valores. Ex: ACUMULA 1; enquanto ACUMULA < 100 faa leia (NUM); ACUMULA ACUMULA + NUM; fim-enquanto; Variveis contadoras: conta valores. Ex: CONTA 0; repita CONTA CONTA + 1; escreva (Repeti o lao , CONTA, vezes ); at CONTA > 20; Variveis sinalizadoras ou flags: sinaliza erros, condies de falha de teste, etc. So variveis que informam que uma determinada situao foi alcanada. Normalmente, so usadas variveis do tipo booleano como sinalizadores. Ex: leia (dia, mes, ano); INVALIDA falso; se (dia<1 ou dia>31) ento { Muda o valor do flag para sinalizar um erro ou mudana de estado } INVALIDA verdadeiro; seno

55

ENG06842 Programao I

se (mes<1 ou mes>12) ento INVALIDA verdadeiro; fim-se; fim-se; se INVALIDA ento escreva (Erro na data - dia invalido ou mes invalido); fim-se; Note que a condio no ltimo se no usa operadores lgicos do tipo INVALIDA = verdadeiro, pois como a varivel INVALIDA j booleana, ou seja, s pode apresentar os valores verdadeiro ou falso, ela j apresenta um resultado lgico. Em geral, flags so utilizadas quando no conhecemos o nmero de repeties e este for determinado por um valor que ser lido. Assim, devese utilizar um controle de repeties por entrada, tambm conhecido como controle por sentinela. Para controle por flag, a melhor estratgia utilizar um loop infinito com a condio de parada sendo aplicada atravs do comando pare, dentro de um comando se logo aps a leitura da varivel a ser comparada com o flag. Obs: o comando pare funciona com uma sada forada de qualquer comando de repetio. Porm, s recomendado o seu uso dentro de um loop infinito, seno pode quebrar a forma estruturada que prpria dos comandos de repetio. Exemplo: Este algoritmo l um conjunto de nmeros inteiros e exibe o valor mdio dos mesmos. Obs: a condio de sada do lao ser a leitura do valor 0 (flag). algoritmo LACO_COM_FLAG; var NUM,CONT,SOMA,MEDIA: inteiro; incio SOMA 0;

56

ENG06842 Programao I

CONT 0; enquanto verdadeiro faa { loop infinito } escreva ('Digite um nmero inteiro (0 para encerrar): '); leia (NUM); se NUM = 0 ento pare; fim-se; SOMA SOMA + NUM; CONT CONT + 1; fim-enquanto; MEDIA SOMA div CONT; escreva ('Mdia = ',MEDIA); fim.
5.6. Exerccios

1. Joo Sardinha, homem de bem, comprou um microcomputador para controlar o rendimento dirio de seu trabalho. Toda vez que ele traz um peso de peixes maior que o estabelecido pelo regulamento de pesca do estado de Esprito Santo (50 quilos) deve pagar uma multa de R$ 4,00 por quilo excedente. Joo precisa que voc faa um algoritmo que leia o peso de peixes pescados e verifique se h excesso. Se houver, gravar em outra varivel a palavra excesso e em outra varivel o valor da multa que Joo dever pagar. Mostrar o valor dessas variveis. Caso contrrio mostrar tais variveis com o contedo igual ZERO. 2. Elabore um algoritmo que leia o CPF e o nmero de horas trabalhadas de um operrio. Calcule o salrio sabendo-se que ele ganha R$ 10,00 por hora. Quando o nmero de horas exceder a 50, calcule o excesso de pagamento armazenando-o em outra varivel, caso contrrio zerar tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do processamento mostre o salrio total e o salrio excedente do trabalhador. 3. Faa um algoritmo que mostre todos os nmeros inteiros.

57

ENG06842 Programao I

4. Desenvolva um diagrama que: a. Leia 4 nmeros; b. Calcule o quadrado de cada um; c. Se o valor resultante do quadrado do terceiro for >= 1000, mostre-o e finalize; d. Caso contrrio, mostre os valores lidos e seus respectivos quadrados. 5. Faa um algoritmo que leia um nmero inteiro e mostre uma mensagem indicando se este nmero par ou mpar, e se positivo ou negativo. 6. A Secretaria de Meio Ambiente que controla o ndice de poluio mantm 3 grupos de indstrias que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0.05 at 0.25. Se o ndice sobe para 0.3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0.4 as industrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas atividades. Faa um algoritmo que leia o ndice de poluio medido e emita a notificao adequada aos diferentes grupos de empresas. 7. Qual a utilidade da estrutura de deciso? 8. Qual a diferena entre a estrutura de deciso simples e a composta? 9. Os comandos (i) e (ii) so equivalentes? Explique sua resposta. (i) A B = C; (ii) se B = C ento A verdadeiro; seno A falso;

58

ENG06842 Programao I

fim-se; 10. Elabore um algoritmo em pseudolinguagem (utilizando os conceitos vistos nesse captulo) que leia um nmero, e se esse for positivo armazene-o em A, se for negativo, em B. No final mostre o resultado. 11. Elabore um algoritmo em pseudolinguagem (utilizando os conceitos vistos nesse captulo) para ler um nmero e verificar se ele par ou mpar. Quando for par armazenar esse valor em P e quando for mpar armazen-lo em I. Exibir P e I no final do processamento. 12. Elabore um algoritmo em pseudolinguagem (utilizando os conceitos vistos nesse captulo) para ler uma varivel numrica N e mostr-la somente se a mesma for maior que 100, caso contrrio mostr-la com o valor zero. 13. Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo que calcule seu peso ideal, utilizando as seguintes frmulas: a. Para homens: (72.7*ALTURA) - 58 b. Para mulheres: (62.1*ALTURA) - 44.7 14. Faa um algoritmo chamado Calculadora, onde o usurio fornece dois valores e o operador (um dentre +, -, * e /), e o programa faz a conta. 15. Elabore dois algoritmos, um utilizando selees compostas e outro utilizando selees mltiplas) que dada a idade de um nadador classifique-o em uma das seguintes categorias: a. Infantil A = 5 a 7 anos b. Infantil B = 8 a 11 anos c. Juvenil A = 12 a 13 anos d. Juvenil B = 14 a 17 anos

59

ENG06842 Programao I

e. Adultos = Maiores de 18 anos 16. Elabore um algoritmo que gera e escreve os nmeros mpares entre 100 e 200. 17. Escreva um programa que determine o grau de obesidade de uma pessoa, sendo fornecido o peso e a altura da pessoa. O grau de obesidade determinado pelo ndice da massa corprea - IMC (Massa = Peso/Altura2) atravs dos seguintes ndices: a. Abaixo de 19.9: b. Entre 20.0 e 24.9: c. Entre 25.0 e 29.9: d. Entre 30.0 e 34.9: e. Entre 35.0 e 39.9: f. 40.0 e acima: 18. 19. Voc est abaixo do peso ideal. Parabns! voc est em seu peso normal! Voc est acima de seu peso (sobrepeso). Obesidade moderada (grau I). Obesidade severa (grau II). Obesidade mrbida (grau III).

Qual a utilidade da estrutura de repetio? Em que consiste o controle de repeties por contador?

20. Em que consiste o controle de repeties por flag? 21. Qual a principal diferena entre o enquanto ... faa e o repita ... at? 22. Em que situaes mais indicado o uso da estrutura para? 23. Em que situaes no podemos utilizar a estrutura para? 24. Construa um algoritmo que leia 500 valores inteiros e positivos e: a. Encontre o maior valor b. Encontre o menor valor c. Calcule a mdia dos nmeros lidos 25. Faa um algoritmo que determine o maior entre N nmeros lidos. A condio de parada a entrada de um valor 0, ou seja, o algoritmo deve ficar calculando o maior at que a entrada seja igual a 0 (ZERO).

60

ENG06842 Programao I

26. Uma rainha requisitou os servios de um monge e disse-lhe que pagaria qualquer preo. O monge, necessitando de alimentos, indagou rainha sobre o pagamento, se poderia ser feito com gros de trigo dispostos em um tabuleiro de xadrez (tem 64 quadros), de tal forma que o primeiro quadro deveria conter apenas um gro e os quadros subseqentes, o dobro do quadro anterior. A rainha achou o trabalho barato e pediu que o servio fosse executado, sem se dar conta de que seria impossvel efetuar o pagamento. Faa um algoritmo para calcular o nmero de gros que o monge esperava receber. 27. Faa um algoritmo que conte de 1 a 100 e a cada mltiplo de 10 emita a mensagem Mltiplo de 10. 28. Faa trs algoritmos que leiam um valor N (inteiro), e calcule o fatorial de N. Um com repetio incondicional ( para), e dois com condicional, do tipo 1 (enquanto ... faa) e 2 (repita ... at). 29. Dado o trecho de programa abaixo: ... leia (N) R 1; I 2; enquanto I <= N-1 faa R R * 2; I I + 1; fim-enquanto; escreva (R); ... Reescreva-o utilizando: a) o comando para. b) o comando repita ... at. 30. Escreva um programa que leia o nmero de andares de um prdio e, a seguir, para cada andar do prdio, leia o nmero de pessoas que

61

ENG06842 Programao I

entraram e saram do elevador. Considere que o elevador est vazio e est subindo, os dados se referem a apenas uma subida do elevador e que o nmero de pessoas dentro do elevador ser sempre maior ou igual a zero. Se o nmero de pessoas, aps a entrada e sada, for maior que 15, deve ser mostrada a mensagem Excesso de passageiros. Devem sair X, sendo X o nmero de pessoas que devem sair do elevador, de modo que seja obedecido o limite de 15 passageiros. Aps a entrada e sada no ltimo andar, o programa deve mostrar quantas pessoas permaneceram no elevador para descer. 31. O Botafogo deseja aumentar o salrio de seus 22 jogadores. O reajuste deve seguir as seguintes regras: SALRIO ATUAL (R$) 0,00 a 1.000,00 1.000,01 a 5.000,00 acima de 5.000,00 Escreva um algoritmo que: leia o nome e o salrio atual de cada jogador; exiba o nome, o salrio atual e o salrio reajustado de cada jogador; exiba o total da folha de salrios do clube, antes do reajuste. exiba o total da folha de salrios do clube, aps o reajuste. exiba o percentual de reajuste sobre o total da folha de salrios. 20% 10% 0% AUMENTO

62

ENG06842 Programao I

6. Tcnicas de verificao de algoritmos Um tipo de teste de algoritmo, denominado Teste de Mesa (ou Teste Exaustivo) pode ser feito atravs de uma simulao do mesmo, aonde so dados valores para os dados de entrada e vai-se preenchendo uma tabela aonde so colocadas todas as variveis e constantes do algoritmo. Segue-se o fluxo de execuo como se estivesse executando o algoritmo em um computador imaginrio. A cada comando de atribuio ou clculo de expresso o valor das variveis deve ser atualizado. Ao final do teste pode-se ter as seguintes situaes: o resultado esperado foi alcanado; ou foram detectados erros nos comandos; ou foram detectados erros no fluxo de execuo - erro nas estruturas de controle. Procure fazer testes relevantes como, por exemplo, aqueles que verificam casos extremos e casos de excees. Com o teste possvel identificar em que ponto o algoritmo est falhando e fazer a correo. Algoritmos errados podem gerar resultados errados ao serem executados por um computador ou mesmo no gerar nada, se o computador detectar erros graves na seqncia de operaes. Exemplo: Imagine o algoritmo abaixo para calcular a mdia de um aluno. algoritmo CALCULA_MEDIA; const NUM_NOT = 4; var P1, P2, P3, P4, MEDIA: real; incio leia (P1); leia (P2); leia (P3); leia (P4); MDIA (P1 + P2 + P3 + p4) / NUM_NOT;

63

ENG06842 Programao I

escreva (MEDIA); se MEDIA 7,0 ento escreva (APROVADO); seno escreva (REPROVADO); fim-se; fim. O teste de mesa desse algoritmo dado da seguinte maneira: Pass o 0 1 2 3 4 5 NUM_AL U 4 4 4 4 4 4 MEDIA 7.75 P1 9.6 9.6 9.6 9.6 9.6 P2 5.7 5.7 5.7 5.7 P3 6.8 6.8 6.8 P4 8.9 8.9

Inicialmente, os valores das variveis so indefinidos, ou seja, no podemos afirmar quais os valores armazenados dentro dessas variveis. Por conveno, diz-se que os valores dessas variveis so lixos. Na tabela verdade acima, nota-se que inicialmente, no passo 0, o valor da constante j definido, porm os valores das variveis so lixos. No passo 1 do algoritmo, a varivel P1 lida e as demais continuam com lixo. E assim sucessivamente. No final da execuo do algoritmo, podemos ver claramente os valores armazenados em cada varivel, e o valor da constante, que devido a sua definio, no alterado em momento algum.

64

ENG06842 Programao I

6.1. Exerccios

1. Dado o algoritmo abaixo, faa o teste de mesa para n = 0, 1 e 3. algoritmo fatorial; var n, fat, cont: inteiro; incio leia (n) fat 1; para cont 2 at n faa fat fat * cont; fim-para; escreva (o fatorial de , n , , fat) fim. 2. Teste o algoritmo abaixo. Faa um Teste de Mesa, usando a tabela ao lado do algoritmo. Lembre-se de testar os casos crticos (casos extremos e casos de excees)! var X, Y, N: inteiro; incio leia (N,X) Y 1; enquanto X > 0 faa Y Y * N; X X 1; fim-enquanto; escreva (Y); fim. X Y N X>0 { inicializao de fat } { acum a varivel de controle }

3. Elabore um algoritmo que verifique se um nmero positivo lido primo ou no. Faa um teste de mesa do algoritmo. 65

ENG06842 Programao I

4. O que est incorreto no trecho de algoritmo abaixo? se A > B Maior1 A; Maior2 B seno Maior1 B; Maior2 A; fim-se. 5. Qual o valor final das variveis A, B e C mostradas nos algoritmos abaixo: var A: inteiro; incio A 1; enquanto A < 100 faa A A; fim-enquanto; escreva (A); fim. var B: inteiro; incio B 1; enquanto B > 100 faa B B; fim-enquanto; escreva (B); fim. 6. Observe o trecho de algoritmo abaixo, considerando L1, L2 e L3 como variveis booleanas. ... se L1 ento escreva ('A'); seno se L2 ento se L3 ento escreva ('B'); 66 var C: inteiro; incio C 1; repita C C; at C < 100; escreva (C); fim.

ENG06842 Programao I

seno escreva ('C'); escreva ('D'); fim-se; seno escreva ('E'); fim-se; fim-se; ... Agora, responda as seguintes questes: a) Se forem lidos V, V e V, o que ser escrito pelo algoritmo? b) Se forem lidos F, V e V, o que ser escrito pelo algoritmo? c) Se forem lidos F, V e F, o que ser escrito pelo algoritmo? d) Que valores deveriam ser lidos para que fosse escrito apenas "E"? 7. Faa o acompanhamento da execuo do trecho de algoritmo abaixo e preencha a tabela. Sada o resultado mostrado pelo algoritmo. ... N 0; L 1; enquanto N <> 6 faa L L * (-1); N N + 1; se L > 0 ento escreva (N); fim-se; fim-enquanto; ... 8. Faa o teste de mesa para o algoritmo apresentado e para os algoritmos resposta da questo 29 do captulo anterior. N L Sada

67

ENG06842 Programao I

9. Faa o teste de mesa para o algoritmo resposta da questo 30 do captulo anterior. Considere o nmero de andares igual a 3, e o nmero de pessoas que entraram igual a 5, 6 e 7 para o 1, 2 e 3 andares respectivamente, e que saram igual a 3, 2 e 4.

68

ENG06842 Programao I

Referncias [1] COLLINS, W. J. Programao estruturada com estudos de casos em Pascal. McGraw-Hill. (1988) So Paulo. 1988. 712p. [2] FARRER, H. et al. Algoritmos estruturados. Livros Tcnicos e Cientficos. 3a ed. Rio de Janeiro. 1999. [3] FARRER, H. et al. Pascal estruturado. Livros Tcnicos e Cientficos. 3a ed. Rio de Janeiro. 1999. 278p. [4] FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lgica de programao: a construo de algoritmos e estruturas de dados. Pearson Education do Brasil. 2a ed. So Paulo. 2000. [5] GUIMARES, A. M.; LAGES, N. A. C. Algoritmos e Estruturas de Dados. Rio de Janeiro, LTC, 1994. [6] MANZANO, J. A. N. G. Algoritmos: lgica para desenvolvimento de programao. Erica. 10a ed. So Paulo. 2000.

69

Anda mungkin juga menyukai