Você está na página 1de 99

IBTA 1979

BD / RC / DW / SI Lgica de Programao Semestre I

NDICE

1 bimestre

LISTA DE FIGURAS...............................................................................................................3 CAPTULO 1 CONCEITOS BSICOS.................................................................................4 1.1 LGICA...............................................................................................................................4 Definio de lgica...............................................................................................................4 Lgica do dia-a-dia..............................................................................................................4 Lgica de programao.......................................................................................................5 1.2 PROCESSAMENTO DE DADOS....................................................................................................5 1.3 ALGORITMO..........................................................................................................................5 Definio..............................................................................................................................6 Mtodo para o desenvolvimento de um algoritmo..............................................................6 Tipos de algoritmo...............................................................................................................6 Pseudocdigo Estrutura ..................................................................................................8 Teste de mesa.....................................................................................................................8 Comentrios em pseudocdigo...........................................................................................8 1.4 PROGRAMA..........................................................................................................................9 1.5 JAVA LINGUAGEM DE PROGRAMAO.........................................................................................9 Definio..............................................................................................................................9 Princpios bsicos de um ambiente java tpico...................................................................9 Plataforma java..................................................................................................................10 Instalando o ambiente java................................................................................................10 Comentrios em java.........................................................................................................11 O mtodo main...................................................................................................................11 1.6 EXEMPLO...........................................................................................................................11 1.7 EXERCCIOS DE LGICA..........................................................................................................11 CAPTULO 2 COMO CONSTRUIR UM ALGORITMO.......................................................14 2.1 EXEMPLO DE COMO FAZER UM CAF..........................................................................................14 Descrio Narrativa Seqencial.......................................................................................14 Descrio Narrativa de Seleo.......................................................................................14 Descrio Narrativa de Repetio sem a estrutura de repetio....................................15 Descrio Narrativa de Repetio usando a estrutura de repetio...............................15 2.2 OUTRO EXEMPLO DE CONSTRUO DE ALGORITMO ENVOLVENDO LGICA.............................................15 2.3 EXERCCIOS DE CONSTRUO DE ALGORITMO ENVOLVENDO LGICA....................................................16 CAPTULO 3 CONSTANTES, VARIVEIS E TIPOS DE DADOS.....................................17 3.1 TIPOS DE DADOS .................................................................................................................17 Pseudocdigo ...................................................................................................................17 Java....................................................................................................................................17 3.2 CONSTANTES ....................................................................................................................18 Definio............................................................................................................................18 Pseudocdigo....................................................................................................................19 Java....................................................................................................................................19 3.3 VARIVEIS .........................................................................................................................19 Definio............................................................................................................................19 Pseudocdigo....................................................................................................................20 Java....................................................................................................................................20 3.4 IDENTIFICADORES ................................................................................................................21 Definio............................................................................................................................21 Formato..............................................................................................................................21 3.5 CONVERSES ENTRE TIPOS EM JAVA.........................................................................................22 Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 1

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

3.6 EXEMPLOS COM CONSTANTES, VARIVEIS E IDENTIFICADORES EM PSEUDOCDIGO..................................22 3.7 EXEMPLOS COM CONSTANTES, VARIVEIS E IDENTIFICADORES EM JAVA...............................................23 3.8 EXERCCIOS COM CONSTANTES, VARIVEIS E IDENTIFICADORES.........................................................23 CAPTULO 4 EXPRESSES ARITMTICAS E LGICAS...............................................24 4.1 OPERADORES ARITMTICOS ....................................................................................................24 Pseudocdigo....................................................................................................................24 Java ...................................................................................................................................24 Prioridades.........................................................................................................................25 Operadores unrios...........................................................................................................25 4.2 OPERADORES RELACIONAIS ....................................................................................................26 Pseudocdigo....................................................................................................................26 Java....................................................................................................................................26 Prioridades.........................................................................................................................26 4.3 OPERADORES LGICOS .........................................................................................................27 Pseudocdigo....................................................................................................................27 Tabela Verdade.................................................................................................................27 Java....................................................................................................................................27 Prioridades.........................................................................................................................28 4.4 PRIORIDADES ENTRE OPERADORES...........................................................................................28 4.5 EXEMPLO COM OPERADORES...................................................................................................28 4.6 EXERCCIOS COM OPERADORES................................................................................................29 CAPTULO 5 ESTRUTURA SEQENCIAL.......................................................................31 5.2 OPERADOR DE ATRIBUIO () E COMANDOS DE ATRIBUIO.........................................................31 Pseudocdigo....................................................................................................................31 Java....................................................................................................................................31 5.3 COMANDOS DE ENTRADA E SADA.............................................................................................31 Pseudocdigo comandos de entrada.............................................................................32 Java comandos de entrada............................................................................................32 Pseudocdigo comandos de sada................................................................................34 Java comandos de sada................................................................................................35 5.4 BLOCOS ...........................................................................................................................36 Pseudocdigo....................................................................................................................36 Java....................................................................................................................................37 5.5 ESTRUTURA SEQENCIAL .......................................................................................................37 Pseudocdigo....................................................................................................................37 Java....................................................................................................................................38 5.6 FUNES DE TRATAMENTO DE CARACTERES EM JAVA....................................................................39 5.7 EXEMPLOS DE ESTRUTURA SEQENCIAL EM PSEUDOCDIGO.............................................................40 5.8 EXEMPLOS DE ESTRUTURA SEQENCIAL EM JAVA..........................................................................41 5.9 EXERCCIOS DE ALGORITMOS SEQENCIAIS..................................................................................42 CAPTULO 6 ESTRUTURA DE DECISO........................................................................45 6.1 ESTRUTURA DE DECISO SIMPLES (SE/ENTO)............................................................................45 Pseudocdigo....................................................................................................................45 Java....................................................................................................................................46 6.2 ESTRUTURA DE DECISO COMPOSTA (SE/ENTO/SENO)...............................................................46 Pseudocdigo....................................................................................................................46 Java....................................................................................................................................47 6.3 ESTRUTURA DE DECISO ENCADEADA (SE/ ENTO ... / SENO ...)...................................................48 Pseudocdigo....................................................................................................................48 Java....................................................................................................................................49 6.4 EXEMPLOS DE ESTRUTURA DE DECISO SIMPLES, COMPOSTA E ENCADEADA EM PSEUDOCDIGO.................51 6.5 EXEMPLOS DE ESTRUTURA DE DECISO SIMPLES, COMPOSTA E ENCADEADA EM JAVA .............................54
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

6.6 EXERCCIOS DE ESTRUTURA DE DECISO SIMPLES, COMPOSTA E ENCADEADA........................................57 CAPTULO 7 ESTRUTURA DE MLTIPLA ESCOLHA....................................................61 7.1 ESTRUTURA DE MLTIPLA ESCOLHA SIMPLES.............................................................................61 Pseudocdigo....................................................................................................................61 Java....................................................................................................................................63 7.2 ESTRUTURA DE MLTIPLA ESCOLHA ENCADEADA.........................................................................66 Pseudocdigo....................................................................................................................66 Java....................................................................................................................................67 7.3 EXEMPLOS DE ESTRUTURA DE MLTIPLA ESCOLHA EM PSEUDOCDIGO.............................................70 7.4 EXEMPLOS DE ESTRUTURA DE MLTIPLA ESCOLHA EM JAVA .........................................................72 7.5 EXERCCIOS DE ESTRUTURA DE MLTIPLA ESCOLHA SIMPLES E ENCADEADA......................................75 CAPTULO 8 ESTRUTURA DE REPETIO...................................................................81 8.1 ESTRUTURA DE REPETIO ENQUANTO.....................................................................................81 Pseudocdigo....................................................................................................................81 Java....................................................................................................................................82 Encadeamento...................................................................................................................83 8.2 FAA/ENQUANTO.................................................................................................................85 Pseudocdigo....................................................................................................................85 Java....................................................................................................................................86 Encadeamento...................................................................................................................86 8.3 PARA................................................................................................................................88 Pseudocdigo....................................................................................................................88 Java....................................................................................................................................89 Encadeamento...................................................................................................................90 8.4 EXEMPLO DE ESTRUTURA DE REPETIO ENQUANTO, FAA/EQTO. E PARA EM PSEUDOCDIGO .............91 8.5 EXEMPLO DE ESTRUTURA DE REPETIO ENQUANTO, FAA/ENQUANTO E PARA EM JAVA ....................94 8.6 EXERCCIOS DE ESTRUTURA DE REPETIO ENQUANTO, FAA/ENQUANTO E PARA..............................97

Lista de Figuras
FIGURA 1 PROCESSAMENTO DE DADOS.......................................................................5 FIGURA 2 FLUXOGRAMA DA SOMA DE DOIS NMEROS.............................................7 FIGURA 3 FLUXOGRAMA..................................................................................................7 FIGURA 4 O TIPO LGICO EM JAVA..............................................................................17 FIGURA 5 O TIPO REAL EM JAVA..................................................................................18 FIGURA 6 O TIPO CARACTER EM JAVA........................................................................18 FIGURA 7 O TIPO INTEIRO EM JAVA.............................................................................18 FIGURA 8 O TIPO STRING EM JAVA..............................................................................18 FIGURA 9 OPERADORES ARITMTICOS BSICOS......................................................24 FIGURA 10 OPERADORES ARITMTICOS AUXILIARES..............................................24 FIGURA 11 OPERADORES ARITMTICOS AUXILIARES EM JAVA.............................25 FIGURA 12 PRIORIDADES ENTRE OPERADORES ARITMTICOS..............................25
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

FIGURA 13 OPERADORES UNRIOS EM JAVA............................................................25 FIGURA 14 OPERADORES RELACIONAIS.....................................................................26 FIGURA 15 OPERADORES RELACIONAIS EM JAVA....................................................26 FIGURA 16 OPERADORES LGICOS.............................................................................27 FIGURA 17 TABELA VERDADE.......................................................................................27 FIGURA 18 OPERADORES LGICOS EM JAVA............................................................27 FIGURA 19 PRIORIDADES ENTRE OPERADORES LGICOS......................................28 FIGURA 20 PRIORIDADES ENTRE OPERADORES LGICOS......................................28

Captulo 1 Conceitos Bsicos


1.1 Lgica Definio de lgica Segundo o dicionrio Aurlio1, Lgica : "Filos. Na tradio clssica, aristotlico-tomista, conjunto de estudos que visam a determinar os processos intelectuais que so condio geral do conhecimento verdadeiro." "Filos. Conjunto de estudos tendentes a expressar em linguagem matemtica as estruturas e operaes do pensamento, deduzindo-as de nmeros reduzidos de axiomas, com a inteno de criar uma linguagem rigorosa, adequada ao pensamento cientfico tal como o concebe a tradio emprico-positivista; lgica matemtica, lgica simblica." "Inform. Forma pela qual as assertivas, pressupostos e instrues so organizados em um algoritmo para implementao de um programa de computador." Lgica do dia-a-dia Independentemente de qualquer definio terica, basta observarmos nosso dia-a-dia para verificarmos que a lgica est presente em quase tudo o que fazemos ou pensamos. Por exemplo, ao pegarmos uma chave que est dentro de uma gaveta fechada, precisamos antes abrir a gaveta para conseguir pegar a chave. Isso lgica! Se estamos conversando com algum, precisamos organizar as palavras numa certa ordem para dizer uma frase que faa sentido, seno a outra pessoa no entender nada do que voc est falando. Isso lgica! E se voc quer caminhar, voc sabe que precisa colocar um p na frente do outro numa seqncia pois, se no o fizer, ficar parado no mesmo lugar. Isso lgica! Enfim, muito do que fazemos e/ou pensamos, na nossa vida, est relacionado lgica.
1

Ferreira, Aurlio Buarque de Holanda. Novo Aurlio sculo XXI: O Dicionrio da Lngua Portuguesa. 3a edio. Nova Fronteira. Rio de Janeiro. 1999.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Lgica de programao A lgica de programao nada mais do que a lgica usada na programao de computadores, que segue as leis do pensamento e os processos do raciocnio, cujo objetivo desenvolver tcnicas que ajudem as pessoas a realizar uma tarefa com o mnimo de esforo. Por exemplo, com o uso da lgica e da computao, hoje temos acesso ao correio eletrnico, mais conhecido por email, em que uma mensagem escrita pode chegar quase que instantaneamente ao seu destino, em qualquer lugar do mundo. Imagine como era antes do correio eletrnico? Quanto tempo demorava uma carta para chegar ao Japo, saindo do Brasil? E antes do avio? Quando tempo esta carta demorava para chegar de navio? E antes do navio? Havia alguma possibilidade dessa carta chegar ao seu destino? 1.2 Processamento de Dados Na informtica, o tratamento de uma informao refere-se entrada de dados, ao processamento desses dados de entrada e sada dos resultados desse processamento, numa seqncia como mostra a figura a seguir:

Entrada

Processamento

Sada

Figura 1 Processamento de dados

A entrada de dados, que pode ser uma coleta de dados, uma depurao de dados ou um armazenamento de dados, recebe a informao necessria que ser tratada no processamento de dados. Essa entrada pode ser feita atravs de dispositivos de entrada, por exemplo, teclado, mouse, etc. O processamento de dados, que pode ser aritmtico ou lgico, trata a informao recebida na entrada de dados, gerando resultados. Esse processamento efetuado dentro do computador, na unidade lgica e aritmtica conhecida como ULA que fica dentro da CPU (Unidade Central de Processamento), o crebro do computador. A sada de dados, que pode ser uma coleta de resultados ou uma distribuio de resultados, a entrega dos dados processados para o usurio. Essa sada pode ser feita atravs de dispositivos de sada, por exemplo, monitor, impressora, etc. Exemplificando, considere um problema cujo objetivo encontrar a soluo da soma de dois nmeros. A partir dessa informao, podemos verificar que nossa entrada de dados so os dois nmeros dos quais queremos encontrar a soma. Continuando, percebemos que nosso processamento realizar o clculo aritmtico da soma dos dois nmeros fornecidos na entrada de dados. E, finalizando, temos como resultado desse processamento a soma realizada desses dois nmeros. 1.3 Algoritmo

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Definio Podemos definir algoritmo como um processo que rene um conjunto de aes que so necessrias para tratar os dados de entrada e transform-los em resultados para um determinado objetivo. Nesse sentido, podemos considerar que uma receita de bolo um algoritmo, pois a partir dos ingredientes (dados de entrada), realizamos vrias aes como bater os ingredientes numa batedeira, colocar numa assadeira e depois assar por determinado tempo (processamento) para, no final, termos um bolo bem-feito (resultado de sada). De qualquer forma, trataremos a construo de algoritmos lgicos computacionais, em que os dados de entrada, o processamento e os resultados de sada so dados virtuais no formato que o computador entende. Mtodo para o desenvolvimento de um algoritmo Para a construo de um bom algoritmo, devemos seguir os seguintes passos: a. ler e compreender o problema para o qual ser construdo um algoritmo; b. determinar quais sero a entrada de dados do seu algoritmo; c. determinar quais as aes, lgicas e/ou aritmticas, que devero ser realizadas no seu algoritmo, bem como, as restries, se houver, para cada uma dessas aes; d. determinar qual ser a sada de resultados do seu algoritmo; e. construir o algoritmo em um dos tipos de algoritmo descritos na prxima seo; f. testar o algoritmo usando o teste de mesa descrito no final deste captulo. Tipos de algoritmo As formas mais importantes para a construo de algoritmos so: a descrio narrativa, o fluxograma e o pseudocdigo (ou portugus estruturado ou portugol). Para exemplificar cada um dos tipos de algoritmo, vamos considerar o seguinte problema: a soma de dois nmeros. Descrio narrativa. A descrio narrativa nada mais do que descrever, utilizando uma linguagem natural (no nosso caso, a lngua portuguesa), as aes a serem realizadas no tratamento dos dados de entrada para os resultados de sada na resoluo do problema proposto. A vantagem desse tipo de algoritmo que a linguagem natural no oferece o esforo do aprendizado, pois ela j bem conhecida. A desvantagem que a linguagem natural pode ter interpretaes diferentes dependendo do ponto de vista de cada pessoa, podendo dificultar a transcrio para o programa. Para o nosso exemplo, a descrio narrativa ficaria da seguinte forma: iniciar o algoritmo; receber dois nmeros; somar esses dois nmeros; apresentar a soma dos dois nmeros; finalizar o algoritmo.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Fluxograma. O fluxograma a forma de descrever as aes a serem realizadas no tratamento dos dados de entrada para os resultados de sada usando uma representao simblica preestabelecida, por exemplo, como os smbolos na Figura 3. A vantagem desse tipo de algoritmo o entendimento. Qualquer representao grfica sempre mais bem entendida do que uma representao por escrito. A desvantagem desse tipo de algoritmo a necessidade do aprendizado de cada smbolo bem como seu significado. Alm disso, um algoritmo descrito por um fluxograma no apresenta detalhes, podendo dificultar a transcrio para o programa. Para o nosso exemplo, o fluxograma ficaria da seguinte forma:

incio

N1, N2

S = N1 + N2

fim

Figura 2 Fluxograma da soma de dois nmeros

Smbolo utilizado para determinar o incio e o trmino do algoritmo. Smbolo utilizado para determinar o sentido do fluxo de dados do algoritmo e utilizado para conectar os smbolos existentes. Smbolo utilizado para determinar uma ao ou comando que pode ser um clculo ou uma atribuio de valores. Smbolo utilizado para determinar a sada de dados do algoritmo. Essa entrada de dados pode ser via dispositivos de entrada. Smbolo utilizado para determinar a sada de dados do algoritmo. Essa sada de dados pode ser via monitor. Smbolo utilizado para determinar uma deciso que indicar qual caminho ser seguido no algoritmo. Smbolo utilizado para determinar uma conexo entre partes de um mesmo algoritmo.
Figura 3 Fluxograma

Pseudocdigo. O pseudocdigo a forma de descrever as aes para a resoluo de um problema proposto por meio de regras preestabelecidas. A vantagem desse tipo de algoritmo a possibilidade da transcrio quase que imediata desse algoritmo para uma linguagem de programao, bastando saber a sintaxe e a semntica dessa linguagem de programao. A desvantagem deste tipo de algoritmo a
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

necessidade do aprendizado de cada uma das regras do pseudocdigo bem como seu significado. A seguir, apresentaremos cada uma dessas regras do pseudocdigo para o melhor aprendizado. Para o nosso exemplo, o pseudocdigo ficaria da seguinte forma: Algoritmo Soma incio_algoritmo declarar N1, N2, S numrico_inteiro; ler (N1, N2); S N1 + N2; mostrar (S); fim_algoritmo.

