Sei sulla pagina 1di 196

ALGORITMOS

Autora: Lucy Mari Tabuti Cursos: ADS / BD / RC / SI Semestre: 1

Prezado aluno, Este material compreende apenas o contedo da disciplina. Assim, no deve ser a nica fonte de consultas em seus estudos. O contedo deve ser complementado com outras obras, indicadas por seu professor ou encontradas em suas pesquisas.

Revises: Fevereiro 2005 - por Lucy M. Tabuti

3 Edio 7 Impresso 2008 Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

ndice
1. Conceitos Bsicos..................................................................................................................... 1 1.1. Lgica .................................................................................................................................. 1 1.2. Processamento de Dados ................................................................................................... 2 1.3. Algoritmo.............................................................................................................................. 2 1.4. Programa ............................................................................................................................. 6 1.5. Java - Linguagem de Programao..................................................................................... 6 1.6. Exemplo............................................................................................................................... 9 Exerccios de Lgica .................................................................................................................. 9 2. Como Construir um Algoritmo ............................................................................................... 11 2.1. Exemplo de como fazer um Caf ...................................................................................... 11 2.2. Outro Exemplo de Construo de Algoritmo Envolvendo Lgica ...................................... 13 Exerccios de Construo de Algoritmo Envolvendo Lgica .................................................... 14 3. Constantes, Variveis e Tipos de Dados............................................................................... 15 3.1. Tipos de Dados ................................................................................................................. 15 3.2. Constantes ........................................................................................................................ 16 3.3. Variveis ............................................................................................................................ 18 3.4. Identificadores ................................................................................................................... 19 3.5. Converses entre Tipos em Java ...................................................................................... 20 3.6. Exemplos com Constantes, Variveis e Identificadores em Pseudocdigo ...................... 21 3.7. Exemplos com Constantes, Variveis e Identificadores em Java ..................................... 22 Exerccios com Constantes, Variveis e Identificadores .......................................................... 22 4. Expresses Aritmticas e Lgicas ........................................................................................ 23 4.1. Operadores Aritmticos ..................................................................................................... 23 4.2. Operadores Relacionais .................................................................................................... 25 4.3. Operadores Lgicos .......................................................................................................... 26 4.4. Prioridades entre Operadores ........................................................................................... 27 4.5. Exemplo com Operadores ................................................................................................. 27 Exerccios com Operadores ..................................................................................................... 29 5. Estrutura Seqencial ............................................................................................................... 30 5.1. Operador de Atribuio () e Comandos de Atribuio ................................................... 30 5.2. Comandos de Entrada e Sada ......................................................................................... 31

1
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

5.3. Blocos ................................................................................................................................ 36 5.4. Estrutura Seqencial ......................................................................................................... 38 5.5. Funes de Tratamento de Caracteres em Java .............................................................. 40 5.6. Exemplos de Estrutura Seqencial em Pseudocdigo ...................................................... 41 5.7. Exemplos de Estrutura Seqencial em Java ..................................................................... 43 Exerccios de Algoritmos Seqenciais...................................................................................... 45 6. Estrutura de Deciso ............................................................................................................... 47 6.1. Estrutura de Deciso Simples (se/ento) .......................................................................... 47 6.2. Estrutura de Deciso Composta (se/ento/seno) ............................................................ 49 6.3. Estrutura de Deciso Encadeada (se/ento ... /seno ...) ................................................. 51 6.4. Exemplos de Estrutura de Deciso Simples, Composta e Encadeada em Pseudocdigo ...................................................................................................................55 6.5. Exemplos de Estrutura de Deciso Simples, Composta e Encadeada em Java .............. 60 Exerccios de Estrutura de Deciso Simples, Composta e Encadeada ................................... 65 7. Estrutura de Mltipla Escolha ................................................................................................ 68 7.1. Estrutura de Mltipla Escolha Simples .............................................................................. 68 7.2. Estrutura de Mltipla Escolha Encadeada ......................................................................... 75 7.3. Exemplos de Estrutura de Mltipla Escolha em Pseudocdigo ........................................ 81 7.4. Exemplos de Estrutura de Mltipla Escolha em Java........................................................ 84 Exerccios de Estrutura de Mltipla Escolha Simples e Encadeada ........................................ 88 8. Estrutura de Repetio ............................................................................................................96 8.1. Estrutura de Repetio Enquanto ..................................................................................... 96 8.2. Faa/Enquanto ................................................................................................................ 101 8.3. Para ................................................................................................................................ 105 8.4. Exemplo de estrutura de repetio enquanto, faa/enquanto e para em pseudocdigo 109 8.5. Exemplo de estrutura de repetio enquanto, faa/enquanto e para em java ................ 113 Exerccios de estrutura de repetio enquanto, faa/enquanto e para .................................. 118 9. Modularizao ........................................................................................................................121 9.1. Necessidade da Modularizao em Programas ..............................................................121 9.2. Construo de Mdulos ...................................................................................................121 9.3. Escopo de Variveis ........................................................................................................122 9.4. Mdulos Procedimento ....................................................................................................122 9.5. Mdulos Funo ..............................................................................................................124 9.6. Parametrizao de Mdulos ............................................................................................126 9.7. Chamada dos Mdulos ....................................................................................................128
2
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

9.8. Exemplo de Modularizao em Pseudocdigo ................................................................130 9.9. Exemplo de Modularizao em Java ...............................................................................141 Exerccios de Modularizao ..................................................................................................151 10. Estrutura de Dados Homogneas - Vetores...................................................................... 157 10.1. Definio de Vetor ..........................................................................................................157 10.2. Declarao de Vetor .......................................................................................................158 10.3. Exemplo de Vetor ...........................................................................................................159 10.4. Atribuindo Valores ao Vetor............................................................................................160 10.5. Mostrando os Elementos de um Vetor ...........................................................................161 10.6. Exemplos de Vetores em Pseudocdigo ........................................................................162 10.7. Exemplos de Vetores em Java .......................................................................................164 Exerccios de Vetores..............................................................................................................167 11. Estrutura de Dados Homognea - Matrizes .......................................................................170 11.1. Definio de Matriz ........................................................................................................170 11.2. Declarao de Matriz......................................................................................................171 11.3. Exemplo de Matriz .........................................................................................................172 11.4. Atribuindo Valores Matriz ............................................................................................174 11.5. Mostrando os Elementos de uma Matriz ........................................................................176 11.6. Exemplos de Matrizes em Pseudocdigo ......................................................................177 11.7. Exemplos de Matrizes em Java .....................................................................................180 Exerccios de Matrizes ............................................................................................................182

1
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

2
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

1. Conceitos Bsicos
1.1. Lgica
Definio de Lgica Segundo o dicionrio Aurlio 1, 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. 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 essa carta demorava para chegar de navio? E antes do navio? Havia alguma possibilidade de essa carta chegar ao seu destino?
1

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

1
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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
Figura 1 Processamento de dados

Processamento

Sada

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
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.

2
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.
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.

3
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Para o nosso exemplo, o fluxograma ficaria da seguinte forma:

incio

N1, N2

S = N1 + N 2

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 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:

4
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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-a-passo, 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 se certifique 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:

5
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

// nome do algoritmo Algoritmo Soma incio_algoritmo // declarao das variveis declarar N1, N2, S numrico_inteiro; // 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 comportar-se adequadamente em plataformas de trabalho diferentes.

6
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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.

7
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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.

8
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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(" System.exit(0); } // fim do mtodo main } // fim da classe principal primeiro_programa Primeiro Programa de Lgica de Programao");

Exerccios de lgica
01. 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? 02. Qual nmero que quando adicionado de 5/4 d o mesmo resultado de quando ele multiplicado por 5/4? 03. Descubra e escreva o prximo nmero da srie abaixo: 18, 46, 94, 63, 52, ? 04. 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? 05. 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?

9
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

06. 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? 07. Toda soma de cubos consecutivos, comeando de 1, sempre um quadrado perfeito. Por exemplo: 13 + 2 3 = 9 = 3 2 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. 08. 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? 09. 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; 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.

10
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

d. Cleber no pedreiro. 14. No ltimo vero, trs grupos acamparam na floresta. Com base nas dicas abaixo, tente descobrir o nome 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.

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:

11
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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.


12
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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.

13
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Exerccios de Construo de Algoritmo envolvendo Lgica


Utilizando a descrio narrativa, construa algoritmos para os seguintes exerccios: 01. 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. 02. 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. 03. 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. 04. 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. 05. 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.

14
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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:

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.
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

Figura 4 O tipo lgico em Java 15


Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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 inteiro de 16 bits intervalo compreendido: -32.768 ... 32.767 nmeros inteiros de 32 bits intervalo compreendido: -2.147.483.648 ... 2.147.483.647 nmeors 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.
16
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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;

17
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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;

18
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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; 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.

19
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.

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;

20
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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; amarelo '5', cor alfanumrico;
21
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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;

Exerccios com Constantes, Variveis e Identificadores


01. 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. 02. 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

03. 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.

22
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

04. 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;

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 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 + * /

Funo adio subtrao multiplicao diviso

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

Figura 9 Operadores aritmticos bsicos

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

23
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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:

Operador Math.pow Math.sqrt %

Funo potenciao radiao 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 inteiros 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:

24
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Operador ++

Funo pr-incremento

Exemplo ++x

++

ps-incremento

y++

--

pr-decremento

--z

--

ps-decremento

k--

+= -= *= /= %=

atribui a adio atribui a subtrao atribui a multiplicao atribui a diviso atribui o resto da div.

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=y-1 (decrementa e logo depois usa o valor de y) y=y-1 (usa o valor de y e logo depois decrementa) a=a+2 b=b-5 c=c*9 d=d/7 e=e%8

Figura 13 Operadores unrios em Java

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 5-2>=1+2 5-2<=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:
25
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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<=7-2 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.

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 Funo negao conjuno disjuno

Figura 16 Operadores lgicos

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 26
Copyright Faculdade IBTA

B V F V F

no A F F V V

AeB V F F F

A ou B V V V F

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Java Os operadores lgicos em Java so representados como segue:

Operador ! && ||

Funo negao conjuno disjuno

Figura 18 Operadores lgicos em Java

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

27
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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

28
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

Exerccios com Operadores


01. 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 02. 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

29
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

03. 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

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.1. 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.

30
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.2. 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. 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.

31
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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 vetor 2 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
2

O conceito de vetor ser visto no captulo 10. 32


Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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);

33
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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.*;

34
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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.

35
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.3. 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.

36
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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().

37
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

5.4. 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: 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:
38
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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>; } } Por exemplo: class Exemplo_Sequencial { 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); } }

39
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.5. 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)


Retorna a converso de determinado caracter para maisculo.

boolean equals(Object)
Verifica se um objeto igual a outro.
40
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.6. 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.

41
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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.

42
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

5.7. 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

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

43
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

44
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Exerccios de Algoritmos Seqenciais


01. Desenvolva um algoritmo que receba o salrio de um funcionrio, calcule e mostre seu novo salrio com reajuste de 15%. 02. 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. 03. 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. 04. 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. 05. 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. 06. 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. 07. 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. 08. 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. 09. 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.
45
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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. 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 . p . R. 20. Desenvolva um algoritmo que receba o raio (R) de uma circunferncia, calcule e mostre a rea dessa circunferncia. Frmula da rea: A = p . 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.
46
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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%.

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:

47
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 : // 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"); }

48
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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;

Por exemplo: se (var < 0) ento escrever(O nmero , var , " negativo); seno escrever(O nmero , var , no negativo); fimse;
49
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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"); }
50
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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(...); 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

51
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 ... // 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.
52
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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>) { ... // 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>) {
53
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

... // 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.

54
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

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.

55
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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"); seno // sada de resultados escrever(A soma menor ou igual a 100"); fimse; fim_algoritmo.

56
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.

57
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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.

58
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.
59
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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"));

60
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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"));

61
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

62
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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, calcule 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 ser maiores que zero"); } else { // 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

63
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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)) { // 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.");
64
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} 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

Exerccios de Estrutura de Deciso Simples, Composta e Encadeada


01. Desenvolva um algoritmo que receba dois valores numricos inteiros, calcule e mostre o resultado da diferena do maior pelo menor valor. 02. Desenvolva um algoritmo que receba trs valores numricos reais e mostre-os em ordem crescente. Utilizar a estrutura de deciso encadeada. 03. 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. 04. Desenvolva um algoritmo que receba dois valores numricos reais, calcule e mostre o maior entre esses dois nmeros. 05. 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). 06. 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.

65
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

07. 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. 08. Desenvolva um algoritmo que receba um valor numrico inteiro, verifique e mostre se esse valor divisvel por 2 e por 3. 09. 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 numricos inteiros, 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 numricos reais, verifique qual o maior desses valores, calcule e mostre a soma do cubo do maior nmero com o cubo do menor nmero. 19. Desenvolva um algoritmo que receba trs valores numricos reais, 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.

66
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 numricos inteiros, verifique e mostre se o maior nmero mltiplo do menor nmero. 22. Desenvolva um algoritmo que receba dois valores numricos inteiros, 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.

67
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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%. 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.

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:

68
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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, 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

69
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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

70
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

// 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;

71
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

default : System.out.print ("O valor da varivel var no nem 1, nem 2, nem 3"); } 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:

72
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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: switch (var) { case 1 : System.out.println ("O valor da varivel var 1"); break; case 2 : case 3 : case 4 : System.out.println ("O valor da varivel var pode ser 2, 3 ou 4"); break; case 7 : case 15: case 25: System.out.println ("O valor da varivel var pode ser 7, 15 ou 25"); break; case 8 : case 11: case 12: case 13:

73
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

case 14: System.out.println ("O valor da varivel var pode ser 8 , 11, 12, 13 ou 14"); break; default : System.out.println ("opo invlida."); } 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

74
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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>;
75
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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"); 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.

76
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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;

77
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

