Prévia do material em texto
UFRA – UNIVERSIDADE FEDERAL
RURAL DA AMAZÔNIA
INSTITUTO CIBERESPECIAL
TÉCNICAS DE PROGRAMAÇÃO EM JAVA
Prof. D.Sc. Eng. Emerson Cordeiro Morais
Belém-PA, Abril de 2011.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 2
Sumário
Capítulo I – Algoritmos e Linguagens de Programação ......................... 4
1 Resolução de Problemas Computacionais ................................................................. 4
2 Conceito Formal de Algoritmo .................................................................................. 4
3 Linguagens de Programação ...................................................................................... 6
4 Tipos de Linguagens .................................................................................................. 8
5 Processos de Tradução .............................................................................................. 8
5.1 Montadores (Assemblers) ................................................................................... 9
5.2 Compiladores ...................................................................................................... 9
5.3 Interpretadores .................................................................................................. 10
5.4 Compiladores x Interpretadores ....................................................................... 11
5.5 Processo de Tradução da linguagem Java ........................................................ 11
Capítulo II – Conceitos Básicos de Programação .................................. 13
1 Tipos Primitivos de Dados ...................................................................................... 13
1.1 Tipos Numéricos .............................................................................................. 13
1.2 Tipos Não-numéricos ....................................................................................... 13
2 Identificadores ......................................................................................................... 14
3 Variáveis .................................................................................................................. 14
4 Constantes ................................................................................................................ 15
5 Comando de Atribuição ........................................................................................... 15
6 Entrada e Saída de Dados ........................................................................................ 16
6.1 Comandos de Saída de Dados .......................................................................... 16
6.2 Comandos de Entrada de Dados ....................................................................... 17
7 Blocos e Comentários .............................................................................................. 20
8 Operadores e Funções predefinidas ......................................................................... 20
8.1 Operadores Aritméticos .................................................................................... 20
8.2 Operadores Relacionais .................................................................................... 21
8.3 Funções Matemáticas ....................................................................................... 21
8.4 Operadores Lógicos .......................................................................................... 22
8.5 Tabelas Verdade ............................................................................................... 22
9 Ordem de Prioridade das Operações ....................................................................... 23
Capítulo III – Estrutura de Controle Linear (ou de Sequência) ........... 24
1 Estruturas de Controle ............................................................................................. 24
2 Estrutura de Controle Linear ................................................................................... 24
3 Reunião dos Conceitos na Formação do Primeiro Programa .................................. 25
4 Exercícios Propostos ............................................................................................... 25
Capítulo IV – Estrutura de Controle de Seleção ..................................... 29
1 Conceito de Seleção ................................................................................................ 29
2 Seleção Simples ....................................................................................................... 29
3 Seleção Composta ................................................................................................... 30
4 Seleção Encadeada .................................................................................................. 31
5 Seleção de Múltipla Escolha ................................................................................... 33
6 Exercícios Propostos ............................................................................................... 35
Capítulo V – Estrutura de Controle de Repetição ................................... 39
1 Conceito de Repetição ............................................................................................. 39
2 Repetição com Variável de Controle ....................................................................... 40
3 Repetição com Teste no Início ................................................................................ 41
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 3
4 Repetição com Teste no Final ................................................................................. 43
5 Exercícios Propostos ............................................................................................... 44
Capítulo VI – Vetores e Matrizes .................................................................. 48
1 Tipos Construídos .................................................................................................... 48
2 Vetores ..................................................................................................................... 48
3 Entrada, manipulação e saída de dados em Vetores ................................................ 49
4 Matrizes Bidimensionais ......................................................................................... 51
5 Entrada, manipulação e saída de dados em Matrizes .............................................. 52
6 Exercícios Propostos ............................................................................................... 53
Bibliografia ........................................................................................................ 56
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 4
Capítulo I – Algoritmos e Linguagens de
Programação
1 Resolução de Problemas Computacionais
Na fase de resolução do problema, será concentrada a tarefa de elaboração de um
algoritmo para resolver um problema proposto. Somente depois da satisfação com a
formulação de um algoritmo adequado é que se passará à implementação deste
algoritmo em alguma linguagem de programação, o que representará a fase de
implementação do problema.
Dado um algoritmo suficientemente preciso, sua codificação em alguma
linguagem de programação é direta. Nas fases anteriores descritas pode-se visualizar o
conceito de semântica e sintaxe de programas, respectivamente.
Figura 1: Resolução do Problema e Programação.
2 Conceito Formal de Algoritmo
Um algoritmo computacional pode ser definido como: uma sequência finita de
instruções bem definidas e não ambíguas, onde cada uma das quais pode serexecutada mecanicamente, num período de tempo finito e com uma quantidade de
esforço finito (TREMBLAY & BUNT, 1983).
Solução em
forma de
Algoritmo
Solução como
um programa
de computador
Problema
Passo difícil
Fase da
resolução do
problema
Fase da
implementação
do problema
Técn
Exem
indic
se en
Exem
9
9
9
9
9
9
Exem
9
9
9
9
9
9
9
Hanó
Exist
difer
para
O ob
nicas de Pro
mplos Infor
Apesar d
cações dada
ncontrar ess
mplo 1: Tel
9 Retirar o
9 Aguarda
9 Colocar
9 Discar o
9 Falar ao
9 Colocar
mplo 2: Tro
9 Posicion
9 Selecion
9 Subir na
9 Retirar a
9 Colocar
9 Descer d
9 Retirar a
Existem,
ói e Três Jes
O proble
tem três has
rentes (1-2-3
qualquer ha
bjetivo é tran
ogramação e
rmais de A
de o termo s
as para se c
a rua, por e
lefone públ
o fone do ga
ar o sinal son
o cartão no
número de
telefone;
o fone no g
oca de uma
nar a escada
nar uma nov
a escada;
a lâmpada q
a nova lâmp
da escada;
a escada.
, inclusive,
suítas e Trê
ema das To
stes (a-b-c),
3), os meno
aste, contan
nsferir os tr
em Java – P
Algoritmos
ser novo em
hegar a um
xemplo.
lico a cartã
ancho;
noro;
local indica
sejado;
gancho.
a lâmpada
a embaixo d
va lâmpada p
queimada do
pada no soq
alguns algo
ês Canibais.
orres de Han
, uma das qu
ores sobre o
nto que nunc
rês discos pa
rof. D.Sc. E
m si, o conc
ma determin
ão
ado;
queimada
a lâmpada q
para a subst
o soquete;
quete;
oritmos para
nói consiste
uais serve d
os maiores.
ca seja colo
ara outra ha
Eng. Emerso
ceito é certa
nada rua con
queimada;
tituição;
a problema
e em mover
de suporte p
Pode-se m
ocado um di
aste.
on Cordeiro
amente basta
nstituem um
s clássicos
r três disco
para três dis
mover um di
isco maior s
o Morais
ante familia
m algoritmo
como: Torr
os de uma T
scos de tama
isco de cad
sobre um m
5
ar. As
o para
res de
Torre.
anhos
da vez
menor.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 6
Algoritmo
início
mover o disco 1 para a haste b;
mover o disco 2 para a haste c;
mover o disco 1 para a haste c;
mover o disco 3 para a haste b;
mover o disco 1 para a haste a;
mover o disco 2 para a haste b;
mover o disco 1 para a haste b;
fim
Três jesuítas e três canibais precisam atravessar um rio; para tal, dispõem de um
barco com capacidade para duas pessoas. Por medidas de segurança não se permite que
em alguma margem a quantidade de jesuítas seja inferior à de canibais. Qual a
sequência de passos que permitiria a travessia com segurança?
Algoritmo
início
atravessar um jesuíta e um canibal;
voltar um canibal;
atravessar dois canibais;
voltar um canibal;
atravessar um jesuíta e um canibal;
voltar um canibal;
atravessar dois canibais;
voltar um canibal;
atravessar um jesuíta e um canibal;
fim
3 Linguagens de Programação
Para realizar qualquer tarefa, por mais simples que seja, um computador precisa
de instruções que o instruam como realizá-la. A maioria das máquinas opera
representações binárias e essa não é certamente o melhor método de comunicação com
os seres humanos. Linguagens de programação foram criadas para servir de interface
entre o usuário e o computador, facilitando a comunicação entre uma pessoa com um
problema e o computador que se deseja usar para resolvê-lo.
Uma LP (Linguagem de Programação) é uma linguagem destinada a ser usada
por uma pessoa para expressar um processo através do qual um computador pode
resolver um problema. Existem alguns paradigmas ou também chamados modelos, de
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 7
linguagens de programação: Imperativo, Funcional, Lógico e Orientado a Objetos. Os
quatro modelos de LP correspondem aos pontos de vista dos quatro componentes
citados. A eficiência na construção e execução de programas depende da combinação
dos quatro pontos de vista. Seguem os modelos respeitando a cronologia.
O modelo Imperativo é baseado na perspectiva do computador. A execução
sequencial de comandos e o uso de dados são conceitos baseados no modo como os
computadores executam programas no nível de linguagem de máquina. As LPs
imperativas são de fácil tradução. Um programa imperativo é equivalente a uma
sequência de modificações de locações de memória. São exemplos de linguagens
Imperativas: Fortran, Cobol, Ada, Perl, Basic, Pascal e C.
O modelo Funcional focaliza o processo de resolução do problema. A visão
funcional resulta em diversas funções que descrevem as operações que devem ser
efetuadas para resolver o problema, inclusive adotando recursividade. Pode-se citar
como exemplo de Linguagem Funcional: Lisp, Scheme, ML e Haskell.
O modelo Lógico está relacionado à perspectiva da pessoa. O modelo encara o
problema de uma perspectiva lógica através de um subconjunto do cálculo de
predicados, levando a um processo de dedução automática. Um programa lógico é
equivalente à descrição do problema expressa de maneira formal, similar à maneira que
o ser humano raciocinaria sobre ele. Pode-se citar como exemplos: Prolog, Datalog e
Mercury.
O modelo Orientado a Objeto focaliza o problema, uma vez que a
complexidade foi aumentada com o passar do tempo. No modelo OO a entidade
fundamental é o objeto. Objetos trocam mensagens entre si e os problemas são
resolvidos por objetos enviando mensagens uns para os outros. Os objetos do programa
equivalem aos objetos da vida real.
A primeira linguagem OO foi Smalltalk, desenvolvida em 1972, através de
refinamentos da Linguagem Simula 67. Existem algumas linguagens híbridas:
imperativas com características de Orientação a Objetos, como por exemplo: C++
(posteriormente C#), Visual Basic (posteriormente VB.NET) e Object Pascal (Delphi).
Java já nasceu puramente Orientada a Objetos.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 8
4 Tipos de Linguagens
A linguagem de máquina é a linguagem que está intimamente ligada ao projeto
lógico do computador. É a linguagem que ele entende desde que ele foi construído. A
linguagem de máquina é a mais trabalhosa de todas, tem que se preocupar muito durante
a programação, com os detalhes, o que torna esta tarefa bastante difícil.
A linguagem simbólica foi um passo adiante na tentativa de simplificar a
programação difícil da linguagem de máquina. A estrutura da linguagem simbólica
ainda se mantém na linguagem de máquina, mas os códigos são substituídos por
códigos mnemônicos, isto é, por códigos que empregam abreviações de nomes
sugestivos que lembram a função da instrução, e os endereços e áreas de trabalho são
mencionados por símbolos e nomes. É muito mais fácil trabalhar com codificação
simbólica do que codificação numérica. Seguem exemplos de instruções aritméticas e a
seguir, código equivalente em C e Assembly:
A linguagem automática foi um passo decisivo na tentativa de obter uma
linguagem bem próxima ao problema real. As estruturas destas linguagens são
orientadas de modo que possam ser facilmente assimiladas por especialistas de várioscampos de atividades profissionais. Ex: Cobol, Pascal, Fortran, etc.
5 Processos de Tradução
Para representar mais facilmente o que se deseja, os programas não são escritos
na linguagem que a máquina entende, mais sim em linguagens de mais alto nível. Para
isso há necessidade de se traduzir ou converter esses programas em linguagem de
máquina. Esse trabalho é feito automaticamente pelo próprio computador através de
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 9
programas tradutores. A linguagem na qual o programa original é escrito é denominada
linguagem fonte e a linguagem para a qual é convertido é denominada linguagem alvo.
Tradutores são programas que convertem um programa de usuário escrito em
uma linguagem para outra linguagem. Os tradutores podem ser montadores,
compiladores ou interpretadores.
5.1 Montadores (Assemblers)
Montador é o programa que traduz programas em uma linguagem fonte
simbólica para uma linguagem numérica de máquina. Essa tradução é a mais rápida e
simples que existe, pois cada comando na linguagem simbólica produz exatamente uma
instrução de máquina. A figura abaixo ilustra o fluxo básico de uma montagem, onde o
programa escrito em linguagem fonte, chamado código fonte, é analisado e convertido
instrução por instrução em um programa em linguagem binária de máquina,
denominado código objeto.
Figura 2: Processo de Montagem.
5.2 Compiladores
Compiladores são programas que realizam a conversão de um programa escrito
em linguagem de alto nível para um programa correspondente em linguagem de
máquina. Na compilação, o programa original em linguagem fonte é analisado e
traduzido para um programa equivalente descrito em linguagem de máquina.
Para um programa, que usa rotinas armazenadas em bibliotecas do compilador,
possa ser executado, é necessário inserir no código objeto do programa os códigos já
compilados dessas rotinas chamadas. Esse processo é feito na linkedição ou ligação e é
realizado por um programa chamado ligador ou linkeditor. Linkeditor é um programa
que tem como finalidade agregar rotinas (existentes em bibliotecas) referidas no
programa objeto, mas que não estão nele incluídas. Uma vez o código executável ou
Linguagem
de Máquina
Código
Fonte
Linguagem
Assembly
Código
Objeto Montador
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 10
módulo de carga é gerado, então o programa está pronto para ser executado pelo
computador.
Figura3: Processo de Compilação.
5.3 Interpretadores
Interpretadores são programas tradutores que diferem dos compiladores porque
não traduzem o programa fonte todo de uma vez, mas uma linha de cada vez. Cada linha
do programa fonte é lida, traduzida para linguagem de máquina e imediatamente
executada.
Não é necessário gerar qualquer programa equivalente ao inicial, pois a
interpretação se caracteriza por realizar as três fases (compilação, ligação e execução),
comando a comando, do programa fonte. Na realidade, existe apenas um passo:
executar uma instrução do programa fonte original. Tem a vantagem de ser um
Compilador
Código
Fonte
Linguagem de
Alto Nível
Código
Objeto
Linguagem
de Máquina
Linkeditor
Código
Executável
Linguagem
de Máquina
Bibliotecas
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 11
programa de menor tamanho e maior flexibilidade, porém tem a desvantagem de levar
mais tempo, para executar um programa do que os compiladores, tornando-se
ineficientes para grande quantidade de instruções ou dados.
Não há produtos intermediários como o código objeto ou código executável,
como acontece na compilação. Pelo método da interpretação cada comando do código
fonte é lido pelo interpretador, é convertido em código executável e imediatamente
executado, antes que o comando seguinte seja lido.
Figura 4: Processo de Interpretação.
5.4 Compiladores x Interpretadores
A principal vantagem da interpretação sobre a compilação é sua capacidade de
identificar e indicar um erro no programa fonte. Uma razoável desvantagem da
interpretação é o consumo de memória, pois o código (geralmente grande) do
interpretador deve permanecer na memória durante toda a execução, pois cada comando
necessita do interpretador, ao contrário da compilação.
Outra desvantagem da interpretação sobre a compilação consiste na
possibilidade de uma mesma parte de um código fonte ter que ser interpretada tantas
vezes quanto definidas na repetição, enquanto na compilação, isto acontece uma única
vez. A mesma desvantagem acontece com programas que são executados
frequentemente, pois na interpretação são convertidos toda vez que forem executados
enquanto na compilação essa conversão acontece uma única vez.
Há linguagens de programação cujas características estruturais são típicas de
métodos de compilação, possuindo apenas compiladores. São exemplos deste tipo:
Cobol, Fortran, Pascal e C. Há outras que possuem apenas interpretadores como o APL.
5.5 Processo de Tradução da linguagem Java
A linguagem de programação Java tem uma arquitetura diferente, o que fornece
a seus programas mais portabilidade que outras linguagens de programação de alto
Instrução
Código
Fonte
Execução Interpretador
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 12
nível. A compilação do código Java não gera código executável em algum sistema
operacional. Em vez disso, gera um código “pseudo-executável”, chamado bytecode.
Esse é uma espécie de código de baixo nível que não é linguagem de máquina de algum
processador, nem faz interface específica com algum determinado sistema operacional.
Para que esse código possa ser executado em algum (e ao mesmo tempo em
qualquer) sistema operacional, é necessário que mais uma camada de software esteja
instalada. A camada funciona como um sistema operacional genérico, deixando
transparentes as particularidades do sistema operacional real. Essa camada de software
é chamada de Máquina Java Virtual, ou Java Virtual Machine (JVM).
A JVM faz a tradução dos bytecodes para código executável naquele sistema
operacional. Isto faz com que um programa escrito em Java e que seja compilado para
bytecode possa ser executado em qualquer máquina que tenha a JVM adequada
instalada. Durante a execução, esse código será traduzido em tempo real para a
linguagem proprietária e executado. A tradução em tempo real pode ser entendida como
uma espécie de interpretação. Portanto, é difícil afirmar que a linguagem de
programação Java seja uma linguagem puramente compilada ou interpretada.
Essa característica da linguagem Java faz com que esta seja extremamente
interessante para o uso na Internet, visto que o código Java que esteja presente em um
site poderá ser executado em qualquer plataforma que contenha a JVM instalada.
Normalmente, os browsers já contêm uma JVM para que possam trabalhar com sites
que contenham programas Java. A Figura 5 apresenta as etapas necessárias para a
execução de um programa Java.
Figura 5: Processo de Tradução da Linguagem de Programação Java.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 13
Capítulo II – Conceitos Básicos de
Programação
1 Tipos Primitivos de Dados
Um tipo de dado primitivo corresponde ao conjunto de valores queuma
variável, constante, expressão ou função pode assumir e o conjunto de operações que
podem ser efetuadas sobre ele. Estes conjuntos de valores são definidos pelas
linguagens de programação, sobre modelos matemáticos, que aproveitam as operações
sobre estes modelos. No caso do estudo da linguagem Java será usado os tipos:
1.1 Tipos Numéricos
Inteiro: informação numérica que pertença ao conjunto dos números inteiros, sendo
eles: positivos, negativos e o zero. Existem 4 (quatro) tipos:
a) byte: tem capacidade de 8 bits (de -128 a 127);
b) short: tem capacidade de 16 bits (de –32.768 a 32.767);
c) int: tem capacidade de 32 bits (de -2.147.483.648 a 2.147.483.647);
d) long: tem capacidade de 64 bits (de -9.223.372.036.854.775.808 a
9.223.372.036.854.775.807);
Real: informação numérica que pertença aos números reais, isto é, o conjunto dos
inteiros mais os números fracionários. Existem 2 (dois) tipos:
a) float: tem a capacidade de 32 bits (-3,4 x 10-38 a 3,4 x 1038).
b) double: tem a capacidade de 64 bits (-1,7 x 10-308 a 1,7 x 10308).
1.2 Tipos Não-numéricos
Literal (char): informação composta por: caracteres alfanuméricos {‘0’... ‘9’},
{‘A’... ‘Z’}, {‘a’... ‘z’} ou especiais {‘%’, ‘&’, ‘<’, ‘+’, ‘#’, ‘®’, ‘@’, ...}. O tipo
char tem capacidade de armazenamento de 16 bits.
Obs1: Em Java, String é uma classe definida, não um tipo primitivo, mas é utilizado
para armazenar cadeias de caracteres como o tipo de dado primitivo literal.
Obs2: Em Java, os caracteres são representados entre apóstrofos (‘ ’). As cadeias de
caracteres devem ser representadas entre aspas (“ ”).
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 14
Lógico (boolean): informação que pode assumir apenas duas situações: true (1) ou
false (0). O tipo boolean tem capacidade de armazenamento de 8 bits.
2 Identificadores
São os nomes das constantes, variáveis, tipos construídos e do programa e
servem para a sua identificação no código fonte. Os identificadores devem acompanhar
as seguintes regras de formação:
a) Devem começar por um caractere alfabético, sublinhado (‘_’) ou cifrão (‘$’);
b) Podem ser seguidos por mais caracteres, inclusive algarismos;
c) Não podem utilizar caracteres especiais, exceto os citados anteriormente;
d) Não poderá existir mais de um identificador, com o mesmo nome, no mesmo
programa;
e) Os nomes escolhidos não podem ser uma palavra reservada da linguagem
Java;
f) Os nomes escolhidos devem explicitar seus conteúdos;
Obs: as letras podem ser maiúsculas ou minúsculas, porém a linguagem Java é Case
Sensitive.
3 Variáveis
Uma informação é classificada como variável quando tem a possibilidade de ser
alterada em algum instante no decorrer do programa. Em um ambiente computacional,
as variáveis são guardadas na memória RAM. Visto que na memória existem inúmeras
variáveis, precisa-se diferenciá-las, o que é feito através do nome da variável.
Todo dado a ser armazenado na memória de um computador deve ser
previamente identificado, ou seja, primeiro é necessário saber qual o seu tipo, para
depois fazer a alocação de um espaço de memória para o seu armazenamento adequado.
Cada variável, no entanto, pode guardar apenas uma informação de cada vez, sendo
sempre do mesmo tipo. Os exemplos abaixo mostram como se deve declarar uma
variável:
float X;
double Y,Z;
char SEXO;
String NOME;
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 15
boolean RESPOTA;
Alguns tipos de dados da linguagem Java têm particularidades. O tipo long deve
ser identificado com a letra l, para não ser compactado pela linguagem em um tipo
inteiro. A compactação ocorre como uma maneira de reduzir o uso de memória.
Da mesma forma que tanta usar o mínimo de memória, a linguagem Java tenta
utilizar o máximo de precisão possível. Assim, se um elemento do tipo float (7 casas de
precisão após a vírgula) não for identificado com a letra f, a linguagem irá considerá-lo
como um tipo double (15 casas de precisão após a vírgula), o que pode gerar vários
erros de compilação e execução.
int N = 4;
long NUMERO = 456l;
float PI = 3.14f;
double TAMANHO = 3.873457486513793;
4 Constantes
Entende-se que uma informação é constante quando não sofre variações no
decorrer da execução do programa. Em Java, uma constante é uma variável declarada
com o modificador final. Modificadores são utilizados para modificar a atribuição de
classes, variáveis ou métodos. A declaração de constantes será feita, por exemplo, da
seguinte forma:
final int preco = 45;
final char resposta = ‘s’;
final float pi = 3.1415f;
As constantes devem ser declaradas como variáveis, cujo valor atribuído
permanecerá inalterado ao longo do programa. Por isto, também são chamadas de
variáveis somente leitura.
5 Comando de Atribuição
Um comando de atribuição permite fornecer um valor a uma variável, onde o
tipo dessa informação deve ser compatível com o tipo de variável. Este valor pode ser
predefinido ou pode ser resultado de um processamento. Exemplos:
TOTAL = 34;
RESPOSTA = true;
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 16
TIMEBOM = “Clube do Remo”;
Uma característica das variáveis é a de que podem guardar valores diferentes em
tempos diferentes. A habilidade de modificar os valores das variáveis é muito
importante, e por isso, as vezes, pode-se verificar a presença de mesma variável em
ambos os lados da linha de atribuição. Considere que esta aparição em ambos os
membros têm significados diferentes no processamento do comando. O exemplo mostra
a função da variável em cada um dos lados.
X = 1;
X = X + 1;
6 Entrada e Saída de Dados
Os cálculos do computador são de pouco valor a não ser que, primeiro, se possa
fornecer os dados sobre os quais estes cálculos serão efetuados e, segundo, ver os
resultados desses cálculos. Uma vez que as operações de entrada e saída são muito
relacionadas à interação dos programadores, sua forma é altamente dependente da
linguagem de programação específica.
Todo algoritmo para computador possui comandos que levam a informação da
memória principal do computador a seus periféricos e vice-versa. Os comandos que se
fará uso para manusear entrada e saída de informações são mostrados a seguir.
6.1 Comandos de Saída de Dados
O comando de saída é utilizado para mostrar dados na tela ou na impressora. É
possível mostrar: conteúdo de qualquer variável; resultado de qualquer expressão; valor
de qualquer constante.
Os comandos de saída mais utilizados em Java são: System.out.println
(mostra o seu conteúdo e passa para a linha de baixo) e System.out.print
(mantém o cursor na mesma linha após mostrar a mensagem). Seguem alguns
exemplos:
Indica que um
segundo valor
será atribuído à
variável X
Indica que o
primeiro valor
da variável X
será utilizado
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 17
System.out.println(X);
System.out.println (“Conteúdo de x =” + X);
public class Primeiro {
public static void main(String args[]){
System.out.println(“Alô Mundo!”);
}
}
Também podemos realizar a saída de dados utilizando elementos gráficos como
segue no exemplo:
import javax.swing.JOptionPane;
public class Primeiro{
public static void main(String args[]){
JOptionPane.showMessageDialog(null,"Alô Mundo!");
}
}
Outro problema encontrado na linguagem é em relação à formatação de saída de
dados. Quando estamos trabalhando com tipos de dados reais, precisamos fazer a
formatação desses números para definir aquantidade de casas decimais que devem ser
mostradas. Segue exemplo utilizando o método DecimalFormat.
DecimalFormat casas;
casas = new DecimalFormat(“0.00”);
System.out.println(“Média = ” + casas.format(media));
Neste exemplo, a formatação permitirá que sejam mostradas duas casas decimais
para o valor da variável media. Para utilização deste método, deve-se incluir o pacote de
classes text, ou seja, import java.text.*;
6.2 Comandos de Entrada de Dados
O comando de entrada é utilizado para receber dados digitados pelo usuário. Os
dados recebidos são armazenados em variáveis. Há de se ressaltar que o processo de
associar valores às variáveis indicadas é semelhante à operação de atribuição em dois
importantes aspectos: i) qualquer valor que a variável possua anteriormente será
destruído; e ii) como na atribuição, é verificada a compatibilidade de tipo.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 18
Uma das formas de entrada utilizada na Linguagem Java é por meio da classe
Scanner, que requer a importação do pacote java.util.Scanner. Seguem alguns
exemplos:
int n1;
Scanner dado;
dado = new Scanner (System.in);
n1 = dado.nextInt( );
float x;
Scanner dado;
dado = new Scanner (System.in);
x = dado.nextFloat( );
String nome;
Scanner dado;
dado = new Scanner (System.in);
nome = dado.next( );
É importante salientar que todas as entradas são recebidas pela linguagem Java
como um conjunto de caracteres. Assim, estes caracteres deverão ser convertidos por
funções de conversão de tipos. Seguem algumas dessas funções:
FUNÇÃO FUNCIONALIDADE
next( ) Aguarda uma entrada em formato String com uma única palavra.
nextLine( ) Aguarda uma entrada em formato String com uma ou várias palavras.
nextInt( ) Aguarda uma entrada em formato número inteiro.
nextByte( ) Aguarda uma entrada em formato número inteiro.
nextShort( ) Aguarda uma entrada em formato número inteiro.
nextLong( ) Aguarda uma entrada em formato número inteiro.
nextFloat( ) Aguarda uma entrada em formato número fracionário.
nextDouble( ) Aguarda uma entrada em formato número fracionário.
Outra possibilidade é a utilização de caixas de diálogo disponibilizadas pelo
pacote gráfico javax.swing. Seguem exemplos:
Um valor inteiro digitado pelo
usuário será armazenado na
variável n1.
Um valor real digitado pelo
usuário será armazenado na
variável x.
Um valor literal digitado pelo
usuário será armazenado na
variável nome.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 19
Exemplo1:
import javax.swing.JOptionPane;
public class ExEntrada {
public static void main(String args[]){
String nome;
nome = JOptionPane.showInputDialog("Qual o seu Nome?");
JOptionPane.showMessageDialog(null, "O seu nome é " +
nome);
}
}
Exemplo2:
import javax.swing.JOptionPane;
public class ExSoma{
public static void main (String args []){
int valor1, valor2, soma;
valor1 = Integer.parseInt(JOptionPane.showInputDialog
("Qual o primeiro valor?"));
valor2 = Integer.parseInt(JOptionPane.showInputDialog
("Qual o segundo valor?"));
soma = valor1 + valor2;
JOptionPane.showMessageDialog(null, "Resultado " +
soma);
}
}
Neste caso, também existe a necessidade de funções de conversão de tipos.
Seguem alguns exemplos:
FUNÇÃO FUNCIONALIDADE
Integer.parseInt( ) Converte um parâmetro literal em formato número inteiro.
Byte.parseByte( ) Converte um parâmetro literal em formato número inteiro.
Short.parseShort( ) Converte um parâmetro literal em formato número inteiro.
Long.parseLong( ) Converte um parâmetro literal em formato número inteiro.
Float.parseFloat( ) Converte um parâmetro literal em formato número real.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 20
Double.parseDouble( ) Converte um parâmetro literal em formato número real.
7 Blocos e Comentários
Um bloco pode ser definido como um conjunto de ações com uma função
definida; neste caso, um algoritmo pode ser visto como um bloco. Delimita-se o bloco
por um início ({) e um fim (}).
{
.
. {sequência de ações}
.
}
Comentários são textos que podem ser inseridos em programas com o objetivo
de documentá-los. Eles são ignorados no processo de tradução. Com este objetivo,
devemos utilizar os símbolos /* */ ou // (encerrado automaticamente no final da linha).
8 Operadores e Funções predefinidas
A Linguagem Java possui operadores e funções predefinidos destinados a
cálculos matemáticos. Alguns são apresentados a seguir:
8.1 Operadores Aritméticos
OPERADOR OPERAÇÃO
+ Adição
- Subtração
* Multiplicação
/ Divisão*
% Resto da divisão inteira
++ Incremento de 1 em relação ao valor atual
-- Decremento de 1 em relação ao valor atual
* A divisão pode ser inteira ou real. Só será divisão real se ao menos um dos operandos
for real, caso contrário será uma divisão inteira.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 21
8.2 Operadores Relacionais
Um operador relacional, ou simplesmente relação, é uma comparação realizada
entre dois valores de mesmo tipo básico.
OPERADOR OPERAÇÃO
== Igual
!= Diferente
> Maior
< Menor
>= Maior ou Igual
<= Menor ou Igual
8.3 Funções Matemáticas
Além das operações básicas anteriormente citadas, pode-se usar nas expressões
aritméticas algumas funções da matemática, tais como:
FUNÇÃO FUNCIONALIDADE
Math.ceil(X) Arredonda o número real X para o inteiro superior
Math.floor(X) Arredonda o número real X para o inteiro inferior
Math.round(X) Arredonda o número real X para o inteiro mais próximo
Math.sqrt(X) Calcula a raiz quadrada de X
Math.cbrt(X) Calcula a raiz cúbica de X
Math.pow(X, Y) Calcula a potenciação da base X elevada ao expoente Y
Math.cos(X) Calcula o cosseno de X (sendo X em radianos)
Math.sin(X) Calcula o seno de X (sendo X em radianos)
Math.tan(X) Calcula a tangente de X (sendo X em radianos)
Math.abs(X) Retorna o valor absoluto de X
Math.log10(X) Obtém o logaritmo na base 10 de X
Math.log(X) Obtém o logaritmo natural (na base e) de X
Math.exp(X) Obtém o número e elevado ao expoente X
Math.PI Retorna o valor de π
Math.toDegrees(X) Converte o valor de X de radianos para graus
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 22
Math.toRadians(X) Converte o valor de X de graus para radianos
Math.max(X, Y) Retorna o maior dos dois valores X e Y
Math.min(X, Y) Retorna o menor dos dois valores X e Y
Math.random( ) Retorna um valor real aleatório >= 0 e < 1
Math.signum(X)
Retorna 0 se o argumento real X é igual a zero; retorna 1 se o
argumento é maior do que zero; ou retorna -1 se o argumento
é menor do que zero
A linguagem Java possui muitas outras funções matemáticas que podem ser
observadas detalhadamente na documentação da classe Math.
8.4 Operadores Lógicos
Serão utilizados três conectivos básicos para a formação de novas preposições a
partir de outras já conhecidas. Os operadores lógicos são:
OPERADOR OPERAÇÃO
! Negação (Não)
&& Conjunção (E)
|| Disjunção (Ou)
8.5 Tabelas Verdade
Tabela Verdade é o conjunto de todas as possibilidades combinatórias entre os
valores de diversas variáveis lógicas, as quais se encontram em apenas duas situações.
8.5.1 Operação Negação
A !A
Verdadeiro Falso
Falso Verdadeiro
8.5.2 Operação Conjunção
A B A && B
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Falso
Falso Verdadeiro Falso
Falso Falso FalsoTécnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 23
8.5.3 Operação Disjunção
A B A || B
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Verdadeiro
Falso Verdadeiro Verdadeiro
Falso Falso Falso
9 Ordem de Prioridade das Operações
Durante a execução de uma expressão que envolve vários operadores, é
necessária a existência de prioridades, caso contrário poder-se-á obter valores que não
representam o resultado esperado. É a seguinte a hierarquia que a linguagem Java segue:
1. Operações embutidas em parênteses mais internos;
2. Funções matemáticas;
3. Potenciações;
4. Multiplicações e/ou divisões;
5. Adições e/ou subtrações;
6. Atribuições;
7. Operadores relacionais;
8. Operadores lógicos de negação;
9. Operadores lógicos de conjunção e de disjunção;
Deve-se lembrar sempre, que na ausência de ordem de prioridade, as operações
são realizadas da esquerda para a direita.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 24
Capítulo III – Estrutura de Controle
Linear (ou de Sequência)
1 Estruturas de Controle
Na criação de programas em Java, utilizamos os conceitos de: bloco lógico,
entrada e saída de dados, variáveis, constantes, atribuições, expressões e operadores
lógicos, relacionais e aritméticos, bem como comandos que traduzam estes conceitos de
forma a representar um conjunto de ações.
Para que este conjunto de ações se torne viável, deve existir uma perfeita relação
lógica intrínseca ao modo pelo qual as ações são executadas, ao modo pelo qual é regido
o fluxo de execução do programa.
Através das estruturas básicas de controle do fluxo de execução, a saber: linear,
seleção e repetição, e da combinação delas, podemos criar programas para solucionar
nossos problemas.
2 Estrutura de Controle Linear
A estrutura linear de um programa corresponde ao fato de que o conjunto de
ações primitivas será executado em uma sequência de cima para baixo e da esquerda
para a direita, isto é, na mesma ordem em que foram escritas. Nenhuma das instruções
deixará de ser executada e cada uma dessas instruções será executada apenas uma vez.
A seguir é ilustrado o modelo de um programa linear.
import nome_do_pacote_das_classes;
public class Nome_da_Classe{
public static void main (String args []){
Instrução 1;
Instrução 2;
...
Instrução n;
}
}
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 25
Convencionaremos que as ações serão seguidas por ponto-e-vírgula (;), que
objetiva separar uma ação da outra e auxiliar a organização sequencial das ações, pois
após encontrar um (;) deveremos executar o próximo comando da sequência.
3 Reunião dos Conceitos na Formação do Primeiro Programa
Neste momento todos os conceitos apresentados até aqui serão utilizados na
formação do primeiro programa, apenas com o intuito de junção de idéias, que em
princípio, estavam soltas.
O programa deve realizar a entrada de duas notas escolares e calcular a média
dessas notas.
import javax.swing.JOptionPane;
public class Media{
public static void main (String args []){
int valor1, valor2;
double media;
valor1 = Integer.parseInt(JOptionPane.showInputDialog
("Qual o primeiro valor?"));
valor2 = Integer.parseInt(JOptionPane.showInputDialog
("Qual o segundo valor?"));
media = (valor1 + valor2)/2.0f;
JOptionPane.showMessageDialog(null, "Resultado " +
media);
}
}
4 Exercícios Propostos
E301 – Preparar um programa que dada a entrada do cateto oposto (CO) e do cateto
adjacente (CA), calcular a hipotenusa (HIP) de um triângulo retângulo. Sabe-se que pelo
Teorema de Pitágoras:
222 COCAHIP +=
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 26
E302 – Calcule a área (A) e o perímetro (p) de um círculo, tendo como entrada o raio.
Pela Geometria Euclidiana Plana, sabe-se:
E303 – Desenvolver um programa para ler uma temperatura na escala Celsius (Tc),
convertê-la e apresentá-la na escala Farenheit (Tf). Pela Termometria, sabe-se:
E304 – Preparar um programa para calcular o volume de uma esfera em que o raio é um
valor lido. Pela Geometria Euclidiana Espacial, sabe-se:
E305 – Uma equação quadrática apresenta a seguinte forma: AX 2 + BX + C, sendo A, B
e C os coeficientes quadrático, linear e angular, respectivamente, da equação de 2º grau.
Realizar a entrada dos três coeficientes, calcular e imprimir na tela o discriminante (Δ)
da equação quadrática. Sabe-se que:
E306 – Calcular a área de um triângulo, utilizando a fórmula de Heron (Matemático
Grego Herão de Alexandria), dada abaixo. A entrada será composta pelos três lados
válidos de um triângulo (L1, L2 e L3). A fórmula utiliza o conceito de semiperímetro
(s), também dado abaixo.
E307 – Ler dois valores para as variáveis A e B, e efetuar a troca dos valores de forma
que a variável A passe a possuir o valor da variável B e a variável B passe a possuir o
valor da variável A. Ao final da troca mostrar na tela os seus novos valores.
E308 – Uma família deseja realizar uma viagem de férias e precisa calcular: a
quantidade de litros de combustível que será utilizada e o valor total gasto com
2RA ⋅= π e R2p ⋅⋅= π
32
5
Tc9Tf +⋅=
3
R4V
3⋅⋅= π
CA4B 2 ⋅⋅−=Δ
2
3L2L1Ls ++= e )3Ls()2Ls()1Ls(sA −⋅−⋅−⋅=
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 27
combustível. Sabe-se que o automóvel possui um desempenho capaz de realizar 12
quilômetros com um litro de combustível. Como entradas, serão informados: o tempo
total de viagem e a velocidade média impressa durante a mesma. Sabe-se que o litro da
gasolina custa R$ 2,93. Pela Cinemática, sabe-se:
E309 – Efetuar o cálculo e a apresentação do valor de uma prestação em atraso,
utilizando a fórmula abaixo descrita. Dados informados pelo usuário: o valor principal
da prestação, a taxa de juros que será aplicada (em porcentagem) e o tempo de atraso
(em dias).
E310 – Construir um algoritmo que efetue o cálculo do salário líquido de um professor.
Para resolver este problema, deve-se realizar a entrada de alguns dados, tais como:
nome do professor, valor da hora-aula, número de horas trabalhadas no mês, percentual
de desconto do imposto de renda e valor do desconto de INSS. Em primeiro lugar, deve-
se calcular o salário bruto, multiplicando as horas trabalhadas pelo valor da hora aula.
Depois, devemos aplicar o percentual de desconto de Imposto de Renda sobre este
salário bruto para gerar um salário com desconto aplicado. Após este passo, deve-se
calcular o salário líquido subtraindo este último do valor do desconto do INSS. Como
saída de dados, deve-se emitir o nome do professor juntamente com o seu salário bruto e
líquido.
E311 – Desenvolver um programa que realize a entrada das abscissas e ordenadas de
dois pontos quaisquer A(x1, y1) e B(x2, y2) e calcule a distância entre estes pontos.
E312 – Levando em consideração Progressões Aritméticas e Geométricas, desenvolver
um algoritmo no qual o usuário informe: o primeiro termo a1, a razão q e a posição do
termo a ser encontrado n. O algoritmo deverá devolver o n-ésimo (an) termo em ambas
as séries.
dT
dSVm
→
→ =
100
TEMPOSTAXADEJUROVALORVALORPRESTAÇÃO ××+=
( ) ( )212212 yyxxDIST −+−=
)1(
Aritmética Progressão
1 −⋅+= nqaan 11
Geométrica Progressão
−⋅= nn qaa
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 28
E313 – O custo ao consumidor de umcarro novo é a soma do preço de fábrica com o
percentual de lucro do distribuidor e dos impostos aplicados ao preço de fábrica. Faça
um programa que receba o preço de fábrica de um veículo, o percentual de lucro do
distribuídos e o percentual de impostos, calcule e mostre:
a) O valor correspondente ao lucro do distribuidor;
b) O valor correspondente aos impostos;
c) O preço final do veículo.
E314 – Construa um algoritmo que calcule a quantidade de latas de tinta e o custo de
uma obra de pintura interna em um tanque cilíndrico sem tampa, onde são fornecidos a
altura e o raio desse cilindro. Sabe-se que:
a) A lata de tinta custa R$ 50,00;
b) Cada lata contém 5 litros;
c) Cada litro de tinta pinta 3 metros quadrados.
E315 – Informar o valor de N notas escolares (três, por exemplo: X1, X2 e X3) e calcular
o desvio padrão do conjunto.
⎥⎥⎦
⎤
⎢⎢⎣
⎡ ⎟⎠
⎞⎜⎝
⎛⋅−⋅−= ∑ ∑= =
N
i
N
i
ii XN
X
N
dp
1
2
1
2 1
1
1
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 29
Capítulo IV – Estrutura de Controle de
Seleção
1 Conceito de Seleção
Apesar de se conseguir solucionar problemas e transformá-los em programas, os
recursos da estrutura linear são muito limitados, pois haverá momentos em que um
determinado valor dentro de um programa necessitará ser tratado para se efetuar um
processamento mais adequado.
Uma estrutura de seleção permite a escolha de um grupo de ações e estruturas a
ser executado quando determinadas condições, representadas por expressões lógicas,
são ou não satisfeitas. Desta forma, conseguimos aplicar desvios condicionais aos
programas capacitando-os a executar ou não um conjunto de instruções.
2 Seleção Simples
Sintaxe da estrutura:
if (condição){
Instrução 1;
Instrução 2;
...
Instrução n;
}//fim do if
<condição> é uma expressão lógica, que quando verificada, pode gerar um
resultado falso ou verdadeiro. Se <condição> for verdadeira, então o “bloco verdade”
será executado; caso contrário (<condição> for falsa) o comando será encerrado.
Verificar-se-á, agora, o seguinte exemplo, para se analisar a estrutura de seleção
simples:
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 30
import javax.swing.JOptionPane;
public class Notas1{
public static void main (String args []){
float nota1, nota2;
double media;
nota1 = Float.parseFloat(JOptionPane.showInputDialog
("Qual a primeira nota?"));
nota2 = Float.parseFloat (JOptionPane.showInputDialog
("Qual a segunda nota?"));
media = (nota1 + nota2)/2;
if (media >= 5.0f){
JOptionPane.showMessageDialog(null, "Você está
aprovado”);
}
}
}
3 Seleção Composta
Sintaxe de estrutura:
if (condição){
Instrução 1;
Instrução 2;
...
Instrução n1;
}//fim do if
else{
Instrução 1;
Instrução 2;
...
Instrução n2;
}//fim do else
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 31
Se a <condição> for satisfeita, então apenas o “bloco verdade” será
executado, caso contrário, somente o “bloco falsidade” é o que será executado. Segue
uma melhoria do programa anterior, levando em consideração duas possibilidades:
aprovado ou reprovado.
import javax.swing.JOptionPane;
public class Notas2{
public static void main (String args []){
float nota1, nota2;
double media;
nota1 = Float.parseFloat(JOptionPane.showInputDialog
("Qual a primeira nota?"));
nota2 = Float.parseFloat (JOptionPane.showInputDialog
("Qual a segunda nota?"));
media = (nota1 + nota2)/2;
if (media >= 5.0f){
JOptionPane.showMessageDialog(null, "Você está
aprovado”);
}
else {
JOptionPane.showMessageDialog(null, "Você está
reprovado”);
}
}
}
4 Seleção Encadeada
Podemos agrupar várias alternativas a fim de inspecionar uma ou mais
condições. Geralmente tal estrutura é formada quando uma determinada instrução ou
bloco de ações deve ser executado se um conjunto de possibilidades ou combinações de
situações for satisfeito.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 32
Sintaxe da estrutura:
if (condição 1){
Instrução 1;
}//fim do if
else if (condição 2){
Instrução 2;
Instrução 3;
Instrução 4;
}//fim do if
else if (condição 3){
Instrução 5;
}//fim do if
else{
Instrução 6;
}//fim do senão
Se <condição 1> for satisfeita, então a instrução 1 será executada, caso
contrário, a <condição 2> será inspecionada e se for satisfeita, então o bloco de
ações (instrução 2, instrução 3, instrução 4) será executado, caso contrário a
<condição 3> será verificada e se for satisfeita, a instrução 5 será executada, caso
contrário a instrução 6 é que será executada. Segue uma melhoria do programa anterior,
levando em consideração três possibilidades: aprovado, reprovado ou recuperação.
import javax.swing.JOptionPane;
public class Notas3{
public static void main (String args []){
float nota1, nota2;
double media;
nota1 = Float.parseFloat(JOptionPane.showInputDialog
("Qual a primeira nota?"));
nota2 = Float.parseFloat (JOptionPane.showInputDialog
("Qual a segunda nota?"));
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 33
media = (nota1 + nota2)/2;
if (media >= 8.0f){
JOptionPane.showMessageDialog(null, "Você está
aprovado direto”);
}
else if (media >= 4.0f){
JOptionPane.showMessageDialog(null, "Você
está de recuperação”);
}
else{
JOptionPane.showMessageDialog(null, "Você
está reprovado”);
}
}
}
5 Seleção de Múltipla Escolha
Quando uma única variável pode assumir diversos valores e que as instruções a
serem executadas dependam do valor armazenado nesta variável, pode-se usar a
estrutura de seleção de múltipla escolha. Estas situações são classificadas como
mutuamente exclusivas, isto é, se uma situação for executada, as demais não serão.
Seria uma forma mais compacta da Seleção encadeada.
Sintaxe da estrutura:
switch (variável){
case valor 1: lista de comandos;
break;
case valor 2: lista de comandos;
break;
...
default: lista de comandos;
}
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 34
Exemplo: Construa um programa que, tendo como dados de entrada o custo de
produção de um produto e um código de origem, emita o preço final ao consumidor,
levando em consideração os custos de impostos. Código de Região de Origem:
1- Sul (20%)
2- Norte (21%)
3- Sudeste (15%)
4- Centro-Oeste (23%)
5- Nordeste (19%)
import javax.swing.JOptionPane;
public class PrecoFinal{
public static void main (String args []){
int regiao;
float valor;
valor = Float.parseFloat(JOptionPane.showInputDialog
("Informe o valor de custo do produto?"));
regiao = Integer.parseInt (JOptionPane.showInputDialog
("1-Sul\n2-Norte\n3-Sudeste\n4-Centro-Oeste\n5-Nordeste\n
Informe a região:"));
switch(regiao){
case 1:
JOptionPane.showMessageDialog(null, "Preço do
Produto na Região Sul = R$” + (valor*1.21));
break;
case 2:
JOptionPane.showMessageDialog(null, "Preço do
Produto na Região Norte = R$” + (valor*1.20));
break;
case 3:
JOptionPane.showMessageDialog(null, "Preço do
Produto na Região Sudeste = R$” + (valor*1.15));
break;
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 35case 4:
JOptionPane.showMessageDialog(null, "Preço do
Produto na Região Centro-Oeste = R$” + (valor*1.23));
break;
case 5:
JOptionPane.showMessageDialog(null, "Preço do
Produto na Região Nordeste = R$” + (valor*1.19));
break;
default: JOptionPane.showMessageDialog(null, "Região
Inválida!!! Entre Novamente!!!”);
}
}
}
6 Exercícios Propostos
E401 – Desenvolver um programa que realize a entrada do raio de uma esfera. Deve-se
realizar tratamento de exceção sobre a entrada. Isto é, se o raio for válido (maior do que
zero), deve-se calcular e apresentar na tela o volume da esfera, caso contrário, o cálculo
não será realizado e apenas uma mensagem de erro será exibida ao usuário. Sabe-se
que:
E402 – Preparar um programa para realizar a entrada dos três coeficientes de uma
equação quadrática, a saber: A, B e C; e calcular e imprimir as raízes da equação
quadrática: X1 e X2, se as mesmas forem reais. Caso sejam imaginárias, apresentar
mensagem de erro na tela. Sabe-se que:
E403 – O Greenpeace deseja desenvolver um programa para controlar o índice de
poluição das cidades. Para isto, guarda duas listas (A e B) de empresas que contribuem
para o aumento da poluição. Mensalmente, é medido in loco, o índice de poluição (varia
A2
Bx1
Δ+−= e
A2
Bx2
Δ−−=
3
R4V
3⋅⋅= π
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 36
obrigatoriamente entre 0 e 1) que será a entrada única do programa e o mesmo deverá
emitir as seguintes mensagens:
“Tudo normal!”, caso o índice fique entre 0,00 e 0,30;
“Fechar as empresas da lista A!”, caso o índice ultrapasse 0,30;
“Fechar as empresas da lista A e B!”, caso o índice ultrapasse 0,40;
“Evacuar a cidade! Socorro!”, caso o índice ultrapasse 0,50.
E404 – Elaborar um programa para ler três números inteiros A, B e C. Caso existam
números iguais, uma mensagem de erro para o usuário deve ser emitida. Caso contrário,
encontrar o maior, o menor e o médio elemento entre eles.
E405 – Desenvolver um programa para dada a entrada de três lados de um triângulo (A,
B e C), primeiramente verificar a sua possível formação, lembrando que cada lado deve
ser inferior a soma dos outros dois lados. Em caso afirmativo de formação, classificar o
triângulo em: equilátero, isósceles ou escaleno.
E406 – Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um
programa que calcule e escreva o seu peso ideal, utilizando as seguintes fórmulas:
Para homens: (72,7 x H) - 58
Para mulheres: (62,1 x H) - 44,7, sendo H a altura lida.
E407 – Elabore um programa que, dada a idade do nadador, classifique-os em uma das
seguintes categorias, sendo que qualquer outra idade deve ser tratada como exceção:
infantil A: 4 a 7 anos
infantil B: 8 a 10 anos
juvenil A: 11 a 13 anos
juvenil B: 14 a 17 anos
profissional: 18 a 39 anos
sênior: 40 a 99 anos
E408 – Escreva um programa que converta notas quantitativas em notas qualitativas de
acordo com a tabela abaixo:
Nota Quantitativa Nota Qualitativa
0 a 2 Sem rendimento
>2 a 4 Mau
>4 a 6 Regular
>6 a 8 Bom
>8 a 10 Excelente
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 37
E409 – Escreva um programa cuja saída seja o número de dias em um mês, usando
como entrada o número do mês (1 a 12) e o ano, se necessário. O programa deve tratar
corretamente os anos bissextos.
E410 – Um sebo está fazendo uma promoção para pagamento à vista em que o
comprador pode escolher dois critérios de pagamento:
Critério A: R$ 2,50 por livro + R$ 75,00 de taxa fixa.
Critério B: R$ 5,00 por livro + R$ 25,00 de taxa fixa.
Faça um programa em que o usuário digite a quantidade de livros que deseja comprar e
o programa diga qual é a melhor opção de compra.
E411 – Faça um programa que receba o código correspondente ao cargo de um
funcionário e seu salário atual e mostre o cargo, o valor do aumento e seu novo salário.
Os cargos estão na tabela abaixo:
Código Cargo Percentual
1 Escriturário 50%
2 Secretário 35%
3 Caixa 20%
4 Gerente 10%
5 Diretor Não tem aumento
E412 – Um endocrinologista deseja controlar a saúde de seus pacientes, e para isso, se
utiliza o índice de massa corporal (IMC). Sabendo que o IMC é calculado através da
fórmula IMC = peso/altura2, crie um algoritmo que apresente o nome do paciente e a
faixa de risco, baseado na seguinte tabela:
IMC Faixa de Risco
Abaixo dos 20 Abaixo do peso
A partir dos 20 até 25 Normal
A partir dos 25 até 35 Excesso de peso
A partir dos 35 até 50 Obesidade
A partir dos 50 Obesidade Mórbida
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 38
E413 – Um comerciante calcula o valor de venda, tendo em vista a tabela abaixo. Crie
um algoritmo que entre com o valor da compra e o nome do produto. O programa
deverá imprimir o nome do produto e o valor da venda.
Valor da compra Valor da Venda
Valor < 10,00 Lucro de 70%
10,00 <= Valor < 20,00 Lucro de 60%
20,00 <= Valor <= 40,00 Lucro de 50%
Valor > R$ 40,00 Lucro de 30%
E414 – Escreva um programa que leia um peso (massa) no planeta Terra e o número de
um planeta e imprima o valor do seu peso (massa relativa) neste planeta. A relação de
planetas é dada a seguir, juntamente com o valor das gravidades nos referidos planetas.
# Gravidade local Planeta
1 3,78 Mercúrio
2 8,60 Vênus
3 3,72 Marte
4 22,90 Júpiter
5 9,05 Saturno
6 7,77 Urano
7 11,00 Netuno
8 0,30 Plutão
Para calcular o peso no planeta use a fórmula:
E415 – Desenvolver um programa que simule um empréstimo em um banco. Como
entradas serão necessários: valor a ser emprestado (P), tempo de empréstimo em meses
(n), taxa de juros ao mês em porcentagem (i) e se o modelo é juros simples ou juros
compostos. As saídas deverão ser em R$: o montante a ser pago (S) e o valor das
parcelas (V).
81,9
planeta
terraplaneta
g
PP ⋅=
n
SV
niPS
=
⎟⎠
⎞⎜⎝
⎛ ⋅+⋅=
100
1
Simples Juros
n
SV
iPS
n
=
⎟⎠
⎞⎜⎝
⎛ +⋅=
100
1
Compostos Juros
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 39
Capítulo V – Estrutura de Controle de
Repetição
1 Conceito de Repetição
Na estrutura linear sabemos que os comandos são executados uma única vez e
um após o outro (de cima para baixo). Com o estudo da seleção, acrescenta-se a
possibilidade de escolher instruções a serem executadas, mas cada instrução continua
sendo executada apenas uma vez, no máximo. Em programação é frequentemente
necessário repetir a execução de um grupo de instruções, ou mesmo repetir a execução
de todo o programa, para diferentes valores de dados.
Figura 6: “Boa” aplicação do conceito de repetição.
Em programação, uma sequência de instruções executada repetidas vezes é
chamada de laço (ou loop). Um laço é constituído por uma sequência de instruções, o
corpo do laço, e por uma estrutura que controla a repetição deste corpo, especificando
quantas vezes ele terá de ser repetido.
As instruções que constituem o corpo de um laço podem ser executadas qualquer
número de vezes (até mesmo nenhuma), mas este número é finito. Existem erros
semânticos que podem provocar a execução interminável do corpo do laço, caso que se
diz que o laço é infinito.
Existem três estruturas que permitem a especificação de laços em linguagem
Java: for, while e do while.
Os laços de repetição podem ser classificados em laços determinados ou laços
indeterminados. Os laços determinados são aqueles na qual podemos definirquantas
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 40
vezes o corpo do laço irá se repetir antes da execução. Nos laços indeterminados isto
não é possível, pois o número de repetições irá depender da entrada do usuário.
2 Repetição com Variável de Controle
A estrutura de repetição com variável de controle repete a execução do bloco um
número fixo de vezes através da manipulação de uma variável do tipo inteira, pois ela
possui limites fixos. O número de repetições do bloco será determinado por: valor
inicial da variável, condição de parada e valor do incremento ou decremento.
Na estrutura for, usar-se-á o conceito de variável de controle, que será uma
variável v que será incrementada ou decrementada após a repetição de um bloco de
acordo com o valor deste incremento.
Sintaxe da estrutura:
for(v = vi; v <= vf; v++){
instrução 1;
instrução 2;
instrução 3;
...
instrução n;
}
Onde:
Vi: valor inicial; e Vf: valor final
A estrutura Para só aceita repetições determinadas e nestes casos será a estrutura
mais conveniente. Usar-se-á o exemplo da soma dos 100 primeiros números inteiros e
positivos.
import javax.swing.JOptionPane;
public class Soma100_1{
public static void main (String args []){
int numero,soma;
soma = 0;
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 41
for (numero=1; numero<=100; numero++){
soma = soma + numero;
}
JOptionPane.showMessageDialog(null, "Soma = ”+soma);
}
}
3 Repetição com Teste no Início
Consiste numa estrutura de controle de fluxo que permite executar de forma
repetitiva uma instrução (ou bloco de instruções) enquanto uma determinada expressão
lógica tiver o valor verdadeiro, porém, sempre verificando antes de cada execução se é
permitido repetir o mesmo trecho.
Sintaxe da estrutura:
while (condição){
instrução 1;
instrução 2;
instrução 3;
...
instrução n;
}
Enquanto a condição for satisfeita, as instruções de 1 a n serão repetidas, caso
contrário, o comando é abandonado (sai do laço). Se já da primeira vez o resultado for
falso, os comandos serão executados nenhuma vez.
A estrutura de repetição com teste no final while pode ser usada para construir
laços determinados ou indeterminados. Seguem alguns exemplos de como estes tipos de
laços funcionam:
Exemplo para laços determinados: Construir um programa para calcular a soma dos
100 primeiros números inteiros e positivos.
import javax.swing.JOptionPane;
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 42
public class Soma100_2{
public static void main (String args []){
int numero = 1, soma = 0;
while (numero <= 100){
soma = soma + numero;
numero = numero + 1;
}
JOptionPane.showMessageDialog(null, “Soma” = +soma);
}
}
Exemplo para laços indeterminados (uso de finalizadores ou flags): Construir um
programa que, dado um conjunto de valores inteiros positivos, determinar o maior valor
do conjunto. O valor 0 (zero) é usado como finalizador do conjunto de entrada.
import javax.swing.JOptionPane;
public class MaiorElemento_1{
public static void main (String args []){
int valor, maior;
valor = -1;
maior = 0;
while (valor != 0){
if (valor > maior) { maior = valor; }
valor = Integer.parseInt(JOptionPane.showInputDialog
(“Informe um novo valor (0 para sair):”));
} // fim do laço
if (maior == 0){
JOptionPane.showMessageDialog(null, "Não foram
entrados valores válidos”);
}
else{
JOptionPane.showMessageDialog(null, "Maior = ”+maior);
}
}
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 43
4 Repetição com Teste no Final
Consiste numa estrutura que permite que um bloco ou uma ação primitiva seja
repetida até que uma determinada condição não seja satisfeita. Tem a mesma finalidade
do comando while. Porém, a diferença básica entre as estruturas while e do while é que
nesta última, o bloco é executado pelo menos uma vez independentemente da validade
da condição, pois a inspeção da condição só é feita após a execução do bloco ou ação
primitiva.
Da mesma forma que a estrutura while, a estrutura do while também serve para
construir laços determinados e indeterminados. Far-se-á os mesmos exemplos para
podermos comparar as duas estruturas.
Sintaxe da estrutura:
do{
instrução 1;
instrução 2;
instrução 3;
...
instrução n;
} while (condição);
Exemplo para laços determinados: Construir um programa para calcular a soma dos
100 primeiros números inteiros e positivos.
import javax.swing.JOptionPane;
public class Soma100_3{
public static void main (String args []){
int numero = 1, soma = 0;
do{
soma = soma + numero;
numero = numero + 1;
} while (numero <= 100);
JOptionPane.showMessageDialog(null, “Soma = ”+soma);
}
}
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 44
Exemplo para laços indeterminados (uso de finalizadores ou flags): Construir um
programa que, dado um conjunto de valores inteiros positivos, determinar o maior valor
do conjunto. O valor 0 (zero) é usado como finalizador do conjunto de entrada.
import javax.swing.JOptionPane;
public class MaiorElemento_2{
public static void main (String args []){
int valor, maior;
valor = -1;
maior = 0;
do{
if (valor > maior) { maior = valor; }
valor = Integer.parseInt(JOptionPane.showInputDialog
(“Informe um novo valor (0 para sair):”));
} while (valor != 0); // fim do laço
if (maior == 0){
JOptionPane.showMessageDialog(null, "Não foram
entrados valores válidos”);
}
else{
JOptionPane.showMessageDialog(null, "Maior = ”+maior);
}
}
5 Exercícios Propostos
E501 – Preparar um algoritmo para ler 15 números inteiros e verificar quantos deles são
pares.
E502 – Sendo H = 1 + 1/2 + 1/3 +...+ 1/(N – 1) + 1/N, prepare um algoritmo para gerar
o número H, onde o número N é fornecido pelo usuário.
E503 – Escrever um programa que imprima a soma dos inteiros ímpares de 1 até N,
onde N deve ser fornecido como entrada e testado para ser um número ímpar maior que
1.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 45
E504 – Para dado um valor N, inteiro, calcular o fatorial de N. Sabe-se que por
definição: 0! = 1 e não existe fatorial de número negativo.
E505 – Preparar um programa que informe 50 notas escolares do tipo real de uma turma
e calcule a média desta turma. Porém, o programa tem que fazer tratamento máximo de
exceção da entrada, isto é, cada vez que o usuário digitar uma nota menor que zero ou
maior do que dez, esta nota deve ser desconsiderada e a mesma nota deverá ser
solicitada novamente.
E506 – Calcular a soma dos 50 primeiros termos da série:
E507 – O matemático Fibonacci em 1202 formulou e resolveu o problema de
reprodução de coelhos através da sequência: 1, 1, 2, 3, 5, 8, 13, 21, 34,... Percebemos a
seguinte relação de recorrência: an+1 = an-1 + an. Escreva um algoritmo que gere a
impressão da série de Fibonacci até o trigésimo termo.
E508 – Escreva um algoritmo para ler um conjunto de fichas, contendo cada uma a
altura e o código do sexo de uma pessoa (1 = masculino e 2 = feminino), calcule e
escreva: a maior altura entre as mulheres e a média de altura entre os homens. A última
ficha contém o código do sexo = 3, que não deve ser considerada.
E509 – Escrever um programa que calculea seguinte soma:
E510 – O valor aproximado de pi pode ser calculado usando a série abaixo até o
vigésimo termo:
E511 – Fazer um programa que dada a entrada do expoente x, calcule o valor de ex
através da série até o décimo termo:
( ) ( ) 12...21! ⋅⋅⋅−⋅−⋅= NNNN
...
9
4
7
3
5
2
3
1 +−+−=S
1
2...
48
2
49
2
50
2 50321 +++
3
33333
32
...
9
1
7
1
5
1
3
1
1
1
×=
−+−+−=
S
S
π
...
!3!2!1
321
0 xxxxe x +++=
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 46
E512 – Uma empresa de energia elétrica está interessada em um relatório contendo:
• A média da quantidade de energia gasta por todos os consumidores residenciais,
comerciais e industriais, separadamente; e
• O código do assinante que consumiu a maior quantidade de energia residencial;
Para isto é feita a leitura de fichas contendo: código do assinante, quantidade de
energia e a categoria (1 = residencial, 2 = comercial e 3 = industrial). O final do
conjunto de assinantes é dado por um código de assinante igual a 0 (zero).
E513 – Um número primo é aquele que somente é divisível por ele mesmo e pela
unidade. Desenvolver um programa que dada a entrada de um número, informar se ele é
primo ou não.
E514 – Faça um programa que receba o valor de um carro e mostre uma tabela com os
seguintes dados: preço final, quantidade de parcelas e o valor da parcela. Considere o
seguinte:
• O preço final para compra à vista tem desconto de 10%;
• A quantidade de parcelas e os percentuais e acréscimo encontram-se no quadro a
seguir:
Quantidade
de Parcelas
Percentual de
Acréscimo
6 3%
12 6%
18 9%
24 12%
30 15%
36 18%
42 21%
48 24%
54 27%
60 30%
E515 – Uma empresa de telefonia deseja calcular as contas telefônicas de seus
assinantes. A cobrança de seus serviços é feita da seguinte maneira:
a) Tarifa básica:
• Telefone residencial (código 1): R$ 20,00
• Telefone comercial (código 2): R$ 70,00
b) Serviço de telefonia:
• R$ 1,20 por minuto excedente (acima de 90 minutos).
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 47
c) Serviço de internet:
• R$ 5,00 por dia.
Na entrada de dados teremos:
• Código do assinante;
• Tipo do telefone (comercial ou residencial);
• Número de minutos registrados e número de dias de uso da Internet.
Faça um programa que leia os dados de um conjunto de assinantes (o código do
assinante igual a zero encerra a entrada de dados), calcule e imprima:
• Para cada assinante, o total de sua conta;
• Valor da maior conta e o código do assinante que a pagou;
• Valor médio arrecadado por assinante no mês.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 48
Capítulo VI – Vetores e Matrizes
1 Tipos Construídos
Retornando ao conceito de tipos de dados, podemos notar que foi feita uma
divisão, a fim de tornar mais simples a classificação das informações. Podemos
perceber, também, que a quantidade de tipos de dados estipulados (tipos primitivos) não
é suficiente para representar toda e qualquer informação que possa surgir. Como estes
recursos de representação são escassos, poderíamos resolver o problema se existissem
mais tipos de dados ou, ainda melhor, se esses tipos pudessem ser “construídos”, à
medida que se fizessem necessários.
A partir de agora, apresentar-se-á uma técnica de programação que permitirá
trabalhar com o agrupamento de várias informações dentro de uma mesma variável.
Vale salientar que este agrupamento ocorrerá obedecendo sempre ao mesmo tipo de
dado, isto é, cria-se um novo dado que é homogêneo.
2 Vetores
Um vetor é uma coleção de variáveis de um mesmo tipo que compartilham o
mesmo nome e que ocupam posições consecutivas de memória. Cada variável da
coleção denomina-se elemento e é identificada por um índice.
Figura 7: Representação de um vetor.
Sua utilização mais comum está vinculada à criação de tabelas. Caracteriza-se
por ser definida uma única variável dimensionada com um determinado tamanho. A
dimensão de um vetor é constituída por constantes inteiras e positivas. Os nomes dados
aos vetores seguem as mesmas regras de nomes utilizados em variáveis simples. A
sintaxe para a declaração de um vetor é:
Sintaxe da estrutura:
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 49
<tipo> <identificador>[]; ou
<tipo>[] <identificador>;
Algumas linguagens permitem determinar o primeiro índice do vetor. Em Java,
porém, o primeiro índice é sempre 0 (zero). Assim, um vetor com tamanho n tem
índices que variam de 0 a n–1.
Em Java, os vetores são objetos, permitindo o uso de atributos (propriedades) e a
aplicação de métodos. Com isso, além da declaração, é necessário criar esse objeto na
memória, determinando seu tamanho, para poder utilizá-lo (n). Essa criação pode ser
feita utilizando-se o operador new.
<tipo> <identificador>[] = new <tipo_primitivo>[n]; ou
<tipo>[] <identificador> = new <tipo_primitivo>[n];
Em orientação a objetos a criação de um objeto é chamada instanciação. O
operador new associado ao nome da classe chama o método construtor dessa classe,
responsável pela inicialização de um novo objeto e sua alocação na memória. Todo tipo
primitivo de dados possui uma classe empacotadora de tipo correspondente, no pacote
Java.lang.
3 Entrada, manipulação e saída de dados em Vetores
Uma variável simples somente pode conter um valor por vez. No caso dos
vetores, estes poderão armazenar mais de um valor por vez, pois são dimensionadas
exatamente para este fim. Por consequência, a manipulação dos elementos de um vetor
ocorrerá de forma individualizada, pois não é possível efetuar a manipulação de todos
os elementos do conjunto ao mesmo tempo.
Apresentamos, a seguir, um exemplo de um vetor usado para guardar os nomes
dos meses do ano.
String meses[ ] = new String[12];
meses[0] = “Janeiro”;
meses[1] = “Fevereiro”;
...
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 50
meses[10] = “Novembro”;
meses[11] = “Dezembro”;
Outra forma de declarar e inicializar um vetor em Java é pelo uso da
inicialização direta, que consiste em incluir ambas as operações em uma única
instrução, por exemplo, a linha de código:
int meses[ ] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
Tanto a entrada como a saída de dados manipulada com um vetor é processada
passo a passo, um elemento por vez. Estes processos são executados com o auxílio de
um laço de repetição para manipulação de todos os índices do vetor. Verificar-se-á
agora uma aplicação de um vetor: desenvolver um programa para calcular a média geral
de uma turma de cinquenta alunos.
import javax.swing.JOptionPane;
public class Media_Turma{
public static void main (String args []){
final int tamanho = 50;
float notas[] = new float [tamanho];
float somaNotas = 0, media;
int contNotas = 0;
for (int i=0; i<tamanho; i++){
notas[i]=Float.parseFloat(JOptionPane.showInputDialog
(“Informe a”+ (i+1)+ “a. Nota:”));
if (notas[i]>=0.0f && notas[i]<=10.0f){
contNotas++;
somaNotas = somaNotas + notas[i];
}
}
if (contNotas == 0){
JOptionPane.showMessageDialog(null, “Não foram
entrados dados válidos!!!”);
}
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 51
else{
media = somaNotas/contNotas;
JOptionPane.showMessageDialog(null,“Média = ”
+media);
}
}
}
Uma tentativa de acessar um elemento fora dos limites do vetor resultará em erro
de execução. Em Java, para operações que envolvem todos os elementos do vetor,
podem-se reduzir as chances de erro fazendo-se uso do fato de o vetor ser um objeto.
Como um vetor sempre conhece o seu próprio tamanho, pode-se fazer uso da
propriedade lenght, definida pela linguagem para qualquer vetor e que retorna sua
quantidade de elementos. Por exemplo, em substituição no código anterior:
for (int i=0; i<notas.lenght; i++){
....
}
4 Matrizes Bidimensionais
Quaisquer matrizes definidas para possuírem mais de uma dimensão são
consideradas matrizes multidimensionais, embora raramente excedam a três dimensões.
A mais de comum é a matriz de duas dimensões por se relacionar diretamente com a
utilização de tabelas.
Figura 8: Representação de uma matriz.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 52
A linguagem Java não oferece suporte à vetores multidimensionais, no entanto, a
mesma funcionalidade pode ser obtida com a declaração de um vetor de um vetor, por
exemplo: int [][].
Em matrizes de duas dimensões, os seus elementos serão também manipulados
de forma individualizada, sendo a referência feita sempre através de dois índices: o
primeiro para indicar a linha e o segundo para indicar a coluna. Pode-se considerar que
uma matriz com mais de uma dimensão é também um vetor, sendo válido para este tipo
de matriz tudo o que já foi utilizado anteriormente para as matrizes de uma dimensão. A
sintaxe de uma matriz de duas dimensões é a seguinte:
Sintaxe da estrutura:
<tipo> <identificador>[][] = new <tipo_primitivo>[n][n]; ou
<tipo>[][] <identificador> = new <tipo_primitivo>[n][n];
5 Entrada, manipulação e saída de dados em Matrizes
Vamos, agora, apresentar os conceitos de manipulação de uma matriz através do
seguinte exemplo: dada uma matriz de 6 linhas e 2 colunas de inteiros, calcular e exibir
a média geométrica dos valores de cada uma das linhas. A média geométrica é calculada
através da raiz quadrada do resultado da multiplicação dos dois valores.
import javax.swing.JOptionPane;
public class MediaGeometrica{
public static void main(String args[]){
int G[][] = new int[6][2];
double prod;
String num;
for(int i = 0; i < 6; i++){
for(int j = 0; j < 2; j++){
num = JOptionPane.showInputDialog(
"Informar valor G [" + i + "][ " + j + "]:");
G[i][j] = Integer.parseInt(num);
}
}
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 53
for(int i = 0; i < 6; i++){
prod = 1;
for(int j = 0; j < 2; j++){
prod = prod * G[i][j];
}
JOptionPane.showMessageDialog(
null, "Linha " + i + ": " + Math.sqrt(prod));
}
}
}
6 Exercícios Propostos
E601 – Elaborar um programa para ler um vetor de 10 posições de inteiros e escrever o
maior e o menor elemento deste vetor.
E602 – Elaborar um programa para ler dois vetores de 20 posições cada um, efetue as
respectivas operações indicadas em outro vetor de 20 posições de caracteres (+, -, *, /),
contendo as quatro operações aritméticas em qualquer combinação, armazenando o
resultado em outro vetor, também de 20 posições de inteiros.
E603 – Dadas as temperaturas que foram registradas diariamente durante uma semana,
deseja-se determinar em quantos dias desta semana a temperatura esteve acima da
média.
E604 – Elaborar um programa que dado um vetor de N elementos do tipo inteiro, sendo
N uma constante definida no programa, obtenha:
• A multiplicação de todos os elementos do vetor;
• A soma de todos os elementos pares pertencentes ao vetor;
• A soma de todos os elementos ímpares pertencentes ao vetor;
• A soma de todos os elementos primos pertencentes ao vetor;
• A soma de todos os elementos indexados em posições pares; e
• Um subvetor com apenas os elementos indexados em posições ímpares.
E605 – Ler um vetor A com 15 elementos de inteiros. Construir um vetor B de mesma
dimensão e tipo, sendo que cada elemento do vetor B seja o fatorial do elemento
correspondente do vetor A.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 54
E606 – Dados dois vetores com elementos do tipo inteiro, o primeiro com N = 20
elementos e o outro com M = 30 elementos. Faça um programa para obter:
• A concatenação (junção) dos vetores dados;
• A interseção dos vetores dados;
• A disjunção dos vetores dados, ou seja, um vetor que possua elementos do
primeiro e elementos do segundo, porém não de ambos; e
• Verificar se o segundo vetor está contido no primeiro.
E607 – Preparar um programa para ler duas matrizes A e B, cada uma com uma
dimensão para 12 elementos. Construir uma matriz C de duas dimensões, onde a
primeira coluna da matriz C é formada pelos elementos da matriz A multiplicados por 2
e a segunda coluna deverá ser formada pelos elementos da matriz B subtraídos de 5.
E608 – Construa um programa para ler uma matriz 3x3 de inteiros. Calcular a soma das
linhas dessa matriz e armazená-la em um vetor de 3 posições de inteiros. Calcule
também a soma dos elementos desse vetor.
E609 – Tendo como entrada uma matriz quadrada de ordem N, fornecida através de
constante, preparar um programa para apresentar na tela:
• Todos os elementos da diagonal principal;
• Todos os elementos abaixo da diagonal principal;
• Todos os elementos acima da diagonal principal;
• Todos os elementos da diagonal secundária;
• Todos os elementos abaixo da diagonal secundária; e
• Todos os elementos acima da diagonal secundária;
E610 – O tempo que um determinado avião dispensa para percorrer duas localidades
distintas está disponível através da seguinte tabela. Escreva um programa para:
XXX A B C D E F G
A XXX 2 11 6 15 11 1
B 2 XXX 7 12 4 2 15
C 11 7 XXX 11 8 3 13
D 6 12 11 XXX 10 2 1
E 15 4 8 10 XXX 5 13
F 11 2 3 2 5 XXX 14
G 1 15 13 1 13 14 XXX
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 55
• Escrever todos os tempos sem repetições entre todas as localidades;
• Permitir ao usuário informar várias cidades, até informar a cidade “X”, e escreva
o tempo total para cumprir todo o percurso especificado; e
• Ler a tabela e informe ao usuário o tempo necessário para percorrer duas cidades
por ele fornecidas, até o momento em que ele forneça duas cidades iguais
(origem = destino);
E611 – Tendo como entrada duas matrizes: A4x5 e B5x3, calcular o produto das matrizes.
E612 – Entrar com o nome de cinco disciplinas em um vetor. Entrar com uma matriz de
que armazene trinta matrículas de alunos (5x30) e outra matriz que armazene trinta
notas destes alunos (5x30), relacionando cada elemento do vetor com as respectivas
linhas das matrizes, isto é, a primeira linha das matrizes de matrículas e notas é
representativa ao primeiro elemento do vetor. Apresentar na tela relatório com as notas
dos trinta alunos, juntamente com suas respectivas matrículas, por disciplina.
E613 – Tendo como entrada uma matriz de 10 linhas e 3 colunas. Cada linha está
associada a um aluno, e as colunas estão associadas às notas das provas associadas
àquele estudante. Calcular e apresentar na tela: a média de cada estudante e a média da
turma em cada prova.
E614 – Crie um programa que receba as vendas semanais (de um mês) de cinco
vendedores de uma loja e armazene essas vendas em uma matriz. O programa deverá
calcular e mostrar:
• O total de vendas do mês de cada vendedor;
• O total de vendas de cada semana (todosos vendedores juntos); e
• O total de vendas do mês.
E615 – Uma escola deseja controlar as médias das disciplinas cursadas por seus alunos.
Sabe-se que nessa escola existem três turmas, com oito alunos cada, e cada aluno cursa
quatro disciplinas. Crie um programa que armazene essas médias em uma matriz 3x8x4.
Depois da leitura, ele deverá calcular e mostrar:
• A média geral de cada aluno; e
• A média de cada turma.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 56
Bibliografia
ANDERSON, J. & FRANCESCHI, H., 2010, Java 6 - Uma Abordagem Ativa de
Aprendizado. 2ª. Edição. Rio de Janeiro: Editora LTC.
ASCENCIO, A. F. G. & DE CAMPOS, E. A. V., 2008, Fundamentos de Programação
de Computadores – Algoritmos, Pascal, C/C++ e Java. 2ª. Edição. São Paulo:
Pearson Prentice Hall.
BARNES, D. J. & KÖLING, M., 2004, Programação Orientada a Objetos com Java.
São Paulo: Pearson Prentice Hall.
CAMARÃO, C. & FIGUEIREDO, L., 2003, Programação de Computadores em Java.
Rio de Janeiro: Editora LTC.
CELES, W.; CERQUEIRA, R. & RANGEL, J. L., 2004, Introdução a Estruturas de
Dados com Técnicas de Programação em C. Rio de Janeiro: Editora Elsevier.
CORMEM, T. H.; LEISERSON, C. E.; RIVEST, R. L. et al., 2002, Algoritmos –
Teoria e Prática. 2ª. Edição. Rio de Janeiro: Editora Campus.
DEITEL, P. & DEITEL, H., 2010, Java Como Programar. 8ª. Edição. São Paulo:
Pearson Prentice Hall.
DAMAS, L., 2007, Linguagem C. 10ª. Edição. Rio de Janeiro: Editora LTC.
FARRER, H.; BECKER, C. G.; FARIA, E. C. et al., 2008, Algoritmos Estruturados.
3ª. Edição. Rio de Janeiro: Editora LTC.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 57
FEIJÓ, B.; CLUA, E. & SILVA, F. S. C., 2010, Introdução à Ciência da Computação
com Jogos. Rio de Janeiro: Editora Campus.
FEOFILOFF, P., 2009, Algoritmos em Linguagem C. Rio de Janeiro: Editora Campus.
FORBELLONE, A. L. V. & EBERISPÄCHER, H. F., 2000, Lógica de Programação:
A Construção de Algoritmos e Estruturas de Dados. 2ª. Edição. São Paulo:
Editora Makron Books.
GUIMARÃES, A. M. & LAGES, N. A. C., 1994, Algoritmos e Estruturas de Dados.
Rio de Janeiro: Livros Técnicos e Científicos.
HOLLOWAY, J. P, 2006, Introdução à Programação para Engenharia. Rio de
Janeiro: Editora LTC.
HORSTMANN, C., 2002, Big Java. Porto Alegre: Artmed Editora.
HORSTMANN, C. & CORNELL, G., 2003, Core Java 2 – Volumes I e II. São Paulo:
Pearson Makron Books do Brasil.
HORSTMANN, C., 2003, Conceitos de Computação com o Essencial em Java. 3ª.
Edição. Porto Alegre: Artmed Editora.
KERNIGHAN, B. W. & RITCHIE, D. M., 1989, C – A Linguagem de Programação
Padrão Ansi. Rio de Janeiro: Editora Campus.
LOPES, A. & GARCIA, G., 2002, Introdução à Programação: 500 Algoritmos
Resolvidos. Rio de Janeiro: Editora Campus.
MANZANO, J. A. N. G., & OLIVEIRA, J. F., 2000, Algoritmos: Lógica para
Desenvolvimento de Programação. 12ª. Edição. São Paulo: Editora Érica.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 58
MANZANO, J. A. N. G., & YAMATUMI, W. Y., 2007, Free Pascal – Programação
de Computadores. São Paulo: Editora Érica.
MEDINA, M. & FERTING, C., 2006, Algoritmos e Programação – Teoria e Prática.
São Paulo: Editora Novatec.
METSKER, S. J., 2002, Padrões de Projeto em Java. Porto Alegre: Artmed Editora.
MIZRAHI, V. V., 2008, Treinamento em Linguagem C. 2ª. Edição. São Paulo:
Pearson Prentice Hall.
MORKAZEL, F. & SOMA, F., 2008, Introdução à Ciência da Computação. Rio de
Janeiro: Editora Campus.
PUGA, S. & RISSETTI, G., 2009, Lógica de Programação e Estruturas de Dados com
Aplicações em Java. 2ª. Edição. São Paulo: Pearson Prentice Hall.
SAMPAIO, A. B. C., 1999, Introdução à Ciência da Computação. Belém: Editora da
UFPA.
SANTOS, R., 2003, Introdução à Programação Orientada a Objetos. Rio de Janeiro:
Editora Campus.
SCHILDT, H., 1995, C Completo e Total. 3ª edição. São Paulo: Makron Books do
Brasil.
SEBESTA, R. W., 2003, Conceitos de Linguagens de Programação. 5ª edição. Porto
Alegre: Artmed Editora.
SOUZA, M. A. F.; GOMES, M. M.; SOARES, M. V. et al., 2005, Algoritmos e Lógica
de Programação. São Paulo: Editora Thomson Learning.
STAA, A. V., 2000, Programação Modular. Rio de Janeiro: Editora Campus.
Técnicas de Programação em Java – Prof. D.Sc. Eng. Emerson Cordeiro Morais 59
TREMBLEY, J. P. & BUNT, R. B., 1983, Ciência dos Computadores – Uma
Abordagem Algorítmica. São Paulo: McGraw- Hill.
TUCKER, A. B. & NOONAN, R. E., 2008, Linguagens de Programação – Princípios
e Paradigmas. 2ª. Edição. São Paulo: McGraw- Hill.
VAREJÃO, F., 2004, Linguagens de Programação – Java, C, C++ e Outras. Rio de
Janeiro: Editora Campus.
VILLAS, M. V. & VILASBOAS, L., 1993, Programação: Conceitos, Técnicas e
Linguagens. Rio de Janeiro: Editora Campus.
WIRTH, N., 1989, Algoritmos e Estruturas de Dados. Rio de Janeiro: Editora LTC.
ZIVIANI, N., 2007, Projeto de Algoritmos com Implementações em Java e C++. São
Paulo: Thomson Learning.