Pseudocdigo Estrutura O pseudocdigo o tipo de algoritmo que exploraremos a partir de agora. Como vimos no exemplo anterior, o algoritmo escrito em pseudocdigo possui uma estrutura, ou seja, um nome, um incio, a declarao de variveis e constantes, a entrada de dados, o processamento desses dados, a sada de resultados e o fim. Todo e qualquer algoritmo escrito em pseudocdigo precisa dessa estrutura para que o tratamento da informao seja apresentado da forma mais compreensvel possvel. Teste de mesa Como vimos na seo de mtodo para o desenvolvimento de um algoritmo, o ltimo item refere-se a testar o algoritmo construdo. Para testar um algoritmo, utilizamos o teste de mesa que verifica se o algoritmo realiza exatamente o que se espera dele. Para realizar o teste de mesa em um algoritmo muito simples, basta seguir, passo-apasso, cada comando do algoritmo como se fosse o computador. Assim, no final do teste de mesa, voc pode concluir se o algoritmo est correto ou no. Se no estiver, basta corrigir o algoritmo, refazer o teste de mesa e repetir esse processo at que voc certifique-se de que o algoritmo esteja realmente correto. Mesmo que voc suponha que seu algoritmo esteja correto, voc deve fazer o teste de mesa, pois erros imperceptveis podem ser detectados. No se corre o risco de ter um algoritmo que no retorna sempre o resultado esperado. Comentrios em pseudocdigo Os comentrios em pseudocdigos so simbolizados com duas barras (//) seguidas do comentrio. Para o nosso exemplo, os comentrios podem ser colocados da seguinte forma: // nome do algoritmo Algoritmo Soma incio_algoritmo // declarao das variveis declarar N1, N2, S numrico_inteiro;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

// entrada de dados leitura de dois nmeros inteiros ler (N1, N2); // processamento de dados clculo da soma dos dois nmeros S N1 + N2; // sada de resultados resultado da soma dos dois nmeros mostrar (S); fim_algoritmo. 1.4 Programa Um programa de computador a codificao de um algoritmo numa linguagem de programao especfica, por exemplo, Java. Podemos distingir dois tipos de linguagens: de alto nvel e de baixo nvel. As linguagens de baixo nvel so as linguagens de mquina, aquelas que o computador entende. As linguagens de alto nvel so as linguagens de programao que servem de intermedirias entre a linguagem natural e a linguagem de mquina. Sempre que codificamos um algoritmo numa linguagem de programao, esse programa precisa ser "traduzido" para a linguagem entendida pela mquina. A esse processo chamamos interpretao ou compilao. 1.5 Java linguagem de programao Definio No fim da dcada de 80, um pequeno grupo de trabalho da Sun, liderado por James Gosling, pesquisava um projeto de programao cujo principal objetivo era facilitar a interface de programao entre aparelhos eletrnicos e seus usurios, criando vrios mecanismos de programao semelhantes em aparelhos diferentes como microondas, batedeira, aparelho de som, secretria eletrnica, entre outros. Em 1990, a equipe direcionou a pesquisa para a criao de uma nova linguagem de programao, inicialmente chamada oak com uma arquitetura neutra e capaz de comportarse adequadamente em plataformas de trabalho diferentes. Em 1993, com o surgimento da WWW (World Wide Web), a Sun percebeu que a nova linguagem desenvolvida pelo grupo liderado por James Gosling era ideal para a programao na Internet por ser uma arquitetura neutra e criada para vrias plataformas. Foi assim que surgiu a linguagem de programao Java, ou simplesmente Java, uma linguagem de programao atualmente bastante aceita pela comunidade de desenvolvedores de software e Internet. Com o Java, usurios da Internet e da WWW foram beneficiados pelo acesso seguro e os desenvolvedores de software, pela portabilidade. As principais caractersticas do Java so: simples e familiar, orientada a objeto, distribuda, interpretada, robusta, segura, arquitetura neutra e porttil, alta performance, multitarefa e dinmica. Princpios bsicos de um ambiente java tpico

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Os sistemas Java normalmente possuem um ambiente, uma linguagem, uma interface de programas aplicativos Java e vrias bibliotecas de classes. Alm disso, os programas Java passam por cinco fases antes de serem executados. Na primeira fase, devemos editar o arquivo fonte. Podemos fazer isso utilizando qualquer editor de textos como o bloco de notas do Windows ou usando qualquer editor de Java que vem juntamente dos ambientes de desenvolvimento integrado (Integrated Development Environments - IDE). No arquivo fonte, o cdigo java deve ser escrito de acordo com sua sintaxe e semntica, alm disso, deve ter pelo menos uma classe principal que contenha o mtodo principal, que o void main(). Vale lembrar que todo nome de arquivo fonte deve terminar com a extenso .java. Por exemplo, teste.java. Na segunda fase, devemos utilizar o comando javac para compilar o programa. Com esse comando, o compilador Java traduz o programa Java para bytecodes a linguagem entendida pelo interpretador Java. Por exemplo, para compilar um programa chamado teste.java numa janela do DOS, devemos digitar, a seguir do prompt do DOS, o seguinte comando: javac teste.java. Se a compilao finalizar sem erros, um arquivo chamado teste.class ser gerado. Este o arquivo contendo os bytecodes que sero interpretados durante a fase de execuo. Os bytecodes podem ser considerados instrues de mquinas para o JVM (Java Virtual Machine). Na terceira fase, o programa deve ser colocado na memria primria antes de ser executado. Isso feito pelo carregador de classe que copia o arquivo .class para a memria. Na quarta fase, os bytecodes passam pelo verificador de bytecodes que verifica se o programa Java atende aos padres de segurana de Java. Na quinta fase, o programa interpretado bytecode por bytecode, sob controle da CPU, realizando assim cada ao a ser executada pelo programa. Para o arquivo teste.java compilado anteriormente, foi criado o arquivo teste.class, teste por ser o nome da classe principal do programa. Para executar esse arquivo teste.class, devemos digitar o seguinte comando no prompt do DOS: java teste. A partir da, teremos o resultado do programa desenvolvido. Plataforma java Por plataforma entendemos o conjunto de hardware e software no qual um programa executado. Alguns exemplos de plataformas conhecidas so: Windows, Linux, MacOs, etc. Java tambm uma plataforma, no entanto, sem hardware. A plataforma Java tem dois componentes: JVM Java Virtual Machine e Java API Java Application Programming Interface. O Java API uma coleo de componentes de software prontos que incluem desde estruturas para manipulao de arquivos at a construo de aplicativos grficos. O Java API organizado como um grupo de bibliotecas com classes e interfaces. Essas bibliotecas so chamadas de pacotes. Instalando o ambiente java Para o desenvolvimento de aplicativos utilizando o Java, necessria a instalao do compilador Java, do Java API e do JVM. A instalao do ambiente segue o mesmo esquema da instalao de qualquer produto para Windows. Devemos baixar a verso mais apropriada e fazer a instalao. Informaes podem ser adquiridas nos seguintes sites: java.sun.com, java.net, java.com, entre outros. Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 10

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Comentrios em java O uso de comentrios em programas muito importante, seja na linguagem Java ou em qualquer outra linguagem de programao. Os comentrios permitem explicar o contedo do cdigo, para que serve, alm de facilitar a manuteno posterior desse cdigo. Em Java, podemos comentar o programa de duas formas: usando duas barras (//), onde todo o contedo direita estar comentado; ou barra asterisco, asterisco barra (/* */), onde todo o contedo entre os dois asteriscos estar comentado. Por exemplo: // Isso um comentrio usando duas barras. /* Isso tambm um comentrio. Mas, usando barra asterisco e asterisco barra. */

O mtodo main No cdigo fonte de qualquer programa Java, temos uma classe principal. Dentro dessa classe principal, devemos ter o mtodo main que o mtodo principal de qualquer programa Java e sem esse mtodo o programa no funciona. Isso por que pelo mtodo main que o programa inicia sua execuo. A sintaxe do mtodo main a seguinte: public static void main(String args []) onde: public indica que o mtodo main pode ser chamado por outro objeto, static indica que o mtodo main um mtodo de classe e void indica que o mtodo main no retorna nenhum valor. O mtodo main aceita um nico argumento: um vetor de caracteres (do tipo String) que armazena os valores digitados pelo usurio aps o nome do programa. 1.6 Exemplo /* Primeiro programa em Java Este cdigo fonte ser salvo no arquivo primeiro_programa.java Este programa serve para exemplificar um programa Java para os alunos de Lgica de Programao */ public class primeiro_programa { public static void main(String argumentos []) { System.out.print("Primeiro Programa de Lgica de Programao"); System.exit(0); } // fim do mtodo main } // fim da classe principal primeiro_programa 1.7 Exerccios de lgica
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

11

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

1. Trs homens esto em um restaurante. A conta de R$ 30,00, ento cada homem d uma nota de R$ 10,00 para o garom. O garom pega a conta e entrega o pagamento para o gerente que decide dar um desconto de R$ 5,00 na conta. No meio do caminho de volta mesa, o garom desonestamente pega R$ 2,00 dos R$ 5,00 e devolve R$ 1,00 para cada um dos homens mesa. Ento cada homem pagou R$9,00, dando um total de R$ 27,00. O garom ficou com R$ 2,00, os homens pagaram R$ 27,00, ou seja, somando esses dois valores, temos R$ 29,00. O que aconteceu com o outro R$ 1,00? 2. Qual nmero que quando adicionado de 5/4 d o mesmo resultado de quando ele multiplicado por 5/4? 3. Descubra e escreva o prximo nmero da srie abaixo: 18, 46, 94, 63, 52, ? 4. H um nmero de trs dgitos a que, se voc adicionar 7, ele divide exatamente por 7; se voc adicionar 8, ele divide exatamente por 8; se voc adicionar 9, ele divide exatamente por 9. Qual esse nmero? 5. Trs garotos juntos tm trs balas. Joo tem 3 balas a mais do que Jos, mas 5 a menos que Pedro. Quantas balas tem cada um deles? 6. Voc tem exatamente R$ 100,00 para comprar os seguintes alimentos cujos preos so para um quilograma: arroz R$ 0,59, feijo R$ 1,99, batata R$ 2,87 e carne R$ 3,44. Voc deve gastar exatamente os R$ 100,00. Quantos quilos de cada alimento voc deve comprar? 7. Toda soma de cubos consecutivos, comeando de 1, sempre um quadrado perfeito. Por exemplo: 13 + 23 = 9 = 32 13 + 23 + 33 = 36 = 62 13 + 23 + 33 + 43 = 100 = 102 e assim por diante. Entretanto, no problema proposto aqui, comear de 1 no permitido. Voc deve encontrar o menor quadrado perfeito que igual soma de no mnimo quatro cubos perfeitos consecutivos, excluda a unidade. 8. Um certo nmero, maior que 5000, mas menor que 50000, tem as seguintes propriedades: quando dividido por 4, tem um resto igual a 3; quando dividido por 5, tem resto igual a 1; quando dividido por 7, tem resto igual a 2; quando dividido por 11, tem resto igual a 2; e quando dividido por 17, tem resto igual a 12. Qual esse nmero? 9. Todo nmero mpar exceto dois entre 1 e 8999 ou um primo ou a soma de um primo e duas vezes um quadrado, por exemplo: 21 = 19 + 2 * 12 27 = 19 + 2 * 22 35 = 5 + 2 * 52 Quais so as duas excees? 10. Corredores em uma maratona so numerados comeando de 1. Um dos corredores notou que a soma dos nmeros menores que seu prprio nmero era igual soma dos nmeros maiores. Se havia mais do que 100 corredores, mas menos do que 1000, que nmero era do corredor acima e quantos corredores havia na corrida? 11. Em minha casa h muitos gatos: sete no comem peixe; seis no comem fgado; cinco no comem frango; quatro no comem peixe nem fgado; trs no comem peixe nem frango;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

12

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

dois no comem fgado nem frango; um no come fgado, peixe nem frango; nenhum deles come todas as trs comidas. Quantos gatos eu tenho? 12. Encontre a menor seqncia de nmeros primos consecutivos cuja soma seja igual a 106620. 13. Trs casais vivem felizes numa cidade. Com base nas dicas abaixo, tente descobrir o nome de cada marido (Cleber, Lucas, Pedro), a profisso de cada um (Pedreiro, Arquiteto, Escultor) e o nome de suas respectivas esposas (Laura, Priscila, Mariana): a. O pedreiro casado com Mariana. b. Pedro arquiteto. c. Priscila no casada com Pedro. d. Cleber no pedreiro. 14. No ltimo vero, trs grupos acamparam na floresta. Com base nas dicas abaixo, tente descobrir onome do guia de cada acampamento (Heitor, Paulo, Sergio), o tipo de grupo que cada um liderou (crianas, jovens, adultos) e a cor das barracas que cada grupo de campista usou (amarelo, preto, vermelho). a. Paulo foi o guia do grupo que acampou nas barracas de cor preto. b. O animado grupo dos adultos ocupou as barracas de cor vermelho. c. Heitor foi o grupo das crianas.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

13

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 2 Como construir um algoritmo


2.1 Exemplo de como fazer um caf Vamos escrever vrios algoritmos de como fazer um caf utilizando o algoritmo de descrio narrativa. Vamos perceber que, por mais fcil que seja a tarefa, muitas vezes no nos atentamos para os pequenos detalhes da execuo dessa tarefa, mas que podem fazer falta para alcanar o resultado desejado. Vamos ver como fica um algoritmo seqencial para nosso exemplo: Descrio Narrativa Seqencial iniciar algoritmo; pegar bule; colocar coador de plstico sobre o bule; colocar coador de papel sobre o coador de plstico; colocar caf tostado e modo sobre o coador de papel; colocar gua sobre o caf; finalizar algoritmo. Nessa descrio, seguimos uma seqncia de vrios passos, um aps o outro. Isso significa que as aes foram executadas linearmente, da direita para a esquerda e de cima para baixo. Esse algoritmo mostra como qualquer pessoa, naturalmente, faria um caf, sem se importar com qualquer detalhe. Agora, analisando o algoritmo, verificamos que o resultado a ser alcanado bem definido: fazer um caf. No entanto, e se a gua no estivesse fervente? Como sairia o caf? O caf seria feito com a gua fria porque no foi prevista essa condio para o algoritmo. Para resolver esse problema, podemos fazer uma seleo para verificar se a gua est fervente ou no. Assim, temos o seguinte algoritmo de seleo para o nosso exemplo: Descrio Narrativa de Seleo iniciar algoritmo; pegar bule; colocar coador de plstico sobre o bule; colocar coador de papel sobre o coador de plstico; colocar caf tostado e modo sobre o coador de papel; se a gua estiver fervente, ento colocar gua sobre o caf; finalizar algoritmo. Nessa descrio, fazemos uma seleo para a gua, ou seja, verificamos se a gua est fervente. Em caso afirmativo, a gua colocada sobre o caf. Se a seleo for falsa (a gua no estiver fervente), o caf no ser feito. Nesse algoritmo, colocamos uma seleo para verificar qual o caminho que o algoritmo deve seguir. Perceba que, dependendo do resultado da seleo, algumas aes do algoritmo podem ser realizadas ou no. Analisando o algoritmo, percebemos que o caf seria feito somente se a gua estivesse fervente. Como podemos garantir que o resultado do algoritmo, que ter o caf pronto, seja alcanado? Para resolver esse problema, podemos fazer uma repetio para verificar a
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

14

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

condio da gua e quando ela estiver fervente ser colocada sobre o caf. Assim, temos o seguinte algoritmo de repetio para o nosso exemplo: Descrio Narrativa de Repetio sem a estrutura de repetio iniciar algoritmo; pegar bule; colocar coador de plstico sobre o bule; colocar coador de papel sobre o coador de plstico; colocar caf tostado e modo sobre o coador de papel; se a gua no estiver fervente, ento aquecer a gua; se a gua no estiver fervente, ento continuar aquecendo a gua; se a gua no estiver fervente, ento continuar aquecendo a gua; ... continua at quando? colocar gua sobre o caf; finalizar algoritmo. Percebemos que o algoritmo no est terminado, pois falta saber quando a gua estar fervendo para ser colocada sobre o caf. Para simplificarmos nosso algoritmo, podemos reescrev-lo utilizando uma condio de parada para determinar um limite para esse algoritmo: Descrio Narrativa de Repetio usando a estrutura de repetio iniciar algoritmo; pegar bule; colocar coador de plstico sobre o bule; colocar coador de papel sobre o coador de plstico; colocar caf tostado e modo sobre o coador de papel; enquanto a gua no estiver fervente, faa aquecer a gua; colocar gua sobre o caf; finalizar algoritmo. Note que as duas descries narrativas de repetio retornam o mesmo resultado que aquecer a gua at ela ferver e ter o caf pronto. A nica diferena que na segunda descrio utilizamos uma forma mais adequada para descrever um conjunto de aes em repetio. 2.2 Outro exemplo de construo de algoritmo envolvendo lgica Considere a Torre de Hani com trs hastes e trs discos. Uma das hastes serve de suporte para trs discos de tamanhos diferentes de forma que os menores esto sobre os maiores. Desenvolva um algoritmo que mova todos os discos da haste onde se encontram para uma das outras duas hastes da Torre de Hani, seguindo as seguintes regras: Pode-se mover um disco de cada vez para qualquer haste, contanto que um disco maior nunca seja colocado sobre um disco menor.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

15

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Resoluo: Considerando discos 1, 2, 3 e hastes A, B, C, temos o seguinte resultado: mover o disco 1 da haste A para a haste B; mover o disco 2 da haste A para a haste C; mover o disco 1 da haste B para a haste C; mover o disco 3 da haste A para a haste B; mover o disco 1 da haste C para a haste A; mover o disco 2 da haste C para a haste B; mover o disco 1 da haste A para a haste B.

2.3 Exerccios de construo de algoritmo envolvendo lgica Utilizando a descrio narrativa, construa algoritmos para os seguintes exerccios: 1. Um homem com suas trs cargas um lobo, um bode e um mao de alfafa precisa atravessar um rio usando um barco que possui capacidade para atravessar somente o homem e mais uma de suas trs cargas. Considerando que o lobo come o bode e o bode come o mao de alfafa, quais os percursos que o homem deve fazer para atravessar o rio sem perder nenhuma de suas cargas? Desenvolva um algoritmo indicando todos os percursos efetuados pelo homem para atravessar o rio sem perder nenhuma das cargas. 2. A partir do exemplo da Seo 2.2, amplie a soluo apresentada, de maneira a completar a operao descrita, de troca dos discos entre hastes, considerando a existncia de 3 hastes e 4 discos. 3. Trs jesutas e trs canibais precisam atravessar um rio com um barco que possui capacidade para transportar somente duas pessoas. Considerando que em qualquer margem, a quantidade de jesutas no seja menor que a de canibais, quais os percursos que devem ser feitos para os 3 jesutas e os 3 canibais atravessarem o rio? Desenvolva um algoritmo indicando todos os percursos efetuados para todos atravessarem o rio com segurana. 4. Tendo como exemplo os algoritmos desenvolvidos para solucionar o problema de fazer um caf, elabore trs algoritmos que mostrem os passos necessrios para trocar um pneu furado. Considere o seguinte conjunto de situaes, um para cada algoritmo: a) trocar o pneu dianteiro direito; b) verificar se o pneu reserva est em condies de uso; em caso afirmativo, trocar o pneu dianteiro direito; c) verificar se existe algum pneu furado; em caso afirmativo, verificar se o pneu reserva est em condies de uso e, em caso afirmativo, trocar o pneu correto. Para cada algoritmo desenvolvido, introduza novas aes e altere o fluxo do algoritmo de forma compatvel com as situaes apresentadas. 5. Considere uma calculadora comum de quatro operaes. Considere que as teclas de diviso e multiplicao esto quebradas. Desenvolva trs algoritmos que resolvam expresses matemticas de multiplicao, diviso e exponenciao usando apenas as operaes de adio e subtrao.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

16

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 3 Constantes, variveis e tipos de dados


A partir deste captulo, estaremos preocupados em conhecer as partes necessrias para se escrever um algoritmo completo em pseudocdigo. Para isso, neste captulo, vamos estudar como as constantes, os tipos de dados e as variveis so utilizados em pseudocdigo. 3.1 Tipos de dados Os tipos de dados so as caractersticas comuns dos dados a serem manipulados. Podemos considerar quatro classificaes para os tipos de dados: inteiro, real, caracter e lgico. O tipo inteiro caracteriza qualquer dado numrico que pertena ao conjunto dos nmeros inteiros. Por exemplo: -5, 0, 32. O tipo inteiro quando armazenado no computador ocupa 2 bytes, o que corresponde a 65536 possibilidades, ou seja, de 32767 at 32767. O tipo real caracteriza qualquer dado numrico que pertena ao conjunto dos nmeros reais. Por exemplo: -9.0, 0, 29.45. O tipo real quando armazenado no computador ocupa 4 bytes, o que corresponde a 232 possibilidades, podendo ter de 6 a 11 dgitos significativos com sinal. O tipo caracter caracteriza qualquer dado que pertena a um conjunto de caracteres alfanumricos e so simbolizados por entre aspas duplas (""). Por exemplo: "15", "Eu", "Pare!", "?%@". O tipo caracter quando armazenado no computador ocupa 1 byte para cada caracter. O tipo lgico caracteriza qualquer dado que possa assumir somente duas situaes: verdadeiro ou falso. Por exemplo: feminino ou masculino, loja aberta ou fechada, brasileiro ou estrangeiro. O tipo lgico quando armazenado no computador ocupa 1 byte, pois possui apenas duas formas de representao. Pseudocdigo No pseudocdigo, h nomes especiais para representar cada tipo de dados, como se segue: Java No Java tambm h nomes especiais, chamados palavras reservadas, para representar cada tipo de dado, como segue: para o tipo lgico, temos: boolean tipo lgico que s pode assumir true ou false intervalo compreendido: ocupa 1 bit para o tipo inteiro, usaremos numrico_inteiro; para o tipo real, usaremos numrico_real; para o tipo caracter, usaremos alfanumrico; para o tipo lgico usaremos lgico.

Figura 4 O tipo lgico em Java


Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

17

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

para o tipo real, temos dois tipos diferentes, dependendo da capacidade de armazenamento: float double nmeros reais de 32 bits intervalo compreendido: 3.4E-038 ... 3.4E+038 nmeros reais com preciso dupla intervalo compreendido: 1.7E-308 ... 1.7E-308

Figura 5 O tipo real em Java

para o tipo caracter que representa um nico caracter, temos: char caracter que ocupa 16 bits (sem sinal) intervalo compreendido: 0 ... 65536 inclui unicode (alfabetos latinos, grego, cirlico, etc.)

Figura 6 O tipo caracter em Java

para o tipo inteiro, temos quatro tipos diferentes, dependendo da capacidade de armazenamento byte short int long nmeros inteiros de 8 bits intervalo compreendido: -128 ... 127 nmeros inteiros de 16 bits intervalo compreendido: -32.768 ... 32.767 nmeros inteiros de 32 bits intervalo compreendido: -2.147.483.648 ... 2.147.483.647 nmeros inteiros de 64 bits intervalo compreendido: -9.223.372.036.854.775.808 ... 9.223.372.036.854.775.807

Figura 7 O tipo inteiro em Java

para o tipo caracter que representa uma cadeia de caracteres, temos: String no um tipo primitivo. uma classe definida dentro de um pacote do Java

Figura 8 O tipo String em Java

3.2 Constantes Definio Dizemos que determinado dado uma constante quando este dado no sofre nenhuma alterao, ou seja, ele fixo. Por exemplo, podemos definir uma constante pi 3.14, dentro do algoritmo e, nesse algoritmo, esse valor nunca sofrer alterao.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

18

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Pseudocdigo A declarao de um dado constante em pseudocdigo ter a seguinte regra sinttica: declarar constante <nome da constante> <valor da constante> <tipo de dado da constante> ; Por exemplo: declarar constante pi 3.14 numrico_real; Podemos tambm declarar vrios dados constantes em pseudocdigo numa mesma linha, se eles forem todos do mesmo tipo, seguindo a regra sinttica abaixo e considerando NC como nome da constante e VC como valor da constante: declarar constante <NC1> <VC1> , <NC2> <VC2> , ... , <NCn> <VCn> <tipo de dado> ; Por exemplo: declarar constante pi 3.14, x 9.3, telefone -7.23 numrico_real; Java A declarao de um dado constante em java ter a seguinte regra sinttica: final <tipo de dado da constante> <nome da constante> = <valor da constante> ; Por exemplo: final double pi = 3.14; Podemos tambm declarar vrios dados constantes em Java numa mesma linha, se eles forem todos do mesmo tipo, seguindo a regra sinttica abaixo e considerando NC como nome da constante e VC como valor da constante: final <tipo de dado constante> <NC1> = <VC1> , <NC2> = <VC2> , ... , <NCn> = <VCn>; Por exemplo: final double pi = 3.14, x = 9.3, telefone = -7.23; 3.3 Variveis Definio Dizemos que determinado dado uma varivel quando o mesmo pode sofrer alguma alterao, ou seja, ele varivel. Por exemplo, podemos definir uma constante x, dentro do algoritmo e, nesse algoritmo, esse valor poder sofrer alterao.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

19

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Pseudocdigo A declarao de um dado varivel em pseudocdigo ter a seguinte regra sinttica: declarar <nome da varivel> <tipo de dado da varivel> ; Por exemplo: declarar x numrico_inteiro; Podemos tambm declarar vrios dados variveis em pseudocdigo numa mesma linha se eles forem todos do mesmo tipo, seguindo a regra sinttica abaixo e considerando NV como nome da varivel: declarar <NV1> , <NV2> , ... , <NVn> <tipo de dado da varivel> ; Por exemplo: declarar telefone, idade, valor, cor alfanumrico; No momento da declarao de um dado varivel em pseudocdigo, podemos tambm inicializar a varivel, assim a declarao com a inicializao ter a seguinte regra sinttica: declarar <nome varivel> <valor de inicializao da varivel> <tipo de dado da varivel> ; Por exemplo: declarar y 5 numrico_real; Java A declarao de um dado varivel em java ter a seguinte regra sinttica: <tipo de dado da varivel> <nome da varivel> ; Por exemplo: int x; Podemos tambm declarar vrios dados variveis em Java numa mesma linha se eles forem todos do mesmo tipo, seguindo a regra sinttica abaixo e considerando NV como nome da varivel: <tipo de dado da varivel> <NV1> , <NV2> , ... , <NVn>; Por exemplo: char letra, tom, nome;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

20

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

No momento da declarao de um dado varivel em Java, podemos tambm inicializar a varivel, assim a declarao com a inicializao ter a seguinte regra sinttica: <tipo de dado da varivel> <nome da varivel> = <valor de inicializao da varivel>; Por exemplo: double y = 5; 3.4 Identificadores Definio Os identificadores so os nomes dados s informaes de um programa, por exemplo, nome da varivel, nome da constante, nome do programa etc. Por exemplo: pi, x, num_1, valor5, etc. Os identificadores so nicos para uma determinada informao, por exemplo, um mesmo identificador no pode ser usado para o nome de uma varivel e de uma constante, ou para o nome de duas variveis de mesmo tipo ou de tipos diferentes. Uma vez que um identificador foi usado para uma determinada informao, ele no pode ser usado novamente para identificar outra informao. Por exemplo, em pseudocdigo: declarar x numrico_inteiro; x numrico_real; Por exemplo, em Java: int x ; double x; Esse exemplo mostra o que no pode acontecer, ou seja, o identificador x declarado como um tipo inteiro e depois como um tipo real. Um identificador pode possuir somente um tipo de informao. Formato Esses identificadores devem seguir as seguintes regras para serem vlidos: todos os caracteres devem ser letras, nmeros ou o sublinhado (o nico caracter especial permitido); o primeiro caracter deve ser uma letra; os demais caracteres podem ser letras, nmeros ou sublinhado; no so permitidos caracteres especiais (com exceo do sublinhado); palavras reservadas (de uma linguagem de programao ou do pseudocdigo) no devem ser usadas como identificadores.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

21

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