78
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Por exemplo: switch (var) { case 1 : case 2 : case 3 : switch (var) { 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"); }
79
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 // 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

80
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.
81
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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.

82
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

3. Desenvolva um algoritmo que receba dois valores numricos inteiros e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Smbolo da operao + * / Algoritmo Calculo incio_algoritmo // declarao de variveis e/ou constantes Declarar d numrico_real; res, num1, num2 numrico_inteiro; oper alfanumrico; // mensagem ao usurio 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. Nome da operao adio subtrao multiplicao diviso

83
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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; } else { if (media < 7 && media >= 3) { op = 3; }
84
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

85
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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 coisa regio de procedncia norte sul leste oeste importado

class Produto { public static void main(String arg [ ]) { // 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 :
86
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

// 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 numricos inteiros e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Sistema da operao + * / 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")); 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;
87
Copyright Faculdade IBTA

Nome da operao adio subtrao multiplicao diviso

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

// 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

Exerccios de Estrutura de Mltipla Escolha Simples e Encadeada


01. 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 quadrado tringulo retngulo trapzio Frmula lado * lado (base * altura) / 2 base * altura ((Base maior = base menor) * altura) / 2

02. 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:
88
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Cdigo 1 2 3 4 5

Produto Notvel Quadrado da diferena de dois nmeros Quadrado da soma de dois nmeros soma do quadrado de dois nmeros Diferena do quadrado de dois nmeros produto da soma com a diferena de dois nmeros

Frmula (a - b) * (a - b) (a + b) * (a + b) a*a+b*b a*a-b*b (a - b) * (a + b)

03. 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 contas Comprar remdios Descansar Remeter cartas

04. Desenvolva um algoritmo que receba um dia da semana e mostre qual(is) a(s) disciplina(s) voc tem naquele dia da semana. 05. Desenvolva um algoritmo que receba um ms do ano e mostre qual(is) o(s) feriado(s) daquele ms. 06. Desenvolva um algoritmo que receba a data de nascimento de uma pessoa e mostre qual o signo dessa pessoa. 07. 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

89
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

08. 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

09. 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%

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

90
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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%; - se o funcionrio recebe mais ou igual a 1.500,00 e menos que 2.000,00, ter reajuste de 25%; - se o funcionrio recebe mais ou igual a 2.000,00 e menos que 3.000,00, ter reajuste de 10%; - se o funcionrio recebe mais ou igual a 3.000,00 e menos que 5.000,00, ter reajuste de 5%; - se o funcionrio 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 Poupana Fundo de renda fixa CDB Aes Rendimento 3% 5% 6% 10%

91
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 numricos reais e um cdigo e mostre-os conforme a tabela abaixo: Cdigo 1 2 3 4 5 6 Operao apresentar os trs valores em ordem crescente apresentar os trs valores em ordem decrescente apresentar somente os valores pares apresentar somente os valores mpares apresentar somente os valores positivos apresentar 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%. 19. 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 . p . raio calcula a rea: A = p . raio2 calculo o volume: V = 4/3 . p . 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 receba o nome de uma pessoa, verifique e mostre qual a sua cor e fruta preferida, conforme a tabela abaixo: Preferncia Nome Maria Jos Joo
92
Copyright Faculdade IBTA

Cor vermelho azul verde

fruta morango figo uva

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

Pas

23. Desenvolva um algoritmo que receba 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: Caractersticas fruta Magro Forte Vitaminado Poderoso Saudvel Abacaxi Pra Pssego Acerola Laranja ingrediente Ginseng Gelia Guaran Germe de Trigo Algas dia da semana Segunda-feira Tera-feira Quarta-feira Quinta-feira Sexta-feira

Bebida

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

Famlia

93
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

25. Desenvolva um algoritmo que receba 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: Viagem barco primeira segunda terceira quarta quinta Netuno Pluto Saturno Marte Urano Distncia 3 quilmetros 4 quilmetros 5 quilmetros 2 quilmetros 8 quilmetros Vista Canho ndios Runas Igreja Gruta

Etapa

26. Desenvolva um algoritmo que receba 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: Dados horrio abertura Arte Moderna Cartas e Manuscritos Instrumentos Musicais Pedras Preciosas Relquias 8 horas 10 horas 12 horas 14 horas 16 horas horrio de fechamento valor 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 R$ 43,60 R$ 21,50 R$ 32,85 R$ 29,20 R$ 39,50

Museu

27. Desenvolva um algoritmo que receba 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: Rio Nome Vila urea Vila do Retorno Vila da Luz Vila dos Pinheiros Vila Santana Rio Coral Rio Grande Rio Mesquita Rio Ronco Rio da Viva Extenso 21 km 24 km 28 km 32 km 33 km

Vila

94
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

Data

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

Data

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

95
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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:
96
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos 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:

97
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

<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; }

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:

98
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

<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: 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:

99
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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;

100
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} // segundo while System.out.print ("O valor do fatorial de " + num + " " + fat); num = num + 1; } // primeiro while } // main } // classe

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);

101
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

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);

102
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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>);

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
103
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

