Você está na página 1de 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
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
Copyright Faculdade IBTA
1
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
2
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
Copyright Faculdade IBTA
1
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
2
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?
Copyright Faculdade IBTA
1
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I

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.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:
Figura 1 Processamento de dados
A entrada de dados, que pode ser uma coleta de dados, uma depurao de dados ou um
armazenamento de dados, recebe a informao necessria que ser tratada no processamento
de dados. Essa entrada pode ser feita atravs de dispositivos de entrada, por exemplo, teclado,
mouse, etc.
O processamento de dados, que pode ser aritmtico ou lgico, trata a informao recebida na
entrada de dados, gerando resultados. Esse processamento efetuado dentro do computador, na
unidade lgica e aritmtica conhecida como ULA que fica dentro da CPU (Unidade Central de
Processamento), o crebro do computador.
A sada de dados, que pode ser uma coleta de resultados ou uma distribuio de resultados, a
entrega dos dados processados para o usurio. Essa sada pode ser feita atravs de dispositivos
de sada, por exemplo, monitor, impressora, etc.
Exemplificando, considere um problema cujo objetivo encontrar a soluo da soma de dois
nmeros. A partir dessa informao, podemos verificar que nossa entrada de dados so os dois
nmeros dos quais queremos encontrar a soma. Continuando, percebemos que nosso
processamento realizar o clculo aritmtico da soma dos dois nmeros fornecidos na entrada de
dados. E, finalizando, temos como resultado desse processamento a soma realizada desses dois
nmeros.
1.3. Algoritmo
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
2
Entrada Processamento Sada
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.
Copyright Faculdade IBTA
3
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
Para o nosso exemplo, o fluxograma ficaria da seguinte forma:
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
4
incio fim N1, N2 S = N1 + N2
S
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:
Copyright Faculdade IBTA
5
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
6
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.
Copyright Faculdade IBTA
7
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
8
1.6. Exemplo
/* Primeiro programa em Java
Este cdigo fonte ser salvo no arquivo primeiro_programa.java
Este programa serve para exemplificar um programa Java para os alunos de Lgica de
Programao
*/
public class primeiro_programa
{
public static void main(String argumentos [])
{
System.out.print(" Primeiro Programa de Lgica de
Programao");
System.exit(0);
} // fim do mtodo main
} // fim da classe principal primeiro_programa
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?
Copyright Faculdade IBTA
9
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:
1
3
+ 2
3
= 9 = 3
2
1
3
+ 2
3
+ 3
3
= 36 = 6
2
1
3
+ 2
3
+ 3
3
+ 4
3
= 100 = 10
2
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 * 1
2
27 = 19 + 2 * 2
2
35 = 5 + 2 * 5
2
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
10
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:
Copyright Faculdade IBTA
11
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
12
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.
Copyright Faculdade IBTA
13
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
14
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 2
32
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:
Figura 4 O tipo lgico em Java
Copyright Faculdade IBTA
15
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
para o tipo lgico, temos:
boolean tipo lgico que s pode assumir true ou false
intervalo compreendido: ocupa 1 bit
Figura 5 O tipo real em Java
Figura 6 O tipo caracter em Java
Figura 7 O tipo inteiro em Java
Figura 8 O tipo String em Java
3.2. Constantes
Definio
Dizemos que determinado dado uma constante quando este dado no sofre nenhuma alterao,
ou seja, ele fixo. Por exemplo, podemos definir uma constante pi 3.14, dentro do algoritmo e,
nesse algoritmo, esse valor nunca sofrer alterao.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
16
para o tipo real, temos dois tipos diferentes, dependendo da capacidade de
armazenamento:
float nmeros reais de 32 bits
intervalo compreendido: 3.4E-038 ... 3.4E+038
double nmeros reais com preciso dupla
intervalo compreendido: 1.7E-308 ... 1.7E-308
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.)
para o tipo inteiro, temos quatro tipos diferentes, dependendo da capacidade de
armazenamento
byte nmeros inteiros de 8 bits
intervalo compreendido: -128 ... 127
short nmeros inteiro de 16 bits
intervalo compreendido: -32.768 ... 32.767
int nmeros inteiros de 32 bits
intervalo compreendido: -2.147.483.648 ... 2.147.483.647
long nmeors inteiros de 64 bits
intervalo compreendido: -9.223.372.036.854.775.808 ...
9.223.372.036.854.775.807
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.
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;
Copyright Faculdade IBTA
17
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;
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
18
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.
Copyright Faculdade IBTA
19
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;
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
20
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;
Copyright Faculdade IBTA
21
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} b. M2 c. PARE! d. "MARIA" e. email@email
f. D/YU g. Avenida h. A*34 i. M(I) j. Teste_1
l. 5mar m. KJO&U n. LKJHHG o. KhMjh p. x<y
q. US$ r. df_2_9_df s. num-4 t. CEP 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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
22
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:
Figura 9 Operadores aritmticos bsicos
Alm dos operadores aritmticos bsicos, consideraremos, para pseudocdigo, operadores
aritmticos auxiliares para outros clculos, que so:
Copyright Faculdade IBTA
23
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
Operador Funo Exemplo
+ adio 5 + 3
- subtrao 2 - a
* multiplicao b * c
/ diviso d / 10
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:
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:
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
24
Operador Funo Exemplo
Math.pow potenciao Math.pow(2,3)
Math.sqrt radiao Math.sqrt(9)
% resto da diviso 7 % 3
parnteses mais inteiros
pot rad
* / div mod
+ -
Operador Funo Exemplo Resultado
pot potenciao pot(2,3) 2
3
= 8
rad radiciao rad(9)
9 = 3
mod resto da diviso 7 mod 3 resto da diviso = 1
div quociente da diviso 7 div 3 quoc. da diviso = 2
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:
Figura 14 Operadores relacionais
Java
Os operadores relacionais em Java tm uma pequena diferena dos operadores relacionais em
pseudocdigo e so representados como segue:
Copyright Faculdade IBTA
25
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
Operador Funo Exemplo Resultado
> maior que 3 > 2 Verdadeiro
< menor que 3 < 2 Falso
> = maior ou igual a 5 - 2 > = 1 + 2 Verdadeiro
< = menor ou igual a 5 - 2 < = 1 + 2 Verdadeiro
= igual a 10 = 9 Falso
< > diferente de 10 < > 10 Falso
Operador Funo Exemplo Equivalncia
+ + pr-incremento + + x x = x + 1
(incrementa e logo
depois usa o valor de x)
+ + ps-incremento y + + x = x + 1
(usa o valor de x e logo
depois incrementa)
- - pr-decremento - - z y = y - 1
(decrementa e logo
depois usa o valor de y)
- - ps-decremento k - - y = y - 1
(usa o valor de y e logo
depois decrementa)
+ = atribui a adio a + = 2 a = a + 2
- = atribui a subtrao b - = 5 b = b - 5
* = atribui a multiplicao c * = 9 c = c * 9
/ = atribui a diviso d / = 7 d = d / 7
% = atribui o resto da div. e % = 8 e = e % 8
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:
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:
Figura 17 Tabela verdade
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
26
Operador Funo Exemplo Resultado
> maior que 1 > 8 Falso
< menor que 1 < 8 Verdadeiro
> = maior ou igual a - 2 > = 1 + 5 Falso
< = menor ou igual a - 2 < = 7 - 2 Verdadeiro
= = igual a 10 = = 9 Falso
! = diferente de 10 ! = 9 Verdadeiro
Operador Funo
no negao
e conjuno
ou disjuno
A B no A A e B A ou B
V V F V V
V F F F V
F V V F V
F F V F F
Java
Os operadores lgicos em Java so representados como segue:
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:
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:
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
Copyright Faculdade IBTA
27
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
Operador Funo
! negao
&& conjuno
|| disjuno
no
e ou
parnteses mais internos
operadores aritmticos
operadores relacionais
operadores lgicos
b. 5 pot(2 , 3) + 4 2 * rad(4)
5 8 + 4 2 * 2
5 8 + 4 4
3
c. pot(3 1 , 2) 7 + rad(8 + 1) * 2
pot(2 , 2) 7 + rad(9) * 2
4 7 + 3 * 2
4 7 + 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
V e F
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
28
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
Copyright Faculdade IBTA
29
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
30
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.
Copyright Faculdade IBTA
31
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
32