3.5 Converses entre tipos em java Em Java, as converses de tipos menos significativos para tipos mais significativos, por exemplo, de inteiro para real, so feitas automaticamente e sem problemas, basta fazer a sua atribuio, por exemplo: // declarao da varivel x do tipo int inicializado com o valor 10 int x = 10; // declarao da varivel y do tipo double double y; // atribuio do valor de x para y, a converso de int para double feita automaticamente y = x; No entanto, s vezes, queremos fazer atribuies de tipos mais significativos para tipos menos significativos, por exemplo, de real para inteiro. Nesse caso, precisamos fazer a converso do tipo real para inteiro antes de fazer qualquer atribuio, por exemplo: // declarao da varivel i do tipo int int i; // declarao da varivel j do tipo double inicializado com o valor 5.2 double j = 5.2; // atribuio do valor de j, j convertido para int, para i i = (int) j; Essa operao de converso entre tipos chamada de cast. As converses de tipos menos significativos para tipos mais significativos permitidas so: byte short int long float double e char int Todas as demais converses entre tipos devem ser convertidas com o uso de operaes de cast. 3.6 Exemplos com constantes, variveis e identificadores em pseudocdigo 1. So identificadores vlidos: num1, item5C, tipo_a2, A123, idade, telefone 2. So identificadores no vlidos: 1num, 5Citem, _tipoa2, _2valor, 123A, R$, nota/2, 5*, x&y 3. Declarao de constantes: declarar constante num1 9 numrico_inteiro; constante x_2 -3.28, cor 7.4 numrico_real; 4. Declarao de variveis declarar um 5, dois numrico_inteiro; maria, vlr9 numrico_real; valor_4A "alfabeto" alfanumrico; sexo, X987 lgico;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

22

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

amarelo '5', cor alfanumrico; 3.7 Exemplos com constantes, variveis e identificadores em Java 1. So identificadores vlidos: num1, item5C, tipo_a2, A123, idade, telefone 2. So identificadores no vlidos: 1num, 5Citem, _tipoa2, _2valor, 123A, R$, nota/2, 5*, x&y 3. Declarao de constantes: final int num1 = 9; final double x_2 = -3.28, cor = 7.4; 4. Declarao de variveis int um = 5, dois; double maria, vlr9; String valor_4A = "alfabeto"; boolean sexo, X987; char amarelo = '5', cor; 3.8 Exerccios com constantes, variveis e identificadores 1. Determine qual o tipo de dado que aparece nas seguintes frases: a) A placa de trnsito "E" significa estacionamento permitido. b) Hoje a temperatura em graus Celsius atingiu 45 graus. c) A prova de Lgica de Programao estava fcil e a menor nota foi 6.5. d) O sexo do meu primeiro filho feminino. 2. Assinale os identificadores vlidos: a) A={1,2,3} f) D/YU l) 5mar q) US$ b) M2 g) Avenida m) KJO&U r) df_2_9_df c) PARE! h) A*34 n) LKJHHG s) num-4 d) "MARIA" i) M(I) o) KhMjh t) CEP e) email@email j) Teste_1 p) x<y u) abelha

3. Considere as seguintes variveis: Nome, RA, Nota e Sexo. Suponha que essas variveis sejam utilizadas para armazenar o nome do aluno, o registro de aluno, a nota do aluno e o sexo do aluno, respectivamente. Declare as variveis corretamente, associando o tipo de dado adequado que ser armazenado para cada informao. 4. Encontre os erros da seguinte declarao de variveis: Declarar Cor, X lgico; XLM, A, tamanho, R$ numrico_real; X, Idade alfanumrico; Nome, sexo numrico_inteiro;

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

23

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 4 Expresses Aritmticas e Lgicas


Uma expresso aritmtica um conjunto de operadores e operandos dispostos numa determinada ordem. Nesse caso, os operadores podem ser aritmticos e os operandos podem ser constantes ou variveis inteiras ou reais. O resultado de uma expresso aritmtica ser sempre numrica. Uma expresso lgica tambm um conjunto de operadores e operandos dispostos numa determinada ordem. Nesse caso, os operadores podem ser relacionais ou lgicos e os operandos podem ser relaes, constantes ou variveis inteiras, reais, alfanumricas ou lgicas. O resultado de uma expresso lgica ser sempre do tipo lgico, ou seja, verdadeiro ou falso. 4.1 Operadores aritmticos Pseudocdigo Os operadores aritmticos pertencem a um conjunto de smbolos que representam as operaes matemticas bsicas, que so:

Operador + * /
Figura 9 Operadores aritmticos bsicos

Funo adio subtrao multiplicao diviso

Exemplo 5+3 2a b*c d / 10

Alm dos operadores aritmticos bsicos, consideraremos, para pseudocdigo, operadores aritmticos auxiliares para outros clculos, que so:

Operador pot rad mod div

Funo potenciao radiciao resto da diviso quociente da diviso

Exemplo pot(2,3) rad(9) 7 mod 3 7 div 3

Resultado 23 = 8

9 =3
resto da diviso = 1 quoc. da diviso = 2

Figura 10 Operadores aritmticos auxiliares

Java Os operadores aritmticos bsicos em Java so os mesmos apresentados na Figura 9. Os operadores aritmticos auxiliares seguem a simbologia prpria do java, como se segue:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

24

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Operador Math.pow Math.sqrt %

Funo potenciao radiciao resto da diviso

Exemplo Math.pow(2,3) Math.sqrt(9) 7%3

Figura 11 Operadores aritmticos auxiliares em Java

Para a utilizao dos operadores Math.pow e Math.sqrt, necessitamos importar, no cdigo fonte do Java, a seguinte biblioteca: java.Math.*;. Prioridades Para resolver expresses aritmticas em pseudocdigo, devemos obedecer a uma hierarquia de prioridades entre operadores aritmticos que a seguinte: parnteses mais internos pot rad * / div mod +
Figura 12 Prioridades entre operadores aritmticos

Operadores unrios No Java, alm dos operadores aritmticos bsicos e auxiliares, podemos usar tambm os operadores unrios (operadores que suportam apenas um operando), como se segue:

Operador ++ ++ += = *= /= %=

Funo pr-incremento ps-incremento pr-decremento ps-decremento atribui a adio atribui a subtrao atribui a multiplicao atribui a diviso atribui o resto da div.

Exemplo ++ x y ++ z k a+=2 b=5 c*=9 d/=7 e%=8

Equivalncia x=x+1
(incrementa e logo depois usa o valor de x)

x=x+1
(usa o valor de x e logo depois incrementa)

y=y1
(decrementa e logo depois usa o valor de y)

y=y1
(usa o valor de y e logo depois decrementa)

a=a+2 b=b5 c=c*9 d=d/7 e=e%8

Figura 13 Operadores unrios em Java


Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

25

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

4.2 Operadores relacionais Pseudocdigo Os operadores relacionais pertencem a um conjunto de smbolos que representam as comparaes possveis entre dois valores de mesmo tipo de dados. Esses valores podem ser constantes, variveis ou expresses aritmticas. Os operadores relacionais podem ser:

Operador > < >= <= = <>

Funo maior que menor que maior ou igual a menor ou igual a igual a diferente de

Exemplo 3>2 3<2 52>=1+2 52<=1+2 10 = 9 10 < > 10

Resultado Verdadeiro Falso Verdadeiro Verdadeiro Falso Falso

Figura 14 Operadores relacionais

Java Os operadores relacionais em Java tm uma pequena diferena dos operadores relacionais em pseudocdigo e so representados como segue:

Operador > < >= <= == !=

Funo maior que menor que maior ou igual a menor ou igual a igual a diferente de

Exemplo 1>8 1<8 2>=1+5 2<=72 10 = = 9 10 ! = 9

Resultado Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro

Figura 15 Operadores relacionais em Java

Prioridades Para resolver expresses lgicas em pseudocdigo, no h uma hierarquia de prioridades entre operadores relacionais que devemos obedecer.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

26

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

4.3 Operadores lgicos Pseudocdigo Os operadores lgicos pertencem a um conjunto de smbolos que representam os conectivos bsicos. Esses conectivos formam novas proposies compostas a partir de outras proposies simples. Os operadores lgicos podem ser:

Operador no e ou
Figura 16 Operadores lgicos

Funo negao conjuno Disjuno

Tabela Verdade A tabela verdade determina todos os resultados possveis de uma combinao entre valores de variveis lgicas. Esses resultados possuem somente dois valores: verdadeiro ou falso. Para exemplificar o uso dos operadores lgicos, construiremos uma tabela verdade, que se segue:

A V V F F
Figura 17 Tabela verdade

B V F V F

no A F F V V

AeB V F F F

A ou B V V V F

Java Os operadores lgicos em Java so representados como segue:

Operador ! && ||
Figura 18 Operadores lgicos em Java

Funo Negao Conjuno Disjuno

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

27

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Prioridades Para resolver expresses lgicas em pseudocdigo, devemos obedecer a uma hierarquia de prioridades entre operadores lgicos que a seguinte: no e ou
Figura 19 Prioridades entre operadores lgicos

4.4 Prioridades entre Operadores Para resolver expresses que contenham expresses lgicas e aritmticas, com operandos, operadores aritmticos, lgicos e relacionais, existe uma prioridade entre os operadores que a seguinte: parnteses mais internos operadores aritmticos operadores relacionais operadores lgicos
Figura 20 Prioridades entre operadores lgicos

4.5 Exemplo com operadores 1. Expresses aritmticas a) 5 * 2 3 + 14 / 2 + 9 10 3 + 7 + 9 9 b) 5 pot(2 , 3) + 4 2 * rad(4) 58+42*2 58+44 3 c) pot(3 1 , 2) 7 + rad(8 + 1) * 2 pot(2 , 2) 7 + rad(9) * 2 47+3*2 47+6 3 2. Expresses lgicas com operadores relacionais e aritmticos a) 5 * 2 = 4 + 10 / 2 10 = 4 + 5 10 = 9 F b) 5 mod 2 + 3 < pot(3 , 2) * 10 1 + 3 < 9 * 10 4 < 90 V
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

28

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

c) 5 div 2 1 >= 4 / 2 + 7 2 1 >= 2 + 7 1 >= 9 F 3. Expresses lgicas com operadores lgicos, relacionais e aritmticos a) 3 < 7 e 5 * 2 = 2 + 1 3 < 7 e 10 = 3 VeF F b) pot(2 , 3) <= rad(9) ou 2 * 3 6 / 3 = 4 8 <= 3 ou 6 2 = 4 F ou 4 = 4 F ou V V c) no V ou 2 * 3 mod 4 / 2 pot(2 , 1) + 7 = 3 e 4 * 7 > 12 no V ou 6 mod 2 2 + 7 = 3 e 28 > 12 no V ou 0 2 + 7 = 3 e V no V ou 5 = 3 e V no V ou F e V F ou F e V F ou F F 4.6 Exerccios com operadores 1. Calcule o resultado das seguintes expresses aritmticas: a) 5 * 9 mod 2 4 / 2 b) 4 7 div 2 + pot(2 , 4) / rad(4) c) rad(pot(3 , 2)) + pot(2 , 3) mod rad(4) 8 / 2 d) rad(16) div 9 / 3 4 * 3 pot(5 + 3 , rad(9)) e) rad(16 mod 4) + 5 * 2 / 10 pot(8 / 2 , 2 div 2) f) rad(16) / 2 + 2 * 5 mod 3 / 1 * pot(3 , 2 + 4) g) rad(rad(16)) + pot(pot(2 , 2) , pot(2 , 3)) + 5 * 4 / 2 h) rad(rad(pot(2 , 4))) + pot(rad(4) , pot(rad(4) , 3)) + 9 5 * 4 i) 5 * 3 mod 5 + 4 div 8 / 2 + 5 mod (4 + 2) j) rad(100) mod pot(4 , 3) pot(2 , 4) div 8 / 2 + 5 3 * 2 2. Calcule o resultado das seguintes expresses lgicas com operadores relacionais e aritmticos: a) 3 * 8 mod 2 = 20 / 4 b) 5 10 div 3 > pot(3 , 3) / rad(25) c) rad(pot(3 , 2)) < pot(5 , 2) mod rad(49) 81 / 9 d) rad(81) div 8 / 3 4 >= 5 pot(10 3 , rad(4)) e) rad(15 mod 3) + 15 * 12 / 6 <= pot(10 / 5 , 12 div 10) f) rad(100) / 10 + 12 = 10 mod 25 / 5 * pot(5 , 2 + 1) g) rad(rad(81)) + pot(pot(2 , 3) , pot(2 , 2)) <= 15 * 10 / 5 h) rad(rad(pot(3 , 4))) + pot(rad(16) , pot(rad(4) , 2)) >= 19 15 * 2 i) 27 * 25 mod 13 + 51 div 3 > 12 + 35 mod (17 12) j) rad(36) mod pot(2 , 3) pot(3 , 4) div 18 / 6 < 25 13 * 2
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

29

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

3. Calcule o resultado das seguintes expresses lgicas com operadores lgicos, relacionais e aritmticos: a) 2 = 10 mod 2 e 16 > 4 b) 5 10 div 3 > pot(3 , 3) ou rad(25) = 5 c) no F e rad(pot(3 , 2)) < pot(5 , 2) ou 5 mod rad(49) >= 81 / 9 d) no V ou rad(81) div 8 / 3 4 >= 5 pot(10 3 , rad(4)) e) rad(15 mod 3) <= 15 ou 12 / 6 <= pot(10 / 5 , 12 div 10) f) rad(100) / 10 + 12 = 10 mod 25 ou 5 * pot(5 , 2 + 1) e no V g) rad(rad(81)) > 5 e pot(pot(2 , 3) , pot(2 , 2)) <= 15 e 10 / 5 = 32 h) rad(rad(pot(3 , 4))) > 3 ou pot(rad(16), pot(rad(4) , 2)) >= 19 ou 15 * 2 = 7 i) no F ou 27 * 25 mod 13 < 91 e 51 div 3 > 12 ou 35 mod (17 12) >= 13 j) rad(36) mod pot(2 , 3) >= 10 ou no V e pot(3 , 4) div 18 / 6 < 25 13 * 2

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

30

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 5 Estrutura Seqencial


Uma estrutura seqencial aquela em que as aes de um algoritmo so executadas numa ordem seqencial, ou seja, de cima para baixo e da esquerda para a direita. Para o pseudocdigo adotado nesta apostila, convencionaremos que o uso do ponto-e-vrgula (;) determina o final de uma ao. Em qualquer estrutura de algoritmos, para expressar a entrada de dados, o processamento desses dados e a sada de resultados, usamos os comandos de atribuio, comandos de entrada e comandos de sada, os quais veremos a seguir: 5.2 Operador de atribuio () e comandos de atribuio O operador de atribuio, no nosso pseudocdigo representado pelo operador de atribuio , serve para atribuir um determinado valor para uma varivel, tendo o cuidado de verificar se o valor que est sendo atribudo varivel tem o tipo de dado compatvel, ou seja, se uma varivel x foi declarada como inteiro, s permitido atribuir valores inteiros varivel x. Pseudocdigo O comando de atribuio em pseudocdigo ter a seguinte regra sinttica: <nome da varivel> <expresso> ; onde expresso pode ser uma expresso lgica, aritmtica ou lgica. Por exemplo, vamos considerar que as variveis x, y e z foram declaradas como do tipo numrico_inteiro: x 25; y x + 15 3; z y x + rad(x) pot(y , 2); Java O comando de atribuio em Java ser o igual (=) e sua regra sinttica fica praticamente inalterada em relao ao pseudocdigo: <nome da varivel> = <expresso> ; onde expresso pode ser uma expresso lgica, aritmtica ou lgica. Por exemplo, vamos considerar que as variveis x, y e z foram declaradas como do tipo int: x = 25; y = x + 15 3; z = y x + Math.sqrt(x) Math.pow(y , 2); 5.3 Comandos de entrada e sada Os comandos de entrada e sada so utilizados para que haja uma interao entre o algoritmo e o usurio do algoritmo. Nesse caso, com o comando de entrada, possvel que o usurio fornea dados para serem processados pelo algoritmo e, com o comando de sada, possvel que o usurio veja o resultado do processamento dos dados. Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 31

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Pseudocdigo comandos de entrada Para que o usurio possa entrar com dados num algoritmo, utilizaremos a seguinte regra sinttica para o comando de entrada: ler (<nome da varivel>); Por exemplo, vamos considerar que uma varivel num foi declarada como do tipo numrico_real: ler (num); Quando esse comando for executado, o algoritmo espera que o usurio digite algum valor real e o valor digitado ser atribudo varivel num. Por exemplo, se o usurio digitar 5, ento a varivel num passar a ter o valor 5.0. Podemos tambm receber valores para vrias variveis com um mesmo comando de entrada, seguindo a seguinte regra sinttica: ler (<nome da varivel>, <nome da varivel> , ... , <nome da varivel>); Por exemplo, vamos considerar que as variveis num1, num2 e num3 foram declaradas como do tipo numrico_real: ler (num1, num2, num3); Quando esse comando for executado, o algoritmo espera que o usurio digite trs valores reais separados pela tecla <enter> e os valores digitados sero atribudos s variveis num1, num2 e num3. Por exemplo, se ele digitar: 5.2 <enter> -2.34 <enter> 0.0 <enter>, ento as variveis num1, num2 e num3 passaro a ter os valores 5.2, -2.34 e 0.0, respectivamente. Java comandos de entrada Para que o usurio possa entrar com dados num programa Java, utilizaremos o mtodo JOptionPane.showInputDialog definido dentro do pacote javax.swing. Para isso, o programa deve fazer o import dessa biblioteca no incio do programa da seguinte forma: import javax.swing.*; Utilizaremos a seguinte regra sinttica para o comando de entrada: <nome da varivel> = <converso tipos> (JOptionPane.showInputDialog("<msg>")); Por exemplo, vamos considerar que uma varivel num foi declarada como do tipo double: num = Double.parseDouble(JOptionPane.showInputDialog("Digite um nmero")); Quando esse comando for executado, o programa espera que o usurio digite algum valor que recebido pelo mtodo como do tipo String. Esse valor convertido para o tipo double e atribudo varivel num. Por exemplo, se o usurio digitar 5, ento o mtodo recebe a String "5", converte para o double 5.0 e a varivel num passar a ter o valor 5.0.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

32

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Observao: note que a converso de tipos s necessria se a varivel que receber o retorno do mtodo showInputDialog no for do tipo String. Os mtodos acima explicados utilizam janelas para a comunicao com o usurio, ou seja, as mensagens de coleta de dados so feitas com o uso de janelas com uma interface grfica mais amigvel. Outra forma utilizada para receber dados do usurio usando o vetor2 de argumentos. Essa forma no possui uma interface grfica e a coleta de dados feita pela tela do MS-DOS. Quando executamos um determinado arquivo, por exemplo, arquivo.class, usamos o seguinte comando no prompt do DOS: c:\ java arquivo Podemos tambm passar argumentos como parmetro para o programa que est sendo executado, por exemplo, da seguinte forma: c:\ java arquivo 1 Logica O dado String "1" e o dado String "Logica" esto sendo passados como parmetros para o mtodo principal. Mas onde? O cabealho do mtodo principal de qualquer programa Java : public static void main(String arg []) arg o nome dado para um vetor de String que recebe os argumentos passados como parmetros quando o programa executado. No nosso exemplo, dois valores ("1" e "Logica") foram passados como parmetros, nesse caso, nosso vetor arg possui esses dois valores, um na sua posio 0 e um na sua posio 1. Utilizaremos a seguinte regra sinttica para pegar os dados desse vetor arg: <nome da varivel> = <converso de tipos>(arg[<posio>]); Por exemplo: int num = Integer.parseInt(arg[0]); String n = arg[1]; No primeiro exemplo, pega-se o contedo do vetor arg na posio 0, converte-se esse dado para o tipo int e armazena-se na varivel num. No segundo exemplo, pega-se o contedo do vetor arg na posio 1 e armazena-se na varivel n. Note que podemos passar tantos argumentos como parmetros quantos forem necessrios e a ordem dos argumentos digitados sempre a mesma que aparece no vetor arg. Observao: note que a converso de tipos s necessria se a varivel que receber o contedo do vetor arg no for do tipo String.

O conceito de vetor ser visto no captulo 10.


Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

33

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Pseudocdigo comandos de sada Para que o usurio possa ver o resultado do processamento dos dados ou alguma mensagem enviada pelo algoritmo, utilizaremos a seguinte regra sinttica para o comando de sada: escrever (<nome da varivel>); Por exemplo, vamos considerar que uma varivel num foi declarada como do tipo numrico_inteiro e o valor 5 lhe foi atribudo: num 5; escrever (num); Quando o comando escrever for executado, o algoritmo mostra na tela do usurio o contedo da varivel num, nesse caso, o valor 5, j convertido para o tipo alfanumrico. Ao invs de mostrar para o usurio o contedo de uma varivel, podemos mostrar um dado alfanumrico, conforme a seguinte regra sinttica abaixo: escrever ("<mensagem>"); Por exemplo: escrever ("Disciplina de Lgica de Programao"); Quando o comando escrever for executado, o algoritmo mostra na tela do usurio a seguinte mensagem: Disciplina de Lgica de Programao. Com o mesmo comando de sada, podemos enviar uma mensagem cujo contedo seja a concatenao de vrios dados do tipo alfanumricos, sejam eles do tipo alfanumricos ou da converso de outros tipos de dados para o tipo alfanumrico, seguindo a seguinte regra sinttica: escrever ("<msg>", <nome var> , ... , "<msg>", <nome var>, ... , "<msg>"); Por exemplo, vamos considerar que as variveis num1 e num2 foram declaradas como do tipo numrico_inteiro e os valores 10 e 5 lhes foram, respectivamente, atribudos: num1 10; num2 5; escrever ("Maria tem " , num1 , " anos e Joo tem " , num2 , " anos"); Quando o comando escrever for executado, o algoritmo mostra na tela do usurio a seguinte mensagem: Maria tem 10 anos e Joo tem 5 anos. Perceba que os contedos que esto entre aspas duplas ("Maria tem ", " anos e Joo tem " , " anos") so dados do tipo alfanumricos e sua impresso na tela no se altera, enquanto que num1 e num2 so dados do tipo numrico_inteiro e o que mostrado na tela no so os nomes das variveis mas sim os seus contedos (10 , 5) j convertidos para o tipo alfanumrico. Note ainda que a vrgula dentro do comando escrever tem a funo de concatenar as informaes, mostrando ao final uma nica mensagem.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