{ <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: class ExemploFacaEnquanto { public static void main(String args []) { int i, num, fat; num = 5; do
104
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

{ 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;

105
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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
106
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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

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:

107
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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: 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
108
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} // classe

8.4. Exemplo de Estrutura de Repetio Enquanto, Faa/Enquanto 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 SomaEnquanto Declarar i, s 0 numrico_inteiro; i 1; enquanto (i <= 100) faa s s + i; i i + 1; fimenquanto; escrever (A somatria de 1 at 100 , s); fim_algoritmo. // na estrutura de repetio faa/enquanto Algoritmo SomaFaca Declarar i, s 0 numrico_inteiro; i 1; faa s s + i; i i + 1; enquanto (i <= 100); escrever (A somatria de 1 at 100 , s); fim_algoritmo. // na estrutura de repetio para Algoritmo SomaPara Declarar

109
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

i, s 0 numrico_inteiro; para i de 1 at 100 passo +1 faa s s + i; fimpara; escrever (A somatria de 1 at 100 , s); fim_algoritmo.

2. Desenvolva um algoritmo que calcule a soma de todos os nmeros pares compreendidos entre 1 e 100. // na estrutura de repetio enquanto Algoritmo SomaEnquanto 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; escrever (A somatria dos nmeros pares de 1 at 100 , s); fim_algoritmo. // na estrutura de repetio faa/enquanto Algoritmo SomaFaca Declarar i, s 0 numrico_inteiro; i 1; faa se ((i mod 2) = 0) ento s s + i;

110
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

fimse; i i + 1; enquanto (i <= 100); escrever (A somatria dos nmeros pares de 1 at 100 , s); fim_algoritmo. // na estrutura de repetio para Algoritmo SomaPara 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; escrever (A somatria dos nmeros pares de 1 at 100 , s); fim_algoritmo.

3. Desenvolva um algoritmo que mostre 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
111
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

s s + i; i i + 1; fimenquanto; escrever (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); escrever (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; escrever (A somatria dos nmeros divisveis por 3 de 1 at 100 , s); fim; caso 0 : incio escrever (Saindo do programa!); fim; caso contrrio : escrever (opo invlida, tente novamente); fimescolha; enquanto (op <> 0); fim_algoritmo.

112
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

8.5. Exemplo de Estrutura de Repetio Enquanto, Faa/Enquanto e Para em Java


1. Desenvolva um algoritmo que calcule a soma de todos os nmeros compreendidos entre 1 e 100. // na estrutura de repetio while 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 do/while 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);
113
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} // fim do void main } // fim da classe

// na estrutura de repetio do 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); } // fim do void main } // fim da classe 2. Desenvolva um algoritmo que calcule 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
114
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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; for ( i = 1 ; i <= 100 ; i++ ) { if ((i % 2) == 0)

115
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

{ 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 mostre 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);
116
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} 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; 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
117
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} while (op != 0); } // fim do void main } // fim da classe

Exerccios de Estrutura de Repetio Enquanto, Faa/Enquanto e Para


Para todos os exerccios abaixo, construir um algoritmo modularizado para cada estrutura de repetio, ou seja, um usando o Enquanto, um usando o Faa/Enquanto e outro usando o Para. 01. Desenvolva um algoritmo que calcule e mostre o quadrado dos nmeros inteiros compreendidos entre 10 e 150. 02. Desenvolva um algoritmo que receba um nmero inteiro, calcule e mostre o seu fatorial. 03. Desenvolva um algoritmo que receba um nmero N, calcule e mostre o valor da seguinte srie: Srie = 1 + 1/2 + 1/3 + ... + 1/N. 04. Desenvolva um algoritmo que receba um nmero, calcule e mostre os resultados da tabuada desse nmero. 05. 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. 06. 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!. 07. 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. 08. Desenvolva um algoritmo que receba 100 nmeros reais, verifique e mostre o maior e o menor nmero recebido. 09. 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.

118
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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 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.
119
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

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.

120
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

9. Modularizao
Muitas vezes fica complicado desenvolvermos um algoritmo extenso de um nico problema. Para isso, utilizaremos a modularizao desse algoritmo, isto , a diviso do algoritmo em mdulos ou sub-rotinas, para que o problema dividido em subproblemas possa ser facilmente interpretado e desenvolvido. Nesse sentido, veremos a necessidade da modularizao, aprenderemos como construir mdulos de um algoritmo, mdulos esses que so conjuntos de comandos que tm como finalidade executar determinada funo. Temos dois tipos de mdulos: procedimentos e funes. Os procedimentos so aqueles mdulos que executam um conjunto de comandos sem retorno para o mdulo que o chamou. As funes so aqueles mdulos que executam um conjunto de comando e retornam algum dado para o mdulo que o chamou. A seguir vamos ver como e quando trabalhar com cada um deles.

9.1. Necessidade da Modularizao em Programas


Um dos pontos principais para o uso da modularizao a diviso do algoritmo em mdulos para que ele seja melhor interpretado e desenvolvido. Esses mdulos acabam sendo mais simples e menos complexos. A diviso em mdulos facilita o entendimento parcial do problema e entendendo todos os problemas parciais, no final, teremos entendido o problema maior. A maioria dos mdulos pode ser vista como um mini-algoritmo, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Outro ponto principal para o uso de modularizao a reutilizao de cdigo. Muitas vezes, precisamos repetir um mesmo pedao do algoritmo, por exemplo, um menu de opes, vrias vezes, dentro de um mesmo algoritmo. Nesse caso, basta desenvolver um mdulo com esse pedao do algoritmo e sempre que precisarmos dele no algoritmo, basta fazer a chamada do mdulo, evitando reescrever o mesmo cdigo.

9.2. Construo de Mdulos


Para focalizarmos o problema e dividi-lo em subproblemas, precisamos adotar uma regra. Essa regra serve para nos orientar na diviso e construo de mdulos. Para construir os mdulos, primeiro precisamos analisar o problema e dividi-lo em partes principais, que so os mdulos. Depois precisamos analisar os mdulos obtidos para verificar se a diviso est coerente. Se algum mdulo ainda estiver complexo, devemos dividi-lo tambm em outros submdulos. Por fim, precisamos analisar todos os mdulos e o problema geral para garantir que o algoritmo mais os mdulos resolvam o problema de forma simples. Esse processo chamado de Mtodo de Refinamento Sucessivo, pois o problema complexo dividido em problemas menores e, a partir do resultado dos problemas menores, temos o resultado do problema complexo. Por exemplo, suponha que queremos desenvolver um algoritmo que receba dois valores numricos e uma opo do usurio que decida qual entre as quatro operaes bsicas da matemtica (soma, subtrao, diviso e multiplicao) ele quer resolver.
121
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Analisando esse problema, vamos dividi-lo em subproblemas, por exemplo, um menu de opes para que o usurio possa escolher uma operao matemtica, o clculo da soma, o clculo da subtrao, o clculo da diviso e o clculo da multiplicao. Temos assim cinco mdulos para resolver o nosso problema. So mdulos coerentes que ajudam a resolver o nosso problema de forma simples. Mas, analisando bem os mdulos, verificamos que falta mais um mdulo, o mdulo principal que se encarrega de fazer a chamada dos mdulos, enviar e receber dados para esses mdulos. Agora sim temos o nosso problema dividido e analisado, basta comear a desenvolv-los. Mas para isso, precisamos assimilar outros conceitos como escopo de variveis, mdulo procedimento, mdulo funo e chamada de mdulo que veremos a seguir, completando com um exemplo.

9.3. Escopo de Variveis


O escopo de uma varivel onde, dentro do algoritmo, uma varivel vlida ou pode ser reconhecida. Uma varivel pode ter o escopo dividido em dois tipos: varivel global ou varivel local. Uma varivel global aquela declarada no incio do algoritmo e pode ser utilizada por qualquer parte desse algoritmo, seja nos comandos do prprio algoritmo, bem como, dentro de qualquer mdulo que pertena ao algoritmo. Nesse caso, sua declarao feita apenas uma nica vez, no sendo permitido que o mesmo nome de varivel seja declarado dentro de qualquer outra parte do algoritmo, por exemplo, dentro de qualquer outro mdulo. Uma varivel local aquela declarada dentro de algum bloco, por exemplo, dentro de um mdulo. Nesse caso, essa varivel vlida e reconhecida somente dentro do bloco em que foi declarada. Assim, o mesmo nome de varivel pode ser declarado dentro de diferentes blocos, pois sero reconhecidas como uma nova varivel. Por exemplo, se declararmos uma varivel x no incio de um algoritmo, essa varivel x pode ser usada e alterada em qualquer parte desse algoritmo e em nenhum momento declarada novamente, ou seja, ela nica no algoritmo inteiro. Mas muito importante ter o controle dessas variveis globais, justamente porque elas podem ser alteradas a qualquer momento. No entanto, se declararmos, usarmos e alterarmos uma varivel y dentro do mdulo soma, poderemos tambm declar-la, utiliz-la e alter-la dentro do mdulo subtrao, do mdulo diviso e do mdulo multiplicao, se assim o desejarmos. Nesse caso, no precisando tomar os cuidados necessrios que uma varivel global precisa.

9.4. Mdulos Procedimento


Os mdulos procedimento so os mdulos que no retornam valor para o mdulo ou algoritmo que os tenham chamado. Nesse sentido, esse tipo de mdulo utilizado quando o algoritmo principal ou mdulo que chama o mdulo procedimento no necessita de retorno de qualquer dado do mdulo.

Pseudocdigo Nos mdulos procedimento, utilizaremos as palavras incio_mdulo e fimmdulo; que representam as palavras principais desse mdulo, ou seja, o incio e o fim do mdulo, respectivamente. Os mdulos procedimento em pseudocdigo seguem a seguinte regra sinttica:
122
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

<nome do mdulo> ( ) incio_mdulo <comandos>; fimmdulo; Note que os comandos dentro do mdulo so comuns queles de qualquer algoritmo, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Por exemplo, suponha que queiramos desenvolver um mdulo que imprima o nome da disciplina e o nome da instituio de ensino: Dados ( ) incio_mdulo Declarar disc, fac alfanumrico; disc Lgica de Programao; fac IBTA; escrever (nome da disciplina => , disc); escrever (nome da instituio de ensino => , fac); fimmdulo; Neste exemplo, Dados o nome do mdulo procedimento. O mdulo parece um mini-algoritmo com declarao de variveis, entrada de dados para essas variveis e a sada de resultados. O que difere um algoritmo de um mdulo justamente sua simplicidade.

Java Nos mdulos procedimento em Java, utilizaremos a palavra void que representa a palavra principal dessa estrutura e a chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte desse mdulo. Os mdulos procedimento em Java seguem a seguinte regra sinttica: void <nome do mdulo> ( ) { <comandos>; } Note que os comandos dentro do mdulo so comuns queles de qualquer programa, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Por exemplo, suponha que queremos desenvolver um mdulo que imprime o nome da disciplina e o nome da instituio de ensino:
123
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

void Dados ( ) { String disc, fac; disc = Lgica de Programao; fac = IBTA; System.out.println (nome da disciplina => + disc); System.out.println (nome da instituio de ensino => + fac); } Nesse exemplo, Dados o nome do mdulo procedimento. O mdulo parece um miniprograma com declarao de variveis, entrada de dados para essas variveis e a sada de resultados. O que difere um programa de um mdulo justamente sua simplicidade. Perceba o uso da palavra void, ela utilizada no Java para identificar um mdulo procedimento.

9.5. Mdulos Funo


Os mdulos funo so os mdulos que retornam algum valor para o mdulo ou algoritmo que os tenha chamado. Nesse sentido, esse tipo de mdulo utilizado quando o algoritmo principal ou mdulo que chama o mdulo funo necessita de retorno de qualquer dado do mdulo.

Pseudocdigo Nos mdulos funo, utilizaremos as palavras incio_mdulo e fimmdulo; que representam as palavras principais desse mdulo, ou seja, o incio e o fim do mdulo, respectivamente. Alm dessas palavras, utilizaremos a palavra retornar que a principal palavra do mdulo funo, pois a partir desse comando que um valor retornado para o algoritmo ou mdulo que o chamou. Os mdulos funo em pseudocdigo seguem a seguinte regra sinttica: <tipo de retorno> <nome do mdulo> ( ) incio_mdulo <comandos>; retornar <valor de retorno>; fimmdulo; Note que os comandos dentro do mdulo so comuns queles de qualquer algoritmo, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Note ainda que o valor de retorno enviado pelo comando retornar precisa ser do mesmo tipo de dado declarado para o mdulo funo. Por exemplo, suponha que queremos desenvolver um mdulo que retorna o nome da disciplina e o nome da instituio de ensino: alfanumrico Dados ( ) incio_mdulo
124
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Declarar disc, fac, mens alfanumrico; disc Lgica de Programao; fac IBTA; mens nome da disciplina => + disc + \nnome da instituio de ensino => + fac; retornar mens; fimmdulo; Nesse exemplo, Dados o nome do mdulo funo. O mdulo parece um mini-algoritmo com declarao de variveis, entrada de dados para essas variveis, processamento de dados e retorno dos resultados. O que difere um algoritmo de um mdulo justamente sua simplicidade. Note que o tipo de retorno do mdulo funo Dados alfanumrico e o retorno do mdulo o contedo da varivel mens do tipo alfanumrico, ou seja, do mesmo tipo de dados, isso obrigatrio.

Java Nos mdulos funo em Java, utilizaremos a palavra return que representa a palavra principal dessa estrutura e a chave aberta, {, e chave fechada, }, para representar o conjunto de comandos que fazem parte desse mdulo. a partir do comando return que um valor retornado para o programa ou mtodo que o chamou. Os mdulos funo em Java seguem a seguinte regra sinttica: <tipo de retorno> <nome do mdulo> ( ) { <comandos>; return <valor de retorno>; } Note que os comandos dentro do mdulo so comuns queles de qualquer programa, ou seja, com entrada de dados, processamento desses dados e sada de resultados. Note ainda que o valor de retorno enviado pelo comando return precisa ser do mesmo tipo de dado declarado para o mdulo funo. Por exemplo, suponha que queiramos desenvolver um mdulo que retorna o nome da disciplina e o nome da instituio de ensino: String Dados ( ) { String disc, fac, mens; disc = Lgica de Programao; fac = IBTA;
125
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

mens = nome da disciplina => + disc + \nnome da instituio de ensino => + fac; return mens; } Nesse exemplo, Dados o nome do mdulo funo. O mdulo parece um miniprograma com declarao de variveis, entrada de dados para essas variveis, processamento de dados e o retorno dos resultados. O que difere um programa de um mdulo justamente sua simplicidade. Note que o tipo de retorno do mdulo funo Dados String e o retorno do mdulo o contedo da varivel mens que do tipo String, ou seja, do mesmo tipo de dados. Isso obrigatrio.

9.6. Parametrizao de Mdulos


Aprendemos a dividir um problema usando o mtodo de refinamentos sucessivos e tambm a identificar cada subdiviso do problema como um mdulo do algoritmo que desejamos desenvolver. Aprendemos tambm que temos dois tipos de mdulos, o mdulo funo e o mdulo procedimento, para desenvolver cada um dos mdulos detectados. No entanto, cada mdulo interage com o mdulo principal ou mesmo com outros mdulos e, muitas vezes, quando os mdulos so chamados h a necessidade de enviar dados para que esses mdulos possam resolver o seu subproblema. Esses dados que so enviados para os mdulos so chamados de argumentos que so passados como parmetros aos mdulos. O uso de argumentos passados como parmetros em mdulos, sejam eles funes ou procedimentos muito comum. Os exemplos vistos anteriormente para funes e procedimentos esto sem o uso de parametrizao de mdulos, por isso, aps o nome dos mdulos, os parnteses esto vazios. dentro dos parnteses que os argumentos so passados como parmetros aos mdulos. Quando passamos argumentos como parmetros, precisamos identificar qual o tipo de dado ser passado como parmetro. Nesse caso, cada argumento dever ser declarado no momento em que o mdulo for desenvolvido. Note que, o uso de parametrizao em mdulos depende do subproblema que o mdulo precisa resolver. Nesse caso, o desenvolvedor do algoritmo ou mdulos quem deve decidir se o uso ou no da parametrizao necessrio para um determinado mdulo. Muitas vezes, possvel desenvolver o mesmo problema com ou sem o uso de parametrizao, como vimos nos exemplos anteriores, por isso, essa deciso cabe ao desenvolvedor. Vamos rever os mesmos exemplos do mdulo procedimento em pseudocdigo e do mdulo funo em Java, agora passando argumentos como parmetro. Note que o uso de parametrizao em mdulos pode ser tanto para o mdulo funo como para o mdulo procedimento, no havendo diferenas no seu desenvolvimento, apenas o retorno ou no de um valor.

Pseudocdigo Nos mdulos procedimento, utilizaremos as palavras incio_mdulo e fimmdulo; que representam as palavras principais deste mdulo, ou seja, o incio e o fim do mdulo, respectivamente. Os mdulos procedimento em pseudocdigo com parametrizao seguem a seguinte regra sinttica:
126
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

<nome do mdulo> (<nome da var> <tipo da var>, ... , <nome da var> <tipo da var>) incio_mdulo <comandos>; fimmdulo; Note que a quantidade de argumentos que pode ser passada como parmetro no determinada, pode ser um nico argumento ou uma quantidade finita de argumentos. Por exemplo, suponha que queremos desenvolver um mdulo que recebe dois argumentos do tipo alfanumrico como parmetro e imprime o nome da disciplina e o nome da instituio de ensino: Dados (disc alfanumrico, fac alfanumrico) incio_mdulo escrever (nome da disciplina => , disc); escrever (nome da instituio de ensino => , fac); fimmdulo; Nesse exemplo, no mais necessria a declarao das variveis disc e fac dentro do mdulo Dados, pois esses dados esto declarados no cabealho do mdulo como argumentos que recebero dados que sero passados como parmetros na chamada desse mdulo.

Java Nos mdulos funo em Java, utilizaremos a palavra return que representa a palavra principal dessa estrutura e a chave aberta, {, e a chave fechada, }, para representar o conjunto de comandos que fazem parte desse mdulo. a partir do comando return que um valor retornado para o programa ou mtodo que o chamou. Os mdulos funo em Java com parametrizao seguem a seguinte regra sinttica: <tipo de retorno> <nome mdulo> (<tipo var> <nome var> , ... , <tipo var> <nome var>) { <comandos>; return <valor de retorno>; } Note que a quantidade de argumentos que pode ser passada como parmetro no determinada, pode ser um nico argumento ou uma quantidade finita de argumentos. Por exemplo, suponha que queremos desenvolver um mdulo que recebe dois argumentos do tipo String como parmetro e imprime o nome da disciplina e o nome da instituio de ensino: String Dados (String disc , String fac) {
127
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

String mens; mens = nome da disciplina => + disc + \nnome da instituio de ensino => + fac; return mens; } Neste exemplo, no mais necessria a declarao das variveis disc e fac dentro do mdulo Dados, pois esses dados esto declarados no cabealho do mdulo como argumentos que recebero dados que sero passados como parmetros na chamada desse mdulo.

9.7. Chamada dos Mdulos


Aprendemos como desenvolver um mdulo e como passar argumentos como parmetros para um mdulo. No entanto, quando usamos modularizao, o algoritmo principal ou outros mdulos precisam chamar os mdulos para que eles sejam executados. A chamada de mdulos depende do tipo de mdulo. Para o mdulo procedimento, basta fazer a chamada desse mdulo pelo nome do mdulo, passando os respectivos dados como argumento se for necessrio. Para o mdulo funo, a chamada desse mdulo precisa estar vinculada a uma varivel, ou seja, o retorno de dado da chamada do mdulo funo deve ser atribudo a uma varivel cujo tipo de dado deve ser o mesmo que o dado que est sendo retornado. Nesse caso, a passagem de dados como argumentos, se for necessria, no se difere do mdulo procedimento. Por exemplo, vamos fazer a chamada dos mdulos funo e procedimento dos exemplos vistos anteriormente.

Pseudocdigo Mdulo Procedimento sem Parametrizao A chamada dos mdulos procedimento sem parametrizao em pseudocdigo segue a seguinte regra sinttica: <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em pseudocdigo: Dados ( ); Neste exemplo, Dados o nome do mdulo procedimento, como ele um mdulo sem parametrizao, seus parnteses ficam vazios.

Java Mdulo Procedimento sem Parametrizao A chamada dos mdulos procedimento sem parametrizao em Java segue a seguinte regra sinttica: <nome do mdulo> ( );
128
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em Java: Dados (); Neste exemplo, Dados o nome do mdulo procedimento, como ele um mdulo sem parametrizao, seus parnteses ficam vazios.

Pseudocdigo Mdulo Funo sem Parametrizao A chamada dos mdulos funo sem parametrizao em pseudocdigo segue a seguinte regra sinttica: <varivel> <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em pseudocdigo: alfanumrico m; m Dados ( ); Neste exemplo, Dados o nome do mdulo funo, como ele um mdulo sem parametrizao, seus parnteses ficam vazios. No entanto, como ele deve retornar um valor, esse valor atribudo varivel m. Note que o tipo de retorno do mdulo funo Dados alfanumrico e a varivel m que recebe o valor de retorno da funo tambm do tipo alfanumrico, ou seja, do mesmo tipo de dados. Isso obrigatrio!

Java Mdulo Funo sem Parametrizao A chamada dos mdulos funo sem parametrizao em Java segue a seguinte regra sinttica: <varivel> = <nome do mdulo> ( ); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em Java: String m; m = Dados ( ); Neste exemplo, Dados o nome do mdulo funo, como ele um mdulo sem parametrizao, seus parnteses ficam vazios. No entanto, como ele deve retornar um valor, esse valor atribudo varivel m. Note que o tipo de retorno do mdulo funo Dados String e a varivel m que recebe o valor de retorno da funo tambm do tipo String, ou seja, do mesmo tipo de dados. Isso obrigatrio.

129
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Pseudocdigo Mdulo Procedimento com Parametrizao A chamada dos mdulos procedimentos com parametrizao em pseudocdigo segue a seguinte regra sinttica: <nome do mdulo> (<valor ou varivel > , ... , <valor ou varivel >); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em psedocdigo: Dados (Lgica de Programao , IBTA); Neste exemplo, Dados o nome do mdulo procedimento, como ele um mdulo com parametrizao, dentro de seus parnteses so passados os argumentos como parmetros para o mdulo Dados. Note que a quantidade de argumentos que foi passada como parmetro a mesma do mdulo quando ele foi declarado. No nosso exemplo, a quantidade de argumentos dois: Lgica de Programao e IBTA.

Java Mdulo Funo com Parametrizao A chamada dos mdulos funo com parametrizao em Java segue a seguinte regra sinttica: <varivel> = <nome do mdulo> (<valor ou varivel > , ... , <valor ou varivel>); Por exemplo, vamos chamar o mdulo que imprime o nome da disciplina e o nome da instituio de ensino desenvolvido anteriormente em Java: String m; m = Dados ("Lgica de Programao" , "IBTA"); Neste exemplo, Dados o nome do mdulo funo, como ele um mdulo com parametrizao, dentro de seus parnteses so passados os argumentos como parmetros para o mdulo Dados. Note que a quantidade de argumentos que foi passada como parmetro a mesma do mdulo quando ele foi declarado. No nosso exemplo, a quantidade de argumentos dois: Lgica de Programao e IBTA.

9.8. Exemplo de Modularizao em Pseudocdigo


1. Desenvolva um algoritmo que receba dois valores numrico inteiro e o smbolo da operao conforme tabela a seguir, calcule e mostre a operao efetuada: Smbolo da operao + * /
130
Copyright Faculdade IBTA

Nome da operao adio subtrao multiplicao diviso

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

// mdulo funo Mais que recebe dois valores inteiros e retorna um valor inteiro numrico_inteiro Mais (n1 numrico_inteiro , n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_inteiro; // processamento de dados res n1 + n2; // retorno do mdulo retornar res; fimmdulo; // Mais // mdulo procedimento Menos que recebe dois valores inteiros Menos (n1 numrico_inteiro, n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_inteiro; // processamento de dados res n1 - n2; // sada de resultados escrever (A diferena de , n1 , com , n2 , , res); fimmdulo; // Menos // mdulo procedimento Vezes que recebe dois valores inteiros Vezes (n1 numrico_inteiro, n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usados dentro deste mdulo Declarar res numrico_inteiro; // processamento de dados res n1 * n2; // sada de resultados escrever (O produto de , n1 , com , n2 , , res);
131
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

fimmdulo; // Vezes // mdulo funo Dividido que recebe dois valores inteiros e retorna um valor real numrico_real Dividido (n1 numrico_inteiro, n2 numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados res n1 / n2; // retorno do mdulo retornar res; fimmdulo; // Dividido // mdulo principal Algoritmo Calculo incio_algoritmo // declarao de variveis e/ou constantes que podem ser usadas no algoritmo Calculo Declarar d numrico_real; soma, num1, num2 numrico_inteiro; oper alfanumrico; // mensagem ao usurio escrever (Digite dois inteiros e a operao); // entrada de dados ler (num1, num2, oper); // processamento de dados escolha (oper) caso + : // chamada do mdulo funo Mais, passando num1 e num2 como // parmetro e atribuindo o retorno do mdulo na varivel soma soma Mais(num1 , num2); // sada de resultados escrever (A soma de , num1 , com , num2 , , soma); // chamada domdulo procedimento Menos, passando num1 e num2 como // parmetro Menos (num1 , num2);

caso - :

132
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

caso * :

// chamada do mdulo procedimento vezes, passando num1 e num2 como // parmetro Vezes (num1 , num2); // chamada do mdulo funo Dividido, passando num1 e num2 como // parmetro e atribuindo o retorno do mdulo na varivel d d Dividido (num1 , num2); // sada de resultados escrever (A diviso de , num1 , com , num2 , , d);

caso / :

caso contrrio : // sada de resultados escrever (operao invlida); fimescolha; fim_algoritmo.

2. Desenvolva um algoritmo que mostre um menu de opes para: calcular a soma de trs nmeros fornecidos pelo usurio; verificar se um nmero fornecido pelo usurio par; e verificar se um nmero fornecido pelo usurio divisvel por 3. // mdulo procedimento Menu Menu() incio_mdulo // mensagens ao usurio escrever ("Digite 1 para somar trs nmeros\n"); escrever ("Digite 2 para verificar se um nmero par\n"); escrever ("Digite 3 para verificar se um nmero divisvel por 3\n"); escrever ("Digite 0 para sair do programa\n"); fimmdulo; // Menu // mdulo funo SomaTudo que retorna um valor inteiro numrico_inteiro SomaTudo () incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar s 0, i numrico_inteiro; // entrada de dados e processamento de dados ler (i); s s + i; ler (i); s s + i; ler (i);
133
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

s s + i; // retorno do mdulo retornar s; fimmdulo; // SomaTudo // mdulo procedimento Pares que recebe um valor inteiro Pares (par numrico_inteiro) incio_mdulo // processamento de dados se ((par mod 2) = 0) ento // sada de resultados escrever ("O nmero ", par, " par "); seno // sada de resultados escrever ("O nmero ", par, " no par "); fimse; fimmdulo; // Pares

// mdulo funo Divisivel3 que recebe um valor inteiro e retorna um valor lgico lgico Divisivel3 (d numrico_inteiro) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res lgico; // processamento de dados se ((d mod 3) = 0) ento res verdadeiro; seno res falso; fimse; // retorno da funo retornar res; fimmdulo; // Divisivel3
134
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

// mdulo principal Algoritmo Somador incio_algoritmo // declarao de variveis que s podem ser usadas dentro do algoritmo Somador Declarar op, soma, num numrico_inteiro; log lgico; // processamento de dados // chamada do mdulo procedimento Menu, sem parametrizao Menu(); // entrada de dados leia (op); escolha (op) caso 1 : // chamada do mdulo funo SomaTudo, sem parmetrizao e atribuindo o // retorno do mdulo na varivel soma soma SomaTudo(); // sada de resultados escrever (A somatria de trs nmeros fornecidos pelo usurio : , soma); caso 2 : // entrada de dados pelo usurio ler (num); // chamada do mdulo procedimento Pares, passando o nmero num como // parmetro Pares(num); caso 3 : // entrada de dados pelo usurio ler (num); // chamada do mdulo funo Divisivel3, passando o nmero num como // parmetro e atribuindo o retorno do mdulo na varivel log log Divisivel3(num); // processamento de dados se (log = verdadeiro) ento // sada de resultados escrever (O nmero , num, divisvel por 3 ); seno // sada de resultados escrever (O nmero , num, no divisvel por 3 ); fimse; caso 0 : escrever (Saindo do programa!); caso contrrio : escrever (opo invlida, tente novamente); fimescolha; fim_algoritmo.

135
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

3. Desenvolva um algoritmo modularizado que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo, e a partir da escolha do usurio por um menu de opes, calcule e mostre a rea da figura geomtrica: Figura geomtrica quadrado tringulo retngulo trapzio Frmula lado * lado (base * altura) / 2 base * altura ((Base maior + base menor) * altura) / 2

// mdulo procedimento Menu Menu() incio_mdulo // mensagens ao usurio escrever ("Digite 1 para rea do quadrado\n"); escrever ("Digite 2 para rea do tringulo\n"); escrever ("Digite 3 para rea do retngulo\n"); escrever ("Digite 4 para rea do trapzio\n"); escrever ("Digite 0 para sair do programa\n"); fimmdulo; // Menu // mdulo funo Quadrado que recebe um valor real e retorna um valor real numrico_real Quadrado (l numrico_real) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados res l * l; // retorno do mdulo retornar res; fimmdulo; // Quadrado // mdulo procedimento Triangulo que recebe dois valores reais Triangulo (b numrico_real, h numrico_real) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo
136
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Declarar res numrico_real; // processamento de dados res (b * h) / 2; // sada de resultados escrever ("A rea do tringulo de base " , b , " e altura " , h , " " , res); fimmdulo; // Triangulo // mdulo procedimento Retangulo que recebe dois valores reais Retangulo (b numrico_real, h numrico_real) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res numrico_real; // processamento de dados res b * h; // sada de resultados escrever ("A rea do retngulo de base " , b , " e altura " , h , " " , res); fimmdulo; // Retangulo // mdulo funo Trapezio que retorna um valor real numrico_real Trapezio ( ) incio_mdulo // declarao de variveis que s podem ser usadas dentro deste mdulo Declarar res, b1, b2, h numrico_real; // entrada de dados ler (b1, b2, h); // processamento de dados res ((b1 + b2) * h) / 2; // retorno do mdulo retornar res; fimmdulo; // Trapezio // mdulo principal
137
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Algoritmo CalculoArea incio_algoritmo // declarao de variveis e/ou constantes que podem ser usadas no algoritmo // CalculoArea Declarar retorno, lado, base, altura numrico_real; figura numrico_inteiro; // processamento de dados // chamada do mdulo procedimento Menu, sem parametrizao Menu(); // entrada de dados leia (figura); escolha (figura) caso 1 : // entrada de dados ler (lado); // chamada do mdulo funo Quadrado, passando lado como // parmetro e atribuindo o retorno do mdulo na varivel retorno retorno Quadrado(lado); // sada de resultados escrever (A rea do quadrado de lado , lado , , retorno); caso 2 : // entrada de dados ler (base, altura); // chamada do mdulo procedimento Triangulo, passando base e altura // como parmetro Triangulo (base, altura); caso 3 : // entrada de dados ler (base, altura); // chamada do mdulo procedimento Retangulo, passando base e altura // como parmetro Retangulo (base, altura); caso 4 : // chamada do mdulo funo Trapezio e atribuindo o retorno do mdulo na // varivel retorno retorno Trapezio ( ); // sada de resultados escrever (A area do trapzio , retorno); caso 0 : escrever (Saindo do programa!); caso contrrio : // sada de resultados escrever (operao invlida); fimescolha; fim_algoritmo.

138
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

4. Desenvolva um algoritmo que mostre 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. // mdulo procedimento Menu Menu() incio 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); fimmdulo; // Menu // mdulo funo SomaTudo que retorna um valor inteiro numrico_inteiro SomaTudo () incio Declarar s 0, i numrico_inteiro; i 1; // processamento de dados enquanto (i <= 100) faa s s + i; i i + 1; fimenquanto; retornar s; // retorno do mdulo fimmdulo; // Soma Tudo // mdulo procedimento SomaPares que recebe um valor inteiro SomaPares (par numrico_inteiro) incio Declarar s 0, i numrico_inteiro; i 1; // processamento de dados faa se ((i mod par) = 0)
139
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

ento s s + i; fimse; i i + 1; enquanto (i <= 100); escreva (A somatria dos nmeros pares de 1 at 100 , s); // sada de resultados fimmdulo; // SomaPares // mdulo funo SomaDivisivel3 que recebe um valor inteiro e retorna um valor inteiro numrico_inteiro SomaDivisivel3 (d numrico_inteiro) incio Declarar i, s 0 numrico_inteiro; // processamento de dados para i de 1 at 100 passo +1 faa se ((i mod d) = 0) ento s s + i; fimse; fimpara; retornar s; // retorno da funo fimmdulo; // SomaDivisivel3 // mdulo principal Algoritmo Somador Declarar op, soma, d numrico_inteiro; // processamento de dados faa /* chamada do mdulo procedimento Menu, sem parametrizao */ Menu(); leia (op); // entrada de dados escolha (op) caso 1 : soma SomaTudo(); escreva (A somatria de 1 at 100 , soma); // sada de resultados
140
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

caso 2 : SomaPares(2); caso 3 : d SomaDivisivel3(3); escreva (A somatria dos nmeros divisveis por 3 de 1 at 100 , d); caso 0 : escreva (Saindo do programa!); caso contrrio : escreva (opo invlida, tente novamente); fimescolha; enquanto (op 0); fim_algoritmo.

9.9. Exemplo de Modularizao em Java


1. Desenvolva um algoritmo que receba dois valores numricos inteiros e o smbolo da operao conforme tabela abaixo, calcule e mostre a operao efetuada: Smbolo da operao + * / class Calculo { // mdulo funo Mais que recebe dois valores inteiros e retorna // um valor inteiro static int Mais (int n1 , int n2) { // declarao de variveis que s podem ser usados dentro // deste mdulo int res; // processamento de dados res = n1 + n2; // retorno do mdulo return res; } // fim do mdulo Mais // mdulo procedimento Menos que recebe dois valores inteiros static void Menos (int n1 , int n2) { // declarao de variveis que s podem ser usadas dentro // deste mdulo int res; // processamento de dados
141
Copyright Faculdade IBTA

Nome da operao adio subtrao multiplicao diviso

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

res = n1 - n2; // sada de resultados System.out.println (A diferena de + n1 + com + n2 + + res); } // fim do mdulo Menos // mdulo procedimento Vezes que recebe dois valores inteiros static void Vezes (int n1 , int n2) { // declarao de variveis que s podem ser usadas dentro // deste mdulo int res; // processamento de dados res = n1 * n2; // sada de resultados System.out.println (O produto de + n1 + com + n2 + + res); } // fim do mdulo Vezes // mdulo funo Dividido que recebe dois valores inteiros e // retorna um valor real static double Dividido (int n1 , int n2) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = (double)n1 / (double)n2; // retorno do mdulo return res; } // fim do mdulo Dividido // mdulo principal public static void main (String args [ ]) { // declarao de variveis e/ou constantes que podem ser // usadas no algoritmo Calculo double d ; int oper, soma, num1, num2; // mensagem ao usurio e entrada de dados num1 = Integer.parseInt(JOptionPane.showInputDialog(Digite um nmero inteiro)); num2 = Integer.parseInt(JOptionPane.showInputDialog(Digite um nmero inteiro)); oper = Integer.parseInt(JOptionPane.showInputDialog(Digite a operao: \n1 para somar \n2 para subtrair \n3 para multiplicar \n4 para dividir)); // processamento de dados switch (oper)
142
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

{ case 1: // chamada do mdulo funo Mais, passando num1 e // num2 como parmetro e atribuindo o retorno do // mdulo na varivel soma soma = Mais(num1 , num2); // sada de resultados System.out.println (A soma de + num1 + com + num2 + + soma); break; case 2: // chamada domdulo procedimento Menos, passando // num1 e num2 como parmetro Menos (num1 , num2); break; case 3: // chamada do mdulo procedimento vezes, passando // num1 e num2 como parmetro Vezes (num1 , num2); break; case 4: // chamada do mdulo funo Dividido, passando num1 // e num2 como parmetro e atribuindo o retorno do // mdulo na varivel d d = Dividido (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

2. Desenvolva um algoritmo que mostre um menu de opes para: calcular a soma de trs nmeros fornecidos pelo usurio; verificar se um nmero fornecido pelo usurio par; e verificar se um nmero fornecido pelo usurio divisvel por 3. class Somador { // mdulo procedimento Menu public static int Menu() { String msg = ; int op; msg = msg + Digite 1 para somar trs nmeros\n; msg = msg + Digite 2 para verificar se um nmero par\n; msg = msg + Digite 3 para verificar se um nmero divisvel por 3\n; msg = msg + Digite 0 para sair do programa\n; op = Integer.parseInt(JOptionPane.showInputDialog(msg));

143
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

return op; } // Menu // mdulo funo SomaTudo que retorna um valor inteiro public static int SomaTudo () { // declarao de variveis que s podem ser usadas dentro // deste mdulo int s = 0, i; // processamento de dados i = Integer.parseInt(JOptionPane.showInputDialog (Digite um nmero)); s = s + i; i = Integer.parseInt(JOptionPane.showInputDialog (Digite um nmero)); s = s + i; i = Integer.parseInt(JOptionPane.showInputDialog (Digite um nmero)); s = s + i; // retorno do mdulo return s; } // SomaTudo // mdulo procedimento Pares que recebe um valor inteiro public static void Pares (int par) { // processamento de dados if ((par % 2) == 0) { // sada de resultados System.out.println (O nmero + par + par ); } else { // sada de resultados System.out.println (O nmero + par + no par ); } } // Pares // mdulo funo Divisivel3 que recebe um valor inteiro e retorna // um valor booleano public static boolean Divisivel3 (int d) { // declarao de variveis que s podem ser usadas dentro // deste mdulo boolean res; // processamento de dados if ((d % 3) == 0) {
144
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

res = true; } else { res = false; } // retorno da funo return res; } // Divisivel3 // mdulo principal public static void main (String arg []) { // declarao de variveis que s podem ser usadas dentro do // algoritmo principal int op = 0, soma, num; boolean log; // processamento de dados do { op = Menu(); // entrada de dados switch (op) { case 1: soma = SomaTudo(); System.out.println (A somatria de trs nmeros fornecidos pelo usurio : + soma); break; case 2: num = Integer.parseInt(JOptionPane.showInputDialog (Digite um nmero)); Pares(num); break; case 3: num = Integer.parseInt(JOptionPane.showInputDialog (Digite um nmero)); log = Divisivel3(num); if (log == true) { System.out.println (O nmero + num + divisvel por 3 ); } else { System.out.println (O nmero + num + no divisvel por 3 ); } break; case 0: System.out.println (Saindo do programa!); System.exit(0); default: System.out.println (opo invlida, tente novamente);
145
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} } while (op != 0); } // main } // classe Somador