2
O conceito de vetor ser visto no captulo 10.
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);
Copyright Faculdade IBTA
33
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.*;
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
34
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.
Copyright Faculdade IBTA
35
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
36
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().
Copyright Faculdade IBTA
37
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
38
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);
}
}
Copyright Faculdade IBTA
39
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
40
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.
Copyright Faculdade IBTA
41
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
42
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
Copyright Faculdade IBTA
43
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
44
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
(ax
2
+ 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.
Copyright Faculdade IBTA
45
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 . R
2
.
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. H
2
= C1
2
+ C2
2
.
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
46
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:
Copyright Faculdade IBTA
47
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");
}
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
48
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;
Copyright Faculdade IBTA
49
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");
}
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
50
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
Copyright Faculdade IBTA
51
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
52
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>)
{
Copyright Faculdade IBTA
53
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
54
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.
Copyright Faculdade IBTA
55
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
56
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.
Copyright Faculdade IBTA
57
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
58
5. Desenvolva um algoritmo que receba trs valores numricos reais, verifique e mostre se esses
valores podem ser o comprimento dos lados de um tringulo. Se falso, mostrar essa
informao ao usurio, caso contrrio, verificar se formam um tringulo equiltero, issceles ou
escaleno.
Algoritmo Triangulo
incio_algoritmo
// declarao de variveis e/ou constantes
Declarar
lado1, lado2, lado3 numrico_real;
// mensagem ao usurio
escrever (Digite trs valores reais);
// entrada de dados
ler (lado1, lado2, lado3);
// processamento de dados
se ((lado1 < lado2 + lado3) e (lado2 < lado1 + lado3 ) e (lado3 < lado1 + lado2))
ento
// sada de resultados
escrever (Com os valores digitados, podemos construir um tringulo );
se ((lado1 = lado2) e (lado2 = lado3))
ento
// sada de resultados
escrever (equiltero, com trs lados iguais.);
seno
se ((lado1 = lado2) ou (lado1 = lado3) ou (lado2 = lado3))
ento
// sada de resultados
escrever (issceles, com dois lados iguais.);
seno
// sada de resultados
escrever (escaleno, com trs lados diferentes);
fimse;
fimse;
seno
// sada de resultados
escrever (Com os valores digitados, no podemos construir um tringulo);
fimse;
fim_algoritmo.
Copyright Faculdade IBTA
59
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"));
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
60
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"));
Copyright Faculdade IBTA
61
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
62
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
Copyright Faculdade IBTA
63
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.");
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
64
}
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 ax
2
+ 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.
Copyright Faculdade IBTA
65
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
66
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.
Copyright Faculdade IBTA
67
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
68
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
Copyright Faculdade IBTA
69
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
70
// 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;
Copyright Faculdade IBTA
71
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
72
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:
Copyright Faculdade IBTA
73
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
74
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>;
Copyright Faculdade IBTA
75
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
76
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;
Copyright Faculdade IBTA
77
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
78
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");
}
Copyright Faculdade IBTA
79
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
80
7.3. Exemplos de Estrutura de Mltipla Escolha em Pseudocdigo
1. Desenvolva um algoritmo que receba quatro notas bimestrais, calcule e mostre a mdia
aritmtica dessas quatro notas, bem como, se o aluno foi aprovado (mdia >= 7), reprovado
(mdia < 3), em exame (mdia >= 3 ou mdia < 7) ou aprovado com louvor (mdia = 10).
Algoritmo MediaAritmetica
incio_algoritmo
// declarao de variveis e/ou constantes
Declarar
n1, n2, n3, n4, media numrico_real;
// mensagem ao usurio
escrever (Digite as quatro notas bimestrais);
// entrada de dados
ler (n1 , n2 , n3 , n4);
// processamento de dados
media (n1 + n2 + n3 + n4) / 4;
// sada de resultados
escrever (A mdia : , media);
// processamento de dados
escolha (media)
caso 7 .. 10 : se (media = 10)
ento
// sada de resultados
escrever(Aluno aprovado com louvor);
seno
// sada de resultados
escrever (Aluno aprovado);
fimse;
caso 0 .. 2.9 : // sada de resultados
escrever (Aluno reprovado);
caso 3 .. 6.9 : // sada de resultados
escrever (Aluno em exame);
caso contrrio : // sada de resultados
escrever (mdia invlida);
fimescolha;
fim_algoritmo.
Copyright Faculdade IBTA
81
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 regio de procedncia
1 norte
2, 5, 9 sul
3, 10 at 15 leste
7 ou 20 oeste
qualquer outro 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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
82
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 Nome da operao
+ adio
- subtrao
* multiplicao
/ diviso
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.
Copyright Faculdade IBTA
83
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;
}
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
84
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
Copyright Faculdade IBTA
85
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 regio de procedncia
1 norte
2, 5, 9 sul
3, 10 at 15 leste
7 ou 20 oeste
qualquer coisa 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 :
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
86
// 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 Nome da operao
+ adio
- subtrao
* multiplicao
/ diviso
class Calculo
{
public static void main(String arg [ ])
{
// declarao de variveis e/ou constantes
double d;
int res, num1, num2, oper;
// mensagem ao usurio e entrada de dados
num1 = Integer.parseInt(JOptionPane.showInputDialog("Digite
um nmero inteiro"));
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;
Copyright Faculdade IBTA
87
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 Frmula
quadrado lado * lado
tringulo (base * altura) / 2
retngulo base * altura
trapzio ((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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
88
Cdigo Produto Notvel Frmula
1
2
3
4
5
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
(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 O que fazer
Escola
Banco
Farmcia
Casa
Correio
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 Classificao
10 ou 11
12
13, 14 ou 15
19, 26 at 30
17 at 25
Qualquer outro cdigo
alimento no perecvel
alimento perecvel
vesturio
higiene pessoal
limpeza e utenslios domsticos
invlido
Copyright Faculdade IBTA
89
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 Categoria
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
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 Condio de pagamento
A
B
C
D
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 Operao aritmtica
+
-
*
/
^
m
q
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 gratificao
maior ou igual a 5.000,00 100,00
menor que 5.000,00 e maior ou igual que 2.500,00 200,00
menor que 2.500,00 e maior ou igual que 1.000,00 300,00
menor que 1.000,00 e maior ou igual que 500 400,00
menor que 500,00 500,00
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
90
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 Peso
At 60 (inclusive) Entre 60 e 90 (inclusive) acima de 90
menores de 20 9 8 7
de 20 a 50 6 5 4
maiores de 50 3 2 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 Preo do produto
1 a 5 10,00
6, 8 a 15 50,00
7 15,00
16, 17 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 Rendimento
Poupana 3%
Fundo de renda fixa 5%
CDB 6%
Aes 10%
Copyright Faculdade IBTA
91
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 Operao
1 apresentar os trs valores em ordem crescente
2 apresentar os trs valores em ordem decrescente
3 apresentar somente os valores pares
4 apresentar somente os valores mpares
5 apresentar somente os valores positivos
6 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 Operao
x
calcula o comprimento: C = 2 . p . raio
y
calcula a rea: A = p . raio
2
z
calculo o volume: V = 4/3 . p . raio
3
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:
Nome
Preferncia
Cor fruta
Maria vermelho morango
Jos azul figo
Joo verde uva
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
92
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:
Pas
Caractersticas
capital continente idioma
Brasil Brasilia Amrica Portugus
Japo Tquio sia Japons
Itlia Roma Europa Italiano
Arglia Argel frica Francs
Austrlia Canberra Oceania Ingls
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:
Bebida
Caractersticas
fruta ingrediente dia da semana
Magro Abacaxi Ginseng Segunda-feira
Forte Pra Gelia Tera-feira
Vitaminado Pssego Guaran Quarta-feira
Poderoso Acerola Germe de Trigo Quinta-feira
Saudvel Laranja Algas Sexta-feira
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:
Famlia
Fonte
Nome Instalao
Tompson Osis Sbado
Dorneles Floresta Tropical Domingo
Aguiar Gruta Sbado
Santos Po de Acar Domingo
Copyright Faculdade IBTA
93
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:
Etapa
Viagem
barco Distncia Vista
primeira Netuno 3 quilmetros Canho
segunda Pluto 4 quilmetros ndios
terceira Saturno 5 quilmetros Runas
quarta Marte 2 quilmetros Igreja
quinta Urano 8 quilmetros Gruta
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:
Museu
Dados
horrio abertura horrio de fechamento valor
Arte Moderna 8 horas 16 horas e 30 minutos R$ 43,60
Cartas e Manuscritos 10 horas 17 horas e 15 minutos R$ 21,50
Instrumentos Musicais 12 horas 17 horas e 30 minutos R$ 32,85
Pedras Preciosas 14 horas 18 horas e 10 minutos R$ 29,20
Relquias 16 horas 18 horas e 45 minutos R$ 39,50
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:
Vila
Rio
Nome Extenso
Vila urea Rio Coral 21 km
Vila do Retorno Rio Grande 24 km
Vila da Luz Rio Mesquita 28 km
Vila dos Pinheiros Rio Ronco 32 km
Vila Santana Rio da Viva 33 km
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
94
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:
Data
Dados
Atividade tempo temperatura
17 de maio Caminhada Frente Fria 16 graus
18 de maio Leitura Nublado 22 graus
19 de maio Computador Chuva Fina 18 graus
20 de maio Pesca Sol 25 graus
21 de maio Bicicleta Vento 20 graus
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:
Data
Dados
Disciplina horrio dificuldade
segunda-feira Lgica de Programao 19h30 as 21h mdio
tera-feira Lgica Matemtica 21h30 as 23h difcil
quarta-feira Fundamentos Software 19h30 as 21h fcil
quinta-feira Fundamentos Hardware 21h30 as 23h fcil
sexta-feira Ingls 19h30 as 21h mdio
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.
Copyright Faculdade IBTA
95
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
96
<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:
Copyright Faculdade IBTA
97
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
98
<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:
Copyright Faculdade IBTA
99
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;
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
100
} // 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);
Copyright Faculdade IBTA
101
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);
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
102
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
Copyright Faculdade IBTA
103
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
104
{
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;
Copyright Faculdade IBTA
105
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
106
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:
Copyright Faculdade IBTA
107
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
108
} // 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
Copyright Faculdade IBTA
109
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;
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
110
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
Copyright Faculdade IBTA
111
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
112
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);
Copyright Faculdade IBTA
113
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
114
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)
Copyright Faculdade IBTA
115
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);
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
116
}
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
Copyright Faculdade IBTA
117
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
118
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 x
y
,
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.
Copyright Faculdade IBTA
119
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 a
b
, sem utilizar o operador pot; calcule e mostre o
quociente e o resto da diviso de a por b, sem usar os operadores div e mod; e calcule e mostre
se os valores a e b so primos ou no.
30. Desenvolva um algoritmo que calcule e mostre o valor da seguinte srie:
Srie = 1/1 - 2/4 + 3/9 - 4/16 + 5/25 - ... + 15/225.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
120
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.
Copyright Faculdade IBTA
121
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
122
<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:
Copyright Faculdade IBTA
123
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
124
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;
Copyright Faculdade IBTA
125
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
126
<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)
{
Copyright Faculdade IBTA
127
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> ( );
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
128
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.
Copyright Faculdade IBTA
129
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 Nome da operao
+ adio
- subtrao
* multiplicao
/ diviso
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
130
// 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);
Copyright Faculdade IBTA
131
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);
caso - : // chamada domdulo procedimento Menos, passando num1 e num2 como
// parmetro
Menos (num1 , num2);
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
132
caso * : // chamada do mdulo procedimento vezes, passando num1 e num2 como
// parmetro
Vezes (num1 , num2);
caso / : // 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 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);
Copyright Faculdade IBTA
133
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
134
// 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.
Copyright Faculdade IBTA
135
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 Frmula
quadrado lado * lado
tringulo (base * altura) / 2
retngulo base * altura
trapzio ((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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
136
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
Copyright Faculdade IBTA
137
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
138
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)
Copyright Faculdade IBTA
139
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
140
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 Nome da operao
+ adio
- subtrao
* multiplicao
/ diviso
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
Copyright Faculdade IBTA
141
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)
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
142
{
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));
Copyright Faculdade IBTA
143
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)
{
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
144
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);
Copyright Faculdade IBTA
145
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 Frmula
quadrado lado * lado
tringulo (base * altura) / 2
retngulo base * altura
trapzio ((Base maior + base menor) * altura) / 2
class CalculoArea
{
// mdulo procedimento Menu
public static int Menu()
{
String msg = ;
int op;
msg = msg + Digite 1 para rea do quadrado\n;
msg = msg + Digite 2 para rea do tringulo\n;
msg = msg + Digite 3 para rea do retngulo\n;
msg = msg + Digite 4 para rea do trapzio\n;
msg = msg + Digite 0 para sair do 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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
146
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
Copyright Faculdade IBTA
147
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
148
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);
Copyright Faculdade IBTA
149
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 retorna
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
150
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)
Copyright Faculdade IBTA
151
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)
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
152
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 Frmula
quadrado lado * lado
tringulo (base * altura) / 2
retngulo base * altura
trapzio ((Base maior + base menor) * altura) / 2
Copyright Faculdade IBTA
153
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 Produto Notvel Frmula
1 quadrado da diferena de dois nmeros (a - b) * (a - b)
2 quadrado da soma de dois nmeros (a + b) * (a + b)
3 soma do quadrado de dois nmeros a * a + b * b
4 diferena do quadrado de dois nmeros a * a - b * b
5 produto da soma com a diferena de dois nmeros (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 O que fazer
Escola Estudar
Banco Pagar contar
Farmcia Comprar remdios
Casa Descansar
Correio 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 Condio de pagamento
A a vista em dinheiro ou cheque tem 20% de desconto
B a vista em carto de crdito tem 10% de desconto
C em 2 vezes, preo normal de etiqueta sem juros
D em 3 vezes, preo normal de etiqueta mais juros de 15%
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
154
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 Rendimento
Poupana 3%
Fundo de renda fixa 5%
CDB 6%
Aes 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.
Copyright Faculdade IBTA
155
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 Operao
1 os trs valores em ordem crescente
2 os trs valores em ordem decrescente
3 somente os valores pares
4 somente os valores mpares
5 somente os valores positivos
6 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 Operao
x calcula o comprimento: C = 2 p raio
y calcula a rea: A = p raio
2
z calcula o volume: V = 4/3 p raio
3
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
156
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
Copyright Faculdade IBTA
157
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:
Vet
0 1 2 3 4
carteira 1 carteira 2 carteira 3 carteira 4 carteira 5
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];
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
158
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.
notas
0 1 2 3 4 5 6 7 8 9
9.5 10.0 8.5 5.0 8.0 7.5 6.0 9.0 8.5 7.0
- 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.
Copyright Faculdade IBTA
159
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
160
<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.
Copyright Faculdade IBTA
161
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
162
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
Copyright Faculdade IBTA
163
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
164
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
Copyright Faculdade IBTA
165
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
166
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
Copyright Faculdade IBTA
167
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
168
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;
Copyright Faculdade IBTA
169
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
170
Mat 0 1 2 3 4
0 carteira 1 carteira 2 carteira 3 carteira 4 carteira 5
1 carteira 6 carteira 7 carteira 8 carteira 9 carteira 10
2 carteira 11 carteira 12 carteira 13 carteira 14 carteira 15
3 carteira 16 carteira 17 carteira 18 carteira 19 carteira 20
4 carteira 21 carteira 22 carteira 23 carteira 24 carteira 25
5 carteira 26 carteira 27 carteira 28 carteira 29 carteira 30
6 carteira 31 carteira 32 carteira 33 carteira 34 carteira 35
7 carteira 36 carteira 37 carteira 38 carteira 39 carteira 40
8 carteira 41 carteira 42 carteira 43 carteira 44 carteira 45
9 carteira 46 carteira 47 carteira 48 carteira 49 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.
Copyright Faculdade IBTA
171
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 = new int [100][5];
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.
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
172
Figura 21.
- 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;
Copyright Faculdade IBTA
173
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
Notas 1 Bim 2 Bim 3 Bim 4 Bim
0 1 2 3 4
Aluno 1 0
9.0 8.0 8.5 9.0 8.5
Aluno 2 1
5.0 6.0 7.0 8.0 6.5
Aluno 3 2
7.5 7.5 7.5 7.5 7.5
Aluno 4 3
5.0 9.0 3.0 7.0 6.0
Aluno 5 4
8.0 6.0 6.0 7.0 7.0
Aluno 6 5
9.0 8.0 9.0 10.0 9.0
Aluno 7 6
8.0 8.0 8.0 8.0 8.0
Aluno 8 7
8.5 6.0 7.5 6.0 7.0
Aluno 9 8
9.5 8.5 8.5 9.5 9.0
Aluno 10 9
5.0 6.5 7.0 7.5 6.5
Posies
Mdia
Final
- 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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
174
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>;
Copyright Faculdade IBTA
175
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:
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
176
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
Copyright Faculdade IBTA
177
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
178
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.
Copyright Faculdade IBTA
179
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];
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
180
} // 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 ;
Copyright Faculdade IBTA
181
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.
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
182
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
Copyright Faculdade IBTA
183
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
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
184
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.
Copyright Faculdade IBTA
185
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
186
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
Copyright Faculdade IBTA
187
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
188
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
Copyright Faculdade IBTA
189
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
______________________________________________________________________________
Copyright Faculdade IBTA
IBTA 3208
ADS / BD / RC / SI
Algoritmos
Semestre I
190