34

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Java comandos de sada Para que o usurio possa ver o resultado do processamento dos dados ou alguma mensagem enviada pelo programa Java, utilizaremos o mtodo JOptionPane.showMessageDialog definido dentro do pacote javax.swing. Para isso, o programa deve fazer o import dessa biblioteca no incio do programa da seguinte forma: import javax.swing.*; Utilizaremos a seguinte regra sinttica para o comando de sada: JOptionPane.showMessageDialog(null , "<mensagem>"); Por exemplo, vamos considerar que uma varivel num foi declarada como do tipo numrico_inteiro e o valor 5 lhe foi atribudo: num = 5; JOptionPane.showMessageDialog(null, num); Quando o comando JOptionPane.showMessageDialog for executado, o programa mostra na tela do usurio o contedo da varivel num, nesse caso, o valor 5, j convertido para o tipo String. Ao invs de mostrar para o usurio o contedo de uma varivel, podemos mostrar um dado alfanumrico, conforme a seguinte regra sinttica abaixo: JOptionPane.showMessageDialog(null, "<mensagem>"); Por exemplo: JOptionPane.showMessageDialog(null, "Disciplina de Lgica de Programao"); Quando o comando JOptionPane.showMessageDialog for executado, o programa mostra na tela do usurio a seguinte mensagem: Disciplina de Lgica de Programao. Com o mesmo comando de sada, podemos enviar uma mensagem cujo contedo seja a concatenao de vrios dados do tipo String, sejam eles do tipo String ou da converso de outros tipos de dados para o tipo String, seguindo a seguinte regra sinttica: JOptionPane.showMessageDialog(null, "<msg>" + <nome var> + ... + "<msg>" + <nome var> + ... + "<msg>"); Por exemplo, vamos considerar que as variveis num1 e num2 foram declaradas como do tipo int e os valores 10 e 5 lhes foram, respectivamente, atribudos: num1 = 10; num2 = 5; JOptionPane.showMessageDialog(null, "Maria tem " + num1 + " anos e Joo tem " + num2 + " anos"); Quando o comando JOptionPane.showMessageDialog for executado, o programa mostra na tela do usurio a seguinte mensagem: Maria tem 10 anos e Joo tem 5 anos. Perceba que os contedos que esto entre aspas duplas so dados do tipo String e sua impresso na tela no se altera, enquanto que num1 e num2 so dados do tipo int e o que mostrado
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

35

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

na tela no so os nomes das variveis mas sim os seus contedos j convertidos para o tipo String. Note ainda que o sinal de mais (+) dentro do comando JOptionPane.showMessageDialog tem a funo de concatenar as informaes, mostrando ao final uma nica mensagem. Os mtodos acima explicados utilizam janelas para a comunicao com o usurio, ou seja, as mensagens de aviso so feitas com o uso de janelas com uma interface grfica mais amigvel. Outro mtodo utilizado para mostrar o resultado de um processamento de dados ou alguma mensagem para o usurio o mtodo System.out.print ou System.out.println. A nica diferena entre esses dois mtodos que o primeiro somente mostra a mensagem passada como parmetro e o segundo, alm de mostrar a mensagem, pula o cursor para a linha de baixo. Esses mtodos no possuem uma interface grfica e a mensagem mostrada na tela do MS-DOS. Utilizaremos as seguintes regras sintticas para este comando de sada: System.out.print ("<mensagem>"); System.out.println ("<mensagem>"); Todas as propriedades de quantidade de parmetros e concatenao de Strings vistos para o mtodo JOptionPane.showMessageDialog tambm valem para os mtodos System.out.println e System.out.print. 5.4 Blocos Um bloco representado por um conjunto de aes cujo incio e fim so bem definidos. Um algoritmo pode ser considerado um bloco. As variveis declaradas dentro de um bloco so reconhecidas somente dentro desse bloco. Pseudocdigo Em pseudocdigo, um bloco tem seu incio com a palavra incio e seu trmino com a palavra fim;. Um algoritmo pode ser considerado um bloco, no entanto, seu incio determinado com a palavra incio_algoritmo e seu trmino com a palavra fim_algoritmo. Por exemplo: Algoritmo Exemplo incio_algoritmo // incio do bloco ou algoritmo Declarar // declarao das variveis e/ou constantes // seqncia dos comandos fim_algoritmo. // fim do bloco ou algoritmo Nesse exemplo, o bloco inicia-se com a palavra incio_algoritmo e termina com a palavra fim_algoritmo. Note que um algoritmo deve estar bem identado, isto , deve estar numa formao que facilite o seu entendimento. No exemplo acima, veja que as palavras incio_algoritmo e fim_algoritmo aparecem ligeiramente direita do cabealho do algoritmo Algoritmo Exemplo; a palavra Declarar aparece ligeiramente direita da palavra incio_algoritmo porque as declaraes esto dentro do bloco; as declaraes de variveis e/ou constantes aparecem ligeiramente direita da palavra Declarar, pois as declaraes fazem parte do bloco de declarao; e, por fim, a seqncia de comandos aparece ligeiramente direita da Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 36

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

palavra incio_algoritmo, mas alinhado com a palavra Declarar, pois a seqncia de comandos tambm faz parte do bloco do algoritmo. Java Em programas Java, um bloco tem seu incio com a chave aberta, {, e seu trmino com a chave fechada, }. Um programa Java tambm pode ser considerado um bloco com incio e trmino representados pela chave aberta e chave fechada, respectivamente. Por exemplo: // nome da classe class Exemplo { // incio do bloco que limita a classe // cabealho do mtodo principal public static void main(String argumentos[ ]) { // incio do bloco que limita o mtodo principal // declarao das variveis e/ou constantes // seqncia dos comandos } // fim do bloco que limita o mtodo principal } // fim do bloco que limita a classe Nesse exemplo, o bloco inicia-se com a chave aberta e termina com a chave fechada. Nesse caso, temos dois blocos, o bloco da classe exemplo e o bloco do mtodo principal main(). Note que um programa Java tambm deve estar bem identado, isto , deve estar numa formao que facilite o seu entendimento. No exemplo acima, veja que as chaves aberta e fechada aparecem ligeiramente direita do nome da classe class Exemplo e ligeiramente direita do mtodo principal main(); as declaraes de variveis e/ou constantes aparecem ligeiramente direita da chave aberta e da chave fechada do mtodo principal main(), pois as declaraes fazem parte do bloco do mtodo principal; e, por fim, a seqncia de comandos tambm aparece ligeiramente direita da chave aberta e da chave fechada do mtodo principal main(), mas alinhada com as declaraes, pois a seqncia de comandos tambm faz parte do bloco do mtodo principal main(). 5.5 Estrutura seqencial Uma estrutura seqencial aquela em que as aes de um algoritmo so executadas numa ordem seqencial, ou seja, de cima para baixo e da esquerda para a direita. Para o pseudocdigo adotado nesta apostila, convencionaremos que o uso do ponto-e-vrgula (;) determina o final de uma ao. Pseudocdigo Em pseudocdigo, a estrutura seqencial representa um conjunto de aes ou comandos que so executados num determinado fluxo. Numa estrutura sequncial, este fluxo executado de cima para baixo e da esquerda para a direita. A estrutura seqencial para pseudocdigo segue a seguinte regra sinttica:

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

37

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Algoritmo <nome do algoritmo> incio_algoritmo Declarar // declarao das variveis e/ou constantes <comando_1>; <comando_2>; ... <comando_n>; fim_algoritmo. Por exemplo: Algoritmo Exemplo_Sequencial incio_algoritmo Declarar x, y alfanumrico; ler(x, y); escrever("Voc digitou primeiro o " , x); escrever("Voc digitou logo em seguida o " , y); fim_algoritmo. Esse exemplo caracteriza uma estrutura seqencial, pois a execuo desse algoritmo, desde seu incio at o seu trmino, segue um fluxo: primeiro as variveis do tipo alfanumrico x e y so declaradas; depois essas variveis recebem valores digitados pelo usurio; depois uma mensagem com o valor de x apresentada ao usurio; e, por ltimo, uma mensagem com o valor de y apresentada na tela. Se o usurio digitou 5 e 10, o valor de x ser 5 e o valor de y ser 10. O resultado da execuo deste exemplo ser: Voc digitou primeiro o 5 Voc digitou logo em seguida o 10 Java Em Java, a estrutura seqencial no difere do pseudocdigo em relao ao comportamento, pois tambm representa um conjunto de aes ou comandos que so executados num determinado fluxo. Este fluxo, num programa seqencial em Java, tambm executado de cima para baixo e da esquerda para a direita. A estrutura seqencial para Java segue a seguinte regra sinttica: class <nome da classe> { public static void main(String argumentos[ ]) { // declarao das variveis e/ou constantes <comando_1>; <comando_2>; ... <comando_n>; } }

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

38

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Por exemplo: class Exemplo_Seqencial { public static void main(String arg[ ]) { String x, y; x = JOptionPane.showInputDialog("Digite um valor"); y = JOptionPane.showInputDialog("Digite um valor"); JOptionPane.showMessageDialog(null, "Voc digitou primeiro o " + x); JOptionPane.showMessageDialog(null, "Voc digitou logo em seguida o " + y); System.exit(0); } } Esse exemplo caracteriza uma estrutura seqencial, pois a execuo desse programa, desde seu incio at o seu trmino, segue um fluxo: primeiro as variveis do tipo String x e y so declaradas; depois a varivel x recebe um valor digitado pelo usurio; depois a varivel y recebe um valor digitado pelo usurio; depois uma mensagem com o valor de x apresentada ao usurio; depois uma mensagem com o valor de y apresentada na tela; e, por fim; o mtodo System.exit(0), que finaliza e sai do programa, executado. O resultado da execuo desse exemplo : Digite um valor // suponha que o usurio digitou 5 e clicou no boto ok Digite um valor // suponha que o usurio digitou 10 e clicou no boto ok Voc digitou primeiro o 5 // e o usurio clicou no boto ok Voc digitou logo em seguida o 10 // e o usurio clicou no boto ok 5.6 Funes de tratamento de caracteres em Java Algumas vezes, precisamos trabalhar com caracteres em Java e para isso podemos utilizar alguns comandos existentes: static boolean isDigit(char) Verifica se determinado caracter digito. static boolean isLowerCase(char) Verifica se determinado caracter minsculo. static boolean isUpperCase(char) Verifica se determinado caracter maisculo. static boolean isSpace(char) Verifica se determinado caracter um espao. static char toLowerCase(char) Retorna a converso de determinado caracter para minsculo. static char toUpperCase(char)
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

39

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Retorna a converso de determinado caracter para maisculo. boolean equals(Object) Verifica se um objeto igual a outro. boolean equalsIgnoreCase(String) Verifica se um String igual a outro sem diferenciar letras maisculas de minsculas. String concat(String) Retorna dois Strings concatenados em um nico String. String toString() Retorna a converso de determinado valor num String. int length() Retorna o tamanho de um String. boolean compareTo(String) Verifica se dois Strings so iguais.

5.7 Exemplos de estrutura seqencial em pseudocdigo 1. Desenvolva um algoritmo que receba trs valores numricos inteiros e mostre a soma desses trs nmeros. Algoritmo Somar incio_algoritmo // declarao de variveis e/ou constantes Declarar num1, num2, num3, soma numrico_inteiro; // mensagem ao usurio escrever ("Digite trs valores inteiros"); // entrada de dados ler (num1 , num2 , num3); // processamento de dados soma num1 + num2 + num3; // sada de resultados escrever ("A soma dos trs valores digitados : " , soma); fim_algoritmo. 2. Desenvolva um algoritmo que receba quatro notas bimestrais, calcule e mostre a mdia aritmtica dessas quatro notas. Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes Declarar n1, n2, n3, n4, media numrico_real; // mensagem ao usurio escrever ("Digite as quatro notas bimestrais"); // entrada de dados
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

40

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

ler (n1 , n2 , n3 , n4); // processamento de dados media (n1 + n2 + n3 + n4) / 4; // sada de resultados escrever ("A mdia : " , media); fim_algoritmo. 3. Desenvolva um algoritmo que receba a base e a altura de um tringulo, calcule e mostre a rea deste tringulo. Algoritmo AreaTriangulo incio_algoritmo // declarao de variveis e/ou constantes Declarar base, altura, area numrico_real; // mensagem ao usurio escrever ("Digite a base e a altura do tringulo"); // entrada de dados ler (base , altura); // processamento de dados area (base * altura) / 2; // sada de resultados escrever ("A rea do tringulo : " , area); fim_algoritmo. 5.8 Exemplos de estrutura seqencial em Java 1. Desenvolva um algoritmo que receba trs valores numricos inteiros e mostre a soma desses trs nmeros. class Somar { public static void main (String args [ ]) { // declarao de variveis e/ou constantes int num1, num2, num3, soma; // mensagem ao usurio e entrada de dados num1 = Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor inteiro")); num2 = Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor inteiro")); num3 = Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor inteiro")); // processamento de dados soma = num1 + num2 + num3; // sada de resultados System.out.println ("A soma dos trs valores digitados : " + soma); System.exit(0); } // fim do void main } // fim da classe Somar
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

41

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