3. Desenvolva um algoritmo modularizado que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo, e a partir da escolha do usurio por um menu de opes, calcule e mostre a rea da figura geomtrica: Figura geomtrica quadrado tringulo retngulo trapzio Frmula lado * lado (base * altura) / 2 base * altura ((Base maior + base menor) * altura) / 2

class CalculoArea { // mdulo procedimento Menu public static int Menu() { String msg = ; int op; msg msg msg msg msg = = = = = msg msg msg msg msg + + + + + Digite Digite Digite Digite Digite 1 2 3 4 0 para para para para para rea rea rea rea sair do do do do do quadrado\n; tringulo\n; retngulo\n; trapzio\n; programa\n;

op = Integer.parseInt (JOptionPane.showInputDialog(msg)); return op; } // Menu // mdulo funo Quadrado que recebe um valor real e retorna um // valor real public static double Quadrado (double l) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = l * l; // retorno do mdulo return res; } // Quadrado // mdulo procedimento Triangulo que recebe dois valores reais
146
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

public static void Triangulo (double b, double h) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = (b * h) / 2; // sada de resultados System.out.println (A rea do tringulo de base + b + e altura + h + + res); } // Triangulo // mdulo procedimento Retangulo que recebe dois valores reais public static void Retangulo (double b, double h) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res; // processamento de dados res = b * h; // sada de resultados System.out.println (A rea do retngulo de base + b + e altura + h + + res); } // Retangulo // mdulo funo Trapezio que retorna um valor real public static double Trapezio ( ) { // declarao de variveis que s podem ser usadas dentro // deste mdulo double res, b1, b2, h; // entrada de dados b1 = Double.parseDouble(JOptionPane.showInputDialog(Digite a base menor)); b2 = Double.parseDouble(JOptionPane.showInputDialog(Digite a base maior)); h = Double.parseDouble(JOptionPane.showInputDialog(Digite a altura)); // processamento de dados res = ((b1 + b2) * h) / 2; // retorno do mdulo return res; } // Trapezio // mdulo principal public static void main (String arg []) { // declarao de variveis e/ou constantes que podem ser // usadas no algoritmo principal
147
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

double retorno, lado, base, altura; int figura = 0; do { figura = Menu(); switch (figura) { case 1: // entrada de dados lado = Double.parseDouble (JOptionPane.showInputDialog (Digite o lado)); // chamada do mdulo funo Quadrado, passando lado // como parmetro e atribuindo o retorno do mdulo // na varivel retorno retorno = Quadrado(lado); // sada de resultados System.out.println (A rea do quadrado de lado + lado + + retorno); break; case 2: // entrada de dados base = Double.parseDouble (JOptionPane.showInputDialog (Digite a base)); altura = Double.parseDouble (JOptionPane.showInputDialog (Digite a altura)); // chamada do mdulo procedimento Triangulo, // passando base e altura como parmetro Triangulo (base, altura); break; case 3: // entrada de dados base = Double.parseDouble (JOptionPane.showInputDialog (Digite a base)); altura = Double.parseDouble (JOptionPane.showInputDialog (Digite a altura)); // chamada do mdulo procedimento Retangulo, // passando base e altura como parmetro Retangulo (base, altura); break; case 4: // chamada do mdulo funo Trapezio e atribuindo // o retorno do mdulo na varivel retorno retorno = Trapezio ( ); // sada de resultados System.out.println (A area do trapzio + retorno); break; case 0: System.out.println (Saindo do programa!); System.exit(0); default: // sada de resultados System.out.println (operao invlida); } } while (figura != 0); } } // class CalculoArea
148
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

4. Desenvolva um algoritmo que mostre 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 Somador { // mdulo funo Menu static int Menu() { int op; String msg = ; msg = msg + 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\n; op = Integer.parseInt(JOptionPane.showInputDialog(msg)); return op; } // fim do mdulo Menu // mdulo funo SomaTudo que retorna um valor inteiro static int SomaTudo () { int s = 0, i; i = 1; // processamento de dados while (i <= 100) { s = s + i; i = i + 1; } // fim do while return s; // retorno do mdulo } // fim do mdulo SomaTudo // mdulo procedimento SomaPares que recebe um valor inteiro static void SomaPares (int par) { int s=0, i; i = 1; // processamento de dados do { if ((i % par) == 0) { s = s + i; } // fim do if i = i + 1; } while (i <= 100);
149
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

System.out.println (A somatria dos nmeros pares de 1 at 100 + s); } // fim do mduloSomaPares /* mdulo funo SomaDivisivel3 que recebe um valor inteiro e um valor inteiro*/ static int SomaDivisivel3 (int d) { int i, s = 0; // processamento de dados for ( i = 1 ; i <= 100 ; i++ ) { if ((i % d) == 0) { s = s + i; } // fim do if } // fim do for return s; // retorno da funo }// fim do mdulo SomaDivisivel3 // mdulo principal public static void main (String args [ ]) { int op, soma, d; // processamento de dados do { op = Menu(); // entrada de dados switch (op) { case 1 : soma = SomaTudo(); System.out.println (A somatria de 1 at 100 + soma); break; case 2 : SomaPares(2); break; case 3 : d = SomaDivisivel3(3); System.out.println (A somatria dos nmeros divisveis por 3 de 1 at 100 + d); break; case 0 : System.out.println (Saindo do programa!); System.exit(0); default :System.out.println (opo invlida, tente novamente); } // fim do switch } while (op != 0); } // fim do void main } // fim da classe retorna

150
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Exerccios de Modularizao
01. Desenvolva um mdulo procedimento que receba dois nmeros inteiros, calcule e mostre o resto da diviso entre os nmeros inteiros, sem utilizar o operador mod ou %. 02. Desenvolva um mdulo funo que receba dois nmeros inteiros, calcule e retorne o quociente da diviso entre os nmeros inteiros, sem utilizar o operador div ou / (para inteiros). 03. Desenvolva um mdulo funo que receba um nmero inteiro, calcule e retorne a raiz quadrada inteira mais prxima desse nmero. 04. Desenvolva um mdulo procedimento que receba um nmero, verifique e mostre se esse nmero ou no divisvel por 5. 05. Desenvolva um mdulo procedimento que receba um nmero, verifique e mostre se esse nmero ou no primo. 06. Desenvolva um mdulo procedimento que receba um nmero, verifique e mostre se esse nmero ou no par. 07. Desenvolva um mdulo procedimento que receba um nmero inteiro e mostre todos os divisores desse nmero. 08. Desenvolva um mdulo funo que receba um nmero real, calcule e retorne o valor absoluto desse nmero. 09. Desenvolva um mdulo funo que receba um nmero inteiro, calcule e retorne o fatorial desse nmero. 10. Desenvolva um mdulo principal com um menu de opes para a chamada dos mdulos desenvolvidos nos exerccios 1 at 9, mostrando os respectivos resultados dos mdulos funo. O usurio quem deve escolher o mdulo que ser executado. 11. Desenvolva um algoritmo modularizado que receba cinco valores inteiros e, a partir de um menu de opes, permita o usurio escolher entre: a. entrar e mostrar os valores a serem armazenados em cinco variveis; (procedimento sem parmetros); b. calcular e mostrar o valor da somatria dos valores das cinco variveis; (procedimento com parmetros) c. calcular e retornar a mdia aritmtica dos valores das cinco variveis; (funo sem parmetros) d. calcular e retornar a mdia ponderada dos valores das cinco variveis, sendo peso 2 para as duas primeiras entradas, peso 5 para as duas prximas entradas e peso 10 para a ltima entrada; (funo com parmetros)

151
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

e. mostrar os cinco valores em ordem crescente. (procedimento com parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 12. Desenvolva um algoritmo modularizado que receba um valor inteiro e, a partir de um menu de opes, permita o usurio escolher entre: a. entrar e mostrar o valor a ser armazenado em uma varivel n; (procedimento sem parmetros) b. calcular e retornar o valor da somatria dos vinte primeiros termos da srie de Fibonnacci; (funo sem parmetros) c. verificar e mostrar se o nmero armazenado na varivel n divisvel por 7; (funo com parmetros) d. verificar e mostrar se o nmero armazenado na varivel n par ou mpar; (procedimento com parmetros) Obs1.: aps a chamada das funes, mostrar os resultados. Obs2.: uma das opes do menu deve ser a de sair do programa. 13. Desenvolva um algoritmo modularizado que receba o valor da compra de um produto e, a partir de um menu de opes, permita ao usurio escolher entre: a. calcular e retornar o pagamento a vista com 20% de desconto; (funo com parmetros) b. calcular e mostrar o pagamento em duas vezes com entrada e com 10% de desconto; (procedimento com parmetros) c. calcular e retornar o pagamento a vista no carto com 15% de desconto; (funo com parmetros) d. calcular e mostrar o pagamento em duas vezes no carto com 5% de desconto; (funo com parmetros) e. calcular e mostrar o pagamento a prazo em duas vezes sem entrada com acrscimo de 5%; (procedimento com parmetros) f. calcular e retornar o pagamento a prazo em trs vezes sem entrada com acrscimo de 10%. (funo com parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 14. Desenvolva um algoritmo modularizado que receba o nome de um aluno, o registro desse aluno e quatro valores reais referentes s notas bimestrais desse aluno e, a partir de um menu de opes, permita ao usurio escolher entre: a. entrar e mostrar o nome e o registro do aluno bem como suas notas bimestrais; (procedimento sem parmetros) b. calcular e mostrar o valor da mdia desse aluno com a mensagem de aprovao (mdia >= 5.0) ou reprovao, bem como, seu nome e seu registro; (procedimento com parmetros)

152
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

c. calcular e retornar o valor da mdia ponderada desse aluno com pesos 1, 2, 3 e 4, respectivamente para cada nota; (funo com parmetros) d. calcular a mdia aritmtica desse aluno e retornar a mensagem de aprovado ou reprovado. (funo com parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 15. Desenvolva um algoritmo modularizado que receba um ms e um dia da semana e a partir de um menu de opes, permita ao usurio escolher entre: a. entrar e mostrar o ms e o dia da semana; (procedimento sem parmetros) b. verificar e mostrar se no ms informado ele tem alguma avaliao; (procedimento com parmetros) c. verificar e retornar se no ms e dia da semana informados ele precisa ir para o IBTA; (funo com parmetros) d. verificar e retornar quantos meses por ano ele est de frias escolares (funo sem parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 16. Desenvolva um algoritmo modularizado que receba um valor inteiro positivo e, a partir de um menu de opes, permita ao usurio escolher entre: a. entrar e mostrar o valor inteiro armazenado numa varivel n; (procedimento sem parmetros) b. calcular e mostrar a somatria dos nmeros 100 e n ; (procedimento com parmetros) c. calcular e retornar o produto dos nmeros 20 e n; (funo com parmetros) d. verificar e retornar se n primo ou no (funo sem parmetros) Obs1.: aps a chamada das funes, mostrar o resultado. Obs2.: uma das opes do menu deve ser a de sair do programa. 17. Desenvolva um algoritmo modularizado que receba o nome e os dados para clculo da rea de uma figura geomtrica conforme tabela abaixo e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar a rea da figura geomtrica: Figura geomtrica quadrado tringulo retngulo trapzio Frmula lado * lado (base * altura) / 2 base * altura ((Base maior + base menor) * altura) / 2

153
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 18. Desenvolva um algoritmo modularizado que receba dois valores reais e o cdigo do produto notvel conforme tabela abaixo e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar o valor do produto notvel: Cdigo 1 2 3 4 5 Produto Notvel quadrado da diferena de dois nmeros quadrado da soma de dois nmeros soma do quadrado de dois nmeros diferena do quadrado de dois nmeros produto da soma com a diferena de dois nmeros Frmula (a - b) * (a - b) (a + b) * (a + b) a*a+b*b a*a-b*b (a - b) * (a + b)

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 19. Desenvolva um algoritmo modularizado que receba o nome de um lugar e, a partir de um menu de opes, permita ao usurio escolher entre mostrar 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

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 20. Desenvolva um algoritmo modularizado que receba o cdigo da condio de pagamento e o preo de um produto e, a partir de um menu de opes, permita ao usurio escolher entre calcular o que deve ser pago pelo produto e mostrar a condio de pagamento e o preo a ser pago, conforme a tabela abaixo: Cdigo A B C D
154
Copyright Faculdade IBTA

Condio de pagamento a vista em dinheiro ou cheque tem 20% de desconto a 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%

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 21. Desenvolva um algoritmo modularizado que receba o salrio de um funcionrio e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar o valor do aumento salarial e o salrio final a ser recebido pelo funcionrio, considerando que: a. se o funcionrio recebe menos que 500,00, ter reajuste de 100%; b. se o funcionrio recebe mais ou igual 500,00 e menos que 1.000,00, ter reajuste de 75%; c. se o funcionrio recebe mais ou igual a 1.000,00 e menos que 1.500,00, ter reajuste de 50%; d. se o funcionrio recebe mais ou igual a 1.500,00 e menos que 2.000,00, ter reajuste de 25%; e. se o funcionrio recebe mais ou igual a 2.000,00 e menos que 3.000,00, ter reajuste de 10%; f. se o funcionrio recebe mais ou igual a 3.000,00 e menos que 5.000,00, ter reajuste de 5%; g. se o funcionrio recebe mais ou igual a 5.000,00, ter reajuste de 2%. Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 22. Desenvolva um algoritmo modularizado que receba o tipo de investimento e o valor do investimento e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar 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 Poupana Fundo de renda fixa CDB Aes Rendimento 3% 5% 6% 10%

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 23. Desenvolva um algoritmo modularizado que receba a data de nascimento de uma pessoa e a data atual e, a partir de um menu de opes, permita ao usurio escolher entre verificar e mostrar: a. em qual estao do ano (primavera, vero, outono ou inverno) essa pessoa nasceu; b. em qual sculo essa pessoa nasceu; c. se a pessoa nasceu em um ano bissexto; d. qual o signo dessa pessoa; e. quantos dias essa pessoa j viveu; f. quantos meses essa pessoa j viveu; g. quantos anos essa pessoa tem.
155
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 24. Desenvolva um algoritmo modularizado que receba trs valores numricos reais e um cdigo e, a partir de um menu de opes, permita ao usurio escolher entre calcular e mostrar dados conforme a tabela abaixo: cdigo 1 2 3 4 5 6 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

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 25. Desenvolva um algoritmo modularizado que receba o preo atual e a venda mensal mdia de um produto e, a partir de um menu de opes, permita ao usurio calcular e mostrar o novo preo para um dos seguintes casos: a. se a venda mdia mensal for menor que 500 e o preo atual menor que 30,00, ento o produto sofrer um aumento de 10%; b. 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 sofrer um aumento de 15%; c. se a venda mensal mdia for maior ou igual a 1000 e o preo atual maior ou igual a 80,00, ento o produto sofrer uma diminuio de 5%. Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 26. Desenvolva um algoritmo modularizado que receba o raio de uma circunferncia e um cdigo e, a partir de um menu de opes, permita o usurio calcular e mostrar os dados da circunferncia, conforme a tabela abaixo: Cdigo x y z Operao calcula o comprimento: C = 2 p raio calcula a rea: A = p raio2 calcula o volume: V = 4/3 p raio3

156
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Obs1.: usar procedimentos e funes com e sem parmetros. Obs2.: uma das opes do menu deve ser a de sair do programa. 27. Desenvolva um algoritmo modularizado que receba um caracter alfanumrico e, a partir de um menu de opes, permita ao usurio verificar e mostrar se o caracter digitado uma vogal, uma consoante, ou qualquer outro caracter. 28. Desenvolva um algoritmo modularizado 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). 29. Desenvolva um algoritmo modularizado 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. 30. Desenvolva um algoritmo modularizado 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%.

10. Estrutura de Dados Homogneas Vetores


Quando desenvolvemos um algoritmo ou programa estruturado, muitas vezes, precisamos usar vrias informaes de um mesmo tipo de dado. Podemos fazer isso criando inmeras variveis, uma para cada informao, mas isso invivel, pois demasiado complexo desenvolvermos e manipularmos um algoritmo que utiliza inmeras variveis para vrias informaes de um mesmo tipo. Para solucionar esse problema, podemos utilizar vetores e matrizes para armazenar essas informaes, isto , uma estrutura de dados homognea. Uma estrutura de dados homognea uma estrutura capaz de armazenar vrias informaes de um mesmo tipo de dado. Assim, com um nico nome declarado para essa estrutura, podemos manipular vrias informaes. Uma estrutura de dados homognea pode ser vista como qualquer outra varivel, podendo ser manipulada dentro de uma estrutura de deciso (seja ela simples, composta ou encadeada), dentro de uma estrutura de mltipla escolha, dentro das estrutura de repetio. Temos dois tipos de estrutura de dados homognea: vetores e matrizes. No captulo seguinte, veremos matrizes e a seguir veremos como e quando trabalhar com um vetor, bem como declarar e manipular um vetor.

10.1. Definio de Vetor


Um vetor um conjunto de informaes de um mesmo tipo de dado. Note que vetor um nome particular dado matriz unidimensional. Por exemplo, considere uma fileira de 5 carteiras de uma sala de aula representando uma estrutura de dados e cada uma das carteiras representando

157
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

parties dessa estrutura. Em outras palavras, a fileira de carteiras um vetor e cada carteira um elemento desse vetor. Podemos representar, graficamente, esse vetor da seguinte forma: 0 carteira 1 1 carteira 2 2 carteira 3 3 carteira 4 4 carteira 5

Vet

Neste exemplo, possumos um vetor chamado Vet, com dimenso ou tamanho do vetor igual a 5 e com cinco posies: 0, 1, 2, 3 e 4. Na posio 0 do vetor Vet, temos a carteira1, na posio 1 do vetor Vet, temos a carteira2 e, assim por diante, at que na posio 4 do vetor Vet, temos a carteira5.

10.2. Declarao de Vetor


Quando declaramos um vetor, precisamos saber qual o tipo de dados das informaes que sero armazenadas no vetor e o nmero de elementos desse vetor. O nome atribudo para a declarao de vetor segue as mesmas regras da declarao de qualquer identificador.

Pseudocdigo A declarao de um vetor em pseudocdigo ter a seguinte regra sinttica: Declarar <nome do vetor> [<nmero de elementos>] <tipo dos elementos do vetor>; Por exemplo, Declarar Vet_exemplo [100] numrico_inteiro;

Neste exemplo, declaramos um vetor chamado Vet_exemplo com 100 elementos do tipo inteiro.

Java

A declarao de um vetor em Java ter a seguinte regra sinttica: <tipo dos elementos> <nome vetor> [ ] = new <tipo elementos> [<nro. de elementos>]; ou <tipo dos elementos>[ ] <nome vetor> = new <tipo elementos> [<nro. de elementos>];

Por exemplo, int Vet_exemplo [ ] = new int [100]; ou int [ ] Vet_exemplo = new int [100];
158
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Neste exemplo, declaramos um vetor chamado Vet_exemplo com 100 elementos do tipo inteiro. Podemos declarar um vetor em Java e depois determinar seu tamanho, seguindo a seguinte regra sinttica: <tipo dos elementos> <nome do vetor> [ ]; <nome do vetor> = new <tipo dos elementos> [<nro. de elementos>];

Por exemplo: int Vet_exemplo [ ]; Vet_exemplo = new int [100]; Neste exemplo, declaramos um vetor chamado Vet_exemplo do tipo inteiro e depois determinamos seu tamanho com 100 elementos do tipo inteiro. No Java, no momento da declarao do vetor, ele automaticamente inicializado com zeros em cada posio do vetor.

10.3. Exemplo de Vetor


Vamos exemplificar, graficamente, um vetor chamado notas, de 10 posies, contendo notas finais de 10 alunos. Como estamos considerando notas, ento determinamos que essas informaes so do tipo numrico_real. 0 9.5 1 10.0 2 8.5 3 5.0 4 8.0 5 7.5 6 6.0 7 9.0 8 8.5 9 7.0

notas

- notas o nome do vetor; - o vetor notas possui dez informaes, por isso, tem tamanho 10, ou seja, 10 posies: de 0 at 9; - a posio 0 do vetor, notas[0], possui a nota 9.5; - a posio 1 do vetor, notas[1], possui a nota 10.0; - a posio 2 do vetor, notas[2], possui a nota 8.5; - a posio 3 do vetor, notas[3], possui a nota 5.0; - a posio 4 do vetor, notas[4], possui a nota 8.0; - a posio 5 do vetor, notas[5], possui a nota 7.5; - a posio 6 do vetor, notas[6], possui a nota 6.0; - a posio 7 do vetor, notas[7], possui a nota 9.0; - a posio 8 do vetor, notas[8], possui a nota 8.5; - a posio 9 do vetor, notas[9], possui a nota 7.0.

159
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

10.4. Atribuindo Valores ao Vetor


Quando atribumos valores ao vetor, precisamos saber qual o tipo de dados das informaes que sero armazenadas no vetor e o nmero de elementos desse vetor. Os valores so atribudos a cada posio do vetor e a forma de atribuio a mesma de qualquer varivel ou constante.

Pseudocdigo A atribuio de valores para cada posio do vetor em pseudocdigo ter a seguinte regra sinttica: <nome do vetor> [<posio>] <valor>; Por exemplo, notas [0] 9.5; Neste exemplo, a posio 0 do vetor notas recebe o valor 9.5. Podemos tambm atribuir valores no momento da declarao do vetor, conforme a seguinte regra sinttica: Declarar <nome vetor> [<nro dados>] {<vlr1> , <vlr2> , ... , <vlrn>} <tipo dados do vetor>; Por exemplo, Declarar notas [3] { 9.5 , 10.0 , 8.5} numrico_real; Neste exemplo, declaramos um vetor chamado notas de tamanho 3, de forma que a posio 0 do vetor possua o valor 9.5, a posio 1 do vetor possua o valor 10.0 e a ltima posio do vetor possua o valor 8.5.

Java A atribuio de valores para cada posio do vetor em Java ter a seguinte regra sinttica: <nome do vetor> [<posio>] = <valor>; Por exemplo, notas [0] = 9.5; Neste exemplo, a posio 0 do vetor notas recebe o valor 9.5. Podemos tambm atribuir valores no momento da declarao do vetor, conforme a seguinte regra sinttica:
160
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

<tipo dos dados> <nome do vetor> [ ] = {<vlr1> , <vlr2> , ... , <vlrn>}; Por exemplo, double notas [ ] = { 9.5 , 10.0 , 8.5}; Neste exemplo, declaramos um vetor chamado notas de tamanho 3, de forma que a posio 0 do vetor possua o valor 9.5, a posio 1 do vetor possua o valor 10.0 e a ltima posio do vetor possua o valor 8.5.

10.5. Mostrando os Elementos de um Vetor


Quando mostramos valores do vetor, precisamos saber qual o tipo de dados das informaes que foram armazenadas no vetor e o nmero de elementos desse vetor. Os valores so mostrados para cada posio do vetor e a forma de mostrar os elementos na tela a mesma de qualquer varivel ou constante.

Pseudocdigo Para mostrar os valores de cada posio do vetor em pseudocdigo teremos a seguinte regra sinttica: escrever (<nome do vetor>[<posio>]); Por exemplo, escrever (notas [0]); Neste exemplo, o contedo da posio 0 do vetor notas ser mostrado ao usurio, ou seja, o valor 9.5 aparecer na tela do usurio. Note que a mensagem dentro do comando escrever pode vir concatenada com outros valores alfanumricos. Por exemplo: escrever (A nota : , notas[0]); Neste exemplo, a mensagem A nota 9.5 aparecer na tela do usurio.

Java Para mostrar os valores de cada posio do vetor em Java teremos a seguinte regra sinttica: System.out.println (<nome do vetor> [<posio>]); Por exemplo, System.out.println(notas [0]); Neste exemplo, o contedo da posio 0 do vetor notas ser mostrado ao usurio, ou seja, o valor 9.5 aparecer na tela do usurio.
161
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Note que a mensagem dentro do comando System.out.println pode vir concatenada com outras Strings. Por exemplo: System.out.println(A nota : + notas[0]); Neste exemplo, a mensagem A nota 9.5 aparecer na tela do usurio.

10.6. Exemplos de Vetores em Pseudocdigo


1. Desenvolva um algoritmo que receba 25 valores numricos inteiros e mostre esses nmeros. Algoritmo Mostrar incio_algoritmo // declarao de variveis e/ou constantes Declarar Vet [25] , i numrico_inteiro; // processamento de dados para i de 0 at 24 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (Vet[i]); // sada de resultados escrever (Vet[i]); fimpara; fim_algoritmo. 2. Desenvolva um algoritmo que receba 100 valores numricos inteiros e mostre a soma desses 100 nmeros. Algoritmo Somar incio_algoritmo // declarao de variveis e/ou constantes Declarar VetSoma [100] , i , soma 0 numrico_inteiro; // processamento de dados para i de 0 at 99 passo + 1 faa // mensagem ao usurio

162
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

escrever ("Digite um valor inteiro"); // entrada de dados ler (VetSoma[i]); soma soma + VetSoma[i]; fimpara; // sada de resultados escrever ("A soma dos 100 valores digitados : " , soma); fim_algoritmo. 3. Desenvolva um algoritmo que receba 50 notas bimestrais, calcule e mostre a mdia aritmtica dessas 50 notas. Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes Declarar i numrico_inteiro; Notas [50] , media, soma 0 numrico_real; // processamento de dados para i de 0 at 49 passo + 1 faa // mensagem ao usurio escrever ("Digite uma nota"); // entrada de dados ler (Notas[i]); soma soma + Notas[i]; fimpara; // processamento de dados media soma/50; // sada de resultados escrever ("A mdia das 50 notas digitadas : " , media); fim_algoritmo.

4. Desenvolva um algoritmo modularizado que receba 200 valores numricos reais, e mostra esses valores e a soma dos nmeros pares. Algoritmo SomaPares incio_algoritmo

163
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Declarar // declarao de variveis e/ou constantes Vet [200], soma 0 numrico_real; i numrico_inteiro; // processamento de dados para i de 0 at 199 passo + 1 faa // mensagem ao usurio escrever (Digite um nmero); // entrada de dados ler (Vet[i]); se ((Vet[i] mod 2) = 0 ) ento soma soma + Vet[i]; fimse; // sada de resultados escrever (O nmero digitado , Vet[i]); fimpara; // sada de resultados escrever (A soma dos nmeros pares : , soma); fim_algoritmo.

10.7. Exemplos de Vetores em Java


1. Desenvolva um algoritmo que receba 25 valores numricos inteiros e mostre esses nmeros. class Mostrar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int Vet [ ] , i; Vet = new int [25]; // processamento de dados for ( i = 0 ; i < 25 ; i++ ) { // mensagem ao usurio e entrada de dados Vet[i] = Integer.parseInt(JOptionPane.showInputDialog (Digite um valor inteiro)); // sada de resultados System.out.println (Vet[i]); } // for
164
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

System.exit(0); } // void main } // classe Mostrar

2. Desenvolva um algoritmo que receba 100 valores numricos inteiros e mostre a soma desses 100 nmeros. class Somar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int VetSoma [ ] , i , soma = 0; VetSoma = new int [100]; // processamento de dados for ( i = 0 ; i <= 99 ; i++ ) { // mensagem ao usurio e entrada de dados VetSoma[i] = Integer.parseInt(JOptionPane.showInputDialog (Digite um valor inteiro)); soma = soma + VetSoma[i]; } // for // sada de resultados System.out.println (A soma dos 100 valores digitados : + soma); System.exit(0); } // void main } // classe Somar

3. Desenvolva um algoritmo que receba 50 notas bimestrais, calcule e mostre a mdia aritmtica dessas 50 notas. class MediaAritmetica { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int i ; double Notas[ ] , media , soma = 0; Notas = new double [50]; // processamento de dados for ( i = 0 ; i <= 49 ; i++ ) { // mensagem ao usurio e entrada de dados Notas[i] = Double.parseDouble(JOptionPane.showInputDialog (Digite uma nota)); soma = soma + Notas[i]; } // for
165
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

media = soma/50; // sada de resultados System.out.println (A mdia das 50 notas digitadas : + media); System.exit(0); } // void main } // classe MediaAritmetica

4. Desenvolva um algoritmo modularizado que receba 200 valores numricos reais e, mostre esses valores e a soma dos nmeros pares. class SomaPares { public static double FuncSoma ( ) { // declarao de variveis e/ou constantes int i ; double Vet[ ] , soma = 0; Vet = new double [200]; // processamento de dados for ( i = 0 ; i < 200 ; i++ ) { // mensagem ao usurio e entrada de dados Vet[i] = Double.parseDouble(JOptionPane.showInputDialog (Digite um nmero)); if ((Vet[i] % 2) == 0) { soma = soma + Vet[i]; } // if // sada de resultados System.out.println(O nmero digitado + Vet[i]); } // for return soma; } public static void main(String args [ ]) { // declarao de variveis e/ou contantes double s = 0; // processamento de dados s = FuncSoma( ); // sada de resultados System.out.println (A soma dos nmeros pares : + s); System.exit(0); } // void main } // classe SomaPares

166
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Exerccios de Vetores
Para todos os exerccios abaixo, construir um algoritmo modularizado usando vetor. 01. Desenvolva um algoritmo que receba e mostre 120 valores alfanumricos. 02. Desenvolva um algoritmo que receba 20 valores numricos inteiros num vetor A e 20 valores numricos inteiros num vetor B. Construa um vetor C com 20 posies, onde cada posio possua a soma dos elementos dos vetores A e B em suas respectivas posies. Mostrar os elementos dos trs vetores. 03. Desenvolva um algoritmo que receba 50 valores numricos reais num vetor X e 30 valores numricos reais num vetor Y. Construa um vetor Z de 80 posies com a concatenao dos vetores X e Y, ou seja, os elementos das 50 primeiras posies so os mesmos elementos do vetor X e os elementos das 30 ltimas posies so os mesmos do vetor Y. Mostre os elementos dos trs vetores. 04. Desenvolva um algoritmo que receba 10 valores numricos inteiros num vetor Num, calcule e mostre os nmeros primos e suas respectivas posies. 05. Desenvolva um algoritmo que receba 50 valores numricos reais num vetor, calcule e armazene, num segundo vetor, os 50 valores do primeiro vetor multiplicados por 5. Mostre os valores dos dois vetores. 06. Desenvolva um algoritmo que receba 30 valores numricos inteiros num vetor, calcule e armazene, num segundo vetor, o quadrado dos 30 valores do primeiro vetor. Mostre os valores dos dois vetores. 07. Desenvolva um algoritmo que receba 45 valores numricos inteiros num vetor, calcule e armazene, num segundo vetor, o fatorial de cada elemento do primeiro vetor. Mostre os dois vetores. 08. Desenvolva um algoritmo que receba 90 valores numricos inteiros positivos num vetor, calcule e armazene, num segundo vetor, o negativo de cada elemento do primeiro vetor. Mostre os dois vetores. 09. Desenvolva um algoritmo que receba 85 valores numricos reais num vetor, calcule e armazene, num segundo vetor, a metade de cada elemento do primeiro vetor. Mostre os dois vetores. 10. Desenvolva um algoritmo que calcule a tabuada de um nmero determinado pelo usurio e armazene, num vetor de 10 posies, o resultado da tabuada. Mostre os elementos do vetor. 11. Desenvolva um algoritmo que receba 15 valores referentes s temperaturas em graus Celsius e armazene num vetor de 15 posies. Calcule e armazene, num segundo vetor de 15 posies, os valores de cada temperatura em graus Celsius convertidos para graus Fahrenheit. Calcule e
167
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

armazene, num terceiro vetor de 15 posies, os valores de cada temperatura em graus Celsius convertidos para graus Kelvin. Mostre os elementos dos trs vetores. 12. Desenvolva um algoritmo que receba 35 valores numricos inteiros num vetor, calcule e armazene o triplo dos valores divisveis por 3 num segundo vetor, armazenando inalterados os valores que no so divisveis por 3. Mostre os elementos dos dois vetores. 13. Desenvolva um algoritmo que receba 15 valores alfanumricos num vetor e armazene invertido esses elementos num segundo vetor de 15 posies. O primeiro elemento do primeiro vetor ser o ltimo elemento do segundo vetor, o segundo elemento do primeiro vetor ser o penltimo elemento do segundo vetor e assim por diante. Mostre os elementos dos dois vetores. 14. Desenvolva um algoritmo que receba 50 valores numricos inteiros e pares num vetor e receba 50 valores numricos inteiros e mpares num segundo vetor de forma que cada elemento recebido seja validado pelo programa e no pelo usurio. Armazene num terceiro vetor de 100 posies o resto da diviso de cada elemento do primeiro vetor por 3 e o quociente da diviso de cada elemento do segundo vetor por 3. Os 50 primeiros elementos do terceiro vetor so referentes ao primeiro vetor e os 50 ltimos elementos do terceiro vetor so referentes ao segundo vetor. Mostre os elementos dos trs vetores. 15. Desenvolva um algoritmo que receba 70 valores divisveis por 2 e por 3 e armazene num vetor de 70 posies. O algoritmo e no o usurio quem deve validar se um valor divisvel por 2 e por 3. Caso o valor digitado satisfaa a condio, ento ele ser armazenado no vetor, caso contrrio, outro valor ser recebido at que os 70 valores preencham o vetor. Mostre os elementos do vetor. 16. Desenvolva um algoritmo que receba 65 valores divisveis por 5 ou por 7 e armazene num vetor de 65 posies. O algoritmo e no o usurio quem deve validar se um valor divisvel por 5 ou 7. Caso o valor digitado satisfaa a condio, ento ele ser armazenado no vetor, caso contrrio, outro valor ser recebido at que os 65 valores preencham o vetor. Mostre os elementos do vetor. 17. Desenvolva um algoritmo que receba 40 valores numricos inteiros, calcule e mostre os nmeros primos e suas respectivas posies. 18. Desenvolva um algoritmo que receba 55 valores numricos reais num vetor, calcule e mostre a mdia aritmtica dos 55 valores. 19. Desenvolva um algoritmo que receba 10 valores numricos inteiros num vetor, calcule e mostre a mdia ponderada dos 10 valores, considerando o peso de cada posio, sua prpria posio, ou seja, o peso do elemento da posio 1 1, o peso do elemento da posio 2 2 e assim por diante. 20. Desenvolva um algoritmo que receba 50 valores alfanumricos, verifique e mostre os elementos que comeam com uma vogal. Para facilitar, classifique em ordem crescente esse vetor. 21. Desenvolva um algoritmo que receba 45 valores numricos inteiros, calcule e mostre os nmeros pares, suas posies e a soma dos nmeros pares e os nmeros mpares, suas posies e a quantidade de nmeros mpares.

168
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

22. Desenvolva um algoritmo que receba 65 valores resultantes dos nmeros sorteados em um dado jogado 65 vezes. Mostre os nmeros sorteados e a freqncia com que apareceram. 23. Desenvolva um algoritmo que receba 100 valores alfanumricos entre vogais, calcule e mostre quantas vezes cada vogal aparece e sua porcentagem. 24. Desenvolva um algoritmo que receba 35 valores numricos reais e armazene cada elemento de forma ordenada. O primeiro valor digitado ser armazenado na primeira posio do vetor, o segundo valor digitado ser armazenado na segunda posio do vetor, se for maior que o primeiro elemento. Se for menor que o primeiro elemento, desloque esse valor para a segunda posio e armazene o segundo valor digitado na primeira posio. Continue essa regra at que todos os 35 valores sejam digitados e armazenados em ordem crescente no vetor de 35 posies. Mostre os elementos desse vetor. 25. Desenvolva um algoritmo que receba 15 valores numricos inteiros num vetor X, receba 15 valores numricos inteiros num vetor Y e concatene alternadamente os elementos dos vetores X e Y num terceiro vetor Z de 30 posies. Os elementos das posies mpares do vetor Z so os mesmos do vetor X e os elementos das posies pares do vetor Z so os mesmos do vetor Y. Mostrar os elementos dos trs vetores. 26. Desenvolva um algoritmo que receba 30 valores numricos reais num vetor A, receba 30 valores numricos reais num vetor B e concatene os elementos dos vetores A e B num terceiro vetor C de 60 posies. Os primeiros 30 elementos do vetor C so os mesmos do vetor A e os 30 ltimos elementos do vetor C so os mesmos do vetor B. Mostre os elementos dos trs vetores. 27. Desenvolva um algoritmo que receba 50 valores alfanumricos num vetor, armazene de forma invertida os elementos deste vetor num segundo vetor de 50 posies, ou seja, o primeiro elemento do primeiro vetor estar na ltima posio do segundo vetor, o segundo elemento do primeiro vetor estar na penltima posio do segundo vetor e assim por diante. Mostre os valores dos dois vetores. 28. Desenvolva um algoritmo que receba 75 valores alfanumricos num vetor, armazene estes valores num segundo vetor a partir do centro para as bordas e de modo alternado, ou seja, o primeiro elemento do primeiro vetor estar na posio do meio do segundo vetor, o segundo elemento do primeiro vetor estar na posio esquerda da posio do meio do segundo vetor, o terceiro elemento do primeiro vetor estar na posio direita da posio do meio do segundo vetor e assim por diante. Mostre os elementos dos dois vetores. 29. Desenvolva um algoritmo que receba 100 valores numricos inteiros num vetor. Armazene os restos das divises dos elementos das posies pares por suas posies, num segundo vetor, e os quocientes das divises dos elementos das posies mpares por suas posies neste segundo vetor. Mostre os elementos dos dois vetores. 30. Desenvolva um algoritmo que receba 35 valores numricos reais num vetor e classifique em ordem crescente os elementos desse vetor, utilizando a seguinte regra:

selecione o menor elemento do vetor de 35 posies; troque esse elemento pelo primeiro elemento do vetor;

169
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

repita os dois primeiros itens, considerando agora os 34 elementos restantes do vetor, trocando
o menor elemento com o segundo elemento do vetor;

repita os dois primeiros itens, considerando agora os 33 elementos restantes do vetor, trocando
o menor elemento com o terceiro elemento do vetor;

continue at que se considere apenas o vetor com a ltima posio.


Mostre os elementos ordenados do vetor.

11. Estrutura de Dados Homognea Matrizes


Quando desenvolvemos um algoritmo ou programa estruturado, muitas vezes precisamos usar vrias informaes de um mesmo tipo de dado e de informaes diferentes, por exemplo, notas bimestrais, notas semestrais e mdia, todos do tipo numrico real. Podemos fazer isso criando diversas variveis, uma para cada informao, mas isso invivel, pois demasiado complexo desenvolvermos e manipularmos um algoritmo que utiliza diversas variveis para vrias informaes de um mesmo tipo. Para solucionar esse problema, podemos utilizar matrizes para armazenar essas informaes, isso , uma estrutura de dados homognea. Uma estrutura de dados homognea, seja ela um vetor ou uma matriz, pode ser vista como qualquer outra varivel, podendo ser manipulada dentro de uma estrutura de deciso (seja ela simples, composta ou encadeada), dentro de uma estrutura de mltipla escolha, dentro das estruturas de repetio. A seguir veremos como e quando trabalhar com uma matriz, bem como declarar e manipular uma matriz.

11.1. Definio de Matriz


Uma matriz um conjunto de informaes de um mesmo tipo de dados, podendo conter informaes diferentes. Note que matriz um nome particular dado matriz multidimensional, seja ela de dimenso dois ou mais. Por exemplo, uma matriz bidimensional pode conter informaes dispostas em duas coordenadas x e y, ou seja, linha e coluna; uma matriz tridimensional pode conter informaes dispostas em trs coordenadas x, y e z, ou seja, linha, coluna e altura e assim por diante. Neste captulo, nos preocuparemos em estudar as matrizes bidimensionais. Para um exemplo de uma matriz bidimensional, considere dez fileiras de 5 carteiras de uma sala de aula representando uma estrutura de dados, cada uma das fileiras e cada uma das carteiras representando parties dessa estrutura, em outras palavras, as dez fileiras de 5 carteiras so uma matriz bidimensional e cada carteira um elemento dessa matriz. Podemos representar, graficamente, essa matriz da seguinte forma:

170
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Mat 0 1 2 3 4 5 6 7 8 9

0 carteira 1 carteira 6 carteira 11 carteira 16 carteira 21 carteira 26 carteira 31 carteira 36 carteira 41 carteira 46

1 carteira 2 carteira 7 carteira 12 carteira 17 carteira 22 carteira 27 carteira 32 carteira 37 carteira 42 carteira 47

2 carteira 3 carteira 8 carteira 13 carteira 18 carteira 23 carteira 28 carteira 33 carteira 38 carteira 43 carteira 48

3 carteira 4 carteira 9 carteira 14 carteira 19 carteira 24 carteira 29 carteira 34 carteira 39 carteira 44 carteira 49

4 carteira 5 carteira 10 carteira 15 carteira 20 carteira 25 carteira 30 carteira 35 carteira 40 carteira 45 carteira 50

Neste exemplo, possumos uma matriz chamada Mat, com dimenso, ou tamanho da matriz, igual a 10 por 5, ou seja, 10 linhas e 5 colunas, com cinqenta posies: 0x0 , 0x1, 0x2, 0x3 , 0x4 , 1x0 , 1x1, 1x2, 1x3 , 1x4 , 2x0 , 2x1, 2x2, 2x3 , 2x4 , 3x0 , 3x1, 3x2, 3x3 , 3x4 , 4x0 , 4x1, 4x2, 4x3 , 4x4 , 5x0 , 5x1, 5x2, 5x3 , 5x4 , 6x0 , 6x1, 6x2, 6x3 , 6x4 , 7x0 , 7x1, 7x2, 7x3 , 7x4 , 8x0 , 8x1, 8x2, 8x3 , 8x4 , 9x0 , 9x1, 9x2, 9x3 e 9x4. Na posio 0x0 da matriz Mat, temos a carteira1, na posio 0x1 da matriz Mat, temos a carteira2, at que na posio 9x4 da matriz Mat, temos a carteira50.

11.2. Declarao de Matriz


Quando declaramos uma matriz, precisamos saber qual o tipo de dados das informaes que sero armazenadas na matriz, quais as informaes, o nmero de elementos dessa matriz, bem como, o nmero de linhas e colunas. O nome atribudo para a declarao da matriz segue as mesmas regras da declarao de qualquer identificador.

Pseudocdigo A declarao de uma matriz em pseudocdigo ter a seguinte regra sinttica: Declarar <nome da matriz> [<nro de linhas>] [<nro de colunas>] <tipo dos elementos matriz>; Por exemplo, Declarar Mat_exemplo [100][5] numrico_inteiro; Neste exemplo, declaramos uma matriz chamada Mat_exemplo com 100 linhas e 5 colunas totalizando 500 elementos do tipo inteiro.

171
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Java A declarao de uma matriz em Java ter a seguinte regra sinttica: <tipo elementos> <nome matriz> [ ][ ] = new <tipo elementos> [<nro lin>][<nro col>]; ou <tipo elementos>[ ][ ] <nome matriz> = new <tipo elementos> [<nro lin>][<nro col>]; ou <tipo elementos>[ ] <nome matriz> [ ] = new <tipo elementos> [<nro lin>][<nro col>]; Por exemplo, int Mat_exemplo [ ][ ] = new int [100][5]; ou int [ ][ ] Mat_exemplo ou int [ ] Mat_exemplo [ ] = new int [100][5]; Neste exemplo, declaramos uma matriz chamada Mat_exemplo com 100 linhas e 5 colunas totalizando 500 elementos do tipo inteiro. Podemos declarar uma matriz em Java e depois determinar seu tamanho, seguindo a seguinte regra sinttica: <tipo dos elementos> <nome da matriz> [ ][ ]; <nome da matriz> = new <tipo dos elementos> [<nro. de linhas>][<nro. de colunas>]; Por exemplo: int Mat_exemplo [ ][ ]; Mat_exemplo = new int [100][5]; Neste exemplo, declaramos uma matriz chamada Mat_exemplo do tipo inteiro e depois determinamos seu tamanho com 100 linhas e 5 colunas, totalizando 500 elementos do tipo inteiro. = new int [100][5];

11.3. Exemplo de Matriz


Vamos exemplificar, graficamente, uma matriz chamada notas, de 10 linhas e 5 colunas, ou seja, 50 posies, contendo na primeira coluna as notas do primeiro bimestre de 10 alunos, na segunda coluna as notas do segundo bimestre de 10 alunos, na terceira coluna as notas do terceiro bimestre de 10 alunos, na quarta coluna as notas do quarto bimestre de 10 alunos e na quinta coluna as mdias finais dos 10 alunos. Como estamos considerando notas, ento determinamos que essas informaes so do tipo numrico_real.

172
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Notas Posies Aluno 1 Aluno 2 Aluno 3 Aluno 4 Aluno 5 Aluno 6 Aluno 7 Aluno 8 Aluno 9 Aluno 10
Figura 21.

1 Bim 0 9.0 5.0 7.5 5.0 8.0 9.0 8.0 8.5 9.5 5.0

2 Bim 1 8.0 6.0 7.5 9.0 6.0 8.0 8.0 6.0 8.5 6.5

3 Bim 2 8.5 7.0 7.5 3.0


6.0

4 Bim 3 9.0 8.0 7.5 7.0 7.0 10.0 8.0 6.0 9.5 7.5

Mdia Final 4 8.5 6.5 7.5 6.0 7.0 9.0 8.0 7.0 9.0 6.5

0 1 2 3 4 5 6 7 8 9

9.0 8.0 7.5 8.5 7.0

- notas o nome da matriz; - a matriz notas possui 10 linhas e 5 colunas, totalizando 50 informaes, por isso, tem tamanho 10x5, ou seja, 50 posies: de 0x0 at 9x4; - a posio 0x0 da matriz, notas[0], possui a nota 9.0; - a posio 0x1 da matriz, notas[1], possui a nota 8.0; - a posio 0x2 da matriz, notas[2], possui a nota 8.5; - a posio 0x3 da matriz, notas[3], possui a nota 9.0; - a posio 0x4 da matriz, notas[4], possui a nota 8.5; - a posio 1x0 da matriz, notas[0], possui a nota 5.0; - a posio 1x1 da matriz, notas[1], possui a nota 6.0; - a posio 1x2 da matriz, notas[2], possui a nota 7.0; - a posio 1x3 da matriz, notas[3], possui a nota 8.0; - a posio 1x4 da matriz, notas[4], possui a nota 6.6; - a posio 2x0 da matriz, notas[0], possui a nota 7.5; - a posio 2x1 da matriz, notas[1], possui a nota 7.5; - a posio 2x2 da matriz, notas[2], possui a nota 7.5; - a posio 2x3 da matriz, notas[3], possui a nota 7.5; - a posio 2x4 da matriz, notas[4], possui a nota 7.5; - a posio 3x0 da matriz, notas[0], possui a nota 5.0; - a posio 3x1 da matriz, notas[1], possui a nota 9.0; - a posio 3x2 da matriz, notas[2], possui a nota 3.0; - a posio 3x3 da matriz, notas[3], possui a nota 7.0;
173
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

- a posio 3x4 da matriz, notas[4], possui a nota 6.0; - a posio 4x0 da matriz, notas[0], possui a nota 8.0; - a posio 4x1 da matriz, notas[1], possui a nota 6.0; - a posio 4x2 da matriz, notas[2], possui a nota 6.0; - a posio 4x3 da matriz, notas[3], possui a nota 7.0; - a posio 4x4 da matriz, notas[4], possui a nota 7.0; - a posio 5x0 da matriz, notas[0], possui a nota 9.0; - a posio 5x1 da matriz, notas[1], possui a nota 8.0; - a posio 5x2 da matriz, notas[2], possui a nota 9.0; - a posio 5x3 da matriz, notas[3], possui a nota 10.0; - a posio 5x4 da matriz, notas[4], possui a nota 9.0; - a posio 6x0 da matriz, notas[0], possui a nota 8.0; - a posio 6x1 da matriz, notas[1], possui a nota 8.0; - a posio 6x2 da matriz, notas[2], possui a nota 8.0; - a posio 6x3 da matriz, notas[3], possui a nota 8.0; - a posio 6x4 da matriz, notas[4], possui a nota 8.0; - a posio 7x0 da matriz, notas[0], possui a nota 8.5; - a posio 7x1 da matriz, notas[1], possui a nota 6.0; - a posio 7x2 da matriz, notas[2], possui a nota 7.5; - a posio 7x3 da matriz, notas[3], possui a nota 6.0; - a posio 7x4 da matriz, notas[4], possui a nota 7.0; - a posio 8x0 da matriz, notas[0], possui a nota 9.5; - a posio 8x1 da matriz, notas[1], possui a nota 8.5; - a posio 8x2 da matriz, notas[2], possui a nota 8.5; - a posio 8x3 da matriz, notas[3], possui a nota 9.5; - a posio 8x4 da matriz, notas[4], possui a nota 9.0; - a posio 9x0 da matriz, notas[0], possui a nota 5.0; - a posio 9x1 da matriz, notas[1], possui a nota 6.5; - a posio 9x2 da matriz, notas[2], possui a nota 7.0; - a posio 9x3 da matriz, notas[3], possui a nota 7.5; - a posio 9x4 da matriz, notas[4], possui a nota 6.5.

11.4. Atribuindo Valores Matriz


Quando atribumos valores matriz, precisamos saber qual o tipo de dados das informaes que sero armazenadas na matriz e o nmero de linhas e colunas dessa matriz, ou seja, o nmero de

174
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

elementos dessa matriz. Os valores so atribudos a cada posio da matriz e a forma de atribuio a mesma de qualquer varivel ou constante. Pseudocdigo A atribuio de valores para cada posio da matriz em pseudocdigo ter a seguinte regra sinttica: <nome da matriz> [<nro. da linha>] [<nro. da coluna>] <valor>; Por exemplo, notas [0][0] 9.0; Neste exemplo, a posio 0x0 da matriz notas recebe o valor 9.0. Podemos tambm atribuir valores no momento da declarao da matriz, conforme a seguinte regra sinttica: Declarar <nome da matriz> [<nro linhas>][<nro colunas>] {{<vlr11> , <vlr12> , ... , <vlr1n>} , {<vlr21> , <vlr22> , ... , <vlr2n>} , ... , {<vlrm1> , <vlrm2> , ... , <vlrmn>}} <tipo de dados da matriz>; Por exemplo, Declarar notas [2][3] {{ 9.0 , 10.0 , 8.5} , { 5.5 , 5.0 , 7.5}} numrico_real; Neste exemplo, declaramos uma matriz chamada notas de tamanho 2x3, ou seja, de 6 posies, de forma que a posio 0x0 da matriz possua o valor 9.0, a posio 0x1 da matriz possua o valor 10.0, a posio 0x2 da matriz possua o valor 8.5, a posio 1x0 da matriz possua o valor 5.5, a posio 1x1 da matriz possua o valor 5.0 e a posio 1x2 da matriz possua o valor 7.5.

Java A atribuio de valores para cada posio da matriz em Java ter a seguinte regra sinttica: <nome da matriz> [<nro. da linha>] [<nro. da coluna>] = <valor>; Por exemplo, notas [0][0] = 9.0; Neste exemplo, a posio 0x0 da matriz notas recebe o valor 9.0. Podemos tambm atribuir valores no momento da declarao da matriz, conforme a seguinte regra sinttica: <tipo dos dados> <nome da matriz> [ ][ ] = {{<vlr11> , <vlr12> , ... , <vlr1n>} , {<vlr21> , <vlr22> , ... , <vlr2n>} , ... {<vlrm1> , <vlrm2> , ... , <vlrmn>}} <tipo dos dados da matriz>;
175
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

Por exemplo, double notas [ ][ ] = {{ 9.0 , 10.0 , 8.5} , { 5.5 , 5.0 , 7.5}}; Neste exemplo, declaramos uma matriz chamada notas de tamanho 2x3, ou seja, de 6 posies, de forma que a posio 0x0 da matriz possua o valor 9.0, a posio 0x1 da matriz possua o valor 10.0, a posio 0x2 da matriz possua o valor 8.5, a posio 1x0 da matriz possua o valor 5.5, a posio 1x1 da matriz possua o valor 5.0 e a posio 1x2 da matriz possua o valor 7.5.

11.5. Mostrando os Elementos de uma Matriz


Quando mostramos valores da matriz, precisamos saber qual o tipo de dados das informaes que foram armazenadas na matriz e o nmero de elementos dessa matriz. Os valores so mostrados para cada posio da matriz e a forma de mostrar os elementos na tela a mesma de qualquer varivel ou constante.

Pseudocdigo Para mostrar os valores de cada posio da matriz em pseudocdigo teremos a seguinte regra sinttica: escrever (<nome da matriz>[<nro. da linha>][<nro. da coluna>]); Por exemplo, escrever (notas [0][0]); Neste exemplo, o contedo da posio 0x0 da matriz notas ser mostrado ao usurio, ou seja, o valor 9.0 aparecer na tela do usurio. Note que a mensagem dentro do comando escrever pode vir concatenada com outros valores alfanumricos. Por exemplo: escrever (A nota : , notas[0][0]); Neste exemplo, a mensagem A nota 9.0 aparecer na tela do usurio.

Java Para mostrar os valores de cada posio da matriz em Java, teremos a seguinte regra sinttica: System.out.println (<nome da matriz> [<nro. da linha>][<nro. da coluna>]); Por exemplo, System.out.println(notas [0][0]); Neste exemplo, o contedo da posio 0x0 da matriz notas ser mostrado ao usurio, ou seja, o valor 9.0 aparecer na tela do usurio. Note que a mensagem dentro do comando System.out.println pode vir concatenada com outras Strings. Por exemplo:

176
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

System.out.println("A nota : " + notas[0][0]); Neste exemplo, a mensagem A nota 9.0 aparecer na tela do usurio.

11.6. Exemplos de Matrizes em Pseudocdigo


1. Desenvolva um algoritmo que receba 25 valores numricos inteiros numa matriz 5x5 e mostre esses nmeros. Algoritmo Mostrar incio_algoritmo // declarao de variveis e/ou constantes Declarar Mat [5][5] , i , j numrico_inteiro; // processamento de dados para i de 0 at 4 passo + 1 faa para j de 0 at 4 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (Mat[i][j]); // sada de resultados escrever (Mat[i][j]); fimpara; fimpara; fim_algoritmo. 2. Desenvolva um algoritmo que receba 120 valores numricos inteiros em uma matriz 10x12 e mostre a soma desses 120 nmeros. Algoritmo Somar incio_algoritmo // declarao de variveis e/ou constantes Declarar MatSoma [10][12] , a , b , soma 0 numrico_inteiro; // processamento de dados para a de 0 at 9 passo + 1 faa

177
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

para b de 0 at 11 passo + 1 faa // mensagem ao usurio escrever ("Digite um valor inteiro"); // entrada de dados ler (MatSoma[a][b]); soma soma + MatSoma[a][b]; fimpara; fimpara; // sada de resultados escrever ("A soma dos 120 valores digitados : " , soma); fim_algoritmo.

3. Desenvolva um algoritmo que receba 50 notas bimestrais de 10 alunos de 5 turmas, calcule e mostre a mdia aritmtica dessas 50 notas. Algoritmo MediaAritmetica incio_algoritmo // declarao de variveis e/ou constantes Declarar i , j numrico_inteiro; Notas [10][5] , media, soma 0 numrico_real; // processamento de dados para i de 0 at 9 passo + 1 faa para j de 0 at 4 passo + 1 faa // mensagem ao usurio escrever ("Digite uma nota"); // entrada de dados ler (Notas[i][j]); soma soma + Notas[i][j]; fimpara; fimpara; // processamento de dados media soma/50; // sada de resultados escrever ("A mdia das 50 notas digitadas : " , media); fim_algoritmo.

178
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

4. Desenvolva um algoritmo modularizado que receba 200 valores numricos reais numa matriz 20 x 10, mostre esses valores e a soma dos nmeros pares. numrico_real FuncSoma ( ) incio Declarar // declarao de variveis e/ou constantes i , j numrico_inteiro; MatNum [20][10] , soma 0 numrico_real; // processamento de dados para i de 0 at 19 passo + 1 faa para j de 0 at 9 passo + 1 faa // mensagem ao usurio escrever (Digite um nmero); ler (MatNum[i][j]); // entrada de dados se ((MatNum[i][j] mod 2) = 0 ) ento soma soma + MatNum[i][j]; fimse; escrever (O nmero digitado , MatNum[i][j]); fimpara; fimpara; // sada de resultados retornar soma; fimmdulo. Algoritmo SomaPares incio_algoritmo Declarar // declarao de variveis e/ou constantes s 0 numrico_real; // processamento de dados s FuncSoma ( ); // sada de resultados escrever (A soma dos nmeros pares : , s); fim_algoritmo.

179
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

11.7. Exemplos de Matrizes em Java


1. Desenvolva um algoritmo que receba 25 valores numricos inteiros numa matriz 5x5 e mostre esses nmeros. class Mostrar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int Mat [ ][ ] , i , j ; Mat = new int [5][5]; // processamento de dados for ( i = 0 ; i < 5 ; i++ ) { for ( j = 0 ; j < 5 ; j++) { // mensagem ao usurio e entrada de dados Mat[i][j] = Integer.parseInt(JOptionPane.showInputDialog (Digite um valor inteiro)); // sada de resultados System.out.println (Mat[i][j]); } // for usando a varivel j } // for usando a varivel i System.exit(0); } // void main } // classe Mostrar

2. Desenvolva um algoritmo que receba 120 valores numricos inteiros numa matriz 10x12 e mostre a soma desses 120 nmeros. class Somar { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int MatS [ ][ ] , a , b , soma = 0; MatS = new int [10][12]; // processamento de dados for ( a = 0 ; a <= 9 ; a++ ) { for ( b = 0 ; b <= 11 ; b++ ) { // mensagem ao usurio e entrada de dados MatS[a][b]= Integer.parseInt(JOptionPane.showInputDialog (Digite um valor inteiro)); soma = soma + MatS[a][b];
180
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

} // for usando a varivel b } // for usando a varivel a // sada de resultados System.out.println (A soma dos 120 valores digitados : + soma); System.exit(0); } // void main } // classe Somar

3. Desenvolva um algoritmo que receba 50 notas bimestrais de 10 alunos de 5 turmas, calcule e mostre a mdia aritmtica dessas 50 notas. class MediaAritmetica { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int i , j ; double Notas[ ][ ] , media , soma = 0; Notas = new double [10][5]; // processamento de dados for ( i = 0 ; i <= 9 ; i++ ) { for ( j = 0 ; j <= 4 ; j++ ) { // mensagem ao usurio e entrada de dados Notas[i][j] = Double.parseDouble( JOptionPane.showInputDialog (Digite uma nota)); soma = soma + Notas[i][j]; } // for usando varivel j } // for usando varivel i media = soma/50; // sada de resultados System.out.println (A mdia das 50 notas digitadas : + media); System.exit(0); } // void main } // classe MediaAritmetica 4. Desenvolva um algoritmo que receba 200 valores numricos reais numa matriz 20x10, mostre esses valores e a soma dos nmeros pares. class SomaPares { public static void main(String args [ ]) { // declarao de variveis e/ou constantes int i , j ;
181
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

double MatNum[ ][ ] , soma = 0; MatNum = new double [20][10]; // processamento de dados for ( i = 0 ; i < 20 ; i++ ) { for ( j = 0 ; j < 10 ; j++ ) { // mensagem ao usurio e entrada de dados MatNum[i][j] = Double.parseDouble( JOptionPane.showInputDialog (Digite um nmero)); if ((MatNum[i][j] % 2) == 0) { soma = soma + MatNum[i][j]; } // if // sada de resultados System.out.println(O nmero digitado + MatNum[i][j]); } // for usando a varivel j } // for usando a varivel i // sada de resultados System.out.println (A soma dos nmeros pares : + soma); System.exit(0); } // void main } // classe SomaPares

Exerccios de Matrizes
Para todos os exerccios abaixo, construir um algoritmo modularizado usando matriz. 01. Desenvolva um algoritmo que receba e mostre 120 valores alfanumricos numa matriz 10x12. 02. Desenvolva um algoritmo que receba 20 valores numricos inteiros numa matriz A de dimenses 10x2 e 20 valores numricos inteiros numa matriz B de dimenses 10x2. Construa uma matriz C com dimenses 10x2, onde cada posio possua a soma dos elementos das matrizes A e B em suas respectivas posies. Mostre os elementos das trs matrizes. 03. Desenvolva um algoritmo que receba 50 valores numricos reais numa matriz X de dimenses 5x10 e 30 valores numricos reais numa matriz Y de dimenses 3x10. Construa uma matriz Z de dimenses 8x10 com a concatenao das matrizes X e Y, ou seja, os elementos das 5 primeiras linhas so os mesmos elementos da matriz X e os elementos das trs ltimas linhas so os mesmos da matriz Y. Mostre os elementos das trs matrizes. 04. Desenvolva um algoritmo que receba 10 valores numricos inteiros numa matriz Num de dimenses 5x2, calcule e mostre os nmeros primos e suas respectivas posies.

182
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

05. Desenvolva um algoritmo que receba 50 valores numricos reais numa matriz 10x5, calcule e armazene numa segunda matriz os 50 valores da primeira matriz multiplicados por 7. Mostre os valores das duas matrizes. 06. Desenvolva um algoritmo que receba 35 valores numricos inteiros numa matriz de dimenses 7x5, calcule e armazene numa segunda matriz o quadrado dos 35 valores da primeira matriz. Mostre os valores das duas matrizes. 07. Desenvolva um algoritmo que receba 45 valores numricos inteiros numa matriz de dimenses 5x9, calcule e armazene numa segunda matriz o fatorial de cada elemento da primeira matriz. Mostre as duas matrizes. 08. Desenvolva um algoritmo que receba 90 valores numricos inteiros positivos numa matriz de dimenses 10x9, calcule e armazene numa segunda matriz o negativo de cada elemento da primeira matriz. Mostre as duas matrizes. 09. Desenvolva um algoritmo que receba 75 valores numricos reais numa matriz de dimenses 15x5, calcule e armazene numa segunda matriz a metade de cada elemento da primeira matriz. Mostre as duas matrizes. 10. Desenvolva um algoritmo que calcule a tabuada dos nmeros de 1 a 10 e armazene numa matriz de dimenses 10x10 o resultado da tabuada. Mostre os elementos da matriz. Na primeira coluna da matriz, armazene a tabuada da nmero 1, na segunda coluna da matriz, armazene a tabuada do nmero 2 e assim por diante, at a ltima coluna da matriz, armazene a tabuada do nmero 10. 11. Desenvolva um algoritmo que receba 15 valores referentes a temperaturas em graus Celsius e armazene na primeira linha de uma matriz de dimenses 3x15. Calcule e armazene na segunda linha dessa matriz os valores de cada temperatura em graus Celsius convertidos para graus Fahrenheit. Calcule e armazene na terceira linha dessa matriz cada temperatura em graus Celsius convertidos para graus Kelvin. Mostre os elementos da matriz. 12. Desenvolva um algoritmo que receba 49 valores numricos inteiros numa matriz de dimenses 7x7, calcule e armazene o triplo dos valores divisveis por 3 numa segunda matriz, armazenando inalterados os valores que no forem divisveis por 3. Mostre os elementos das duas matrizes. 13. Desenvolva um algoritmo que receba 15 valores alfanumricos numa matriz de dimenses 3x5 e armazene invertido esses elementos numa segunda matriz de dimenses 3x5. O primeiro elemento da primeira matriz ser o ltimo elemento da segunda matriz, o segundo elemento da primeira matriz ser o penltimo elemento da segunda matriz e assim por diante. Mostre os elementos das duas matrizes. 14. Desenvolva um algoritmo que receba 25 valores numricos inteiros e pares numa matriz de dimenses 5x5 e receba 25 valores numricos inteiros e mpares numa segunda matriz de dimenses 5x5 de forma que cada elemento recebido seja validado pelo programa e no pelo usurio. Armazene numa terceira matriz de 50 posies de dimenses 10x5 o resto da diviso de cada elemento da primeira matriz por 3 e o quociente da diviso de cada elemento da segunda matriz por 3. Os elementos das 5 primeiras linhas da terceira matriz so referentes primeira
183
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

matriz e os elementos das 5 ltimas linhas da terceira matriz so referentes segunda matriz. Mostre os elementos das trs matrizes. 15. Desenvolva um algoritmo que receba 70 valores divisveis por 2 e por 3 e armazene numa matriz de dimenses 7x10. O algoritmo e no o usurio quem deve validar, se um valor divisvel por 2 e por 3. Caso o valor digitado satisfaa a condio, ento ele ser armazenado na matriz, caso contrrio, outro valor ser recebido at que os 70 valores preencham a matriz. Mostre os elementos da matriz. 16. Desenvolva um algoritmo que receba 81 valores divisveis por 5 ou por 7 e armazene numa matriz de dimenses 9x9. O algoritmo e no o usurio quem deve validar, se um valor divisvel por 5 ou 7. Caso o valor digitado satisfaa a condio, ento ele ser armazenado na matriz, caso contrrio, outra valor ser recebido at que os 81 valores preencham a matriz. Mostre os elementos da matriz. 17. Desenvolva um algoritmo que receba 40 valores numricos inteiros numa matriz de dimenses 10x4, calcule e mostre os nmeros primos e suas respectivas posies. 18. Desenvolva um algoritmo que receba 55 valores numricos reais numa matriz de dimenses 5x11, calcule e mostre a mdia aritmtica dos 55 valores. 19. Desenvolva um algoritmo que receba 10 valores numricos inteiros numa matriz de dimenses 2x5, calcule e mostre a mdia ponderada dos 10 valores, considerando o peso de cada valor, o nmero correspondente da coluna em que se encontra mais um, ou seja, o peso do elemento da posio 0x0 1, o peso do elemento da posio 0x1 2 e assim por diante. 20. Desenvolva um algoritmo que receba 50 valores alfanumricos numa matriz de dimenses 10x5, verifique e mostre os elementos que comeam com uma vogal. Para facilitar, classifique em ordem crescente essa matriz. 21. Desenvolva um algoritmo que receba 49 valores numricos inteiros numa matriz de dimenses 7x7, calcule e mostre os nmeros pares, suas posies e a soma dos nmeros pares, bem como os nmeros mpares, suas posies e a quantidade de nmeros mpares. 22. Desenvolva um algoritmo que receba 65 valores resultantes dos nmeros sorteados em um dado jogado 65 vezes. Esses valores devem ser armazenados numa matriz 13x5. Mostre os nmeros sorteados e a freqncia com que apareceram. 23. Desenvolva um algoritmo que receba 100 valores alfanumricos entre vogais armazenadas numa matriz de dimenses 10x10, calcule e mostre quantas vezes cada vogal aparece e sua porcentagem. 24. Desenvolva um algoritmo que receba 35 valores numricos reais e armazene cada elemento de forma ordenada, numa matriz de dimenses 7x5. O primeiro valor digitado ser armazenado na primeira posio da matriz, ou seja, a posio 0x0; o segundo valor digitado ser armazenado na segundo posio da matriz, ou seja, a posio 0x1, se for maior que o primeiro elemento; se for menor que o primeiro elemento, deslocar esse valor para a segunda posio e armazenar o segundo valor digitado na primeira posio. Continue essa regra at que todos os 35 valores

184
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

sejam digitados e armazenados em ordem crescente na matriz de 35 posies. Mostre os elementos dessa matriz. 25. Desenvolva um algoritmo que receba 15 valores numricos inteiros numa matriz X de dimenses 3x5, receba 15 valores numricos inteiros numa matriz Y de dimenses 3x5 e concatene alternadamente os elementos das matrizes X e Y numa terceira matriz Z de dimenses 3x10. Os elementos das colunas pares da matriz Z so os mesmos da matriz X e os elementos das colunas mpares da matriz Z so os mesmos da matriz Y. Mostre os elementos das trs matrizes. 26. Desenvolva um algoritmo que receba 30 valores numricos reais numa matriz A de dimenses 10x3, receba 30 valores numricos reais numa matriz B de dimenses 10x3 e concatene os elementos das matrizes A e B numa terceira matriz C de dimenses 20x3. Os primeiros 30 elementos da matriz C so os mesmos da matriz A e os 30 ltimos elementos da matriz C so os mesmos da matriz B. Mostre os elementos das trs matrizes. 27. Desenvolva um algoritmo que receba 64 valores alfanumricos numa matriz de dimenses 8x8, armazene de forma invertida os elementos dessa matriz numa segunda matriz de dimenses 8x8, ou seja, o primeiro elemento da primeira matriz estar na ltima posio da segunda matriz, o segundo elemento da primeira matriz estar na penltima posio da segunda matriz e assim por diante. Mostre os valores das duas matrizes. 28. Desenvolva um algoritmo que receba 75 valores alfanumricos numa matriz de dimenses 15x5, armazene esses valores numa segunda matriz de dimenses 15x5 a partir do centro para a primeira e a ltima posies e de modo alternado, ou seja, o primeiro elemento da primeira matriz estar na posio do meio da segunda matriz, o segundo elemento da primeira matriz estar na posio esquerda da posio do meio da segunda matriz, o terceiro elemento da primeira matriz estar na posio direita da posio do meio da segunda matriz e assim por diante. Mostre os elementos das duas matrizes. 29. Desenvolva um algoritmo que receba 100 valores numricos inteiros numa matriz de dimenses 10x10. Armazene os restos das divises dos elementos das posies pares pela soma da sua posio (linha + coluna) numa segunda matriz de dimenses 10x10 e os quocientes das divises dos elementos das posies mpares pela soma da sua posio (linha + coluna) na segunda matriz. Mostre os elementos das duas matrizes. 30. Desenvolva um algoritmo que receba 35 valores numricos reais numa matriz de dimenses 7x5 e classifique em ordem crescente os elementos dessa matriz, utilizando a seguinte regra:

selecione o menor elemento da matriz de 35 posies; troque esse elemento pelo primeiro elemento da matriz; repita os dois primeiros itens, considerando agora os 34 elementos restantes da matriz,
trocando o menor elemento com o segundo elemento da matriz;

repita os dois primeiros itens, considerando agora os 33 elementos restantes da matriz,


trocando o menor elemento com o terceiro elemento da matriz;

continue at que se considere apenas a matriz com a ltima posio.


Mostre os elementos ordenados da matriz.

185
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
186
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
187
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
188
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
189
Copyright Faculdade IBTA

IBTA 3208
ADS / BD / RC / SI Algoritmos Semestre I

______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________ ______________________________________________________________________________
190
Copyright Faculdade IBTA

Potrebbero piacerti anche