2. Desenvolva um algoritmo que receba quatro notas bimestrais, calcule e mostre a mdia aritmtica dessas quatro notas. class MediaAritmetica { public static void main (String args [ ]) { // declarao de variveis e/ou constantes double n1, n2, n3, n4, media; // mensagem ao usurio e entrada de dados n1 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); n2 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); n3 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); n4 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); // processamento de dados media = (n1 + n2 + n3 + n4) / 4; // sada de resultados System.out.println ("A mdia : " + media); System.exit(0); } // fim do void main } // fim da classe 3. Desenvolva um algoritmo que receba a base e a altura de um tringulo, calcule e mostre a rea desse tringulo. class AreaTriangulo { public static void main (String args [ ]) { // declarao de variveis e/ou constantes double base, altura, area; // mensagem ao usurio e entrada de dados base = Double.parseDouble(JOptionPane.showInputDialog( "Digite a base do tringulo")); altura = Double.parseDouble(JOptionPane.showInputDialog( "Digite altura do tringulo")); // processamento de dados area = (base * altura) / 2; // sada de resultados System.out.println ("A rea do tringulo : " + area); System.exit(0); } // fim do void main } // fim da classe main 5.9 Exerccios de algoritmos seqenciais 1. Desenvolva um algoritmo que receba o salrio de um funcionrio, calcule e mostre seu novo salrio com reajuste de 15%.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

42

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

2. Desenvolva um algoritmo que receba a base e a altura de um retngulo, calcule e mostre a rea desse retngulo. Frmula da rea de um retngulo: A = base . altura. 3. Desenvolva um algoritmo que receba uma temperatura em graus Celsius (C), calcule e mostre a temperatura convertida para graus Fahrenheit (F). Frmula de converso: F = (9.C + 160) / 5. 4. Desenvolva um algoritmo que receba uma temperatura em graus Kelvin (K), calcule e mostre a temperatura convertida para graus Celsius (C). Frmula de converso: C = K - 273. 5. Desenvolva um algoritmo que receba dois valores inteiros para as variveis x e y, efetue a troca dos valores, ou seja, x passa a ter o valor de y e y passa a ter o valor de x e mostre os valores trocados. 6. Desenvolva um algoritmo que receba os coeficientes a, b e c de uma equao de segundo grau (ax2 + bx + c), calcule e mostre as razes reais dessa equao, considerando uma equao que possui duas razes reais. 7. Desenvolva um algoritmo que receba os valores do comprimento (C), da largura (L) e da altura (H) de um paraleleppedo, calcule e mostre o volume desse paraleleppedo. Frmula do volume de um paraleleppedo: V = C . L . H. 8. Desenvolva um algoritmo que receba o salrio bruto de um funcionrio, calcule e mostre o salrio lquido desse funcionrio, sabendo que ele recebe 10% de gratificao calculados sobre o salrio bruto, mas paga 20% de imposto de renda tambm calculados sobre o salrio bruto. 9. Desenvolva um algoritmo que receba o valor de um depsito em poupana, calcule e mostre o valor aps um ms de aplicao na poupana, sabendo que a poupana rende 5% ao ms. 10. Desenvolva um algoritmo que receba um valor em Real, calcule e mostre o valor convertido para Dlar. 11. Desenvolva um algoritmo que receba um valor em Euro, calcule e mostre o valor convertido para Real. 12. Desenvolva um algoritmo que receba um valor numrico real, calcule e mostre o quadrado desse nmero. 13. Desenvolva um algoritmo que receba dois valores numrico inteiro, calcule e mostre a soma do quadrado desses dois nmeros. 14. Desenvolva um algoritmo que receba dois valores numrico real, calcule e mostre o quadrado da diferena desses dois nmeros. 15. Desenvolva um algoritmo que receba o nome e o sobrenome de uma pessoa e mostre o nome inteiro dessa pessoa. 16. Desenvolva um algoritmo que receba trs valores numrico inteiro, calcule e mostre o cubo da soma desses trs nmeros.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

43

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

17. Desenvolva um algoritmo que receba dois valores numrico real, calcule e mostre a diferena do cubo desses dois nmeros. 18. Desenvolva um algoritmo que receba o nome, a idade e o sexo de uma pessoa e mostre essas informaes na tela. 19. Desenvolva um algoritmo que receba o raio (R) de uma circunferncia, calcule e mostre o comprimento dessa circunferncia. Frmula do comprimento da circunferncia: C = 2 . . R. 20. Desenvolva um algoritmo que receba o raio (R) de uma circunferncia, calcule e mostre a rea dessa circunferncia. Frmula da rea: A = . R2. 21. Desenvolva um algoritmo que receba o ano de nascimento de uma pessoa e o ano atual, calcule e mostre a idade dessa pessoa e quantos anos essa pessoa ter daqui a 10 anos. 22. Desenvolva um algoritmo que receba o nmero de horas trabalhadas por um funcionrio e quanto esse funcionrio recebe por hora trabalhada, calcule e mostre o valor que deve ser recebido por esse funcionrio. 23. Desenvolva um algoritmo que receba uma quantidade de um alimento em quilos, calcule e mostre quantos dias durar esse alimento para uma pessoa que consome 50 gramas desse alimento por dia. 24. Desenvolva um algoritmo que receba a altura de um degrau, calcule e mostre quantos degraus uma pessoa precisa subir se deseja estar a uma altura de 5 quilmetros. 25. Desenvolva um algoritmo que receba um valor numrico inteiro, calcule e mostre qual o quociente e o resto da diviso desse nmero por 3. 26. Desenvolva um algoritmo que receba os valores dos catetos (C1, C2) de um tringulo retngulo, calcule e mostre o valor da hipotenusa (H) desse tringulo. Frmula do clculo da hipotenusa de um tringulo retngulo. H2 = C12 + C22. 27. Desenvolva um algoritmo que receba os valores de dois ngulos de um tringulo qualquer, calcule e mostre o valor do terceiro ngulo desse tringulo, sabendo que a soma dos trs ngulos de um tringulo igual a 180. 28. Desenvolva um algoritmo que receba um horrio em horas, minutos e segundos, calcule e mostre este mesmo horrio convertido em minutos. 29. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa e a data atual, calcule e mostre a idade desta pessoa em anos, meses, dias e semanas. 30. Desenvolva um algoritmo que receba o valor de um produto, calcule e mostre o valor desse produto aps um desconto de 15%.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

44

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 6 Estrutura de Deciso


Quando desenvolvemos um algoritmo ou programa estruturado, muitas vezes, precisamos interferir no fluxo natural ou seqencial que o algoritmo deve seguir. No entanto, precisamos saber controlar qual o fluxo que o algoritmo percorre do incio at o fim de sua execuo. Para isso, utilizaremos os fluxos de controle, por exemplo, estrutura de deciso e estrutura de repetio. Uma estrutura de deciso um fluxo de controle utilizado para decidir qual o fluxo que o algoritmo seguir. Uma estrutura de deciso determina qual conjunto de comandos ou bloco ser executado aps uma condio ser avaliada. Essa condio representada por expresses lgicas e relacionais que podem ou no serem satisfeitas, isto , podem retornar ao valor verdadeiro ou falso. Uma estrutura de deciso pode ser simples, composta ou encadeada. Veremos a seguir como e quando trabalhar com cada uma delas. 6.1 Estrutura de Deciso Simples (se/ento) Uma estrutura de deciso simples pode ser utilizada quando o algoritmo precisa testar determinada condio antes de executar um conjunto de comandos. Nesse caso, uma condio avaliada e, se seu resultado for verdadeiro, o conjunto de comandos dentro da estrutura de deciso simples se/ento executado. Por outro lado, se o resultado da avaliao for falso, esse conjunto de comandos no far parte do fluxo de execuo do algoritmo. Pseudocdigo Na estrutura de deciso simples, utilizaremos as palavras se e ento que representam as palavras principais dessa estrutura e a palavra fimse; para determinar o fim do bloco de execuo dessa estrutura. A estrutura de deciso simples para pseudocdigo segue a seguinte regra sinttica: se (<condio>) ento <comandos>; fimse; Por exemplo: se (var < 0) ento escrever("O nmero " , var , " negativo"); fimse; Nesse exemplo, a varivel var possui um valor numrico e vai passar por uma avaliao, ou seja, a expresso var<0 ser avaliada. Se o resultado de retorno dessa avaliao for verdadeira, ento o comando escrever(...); ser executado. Por outro lado, se o resultado da avaliao for falso, ento o mesmo comando no ser executado. O resultado da execuo desse exemplo :
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

45

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

// se o valor de var for -5 O nmero 5 negativo Java Na estrutura de deciso simples, utilizaremos a palavra if para representar a palavra principal dessa estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte da estrutura. A estrutura de deciso simples para Java segue a seguinte regra sinttica: if (<condio>) { <comandos>; } Por exemplo: if (var < 0) { System.out.print("O nmero " + var + " negativo"); } Nesse exemplo, assim como no pseudocdigo, a varivel var possui um valor numrico e vai passar por uma avaliao. Se o resultado de retorno dessa avaliao for verdadeiro, ento o comando System.out.print(...); ser executado. Por outro lado, se o resultado da avaliao for falso, ento o comando no ser executado. O resultado da execuo desse exemplo : // se o valor de var for -5 O nmero 5 negativo 6.2 Estrutura de Deciso Composta (se/ento/seno) Uma estrutura de deciso composta parecida com a estrutura de deciso simples. A diferena entre as duas estruturas que a primeira pode ser utilizada quando o algoritmo precisa testar determinada condio, cujos resultados podem ser verdadeiro ou falso, antes de executar um conjunto de comandos. Neste caso, uma condio avaliada e, se seu resultado for verdadeiro, o conjunto de comandos dentro da estrutura se/ento executado. Por outro lado, se o resultado da avaliao for falso, o conjunto de comandos dentro da estrutura seno executado. Pseudocdigo Na estrutura de deciso composta, utilizaremos as palavras se, ento e seno que representam as palavras principais dessa estrutura e a palavra fimse; para determinar o fim do bloco de execuo dessa estrutura. A estrutura de deciso composta para pseudocdigo segue a seguinte regra sinttica: se (<condio>) ento <comandos1>; seno <comandos2>; fimse;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

46

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Por exemplo: se (var < 0) ento escrever("O nmero " , var , " negativo"); seno escrever("O nmero " , var , " no negativo"); fimse; Nesse exemplo, a varivel var possui um valor numrico e vai passar por uma avaliao, ou seja, a expresso var<0 ser avaliada. Se o resultado de retorno dessa avaliao for verdadeiro, ento o comando escrever(...); dentro da estrutura do ento ser executado. Por outro lado, se o resultado da avaliao for falso, ento o comando escrever(...); dentro da estrutura do seno executado. Note que somente os comandos de uma das duas estruturas ento e seno so executados, ou seja, nunca as duas estruturas podem ser executadas num mesmo momento. O resultado da execuo desse exemplo : // se o valor de var for 5 O nmero 5 no negativo // se o valor de var for -5 O nmero 5 negativo Java Na estrutura de deciso composta, utilizaremos as palavras if e else para representar as palavras principais dessa estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte da estrutura. A estrutura de deciso composta para Java segue a seguinte regra sinttica: if (<condio>) { <comandos1>; } else { <comandos2>; } Por exemplo: if (var < 0) { System.out.print("O nmero " + var + " negativo"); } else { System.out.print("O nmero " + var + " no negativo"); } Nesse exemplo, assim como no pseudocdigo, a varivel var possui um valor numrico e vai passar por uma avaliao. Se o resultado de retorno dessa avaliao for verdadeiro,
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

47

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

ento o comando System.out.print(...); dentro da estrutura do if ser executado. Por outro lado, se o resultado da avaliao for falso, ento o comando System.out.print(...); dentro da estrutura do else executado. Assim, como no pseudocdigo, somente os comandos de uma das duas estruturas if e else so executados, ou seja, nunca as duas estruturas podem ser executadas num mesmo momento. O resultado da execuo desse exemplo : // se o valor de var for 5 O nmero 5 no negativo // se o valor de var for -5 O nmero 5 negativo 6.3 Estrutura de Deciso Encadeada (se/ ento ... / seno ...) Uma estrutura de deciso encadeada pode ser utilizada quando o algoritmo precisa testar um conjunto de condies, cujos resultados podem ser verdadeiro ou falso. Dizemos que essa estrutura encadeada, pois h estruturas de decises dentro de outras estruturas de decises. Para qualquer caso, cada condio avaliada e, se seu resultado for verdadeiro, o conjunto de comandos dentro da estrutura se/ento executado. Por outro lado, se o resultado da avaliao for falso, o conjunto de comandos dentro da estrutura seno executado. No existe limite para a estrutura de deciso encadeada, podemos ter quantas estruturas de deciso encadeadas forem necessrias. Note que, para qualquer estrutura de deciso, no mximo, um nico conjunto de comando ser executado, aquele cuja avaliao de condio for sempre verdadeira. Pseudocdigo Na estrutura de deciso encadeada, utilizaremos as palavras se, ento e seno que representam as palavras principais dessa estrutura e a palavra fimse; para determinar o fim do bloco de execuo dessa estrutura. Note que, para cada estrutura se que aparece, existe um fimse adequadamente localizado dentro da estrutura. A estrutura de deciso encadeada para pseudocdigo segue a seguinte regra sinttica: se (<condio1>) ento se (<condio2>) ento se (<condio3>) ento ... // continua com outra estrutura de seleo ou coloca os comandos seno ... // continua com outra estrutura de seleo ou coloca os comandos fimse; // da condio 3 fimse; // da condio 2 seno se (<condio4>) ento se (<condio5>) ento ... // continua com outra estrutura de seleo ou coloca os comandos seno
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

48

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

... // continua com outra estrutura de seleo ou coloca os comandos fimse; // da condio 5 fimse; // da condio 4 fimse; // da condio 1 Por exemplo: se (var < 0) ento escrever("O nmero " , var , " negativo"); seno se (var = 0) ento escrever("O nmero " , var , " nulo"); seno escrever("O nmero " , var , " positivo"); fimse; // do var = 0 fimse; // do var < 0 Nesse exemplo, a varivel var possui um valor numrico e vai passar por uma avaliao, ou seja, a expresso var<0 ser avaliada. Se o resultado de retorno dessa avaliao for verdadeiro, ento o comando escrever(...); dentro da estrutura do primeiro ento ser executado. Por outro lado, se o resultado da avaliao for falso, ento uma nova estrutura de deciso ser avaliada, ou seja, a expresso var=0 ser avaliada. Se o resultado de retorno dessa avaliao for verdadeiro, ento o comando escrever(...); dentro da estrutura do segundo ento ser executado. Por outro lado, se o resultado da segunda avaliao for falso, ento o comando escrever(...); dentro da estrutura do segundo seno executado. Note que somente os comandos de uma nica das estruturas de toda a estrutura de deciso encadeada so executados. O resultado da execuo desse exemplo : // se o valor de var for 5 O nmero 5 positivo // se o valor de var for -5 O nmero 5 negativo // se o valor de var for 0 O nmero 0 nulo Java Na estrutura de deciso encadeada, utilizaremos as palavras if e else para representar as palavras principais desta estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte desta estrutura. A estrutura de deciso encadeada para Java segue a seguinte regra sinttica: if (<condio1>) { if (<condio2>) { if (<condio3>) {
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

49

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

... // continua com outra estrutura de seleo ou coloca os comandos } // fim da condio 3 quando verdadeira else { ... // continua com outra estrutura de seleo ou coloca os comandos } // fim do else da condio 3 } // fim da condio 2 quando verdadeira } // fim do else da condio 1 else { if (<condio4>) { if (<condio5>) { ... // continua com outra estrutura de seleo ou coloca os comandos } // fim da condio 5 quando verdadeira else { ... // continua com outra estrutura de seleo ou coloca os comandos } // fim do else da condio 5 } // fim da condio 4 quando veradeira } // fim do else da condio 1 Por exemplo: if (var < 0) { System.out.print("O nmero " + var + " negativo"); } else { if (var = 0) { System.out.print("O nmero " + var + " nulo"); } else { System.out.print("O nmero " + var + " positivo"); } // do var = 0 } // do var < 0 Nesse exemplo, assim como no pseudocdigo, a varivel var possui um valor numrico e vai passar por uma avaliao, ou seja, a expresso var<0 ser avaliada. Se o resultado de retorno dessa avaliao for verdadeiro, ento o comando System.out.print(...); dentro da estrutura do primeiro if ser executado. Por outro lado, se o resultado da avaliao for falso, ento uma nova estrutura de deciso ser avaliada, ou seja, a expresso var=0 ser avaliada. Se o resultado de retorno dessa avaliao for verdadeiro, ento o comando System.out.print(...); dentro da estrutura do segundo if executado. Por outro lado, se o resultado da segunda avaliao for falso, ento o comando System.out.print(...); dentro da estrutura do segundo else executado. Assim, como no pseudocdigo, somente os comandos de uma nica das estruturas de toda a estrutura de deciso encadeada so executados. Nesse caso, somente uma das impresses efetuada. O resultado da execuo desse exemplo :
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

50

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

// se o valor de var for 5 O nmero 5 positivo // se o valor de var for -5 O nmero 5 negativo // se o valor de var for 0 O nmero 0 nulo 6.4 Exemplos de estrutura de deciso simples, composta e encadeada em pseudocdigo 1. Desenvolva um algoritmo que receba um valor numrico real, verifique e mostre se esse nmero positivo. Algoritmo Positivo incio_algoritmo // declarao de variveis e/ou constantes Declarar x numrico_real; // mensagem ao usurio escrever ("Digite um nmero real"); // entrada de dados ler (x); // processamento de dados se (x > 0) ento // sada de resultados escrever (x , " positivo"); fimse; fim_algoritmo. 2. Desenvolva um algoritmo que receba trs valores numricos inteiros, mostra a soma desses trs nmeros, verifique e mostre se a soma maior que 100. Algoritmo Somar incio_algoritmo // declarao de variveis e/ou constantes Declarar num1, num2, num3, soma numrico_inteiro; // mensagem ao usurio escrever ("Digite trs valores inteiros"); // entrada de dados ler (num1 , num2 , num3); // processamento de dados soma num1 + num2 + num3; // sada de resultados escrever ("A soma dos trs valores digitados : " , soma); se (soma > 100) ento // sada de resultados escrever("A soma maior que 100");
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

51

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

seno // sada de resultados escrever("A soma menor ou igual a 100"); fimse; fim_algoritmo. 3. Desenvolva um algoritmo que receba quatro notas bimestrais, calcule e mostre a mdia aritmtica dessas quatro notas, bem como, se o aluno foi aprovado (mdia >= 7), reprovado (mdia < 3) ou em exame (mdia >= 3 ou mdia <7). Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes Declarar n1, n2, n3, n4, media numrico_real; // mensagem ao usurio escrever ("Digite as quatro notas bimestrais"); // entrada de dados ler (n1 , n2 , n3 , n4); // processamento de dados media (n1 + n2 + n3 + n4) / 4; // sada de resultados escrever ("A mdia : " , media); // processamento de dados se (media >= 7) ento // sada de resultados escrever ("Aluno aprovado"); seno se (media < 3) ento // sada de resultados escrever ("Aluno reprovado"); seno // sada de resultados escrever ("Aluno em exame"); fimse; // do media < 3 fimse; // do media >= 7 fim_algoritmo. 4. Desenvolva um algoritmo que receba a base e a altura de um tringulo e verifique se os dados recebidos so vlidos, ou seja, todos maiores que zero. Se os dados forem vlidos, calcule e mostre a rea desse tringulo, caso contrrio, mostre uma mensagem de dados invlidos ao usurio. Algoritmo AreaTriangulo incio_algoritmo // declarao de variveis e/ou constantes Declarar base, altura, area numrico_real; // mensagem ao usurio escrever ("Digite a base e a altura do tringulo"); // entrada de dados
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

52

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

ler (base , altura); // processamento de dados se (base <= 0 ou altura <= 0) ento // mensagem ao usurio escrever ("Dados digitados invlidos. As medidas de base e altura de um tringulo devem ser maiores que zero"); seno // processamento de dados area (base * altura) / 2; // sada de resultados escrever ("A rea do tringulo : " , area); fimse; fim_algoritmo. 5. Desenvolva um algoritmo que receba trs valores numricos reais, verifique e mostre se esses valores podem ser o comprimento dos lados de um tringulo. Se falso, mostrar essa informao ao usurio, caso contrrio, verificar se formam um tringulo equiltero, issceles ou escaleno. Algoritmo Triangulo incio_algoritmo // declarao de variveis e/ou constantes Declarar lado1, lado2, lado3 numrico_real; // mensagem ao usurio escrever ("Digite trs valores reais"); // entrada de dados ler (lado1, lado2, lado3); // processamento de dados se ((lado1 < lado2 + lado3) e (lado2 < lado1 + lado3 ) e (lado3 < lado1 + lado2)) ento // sada de resultados escrever ("Com os valores digitados, podemos construir um tringulo "); se ((lado1 = lado2) e (lado2 = lado3)) ento // sada de resultados escrever ("equiltero, com trs lados iguais."); seno se ((lado1 = lado2) ou (lado1 = lado3) ou (lado2 = lado3)) ento // sada de resultados escrever ("issceles, com dois lados iguais."); seno // sada de resultados escrever ("escaleno, com trs lados diferentes"); fimse; fimse; seno // sada de resultados escrever ("Com os valores digitados, no podemos construir um tringulo "); fimse; fim_algoritmo.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

53

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

6.5 Exemplos de estrutura de deciso simples, composta e encadeada em Java 1. Desenvolva um algoritmo que receba um valor numrico real, verifique e mostre se esse nmero positivo. class Positivo { public static void main (String args [ ]) { // declarao de variveis e/ou constantes double x; // mensagem ao usurio e entrada de dados x = Double.parseDouble(JOptionPane.showInputDialog("Digite um nmero real")); // processamento de dados if (x > 0) { // sada de resultados System.out.println (x + " positivo"); } // fim do if System.exit(0); } // fim do void main } // fim da classe Positivo 2. Desenvolva um algoritmo que receba trs valores numricos inteiros, mostre a soma desses trs nmeros, verifique e mostre se a soma maior que 100. class Somar { public static void main (String args [ ]) { // declarao de variveis e/ou constantes int num1, num2, num3, soma; // mensagem ao usurio e entrada de dados num1 = Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor inteiro")); num2 = Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor inteiro")); num3 = Integer.parseInt(JOptionPane.showInputDialog( "Digite um valor inteiro")); // processamento de dados soma = num1 + num2 + num3; // sada de resultados System.out.println ("A soma dos trs valores digitados : " + soma); if (soma > 100) { // sada de resultados System.out.println("A soma maior que 100"); } // fim do if else { // sada de resultados
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

54

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

System.out.println("A soma menor ou igual a 100"); }// fim do else System.exit(0); } // fim do void main } //fim da classe 3. Desenvolva um algoritmo que receba quatro notas bimestrais, calcula e mostra a mdia aritmtica dessas quatro notas, bem como, se o aluno foi aprovado (mdia >= 7), reprovado (mdia < 3) ou em exame (mdia >= 3 ou mdia <7). class MediaAritmetica { public static void main (String args [ ]) { // declarao de variveis e/ou constantes double n1, n2, n3, n4, media; // mensagem ao usurio e entrada de dados n1 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); n2 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); n3 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); n4 = Double.parseDouble(JOptionPane.showInputDialog( "Digite uma nota bimestral")); // processamento de dados media = (n1 + n2 + n3 + n4) / 4; // sada de resultados System.out.println ("A mdia : " + media); // processamento de dados if (media >= 7) { // sada de resultados System.out.println ("Aluno aprovado"); } else { if (media < 3) { // sada de resultados System.out.println ("Aluno reprovado"); } else { // sada de resultados System.out.println ("Aluno em exame"); } // do media < 3 } // do media >= 7 System.exit(0); } // fim do void main } //fim da classe 4. Desenvolva um algoritmo que receba a base e a altura de um tringulo, verifique se os dados recebidos so vlidos, ou seja, todos maiores que zero. Se os dados forem vlidos,
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

55

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

calcuque e mostre a rea desse tringulo, caso contrrio, mostre mensagem de dados invlidos ao usurio. class AreaTriangulo { public static void main (String args [ ]) { // declarao de variveis e/ou constantes double base, altura, area; // mensagem ao usurio e entrada de dados base = Double.parseDouble(JOptionPane.showInputDialog( "Digite a base do tringulo")); altura = Double.parseDouble(JOptionPane.showInputDialog( "Digite altura do tringulo")); // processamento de dados if (base <= 0 || altura <= 0) { // mensagem ao usurio System.out.println ("As medidas de um tringulo devem } else { ser maiores que zero");

// processamento de dados area = (base * altura) / 2; // sada de resultados System.out.print ("A rea do tringulo : " + area); } System.exit(0); } // fim do void main } //fim da classe 5. Desenvolva um algoritmo que receba trs valores numricos reais, verifique e mostre se esses valores podem ser o comprimento dos lados de um tringulo. Se falso, mostrar essa informao ao usurio, caso contrrio, verificar se formam um tringulo equiltero, issceles ou escaleno. class Triangulo { public static void main (String args [ ]) { // declarao de variveis e/ou constantes double lado1, lado2, lado3; // mensagem ao usurio e entrada de dados lado1 = Double.parseDouble(JOptionPane.showInputDialog( "Digite o lado do tringulo")); lado2 = Double.parseDouble(JOptionPane.showInputDialog( "Digite o lado do tringulo")); lado3 = Double.parseDouble(JOptionPane.showInputDialog( "Digite o lado do tringulo")); // processamento de dados if ((lado1 < lado2 + lado3) && (lado2 < lado1 + lado3 ) && (lado3 < lado1 + lado2)) Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 56

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

{ // sada de resultados System.out.print ("Com os valores digitados, podemos construir um tringulo"); if ((lado1 == lado2) && (lado2 == lado3)) { // sada de resultados System.out.print ("equiltero, com trs lados iguais."); } else { if ((lado1 == lado2) || (lado1 == lado3) || (lado2 == lado3)) { // sada de resultados System.out.print ("issceles, com dois lados iguais."); } else { // sada de resultados System.out.print ("escaleno, com trs lados diferentes"); } } else { }

// sada de resultados System.out.print ("Com os valores digitados, no podemos construir um tringulo ");

} System.exit(0); } // fim do void main } //fim da classe 6.6 Exerccios de estrutura de deciso simples, composta e encadeada 1. Desenvolva um algoritmo que receba dois valores numrico inteiro, calcule e mostre o resultado da diferena do maior pelo menor valor. 2. Desenvolva um algoritmo que receba trs valores numrico real e mostre-os em ordem crescente. Utilizar a estrutura de deciso encadeada. 3. Desenvolva um algoritmo que receba um valor inteiro, calcule e mostre o mdulo desse nmero. O mdulo de um nmero qualquer esse nmero positivo, ou seja, o mdulo de 5 5 e o mdulo de 5 5. 4. Desenvolva um algoritmo que receba dois valores numrico real, calcule e mostre o maior entre esses dois nmeros.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

57

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

5. Desenvolva um algoritmo que receba os trs coeficientes a, b e c de uma equao de segundo grau da forma ax2 + bx + c = 0, verifique e mostre a existncia de razes reais e caso exista raz(es) real(is), calcule e mostre essa(s) raz(es). 6. Desenvolva um algoritmo que receba os valores referentes a quatro notas bimestrais de um aluno, calcule a mdia desse aluno e mostre a mensagem de aprovao (mdia >= 5) ou reprovao (mdia < 5) do aluno, juntamente com a mdia calculada. 7. Desenvolva um algoritmo que receba trs valores obrigatoriamente em ordem crescente e um quarto valor no necessariamente nessa ordem. Esse algoritmo deve mostrar os quatro nmeros em ordem decrescente. 8. Desenvolva um algoritmo que receba um valor numrico inteiro, verifique e mostre se esse valor divisvel por 2 e por 3. 9. Desenvolva um algoritmo que receba um valor numrico inteiro, verifique e mostre se esse valor divisvel por 2 ou por 3. 10. Desenvolva um algoritmo que receba um valor numrico real, verifique e mostre se esse valor par ou mpar. 11. Desenvolva um algoritmo que receba os valores da altura e do sexo de uma pessoa, calcule e mostre o peso ideal dessa pessoa, utilizando as seguintes regras: - para homens: (72.7 * altura) 58; - para mulheres: (62.1 * altura) 44.7. 12. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa e a data atual, calcule e mostre se essa pessoa maior de idade. 13. Desenvolva um algoritmo que receba o ano de nascimento de uma pessoa, calcule e mostre a sua idade, e tambm verifique e mostre se essa pessoa j tem idade para votar (16 anos ou mais) e se tem idade para obter a Carteira Nacional de Habilitao (18 anos ou mais). 14. Desenvolva um algoritmo que receba a hora de incio de um jogo e a hora final desse jogo (cada hora composta por duas variveis inteiras: hora e minuto). Esse algoritmo deve calcular e mostrar a durao do jogo (horas e minutos) sabendo-se que o tempo mximo de durao do jogo de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte. 15. Desenvolva um algoritmo que receba cinco valores numrico inteiro, identifique e mostre o maior e o menor dentre esses nmeros. Proibida em qualquer hiptese a ordenao dos valores. 16. Desenvolva um algoritmo que receba um caracter alfanumrico, verifique e mostre se o caracter digitado uma vogal, uma consoante, um nmero, ou qualquer outro caracter. 17. Desenvolva um algoritmo que receba um valor numrico real, verifique e mostre se esse valor positivo ou negativo. 18. Desenvolva um algoritmo que receba dois valores numrico real, verifique qual o maior desses valores e calcule e mostre a soma do cubo do maior nmero com o cubo do menor nmero.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

58

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

19. Desenvolva um algoritmo que receba trs valores numrico real, calcule e mostre a mdia ponderada desses nmeros, considerando que o primeiro nmero tem peso 2, o segundo nmero tem peso 3 e o terceiro nmero tem peso 5. 20. Desenvolva um algoritmo que receba o preo atual e a venda mensal mdia de um produto, calcule e mostre o novo preo, sabendo que: - se a venda mdia mensal for menor que 500 e o preo atual menor que 30,00, ento o produto sofre um aumento de 10%; - se a venda mdia mensal for maior ou igual a 500 e menor que 1000 e o preo atual maior ou igual a 30,00 e menor que 80,00, ento o produto sofre um aumento de 15%; - se a venda mensal mdia for maior ou igual a 1000 e o preo atual maior ou igual a 80,00, ento o produto sofre uma diminuio de 5%. 21. Desenvolva um algoritmo que receba dois valores numrico inteiro, verifique e mostre se o maior nmero mltiplo do menor nmero. 22. Desenvolva um algoritmo que receba dois valores nmero inteiro, verifique e mostre se o maior nmero divisvel pelo menor nmero. 23. Desenvolva um algoritmo que receba o nmero de voltas dadas, a extenso do circuito, em metros, e o tempo de durao, em minutos, de uma corrida de frmula 1. O algoritmo deve calcular e mostrar a velocidade mdia do primeiro colocado, em quilmetros por hora. 24. Desenvolva um algoritmo que receba o salrio de um funcionrio, calcule e mostre o valor do aumento salarial e o salrio final a ser recebido pelo funcionrio, considerando que se o funcionrio: - recebe menos que 500,00, ter reajuste de 100%; - recebe mais ou igual a 500,00 e menos que 1.000,00, ter reajuste de 75%; - recebe mais ou igual a 1.000,00 e menos que 1.500,00, ter reajuste de 50%; - recebe mais ou igual a 1.500,00 e menos que 2.000,00, ter reajuste de 25%; - recebe mais ou igual a 2.000,00 e menos que 3.000,00, ter reajuste de 10%; - recebe mais ou igual a 3.000,00 e menos que 5.000,00, ter reajuste de 5%; - recebe mais ou igual a 5.000,00, ter reajuste de 2%. 25. Desenvolva um algoritmo que receba a medida de um ngulo em graus, verifique se um ngulo vlido (entre 0 grau e 360 graus) calcule e mostre o quadrante em que esse ngulo se localiza. Considere os quadrantes da trigonometria, primeiro quadrante graus entre 0 e 90, segundo quadrante graus entre 90 e 180, terceiro quadrante graus entre 180 e 270 e quarto quadrante graus entre 270 e 360. 26. Desenvolva um algoritmo que receba a medida de um ngulo em graus, calcule e mostre o quadrante em que esse ngulo se localiza. Considere os quadrantes da trigonometria e para ngulos maiores que 360 graus ou menores que 360 graus, reduzi-los, mostrando tambm o nmero de voltas e o sentido da volta (horrio ou anti-horrio). 27. Desenvolva um algoritmo que receba uma senha de quatro nmeros, verifique a validade desta senha sabendo que a senha correta 1234 e mostre ao usurio uma mensagem dizendo se a senha digitada vlida ou no. 28. Desenvolva um algoritmo que receba o tipo de investimento (poupana ou fundo de renda fixa) e o valor do investimento, calcule e mostre o valor corrigido do investimento aps o perodo de 30 dias, considerando que o rendimento mensal da poupana de 3% e o do fundo de renda fixa de 5%.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

59

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

29. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa, verifique e mostre em qual estao do ano (primavera, vero, outono ou inverno) essa pessoa nasceu. 30. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa, verifique e mostre qual o signo dessa pessoa. Usar estrutura de deciso encadeada.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

60

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 7 Estrutura de Mltipla Escolha


Uma estrutura de mltipla escolha tambm uma estrutura de deciso em que um fluxo de controle utilizado para decidir qual o fluxo que o algoritmo seguir. Uma estrutura de mltipla escolha determina qual conjunto de comandos ou bloco ser executado aps uma opo ser avaliada e um caso para essa opo for detectado. Essa opo representada por valores de quaisquer tipos de dados conhecidos. Note que somente um caso executado, dentre todos os casos da estrutura de mltipla escolha. Uma estrutura de mltipla escolha pode ser construda dentro de uma estrutura de deciso, seja ela simples, composta ou encadeada, assim como qualquer estrutura de deciso pode ser construda dentro de uma estrutura de mltipla escolha. Uma estrutura de mltipla escolha pode ser simples ou encadeada. Veremos a seguir como e quando trabalhar com cada uma delas. 7.1 Estrutura de Mltipla Escolha Simples Uma estrutura de deciso de mltipla escolha pode ser utilizada quando o algoritmo precisa testar um conjunto de valores diferentes antes de executar um conjunto de comandos associado a esses valores. Nesse caso, uma opo avaliada, seu resultado verificado dentro de um conjunto de casos e o conjunto de comandos dentro do caso relacionado opo avaliada executado como parte do fluxo de execuo do algoritmo. Numa estrutura de mltipla escolha, o tipo de dado da opo precisa, necessariamente, ser do mesmo tipo dos casos relacionados. Pseudocdigo Na estrutura de mltipla escolha simples, utilizaremos as palavras escolha, caso e caso contrrio que representam as palavras principais dessa estrutura e a palavra fimescolha; para determinar o fim do bloco de execuo dessa estrutura. A estrutura de mltipla escolha simples para pseudocdigo segue a seguinte regra sinttica: escolha (<opo>) caso <caso_1> : <comandos_1>; caso <caso_2> : <comandos_2>; ... caso <caso_n> : <comandos_n>; caso contrrio : <mensagem>; fimescolha; Por exemplo: escolha (var) caso 1 : escrever ("O valor da varivel var 1"); caso 2 : escrever ("O valor da varivel var 2"); caso 3 : escrever ("O valor da varivel var 3"); caso contrrio : escrever ("O valor da varivel var no nem 1, nem 2, nem 3"); fimescolha; Nesse exemplo, a varivel var possui um valor numrico_inteiro e vai passar por uma avaliao, ou seja, o valor da varivel var ser avaliada. Se o resultado de retorno dessa avaliao for o nmero inteiro 1, ento o comando escrever(...); do caso 1 ser executado, Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 61

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

se for o nmero inteiro 2, ento o comando escrever(...); do caso 2 ser executado, se for o nmero inteiro 3, ento o comando escrever(...); do caso 3 ser executado e se for diferente de 1,2 ou 3, ento o escrever(...); do caso contrrio ser executado. Note que somente um dos casos executado e que o tipo de dado da varivel var numrico_inteiro assim como os valores de cada um dos casos. Note que o uso do comando caso contrrio serve para os valores no previstos que a varivel var possa assumir. O resultado da execuo desse exemplo : // se o valor de var for 1 O valor da varivel var 1 // se o valor de var for 2 O valor da varivel var 2 // se o valor de var for 3 O valor da varivel var 3 // se o valor de var for 4 O valor da varivel var no nem 1, nem 2, nem 3 Numa estrutura de mltipla escolha, os valores escolhidos para cada caso no precisam ser nicos, isto , cada caso da estrutura pode ser representado por um conjunto de valores especficos. Nesse caso, a estrutura de mltipla escolha simples para pseudocdigo segue a seguinte regra sinttica: escolha (<opo>) caso <caso_1> : <comandos_1>; caso <caso_2>, <caso_3>, <caso_4> : <comandos_2>; caso <caso_5> .. <caso_10> : <comandos_3>; ... caso <caso_11>, <caso_15> .. <caso_20> : <comandos_4>; caso contrrio : <mensagem>; fimescolha; Por exemplo, um caso pode ter o valor 1, outro caso, os valores 2, 3 e 4, outro caso, os valores 7, 15 e 25 e outro caso, os valores 8, 11, 12, 13 e 14: escolha (var) caso 1 : escrever ("O valor da varivel var 1"); caso 2 . . 4 : escrever ("O valor da varivel var pode ser 2, 3 ou 4"); caso 7, 15, 25 : escrever ("O valor da varivel var pode ser 7, 15 ou 25"); caso 8, 11 . . 14 : escrever ("O valor da varivel var pode ser 8 , 11, 12, 13 ou 14"); caso contrrio : escrever ("opo invlida."); fimescolha; Nesse exemplo, a varivel var possui um valor numrico_inteiro e vai passar por uma avaliao, ou seja, o valor da varivel var ser avaliado. Se o resultado de retorno dessa avaliao for o nmero inteiro 1, ento o comando escrever(...); do caso 1 ser executado, se for o nmero inteiro 2, 3 ou 4, ento o comando escrever(...); do caso 2 .. 4 ser executado, se for o nmero inteiro 7, 15, ou 25, ento o comando escrever(...); do caso 7, 15, 25 ser executado, se for 8, 11, 12, 13 ou 14, ento o comando escrever(...); do caso 8, 11 .. 14 ser executado e se for diferente de qualquer um dos valores anteriores, ento o Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 62

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

escrever(...); do caso contrrio ser executado. Note que somente um dos casos executado e que o tipo de dado da varivel var numrico_inteiro assim como os valores de cada um dos casos. O resultado da execuo desse exemplo : // se o valor de var for 1 O valor da varivel var 1 // se o valor de var for 2 O valor da varivel var pode ser 2, 3 ou 4 // se o valor de var for 7 O valor da varivel var pode ser 7, 15 ou 25 // se o valor de var for 8 O valor da varivel var pode ser 8 , 11, 12, 13 ou 14 // se o valor de var for 100 Opo Invlida Java Na estrutura de mltipla escolha simples, utilizaremos as palavras switch, case, default e break que representam as palavras principais dessa estrutura e a chave aberta, {, e a chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de mltipla escolha simples para Java segue a seguinte regra sinttica: switch (<opo>) case <caso_1> : <comandos_1>; break; case <caso_2> : <comandos_2>; break; ... case <caso_n> : <comandos_n>; break; default : <mensagem>; fimescolha; Por exemplo: switch (var) { case 1 : System.out.print ("O valor da varivel var 1"); break; case 2 : System.out.print ("O valor da varivel var 2"); break; case 3 : System.out.print ("O valor da varivel var 3"); break; default : System.out.print ("O valor da varivel var no nem 1, nem 2, nem 3"); }
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

63

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Nesse exemplo, a varivel var possui um valor numrico_inteiro e vai passar por uma avaliao. Se o resultado de retorno dessa avaliao for o nmero inteiro 1, ento o comando System.out.print(...); do case 1 ser executado, se for o nmero inteiro 2, ento o comando System.out.print (...); do case 2 ser executado, se for o nmero inteiro 3, ento o comando System.out.print (...); do case 3 ser executado e se for diferente de 1,2 ou 3, ento o System.out.print (...); do default ser executado. Note que somente um dos casos executado e que o tipo de dado da varivel var numrico_inteiro assim como os valores de cada um dos casos. Note que o uso do comando break serve para sair de determinado bloco. Nesse caso, o break utilizado para sair da estrutura switch/case aps executar os comandos do case selecionado. Isso necessrio, pois sem o uso do break, todos os comandos aps o case selecionado seriam executados. Note que o uso do comando default serve para os valores no previstos que a varivel var possa assumir. O resultado da execuo desse exemplo : // se o valor de var for 1 O valor da varivel var 1 // se o valor de var for 2 O valor da varivel var 2 // se o valor de var for 7 O valor da varivel var 3 // se o valor de var for 4 O valor da varivel var no nem 1, nem 2, nem 3 Numa estrutura de switch case, os valores escolhidos para cada caso no precisam ser nicos, isto , cada caso da estrutura pode ser representado por um conjunto de valores especficos. Nesse caso, a estrutura de mltipla escolha simples para pseudocdigo segue a seguinte regra sinttica: switch (<opo>) { case <caso_1> : <comandos_1>; break; case <caso_2> : case <caso_3> : case <caso_4> : <comandos_2>; break; case <caso_5> : case <caso_6> : case <caso_7> : case <caso_8> : case <caso_9> : case <caso_10> : <comandos_3>; break; ... case <caso_11> : case <caso_15> : case <caso_16> : case <caso_17> : case <caso_18> : <comandos_4>; break; default : <mensagem>; } Por exemplo, um caso pode ter o valor 1, outro caso, os valores 2, 3 e 4, outro caso, os valores 7, 15 e 25 e outro caso, os valores 8, 11, 12, 13 e 14:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

64

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

switch (var) { case 1 : System.out.println ("O valor da varivel var break; case 2 : case 3 : case 4 : System.out.println ("O valor da varivel var 2, 3 ou 4"); break; case 7 : case 15: case 25: System.out.println ("O valor da varivel var 7, 15 ou 25"); break; case 8 : case 11: case 12: case 13: case 14: System.out.println ("O valor da varivel var 8 , 11, 12, 13 ou 14"); break; default : System.out.println ("opo invlida."); }

1");

pode ser

pode ser

pode ser

Nesse exemplo, a varivel var possui um valor int e vai passar por uma avaliao, ou seja, o valor da varivel var ser avaliado. Se o resultado de retorno dessa avaliao for o nmero inteiro 1, ento o comando System.out.println(...); do case 1 : ser executado, se for o nmero inteiro 2, 3 ou 4, ento o comando System.out.println(...); do case 2 : case 3: case 4 : ser executado, se for o nmero inteiro 7, 15, ou 25, ento o comando System.out.printon(...); do case 7 : case 15 : case 25 : ser executado, se for 8, 11, 12, 13 ou 14, ento o comando System.out.println(...); do case 8 : case 11 : case 12 : case 13 : case 14 : ser executado e se for diferente de qualquer um dos valores anteriores, ento o System.out.println(...); do default ser executado. Note que somente um dos casos executado e que o tipo de dado da varivel var int assim como os valores de cada um dos casos. O resultado da execuo desse exemplo : // se o valor de var for 1 O valor da varivel var 1 // se o valor de var for 2 O valor da varivel var pode ser 2, 3 ou 4 // se o valor de var for 7 O valor da varivel var pode ser 7, 15 ou 25 // se o valor de var for 8 O valor da varivel var pode ser 8 , 11, 12, 13 ou 14 // se o valor de var for 100 Opo Invlida

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

65

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

7.2 Estrutura de Mltipla Escolha Encadeada Uma estrutura de mltipla escolha encadeada pode ser utilizada quando o algoritmo precisa testar um conjunto de valores diferentes antes de executar um conjunto de comandos associados a esses valores. Dizemos que essa estrutura encadeado, pois h estruturas de mltipla escolha dentro de outras estruturas de mltipla escolha. Para qualquer caso, cada opo avaliada e para cada resultado, um conjunto de comandos dentro da estrutura escolha/caso pode ser executado. No existe limite para a estrutura de mltipla escolha encadeada, podemos ter quantas estruturas de mltipla escolha encadeadas forem necessrias. Note que, para qualquer estrutura de mltipla escolha, no mximo, um nico conjunto de comando ser executado, aquele cuja avaliao de opo for escolhida. Pseudocdigo Na estrutura de mltipla escolha encadeada, utilizaremos as palavras escolha, caso e caso contrrio que representam as palavras principais dessa estrutura e a palavra fimescolha; para determinar o fim do bloco de execuo dessa estrutura. Note que, para cada estrutura escolha/caso que aparece, existe um fimescolha adequadamente localizado dentro da estrutura. A estrutura de mltipla escolha encadeada para pseudocdigo segue a seguinte regra sinttica: escolha (<opo_1>) caso <caso_1> : escolha (<opo_2>) caso <caso_11> : escolha (<opo_3>) caso <caso_111> : <comandos_111>; caso <caso_112> : <comandos_112>; ... caso <caso_11n> : <comandos_11n>; caso contrrio : <mensagem>; fimescolha; // opo 3 caso <caso_12> : <comandos_12>; ... caso <caso_1n> : <comandos_1n>; caso contrrio : <mensagem>; fimescolha; // opo 2 caso <caso_2> : escolha (<opo_4>) caso <caso_21> : <comandos_21>; caso <caso_22> : <comandos_22>; ... caso <caso_2n> : <comandos_2n>; caso contrrio : <mensagem>; fimescolha; // opo 4 caso <caso_3> : <comandos_3>; ... caso <caso_n> : <comandos_n>; caso contrrio : <mensagem>; fimescolha; // opo 1 Por exemplo: escolha (var) caso 1 . . 3 : escolha (var) caso 1 , 2 : escolha (var) caso 1 : escrever ("o valor da varivel var 1"); caso 2 : escrever ("o valor da varivel var 2");
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

66

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

caso contrrio : escrever ("opo invlida"); fimescolha; caso 3 : escrever ("o valor da varivel var 3"); caso contrrio : escrever ("opo invlida"); fimescolha; caso 4 , 5 : escolha (var) caso 4 : escrever ("o valor da varivel var 4"); caso 5 : escrever ("o valor da varivel var 5"); caso contrrio : escrever("opo invlida"); fimescolha; caso 6 : escrever ("o valor da varivel var 6"); caso contrrio : escrever ("opo invlida"); fimescolha; Nesse exemplo, a varivel var possui um valor numrico_inteiro e vai passar por uma avaliao, ou seja, o valor da varivel var ser avaliado. Se o resultado de retorno dessa avaliao for o nmero inteiro 6, ento o comando escrever(...); do caso 6 ser executado, se for o nmero inteiro 4 ou 5, ento uma nova estrutura de mltipla escolha avaliado. Se nessa avaliao, o valor de var for o nmero 4, o comando escrever(...); do caso 4 ser executado, se for o nmero 5, o comando escrever(...); do caso 5 ser executado. Se o resultado da avaliao do primeiro var for o nmero inteiro 1, 2, ou 3, ento uma nova estrutura de mltipla escolha avaliada e assim por diante. Note que somente um dos casos executado, ou seja, uma nica mensagem escrever(...); ser apresentada ao usurio e que o tipo de dado da varivel var numrico_inteiro assim como os valores de cada um dos casos. O resultado da execuo desse exemplo : // se o valor de var for 1 O valor da varivel var 1 // se o valor de var for 2 O valor da varivel var 2 // se o valor de var for 3 O valor da varivel var 3 // se o valor de var for 4 O valor da varivel var 4 // se o valor de var for 5 O valor da varivel var 5 // se o valor de var for 6 O valor da varivel var 6 // se o valor de var for 7 Opo Invlida Java Na estrutura de mltipla escolha encadeada, utilizaremos as palavras switch, case, default e break que representam as palavras principais dessa estrutura e a chave aberta, {, e a chave fechada, }, para representar o conjunto de comandos que fazem parte dessa
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

67

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

estrutura. A estrutura de mltipla escolha encadeada para Java segue a seguinte regra sinttica: switch (<opo_1>) { case <caso_1> : switch (<opo_2>) { case <caso_11> : switch (<opo_3>) { case <caso_111> : <comandos_111>; break; case <caso_112> : <comandos_112>; break; ... case <caso_11n> : <comandos_11n>; break; default : <mensagem>; } // opo 3 break; case <caso_12> : <comandos_12>; break; ... case <caso_1n> : <comandos_1n>; break; default : <mensagem>; } // opo 2 break; case <caso_2> : switch (<opo_4>) { case <caso_21> : <comandos_21>; break; case <caso_22> : <comandos_22>; break; ... case <caso_2n> : <comandos_2n>; break; default : <mensagem>; } // opo 4 break; case <caso_3> : <comandos_3>; break; ... case <caso_n> : <comandos_n>; break; default : <mensagem>; } // opo 1 Por exemplo: switch (var) { case 1 : case 2 : case 3 : switch (var)
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

68

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

{ case 1 : case 2 : switch (var) { case 1 : System.out.print ("o valor da varivel var 1"); break; case 2 : System.out.print ("o valor da varivel var 2"); break; default : System.out.print ("opo invlida"); } break; case 3 : System.out.print ("o valor da varivel var 3"); break; default : System.out.print ("opo invlida"); } break; case 4 : case 5 : switch (var) { case 4 : System.out.print ("o valor da varivel var 4"); break; case 5 : System.out.print ("o valor da varivel var 5"); break; default : System.out.print ("opo invlida"); } break; case 6 : System.out.print ("o valor da varivel var 6"); break; default : System.out.print ("opo invlida"); } Nesse exemplo, a varivel var possui um valor numrico_inteiro e vai passar por uma avaliao, ou seja, o valor da varivel var ser avaliado. Se o resultado de retorno dessa avaliao for o nmero inteiro 6, ento o comando System.out.print(...); do case 6 ser executado, se for o nmero inteiro 4 ou 5, ento uma nova estrutura do switch/case avaliada. Se nessa avaliao o valor de var for o nmero 4, o comando System.out.print(...); do case 4 ser executado, se for o nmero 5, o comando System.out.print(...); do case 5 ser executado. Se o resultado da avaliao do primeiro var for o nmero inteiro 1, 2, ou 3, ento uma nova estrutura do switch/case avaliada e assim por diante. Note que somente um dos casos executado, ou seja, uma nica mensagem System.out.print(...); ser apresentada ao usurio e que o tipo de dado da varivel var numrico_inteiro assim como os valores de cada um dos casos. O resultado da execuo desse exemplo : // se o valor de var for 1 O valor da varivel var 1 // se o valor de var for 2 O valor da varivel var 2
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

69

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

// se o valor de var for 3 O valor da varivel var 3 // se o valor de var for 4 O valor da varivel var 4 // se o valor de var for 5 O valor da varivel var 5 // se o valor de var for 6 O valor da varivel var 6 // se o valor de var for 7 Opo Invlida 7.3 Exemplos de Estrutura de Mltipla Escolha em pseudocdigo 1. Desenvolva um algoritmo que receba quatro notas bimestrais, calcule e mostre a mdia aritmtica dessas quatro notas, bem como, se o aluno foi aprovado (mdia >= 7), reprovado (mdia < 3), em exame (mdia >= 3 ou mdia < 7) ou aprovado com louvor (mdia = 10). Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes Declarar n1, n2, n3, n4, media numrico_real; // mensagem ao usurio escrever ("Digite as quatro notas bimestrais"); // entrada de dados ler (n1 , n2 , n3 , n4); // processamento de dados media (n1 + n2 + n3 + n4) / 4; // sada de resultados escrever ("A mdia : " , media); // processamento de dados escolha (media) caso 7 .. 10 : se (media = 10) ento // sada de resultados escrever("Aluno aprovado com louvor"); seno // sada de resultados escrever ("Aluno aprovado"); fimse; caso 0 .. 2.9 : // sada de resultados escrever ("Aluno reprovado"); caso 3 .. 6.9 : // sada de resultados escrever ("Aluno em exame"); caso contrrio : // sada de resultados escrever ("mdia invlida"); fimescolha; fim_algoritmo.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

70

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

2. Desenvolva um algoritmo que receba o preo de um produto e seu cdigo de origem e mostre o preo do produto junto de sua procedncia, conforme tabela abaixo: cdigo de origem 1 2, 5, 9 3 , 10 at 15 7 ou 20 qualquer outro regio de procedncia norte sul leste oeste importado

Algoritmo Produto incio_algoritmo // declarao de variveis e/ou constantes Declarar preco numrico_real; codigo numrico_inteiro; // mensagem ao usurio escrever ("Digite o preo e o cdigo de origem do produto"); // entrada de dados ler (preco, codigo); // processamento de dados escolha (codigo) caso 1 : // entrada de dados escrever (preco , " - Norte"); caso 2, 5, 9 : // sada de resultados escrever (preco ," - Sul"); caso 3, 10 .. 15 : // sada de resultados escrever (preco , " - Leste"); caso 7 , 20 : // sada de resultados escrever (preco , "- Oeste"); caso contrrio : // sada de resultados escrever (preco , "- Importado"); fimescolha; fim_algoritmo. 3. Desenvolva um algoritmo que receba dois valores numrico inteiro e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Smbolo da operao + * / Nome da operao adio subtrao multiplicao diviso

Algoritmo Clculo incio_algoritmo // declarao de variveis e/ou constantes Declarar d numrico_real; res, num1, num2 numrico_inteiro; oper alfanumrico; // mensagem ao usurio
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

71

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

escrever ("Digite dois inteiros e a operao"); // entrada de dados ler (num1, num2, oper); // processamento de dados escolha (oper) caso '+' : res num1 + num2; // sada de resultados escrever ("A soma de " , num1 , " com " , num2 , " " , res); caso '-' : res num1 - num2; // sada de resultados escrever ("A diferena de " , num1 , " com " , num2 , " " , res); caso '*' : res num1 * num2; // sada de resultados escrever ("O produto de " , num1 , " com " , num2 , " " , res); caso '/' : d num1 / num2; // sada de resultados escrever ("A diviso de " , num1 , " com " , num2 , " " , d); caso contrrio : // sada de resultados escrever ("operao invlida"); fimescolha; fim_algoritmo. 7.4 Exemplos de Estrutura de Mltipla Escolha em Java 1. Desenvolva um algoritmo que receba quatro notas bimestrais, calcule e mostre a mdia aritmtica dessas quatro notas, bem como, se o aluno foi aprovado (mdia >= 7), reprovado (mdia < 3), em exame (mdia >= 3 ou mdia < 7) ou aprovado com louvor (mdia = 10). class MediaAritmetica { public static void main(String arg [ ]) { // declarao de variveis e/ou constantes double n1, n2, n3, n4, media; int op = 0; // mensagem ao usurio e entrada de dados n1 = Double.parseDouble(JOptionPane.showInputDialog("Digite uma nota bimestral")); n2 = Double.parseDouble(JOptionPane.showInputDialog("Digite uma nota bimestral")); n3 = Double.parseDouble(JOptionPane.showInputDialog("Digite uma nota bimestral")); n4 = Double.parseDouble(JOptionPane.showInputDialog("Digite uma nota bimestral")); // processamento de dados media = (n1 + n2 + n3 + n4) / 4; // sada de resultados System.out.println ("A mdia : " + media); // processamento de dados if (media >= 7 && media <= 10) { op = 1; }
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

72

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

else {

if (media < 7 && media >= 3) { op = 3; } else { if (media >= 0 && media < 3) { op = 2; } }

} switch (op) { case 1 : if (media == 10) { // sada de resultados System.out.println("Aluno aprovado com louvor"); } else { // sada de resultados System.out.println ("Aluno aprovado"); } break; case 2 : // sada de resultados System.out.println ("Aluno reprovado"); break; case 3 : // sada de resultados System.out.println ("Aluno em exame"); break; default : // sada de resultados System.out.println ("mdia invlida"); } // fim do switch System.exit(0); } // fim do void main } // fim da classe 2. Desenvolva um algoritmo que receba o preo de um produto e seu cdigo de origem e mostre o preo do produto junto de sua procedncia, conforme tabela abaixo: Cdigo de origem 1 2, 5, 9 3 , 10 at 15 7 ou 20 qualquer outro regio de procedncia norte sul leste oeste importado

class Produto { public static void main(String arg [ ]) {


Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

73

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

// declarao de variveis e/ou constantes double preco; int codigo; // mensagem ao usurio e entrada de dados preco = Double.parseDouble(JOptionPane.showInputDialog("Digite o preo do produto")); codigo = Integer.parseInt(JOptionPane.showInputDialog("Digite o cdigo de origem do produto")); // processamento de dados switch (codigo) { case 1 : // sada de resultados System.out.println (preco + " - Norte"); break; case 2 : case 5 : case 9 : // sada de resultados System.out.println (preco + " - Sul"); break; case 3 : case 10 : case 11 : case 12 : case 13 : case 14 : case 15 : // sada de resultados System.out.println (preco + " - Leste"); break; case 7 : case 20 : // sada de resultados System.out.println (preco + "- Oeste"); break; default : // sada de resultados System.out.println (preco + "- Importado"); } // fim do switch System.exit(0); } // fim do void main } // fim da classe 3. Desenvolva um algoritmo que receba dois valores numrico inteiro e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Smbolo da operao + * / Nome da operao adio subtrao multiplicao diviso

class Calculo { public static void main(String arg [ ]) { // declarao de variveis e/ou constantes double d; int res, num1, num2, oper; // mensagem ao usurio e entrada de dados num1 = Integer.parseInt(JOptionPane.showInputDialog("Digite um nmero inteiro"));
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

74

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

num2 = Integer.parseInt(JOptionPane.showInputDialog("Digite um nmero inteiro")); oper = Integer.parseInt(JOptionPane.showInputDialog("Digite a operao: \n 1 para somar \n 2 para subtrair \n 3 para multiplicar \n 4 para dividir")); // processamento de dados switch (oper) { case 1 : res = num1 + num2; // sada de resultados System.out.println ("A soma de " + num1 + " com " + num2 + " " + res); break; case 2 : res = num1 - num2; // sada de resultados System.out.println ("A diferena de " + num1 + " com " + num2 + " " + res); break; case 3 : res = num1 * num2; // sada de resultados System.out.println ("O produto de " + num1 + " com " + num2 + " " + res); break; case 4 : d = num1 / num2; // sada de resultados System.out.println ("A diviso de " + num1 + " com " + num2 + " " + d); break; default : // sada de resultados System.out.println ("operao invlida"); } // fim do switch System.exit(0); } // fim do void main } // fim da classe 7.5 Exerccios de Estrutura de Mltipla Escolha Simples e Encadeada 1. Desenvolva um algoritmo que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo, calcule e mostre a rea da figura geomtrica: Figura geomtrica Frmula quadrado lado * lado tringulo (base * altura) / 2 retngulo base * altura trapzio ((Base maior + base menor) * altura) / 2 2. Desenvolva um algoritmo que receba dois valores reais e o cdigo do produto notvel conforme tabela abaixo, calcule e mostre o valor do produto notvel: Cdigo Produto Notvel Frmula 1 Quadrado da diferena de dois nmeros (a b) * (a b) 2 Quadrado da soma de dois nmeros (a + b) * (a + b) 3 soma do quadrado de dois nmeros a*a+b*b 4 Diferena do quadrado de dois nmeros a*ab*b 5 produto da soma com a diferena de dois nmeros (a b) * (a + b)
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

75

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

3. Desenvolva um algoritmo que receba o nome de um lugar e mostre para o usurio o que ele deve fazer nesse lugar, conforme tabela abaixo: Lugar Escola Banco Farmcia Casa Correio O que fazer Estudar Pagar contar Comprar remdios Descansar Remeter cartas

4. Desenvolva um algoritmo que receba um dia da semana e mostre qual(is) a(s) disciplina(s) voc tem naquele dia da semana. 5. Desenvolva um algoritmo que receba um ms do ano e mostre qual(is) o(s) feriado(s) daquele ms. 6. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa e mostre qual o signo dessa pessoa. 7. Desenvolva um algoritmo que receba o cdigo de determinado produto e mostre a sua classificao, conforme a tabela abaixo: Cdigo 10 ou 11 12 13, 14 ou 15 19, 26 at 30 17 at 25 Qualquer outro cdigo Classificao alimento no perecvel alimento perecvel vesturio higiene pessoal limpeza e utenslios domsticos invlido

8. Desenvolva um algoritmo que receba a idade de um atleta e mostre a sua classificao em categorias, conforme a tabela abaixo: Idade 3 at 4 anos 5 at 7 anos 8 at 10 anos 11 at 13 anos 14 at 17 anos 18 at 50 anos mais que 50 Categoria Mirim Infantil A Infantil B Juvenil A Juvenil B Adulto Veterano

9. Desenvolva um algoritmo que receba o cdigo da condio de pagamento e o preo de um produto, calcule o que deve ser pago pelo produto e mostre a condio de pagamento e o preo a ser pago, conforme a tabela abaixo: Cdigo A B C D Condio de pagamento vista em dinheiro ou cheque tem 20% de desconto vista em carto de crdito tem 10% de desconto em 2 vezes, preo normal de etiqueta sem juros em 3 vezes, preo normal de etiqueta mais juros de 15%

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

76

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

10. Desenvolva um algoritmo que receba o valor de dois nmeros inteiros, o smbolo da operao aritmtica desejada, calcule e mostre o resultado da operao aritmtica, conforme a tabela abaixo: smbolo + * / ^ m q Operao aritmtica adio subtrao Multiplicao diviso Potenciao Resto da diviso Quociente da diviso

11. Desenvolva um algoritmo que receba o nmero de horas extras de um funcionrio e o nmero de horas que um funcionrio faltou ao trabalho, calcule e mostre a gratificao de natal desse funcionrio sabendo que o valor da gratificao calculada conforme frmula e tabela abaixo: G = (nmero de horas extras) 2/3 * (nmero de horas que faltou) G maior ou igual a 5.000,00 menor que 5.000,00 e maior ou igual que 2.500,00 menor que 2.500,00 e maior ou igual que 1.000,00 menor que 1.000,00 e maior ou igual que 500 menor que 500,00 gratificao 100,00 200,00 300,00 400,00 500,00

12. Desenvolva um algoritmo que receba a idade e o peso de uma pessoa, verifique e mostre em qual grupo de risco essa pessoa se encaixa, conforme a tabela abaixo: Idade menores de 20 de 20 a 50 maiores de 50 At 60 (inclusive) 9 6 3 Peso Entre 60 e 90 (inclusive) 8 5 2 acima de 90 7 4 1

13. Desenvolva um algoritmo que receba o cdigo do produto comprado e a quantidade comprada de um produto, calcule e mostre o preo unitrio do produto, conforme a tabela abaixo, e o preo total da nota: Cdigo do produto 1a5 6, 8 a 15 7 16, 17 Preo do produto 10,00 50,00 15,00 25,00

14. Desenvolva um algoritmo que receba o salrio de um funcionrio, calcule e mostre o valor do aumento salarial e o salrio final a ser recebido pelo funcionrio, considerando que: - se o funcionrio recebe menos que 500,00, ter reajuste de 100%; - se o funcionrio recebe mais ou igual a 500,00 e menos que 1.000,00, ter reajuste de 75%; - se o funcionrio recebe mais ou igual a 1.000,00 e menos que 1.500,00, ter reajuste de 50%;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

77

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

- se o funcionrio 25%; - se o funcionrio 10%; - se o funcionrio 5%; - se o funcionrio

recebe mais ou igual a 1.500,00 e menos que 2.000,00, ter reajuste de recebe mais ou igual a 2.000,00 e menos que 3.000,00, ter reajuste de recebe mais ou igual a 3.000,00 e menos que 5.000,00, ter reajuste de recebe mais que 5.000,00, ter reajuste de 2%.

15. Desenvolva um algoritmo que receba o tipo de investimento e o valor do investimento, calcule e mostre o valor corrigido do investimento aps o perodo de 30 dias, considerando que o rendimento mensal para cada tipo de investimento varia conforme a tabela abaixo: Tipo de investimento Rendimento Poupana 3% Fundo de renda fixa 5% CDB 6% Aes 10% 16. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa, verifique e mostre em qual estao do ano (primavera, vero, outono ou inverno) esta pessoa nasceu. 17. Desenvolva um algoritmo que receba trs valores numrico real e um cdigo e mostreos conforme a tabela abaixo: cdigo 1 2 3 4 5 6 apresentar apresentar apresentar apresentar apresentar apresentar Operao os trs valores em ordem crescente os trs valores em ordem decrescente somente os valores pares somente os valores mpares somente os valores positivos somente os valores negativos

18. Desenvolva um algoritmo que receba o preo atual e a venda mensal mdia de um produto, calcule e mostre o novo preo, sabendo que: - se a venda mdia mensal for menor que 500 e o preo atual menor que 30,00, ento o produto sofre um aumento de 10%; - se a venda mdia mensal for maior ou igual a 500 e menor que 1000 e o preo atual maior ou igual a 30,00 e menor que 80,00, ento o produto sofre um aumento de 15%; - se a venda mensal mdia for maior ou igual a 1000 e o preo atual maior ou igual a 80,00, ento o produto sofre uma diminuio de 5%. 18. Desenvolva um algoritmo que receba o raio de uma circunferncia e um cdigo, calcule e mostre os dados da circunferncia, conforme a tabela abaixo: Cdigo x y z Operao calcula o comprimento: C = 2 . . raio calcula a rea: A = . raio2 calculo o volume: V = 4/3 . . raio3

20. Desenvolva um algoritmo que receba um caracter, verifique e mostre se o caracter digitado uma vogal, uma consoante, ou qualquer outro caracter. 21. Desenvolva um algoritmo que recebe o nome de uma pessoa, verifique e mostre qual a sua cor e fruta preferida, conforme a tabela abaixo:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

78

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Nome Maria Jos Joo

Preferncia Cor vermelho azul verde fruta morango figo uva

22. Desenvolva um algoritmo que recebe o nome de um Pas, verifique e mostre como caractersticas a sua capital, continente a que pertence e idioma oficial, conforme tabela abaixo: Pas Brasil Japo Itlia Arglia Austrlia capital Brasilia Tquio Roma Argel Canberra Caractersticas continente Amrica sia Europa frica Oceania idioma Portugus Japons Italiano Francs Ingls

23. Desenvolva um algoritmo que recebe o nome de uma bebida, verifique e mostre como caractersticas dessa bebida uma fruta, um ingrediente e que dia da semana essa bebida oferecida, conforme tabela abaixo: Bebida Magro Forte Vitaminado Poderoso Saudvel fruta Abacaxi Pra Pssego Acerola Laranja Caractersticas ingrediente Ginseng Gelia Guaran Germe de Trigo Algas dia da semana Segunda-feira Tera-feira Quarta-feira Quinta-feira Sexta-feira

24. Desenvolva um algoritmo que recebe o nome de uma famlia, verifique e mostre o nome da fonte e o dia de instalao dessa fonte, conforme tabela abaixo: Famlia Tompson Dorneles Aguiar Santos Fonte Nome Osis Floresta Tropical Gruta Po de Acar Instalao Sbado Domingo Sbado Domingo

25. Desenvolva um algoritmo que recebe o nmero da etapa de uma viagem de barco, verifique e mostre o nome do barco, a distncia percorrida e a vista dessa viagem, conforme tabela abaixo: Etapa primeira segunda terceira quarta quinta barco Netuno Pluto Saturno Marte Urano Viagem Distncia 3 quilmetros 4 quilmetros 5 quilmetros 2 quilmetros 8 quilmetros Vista Canho ndios Runas Igreja Gruta

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

79

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

26. Desenvolva um algoritmo que recebe o nome de um museu, o horrio de abertura, o horrio de fechamento e o valor da entrada, mostre os dados do museu, quantas horas o museu fica aberto e o troco que uma pessoa deve receber se possui R$ 50,00 para pagar a entrada, conforme tabela abaixo: Museu Arte Moderna Cartas e Manuscritos Instrumentos Musicais Pedras Preciosas Relquias horrio abertura 8 horas 10 horas 12 horas 14 horas 16 horas Dados horrio de fechamento 16 horas e 30 minutos 17 horas e 15 minutos 17 horas e 30 minutos 18 horas e 10 minutos 18 horas e 45 minutos valor Canho ndios Runas Igreja Gruta

27. Desenvolva um algoritmo que recebe o nome de uma vila, verifique e mostre o nome do rio que passa nessa vila e a extenso desse rio, conforme a tabela abaixo: Vila Vila urea Vila do Retorno Vila da Luz Vila dos Pinheiros Vila Santana Rio Nome Rio Coral Rio Grande Rio Mesquita Rio Ronco Rio da Viva Extenso 21 km 24 km 28 km 32 km 33 km

28. Desenvolva um algoritmo que recebe uma data, verifique e mostre qual atividade foi desenvolvida nesta data, como estava o tempo e a temperatura, conforme tabela abaixo: Data 17 de maio 18 de maio 19 de maio 20 de maio 21 de maio Atividade Caminhada Leitura Computador Pesca Bicicleta Dados tempo Frente Fria Nublado Chuva Fina Sol Vento temperatura 16 graus 22 graus 18 graus 25 graus 20 graus

29. Desenvolva um algoritmo que recebe um dia da semana, verifique e mostre qual a avaliao realizada nesta data, qual o horrio e o grau de dificuldade, conforme tabela abaixo: Data segunda-feira tera-feira quarta-feira quinta-feira sexta-feira Disciplina Lgica de Programao Lgica Matemtica Fundamentos Software Fundamentos Hardware Ingls Dados horrio 19h30 as 21h 21h30 as 23h 19h30 as 21h 21h30 as 23h 19h30 as 21h dificuldade mdio difcil fcil fcil mdio

30. Desenvolva um algoritmo que recebe o nome de cinco alunos de sua sala, verifique e mostre qual a idade, o sexo e o estado civil de cada um deles.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

80

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Captulo 8 Estrutura de Repetio


Quando desenvolvemos um algoritmo ou programa estruturado, muitas vezes, precisamos repetir parte do algoritmo, um comando ou um conjunto de comandos. Podemos fazer isso repetindo esse bloco quantas vezes forem necessrias, mas isso invivel. Para solucionar esse problema, podemos usar as estruturas de repetio. No entanto, precisamos saber controlar quantas vezes o algoritmo deve repetir determinada parte do algoritmo. Para isso, estudaremos o fluxo de controle chamado estrutura de repetio. Uma estrutura de repetio um fluxo de controle utilizado para decidir quantas vezes determinado conjunto de comandos se repetir dentro do algoritmo. Uma estrutura de repetio determina qual conjunto de comandos ou bloco ser executado aps uma condio ser avaliada. Essa condio representada por expresses lgicas e relacionais que podem ou no ser satisfeitas, isto , podem retornar o valor verdadeiro ou falso. Enquanto essa condio estiver retornando verdadeiro, o conjunto de comandos ser executado, parando somente quando o resultado da avaliao da condio for falso. Numa estrutura de repetio, o nmero de repeties pode ser indeterminado, mas necessariamente finito. As estruturas de repetio tambm podem estar encadeadas, ou seja, uma estrutura de repetio dentro de outra estrutura de repetio. s vezes, precisamos repetir vrias vezes uma mesma estrutura de repetio, nesses casos que utilizamos as estruturas de repeties encadeadas. Uma estrutura de repetio pode ser construda dentro de uma estrutura de deciso, seja ela simples, composta ou encadeada, bem como dentro de uma estrutura de mltipla escolha. Da mesma forma, qualquer estrutura de deciso ou de mltipla escolha pode ser construda dentro de uma estrutura de repetio. Temos trs tipos de estrutura de repetio: enquanto, faa/enquanto e para. Cada uma dessas estruturas de repetio pode ser simples ou encadeada. Veremos a seguir como e quando trabalhar com cada uma delas. 8.1 Estrutura de Repetio Enquanto Uma estrutura de repetio enquanto pode ser utilizada quando o algoritmo precisa testar determinada condio antes de executar um conjunto de comandos repetidas vezes. Nesse caso, uma condio avaliada e se seu resultado for verdadeiro, o conjunto de comandos dentro da estrutura de repetio enquanto executado e, aps essa execuo, a condio novamente avaliada. Por outro lado, se o resultado da avaliao for falso, esse conjunto de comandos no ser executado e o fluxo do algoritmo segue normalmente. Note que nessa estrutura de repetio, pode ocorrer que o conjunto de comando no seja executado nenhuma vez. Pseudocdigo Na estrutura de repetio enquanto, utilizaremos as palavras enquanto e faa que representam as palavras principais dessa estrutura e a palavra fimenquanto; para determinar o fim do bloco de execuo da estrutura. A estrutura de repetio enquanto para pseudocdigo segue a seguinte regra sinttica:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

81

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

<inicializao da varivel de controle>; enquanto (<condio>) faa <comandos>; <atualizao da varivel de controle>; fimenquanto; Por exemplo: x 0; enquanto (x < 3) faa escrever ("O valor de x : " , x); x x + 1; fimenquanto; Nesse exemplo, o valor inicial da varivel x 0. Na primeira vez que a condio x<3 avaliada, seu resultado verdadeiro, pois 0 menor que 3, ento o comando escrever(...); e a atualizao de x (x passa a ser 1) so executados. Na segunda vez que a condio x<3 avaliada, seu resultado verdadeiro, pois 1 menor que 3, ento o comando escrever(...); e a atualizao de x (x passa a ser 2) so executados. Na terceira vez que a condio x<3 avaliada, seu resultado verdadeiro, pois 2 menor que 3, ento o comando escrever(...); e a atualizao de x (x passa a ser 3) so executados. Na quarta vez que a condio x<3 avaliada, seu resultado falso, pois 3 no menor que 3, ento os comandos dentro da estrutura de repetio enquanto no so executados e essa estrutura finalizada, seguindo com o fluxo do algoritmo aps esta estrutura. O resultado da execuo deste exemplo : O valor de x 0 O valor de x 1 O valor de x 2 Java No Java, para a estrutura de repetio enquanto, utilizaremos a palavra while que representa a palavra principal dessa estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de repetio enquanto para Java segue a seguinte regra sinttica: <inicializao da varivel de controle>; while (<condio>) { <comandos>; <atualizao da varivel de controle>; } Por exemplo: x 0; while (x < 3) { System.out.println ("O valor de x : " + x); x x + 1; }

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

82

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Nesse exemplo, o valor inicial da varivel x 0. Na primeira vez que a condio x<3 avaliada, seu resultado verdadeiro, pois 0 menor que 3, ento o comando System.out.println(...); e a atualizao de x (x passa a ser 1) so executados. Na segunda vez que a condio x<3 avaliada, seu resultado verdadeiro, pois 1 menor que 3, ento o comando System.out.println (...); e a atualizao de x (x passa a ser 2) so executados. Na terceira vez que a condio x<3 avaliada, seu resultado verdadeiro, pois 2 menor que 3, ento o comando System.out.println (...); e a atualizao de x (x passa a ser 3) so executados. Na quarta vez que a condio x<3 avaliada, seu resultado falso, pois 3 no menor que 3, ento os comandos dentro da estrutura de repetio while no so executados e essa estrutura finalizada, seguindo com o fluxo do algoritmo aps essa estrutura. O resultado da execuo desse exemplo : O valor de x 0 O valor de x 1 O valor de x 2 Encadeamento Na estrutura de repetio enquanto, utilizaremos as palavras enquanto e faa que representam as palavras principais dessa estrutura e a palavra fimenquanto; para determinar o fim do bloco de execuo dessa estrutura. A estrutura de repetio enquanto encadeada para pseudocdigo segue a seguinte regra sinttica: <inicializao da varivel de controle 1>; enquanto (<condio1>) faa <inicializao da varivel de controle 2>; enquanto (<condio2>) faa <comandos que podem ser outra estrutura de repetio enquanto>; <atualizao da varivel de controle 2>; fimenquanto; <atualizao da varivel de controle 1>; fimenquanto; No Java, para a estrutura de repetio enquanto, utilizaremos a palavra while que representa a palavra principal dessa estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de repetio while encadeada para Java segue a seguinte regra sinttica: <inicializao da varivel de controle 1>; while (<condio1>) { <inicializao da varivel de controle 2>; while (<condio2>) { <comandos que podem ter outra estrutura de repetio while>; <atualizao da varivel de controle 2>; } <atualizao da varivel de controle 1>; } Para um melhor entendimento do encadeamento nas estruturas de repetio enquanto, resolveremos o seguinte exemplo:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

83

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Desenvolva um algoritmo que calcula o fatorial dos nmeros inteiros de 5 at 15. Nesse exemplo, precisamos usar uma estrutura de repetio enquanto para calcular o fatorial de um nmero e uma outra estrutura de repetio enquanto para passar por todos os nmeros de 5 at 15. Note que a primeira estrutura de repetio est dentro da segunda estrutura de repetio, ou seja, elas esto encadeadas. A resoluo desse exerccio em pseudocdigo a seguinte: Algoritmo ExemploEnquanto incio_algoritmo Declarar i, num, fat numrico_inteiro; // entrada de dados num 5; // processamento de dados enquanto (num <= 15) faa fat num; i num 1; enquanto (i > 1) faa fat fat * i; i i 1; fimenquanto; // sada de dados escrever ("O valor do fatorial de " , num , " " , fat); num num + 1; fimenquanto; fim_algoritmo. A soluo desse exerccio em Java a seguinte: class ExemploEnquanto { public static void main(String args []) { int i, num, fat; num = 5; while (num <= 15) { fat = num; i = num 1; while (i > 1) { fat = fat * i; i = i 1; } // segundo while System.out.print ("O valor do fatorial de " + num + " " + fat + "\n"); num = num + 1; } // primeiro while } // main } // classe

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

84

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

8.2 Faa/Enquanto Uma estrutura de repetio faa/enquanto pode ser utilizada quando o algoritmo precisa testar determinada condio depois de executar um conjunto de comandos, passando por esses passos repetidas vezes. Nesse caso, um conjunto de comandos dentro da estrutura de repetio faa/enquanto executado e, aps esta execuo, uma condio avaliada e, se seu resultado for verdadeiro, o conjunto de comandos novamente executado. Por outro lado, se o resultado da avaliao for falso, esse conjunto de comandos no volta a ser executado e o fluxo do algoritmo segue normalmente. Note que nessa estrutura de repetio, pelo menos uma vez, o conjunto de comandos dentro da estrutura de repetio faa/enquanto executado. Pseudocdigo Na estrutura de repetio faa/enquanto, utilizaremos as palavras faa e enquanto que representam as palavras principais dessa estrutura e a prpria palavra enquanto determinar o fim do bloco de execuo da estrutura. A estrutura de repetio faa/enquanto para pseudocdigo segue a seguinte regra sinttica: <inicializao da varivel de controle>; faa <comandos>; <atualizao da varivel de controle>; enquanto(<condio>); Por exemplo: x 0; faa escrever ("O valor de x : " , x); x x + 1; enquanto (x < 3); Neste exemplo, o valor inicial da varivel x 0. Na primeira vez que a estrutura de repetio faa/enquanto solicitada, o comando escrever(...); e a atualizao de x (x passa a ser 1) so executados e a condio x<3 avaliada. O resultado dessa avaliao verdadeiro, pois 1 menor que 3, ento a estrutura de repetio faa/enquanto novamente solicitada, o comando escrever(...); e a atualizao de x (x passa a ser 2) so executados e a condio x<3 avaliada. O resultado dessa avaliao verdadeiro, pois 2 menor que 3, ento a estrutura de repetio faa/enquanto novamente solicitada, o comando escrever(...); e a atualizao de x (x passa a ser 3) so executados e a condio x<3 avaliada. O resultado dessa avaliao falso, pois 3 no menor que 3, ento essa estrutura finalizada, seguindo com o fluxo do algoritmo aps essa estrutura. Resultado da execuo deste exemplo: O valor de x 0 O valor de x 1 O valor de x 2

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

85

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Java No Java, para a estrutura de repetio faa/enquanto, utilizaremos as palavras do e while que representam as palavras principais dessa estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de repetio faa/enquanto para Java segue a seguinte regra sinttica: <inicializao da varivel de controle>; do { <comandos>; <atualizao da varivel de controle>; } while (<condio>); Por exemplo: x = 0; do { System.out.println ("O valor de x : " + x); x = x + 1; } while (x < 3); Nesse exemplo, o valor inicial da varivel x 0. Na primeira vez que a estrutura de repetio do/while solicitada, o comando System.out.println(...); e a atualizao de x (x passa a ser 1) so executados e a condio x<3 avaliada. O resultado dessa avaliao verdadeiro, pois 1 menor que 3, ento a estrutura de repetio do/while novamente solicitada, o comando System.out.println (...); e a atualizao de x (x passa a ser 2) so executados e a condio x<3 avaliada. O resultado dessa avaliao verdadeiro, pois 2 menor que 3, ento a estrutura de repetio do/while novamente solicitada, o comando System.out.println (...); e a atualizao de x (x passa a ser 3) so executados e a condio x<3 avaliado. O resultado dessa avaliao falso, pois 3 no menor que 3, ento essa estrutura finalizada, seguindo com o fluxo do algoritmo aps essa estrutura. Resultado da execuo desse exemplo: O valor de x 0 O valor de x 1 O valor de x 2 Encadeamento Na estrutura de repetio faa/enquanto, utilizaremos as palavras faa e enquanto que representam as palavras principais dessa estrutura e a prpria palavra enquanto determinar o fim do bloco de execuo dessa estrutura. A estrutura de repetio faa/enquanto encadeada para pseudocdigo segue a seguinte regra sinttica: <inicializao da varivel de controle 1>; faa <inicializao da varivel de controle 2>; faa <comandos que podem ter outra estrutura de repetio faa/enquanto>; <atualizao da varivel de controle 2>; enquanto(<condio1>); <atualizao da varivel de controle 1>; enquanto(<condio2>);
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

86

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

No Java, para a estrutura de repetio faa/enquanto, utilizaremos as palavras do e while que representam as palavras principais dessa estrutura e chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de repetio faa/enquanto encadeado para Java segue a seguinte regra sinttica: <inicializao da varivel de controle 1>; do { <inicializao da varivel de controle 2>; do { <comandos que podem ter outra estrutura de repetio do/while>; <atualizao da varivel de controle 2>; } while (<condio1>); <atualizao da varivel de controle 2>; } while (<condio2>); Para um melhor entendimento do encadeamento nas estruturas de repetio faa/enquanto, resolveremos o seguinte exemplo: Desenvolva um algoritmo que calcula o fatorial dos nmeros inteiros de 5 at 15. Nesse exemplo, precisamos usar uma estrutura de repetio faa/enquanto para calcular o fatorial de um nmero e uma outra estrutura de repetio faa/enquanto para passar por todos os nmeros de 5 at 15. Note que a primeira estrutura de repetio est dentro da segunda estrutura de repetio, ou seja, elas esto encadeadas. A resoluo desse exerccio em pseudocdigo a seguinte: Algoritmo ExemploFacaEnquanto incio_algoritmo Declarar i, num, fat numrico_inteiro; num 5; // entrada de dados // processamento de dados faa fat num; i num 1; faa fat fat * i; i i 1; enquanto (i > 1); escrever ("O valor do fatorial de " , num , " " , fat); // sada de dados num num + 1; enquanto (num <= 15); fim_algoritmo. A soluo desse exerccio em Java a seguinte:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

87

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

class ExemploFacaEnquanto { public static void main(String args []) { int i, num, fat; num = 5; do { fat = num; i = num 1; do { fat = fat * i; i = i 1; } while (i > 1); System.out.print ("O valor do fatorial de " + num + " " + fat); num = num + 1; } while (num <= 15); } // main } // classe 8.3 Para Uma estrutura de repetio para pode ser utilizada quando o algoritmo precisa ter definida a quantidade de vezes que um conjunto de comandos deve ser executado. Nesse caso, a varivel de controle, sua inicializao e finalizao, bem como sua atualizao, fazem parte do cabealho da estrutura de repetio para e o conjunto de comandos dentro da estrutura de repetio para executado a quantidade de vezes determinada no cabealho dessa estrutura. Assim que o nmero de repeties dessa estrutura for finalizado, o fluxo do algoritmo segue normalmente. Note que nessa estrutura de repetio, pode ocorrer que o conjunto de comandos no seja executado nenhuma vez. Pseudocdigo Na estrutura de repetio para, utilizaremos as palavras para, de , at, passo e faa que representam as palavras principais dessa estrutura e a palavra fimpara; para determinar o fim do bloco de execuo dessa estrutura. A estrutura de repetio para para pseudocdigo segue a seguinte regra sinttica: para <varivel de controle> de <valor inicial> at <valor final> passo <atualizao> faa <comandos>; fimpara; Por exemplo: para x de 0 at 2 passo +1 faa escrever ("O valor de x : " , x); fimpara; Nesse exemplo, na primeira vez que a estrutura de repetio do para for solicitada, o valor inicial da varivel x 0, ento o comando escrever(...); e a atualizao de x (x passa a ser
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

88

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

1) so executados. Na segunda vez que a estrutura de repetio do para for solicitado, o valor de x 1, ento o comando escrever(...); e a atualizao de x (x passa a ser 2) so executados. Na terceira vez que a estrutura de repetio do para for solicitado, o valor de x 2, ento o comando escrever(...); e a atualizao de x (x passa a ser 3) so executados. Na quarta vez que a estrutura de repetio do para for solicitado, o valor de x 3, ento os comandos dentro da estrutura de repetio para no so executados e essa estrutura finalizada, seguindo com o fluxo do algoritmo aps essa estrutura. O resultado da execuo desse exemplo : O valor de x 0 O valor de x 1 O valor de x 2 Java No Java, para a estrutura de repetio para, utilizaremos a palavra for que representa a palavra principal dessa estrutura e a chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de repetio para para Java segue a seguinte regra sinttica: for (<var de controle> = <vlr inicial> ; <condio> ; <atualizao>) { <comandos>; } Por exemplo: for (x=0 ; x<3 ; x++) { System.out.println ("O valor de x : " + x); } Nesse exemplo, na primeira vez que a estrutura de repetio do for for solicitada, o valor inicial da varivel x 0, ento o comando System.out.println(...); e a atualizao de x (x passa a ser 1) so executados. Na segunda vez que a estrutura de repetio do for for solicitada, o valor de x 1, ento o comando System.out.println (...); e a atualizao de x (x passa a ser 2) so executados. Na terceira vez que a estrutura de repetio do for for solicitada, o valor de x 2, ento o comando System.out.println (...); e a atualizao de x (x passa a ser 3) so executados. Na quarta vez que a estrutura de repetio do for for solicitada, o valor de x 3, ento os comandos dentro da estrutura de repetio for no so executados e essa estrutura finalizada, seguindo com o fluxo do algoritmo aps esta estrutura. O resultado da execuo desse exemplo : O valor de x 0 O valor de x 1 O valor de x 2

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

89

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

Encadeamento Na estrutura de repetio para, utilizaremos as palavras para, de, at, passo e faa que representam as palavras principais dessa estrutura e a palavra fimpara; para determinar o fim do bloco de execuo dessa estrutura. A estrutura de repetio para encadeado para pseudocdigo segue a seguinte regra sinttica: para <var de controle 1> de <valor inicial 1> at <vlr final> passo <atualizao 1> faa para <var de controle 2> de <vlr inicial 2> at <vlr final> passo <atualizao 2> faa <comandos que podem ter outra estrutura de repetio para>; fimpara; fimpara; No Java, para a estrutura de repetio para, utilizaremos a palavra for que representa a palavra principal dessa estrutura e a chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte dessa estrutura. A estrutura de repetio para encadeado para Java segue a seguinte regra sinttica: for (<var de controle 1> = <vlr inicial 1> ; <condio 1> ; <atualizao 1>) { for (<var de controle 2> = <vlr inicial 2> ; <condio 2> ; <atualizao 2>) { <comandos que podem ter outra estrutura de repetio for>; } } Para um melhor entendimento do encadeamento nas estruturas de repetio para, resolveremos o seguinte exemplo: Desenvolva um algoritmo que calcule o fatorial dos nmeros inteiros de 5 at 15. Nesse exemplo, precisamos usar uma estrutura de repetio para para calcular o fatorial de um nmero e uma outra estrutura de repetio para para passar por todos os nmeros de 5 at 15. Note que a primeira estrutura de repetio est dentro da segunda estrutura de repetio, ou seja, elas esto encadeadas. A resoluo deste exerccio em pseudocdigo a seguinte: Algoritmo ExemploPara incio_algoritmo Declarar i, num, fat numrico_inteiro; // processamento de dados para num de 5 at 15 passo +1 faa fat num; para i de (num 1) at 2 passo 1 faa fat fat * i; fimpara; escrever ("O valor do fatorial de " , num , " " , fat); // sada de dados fimpara; fim_algoritmo. A soluo desse exerccio em Java a seguinte:
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

90

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

class ExemploPara { public static void main(String args []) { int i, num, fat; for (num = 5 ; num <= 15 ; num++) { fat = num; for (i = (num 1) ; i > 1 ; i) { fat = fat * i; } // segundo for System.out.print ("O valor do fatorial de " + num + " " + fat); } // primeiro for } // main } // classe 8.4 Exemplo de Estrutura de Repetio Enquanto, Faa/Eqto. e Para em pseudocdigo 1. Desenvolva um algoritmo que calcula a soma de todos os nmeros compreendidos entre 1 e 100. // na estrutura de repetio enquanto Algoritmo Soma Declarar i, s 0 numrico_inteiro; i 1; enquanto (i <= 100) faa s s + i; i i + 1; fimenquanto; escreva ("A somatria de 1 at 100 " , s); fim_algoritmo. // na estrutura de repetio faa/enquanto Algoritmo Soma Declarar i, s 0 numrico_inteiro; i 1; faa s s + i; i i + 1; enquanto (i <= 100); escreva ("A somatria de 1 at 100 " , s); fim_algoritmo. // na estrutura de repetio para Algoritmo Soma Declarar
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

91

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

i, s 0 numrico_inteiro; para i de 1 at 100 passo +1 faa s s + i; fimpara; escreva ("A somatria de 1 at 100 " , s); fim_algoritmo. 2. Desenvolva um algoritmo que calcula a soma de todos os nmeros pares compreendidos entre 1 e 100. // na estrutura de repetio enquanto Algoritmo Soma Declarar i, s 0 numrico_inteiro; i 1; enquanto (i <= 100) faa se ((i mod 2) = 0) ento s s + i; fimse; i i + 1; fimenquanto; escreva ("A somatria dos nmeros pares de 1 at 100 " , s); fim_algoritmo. // na estrutura de repetio faa/enquanto Algoritmo Soma Declarar i, s 0 numrico_inteiro; i 1; faa se ((i mod 2) = 0) ento s s + i; fimse; i i + 1; enquanto (i <= 100); escreva ("A somatria dos nmeros pares de 1 at 100 " , s); fim_algoritmo. // na estrutura de repetio para Algoritmo Soma Declarar i, s 0 numrico_inteiro; para i de 1 at 100 passo +1 faa se ((i mod 2) = 0) ento s s + i; fimse; fimpara;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

92

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

escreva ("A somatria dos nmeros pares de 1 at 100 " , s); fim_algoritmo. 3. Desenvolva um algoritmo que mostra um menu de opes para: calcular a soma de todos os nmeros compreendidos entre 1 e 100; calcular a soma de todos os nmeros pares compreendidos entre 1 e 100; e calcular a soma de todos os nmeros divisveis por 3. Algoritmo Soma Declarar op, i, s 0 numrico_inteiro; faa escreva ("Digite 1 para soma de todos os nmeros entre 1 e 100\n"); escreva ("Digite 2 para soma de todos os nmeros pares entre 1 e 100\n"); escreva ("Digite 3 para soma de todos os nmeros divisveis por 3 entre 1 e 100\n"); escreva ("Digite 0 para sair do programa\n"); leia (op); escolha (op) caso 1 : incio i 1; enquanto (i <= 100) faa s s + i; i i + 1; fimenquanto; escreva ("A somatria de 1 at 100 " , s); fim; caso 2 : incio i 1; faa se ((i mod 2) = 0) ento s s + i; fimse; i i + 1; enquanto (i <= 100); escreva ("A somatria dos nmeros pares de 1 at 100 " , s); fim; caso 3 : incio para i de 1 at 100 passo +1 faa se ((i mod 3) = 0) ento s s + i; fimse; fimpara; escreva ("A somatria dos nmeros divisveis por 3 de 1 at 100 " , s); fim; caso 0 : incio escreva ("Saindo do programa!"); fim; caso contrrio : escreva ("opo invlida, tente novamente"); fimescolha; enquanto (op <> 0); fim_algoritmo.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

93

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

8.5 Exemplo de Estrutura de Repetio Enquanto, Faa/Enquanto e Para em Java 1. Desenvolva um algoritmo que calcula a soma de todos os nmeros compreendidos entre 1 e 100. // na estrutura de repetio enquanto class Soma { public static void main (String args [ ]) { int i, s = 0; i = 1; while (i <= 100) { s = s + i; i = i + 1; } // fim do while System.out.println ("A somatria de 1 at 100 " + s); System.exit(0); } // fim do void main } // fim da classe // na estrutura de repetio faa/enquanto class Soma { public static void main (String args [ ]) { int i, s = 0; i = 1; do { s = s + i; i = i + 1; } while (i <= 100); System.out.println ("A somatria de 1 at 100 " + s); System.exit(0); } // fim do void main } // fim da classe // na estrutura de repetio para class Soma { public static void main (String args [ ]) { int i, s = 0; for ( i = 1 ; i <= 100 ; i++ ) { s = s + i; } System.out.println ("A somatria de 1 at 100 " + s); System.exit(0);
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

94

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

} // fim do void main } // fim da classe 2. Desenvolva um algoritmo que calcula a soma de todos os nmeros pares compreendidos entre 1 e 100. // na estrutura de repetio enquanto class Soma { public static void main (String args [ ]) { int i, s = 0; i = 1; while (i <= 100) { if ((i % 2) == 0) { s = s + i; } // fim do if i = i + 1; } // fim do while System.out.println ("A somatria dos nmeros pares de 1 at 100 " + s); System.exit(0); } // fim do void main } // fim da classe // na estrutura de repetio faa/enquanto class Soma { public static void main (String args [ ]) { int i, s = 0; i = 1; do { if ((i % 2) == 0) { s = s + i; } // fim do se i = i + 1; } while (i <= 100); System.out.println ("A somatria dos nmeros pares de 1 at 100 " + s); System.exit(0); } // fim do void main } // fim da classe // na estrutura de repetio para class Soma { public static void main (String args [ ]) { int i, s = 0;
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

95

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

for ( i = 1 ; i <= 100 ; i++ ) { if ((i % 2) == 0) { s = s + i; } // fim do if } // fim do for System.out.println ("A somatria dos nmeros pares de 1 at 100 " + s); System.exit(0); } // fim do void main } // fim da classe 3. Desenvolva um algoritmo que mostra um menu de opes para: calcular a soma de todos os nmeros compreendidos entre 1 e 100; calcular a soma de todos os nmeros pares compreendidos entre 1 e 100; e calcular a soma de todos os nmeros divisveis por 3. class Soma { public static void main (String args [ ]) { int op, i, s; do { s = 0; op = Integer.parseInt(JOptionPane.showInputDialog("Digite 1 para soma de todos os nmeros entre 1 e 100 \nDigite 2 para soma de todos os nmeros pares entre 1 e 100 \nDigite 3 para soma de todos os nmeros divisveis por 3 entre 1 e 100 \nDigite 0 para sair do programa")); switch (op) { case 1 : { i = 1; while (i <= 100) { s = s + i; i = i + 1; } // fim do while System.out.println("A somatria de 1 at 100 " + s); } break; case 2 : { i = 1; do { if ((i % 2) == 0) { s = s + i; } // fim do if i = i + 1; } while (i <= 100); System.out.println ("A somatria dos nmeros pares de 1 at 100 " + s); } break; Copyright IBTA Instituto Brasileiro de Tecnologia Avanada 96

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

case 3 : { for ( i = 1 ; i <= 100 ; i++ ) { if ((i % 3) == 0) { s = s + i; } // fim do if } // fim do for System.out.println ("A somatria dos nmeros divisveis por 3 de 1 at 100 " + s); } break; case 0 : { System.out.println("Saindo do programa!"); System.exit(0); } break; default : System.out.println ("opo invlida, tente novamente"); } // fim do switch } while (op != 0); } // fim do void main } // fim da classe 8.6 Exerccios de Estrutura de Repetio Enquanto, Faa/Enquanto e Para Para todos os exerccios abaixo, construir um algoritmo para cada estrutura de repetio, ou seja, um usando o Enquanto, um usando o Faa/Enquanto e outro usando o Para. 1. Desenvolva um algoritmo que calcule e mostre o quadrado dos nmeros inteiros compreendidos entre 10 e 150. 2. Desenvolva um algoritmo que receba um nmero inteiro, calcule e mostre o seu fatorial. 3. Desenvolva um algoritmo que receba um nmero N, calcule e mostre o valor da seguinte srie: Srie = 1 + 1/2 + 1/3 + ... + 1/N. 4. Desenvolva um algoritmo que receba um nmero, calcule e mostre os resultados da tabuada desse nmero. 5. Desenvolva um algoritmo que receba dois nmeros inteiros, verifique qual o maior entre eles, calcule e mostre o resultado da somatria dos nmeros mpares compreendidos entre esses dois nmeros. 6. Desenvolva um algoritmo que receba um nmero N, calcule e mostre o valor da seguinte srie: Srie = 1 + 1/1! + 1/2! + 1/3! + ... + 1/N!. 7. Desenvolva um algoritmo que receba um nmero inteiro N, calcule e mostre a srie de Fibonacci at o seu N-simo termo. A srie de Fibonacci dada pela seguinte seqncia: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ... etc. 8. Desenvolva um algoritmo que receba 100 nmeros reais, verifique e mostre o maior e o menor nmero recebido.
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

97

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

9. Desenvolva um algoritmo que calcule o nmero de gros de trigo dispostos num tabuleiro de xadrez e que segue a seguinte regra: no primeiro quadro, colocar um gro de trigo; no segundo quadro, colocar o dobro de gros de trigo do primeiro quadro; e, para todos os quadros subseqentes, colocar o dobro de gros de trigo do quadro anterior. Um tabuleiro de xadrez tem 64 quadros. 10. Desenvolva um algoritmo que receba um nmero x calcule e mostre um nmero inteiro que mais se aproxima da raiz quadrada desse nmero x. 11. Desenvolva um algoritmo que receba um nmero inteiro, verifique e mostre se esse nmero primo ou no. 12. Desenvolva um algoritmo que receba dois nmeros inteiros, verifique e mostre todos os nmeros primos existentes entre os dois nmeros recebidos. 13. Desenvolva um algoritmo que mostre todas as possibilidades de lanamento de dois dados, de forma que tenhamos o valor 7 como resultado da soma dos valores de cada dado. 14. Desenvolva um algoritmo que calcule e mostre o valor da seguinte srie: Srie = 1 + 2/3 + 3/5 + 4/7 + ... + 50/99. 15. Desenvolva um algoritmo que receba 15 nmeros inteiros, calcule e mostre a somatria do fatorial de cada nmero recebido. 16. Desenvolva um algoritmo que recebe 30 nmeros reais, calcula e mostra a somatria e a mdia dos nmeros recebidos. 17. Desenvolva um algoritmo que receba dois nmeros inteiros, verifique qual o maior entre eles, calcule e mostre o quociente e o resto da diviso do maior nmero pelo menor. Em hiptese nenhuma utilizar os operadores div e mod. 18. Desenvolva um algoritmo que receba o nome e a idade de 50 pessoas, verifique e mostre o nome e a idade da pessoa mais velha e da pessoa mais nova. 19. Desenvolva um algoritmo que calcule e mostre quantos anos sero necessrios para que Florentina seja maior que Clarisbela, considerando que Clarisbela tem 1,50 metros e cresce 2 centmetros por ano e Florentina tem 1,10 metros e cresce 3 centmetros por ano. 20. Desenvolva um algoritmo que calcule e mostre o valor da somatria dos trinta primeiros termos da seguinte srie: Srie = 5/1000 10/980 + 5/960 10/940 + ... 21. Desenvolva um algoritmo que receba o salrio de Clarisbela, calcule e mostre o salrio de Florentina que um tero do salrio de Clarisbela. Alm disso, calcule e mostre quantos meses so necessrios para que o dinheiro aplicado de Florentina seja igual ou maior que o dinheiro aplicado de Clarisbela, considerando que Clarisbela aplicou todo o seu salrio na poupana, que rende 2% ao ms, e que Florentina aplicou todo o seu salrio no fundo de renda fixa, que rende 5% ao ms. 22. Desenvolva um algoritmo que receba dois valores inteiros, x e y, calcule e mostre a potncia xy, sem utilizar o operador pot. 23. Desenvolva um algoritmo que receba o sexo, a idade e a experincia no trabalho (s/n) de 50 candidatos a uma vaga de uma empresa, calcule e mostre: o nmero de candidatos
Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

98

IBTA 1979
BD / RC / DW / SI Lgica de Programao Semestre I

do sexo masculino; o nmero de candidatos do sexo feminino; a idade mdia dos candidatos que j tm experincia no trabalho; a porcentagem de homens com mais de 50 anos do total de homens; o nmero de mulheres com idade inferior a 30 e com experincia no trabalho; e a menor e a maior idade entre as mulheres que j tm experincia no trabalho. 24. Desenvolva um algoritmo que receba 50 nmeros reais, calcule e mostre: a soma dos nmeros digitados; a mdia dos nmeros digitados; o maior nmero digitado; o menor nmero digitado; o dobro dos nmeros digitados; o cubo dos nmeros digitados; a porcentagem dos nmeros mpares digitados. 25. Desenvolva um algoritmo que calcule e mostre o valor da seguinte srie: Srie = 1/2 2/4 + 3/6 4/8 + 5/10 6/12 + ... 50/100. 26. Desenvolva um algoritmo que receba um nmero inteiro N, mostre um menu de opes: calcule e mostre a soma do fatorial dos nmeros entre 1 e N; calcule e mostre a srie de Fibonacci at o seu N-simo termo; calcule e mostre o produto dos nmeros entre 1 e N; e calcule e mostre a soma dos nmeros pares entre 1 e N. 27. Desenvolva um algoritmo que mostre um menu de opes: receba 20 nmeros reais, calcule e mostre a somatria desses nmeros; receba 15 nmeros reais, calcule e mostre o produto dos nmeros mpares desses nmeros; e receba 10 nmeros inteiros, calcule e mostre quais desses nmeros so divisveis por 5 e 7. 28. Desenvolva um algoritmo que mostre um menu de opes: receba a altura e a base de 10 tringulos, calcule e mostre a rea de cada tringulo; receba a altura e a base de 15 retngulos, calcule e mostre a rea de cada retngulo; receba a altura, a base maior e a base menor de 20 trapzios, calcule e mostre a rea de cada trapzio; e receba o raio de 15 circunferncias, calcule e mostre a rea de cada circunferncia. 29. Desenvolva um algoritmo que receba dois valores inteiros, a e b, a > b, mostre um menu de opes que: calcule e mostre a potncia ab, sem utilizar o operador pot; calcule e mostre o quociente e o resto da diviso de a por b, sem usar os operadores div e mod; e calcule e mostre se os valores a e b so primos ou no. 30. Desenvolva um algoritmo que calcule e mostre o valor da seguinte srie: Srie = 1/1 2/4 + 3/9 4/16 + 5/25 ... + 15/225.

Copyright IBTA Instituto Brasileiro de Tecnologia Avanada

99