Вы находитесь на странице: 1из 137

Prof.

Daniel Oliveira

Conceitos de Algoritmos

Daniel Barbosa de Oliveira

Pg.: 1/137
Prof. Daniel Oliveira

Ilustraes

Figura 1 - Definio de algoritmo .......................................................................................................................... 11


Figura 2 - Arquitetura de Von Neumann............................................................................................................... 12
Figura 3 - Exemplo de instrues de mquinas ................................................................................................... 13
Figura 4 - Exemplo de um cdigo em Assembly ................................................................................................... 13
Figura 5 - Processo de compilao ........................................................................................................................ 14
Figura 6 - Exemplo de um fluxograma .................................................................................................................. 15
Figura 7 - Fluxograma para clculo da rea de um retngulo .............................................................................. 16
Figura 8 - Exemplo de um fluxograma para determinao da maior idade ......................................................... 16
Figura 9 - Atribuio de variveis em Fluxogramas .............................................................................................. 17
Figura 10 - Exemplo de fluxograma de clculo de mdia nvel Alto ..................................................................... 18
Figura 11 - Exemplo de clculo de mdia detalhado ............................................................................................ 19
Figura 12 - Exemplo de um diagrama linear ......................................................................................................... 20
Figura 13 - Exemplo de sequncia ........................................................................................................................ 20
Figura 14 - Exemplo de Estrutura condicional ...................................................................................................... 21
Figura 15 - Exemplo de Estrutura de repetio .................................................................................................... 21
Figura 16 - Exemplo de Case ................................................................................................................................. 22
Figura 17 - Exemplo de estrutura de dados .......................................................................................................... 29
Figura 18 - Definio de varivel (Tonet,2004) ..................................................................................................... 30
Figura 19 - Processo de compilao de cdigo fontes em Java ............................................................................ 33
Figura 20 - Arquitetura para execuo do cdigo Java ......................................................................................... 33
Figura 21 - Opes para obteno do JDK ............................................................................................................ 34
Figura 22 - Opes de download do Eclipse ......................................................................................................... 35
Figura 23 - Tela de configurao de Workspace ................................................................................................... 35
Figura 24 - Tela inicial do Eclipse .......................................................................................................................... 36
Figura 25 - Ambiente do Eclipse para iniciar os trabalhos .................................................................................... 36
Figura 26 - Janela de perspectiva .......................................................................................................................... 37
Figura 27 - Outros tipos de perspectivas .............................................................................................................. 37
Figura 28 - Opo de troca de Workspace ............................................................................................................ 38
Figura 29 - Criao de um projeto Java ................................................................................................................. 38
Figura 30 - Selecionando o tipo de projeto no Eclipse.......................................................................................... 39
Figura 31 - Parmetros inicias do projeto Java ..................................................................................................... 39
Figura 32 - Nome do projeto Java ......................................................................................................................... 40
Figura 33 - Tela de configurao final do projeto Java ......................................................................................... 40
Figura 34 - Package Explorer ................................................................................................................................. 41
Figura 35 - Usando o menu Show View ................................................................................................................ 41
Figura 36 - Criando uma nova classe..................................................................................................................... 42
Figura 37 - Parmetros bsicos para criao de classes ....................................................................................... 42
Figura 38 - Cdigo inicial gerado pelo assistente de criao de classes ............................................................... 43
Figura 39 - Exemplo de cdigo do primeiro projeto Java ..................................................................................... 43
Figura 40 - Janela de console com o resultado a execuo do cdigo ................................................................. 43
Figura 41 - Exemplo de cdigo em Java ................................................................................................................ 44
Figura 42 - Exemplo de comentrios de uma linha............................................................................................... 44
Figura 43 - Comentrio de bloco........................................................................................................................... 44
Figura 44 - Mtodo MAIN ..................................................................................................................................... 45
Pg.: 2/137
Prof. Daniel Oliveira

Figura 45 - Uso de chaves para delimitar blocos de cdigo .................................................................................. 45


Figura 46 - Uso do ponto e vrgula para finalizar uma linha de cdigo ................................................................ 45
Figura 47 - Exemplo endentao de cdigo .......................................................................................................... 46
Figura 48 - Resultado da execuo do exemplo de limites de valores para tipos numricos .............................. 47
Figura 49 - Atribuio de valores .......................................................................................................................... 48
Figura 50 - Exemplo de erro com uso de variveis no inicializadas .................................................................... 48
Figura 51 - Exemplos de compatibilidade de tipos ............................................................................................... 52
Figura 52 - Exemplo de falha entre converso de tipos........................................................................................ 55
Figura 53 - Exemplo de tratamento de excees.................................................................................................. 55
Figura 54 - Exemplo da classe Scanner ................................................................................................................. 58
Figura 55 - Uso do mtodo next da classe Scanner .............................................................................................. 58
Figura 56 - Uso da classe Scanner ......................................................................................................................... 58
Figura 57 - Estrutura condicional .......................................................................................................................... 61
Figura 58 - Exemplo de expresso lgica com AND .............................................................................................. 64
Figura 59 - Exemplo de expresses relacionais com AND .................................................................................... 65
Figura 60 - Exemplo de operador OR .................................................................................................................... 65
Figura 61 - Tabela da verdade do operador AND ................................................................................................. 66
Figura 62 - Tabela da verdade do operador OR .................................................................................................... 66
Figura 63 - Loop pr-testados ............................................................................................................................... 73
Figura 64 - Loop ps-testado ................................................................................................................................ 74
Figura 65 Array com 10 elementos .................................................................................................................... 83
Figura 66 - Representao de uma array multidimensional ................................................................................. 88
Figura 67 - Representao de uma matriz ............................................................................................................ 88
Figura 68 - Acessando posies dentro de um arranjo bidimensional ................................................................. 89
Figura 69 - Percorrendo uma array multidimensional .......................................................................................... 90
Figura 70 - Chamada de subprogramas ................................................................................................................ 94
Figura 71 - Analisando funes em Java ............................................................................................................... 95
Figura 72 - Exemplo de funo com retorno em Java........................................................................................... 95
Figura 73 - Exemplo de passagem de parmetros ................................................................................................ 97
Figura 74 - Passagem por valor ............................................................................................................................. 97
Figura 75 - Passagem por referncia..................................................................................................................... 97
Figura 76 - Criando uma nova classe no Eclipse ................................................................................................. 103
Figura 77 - Tela de configurao para criao de uma nova classe .................................................................... 103
Figura 78 - Classe Livro ........................................................................................................................................ 104
Figura 79 - Classe Livro com seus membros ....................................................................................................... 104
Figura 80 - Usando a classe Livro ........................................................................................................................ 104
Figura 81 - Uso do operador ponto ..................................................................................................................... 105
Figura 82 - Mtodo da Classe Livro ..................................................................................................................... 105
Figura 83 Construtor ........................................................................................................................................ 107
Figura 84 - Classe NPC (inicial) ............................................................................................................................ 113
Figura 85 - Classe NPC com gets e sets ............................................................................................................... 113
Figura 86 - Classe NPC (Herana) ........................................................................................................................ 114
Figura 87 - Herana da classe Warrior ................................................................................................................ 115
Figura 88 - Classe Warrior ................................................................................................................................... 115
Figura 89 - Warrior um NPC ............................................................................................................................. 115
Figura 90 - Delegate Constructor ........................................................................................................................ 115

Pg.: 3/137
Prof. Daniel Oliveira

Figura 91 - Sobrescrita de mtodo ...................................................................................................................... 116


Figura 92 - Sobrescrita como complemento de um mtodo base...................................................................... 116
Figura 93 - Diretiva @Override ........................................................................................................................... 116
Figura 94 Polimorfismo .................................................................................................................................... 117
Figura 95 - Referncia aos mtodos polimorfos ................................................................................................. 117
Figura 96 - Classe abstrata ................................................................................................................................ 119
Figura 97 - No possvel instanciar uma classe abstrata.................................................................................. 119
Figura 98 - Mtodos abstratos ............................................................................................................................ 119
Figura 99 - Classe Quadrado ............................................................................................................................... 120
Figura 100 - Classe Circulo .................................................................................................................................. 120
Figura 101 - Interface IFigura .............................................................................................................................. 121
Figura 102 - Uso das classes de stream para leitura ........................................................................................... 128

Pg.: 4/137
Prof. Daniel Oliveira

Quadros

Quadro 1 - Smbolos para construo de fluxogramas ......................................................................................... 16


Quadro 2 - Operadores aritmticos ...................................................................................................................... 25
Quadro 3 - Operadores relacionais ....................................................................................................................... 25
Quadro 4 - Operadores lgicos ............................................................................................................................. 26
Quadro 5 - Tabela verdade ................................................................................................................................... 26
Quadro 6 - Tipos de dados primitivos do Java ...................................................................................................... 46
Quadro 7 - Operadores para tipos numricos ...................................................................................................... 48
Quadro 8 - Comparao entre operadores ........................................................................................................... 49
Quadro 9 - Tipos de acesso aos atributos ........................................................................................................... 114

Pg.: 5/137
Prof. Daniel Oliveira

Exemplos

Exemplo 1 - Limites dos tipos numricos.............................................................................................................. 47


Exemplo 2 - Declarando e inicializando uma varivel........................................................................................... 48
Exemplo 3 - Exemplo de utilizao de operadores com tipos numricos ............................................................ 49
Exemplo 4 - System.Math constantes ................................................................................................................... 49
Exemplo 5 - System.Math Min e Max ................................................................................................................... 50
Exemplo 6 - System.Math Potncia e raiz quadrada ............................................................................................ 50
Exemplo 7 - System.Math Logaritimo ................................................................................................................... 50
Exemplo 8 - Valores absolutos e arredondamentos ............................................................................................. 51
Exemplo 9 - System.Math: Trigonometria ............................................................................................................ 51
Exemplo 10 - System.Math: Nmeros randmicos .............................................................................................. 52
Exemplo 11 - Cast .................................................................................................................................................. 53
Exemplo 12 - Cast .................................................................................................................................................. 53
Exemplo 13 - Exemplo de cast para operao de diviso ..................................................................................... 54
Exemplo 14 - Converso de tipo para string ......................................................................................................... 54
Exemplo 15 - Exemplo de mtodos para converso de string para tipos numricos ........................................... 54
Exemplo 16 - Exemplo de sada para console ....................................................................................................... 56
Exemplo 17 - Exemplo de sada para console ....................................................................................................... 56
Exemplo 18 - Uso de caracteres de escape para sada no console ....................................................................... 57
Exemplo 19 - Uso do comando printf ................................................................................................................... 57
Exemplo 20 - Mais um exemplo de uso do printf ................................................................................................. 58
Exemplo 21 - Exemplo das rotinas da classe Scanner para obter dados numricos ............................................ 59
Exemplo 22 - Estrutura IF clssica ......................................................................................................................... 61
Exemplo 23 - Exemplo do IF com apenas uma linha............................................................................................. 62
Exemplo 24 - Uso de equals para comparao de strings .................................................................................... 62
Exemplo 25 - Exemplo de equalsIgnoreCase para comparao de string ............................................................ 63
Exemplo 26 - Exemplo de uso do Else ................................................................................................................... 63
Exemplo 27 - Exemplo e if/else aninhados ........................................................................................................... 64
Exemplo 28 - Exemplo de uso de IF / Else encadeados ........................................................................................ 67
Exemplo 29 - Exemplo de uso do switch / case .................................................................................................... 68
Exemplo 30 - Uso do switch/case mais avanado ................................................................................................ 69
Exemplo 31 - Estrutura do Loop While ................................................................................................................. 74
Exemplo 32 - Exemplo do loop while .................................................................................................................... 74
Exemplo 33 - Exemplo do uso do comando break dentro de um loop ................................................................ 75
Exemplo 34 - Estrutura do Loop Do...While.......................................................................................................... 75
Exemplo 35 - Exemplo do Loop Do..While ............................................................................................................ 76
Exemplo 36 - Uso do loop Do..While .................................................................................................................... 76
Exemplo 37 - Exemplo do loop do..while com loop while .................................................................................... 77
Exemplo 38 - Exemplo do loop FOR ...................................................................................................................... 78
Exemplo 39 Exemplo do loop FOR descrente .................................................................................................... 78
Exemplo 40 - Exemplo de loop for com a varivel de controle declarada fora do loop ....................................... 78
Exemplo 41 - Exemplo um pouco mais completo com loop For fonte: http://www.java-samples.com ............. 79
Exemplo 42 - Exemplo de criao e inicializao de uma array............................................................................ 83
Exemplo 43 - Formas de inicializar uma array ...................................................................................................... 84
Exemplo 44 - Exemplo de acessar posies de uma arry por loop ....................................................................... 84
Pg.: 6/137
Prof. Daniel Oliveira

Exemplo 45 - Percorrendo uma array de char ...................................................................................................... 84


Exemplo 46 - Exemplo de uma rotina de ordenao de array.............................................................................. 85

Pg.: 7/137
Prof. Daniel Oliveira

Sumrio
Ilustraes ........................................................................................................................................................... 2
Quadros ............................................................................................................................................................... 5
Exemplos ............................................................................................................................................................. 6
Introduo ............................................................................................................................................................. 11
Algoritmos Computacionais .............................................................................................................................. 12
Fluxogramas ...................................................................................................................................................... 15
Exerccios....................................................................................................................................................... 23
Trabalhando com expresses ........................................................................................................................... 25
Modularizao de expresses e precedncia de operadores ....................................................................... 28
Estrutura de dados ............................................................................................................................................ 28
Constantes ........................................................................................................................................................ 29
Variveis ............................................................................................................................................................ 29
Tipos de dados .............................................................................................................................................. 30
Atribuio .......................................................................................................................................................... 30
Exerccios........................................................................................................................................................... 31
Java........................................................................................................................................................................ 32
Ambiente de desenvolvimento ......................................................................................................................... 34
Obtendo o Eclipse e instalando .................................................................................................................... 35
Perspectiva .................................................................................................................................................... 36
Workspace .................................................................................................................................................... 37
Criando um projeto ....................................................................................................................................... 38
Variveis ............................................................................................................................................................ 44
Tipos numricos ............................................................................................................................................ 48
System.Math ............................................................................................................................................. 49
Compatibilidade entre tipos ......................................................................................................................... 52
Interagindo com usurios ................................................................................................................................. 56
Exerccios........................................................................................................................................................... 60
Estrutura condicional ........................................................................................................................................ 61
A instruo IF................................................................................................................................................. 61
Comparao de strings.................................................................................................................................. 62
A instruo Else ............................................................................................................................................. 63
Aninhando a instruo if/else ....................................................................................................................... 64
Usando operadores AND e OR ...................................................................................................................... 64
Declarao switch/case................................................................................................................................. 67

Pg.: 8/137
Prof. Daniel Oliveira

Exerccios....................................................................................................................................................... 70
Estruturas de repetio..................................................................................................................................... 73
Loop While .................................................................................................................................................... 74
Loop Do...While............................................................................................................................................. 75
Loop For ........................................................................................................................................................ 77
Exerccios....................................................................................................................................................... 80
Arrays ................................................................................................................................................................ 83
Exerccios....................................................................................................................................................... 86
Arrays multidimensionais.............................................................................................................................. 88
Exerccios....................................................................................................................................................... 91
Modularizao................................................................................................................................................... 94
Definindo uma funo ou mtodo ................................................................................................................ 95
Exemplo de uma funo sem parmetros ................................................................................................ 96
Funes e parmetros................................................................................................................................... 96
Funes retornando valores ......................................................................................................................... 98
Exerccios (Nvel 1) ........................................................................................................................................ 99
Exerccios (Nvel 2) ........................................................................................................................................ 99
Exerccios (Nvel 3) ...................................................................................................................................... 100
Orientao a Objetos ...................................................................................................................................... 101
Declarando uma classe ............................................................................................................................... 102
Mtodos ...................................................................................................................................................... 105
Exerccios..................................................................................................................................................... 106
Construtores ............................................................................................................................................... 107
ArrayList ...................................................................................................................................................... 109
Exerccios................................................................................................................................................. 111
Encapsulamento.......................................................................................................................................... 113
Herana e polimorfismo.............................................................................................................................. 114
Override .................................................................................................................................................. 116
Polimorfismo ........................................................................................................................................... 116
Exerccios..................................................................................................................................................... 118
Classes Abstratas e Interfaces ..................................................................................................................... 119
Interfaces .................................................................................................................................................... 120
Excees e controle de erros ...................................................................................................................... 122
Exerccios..................................................................................................................................................... 126
Trabalhando com arquivos ......................................................................................................................... 127

Pg.: 9/137
Prof. Daniel Oliveira

Serializando objetos .................................................................................................................................... 130


Exerccios de Reviso do Contedo de OO ................................................................................................. 132
Anexos ................................................................................................................................................................. 134
Anexo A ........................................................................................................................................................... 134
Anexo B ........................................................................................................................................................... 136
Referncias.......................................................................................................................................................... 137

Pg.: 10/137
Prof. Daniel Oliveira

Introduo

qualquer procedimento computacional bem definido que toma


algum valor ou conjunto de valores de entrada e produz algum valor
ou conjunto de valores de sada. (Cormen)

Um algoritmo uma sequncia de passos logicamente organizados que realizam uma tarefa. Na realidade, em
vrios momentos no nosso dia a dia utilizamos algoritmos para realizao de tarefas rotineiras, por exemplo: a
troca de uma lmpada, a troca de um pneu, preparao de um caf e etc.

De forma geral um algoritmo um procedimento computacional que com um conjunto de dados de entrada
realiza uma tarefa, resultando em um conjunto de dados de sada. Ou seja, um conjunto de passos
computacionais que recebe uma entrada e gera uma sada.

Entrada Algoritmo Sada

Figura 1 - Definio de algoritmo

No nosso dia a dia, utilizamos o princpio de algoritmos com muita frequncia. Como por exemplo: a receita de
um bolo, a troca de um pneu furado, o uso de um determinado dispositivo ou aparelho, e, assim por diante.
Basicamente todos os procedimentos que so constitudos por um conjunto de regras e operaes muito bem
definidas e ordenadas. Sendo realizadas em um nmero finito de etapas, constitui algoritmos.

Algoritmo 1: Bolo de Cenoura

Ingredientes:

2 cenouras grandes
1 xcara de leo
2 xcaras de acar
4 ovos
2 xcaras de farinha de trigo
1 colher de sopa de fermento em p
1 lata de leite condensado

Pg.: 11/137
Prof. Daniel Oliveira

4 colheres de chocolate em p
2 colheres de sopa de margarina

Modo de Preparo:

1. Bata no liquidificador as cenouras, o acar, os ovos e o leo at obter um creme.


2. Despeje esse creme em uma vasilha e acrescente a farinha.
3. Bata na batedeira por 4 minutos em velocidade alta.
4. Acrescente o fermento e misture.
5. Coloque em uma forma untada por uns 30 a 35 minutos.
6. Retire do forno e coloque a cobertura!

Algoritmos Computacionais

Um programa de computador nada mais do que um algoritmo escrito em alguma linguagem de programao
que passa por um processo de compilao ou interpretao que traduz os comandos da linguagem em
instrues que o computador executa.

Todos os computadores e dispositivos computacionais tem uma estrutura bem parecida. Em, sua maioria so
constitudos por:

UCP Unidade Centro de Processamento


Memria
Dispositivo de entrada e sada

Estes componentes citados so conectados pelo o que ns denominados de barramento.

Figura 2 - Arquitetura de Von Neumann

A UCP ou unidade controladora a parte mais importante do computador. Ela executa todos os clculos,
execuo de tarefas e processamento de dados. Qualquer processador executa um conjunto especfico de
instrues denominado de linguagem de mquina.

Todo processador tem um conjunto de instrues que ele pode realizar. Estas instrues so denominadas de
cdigo de mquina, que so representados por uma sequncia de bits (zeros e uns). A quantidade desses bits
limitada ao tamanho do registrador principal do processador (8 bits, 16, 32 ou 64).

Pg.: 12/137
Prof. Daniel Oliveira

Estas instrues so tarefas muito simples, como por exemplo, transferir uma informao de uma posio da
memria para o processador, somar dois nmeros e etc. Normalmente, este conjunto de instrues binrias (1s
e 0s) representado em um formato hexadecimal ver Figura 3.

Figura 3 - Exemplo de instrues de mquinas

Normalmente trabalha-se com uma linguagem denominada de Assembly ou linguagem de montagem. Que na
realidade uma representao das instrues de mquinas, mas, em um formato que seja humanamente legvel
(Figura 4)

Figura 4 - Exemplo de um cdigo em Assembly

Outra parte importante dessa arquitetura a memria. na memria que os dados que so armazenados, o
processador acessa um posio de memria, copia o contedo dela para um de seus registradores internos,
realiza as aes e operaes necessrias e retorna (se for o caso) a informao alterada para memria.

A memria RAM (Random Access Memory Memria de acesso aleatrio), loteada locais que so
endereados atravs de um nmero inteiro. Quanto mais memria a mquina possuir, maior ser a quantidade
desses endereos e consequentemente maior ser o valor do endereo. Na Figura 4, temos na primeira coluna
da esquerda o endereo de memria. Como vimos anteriormente os processadores tem o que chamamos de
registradores. Estes registradores iro conter o endereo de memria de uma determinada informao, assim
sendo, o tipo de processador influi em quanto de memria pode ser endereado pelo mesmo.

A quantidade de memria enderevel por um processador pode ser calculada atravs da seguinte frmula:

2( )

Pg.: 13/137
Prof. Daniel Oliveira

Por exemplo um processador de 32 bits: 232 = 4.294.967.296 bytes ou 4Gbs. Mesmo que a mquina apresente
mais memria RAM, o processador simplesmente no conseguir enderear todos os endereos disponveis. J
um processador de 64bits consegue enderear at 16 Terabytes.

Alm da memria temos os dispositivos de entrada e sada de dados, que podem ser:

Monitor
Teclado
Mouse
Impressoras

Ou, qualquer dispositivo que possa receber dados e exibir dados. Para ns, seres humanos, temos a tendncia
de imaginar que os computadores se resumem a apenas aos dispositivos de entrada e sada, pois, atravs dos
mesmos que interagimos com os computadores.

Nos ltimos anos estes dispositivos tm evoludo e novas formas desse tipo de dispositivo tm surgido. Por
exemplo, at alguns anos atrs os monitores eram considerados dispositivos apenas de sada, hoje, com o uso
de telas de touch isto mudou.

Assim, sendo, um programa de computador nada mais do que a codificao de um algoritmo que contm
instrues para que um computador realize alguma tarefa. Evidentemente, no escrevemos os programas em
linguagem de mquina ou instrues de mquina. Utilizamos para isto linguagens, denominadas de alto nvel.

As instrues escritas nessas linguagens so chamadas de cdigo fonte. Este cdigo fonte
passa por um processo de traduo para linguagem de mquina, chamado de
compilao.

Na Figura 5, vemos de forma geral o processo de compilao. Primeiro criado o nosso


cdigo fonte (em uma linguagem de alto nvel). O cdigo fonte passa por um processo
que analise se escrevemos as palavras da linguagem de forma correta e na ordem
correta (vamos ver mais a frente que as palavras de uma linguagem de programao, so
os seus comandos).

Aps, o cdigo fonte ter sido validado, ento, transformado no que se chama em
cdigo intermedirio. Este cdigo intermedirio quase a linguagem de mquina, mas,
ainda faltam alguns ajustes. Este cdigo ento otimizado e ento transformado para
em cdigo de mquina dando origem ao programa executvel ou biblioteca.

Um ponto que deve ser realado que o processo de compilao e criao de cdigo
sempre esta ligado a uma determinada arquitetura. Ou seja, necessrio a existncia de
compiladores especficos para cada tipo de arquitetura.

Figura 5 - Processo de
compilao

Pg.: 14/137
Prof. Daniel Oliveira

Fluxogramas

Alm das linguagens de programao (nosso principal foco), existe outra forma de representao dos algoritmos
(uma forma mais visual e mais simples de entendimento para iniciantes ou leigos), que so os fluxogramas.

Os Fluxogramas ou Diagramas de Fluxo so uma representao grfica que utilizam formas geomtricas
padronizadas ligadas por setas de fluxo, para indicar as diversas aes (instrues) e decises que devem ser
seguidas para resolver o problema em questo.

Na Figura 6, temos um exemplo de fluxograma para o clculo de uma raiz quadrada. Como se pode notar
utilizam-se figuras para indicar os passos do algoritmo a ser executado no fluxo. Os smbolos utilizados na
construo de um fluxograma podem ser visto no Quadro 1, aonde apresentado apenas os principais.

Figura 6 - Exemplo de um fluxograma

Smbolo Descrio Smbolo Descrio


Incio/Fim Direo do Fluxo

Entrada de Dados Repetio

Atribuio,
Operao,
Processamento
Deciso

Pg.: 15/137
Prof. Daniel Oliveira

Imprimir / Sada

Quadro 1 - Smbolos para construo de fluxogramas

Esta forma de representao dos algoritmos de grande utilidade para exemplificar e demonstrar os passos
necessrios para a construo dos nossos algoritmos. Por exemplo, como ficaria um fluxograma para clculo
da rea de um retngulo?

Largura e
Inicio Largura * Altura Fim
Altura rea

Figura 7 - Fluxograma para clculo da rea de um retngulo

Outro exemplo seria como determinar se uma pessoa maior ou no de idade?

Inicio Idade

Idade >= 18 No
SIM

Maior de idade Menor de Idade

Fim

Figura 8 - Exemplo de um fluxograma para determinao da maior idade

Em muitas situaes queremos guardar o resultado de alguma operao para ser utilizado ou testado mais a
frente no fluxograma. Para isto utilizamos o que ns chamamos de variveis (vamos abordar este conceito mais
a frente). Dentro da representao dos fluxogramas utilizamos uma seta () para indicar o armazenamento da
informao na varivel, por exemplo:

Pg.: 16/137
Prof. Daniel Oliveira

Inicio

N1 Nota N1

N2 Nota N2 M (N1+N2)/2

M >= 5
Sim

Reprovado
Aprovado

Fim

Figura 9 - Atribuio de variveis em Fluxogramas

De forma geral, os fluxogramas so excelentes ferramentas para avaliao do fluxo de informao de um


sistema. Para se desenvolver um diagrama correto, devemos levar como procedimentos:

1) Os diagramas devem feitos e quebrados em nveis. Inicia-se com uma ideia geral, e, ento aumenta-se
o detalhamento
2) Os fluxogramas devem ser desenvolvidos sempre, que possvel, de cima para baixo e da esquerda para
a direita
3) incorreto e proibido ocorrncia de cruzamento das linhas de fluxo

Por exemplo, um fluxograma de clculo de mdia final:

Pg.: 17/137
Prof. Daniel Oliveira

Figura 10 - Exemplo de fluxograma de clculo de mdia nvel Alto

O fluxograma da imagem anterior est em nvel muito elevado. No possvel entender pontos como: quantas
notas iro compor a mdia, qual a frmula de clculo da mdia e como se determinar a aprovao? Ento, se
faz necessrio, aumentar o nosso detalhamento.

Vamos agora, detalhar o processo de obteno das notas:

Inicio

Obter N1

Obter N2

Calcular mdia e
determinar
aprovao

Fim

Pg.: 18/137
Prof. Daniel Oliveira

Ainda temos que detalhar como a mdia calculada:

Inicio Obter N1 Obter N2

M (N1 + N2) /2

Determinar
aprovao

Fim

Agora precisamos detalhar como feita a determinao da aprovao:

Inicio Obter N1 Obter N2

M (N1 +
N2) /2

SIM M >= 5 No

Aprovado Reprovado

Fim

Figura 11 - Exemplo de clculo de mdia detalhado


Pg.: 19/137
Prof. Daniel Oliveira

Um diagrama de fluxo aonde os elementos so executados de cima para baixo (top-down), sendo que cada
elemento tem apenas um nico predecessor e um nico sucessor conhecido como digrama linear - Figura 12.

Figura 12 - Exemplo de um diagrama linear

J digramas construdos para boa parte dos sistemas de processamento de dados, temos o que chamamos de
lgica estruturada. Nesse tipo de lgico temos elementos que simbolizam a sequncia de aes, condies de
execuo e repetio ou lao.

Na Figura 13, vemos o exemplo de representao grfica de uma sequncia. Nela temos a ordem em que
processos devem ser executados, mostrando assim a hierarquia em que as aes devero ser realizadas.

Figura 13 - Exemplo de sequncia

J na Figura 14, vemos a representao de estrutura condicionais. Aonde dependendo dos testes lgicos
realizados (verdadeiro ou falso) o fluxo de execuo do fluxograma desviado.

Pg.: 20/137
Prof. Daniel Oliveira

Figura 14 - Exemplo de Estrutura condicional

Alm das estruturas condicionais, temos as chamadas estruturas condicionais. Nelas um conjunto de aes so
repetidas at que alguma condio impea ou pare a repetio, ver abaixo.

Figura 15 - Exemplo de Estrutura de repetio

Em situaes aonde temos vrios testes condicionais aninhados (como por exemplo a seleo de uma opo
em um menu), podemos utilizar uma estrutura denominada de case (ver abaixo)

Pg.: 21/137
Prof. Daniel Oliveira

Figura 16 - Exemplo de Case

Evidentemente no podemos descrever todo um sistema em seus detalhes, ou at mesmo uma rotina, em
apenas um nico diagrama. A tcnica deve ser utilizada a chamada: Modularizao. Para isto precisamos
realizar as seguintes etapas:

1) Decompor um diagrama em partes independentes


2) Dividir um problema complexo em problemas menores e mais simples
3) Verificar a correo de um mdulo de blocos, independentemente de sua utilizao como unidade em
processo maior.

Se, possvel, a modularizao deve ser desenvolvida em diferentes nveis. Partimos de um viso geral do
problema identificando os sistemas que iro compor a soluo, para cada sistema quais os programas que o iro
compor e para cada programa quais sero seus mdulos.

Pg.: 22/137
Prof. Daniel Oliveira

Exerccios

1) Dados os passos de clculo abaixo montar um fluxograma para o mesmo


a. Incio de programa
b. Ler a, b
c. Se a diferente de 0 ento
i. Calcula o valor de x, sendo que ax+b=0
d. Escrever O valor de x , x
e. Seno escrever No h zero
f. Fim de programa

2) Em uma escola, a mdia final dada pela mdia aritmtica de trs notas. E a mesma tem o seguinte
esquema de avaliao:

Desenvolva um algoritmo que a partir da entrada das trs notas mostre a situao do aluno. No caso do aluno
em recuperao e prova final, mostre tambm quanto o aluno ir precisar para passar. No caso da recuperao
a nota necessria para passar dada por 10 Mdia + 2 e na prova final dado por 10 Mdia.

3) Monte um fluxograma e um pseudocdigo capaz de resolver o clculo da rea de um trapzio qualquer.


rea do trapzio = (Base Maior + Base Menor) x Atura / 2

4) Em uma loja e CDs existem apenas quatro tipos de preos que esto associados a cores. Assim os CDs
que ficam na loja no so marcados por preos e sim por cores. Desenvolva o algoritmo que a partir a
entrada da cor o software mostre o preo. A loja est atualmente com a seguinte tabela de preos

Cor Preo
Verde 10,00
Azul 15,00
Amarelo 30,00
Vermelho 40,00

5) Desenvolva um algoritmo capaz e encontrar o menor dentre 3 nmeros inteiros quaisquer dados pelo
teclado.

6) Desenvolva um algoritmo capaz de verificar se uns nmeros inteiros, dados como entrada, par ou
mpar.

7) Elabore um algoritmo que leia as variveis C e N respectivamente cdigo e nmero de horas trabalhadas
de um operrio. E calcule o salrio sabendo-se que ele ganha R$ 10,00 por hora. Quando o nmero de
horas excederem a 50 calcule o excesso e pagamento armazenando-o na varivel E, caso contrrio zerar
Pg.: 23/137
Prof. Daniel Oliveira

tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do processamento imprimir o salrio
total e o salrio excedente.

8) A secretria de Meio Ambiente que controla o ndice de poluio mantm 3 grupos que so altamente
poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,25. Se o ndice sobe para
0,3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0,4
as indstrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos
os grupos devem ser notificados a paralisarem suas atividades. Faa um algoritmo que leia o ndice de
poluio medido e emita a notificao adequada aos diferentes grupos de empresas.

Pg.: 24/137
Prof. Daniel Oliveira

Trabalhando com expresses

Para a construo de Algoritmos todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em
linhas. importante tambm ressalvar o uso dos operadores correspondentes da aritmtica tradicional para a
computacional.

Exemplo:

2
3 5 3 1
(2/3+(5-3))+1=

Tradicional Computacional

Cada linguagem de programao tem um conjunto de operadores para a construo de expresses aritmticas
ou relacionais. As expresses relacionais so aquelas que o resultado um valor lgico (verdadeiro ou falso
true ou false).

Por exemplo, a expresso 1+1 uma expresso aritmtica que resultar em um valor. J a expresso 1 > 2 (o
valor 1 maior do que 2?) uma expresso relacional, aonde so realizadas comparaes.

OPERADORES ARITMTICOS OPERADORES


Adio +
Subtrao -
Multiplicao *
Diviso /
Diviso Inteira \
Potncia ^ ou Exp (base,expoente)
Mdulo (resto da diviso) %
Quadro 2 - Operadores aritmticos

OPERADORES RELACIONAIS OPERADORES


Maior >
Menor <
Maior ou igual >=
Menor ou igual <=
Igual =
Diferente <>
Quadro 3 - Operadores relacionais

Nos quadros acima temos as representao dos operadores aritmticos e relacionais utilizados nas principais
linguagens de programao. Vale a ressalva que no sero os mesmos para todas as linguagens, existem
variaes.

Alm desses operadores ainda existem os operadores lgicos, que atuam apenas sobre os valores lgicos. Eles
so relacionados no Quadro 4.

Conjuno E (and) RETORNA VERDADEIRO SE AMBAS AS PARTES FOREM VERDADEIRAS.

Pg.: 25/137
Prof. Daniel Oliveira

Disjuno OU (or) BASTA QUE UMA PARTE SEJA VERDADEIRA PARA RETORNAR VERDADEIRO.

Disjuno Exclusiva XOU RETORNAR FALSO SE AMBOS OS LADOS FOREM IGUAIS E VERDADEIRO CASO
(XOR) CONTRRIO
NO (not) INVERTE O ESTADO, DE VERDADEIRO PASSA PARA FALSO E VICE-VERSA.

Quadro 4 - Operadores lgicos

No quadro abaixo temos alguns exemplo do uso desses conectivos

Os operadores lgicos atuam sobre os valores lgicos da seguinte forma (Quadro 5):

A B A E B A OU B NO (A) A XOR V

V V V V F F

V F F V F V

F V F V V V

F F F F V F

Quadro 5 - Tabela verdade

Alguns exemplos de expresses lgicas:

Pg.: 26/137
Prof. Daniel Oliveira

Vamos ver alguns exemplos de uso utilizando pseudocdigo:

Se (salario > 180) e (salrio < 800) Ento


Escrever 'Salrio vlido para financiamento'
Seno
Escrever 'Salrio fora da faixa permitida para financiamento'
FimSe

Se (idade < 18) ou (idade > 95) Ento


Escrever 'Voc no pode fazer carteira de motorista'
Seno
Escrever 'Voc pode possuir carteira de motorista'
FimSe

Se (idade > = 18) e (idade < = 95) e (aprovado_exame = 'sim') Ento


Escrever 'Sua carteira de motorista estar pronta em uma semana'
Seno
Escrever 'Voc no possui idade permitida ouno passou nos testes'
FimSe

Pg.: 27/137
Prof. Daniel Oliveira

Mas algum exemplos de operaes lgicas:

Para A = Verdadeiro, B = Falso e C = Falso, as expresses abaixo fornecem os seguintes resultados:

Modularizao de expresses e precedncia de operadores

A modularizao a diviso da expresso em partes, proporcionando maior compreenso e definindo


prioridades para resoluo da mesma. Em expresses computacionais usamos somente parnteses ( ) para
modularizao. Assim:

((2 + 2)*4 +8)/ 2 = 12 diferente de 2 + 2*4 +8/ 2 = 14

Alm do fato do uso dos parnteses deve ser levada em conta a precedncia dos operadores na resoluo das
expresses aritmticas. A lista abaixo relaciona os operadores de maior precedncia para os de menor
precedncia:

Parnteses e Funes
Operadores Aritmticos na seguinte ordem:
Potenciao: ^;
Multiplicao e Diviso: *, /;
Soma e Subtrao: +, -;
Operadores Relacionais: = ,<> ,> ,< ,>= ,<=;
Operadores Lgicos na seguinte ordem: NAO, E, OU.

Estrutura de dados

Uma estrutura de dados um meio para organizar e armazenar dados


com objetivo de facilitar o acesso e as modificaes (Cormen,2002).

As estruturas de dados e algoritmos so muito ligados. No se pode estudar estruturas de dados sem
considerar os algoritmos associados a elas, assim como a escolha dos algoritmos em geral depende da
representao e da estrutura dos dados (ZIVIANI,1999).

Pg.: 28/137
Prof. Daniel Oliveira

De uma maneira bem informal podemos definir um programa de computador ou um software como sendo a
unio entre um algoritmo e uma estrutura de dados. Na soluo de problemas atravs de algoritmos devemos
tambm determinar qual a estrutura de dados ser utilizada.

Figura 17 - Exemplo de estrutura de dados

Constantes

As constantes so valores (ou informaes, dados) que no variam com o tempo. So valores fixos (no
variveis). Como exemplo, so os nmeros, letras, palavra e etc.

Variveis

O conceito de varivel muito importante para a elaborao de algoritmos e os programas. Uma varivel um
espao de memria do computador que reservado para armazenar as informaes ou dados utilizado pelo
programa de computador.

Como o prprio nome mostra, as variveis tem seu valor no constante, ou seja, varivel no tempo. Toda varivel
tem um nome ou identificador, para facilitar (para ns humanos) a referncia mesma. Internamente os
computadores acessam a memria atravs de endereos numricos, as linguagens de programao simplificam
esse processo associando aos endereos de memria nomes ou identificadores fornecidos pelos
programadores.

Podemos caracterizar uma varivel como sendo uma caixa com contedo. No lado de fora dessa caixa temos
uma etiqueta com um identificador e o contedo da caixa o valor dessa varivel (que poder ser alterado
diversas vezes).

Pg.: 29/137
Prof. Daniel Oliveira

Figura 18 - Definio de varivel (Tonet,2004)

Cada linguagem de programao tem suas prprias regras para a criao de identificadores.

Tipos de dados

Em linguagens de programao os dados tm certas caractersticas e uma das mais importantes o seu tipo.
Nmeros, textos, datas e outros tem uma forma peculiar de ser armazenado e representado pelos
computadores. O tipo do dado define a forma a armazenamento e representao da informao.

Os tipos de dados podem ser simples, ou seja, o valor indivisvel. Por exemplo, um nmero inteiro um tipo
simples, um valor de tipo lgico (verdadeiro ou falso), uma letra (caractere), so tipos simples.

Os tipos estruturados em geral definem uma coleo de valores simples, ou um agregado de valores de tipos
diferentes (ZIVIANI,1999). Estes tipos so os vetores, matrizes e outros.

Os tipos de dados determina o conjunto de valores possveis que uma varivel ou expresso pode assumir. E,
tambm, quais operaes podero ser realizadas.

Atribuio

Atribuio a ao de armazenar ou passar valor para um varivel. Quando realizamos uma ao de atribuio
estamos colocando a informao no endereo de memria referenciado. Como foi visto no contedo de
fluxogramas utilizamos uma seta () para indicar esta ao. Mas, como iremos ver mais a frente existem outros
smbolos para indicar a atribuio.

Na ao de atribuio importante saber se a informao que queremos armazenar na varivel compatvel


com a mesma. Nesse momento o tipo de dado analisado e caso no seja possvel a ao no poder ser
realizada. Ainda, possvel o chamamos de casting, ou, mudana do tipo de dado da informao para um tipo
de dado compatvel.

Uma observao importante a ser feita em relao a atribuies que na parte esquerda (a que vai "receber"
algo) no pode haver nada alm da varivel, ou seja, s varivel que "recebe" algum contedo, no possvel
ter um clculo por exemplo, ou uma constante, recebendo alguma coisa. Por exemplo:

Ex.: nota1 + nota2 valor Esta instruo est incorreta e no poder ser realizada

Pg.: 30/137
Prof. Daniel Oliveira

Exerccios

1- Escreva as expresses na forma de computacional

b(3 x )
a. ae 2
c
2 x 2 (3 x) ( x 1) x 1
b.
2 x2
22 k
45
c. 2h 4h(3 h)
3x
2b 4a 2 2 f 3
d.
3 2a
1
6 x (2 y ) 3
e.
39
2
2x u 3
f.
a bc
2- Escreva as expresses em formato tradicional
a. a+b+(34+exp(e,9))/u-89^(1/2)=
b. 23+5/((7*a)/47)^(2/x)=
c. (12*x)/(36-9^x)^2=
3- Resolva as expresses lgicas
a. no (2^3 < 16 ou 15\2 < 10)
b. (6<8) ou (3>7) =
c. No (2<3) =
d. (5>=6) ou (6<7) ou no (a+5-6=8) {sabendo-se que A=5}
e. (34>9 e 5+u = 34) ou (5=15/3 e 8>12) {sabendo-se que u=29}
f. 10%4 < 16%3
g. 2+8%7 >= 6- (8^(2/3))^(1/2)
h. 15\7 >= 27 % 5

Pg.: 31/137
Prof. Daniel Oliveira

Java

uma linguagem de programao desenvolvida pela Sun Microsystem, que posteriormente foi comprada pela
Oracle. A sintaxe do Java baseada no C/C++, mas, de forma diferente uma linguagem altamente portvel
entre plataformas.

A partir de 1991 que o Java passou a ser visto pelo pblico em geral quando a Netscape anunciou que seu
navegador iria suportar o Java para a execuo de cdigos (applets). Colocando assim, a internet em outro
patamar com informaes dinmicas e pginas com recursos que ainda no se havia visto at ento.

Java hoje em dia est presente em vrios dispositivos e solues. Desde solues empresariais at tablets e
celulares. Abaixo segue uma lista das principais tecnologias Java (Oracle,2011):

Java SE Java Standard Edition, verso para a disponibilizao de solues para desktops e servidores.
Java EE - Java Enterprise Edition, conjunto de solues para desenvolvimento corporativo.
Java ME Java for Micro Edition, ambiente para construo de solues para dispositivos mveis e embarcados
em equipamentos como: celulares, tablets, PDAs, consoles de gerenciamento de TVs (receptores de TV digital) e
impressoras.
JavaFX nova tecnologia para desenvolvimento de aplicaes RIA
Java Card Tecnologia java utilizao de aplicaes que iro ser executadas em smartcards e outros equipamentos
com capacidade de memoria e processamento reduzidos.
Java TV Plataforma Java ME, otimizada para ser executada em TVs e consoles de gerenciamento de TVs.

Mas, o grande objetivo do desenvolvimento do Java foi portabilidade. Ou seja, o mesmo cdigo sendo
executado em diferentes sistemas operacionais, sem a necessidade de rescrita ou recompilao. Mas como isto
possvel?

Isto possvel devido existncia da JVM (Java Virtual Machine):

Mquina imaginria
Emulada por software em mquina real
Cdigo armazenado em arquivos *.class
Interpreta e executa programas Java

O processo de criao de cdigos executveis em java passa por duas etapas: uma primeira etapa aonde o
cdigo escrito Java traduzido (compilado) para uma linguagem intermediria (bytecode). A mquina virtual
Java responsvel pela execuo dessa linguagem intermediria, para cada sistema operacional existe uma
mquina virtual prpria que realizar a segunda etapa do processo de execuo do cdigo, que a traduo do
bytecode para a linguagem de mquina do ambiente hospedeiro. Ver Figura 19.

Pg.: 32/137
Prof. Daniel Oliveira

Compilador
JDK

Cdigo Fonte: Java Byte


Code
xxx.java xxx.class

JVM
Execuo do
Interpreta o
cdigo
Byte Code

Figura 19 - Processo de compilao de cdigo fontes em Java

Na Figura 20, temos uma viso conceitual do nvel de abstrao do cdigo em Java em relao ao hardware
aonde esse mesmo cdigo ser executado. Quando por exemplo, queremos exibir uma mensagem de texto no
console, simplesmente iremos chamar o comando apropriado no Java. A JVM traduz que este comando para
uma ou mais instrues para o sistema operacional hospedeiro (lembre-se vai existir uma JVM para cada sistema
operacional que ir executar as aplicaes Java), e da para frente com SO.

JVM
Sistema
Operacional
BIOS

Hardware

Figura 20 - Arquitetura para execuo do cdigo Java

O uso de uma mquina virtual foi sem dvida nenhuma um grande avano para a criao de solues portveis
e multi-plataforma.

A linguagem Java 100% orientada a objetos, mas, nesse texto no iremos levar isto em considerao e iremos
nos ater apenas a uma programao estruturada (no orientada a objetos).

Pg.: 33/137
Prof. Daniel Oliveira

A JVM obtida ao se instalar o Java do site da Oracle


(http://www.oracle.com/technetwork/java/javase/downloads/index.html )

Ambiente de desenvolvimento:

jdk: Java Development Kit (Figura 21)

Ambiente de produo:

jre: Java Runtime Environment

Figura 21 - Opes para obteno do JDK

Bem, existem dois tipos de distribuio do Java: JDK e o JRE. O primeiro JDK voltado para instalao de
mquinas aonde iremos desenvolver solues Java, pois, acompanha vrias ferramentas e documentao
necessria para isto. J o JRE indicado para ser instalado em ambientes aonde iremos apenas executar as
solues construdas. Evidentemente, esta uma explicao bem simplificada, os puristas que me perdoem,
mas, inicialmente o suficiente.

Ambiente de desenvolvimento

Um componente muito importante para o desenvolvimento de programas de computador o ambiente de


desenvolvimento. H 20 anos eram necessrios vrios outros programas para realizar a compilao do arquivo
executvel: compilador, linkeditor, montador e etc. Com o passar do tempo foram sendo criados ambientes
integrados, aonde atravs de uma interface amigvel possvel a compilao, teste e distribuio dos
aplicativos. Estes ambientes ficaram conhecidos com IDE (Integrated Development Environment).

Vamos utilizar uma IDE de livre distribuio que o Eclipse (http://www.eclipse.org/). O eclipse uma framework
para integrar diferentes tipos de aplicaes. Uma das linguagens que se pode desenvolver o Java atravs do
JDT (Java Development Tooling).

O Eclipse trabalhar com plug-ins, facilitando a integrao de novas linguagens e funcionalidades ao IDE.

Pg.: 34/137
Prof. Daniel Oliveira

Um usurio sempre trabalha no workbench, a parte "visvel" da plataforma(GUI). A perspectiva escolhida


determina a aparncia atual do workbench. A perspectiva uma coleo conhecida como "views e editores"
que contribuem com aes especiais para o menu e a toolbar.

Obtendo o Eclipse e instalando

Na Figura 22, vemos a opo para baixar a verso desejada do Eclipse. Note uma vez instalado podemos incluir
novos recursos e at mesmo linguagens suportadas a IDE atravs do recurso de instalao de extenses na
mesma.

Figura 22 - Opes de download do Eclipse

Realizado o download, voc dever descompactar o arquivo no local aonde quiser e dever localizar o arquivo
eclipse.exe (para ambiente Windows) e execut-lo. Voc dever ver a tela da Figura 23 para configurao do
chamado Workspace.

Figura 23 - Tela de configurao de Workspace

Como o prprio nome j diz, nessa tela (Figura 23) ir indicar para o Eclipse o local de trabalho. Que dever ser
uma pasta, aonde a IDE ir manter nossos cdigos fontes, parmetros de configurao e outras informaes de
trabalho. Podem-se ter vrios Workspaces, mas, apenas um fica ativo por vez. Uma vez criado o Workspace,
voc dever uma tela como esta na Erro! Fonte de referncia no encontrada..

Pg.: 35/137
Prof. Daniel Oliveira

Figura 24 - Tela inicial do Eclipse

Na Figura 25Erro! Fonte de referncia no encontrada. temos o ambiente o Eclipse pronto para ser utilizado
para o desenvolvimento.

Figura 25 - Ambiente do Eclipse para iniciar os trabalhos

Perspectiva

O Eclipse tem o conceito de perspectivas, ou seja, pode-se definir a configurao das janelas e views de acordo
com o tipo de projeto ou com as configuraes que melhor se adequem ao seu gosto.

Pg.: 36/137
Prof. Daniel Oliveira

Para abrir uma nova perspectiva no seu worbench faa:

1. Escolha 'Window -> Open Perspective' no menu principal:

Figura 26 - Janela de perspectiva

2. Escolha 'Other' para ver todas as perspectivas instaladas:

Figura 27 - Outros tipos de perspectivas

Workspace

O workspace ou espao de trabalho o local aonde sero armazenados os arquivos fontes, arquivos compilados,
informaes de configurao e outros, que o Eclipse ir utilizar para cada usurio.

Na primeira vez que se executa o Eclipse, ser pedido que voc informe qual o local do Workspace a ser utilizado
(s permitido utilizar um workspace por vez). Na Figura 28, vemos o caminho no menu do Eclipse que
possibilita a troca de workspace, o que far com que o Eclipse se re-inicie.

Pg.: 37/137
Prof. Daniel Oliveira

Figura 28 - Opo de troca de Workspace

Criando um projeto

Na Figura 29, temos o caminho para criao de um projeto Java no Eclipse. Em algumas configuraes do Eclipse
a opo Java Project pode no estar disponvel, ento selecione a opo Other e na janela que ir aparecer digite
com campo de texto: Java Project selecione a opo conforme a Figura 30.

Figura 29 - Criao de um projeto Java

Pg.: 38/137
Prof. Daniel Oliveira

Figura 30 - Selecionando o tipo de projeto no Eclipse

Uma vez selecionado o tipo de projeto Java (se voc estiver na janela como da Figura 30, selecione o boto
Next), a janela da Erro! Fonte de referncia no encontrada. dever ser exibida para informaes dos
parmetros iniciais do projeto Java.

Na janela de novo projeto Java devemos informar o nome do


projeto no campo de texto Project Name Este nome ir ser
exibido na rvore de projetos (ver Figura 32). Abaixo do
nome do projeto pode-se ver a local fsico do projeto do
disco.

Na mesma tela podemos informar para qual verso da JRE


iremos trabalhar. Nos exemplos, exerccios e etc, iremos
utilizar a JRE padro instalado nas mquinas de trabalho. No
caso do exemplo (Figura 31), estamos com verso 1.6.

Informado este dados deve-se selecionar o boto Next.

Figura 31 - Parmetros inicias do projeto Java

Pg.: 39/137
Prof. Daniel Oliveira

Figura 32 - Nome do projeto Java

Na Figura 33, temos a tela final de configurao do nosso projeto Java. Na aba Source vemos como ser a
estrutura do projeto (esta mesma estrutura estar replicada fisicamente em disco no Workspace). Nas demais
abas tm opes mais avanadas que vo alm do exigido nesse texto e vamos deixar para um segundo
momento. Selecionando o boto Finish para finalizar a criao do projeto.

Figura 33 - Tela de configurao final do projeto Java

Depois que o projeto criado podemos ver a sua estrutura do Package Explorer(Figura 34).

Pg.: 40/137
Prof. Daniel Oliveira

Figura 34 - Package Explorer

Caso o Package Explorer no esteja sendo exibido v at: Window -> Show View, e selecione o Package
Explorer(Figura 35). Nessa opo de menu podemos exibir todas as principais janelas do Eclipse.

Figura 35 - Usando o menu Show View

Para finalizar a criao do primeiro projeto java, devemos criar um arquivo .java (todo e qualquer programa em
Java tem que ter pelo menos uma classe). No vamos agora entrar em por menores sobre a estrutura da classe
criada, vamos abordar isto mais a frente.

No package Explorer, selecione o n src e com o boto direito do mouse selecione - Figura 36:

Pg.: 41/137
Prof. Daniel Oliveira

Figura 36 - Criando uma nova classe

Aps a seleo da opo de uma nova classe ser exibida a janela da Figura 37, aonde deve-se levar em conta
(nesse primeiro momento) apenas as informaes marcadas de vermelho. Informa-se o nome da classe e
selecione a caixa de criao do mtodo Main. Selecione o boto Finish para finalizar o assistente de criao de
classes.

Figura 37 - Parmetros bsicos para criao de classes

Aps a finalizao do assistente de criao de classes, a janela do editor ir ser exibida com o cdigo inicial da
classe. Mais a frente vamos olhar com mais detalhe este cdigo(Figura 38).

Pg.: 42/137
Prof. Daniel Oliveira

Figura 38 - Cdigo inicial gerado pelo assistente de criao de classes

Para executar o seu projeto tecle CTRL+F11, o Eclipse ir exibir o processo de compilao e nada ser exibido na
tela de console, pois, ainda no colocamos nenhum cdigo que realize alguma tarefa interessante.

Na janela do editor altere o cdigo colocando a linha de cdigo em destaque na Figura 39. Note que o cdigo
deve ser escrito exatamente como est no exemplo. A linguagem Java case sensitive ou seja faz distino
entre maisculas e minsculas.

Figura 39 - Exemplo de cdigo do primeiro projeto Java

Selecione as teclas CTRL+F11 e veja o resultado na janela de console do Eclipse como na Figura 40.

Figura 40 - Janela de console com o resultado a execuo do cdigo

Pg.: 43/137
Prof. Daniel Oliveira

Variveis

Anteriormente falamos sobre tipos de dados e a definio do que so variveis. Bem, vamos agora ver estas
definies dentro de um programa em Java.

Antes de tudo, precisamos entender a estrutura bsica de um programa Java.

Figura 41 - Exemplo de cdigo em Java

No inicio do nosso cdigo de exemplo temos a declarao import, este comando responsvel por indicar ao
compilador Java aonde ele dever procurar pelos comandos utilizados no cdigo (uma definio bem inicial).
A classe Scanner (responsvel pela captura das informaes digitadas no teclado) definida dentro do pacote
util que est dentro do pacote java veja a definio e uso de pacotes no Anexo A . Se, no informamos o
import correto o compilador ir apresentar um erro, pois, no ser possvel localizar a definio da classe
Scanner.

Em java temos duas formas bsicas para criar comentrios:

1) Comentrios de apenas uma linha utiliza: // . Por exemplo, Figura 42:

Figura 42 - Exemplo de comentrios de uma linha

2) Comentrios de vrias linhas ou bloco utiliza o conjunto: /* */ - Figura 43

Figura 43 - Comentrio de bloco

Pg.: 44/137
Prof. Daniel Oliveira

Avanando pelo cdigo vemos a declarao de uma classe: public class CMain. No objetivo do texto abordar
orientao a objetos, mas, para no ficarmos totalmente sem uma explicao podemos resumir este trecho
como:

public esta palavra chave indica que a classe a ser definida poder ser acessada por qualquer outro
cdigo que necessite chama-la ou seja e de acesso pblico
class como esperado esta palavra chave define que vamos criar uma classe e aps esta palavra chave
temos o nome da classe propriamente dito.

Dentro da classe criada no exemplo tem mais coisas estranhas, temos a seguinte declarao:

public static void main(String[] args)

O que vem a ser isto? Bem, na linha acima temos a definio do chamamos de mtodo (mais uma vez este
contedo est fora do escopo desse texto). Um mtodo, em poucas palavras, definem aes que as classes
podem realizar comportamento dos objetos. Todos nossos programas aqui ter que ter este mtodo, prprio
assistente de criao de classes do Eclipse cria esta estrutura (ver Figura 37). Este o mtodo principal (main do
ingls), o ponto de partida para execuo do nosso cdigo pela mquina virtual Java.

Como iremos trabalhar com uma abordagem no


orientada a objetos (um sacrilgio!) todo nosso cdigo
vai estar sempre localizado dentro do mtodo MAIN
(ver Figura 44).

uma fonte de erro muito comum para os alunos


Figura 44 - Mtodo MAIN comearem a codifica fora do mtodo main, prestem
muita ateno no local em que o seu cdigo ser
introduzido. Isto ir poupar muita dor de cabea.

Aps a criao da classe temos o caractere {, no Java todo bloco de cdigo deve ser envolvido entre um
conjunto de { e }. Ou seja, para cada { temos que ter um correspondente }.

Figura 45 - Uso de chaves para delimitar blocos de cdigo

Outra questo importante na codificao do Java (herana do C/C++) uso do caractere ; como terminador
de instruo. Em Java o ; finaliza uma idia.

Figura 46 - Uso do ponto e vrgula para finalizar uma linha de cdigo

Pg.: 45/137
Prof. Daniel Oliveira

Se olharmos a Figura 45 e compararmos com a Figura 46 podemos ficar em dvida: Por que a instruo if no
tem ; no final? A instruo if (com veremos mais frente) ir delimitar um bloco de cdigo e por isso no utiliza
o terminador ; outras instrues de bloco (como os repetidores) tem o mesmo comportamento.

Uma boa prtica (isto no uma regra) a endentao do cdigo atravs do uso de espaos e tabulaes. Isto
facilita a leitura e entendimento do cdigo - Figura 47.

Figura 47 - Exemplo endentao de cdigo

Depois de tudo isto dito, podemos retomar ao assunto de variveis. As variveis so usadas para armazenar
informaes durante o processamento de programas. O Java usa nove tipos diferentes de tipos de dados -
Quadro 6.

Tipo Descrio
boolean Pode assumir o valor true ou o valor false
char Caractere em notao Unicode de 16 bits. Serve para a armazenagem de dados alfanumricos
armazenamento de um nico caractere. Tambm pode ser usado como um dado inteiro com
valores na faixa entre 0 e 65535.
byte Inteiro de 8 bits. Pode assumir valores entre -128 a 127.
short Inteiro de 16 bits. Os valores possveis cobrem a faixa de -2-15=-32.768 a 215-1=32.767
int Inteiro de 32 bits. Pode assumir valores entre -2.147.483.648 a 2.147.483.647.
long Inteiro de 64 bits em notao de complemento de dois. Pode assumir valores entre -263 e 263-1.
float Representa nmeros em notao de ponto flutuante normalizada em preciso simples de 32 bits
em conformidade com a norma IEEE 754-1985. O menor valor positivo representvel por esse
tipo 1.40239846E-46 e o maior 3.40282347E+38
double Representa nmeros em notao de ponto flutuante normalizada em preciso dupla de 64 bits
em conformidade com a norma IEEE 754-1985. O menor valor positivo representvel
4.94065645841246544e-324 e o maior 1.7976931348623157e+308
String O tipo string no um tipo primitivo mais se comporta como. Este tipo utilizado para
armazenar cadeias de caracteres como nomes, frases, palavras e etc.
Quadro 6 - Tipos de dados primitivos do Java

No exemplo abaixo temos um cdigo que ir exibir os valores limites dos tipos de dados numricos em Java,
como no quadro acima:

Pg.: 46/137
Prof. Daniel Oliveira

public class CMain {

public static void main(String[] args) {

System.out.println("Tipos de dados em Java: \n" +


"\nMenor Byte: " + Byte.MIN_VALUE +
"\nMaior Byte: " + Byte.MAX_VALUE +
"\nMenor Short Int: " + Short.MIN_VALUE +
"\nMaior Short Int: " + Short.MAX_VALUE +
"\nMenor Int: " + Integer.MIN_VALUE +
"\nMaior Int: " + Integer.MAX_VALUE +
"\nMenor Long: " + Long.MIN_VALUE +
"\nMaior Long:" + Long.MAX_VALUE +
"\nMenor Float: " + Float.MIN_VALUE +
"\nMaior Float: " + Float.MAX_VALUE +
"\nMenor Double: " + Double.MIN_VALUE +
"\nMaior Double: " + Double.MAX_VALUE);

Exemplo 1 - Limites dos tipos numricos

Figura 48 - Resultado da execuo do exemplo de limites de valores para tipos numricos

A declarao de uma varivel em Java, sempre feita atravs da seguinte estrutura: <TIPO> <NOME
(IDENTIFICADOR>, por exemplo:

Ex. int i; => Declara uma varivel do tipo inteira cujo o nome i.

Para atribuirmos um valor a uma varivel usamos o operador = (ou igual simples), como no exemplo da
Figura 49 - Atribuio de valores.

Pg.: 47/137
Prof. Daniel Oliveira

Figura 49 - Atribuio de valores

Na primeira linha temos a declarao da varivel e na segunda linha temos a chamada inicializao da varivel
(a primeira vez que ela recebe algum valor). Em Java no podemos trabalhar com uma varivel sem antes
inicializa-la. Isto devido ao fato de que quando declaramos uma varivel, apenas separamos um espao de
memria para seu uso, mas, qualquer que seja o valor que j exista nesse local ainda permanece l (ou seja, um
lixo qualquer) - Figura 50.

Figura 50 - Exemplo de erro com uso de variveis no inicializadas

O processo de declarao e inicializao pode ocorrer em apenas uma nica linha:

public static void main(String[] args) {

int i = 10;

Exemplo 2 - Declarando e inicializando uma varivel

Tipos numricos
Com os tipos numricos em Java: tipos inteiros (byte, short, int e long) e tipos de ponto-flutuante (float e
double) podemos realizar todas as operaes:

Operao Descrio
= Operadores de atribuio
==, != Operadores de igualdade e diferena
<, <=, >, >= Operadores de desigualdade
+, -, *, /, % Adio, subtrao, multiplicao, diviso e mdulo.
+=, -=, *=, /=, %= Operadores de atribuio com adio, subtrao, multiplicao, diviso e mdulo.
++, -- Incremento e decremento
~ Operador lgico de negao
&, | Operadores lgicos E, OU
Quadro 7 - Operadores para tipos numricos
Pg.: 48/137
Prof. Daniel Oliveira

O Java, assim como outras linguagens tem operadores que simplificam a escrita. No existe nenhum ganho de
desempenho no uso deles e sim reduo de escrita.

Operador simplificado Operao equivalente


x += 5 x=x+5
x -= y x=x-y
x *= 2 x=x*2
z /= 4 z=z/4
Quadro 8 - Comparao entre operadores

Abaixo mais um exemplo de cdigo abaixo:

public class CMain {


public static void main(String[] args) {

byte j = 60;
short k = 24;
int l = 30;
long m = 12L;
long resultado = 0L;

resultado += j; // resultado = 60 (0 mais 60)


resultado += k; // resultado = 84 (60 mais 24)
resultado /= m; // resultado = 7 (84 dividido por 12)
resultado -= l; // resultado = -23(7 menos 30)
resultado = -resultado; // resultado = 23 ( -(-23) )
resultado %= m; // resultado = 11 (resto de 23 div. 12)
}
}

Exemplo 3 - Exemplo de utilizao de operadores com tipos numricos

System.Math
Alm desses operadores evidentemente existem outras operaes (mais complexas) que podem ser realizadas
com tipos numricos. No Java estas operaes so definidas dentro de uma classe especial chamada de Math.

Nela as operaes so categorizadas da seguinte forma:

Mximo e Mnimo;
Potncias e Razes;
Logaritmo;
Arredondamentos e Valores Absolutos;
Trigonometria;
Nmeros Randmicos.

Constantes
A classe Math possui duas constantes que so o (pi) e E (base de logaritmos naturais ou neperianos) cada
uma com o valor de 3,141592653589793 e 2.718281828459045, respectivamente.

public class ComprimentoCirculo {


public static void main(String[] args) {
float raio = 2.4f;
double comprimento = 2 * raio * Math.PI;
System.out.println(comprimento);
}
}

Exemplo 4 - System.Math constantes

Pg.: 49/137
Prof. Daniel Oliveira

Mximo e Mnimo
Como o ttulo j sugere, a classe Math de Java possui dois mtodos que retornam o maior e o menor valor de
seus argumentos. Esses mtodos so max() e min().
public class MenorMaior {
public static void main(String[] args) {
float precoProdutoA[] = { 11.2f, 15.12f };
float precoProdutoB[] = { 19.7f, 20 };
System.out.println("O maior preo do produto A " + Math.max(precoProdutoA[0], precoProdutoA[1]));
System.out.println("O menor preo do produto B " + Math.min(precoProdutoB[0], precoProdutoB[1]));
}
}

Exemplo 5 - System.Math Min e Max


Potncias e razes
Podemos fazer clculos de potncia e razes com facilidade usando os mtodos disponveis em Math.
pow (base, expoente) - calcula a potncia da base elevada ao expoente.
sqrt (nmero) - calcula a raz quadrada de um nmero
cbrt (nmero) - calcula a raiz cbica de um nmero
exp (expoente) - calcula o valor da constante de Euler (E) elevado ao expoente

public class PotenciasRaizes {


public static void main(String[] args) {
System.out.println("1 MB tem " + Math.pow(2, 10) + " KB");
System.out.println("A raiz quadrada de 121 " + Math.sqrt(121)
+ " e a raiz cbica de 1331 tambm " + Math.cbrt(1331));
}
}

Exemplo 6 - System.Math Potncia e raiz quadrada

Logaritmo
Na classe Math encontramos funes para clculo de logaritmo natual, na base de 10 e a soma do nmero mais
1. Tais mtodos so:
log (nmero) - logaritmo natural de um nmero.
log10 (nmero) - logaritmo natural de um nmero na base 10
log1p (nmero) - logaritmo natural de um nmero somado a 1. Esse mtodo retorna um resultado
mais confivel se o nmero em questo for muito prximo a 0 ou um nmero fracionado. Ou seja, o
resultado no o mesmo entre os mtodos log1p (0.1f) e log (1+0.1f).

public class Exemplo {


public static void main(String[] args) {
float nr = 0.1f;
System.out.println("Resultado 1: " + Math.log(nr+1));
System.out.println("Resultado 2: " + Math.log1p(nr));
}
}

Exemplo 7 - System.Math Logaritimo

Arredondamentos e Valores Absolutos


Formas de arredondar um de ponto-flutuante (float e double) transformando-o em um nmero inteiro e
tambm como obter o valor absoluto de qualquer nmero.

Pg.: 50/137
Prof. Daniel Oliveira

abs (nmero) - retorna o valor absoluto do mesmo tipo do parmetro (ex.: inteiro retorna int positivo,
decimal retorna float positivo, etc)
ceil (decimal) - este mtodo retorna o valor decimal do parmetro sem a parte fracionada. Ex.: 2.1 ser
2, 6.0 ser 6, 10.8 ser 10. Realiza o truncamento do nmero.
floor (decimal) - este mtodo retorna o primeiro inteiro aps o valor decimal. Ex.: 2.1 ser 3, 6.0 ser
6, 10.8 ser 11.
round (decimal) - retorna o arredondamento aritmtico do nmero decimal passado como parmetro.

public class Exemplo {


public static void main(String[] args) {
float nr = -5.75f;
System.out.println("Absoluto: " + Math.abs(nr) +
"\nInteiro mais baixo: " + Math.ceil(nr) +
"\nInteiro mais alto: " + Math.floor(nr) +
"\nArredondamento: " + Math.round(nr));
}
}

Exemplo 8 - Valores absolutos e arredondamentos

Trigonometria
A maioria da funes da classe Math so trigonomtricas, ngulo em radianos.
sin (ngulo) - seno
cos (ngulo) cosseno
tan (ngulo) - tangente
asin (ngulo) arco seno
acos (ngulo) arco cosseno
atan (ngulo) arco tangente
sinh (ngulo) seno hiperblico.
cosh (ngulo) cosseno hiperblico.
tanh (ngulo) tangente hiperblica.
hypot (x , y) - retorna o valor da hipotenusa, ou, basicamente, a distncia entre dois pontos
fundamentada na frmula [sqrt (pow(x, 2) + pow(y,2))].
toRadians (ngulo) - retorna um valor aproximado de radianos de acordo com o ngulo medido em
graus.
toDegrees (raio) - retorna um valor aproximado de graus de acordo com o ngulo medido em raios.

public class Hipotenusa {


public static void main(String[] args) {
double ponto1 = 30;
double ponto2 = 40;
System.out.println("A distancia entre o "
+ ponto1 + " e o " + ponto2 + " "
+ Math.hypot(ponto1, ponto2));
}
}

Exemplo 9 - System.Math: Trigonometria

Pg.: 51/137
Prof. Daniel Oliveira

Nmeros Randmicos
O mtodo random() retorna um valor double em 0.0 e 1.0 (deve-se levar em contar que no uma quantidade
infinita de nmeros, uma vez que o double tem um limite de casas decimais. Para conseguirmos um valor limite
ou um alcance (comumente chamado de range) delimitado, devemos fazer pequenas operaes matemticas.
Essas operaes so simples e podem ser resumidas da seguinte maneira.
O limite inferior, ou valor inicial (start value) ser sempre somado ao nmero randmico.
O limite superior, ou alcance (range) ser sempre o limite superior subtrado o limite inferior e
depois multiplicado ao nmero randmico.

Por exemplo, se quisermos que um nmero randmico sempre fique entre 5 e 10, procederamos da seguinte
maneira:
1. O menor nmero possvel 5, portanto ele ser nosso start value ou limite inferior.
2. O maior nmero possvel 10, ento 10 ser nosso limite superior.
3. Como temos ambos os limites (inferior e superior) devemos criar um alcance (range). Para obtermos
isso, subtrairemos o limite superior com o limite inferior (10-5=5).

public class Exemplo {


public static void main(String[] args) {
int limiteInferior = 5;
int limiteSuperior = 10;
int alcance = limiteSuperior - limiteInferior;
double nrRandomico = Math.random();
System.out.println("O nmero randmico escolhido entre 5 e 10 foi "
+ Math.round(limiteInferior + nrRandomico * alcance));
}
}

Exemplo 10 - System.Math: Nmeros randmicos

Compatibilidade entre tipos

muito comum pensarmos que todos os tipos numricos so iguais no sentido do que armazenar. Como foi
visto anteriormente, cada tipo numrico tem um limite de informao que pode ser armazenada, isto devido
ao fato de as variveis so posies de memria do computador e a mesma limitada.

Tendo isto em conta, se tenho um tipo de dados inteiro simples (int) o espao de memria separado para
armazenar este valor pode ser utilizado para armazenar valores do tipo short e byte, pois, requerem menos
espao de memria do que o int. Mas, no
poderamos armazenar um tipo long dentro do
espao reservado para um int ou qualquer tipo
menor do que o mesmo. Uma boa dica sempre
se perguntar se o tipo cabe dentro do outro.

No exemplo ao lado (e isto j foi usado


anteriormente), na declarao da varivel j, usei
o valor 10L para inicializar a varivel. Bem, o
significa isto?

Para constantes numricas ou literais (o valor


Figura 51 - Exemplos de compatibilidade de tipos
constante um valor que no se altera e valores
Pg.: 52/137
Prof. Daniel Oliveira

informados diretamente no cdigo fonte um exemplo, s ser alterado se o cdigo fonte for alterado)
precisamos indicar ao compilador qual tipo de dado dever ser utilizado para armazenar o valor na memria
(lembre-se que os tipos de dados determinam entre outras coisas o espao de memria reservado para o valor).
Por padro toda constante inteira (nmeros inteiros) so armazenados com int e todos os nmeros com partes
fracionrias so armazenadas com double.

Para alterarmos este comportamento padro do compilador podemos utilizar sufixos pr-definidos, na
linguagem para isto:

Constantes inteiras l ou L ex.: 32I ou 32L


Float: f ou F. Ex.: 32f ou 32F
Double: d ou D. Ex.: 32d ou 32D

O uso de sufixos muito til em relao a valores que so fixos ou escritos diretamente no cdigo. Mas, quando
estamos trabalhando com variveis?

A forma mais usual, colocar na frente da varivel o nome do tipo (entre parnteses) para o qual deseja-se
converter o contedo da varivel :
public class Exemplo {
public static void main(String[] args) {
double d = 3.213;
float f;

f = d; // Erro
f = (float)d; // OK
}
}

Exemplo 11 - Cast
Este tipo de converso tambm conhecido como sendo converso explcita, ou seja, aquela em que
informamos de forma explcita qual converso o compilador dever realizar. Existe tambm a chamada
converso implcita, aquela aonde o compilador realiza a converso da melhor forma possvel.

Converses implcitas ocorrem principalmente quando existe alto nvel de compatibilidade entre os tipos. Por
exemplo, ao se atribuir uma varivel inteira de 32bits a uma varivel inteira longa de 64 bits aplicando a regra
de que um tipo cabe dentro do outro fica mais fcil para entender que se for o inverso teremos que fazer uma
converso explcita.

public class Exemplo {


public static void main(String[] args) {
int i = 10;
long j;

j = i; //OK
i = j; //Erro
i = (int)j; //OK - Apenas de contedo de J for inteiro de 32 Bits
}
}

Exemplo 12 - Cast

Dica: Os tipos em Java e o comportamento da linguagem em relao pode gerar uma situao inusitada quando
trabalhamos com a diviso numrica. Se, em uma operao de diviso ambos os operandos forem inteiros o
resultado da operao tambm ser inteiro, ou seja, ocorrer um truncamento do nmero se a diviso no for
Pg.: 53/137
Prof. Daniel Oliveira

inteira. Mas, se os operandos forem de tipos diferentes o resultado ser do tipo de maior preciso ou tamanho.
Veja o exemplo:

public class Exemplo {


public static void main(String[] args) {
int i = 1;
int j = 2;

System.out.println(i / j); // Resultado = 0


System.out.println(i / (double)j); // Resultado = 0,5

}
}

Exemplo 13 - Exemplo de cast para operao de diviso

Quando trabalhamos com tipos alfanumricos, como por exemplo: String, podemos ter a seguinte situao:

O operador + quando est envolvido com


public class Exemplo {
public static void main(String[] args) { tipo alfanumrico realiza uma operao de
String str = "1001"; concatenao e no de adio. Ento, ao se
str = str + 5;
somar um valor numrico o que feito: o
System.out.println(str); // Sada: 10015
} valor numrico sofre uma converso
} implcita para um valor alfanumrico (o
inteiro 5 vira o caractere 5 no exemplo) e
Exemplo 14 - Converso de tipo para string
ento realiza a concatenao.

E o inverso, possvel utilizar o contedo de uma varivel string como sendo um valor numrico (isto ser muito
utilizado quando estivermos desenvolvimento programas que obtenham valores digitados pelo usurio)? Sim,
possvel, mas nem sempre possvel a converso direta para isto teremos que utilizar algumas funes:

public class Exemplo {


public static void main(String[] args) {
String str = "100";
System.out.println( Byte.parseByte(str) );
System.out.println( Integer.parseInt(str) );
System.out.println( Long.parseLong(str) );
System.out.println( Float.parseFloat(str) );
System.out.println( Double.parseDouble(str) );

}
}

Exemplo 15 - Exemplo de mtodos para converso de string para tipos numricos

O que ocorreria se o contedo da varivel str for incompatvel em alguma converso. Nesse caso teremos um
erro em tempo de execuo e o programa ir ser abortado - Figura 52. Este tipo de erro chamado de exceo
ou exception (no escopo desse texto abordar este assunto isto est ficando muito frustrante!), na Figura
53, temos um exemplo de como tratar de forma elegante este tipos de erros (existe muito mais contedo para
isto, mas, agora no o momento).

Pg.: 54/137
Prof. Daniel Oliveira

Forma bem geral, e simples, todos os erros que ocorram dentro de um bloco try (tentativa) capturada por um
bloco catch e o erro informado atravs de um objeto do tipo Exception.

Figura 52 - Exemplo de falha entre converso de tipos

Figura 53 - Exemplo de tratamento de excees

Pg.: 55/137
Prof. Daniel Oliveira

Interagindo com usurios

Uma parte importante dos programas entrada e sada de dados. Como pode ser percebido nos exemplo
anteriores o principal comando para sada (na tela de console) o: println este comando est dentro da classe
out que est no pacote System, por isso o escrevemos dessa forma: System.out.println. Como a documentao
do Java (ORACLE,2012) diz: fluxo padro de sada. Ficando aberto e pronto para o uso. Normalmente utilizando
em aplicaes padres.

Como o prprio nome deixa claro, a classe out responsvel por rotinas de sada, no nosso caso (o que ir
abordar todo este texto) iremos utilizar as rotinas de sada no console. No Java podemos construir aplicativos
de janela, applets (para pginas html) e Web, mas, nosso foco so aplicativos de console.

Quais so as principais rotinas para impresso na console:

print(<<texto>>): Imprime o texto sem gerar um nova linha. Um prximo comando print ir continuar
da posio de onde este parou.
println(<<texto>>): Imprime o texto e gera uma quebra de linha. Um prximo comando print ou println
ir continuar da nova linha.

public class Exemplo {


public static void main(String[] args) {
System.out.println("Sada Padro ");
System.out.print("usando ");
System.out.print("o mtodo ");
System.out.print("print");
}
}

Exemplo 16 - Exemplo de sada para console

Tanto para o mtodo print ou println podemos passar qualquer tipo de varivel que o mesmo ir realizar a
converso para o tipo String e exibir na sada.
public class Exemplo{
public static void main(String[] args) {
int inteiro = 200;
float decimal = 0.5f;
char letra = 'J';
System.out.println ("Valor:" + inteiro);
System.out.println ("Valor:" + decimal);
System.out.println ("Valor:" + letra);
}
}

Exemplo 17 - Exemplo de sada para console

Podemos ainda informar (como parte do texto a ser exibido) caracteres especiais que sero interpretados pelos
comandos print e println da seguinte forma:

\n - pula uma linha

Pg.: 56/137
Prof. Daniel Oliveira

\t - cria uma tabulao (o mesmo que apertar a tecla TAB)


\b - retorna o cursor um caractere
\r - retorna o cursor ao incio da linha

public class Exemplo{


public static void main(String[] args) {
System.out.print("Algoritmos I:\t"); // cria uma tabulao
System.out.print("prof. Daniel Oliveira\n"); //pula uma linha
System.out.print("Sinistro!\r"); // cursor no incio da linha
}
}

Exemplo 18 - Uso de caracteres de escape para sada no console

possvel ainda aplicar algum tipo de formatao na sada de valores numricos, para isto deve ser utilizado o
mtodo printf imprimir formatando. Este mtodo utiliza do que chamamos de placeholders ou espaos
reservados. Veja o exemplo:

System.out.printf("%d %(d %+d %05d\n", 3, -3, 3, 3);


System.out.printf("Formato Padro de ponto flutuante: %f\n", 1234567.123);
System.out.printf("Ponto Flutuante com virgulas: %,f\n", 1234567.123);
System.out.printf("Formato padro de ponto flutuante negativo: %,f\n", -1234567.123);
System.out.printf("Formatao de ponto flutuante negativo: %,(f\n", -1234567.123);
System.out.printf("Alinhando valores positivos e negativos:\n");
System.out.printf("% ,.2f\n% ,.2f\n", 1234567.123, -1234567.123);
Exemplo 19 - Uso do comando printf

O primeiro parmetro passado para a funo uma string, dentro dessa string temos marcadores especiais que
so inicializados com caractere %, para cada marcador desse deve haver uma varivel ou valor (listado aps a
string) para ser colocado nessa posio (placeholder).

Os placeholders tem o seguinte formato: %[flags][width][.precision]conversion

Flags:
o '-' : justificado a esquerda
o '^' : caixa alata
o '+' : valor sinalizado
o '0' : fora zeros a direita ou esquerda
Width: comprimento do nmero
Precision: preciso do nmero casas decimais
Conversion:
o 'd': inteiro
o 'o': octal
o 'x': hexadecimal
o 'f': notao decimal para ponto-flutuante
o 'g': notao cientfica
o 'a': hexadecimal com expoentes
o 'c': caractere
o 's': string

Pg.: 57/137
Prof. Daniel Oliveira

o 'b': valor lgico "true" ou "false".

Mais um exemplo utilizando o printf como sada:

int a = 5, b = 15, c = 255;


double x = 27.5, y = 33.75;

System.out.printf("a = %d b = %x c = %o\n", a, b, c);


System.out.printf("x = %2$f y = %1$g\n", x, y);
System.out.printf("a = %3$d b = %1$x c = %2$o\n", a, b, c);

Exemplo 20 - Mais um exemplo de uso do printf

Alm da sada precisamos de uma forma de obter as informaes dos usurios. Para isto vamos trabalhar com
uma classe especial que Scanner. Na Figura 54, temos um exemplo da utilizao da classe Scanner. Como esta
classe est definida dentro do pacote util que por sua vez est definido no pacote java, necessrio sempre a
introduo da declarao import como na linha 1.

Na linha 5 temos a construo padro de uma


varivel scan que do tipo Scanner (classes
definem novos tipos!) e em seguida temos um
novo comando: new de forma bem direta, este
comando usado apenas com classes para criar os
Figura 54 - Exemplo da classe Scanner objetos (vou parar por aqui!), a linha 5 ser
utilizada como uma receita de bolo e sempre a
construiremos dessa forma.

Na linha 7 temos a declarao de uma varvel do tipo String


(varivel Nome) que recebe o resultado da rotina next. Ao
executar esta linha de cdigo ser exibido um cursor no console
e o usurio poder digitar o que desejar at que pressione a tecla
ENTER ver Figura 55.

Figura 55 - Uso do mtodo next da classe Scanner


Quando se digita o Enter, todo os texto digitado passado para
a varivel Nome e na linha 8 o seu contedo impresso na no
console .

Figura 56 - Uso da classe Scanner

Pg.: 58/137
Prof. Daniel Oliveira

E quando necessitarmos de obter valores numricos? Classe Scanner tem rotina para isto, obtendo as
informaes digitadas e tenta converter para o tipo especifico que necessitamos, caso no seja possvel um erro
ir ocorrer (uma exceo).
import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

System.out.print("Informe seu nome:");


String Nome = scan.nextLine(); //Obter uma frase inteira

System.out.print("Sua idade:");
int Idade = scan.nextInt(); //Obter um valor inteiro

System.out.print("Sua altura:");
double altura = scan.nextDouble(); //Obter um double

System.out.println(Nome);
System.out.println(Idade);
System.out.println(altura);

}
}

Exemplo 21 - Exemplo das rotinas da classe Scanner para obter dados numricos

Alm das rotinas acima, temos ainda outros para os tipos byte, long. Veja no Anexo B, informaes sobre como
utilizar JOptionPane.

Pg.: 59/137
Prof. Daniel Oliveira

Exerccios

1) Faa um programa que leia trs valores inteiros, e calcule e exiba a sua mdia ponderada. A primeira nota
tem peso 2, a segunda tem peso 3 e a terceira tem peso 5.

2) Realizarei uma viagem de vrios dias em meu automvel, e gostaria de saber a quilometragem mdia por
litro de gasolina. Para isto, anotarei a quilometragem no velocmetro ao sair de viagem, e depois ao chegar.
Tambm vou somar toda a gasolina que comprar para o carro. Voc poderia fazer um programa que me
desse, com estes dados, quantos km fiz, em mdia, por litro de gasolina?

3) Faa um programa que leia o nome de um piloto, uma distncia percorrida em km e o tempo que o piloto
levou para percorr-la (em horas). O programa deve calcular a velocidade mdia em km/h, e exibir a
seguinte frase: A velocidade mdia de XX foi YY km/h, onde XX o nome do piloto, e YY a velocidade
mdia.
4) Em uma pizzaria, cada refrigerante custa R$1,80 e uma pizza mista grande custa R$25,00 mais R$ 3,50 por
tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai pizzaria e pede uma
determinada quantidade de refrigerantes e uma pizza grande com uma determinada quantidade de
coberturas. Faca um programa que calcula a conta e, sabendo que a ser informada a quantidade de
pessoas, quanto que cada um deve pagar. Lembre-se dos 10% do garom.

5) A converso de graus Fahrenheit para Celsius obtida pela frmula abaixo. Faa um algoritmo que leia um
valor em graus Centgrados e imprima seu correspondente em graus Fahrenheit.

6) Fazer um programa que leia um nmero inteiro e mostre o seu triplo, sua metade, a sua raiz
cbica, e por fim, o nmero elevado a potncia fracionria 2/3.

7) Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer no plano,
P(x1,y1) e P(x2,y2), escreva a distncia entre eles. A frmula que efetua tal clculo :

8) Elaborar um algoritmo que l 2 valores a e b e os escreve com a mensagem: "So mltiplos" ou


"No so mltiplos".

9) Desenvolva um algoritmo que receba o valor de raio e calcule a rea e comprimento da


circunferncia

10) Faa um programa que receba um valor que o valor pago, um segundo valor que o preo do
produto e retorne o troco a ser dado.

11) Faa um programa que receba o valor do quilo de um produto e a quantidade de quilos do produto
consumida calculando o valor final a ser pago.

Pg.: 60/137
Prof. Daniel Oliveira

Estrutura condicional

Normalmente qualquer algoritmo apresenta algum tipo de condio para a sua execuo, por exemplo, vamos
examinar o fluxograma da Figura 57 - Estrutura condicional aonde temos uma rotina que ir calcular a raiz real
Clculo de Raiz Real
de um nmero. No podemos calcular a raiz real de
qualquer nmero, necessrio verificar se o
nmero informado positivo ou no.

Dependendo do resultado da pergunta dentro do


Obter valor
losango o nosso algoritmo tomar uma caminho ou
outro.

Estruturas condicionais impem caminhos


Sim >= 0 ? No
alternativos aos algoritmos, mas, sempre
dependente de uma condio lgica: verdadeiro ou
falso.
Exibe mensagem de

Calcula raiz
erro Iremos utilizar estruturas condicionais sempre
quadrada real quando for necessrio realizar um ao ou no
realizar de acordo com um teste de condies que
resultaro em verdadeiro ou falso.
Fim
Exibe resultado

Figura 57 - Estrutura condicional

A instruo IF

No Java a estrutura condicional mais simples utiliza apenas um comando if (se em ingls - Exemplo 22).

public class Exemplo{


public static void main(String[] args) {

int i = 5;

if (i == 5)
{
System.out.println("Valor igual a 5.");
}

}
}

Exemplo 22 - Estrutura IF clssica

Nesse exemplo temos uma estrutura clssica do comando if. O teste lgico realizado se o contedo da varivel
i igual a cinco: i == 5. O operador relacional para teste de igualdade no Java (e em vrias linguagens baseadas
no C) o chamado double equal ou igual duplo (==) e no o igual simples (=) que o operador de atribuio.
Pg.: 61/137
Prof. Daniel Oliveira

O teste lgico do if vem logo em seguida ao comando e entre parnteses, depois do teste lgico temos um bloco
de cdigo, e, como em Java todo bloco de cdigo iniciado com um abre chaves { e finalizado por um fecha
chaves }. Repararam que no ; no comando if?

Na realidade o comando if formado pelo teste lgico e caso este teste for verdadeiro uma instruo
executada. Sendo que essa instruo pode ser apenas uma nica linha de cdigo (nesse caso o conjunto de {}
opcional) ou bode ser um bloco com vrias linhas de cdigo, com inclusive outras instrues condicionais.

public class Exemplo{


public static void main(String[] args) {

int i = 5;

if (i == 5)
System.out.println("Valor igual a 5.");
}
}
Exemplo 23 - Exemplo do IF com apenas uma linha

Resumindo, se o teste lgico do comando if for verdadeiro, ento a instruo seguida ao comando ser realizada.
Podendo esta instruo ser apenas uma linha ou um bloco (delimitado pelo para de {}) de cdigo.

Comparao de strings

Vimos que o operador de teste de igualdade o ==, este operador poder ser utilizado para todos os tipos de
dados vistos at agora com exceo da String. Deve-se ser usado o mtodo equals para realizar a comparao
entre strings, veja o exemplo abaixo:

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

System.out.print("Informe uma cor");


String Cor = scan.next();

if (Cor.equals("azul"))
{
System.out.print("Minha cor preferida tambm o azul.");
}

}
}

Exemplo 24 - Uso de equals para comparao de strings

No exemplo anterior comparamos o contedo da varivel Cor com o valor azul. O mtodo equals sensvel a
caixa, ou seja, ele diferencia maiscula de minsculas. Para comparaes no sensveis a caixa deve ser usado o
mtodo equalsIgnoreCase.

Pg.: 62/137
Prof. Daniel Oliveira

import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

System.out.print("Informe uma cor");


String Cor = scan.next();

if (Cor.equalsIgnoreCase("azul"))
{
System.out.print("Minha cor preferida tambm o azul.");
}

}
}

Exemplo 25 - Exemplo de equalsIgnoreCase para comparao de string

A instruo Else

Bem, e se a condio de teste da instruo if for falsa? Caso seja necessrio uma ao nessa situao existe a
declarao else (seno em ingls). Se a instruo else for usada em conjunto com a instruo if, a linha de
comando ou cdigo de bloco (aqui vale os mesmos parmetros da instruo if) ser executada se a condio for
falsa.
import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

System.out.print("Informe uma cor");


String Cor = scan.next();

if (Cor.equalsIgnoreCase("azul"))
{
System.out.print("Minha cor preferida tambm o azul.");
}
else
{
System.out.print("A cor escolhida no foi o azul!");
}

}
}

Exemplo 26 - Exemplo de uso do Else

A instruo else sempre dever ser utilizada em conjunto da instruo if. Mas, as instruo if, pode ser
utilizada sem a instruo else.

Pg.: 63/137
Prof. Daniel Oliveira

Aninhando a instruo if/else

Aps uma instruo if ou else podemos ter uma linha de comando ou um bloco de comandos. Como as
instrues if so tambm comandos, podemos ter uma instruo seguida da outra, veja o exemplo.

import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Informe um inteiro entre 1 e 3:");
int Numero = scan.nextInt();

if (Numero == 1)
System.out.println("Voc informou o nmero 1.");
else if (Numero == 2)
System.out.println("Voc informou o nmero 2.");
else if (Numero == 3)
System.out.println("Voc informou o nmero 3.");
else
System.out.println("Nmero invlido.");
}
}

Exemplo 27 - Exemplo e if/else aninhados

Usando operadores AND e OR

O expresso de teste da instruo if pode ser simples (como foi visto nos exemplos anteriores) ou pode ser
resultado de uma expresso bem mais complexa. Para a construo de expresses lgicas com mais de um
termos temos que usar os chamados conectivos lgicos:

Operador AND = &&


Operador OR = ||

Vamos imaginar um algoritmo que receba um nmero inteiro e verifica se o mesmo maior ou igual a 10 e
menor ou igual a 100. Como ficaria a expresso para este teste?

Figura 58 - Exemplo de expresso lgica com AND

Pg.: 64/137
Prof. Daniel Oliveira

Figura 59 - Exemplo de expresses relacionais com AND

Vamos alterar o algoritmo para indicar se o nmero indicado igual a 10 ou 100:

Figura 60 - Exemplo de operador OR

Pg.: 65/137
Prof. Daniel Oliveira

Abaixo temos a tabela da verdade para o operador AND:

Figura 61 - Tabela da verdade do operador AND

Abaixo temos a tabela da verdade para o operador OR:

Figura 62 - Tabela da verdade do operador OR

Pg.: 66/137
Prof. Daniel Oliveira

Declarao switch/case

O uso de if/else encadeados pode ser bem confuso para se manter o cdigo fonte. Por exemplo, vamos
desenvolver um algoritmo que simule um menu de uma aplicao:

import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Menu");
System.out.println("\t 1 - Opo 1");
System.out.println("\t 2 - Opo 2");
System.out.println("\t 3 - Opo 3");
System.out.println("\t 4 - Opo 4");
System.out.print("Informe uma opo:");
int opcao = scan.nextInt();

if (opcao == 1){
System.out.print("Opo 1 selecionada");
}
else
{
if (opcao == 2)
{
System.out.print("Opo 2 selecionada");
}
else
{
if (opcao == 3)
{
System.out.print("Opo 3 selecionada");
}
else
{
if (opcao == 4)
{
System.out.print("Opo 4 selecionada");
}
else
{
System.out.print("Operao invlida");
}
}
}
}
}
}

Exemplo 28 - Exemplo de uso de IF / Else encadeados

No exemplo acima fcil notar que medida que a quantidade de opes aumenta, mais intricado e difcil de
entender o cdigo fica. Para situaes como esta, indicado o uso da estrutura switch/case. Nessa estrutura

Pg.: 67/137
Prof. Daniel Oliveira

um teste de igualdade realizado em uma varivel (switch) e para da possvel valor dessa varivel (case)
realizado uma ao.

Alm das palavras chaves switch e case, ainda compe esta estrutura:

break usado dentro do bloco de cdigo do case. Este comando indica que o processamento do switch
deve ser interrompido e a execuo do cdigo dever continuar a partir da primeira linha aps o final
do switch. Se, por exemplo, omitirmos um break, o comando case imediatamente aps ser executado
(mesmo que o contedo da varivel no execute este case).

default este seria o comando else dessa estrutura e opcional. Se o valor da varivel de teste do switch
no corresponder a nenhum case, ento, se houver um default definido, o cdigo dentro do default
executado.

import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Menu");
System.out.println("\t 1 - Opo 1");
System.out.println("\t 2 - Opo 2");
System.out.println("\t 3 - Opo 3");
System.out.println("\t 4 - Opo 4");
System.out.print("Informe uma opo:");
int opcao = scan.nextInt();

switch(opcao)
{
case 1:
System.out.print("Opo 1 selecionada.");
break;
case 2:
System.out.print("Opo 2 selecionada.");
break;
case 3:
System.out.print("Opo 3 selecionada.");
break;
case 4:
System.out.print("Opo 4 selecionada.");
break;
default:
System.out.print("Opo invlida!");
}
}
}

Exemplo 29 - Exemplo de uso do switch / case

Duas coisas tem que ser consideradas ao usar o switch:

1) O switch trabalha apenas com os tipos primitivos: int, short, byte e char
2) No possvel o uso de expresses booleanas (lgicas) no switch.

No Exemplo 30, temos um algoritmo mais complexo que para determinar a quantidade de dias do ms,
levando-se em conta se o ano bissexto ou no.

Pg.: 68/137
Prof. Daniel Oliveira

import java.util.*;

public class Exemplo{


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

System.out.print("Informe um ms:");
int mes = scan.nextInt();
System.out.print("Informe um ano:");
int ano = scan.nextInt();

int numDays = 0;

switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || (ano % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Ms invlidos.");
break;
}
System.out.println("Nmero de dias = " + numDays);
}
}

Exemplo 30 - Uso do switch/case mais avanado

Pg.: 69/137
Prof. Daniel Oliveira

Exerccios

1. Faa um programa que verifique se um nmero impar.

2. Faa um programa que receba o valor do salrio de uma pessoa e o valor de um financiamento
pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salrio da pessoa, o programa dever
escrever "Financiamento Concedido"; seno, escrever "Financiamento Negado". Independente de
conceder ou no o financiamento, o programa escrever depois a frase "Obrigado por nos consultar."

3. Dois carros percorreram diferentes distncias em diferentes tempos. Sabendo que a velocidade mdia
a razo entre a distncia percorrida e o tempo levado para percorr-la, faa um programa para ler as
distncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior
velocidade mdia.

4. Faa um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova, e
seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual).

5. Leia um nome e duas notas dadas a um aluno e imprima: nome, mdia e aprovado, reprovado ou
recuperao, de acordo com as regras abaixo:
Reprovado, se mdia maior igual a zero e menor que 5;
Recuperao, se mdia maior igual a 5 e menor que 7;
Aprovado, se mdia maior igual a 7 e menor igual a 10.

6. Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo que calcule seu
peso ideal, utilizando as seguintes formulas:
Para homens: (72.7 * Altura) - 58
Para mulheres: (62.1 * Altura) - 44.7

7. Leia um salrio bruto e imprima o salrio bruto, o desconto e salrio lquido, aps os descontos do
imposto de renda, que ser calculado da seguinte maneira:

Salrio Imposto Deduo


At 1.372,81 Isento
Acima de 1.372,81 at 2.743,25 15% 205,92
Acima de 2.743,25 27,5% 548,82

Pg.: 70/137
Prof. Daniel Oliveira

8. A loja Constri em Partes produz dois tipos de hastes: cobre e alumnio. Cada haste de cobre vendida
por R$ 2,00, e cada haste de alumnio vendida por R$ 4,00. O desconto dado depender da quantidade
de hastes compradas, conforme tabela abaixo. Fazer um algoritmo para ler a quantidade comprada de
cada tipo de haste e imprima o total pago.

Quantidade comprada (duas hastes juntas) Percentual de descontos


Abaixo de 5 0
Entre 5 e 15 10
Entre 16 e 20 15
Acima de 20 20

9. Uma empresa de energia eltrica trabalha com 3 tipos de consumidores: I Industrial; C Comercial; R
Residencial. Fazer um algoritmo para ler o tipo de consumidor (I, C ou R), a quantidade de energia
consumida, e calcular e imprimir qual ser o valor pago. Para calcular o valor pago, verificar a tabela
abaixo.

Tipo de Consumidor Clculo


Industrial 0.68 Consumo + 34
Comercial 0.37 Consumo + 45
Residencial 0.77 Consumo 22

10. Faa um programa que receba 2 valores e retorne o maior entre eles.

11. Faa um programa que receba 4 valores e retorne o menor entre eles.

12. Faa um programa que receba 3 valores que representaro os lados de um tringulo e verifique se os
valores formam um tringulo e classifique esse tringulo como:
a. Equiltero (3 lados iguais);
b. Issceles (2 lados iguais);
c. Escaleno (3 lados diferentes).

Lembre-se que: Em qualquer tringulo, tem-se a<b+c, b<a+c e c<a+b.

13. Utilize a estrutura if para fazer um programa que retorne o nome de um produto a partir do cdigo do
mesmo. Considere os seguintes cdigos:

001: Parafuso;
002: Porca;
003: Prego;
Para qualquer outro cdigo indica: Diversos.

Pg.: 71/137
Prof. Daniel Oliveira

14. Um banco conceder um crdito especial aos seus clientes, varivel com o saldo mdio no ltimo ano.
Faa um algoritmo que leia o saldo mdio de um cliente e calcule o valor do crdito de acordo com a
tabela abaixo. Mostre uma mensagem informando o saldo mdio e o valor do crdito.

Saldo mdio Percentual

De 0 a 200 Nenhum crdito

De 201 a 400 20% do valor do saldo mdio

De 401 a 600 30% do valor do saldo mdio

Acima de 601 40% do valor do saldo mdio

15. Um usurio deseja um algoritmo onde possa escolher que tipo de mdia deseja calcular a partir de trs
notas. Faa um algoritmo que leia as notas, a opo escolhida pelo usurio e calcule a mdia.
a. Aritmtica
b. Ponderada com pesos 3,3,4
3
c. Harmnica: = 1 1 1
( + + )
1 2 3

16. Um vendedor necessita de um algoritmo que calcule o preo total devido por um cliente. O algoritmo
deve receber o cdigo de um produto e a quantidade comprada e calcular o preo total, usando a tabela
abaixo.

Cdigo do Produto Preo unitrio

1001 5,32

1324 6,45

6548 2,37

0987 5,32

7623 6,45

17. Escrever um algoritmo que l a hora de incio de um jogo e a hora do final do jogo (considerando apenas
horas inteiras) e calcula a durao do jogo em horas, 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.

Pg.: 72/137
Prof. Daniel Oliveira

Estruturas de repetio

Em muitas situaes necessrio que nossos algoritmos repitam uma ou mais vezes um conjunto de instrues.
Por exemplo, o desenvolvimento de um algoritmo que ir ordenar uma lista de nmeros inteiros. Ser necessrio
percorrer vrios elementos dessa lista vrias vezes at finalmente a mesma esteja ordenada da forma como
queremos. Chamamos de iterao a cada vez que a estrutura de repetio executada.

As estruturas de repetio so formadas por duas partes lgicas: condio(expresso lgica) e o corpo (conjunto
de cdigo que executado a cada iterao) do loop. A condio testada a cada iterao para verificar se
necessria a execuo do cdigo contido no corpo do loop ou no.

Os loops podem ser categorizados da seguinte forma:

Indeterminados
Determinados

Nos loops determinados possvel saber quantas vezes ocorrer repetio. J, os loops indeterminados a sua
execuo realizada enquanto uma determinada condio for verdadeira.

Os loops indeterminados podem ser classificados de duas formas:

Pr-testados
Ps-testados

Os loops pr-testados (ver Figura 63) verificam a condio antes de qualquer coisa, desta forma o cdigo contido
dentro do corpo do loop poder nunca ser executado caso a condio resultar em um valor falso.

Condio Executa o corpo do


Sim
verdadeira ? loop

No

Figura 63 - Loop pr-testados

Pg.: 73/137
Prof. Daniel Oliveira

Os loops ps-testados (Figura 64) verificam a condio aps a execuo do cdigo contido no corpo do loop.
Assim, nesse tipo de loop o corpo do loop executado pelo menos uma vez.

Executa o corpo do
loop

Sim

Condio
verdadeira ?

No

Figura 64 - Loop ps-testado

Loop While

Este um tipo de loop do tipo pr-testado indeterminado, a sua estrutura bsica :

while(<Condio lgica>)
{
///Comandos
}
Exemplo 31 - Estrutura do Loop While

O termo while vem do ingls que traduzido enquanto. Ou seja, enquanto uma determinada condio for
verdadeira execute o corpo do loop.
public class Exemplo{
public static void main(String[] args) {
int x= 10;

while( x < 20 ){
System.out.print("x : " + x );
x++;
System.out.print("\n");
}
}
}
Exemplo 32 - Exemplo do loop while

Pg.: 74/137
Prof. Daniel Oliveira

Analisando o Exemplo 32, temos um cdigo que ir imprimir na tela os valores da varivel x de 10 at 19 (Por
que no 20? Veja a condio de teste do loop.).

Dica: Loops indeterminados tem uma caracterstica que pode ser perigosa, eles podem simplesmente nunca
parar e entrar no que chamamos de loop infinito, bastando para isto que a condio de teste de parada sempre
seja verdadeira. Se, no exemplo anterior a linha de cdigo que incrementa a varivel x por omitida o loop nunca
ir parar.

Dica: Alm do teste de parada retornar um valor falso, podemos realizar uma parada forada da execuo do
loop. Bastando para isto utilizar o comando break dentro do corpo do loop. Ao ser executado este comando
dentro do corpo do loop a execuo do loop para imediatamente e o a primeira linha imediatamente aps o
loop executada. Ver Exemplo 33.

public class Exemplo{


public static void main(String[] args) {
int x= 10;

while( x < 20 ){
System.out.print("x : " + x );
x++;

if (x % 2 == 0 && x >= 12)


break;

System.out.print("\n");
}
}
}
Exemplo 33 - Exemplo do uso do comando break dentro de um loop

Qual seria o resultado da execuo do exemplo anterior?

Loop Do...While

No Exemplo 34, temos a estrutura desse loop. Este um loop indeterminado (j vimos anteriormente qual o
significado desse termo) e ps-testado.

do
{
//Comandos
}while(<Condio lgica>);
Exemplo 34 - Estrutura do Loop Do...While

Se traduzirmos do ingls as palavras Do e While temos: Faa e Enquanto. Faa alguma coisa (o cdigo dentro
do corpo do loop) enquanto alguma coisa for verdadeira (a condio lgica).

Pg.: 75/137
Prof. Daniel Oliveira

fcil notar que nesse loop que o cdigo no seu interior executado pelo menos uma vez. Este tipo de loop
muito til em situaes aonde queremos garantir que o cdigo no interior do loop seja executado pelo menos
uma vez.

public class Exemplo{


public static void main(String[] args) {
int x= 10;
do{
System.out.print("x : " + x );
x++;
System.out.print("\n");
}while( x < 20 );
}
}
Exemplo 35 - Exemplo do Loop Do..While

No Exemplo 35, temos um cdigo que ir imprimir nmeros de 10 a 19 no console. Este exemplo faz a mesma
coisa que o Exemplo 32.

Dica: Na realidade tudo que fazemos com o loop while podemos fazer com loop do...while e vice versa.

Vamos analisar um exemplo um pouco mais complexo (ver Exemplo 36). Aqui temos um cdigo que ir conter
quantos inteiros maiores do que zero o usurio informou.

1 import java.util.*;

2 public class Exemplo{


3 public static void main(String[] args) {
4 int conta = 0,valor;
5 Scanner scan = new Scanner(System.in);

6 do{
System.out.print("Informe um inteiro positivo e zero para encerrar:");
valor = scan.nextInt();

if (valor > 0)
{
conta++;
}

7 }while( valor != 0 );

8 System.out.print("Voc informou " + conta + " nmeros.");


9 }
10 }

Exemplo 36 - Uso do loop Do..While

Pg.: 76/137
Prof. Daniel Oliveira

A execuo do loop encerrada quando o usurio informa o valor zero. (linha 6). Ainda nesse exemplo vamos
analisar o seguinte:

1. O que ocorreria se a declarao da varivel conta fosse feita dentro do corpo do loop?
2. Por que foi necessrio inicializar a varivel conta para zero?
3. O que ocorrer se for informado um nmero inteiro negativo?

Vamos reescrever o cdigo do exemplo anterior utilizando agora o loop while:

import java.util.*;

public class Exemplo{


public static void main(String[] args) {
int conta = 0,valor = 1;
Scanner scan = new Scanner(System.in);

while ( valor != 0)
{
System.out.print("Informe um inteiro positivo e zero para encerrar:");
valor = scan.nextInt();

if (valor > 0)
{
conta++;
}

System.out.print("Voc informou " + conta + " nmeros.");


}
}

Exemplo 37 - Exemplo do loop do..while com loop while

Quais so as diferenas entre os dois exemplos?

Loop For

At agora vimos loops categorizados como indeterminados, j este o loop for tem a seguinte estrutura:

for(inicializao; Expresso lgica; atualizao)


{
//Comandos
}

A estrutura desse loop bem diferente dos demais, aqui temos uma varivel de controle do loop que dever
ser inicializada, a cada iterao do loop ser feito um teste lgico com ela e tambm a cada iterao esta varivel
ir sofrer uma alterao do seu valor. Se, o teste lgico resultar em um valor falso o loop encerrado.

Pg.: 77/137
Prof. Daniel Oliveira

public class Exemplo{


public static void main(String[] args) {
for(int x = 10; x < 20; x++){
System.out.print("x : " + x );
System.out.print("\n");
}

}
}
Exemplo 38 - Exemplo do loop FOR

No Exemplo 38, temos um cdigo que ir imprimir os valores de 10 a 19. Podemos tambm utilizar a estrutura
do loop for para gerar contagens inversas, partindo de um valor superior ir decrementando a varivel de controle
at atingir o limite inferior desejado veja Exemplo 39.
for(int i=10;i>=0;i--)
{
System.out.println(i);
}

Exemplo 39 Exemplo do loop FOR descrente

Em todos os exemplos vistos at agora com Loop for, a varivel de controle declarada e inicializada dentro da
declarao do loop, assim, esta varivel s ser visvel dentro do corpo do loop. E, no poder ser acessada
fora do bloco. Mas, nada impede que seja utilizada uma varivel j declarada, reescrevendo o exemplo anterior:

public static void main(String[] args) {


int i;

for(i=10;i>=0;i--)
{
System.out.println(i);
}

System.out.print("A varivel i visivel fora do loop:" + i);

Exemplo 40 - Exemplo de loop for com a varivel de controle declarada fora do loop

Pg.: 78/137
Prof. Daniel Oliveira

Vamos a um exemplo um pouco mais complexo:

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);


int num;
boolean isPrime = true;
System.out.print("Informe um nmero inteiro:");
num = scan.nextInt();

for(int i=2; i < num/2; i++) {


if((num % i) == 0) {
isPrime = false;
break;
}
}

if(isPrime)
System.out.println("Primo");
else
System.out.println("No primo");

Exemplo 41 - Exemplo um pouco mais completo com loop For


fonte: http://www.java-samples.com

Pg.: 79/137
Prof. Daniel Oliveira

Exerccios

1) Construa um algoritmo que calcule o fatorial de um nmero inteiro positivo.

2) Codificar o algoritmo para imprimir os N primeiros nmeros naturais pares

3) A converso de graus Fahrenheit para centgrados obtida pela frmula C = 5/9 (F-32). Escreva um
algoritmo que calcule e escreva uma tabela de graus centgrados em funo de graus Fahrenheit que
variem de 32 a 212 de 1 em 1. A tabela dever ser semelhante mostrada abaixo:
Graus Fahrenheit Graus Celsius
32 0

33 0.6

34 1.1

... ...

212 100

4) Escrever um algoritmo que calcule a mdia obtida por uma turma de "n" alunos na primeira prova
do semestre, onde o valor de n ser informado pelo usurio.
5) Escrever um algoritmo que, dada uma sequncia de valores inteiros e positivos, determine qual a
mdia aritmtica dos valores pares. O valor 0 (zero) indica o trmino dos dados de entrada, ou seja,
o programa termina quando for informado o valor 0(zero).
6) Codifique o algoritmo que leia dois nmeros inteiro e positivo e apresente o resultado do
primeiro nmero elevado ao segundo nmero (exemplo: 24 = 2*2*2*2 = 16). No utilizar o mtodo
pow do package Math.
7) Escrever um algoritmo que l um valor n e outro valor m, e calcula a tabuada de n de 1 at m.
Exemplo: Supor que o usurio informe os seguintes valores: n=8 e m=12. Ento tem-se:
1x8=8
2 x 8 = 16
...
. . .
12 x 8 = 96

8) Fazer um algoritmo para calcular a soma de todos os mltiplos de 7 entre 100 e 500.
9) Faa um algoritmo que imprima os nmeros inteiros decrescentes compreendidos entre 100 e 10.
10) Faa um algoritmo que imprima a tabuada do nmero 5 da seguinte maneira:
5x0=0
5x1=5
5x2=10
...
5x10=50

11) Faa um algoritmo que imprima a soma dos nmeros mpares compreendidos entre 10 e 100.

Pg.: 80/137
Prof. Daniel Oliveira

12) Codificar o programa abaixo, para que determine os valores de y, tal que y = (3+2x+6x)
/(1+9x+16x) para x variando de 1,0 at 5,0 em intervalos de 0,1 unidades

13) Faa um algoritmo que imprima o valor de S da seguinte srie:

1 2 3 4 30
S
60 58 56 54 2

14) Faa um algoritmo que imprima o valor de H da seguinte srie:

1 3 5 7 99
H
1 2 3 4 50

15) Faa um algoritmo que leia um nmero inteiro e positivo N e imprima o valor de S da seguinte srie:

S = 1 + 1/2 + 1/3 + ... + 1/N

16) Faa um algoritmo que imprima a soma dos 20 primeiros termos da serie abaixo, onde o
denominador representa o fatorial do nmero.
100 99 98 97

0! 1! 2! 3!

17) Programa para calcular e imprimir o volume e o raio da esfera com o raio variando de 1 a 10 usando
a estrutura de repetio

18) Escreva um algoritmo para ler 2 valores (se o segundo valor informado for ZERO, deve ser lido
um novo valor, ou seja, para o segundo valor no pode ser aceito o zero exibindo uma
mensagem de erro) e imprimir o resultado da diviso do primeiro pelo segundo.

19) Faa um algoritmo que leia a altura de 10 pessoas e imprima mdia destas alturas. Imprima
tambm quantas alturas maiores que 1.60 e quantas menores que 1.30.

20) Faa um algoritmo que leia os dados de cada empregado: nome, salrio por dia e nmero de dias
trabalhados de uma firma de 10 empregados. Imprima o salrio total a ser pago aos empregados e
a mdia dos salrios.

21) Faa um algoritmo que leia a altura e o sexo de 100 pessoas e imprima:
- Quantos homens e mulheres foram medidas;
- Quantos homens acima de 1,70;
- A mdia das alturas das mulheres.

22) Codifique um algoritmo para determinar o maior nmero em N nmeros diferentes dados.

23) Codifique um algoritmo para calcular e imprimir o menor dentre N valores lidos.
Pg.: 81/137
Prof. Daniel Oliveira

24) Faa um programa de que determinar quais nmeros so primos entre os inteiros 1 e N. Aonde N
ser informado pelo usurio.

25) Codificar um algoritmo que simule o jogo de adivinhao: o jogador 1 escolhe um nmero entre 1
e 10; o jogador 2 insere nmeros na tentativa de acertar o nmero escolhido pelo jogador 1.
Quando ele acertar, o algoritmo deve informar que ele acertou o nmero escolhido pelo jogador 1
em x tentativas (quantidade de tentativas do jogador 2).

26) Supondo que a populao de um pas A seja da ordem de 98.000.000 de habitantes, com uma taxa
anual de crescimento de 3,5% e que um pas B tenha uma populao de
aproximadamente 200.000.000 habitantes com uma taxa anual de crescimento de 1,5%.
Escreva um algoritmo que calcule iterativamente, quantos anos sero necessrios para que a
populao do pas A, ultrapasse ou iguale a populao do pas B, mantidas as taxas
de crescimento.

27) Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a
massa inicial, em gramas, fazer um programa que determine o tempo necessrio para que a massa
se torne menor que 0,5 grama. Escreva o massa inicial, a massa final e o tempo em horas, minutos
e segundos.

Pg.: 82/137
Prof. Daniel Oliveira

Arrays

Array ou arranjo uma estrutura de dados que contm em seu interior um nmero fixo de valores e de mesmo
tipo. O tamanho de uma array determinado no momento da sua criao e permanece constante aps a sua
criao. So objetos que representam um agrupamento contnuo de posies de memria, sendo que o tipo dos
elementos contidos em uma array pode ser um tipo primitivo ou no - Figura 65.

ndice do
primeiro
elemento

0 1 2 3 4 5 6 7 8 9

Comprimento da Array de 10 elementos

Figura 65 Array com 10 elementos

Cada item dentro de uma array chamado de elemento, e cada elemento de uma array acessado atravs de
um ndice. Sendo que o elemento inicial indicado pelo ndice zero ver Figura 65.

1. int[] anArray;
2. //Alocando uma array com 10 elementos
3. anArray = new int[10];

4. //Inicializando a array
5. anArray[0] = 100;
6. anArray[1] = 200;
7. anArray[2] = 300;
8. anArray[3] = 400;
9. anArray[4] = 500;
10. anArray[5] = 600;
11. anArray[6] = 700;
12. anArray[7] = 800;
13. anArray[8] = 900;
14. anArray[9] = 1000;

Exemplo 42 - Exemplo de criao e inicializao de uma array

No Exemplo 42, temos um cdigo que declara uma array (linha 1) , na linha 3 temos a alocao da array e a
partir da linha 5 a 14 temos o cdigo aonde inserimos os elementos nas posies indicadas pelos ndices.

possvel perceber que para declarar uma array no formato: tipo[] o conjunto [] indica que estamos
declarando uma array. Cada conjunto deste refere-se a uma dimenso da array. As arrays de apenas uma
dimenso tm tambm um nome especial: vetor.

Outros exemplos de declarao de arrays:

Pg.: 83/137
Prof. Daniel Oliveira

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans

possvel tambm colocar o conjunto de colchetes na frente do nome da varivel da array, assim: int anArray[];
No Exemplo 43, temos outras formas de declarar e inicializar uma array.

int[] anArray = new int[10];


anArray[0] = 100;
anArray[1] = 200;
anArray[2] = 300;

int[] anArray2 = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};

Exemplo 43 - Formas de inicializar uma array

Intrinsicamente o uso de array est vinculado ao uso de estruturas de repetio para percorrer os elementos de
uma array - Exemplo 44.

int[] anArray = new int[10];

for(int i=0;i<anArray.length;i++)
{
anArray[i] = i;
}

Exemplo 44 - Exemplo de acessar posies de uma arry por loop

No exemplo anterior, temos um loop do tipo for para percorrer uma array inicializando seus elementos. Mas,
na declarao do loop for temos algo interessante: anArray.length esta propriedade especial da array retorna
a quantidade de elementos dessa array.

No Exemplo 45, temos um cdigo que declara e inicializa uma array de char e a percorre exibindo seus elementos
na tela.

char[] myArray = { 'a', 'b', 'c' };

for (int i = 0; i < myArray.length; i++) {


System.out.println(myArray[i]);
}

Exemplo 45 - Percorrendo uma array de char

Pg.: 84/137
Prof. Daniel Oliveira

Abaixo temos outro exemplo, que utilizando um algoritmo simples ordena uma array com 10 elementos
aleatrios:
double[ ] nums = new double[10];

for(int i = 0; i < nums.length; i++) {


nums[i] = Math.round(Math.random( ) * 100);
}

for(int i = 0; i < nums.length; i++) {


int min = i; //indice do menor elemento

//Busca o menor elemento d i-sima posio at o fim da array


for(int j = i; j < nums.length; j++) {
if (nums[j] < nums[min])
{
min = j;
}
}

// realiza a troca entre os elementos


double tmp;
tmp = nums[i];
nums[i] = nums[min];
nums[min] = tmp;
}

for(int i = 0; i < nums.length; i++){


System.out.println(nums[i]);
}

Exemplo 46 - Exemplo de uma rotina de ordenao de array

A rotina do exemplo anterior aplicvel em qualquer situao ou conjunto de nmeros?

Pg.: 85/137
Prof. Daniel Oliveira

Exerccios

1) Solicite ao usurio 5 nmeros inteiros, guarde-os em um vetor e em seguida imprima-os na tela. Em


seguida conte quantos elementos so negativos e informes ao usurio.

2) Leia um vetor de 10 elementos e em seguida ache a posio do elemento de valor m (dado pelo usurio)
no vetor. Caso o elemento no exista no vetor informe ao usurio.

3) Faa um programa que carregue um vetor de seis elementos numricos inteiros, calcule e mostre:
a. A quantidade de nmeros pares;
b. Quais os nmeros pares;
c. A quantidade de nmeros mpares;
d. Quais os nmeros mpares.

4) Faa um programa que carregue um vetor com dez nmeros reais, calcule e mostre a quantidade de
nmeros negativos e a soma dos nmeros positivos desse vetor

5) Solicite ao usurio n nmeros inteiros (onde n tambm fornecido pelo usurio), guarde os em um
vetor e em seguida imprima-os na tela. Caso o n fornecido pelo usurio seja maior que o tamanho
mximo do vetor, pea para que ele digite um n menor.

6) Leia um vetor de 10 elementos e em seguida ache a posio do elemento m (dado pelo usurio) no
vetor. Caso o elemento no exista no vetor informe ao usurio.

7) Solicite ao usurio dois vetores de n nmeros (n tambm fornecido pelo usurio) e em seguida calcule
a soma dos vetores, elemento a elemento, em um terceiro vetor.

8) Leia um vetor com 20 elementos. A seguir, troque o primeiro elemento com o ltimo, o segundo com
o penltimo, etc, at o dcimo com o dcimo primeiro.

9) Faa um programa que obtenha N nmeros (podem ser inteiros ou no). Aps obter os N nmeros, seu
programa dever exibir o menor, o maior e a mdia dos valores informados.

10) Faa um algoritmo que leia a altura de moas inscritas em um concurso de beleza. Para finalizar ser
digitado zero na altura. Imprima as duas maiores alturas.

11) Dada uma seqncia de n nmeros, imprimi-la na ordem inversa da leitura.

12) Faa um algoritmo que leia a altura de 1000 pessoas e imprima a maior, a menor, a mdia destas alturas.
Imprima tambm quantas alturas maiores que 1.60 e quantas menores que 1.30.

13) Fazer um algoritmo para ler 20 nmeros reais e calcular e imprimir o desvio-padro e a varincia,
utilizando a seguinte frmula:

x x
N
1 2
i
N 1

Seguir os seguintes passos:

1. Calcular o valor mdio .


Pg.: 86/137
Prof. Daniel Oliveira

2. Para cada valor xi , calcula-se a diferena entre xi e o valor mdio .


3. Calcula-se o quadrado dessa diferena.
4. Encontra-se a soma das diferenas dos quadrados.
5. Divide-se este resultado pelo nmero de valores (N). Esta quantidade a varincia.
6. Tome a raiz quadrada deste resultado. Este novo valor o desvio-padro.

14) Dados dois vetores de n elementos, calcule o seu produto escalar. (O produto escalar de dois vetores v1
e v2 dado por: produto = v1[0]*v2[0]+ v1[1]*v2[1]+... +v1[n]*v2[n]).

15) Leia 2 vetores com 10 elementos cada. Considerando cada vetor como sendo um conjunto,crie um
terceiro vetor, que seja a unio dos dois primeiros, e um quarto, que seja a interseco entre os dois
primeiros.

16) Desenvolva um programa em Java que receba do usurio n nmeros inteiros positivos (aonde n ser
informado pelo usurio) e os armazene em um vetor. Para cada elemento desse vetor dever ser clculo
do fatorial e o resultado dever ser armazenado em outro vetor. Depois imprima cada um dos elementos
de cada vetor.

17) Vetor suavizado uma tcnica utilizada para clculos de configurao de cores, para 50 elementos reais,
conforme regra abaixo. Ler os valores do vetor V e calcular e imprimir o vetor suavizado S.
S[I]=(V[I-1]+V[I]+V[I+1])/3, se I <> 1 e I <> 50;
S[I]=(V[I]+V[I+1])/2, se I = 1;
S[I]=(V[I-1]+V[I])/2, se I = 50;

18) Construa um algoritmo que preencha um vetor com N elementos (aonde N ser informado pelo usurio)
utilizando a srie de Fibonacci. Aps isto imprima o contedo do vetor na tela. Exemplo de valores da
srie: {1,1,2,3,5,8,13,21,34,55,89,144,233,377,...}

Pg.: 87/137
Prof. Daniel Oliveira

Arrays multidimensionais

At agora vimos arrays de apenas uma nica dimenso, tambm denominados de vetores. Mas, podemos ter
os chamados arranjos de vrias dimenses. Imagine que cada elemento de um vetor seja outro vetor, e cada
elemento desse vetor seja tambm outro vetor, e, assim por diante. Ou seja, arranjos com mais de uma
dimenso so na realidade arranjos de arranjos ver Figura 66.

Arranjo
Multi
0 0 1 ... N

1 0 1 ... N
...

0 1 ... N
N

Figura 66 - Representao de uma array multidimensional

Quando o arranjo armazenado em cada elemento tem a mesma quantidade de elementos podemos ter uma
estrutura que associada a uma matriz. Muitas vezes, arranjos multidimensionais so associados a matrizes,
mas, eles podem ter estruturas bem diferenciadas. Na Figura 67, temos a representao uma array com 3 linhas
(vetor de trs de elementos) e 5 colunas (cada elemento do vetor de 3 elementos um arranjo com cinco
elementos).

Figura 67 - Representao de uma matriz

A declarao de uma matriz utiliza tambm os colchetes, assim como os vetores. Utiliza-se um par de colchetes
([]) para cada dimenso a ser includa na matriz. Por exemplo:

int minhaMatriz [][] = new int [3][5];

Pg.: 88/137
Prof. Daniel Oliveira

Na linha de cdigo acima, temos o seguinte: uma array de inteiros (todos os elementos de todos arranjos nessa
array devero ser inteiros). Sendo que teremos um arranjo de 3 elementos (linhas) e cada arranjo alocado nesse
arranjo ser de 5 elementos (colunas).

Cada elemento no array a identificado por uma expresso de acesso ao array da forma: a [ linha ] [coluna]:

Figura 68 - Acessando posies dentro de um arranjo bidimensional

Como os arrays unidimensionais, os arrays multidimensionais podem ser inicializados na sua declarao:

int[][] Matriz = {{1,2},{3,4}};

Os valores do inicializados so agrupados por linha entre chaves. O compilador conta o nmero de
inicializadores de array aninhados (representado por conjuntos de chaves dentro das chaves externas) na
declarao de array para determinar o nmero de linhas no array Matriz.

Pelo fato de arrays multidimensionais sejam arranjos de arranjos, podemos ter estruturas bem mais flexveis:

int[][] b = {{1,2},{3,4,5}};

Cria um array de inleiros b com dois elementos (determinados pelo nmero de inicializadores de array
aninhados) que representam as linhas do array bidimensonal.
Cada elemento de b uma referncia a um array unidimensional de variveis int.
O array da linha O (zero) um array unidimensional com dois elementos (1 e 2)
E o array da linha 1 um array unidimensional com trs elementos (3,4 e 5)

Pg.: 89/137
Prof. Daniel Oliveira

No Figura 69, temos um cdigo mostrando uma forma de percorrer agora estes arranjos. Reparem que para
cada dimenso extra temos uma estrutura de repetio aninhada dentro de outra mas uma vez, so arranjos
de arranjos.

Figura 69 - Percorrendo uma array multidimensional

Pg.: 90/137
Prof. Daniel Oliveira

Exerccios

1) Elaborar um algoritmo que l uma matriz M(6,6) e um valor A e multiplica a matriz M pelo
valor A, exiba o resultado.

2) Escreva um algoritmo que l uma matriz M(5,5) e calcula as somas:

a. Da linha 4 de M
b. Da coluna 2 de M
c. Da diagonal principal
d. De todos os elementos da matriz M

Escrever essas somas e a matriz.

3) Escrever um algoritmo que l uma matriz A(5,5) e a escreva. Verifique, a seguir, quais os
elementos de A que esto repetidos e quantas vezes cada um est repetido. Escrever cada
elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A.

4) Escrever um algoritmo que l uma matriz M(10,10) e a escreve. Troque, a seguir:


a. a linha 2 com a linha 8
b. a coluna 4 com a coluna 10
c. a linha 5 com a coluna 10.
Escreva a matriz assim modificada.

5) Faa um algoritmo que calcule a mdia dos elementos da diagonal principal de uma matriz
10 X 10 de inteiros.

6) Faa um algoritmo que gere a seguinte matriz:


111111
122221
123321
123321
122221
111111

7) Faa um algoritmo que leia uma matriz 4x9 de inteiros. calcule e mostre a soma das linhas
pares da matriz.

8) Faa um algoritmo que leia uma matriz 50x50 de nmeros reais. A seguir, multiplique
cada linha pelo elemento da diagonal principal daquela linha. Mostre a matriz aps as
multiplicaes.

9) Faa um programa que leia duas matrizes 3x3 e realize a soma da duas e a multiplicao das mesmas.
Dever ser exibido as duas matrizes originais, a matriz de soma e a matriz de multiplicao.

10) Escrever um algoritmo que l uma matriz M(12,13) e divida todos os 13 elementos de cada
uma das 12 linhas de M pelo maior elemento em mdulo daquela linha. Escrever a matriz
lida e a modificada.

11) Faa um programa em java tenha a sada como da imagem:


Pg.: 91/137
Prof. Daniel Oliveira

12) Suponha que voc tenha uma array como da imagem abaixo:

Faa um programa em Java que ir produzir a transposio da mesma. Como a figura:

Pg.: 92/137
Prof. Daniel Oliveira

13) Faa um programa em Java que permita que dois usurios jogue o Jogo da Velha, a cada iterao de
forma alternada o jogador dever indicar a posio a ser preenchida pelo X ou O. Por exemplo:

Os jogadores, de maneira, alternada dever informar um nmero de 1 a 9


(representando cada posio da array). E, assim, sucessivamente at
termos um vencedor.

Exemplo, de sequncia de aes:

Pg.: 93/137
Prof. Daniel Oliveira

Modularizao

A medida que evolumos no estudo dos algoritmos e no desenvolvimento programas iremos nos deparar com
problemas mais complexos. A forma como construmos nossos algoritmos at agora no permite que seja
construdo solues mais complexas e de fcil manuteno e expanso.

Quando temos um problema complexo para resolver, temos a principal estratgia da diviso das tarefas para
que cada parte menor possa ser resolvida. Esta tarefa da diviso de algoritmos mais complexos em algoritmos
menores que iro resolver o problema denominada de sub-algoritmos.

Subprograma um programa que auxilia o programa principal


atravs da realizao de uma determinada sub-tarefa.

Os algoritmos podem ser agrupados em: Mdulos, rotinas, sub-rotina ou subprogramas. Ao se utilizar
subprogramas temos como vantagens:

Reduo de complexidade
Identificao de erros facilitada
Reutilizao
Manuteno mais simples
Expansibilidade

Os Subprogramas so chamados dentro do corpo do programa principal como se fossem comandos. Aps seu
trmino, a execuo continua a partir do ponto onde foi chamado. Deve-se compreender que a chamada de um
subprograma simplesmente gera um desvio temporrio no fluxo de execuo.

Inicio

SubPrograma 2

SubPrograma 1

Processo Principal

Fim

Figura 70 - Chamada de subprogramas

Um subprograma especial a funo. Uma funo executa alguma tarefa, podendo ou no retornar algum valor.
Em Java as funes ou procedimentos so denominados de mtodos (nas prximas unidades vamos entender o
porqu de tal nomenclatura).

Vamos olhar um cdigo j conhecido (Figura 71), na imagem temos uma linha em destaque. um cdigo que
no nenhuma novidade para ns. Agora podemos chamar o print por mtodo print.

Pg.: 94/137
Prof. Daniel Oliveira

Figura 71 - Analisando funes em Java

O mtodo print o exemplo de funo que no retoma nenhum tipo de valor e sim recebe um valor para
executar a sua rotina (depois vamos entender esta passagem de valores para as rotinas). Agora vamos analisar
outra poro do nosso cdigo (Figura 72).

Figura 72 - Exemplo de funo com retorno em Java

Nesse outro exemplo, vemos o mtodo pow do pacote Math (logo vamos cham-lo por outro nome). Este
mtodo retorna algo. Retorna o valor da potncia de uma base (primeiro valor passado ao mtodo) a um
expoente (segundo valor passado para o mtodo).

Em resumo, um mtodo pode receber um conjunto de valores (chamados de parmetros) e pode retornar um
valor.

Definindo uma funo ou mtodo

Java, assim como as linguagens de programa c-like, tem um formato bem particular para definir suas funes e
mtodos:

<modificador> <retorno> <nome> (<argumentos>){

<modificador>: caracteriza o mtodo quanto visibilidade e qualidade. Existem vrios modificadores, mas
neste momento daremos nfase a apenas alguns deles:
public: Indica um mtodo que pode ser acessado por qualquer classe (mais uma vez este termo
surge, mais a frente vamos estuda-lo) que enxergue aquele no qual o mtodo foi escrito.
protected: Indica um mtodo que pode ser acessado apenas por classes pertencentes ao mesmo
pacote ou por subclasses
private: Indica que o mtodo s pode ser invocado dentro da prpria classe onde ele foi escrito.
static: Indica que o mtodo pode ser invocado a partir do nome da classe, ou seja, no necessrio
criar um objeto para invoc-lo. Por exemplo, os mtodos da classe Math (Math.pow).
Se no houver modificador, significa que o mtodo se comporta como do tipo protected.

Pg.: 95/137
Prof. Daniel Oliveira

<retorno> - indica qual tipo de retorno da funo, podendo ser int, float, double, string, char, qualquer tipo de
dado (mesmo aqueles que iremos criar!). Inclusive nada, nesse caso o tipo de retorno void.

<nome>: Deve obedecer s mesmas regras que os identificadores de variveis. Observe que, em uma classe
pode haver mais de um mtodo com o mesmo nome, bastando, para isso, que os tipos, a ordem ou a
quantidade dos parmetros sejam diferentes. Veremos isso com mais detalhes mais frente.

<argumentos>: indica a lista de argumentos que sero passados como parmetros para o mtodo. Eles devem
obedecer a seguinte sintaxe: <tipo> par1, <tipo> par2, ..., <tipo> parn

Exemplo de uma funo sem parmetros

Vamos analisar o cdigo abaixo:

public static void main(String[] args) {


Somar();
}

public static void Somar(){


Scanner s = new Scanner(System.in);
System.out.print("Informe A:");
int a = s.nextInt();
System.out.print("Informe B:");
int b = s.nextInt();
System.out.println("A+B=" + (a+b));
}

Notem que no mtodo principal Main, chamamos a funo somar. Como ela no recebe nenhum
parmetro (ou seja, nenhum valor), simplesmente a chamados pelo seu nome seguida de um ().
Isto no Java obrigatrio, mesmo que funo receba nenhum parmetro.

Funes e parmetros

Precisamos recordar um conceito importante do incio desse material escopo. O escopo de uma varivel indica
at aonde uma varivel visvel ou acessvel. Ento, se uma funo ou mtodo necessitar de um valor externos
a ela para realizar sua tarefa?

A soluo para esta questo passarmos este(s) valor(es) para a funo atravs de seus parmetros. Os
parmetros so variveis ou valores que podem ser transferidos do mtodo chamador para o mtodo chamado.
Eles so responsveis pela comunicao entre os mtodos. Vamos rever o exemplo anterior:

Pg.: 96/137
Prof. Daniel Oliveira

Figura 73 - Exemplo de passagem de parmetros

Existem duas formas para se estabelecer esta comunicao ou passagem de parmetros: passagem por valor ou
referncia. Quando a passagem feita por valor, o valor copiado do mtodo chamador para o parmetro da
funo. Assim, o valor original permanece intacto, mesmo que o parmetro sofra alteraes dentro do cdigo
da funo.

Figura 74 - Passagem por valor

No entanto, quando fazemos uma passagem por referncia, no o valor que copiado para o parmetro e sim
o endereo de memria do cdigo chamador para o chamado (j conversamos sobre isto antes!). Veja o
exemplo:

Figura 75 - Passagem por referncia


Pg.: 97/137
Prof. Daniel Oliveira

Este fenmeno no ocorrer apenas com vetores, tambm ir ocorrer com outros tipos de dados que iremos
trabalhar mais frente!

Funes retornando valores

As funes podem retornar valores (desde valores primitivos at objetos complexos). Bastando para isto
declararmos as funes indicando o tipo de seu retorno:

static int fatorial (int num){


int i, fat = 1;
for (i=1; i<=num; i++)
fat = fat * i;

return fat;
}

Nesse caso a chamada funo muda um pouco:

public static void main(String[] args) {


int f = fatorial(5);
}

Por exemplo, uma funo que verifica se um nmero primo ou no:

static boolean primo (int num){


for (int i=2; i<num; i++){
if (num%i==0)
return false;
}
return true;
}

O que importante ressaltar nesse ultimo exemplo o seguinte: retorno da funo, e sua imediata finalizao,
depende do comando return. Assim, independentemente da posio dentro da funo. Ao ser encontrado um
comando return a funo para seu processamento e retorna ao cdigo chamador!

Mais um exemplo: funo que receba trs nmeros inteiros: a, b e c, onde a maior que 1. A funo deve
retornar a soma de todos os inteiros entre b e c que sejam divisveis por a (inclusive b e c) para o programa
principal.

static int somaDiv (int a, int b, int c){


int i, soma=0;

for (i=b; i <= c; i++){


if ((i % a) == 0)
soma += i;
}
return soma;
}

Pg.: 98/137
Prof. Daniel Oliveira

Exerccios (Nvel 1)

1. Desenvolva um programa aonde o usurio ir informar duas notas e a sua rotina ir retornar a mdia
das duas.
2. Alterar a rotina de clculo de fatorial para a construo de uma funo que receba um inteiro positivo
e retorne seu fatorial
3. Reescrever o programa de converso de Celsius para Fahrenheit para que a rotina de converso seja
uma funo chamada pelo processo principal.
4. Faa um software para calcular quantas ferraduras so necessrias para equipar todos os cavalos
comprados para um haras.
5. Entrar com o dia e o ms de uma data e informar quantos dias se passaram desde o incio do ano.
Esquea a questo dos anos bissextos e considere sempre que um ms possui 30 dias.
6. Construa um programa para calcular a distncia entre dois pontos do plano cartesiano. Cada ponto
um par ordenado (x,y).
7. Desenvolva um programa que pergunte ao usurio a quantidade de alunos. E para cada aluno o seu
programa dever perguntar o Nome, Nota 1, Nota 2. Estes valores devero ser armazenados em vetores.
E, ao final o programa exiba a relao de nomes com notas e respectivas mdias. Deve-se utilizar funes
para esta tarefa.

Exerccios (Nvel 2)

1. Escreva um algoritmo que leia trs nmeros inteiros e positivos (A, B, C) e passe para uma funo que
calcule a seguinte expresso:

+
= 2
, = ( + )2 = ( + )2

2. Faa uma funo que receba a data de nascimento de uma pessoa (Dia, Ms e Ano) e informe a idade
da pessoa em Dias, meses e anos.

3. Elabore uma funo que dada idade de um nadador classifica-o em uma das seguintes categorias:

Infantil A = 5 - 7 anos
Infantil B = 8-10 anos
Juvenil A = 11-13 anos
Juvenil B = 14-17 anos
Adulto = maiores de 18 anos

4. Tendo como dados de entrada a altura e o sexo de uma pessoa (M masculino e F feminino), construa
uma funo que calcule seu peso ideal, utilizando as seguintes frmulas:
a. Para homens: (72.7*h)-58
b. Para mulheres: (62.1*h)-44.7

5. Um usurio deseja um programa onde possa escolher que tipo de mdia deseja calcular a partir de 3
notas. Faa um algoritmo que leia as notas, a opo escolhida pelo usurio e calcule a mdia: aritmtica
ou ponderada (com pesos 3,3 e 4).

Pg.: 99/137
Prof. Daniel Oliveira

6. Uma empresa conceder um aumento de salrio aos seus funcionrios, varivel de acordo com o cargo,
conforme a tabela abaixo. Faa um programa que leia o salrio e o cargo de um funcionrio e calcule o
novo salrio. Se o cargo do funcionrio no estiver na tabela, ele dever, ento, receber 40% de
aumento. Mostre o salrio antigo, o novo salrio e a diferena.

Cdigo Cargo Reajuste


101 Gerente 10%
102 Engenheiro 20%
103 Tcnico 20%

Exerccios (Nvel 3)

1. Faa um programa para transformar segundos em hora, minutos e segundos e para transformar hora,
minutos e segundos em segundos. Este programa deve ser modularizado, ou seja, deve haver um
mtodo menu (mostra o menu na tela e retorna opo do usurio) e um mtodo para cada tipo de
transformao (faz a transformao e apresenta na tela o resultado).

2. Implemente um programa, utilizando mtodos, que leia uma matriz (LxC) de inteiros. Este programa
dever mostrar a matriz no final bem como sua transposta:
a b c a d g

A= d e f , logo, At = b e h

g h i c f i

3. Faa um programa, utilizando mtodos, que carregue uma matriz 10X20 com nmeros inteiros e some
cada uma das linhas, armazenando o resultado das somas em um vetor. A seguir, multiplique cada
elemento da matriz pela soma da linha e mostre a matriz resultante.

4. Faa um programa, utilizando mtodos, que carregue uma matriz 7X7 de nmeros inteiros e crie dois
vetores de sete posies cada um e que contenham, respectivamente, o maior elemento de cada uma
das linhas e o menor elemento de cada uma das colunas. Escreva, no final, a matriz e os dois vetores.

5. Faa um programa, utilizando mtodos, que dever carregar uma matriz 2X12 que representa a
temperatura mxima e a mnima na Grande Vitria durante cada ms do ano de 2015. Calcule e
imprima o ms, ou meses, por extenso.

Pg.: 100/137
Prof. Daniel Oliveira

Orientao a Objetos

O paradigma de orientao a objetos no algo novo, no surgiu nos ltimos anos, e, sim, vem desde da dcada
de 70 do sculo XX. Este modelo ou padro, da vem o significado da palavra paradigma, domina quase
totalmente todas as linguagens de programao modernas. Mas, nem sempre foi assim.

Quando o conceito da orientao objetos surgi, o modelo de programao procedural (aquele voltado apenas
ao desenvolvimento de cdigos baseados em chamadas a procedimentos ou funes) dominava. Devido as
caractersticas do modelo OO muito cdigo extra era gerado pelo compilador para poder implementar as
funcionalidades do paradigma. Assim, nos primeiros nos e at dcada, as linguagens orientadas objetos eram
associadas a programas pesados e de baixa performance.

Mas, com o avano da capacidade computacional e principalmente das tcnicas de compilao e IDEs o modelo
OO comeou a ser popularizado. Veja um breve histrico desse modelo:

1967: Simula - introduz os primeiros conceitos de OO


1972: Smalltalk
1980: C++ linguagem hbrida, derivada da linguagem C
1983: Ada criada para uso militar nos EUA
1984: Eilffel primeiras caractersticas formais de OO
1986: Object pascal
1995: JAVA - Linguagem puramente orientada a objetos
1995: Vrias linguagens agregando conceitos de OO

No pargrafo anterior d para se notar a importncia do Java no processo de popularizao desse modelo. Aps
a introduo do C++, o maior ponto de expanso do modelo foi a criao do Java.

O modelo de orientao a objetos tem como base a construo de programas baseando-se em algo muito
simples e que ns interagimos no dia a dia: Objetos!

Vamos imaginar que iremos construir um programa para controle de bibliotecas, a primeira ao apontar quais
seriam os principais entes envolvidos nesse sistema? Livros!

Um livro tem um conjunto de caractersticas que o definem e o descreve, como: Titulo, Autores, Editora, Ano de
Edio e etc. Esta viso representativa do modelo de um objeto se chama classe. Uma classe nada mais do que
um modelo, uma descrio. Gosto de associar classes a uma planta de uma casa, na planta temos as definies
de como ser a casa, temos as caractersticas da casa. Quando construmos a casa a partir desse modelo temos
ento um objeto. Ou seja:

Um objeto uma instncia de uma classe

A classe define a estrutura de um objeto. Define quais informaes sero armazenadas nesse objeto, define
quais aes este objeto poder realizar. E, atravs de uma classe poderemos ter vrios objetos sendo
instanciados ou construdos.

Pg.: 101/137
Prof. Daniel Oliveira

Uma classe o agrupamento lgico de dados


e funes em um pacote

Esta definio tambm muito utilizada para classes. Ou seja, quando definimos uma classe, estamos definindo
uma estrutura heterognea que ir combinar dados e funes. E, mais importante ainda, ao se definir uma
classe, define-se um novo tipo de dado.

Ento, ao definirmos uma classe estamos tambm definindo um novo tipo de dado, logo:

<CLASSE> <NOME VARIVEL>;

Poderemos declarar uma varivel do tipo da classe que criamos. Mas, o processo ainda no est acabado. Ao se
declarar uma varivel do tipo de uma classe no significa que j podemos utilizar a varivel. Como vimos
anteriormente a classe uma estrutura que ir combinas dados e funes, logo, se faz necessrio a alocao de
um espao de memria que possa comportar esta estrutura (J vimos outros tipos de dados que precisam da
mesma coisa! Quais?).

A tarefa de alocar este espao de memria e informar para o nosso programa em qual endereo de memria o
nosso objeto estar localizado (lembrem-se, uma vez instanciada a classe passamos a ter objetos!), o operador
NEW.

<NOME VARIVEL> = new <CLASSE>();

O operador new extrema importncia nesse processo. Ele responsvel pela determinao de quanto de
memria ser necessrio para conter o objeto, interagir com o sistema Operacional e solicitar esta quantidade
de memria.

Um outro detalhe importante, que o operador new executa uma funo muito especial que pertence classe.
Ele executa o construtor da classe. Ns iremos abordar este assunto um pouco mais a frente.

Declarando uma classe

Como podemos declarar uma classe em Java?

<modificador> class <nome>{

...

Para se declarar uma classe em Java, utilizamos primeiramente um modificador de acesso. Um modificador de
acesso diz ao compilador como ser a visibilidade e o acesso a classe por outras partes do nosso cdigo fonte
(vamos utilizar muito estes modificadores mais a frente). Inicialmente teremos dois tipos de modificadores de
acesso:

public Indicando que a nossa classe ou qualquer membro pertencente a classe de acesso pblico.
Sendo assim qualquer poro do nosso cdigo fonte pode referenciar a nossa classe.
private Indica que o membro da classe s pode ser acessado dentro da classe. Este modificador de
acesso implementa um dos principais conceitos do OO: encapsulamento.

Pg.: 102/137
Prof. Daniel Oliveira

Tudo que definido dentro da classe chamado de membro da classe. Uma classe pode conter atributos,
campos ou mtodos cada um desses membros ser abordado mais frente.

<modificador> class <nome>{

<modificador> <tipo> <atributo1>;

...

<modificador> <tipo> <atributon>;

...

Aps o modificador de acesso temos a palavra-chave <class> esta palavra chave determinar para a ns o tipo de
estrutura que ser construda, uma classe. Em seguida precisamos informar o nome da classe. O nome da classe
segue o mesmo padro e regras de nomeao das variveis. Normalmente temos por padro sempre no utilizar
termos substantivos ou substantivos.

Figura 76 - Criando uma nova classe no Eclipse

Figura 77 - Tela de configurao para criao de uma nova classe

Pg.: 103/137
Prof. Daniel Oliveira

Aps uso das telas Figura 76 e Figura 77, temos ento o esqueleto da nossa classe pronta para ser codificada

Figura 78 - Classe Livro

Todo o cdigo que for inserido entre o conjunto de {} de chaves, ser pertence classe. Como indicado na Figura
78. Vamos agora criar alguns membros para esta classe:

Figura 79 - Classe Livro com seus membros

Na figura anterior temos o cdigo da nossa classe livro com alguns membros. Note que no colocamos nenhum
modificador de acesso para estes membros. Nesse caso, campos ou fields. Como ento utilizar esta classe?

Figura 80 - Usando a classe Livro

Notem como a definio de classe cria um novo tipo de dados. Por isso, as classes tambm so chamadas de
tipos heterogneos. Ainda, no cdigo fonte de exemplo vemos como acessar os membros de uma classe. Para
isto utilizamos o chamado operador ponto .. Sempre se faz o acesso aos membros de uma classe pelo nome
da varivel (objeto) da classe e ponto e o nome do membro da classe.
Pg.: 104/137
Prof. Daniel Oliveira

Figura 81 - Uso do operador ponto

Os campos que compe as caracteristicas da classe Livro so denominados de atributos. Bem como, na vida,
temos valores que definem as caracteristicas de objetos, temos os atributos para definir as caracteristicas dos
nossos objetos no cdigo.

Os valores dos atributos de um objeto definem o seu estado.

Temos aqui outra definio muito importante para objetos, estados. Estado de um objeto reflete os dados que
esto armazenados em seus atributos. Como os valores dos atributos podem mudar o seu estado tambm muda.

Mtodos

Os objetos podem realizar aes. Por exemplo, uma classe Carro que ir representar um carro real em um
simulador. Sabemos que um carro pode acelerar, parar, virar Esquerda, virar Direita. Esta parte dinmica do
objeto realizada atravs de seus mtodos.

Mtodos nada mais so do que funes. Funes pertencentes a classe e acessveis atravs de seus objetos.
Assim, como funes, os mtodos podem retornar ou no valores, e receber ou no parmetros.

Por exemplo, na Figura 82.

Figura 82 - Mtodo da Classe Livro

Pg.: 105/137
Prof. Daniel Oliveira

Exerccios

1- Desenvolva uma classe que represente uma conta bancria, esta classe dever ter:
a. Uma varivel privada que dever conter o saldo da conta
b. Um mtodo Depositar que receba um valor double, este valor dever ser acrescido ao saldo da
conta
c. Um mtodo Sacar que receba um valor double, este valor dever ser retirado do saldo da conta
d. Um mtodo VerificarSaldo que retorne o valor do saldo da conta
2- Desenvolva uma classe que represente um Ponto, esta classe dever ter:
a. Duas variveis privadas que sero as coordenadas X e Y do ponto
b. Um mtodo AtualizarCoordenadas que receba dois valores double, uma para a coordenada X e
outro para a coordenada Y
c. Um mtodo CoordenadaX que retorne a coordenada X
d. Um mtodo CoordenadaY que retorne a coordenada Y
e. Um mtodo Distancia que receba um mtodo do tipo Ponto e retorne a distncia entre o objeto
Ponto atual e o objeto Ponto passado como parmetro.
3- Escreva em Java uma classe que represente um crculo no plano cartesiano. Fornea os seguintes
membros de classe:
a. Uma varivel privada para conter o Raio do circulo
b. Um mtodo que receba o valor do raio do circulo
c. Um mtodo que retorne a rea do circulo
d. Um mtodo que retorne o comprimento do circulo
4- Escreva em uma classe Contador, que encapsule um valor usado para contagem de itens ou eventos. A
classe deve oferecer mtodos que devem:
a. Zerar;
b. Incrementar;
c. Retornar o valor do contador.
5- Escreva uma classe que represente um pas. Um pas representado atravs dos atributos: cdigo ISO
3166-1 (ex.: BRA), nome (ex.: Brasil), populao (ex.: 193.946.886) e a sua dimenso em Km2 (ex.:
8.515.767,049). Alm disso, cada pas mantm uma lista de outros pases com os quais ele faz fronteira.
a. Crie uma propriedade para cada uma citada no enunciado
b. Crie um mtodo que retorne todos os pases com fronteira
6- Escreva em Java uma classe Continente. Um continente possui um nome e composto por um conjunto
de pases. Fornea os membros de classe a seguir:
a. Um mtodo que permita adicionar pases aos continentes;
b. Um mtodo que retorne a dimenso total do continente;
c. Um mtodo que retorne populao total do continente;
d. Um mtodo que retorne densidade populacional do continente;
e. Um mtodo que retorne o pas com maior populao no continente;
f. Um mtodo que retorne o pas com menor populao no continente;
g. Um mtodo que retorne o pas de maior dimenso territorial no continente;
h. Um mtodo que retorne o pas de menor dimenso territorial no continente;
i. Um mtodo que retorne a razo territorial do maior pas em relao ao menor pas.

Pg.: 106/137
Prof. Daniel Oliveira

Construtores

Este mtodo, que no obrigatrio, construdo com o objetivo de inicializar seus atributos (no obrigatrio
tambm inicializar todos os atributos).
Um construtor, como o prprio nome diz executado na construo do objeto. Assim, podemos tomar aes
que iro inicializar o nosso objeto.

Figura 83 Construtor

No exemplo abaixo est uma classe chamada Ponto que ir definir as coordenadas x e y de um ponto no plano.
Neste momento, definiremos somente os atributos da classe.
public class Ponto {

private double x, y;

Dessa forma quando fizermos uma classe para utilizao de um objeto Ponto teremos a seguinte situao:

public class TestaPonto{

public static void main (String[] args){

Ponto p1 = new Ponto();

Ao criar o objeto p1 da classe Ponto, ele ter os valores de suas coordenadas inicializadas com 0 (zero). E, dentro
da classe TestaPonto impossvel fazer referncia a p1.x ou p1.y, pois seus atributos (x e y) so privados
classe Ponto, ou seja, no so visveis em outras classes.

Pg.: 107/137
Prof. Daniel Oliveira

Redefinindo, agora, a classe Ponto com um construtor:

public class Ponto {

private double x, y;

Ponto (double a, double b){

this.x = a;

this.y = b;

Um construtor, ao ser declarado, deve conter apenas o nome da classe e os valores que devero ser utilizados
para inicializao das variveis. Os atributos de classe (x e y) devem ser identificados pela palavra this para
diferenci-los de qualquer outra varivel local. Com o construtor j escrito, um objeto da classe Ponto poder
ser criado com a inicializao imediata de suas coordenadas.
public class TestaPonto{
public static void main (String[] args){
Ponto p1 = new Ponto(3, -1);
Ponto p2 = new Ponto(0,0);
Ponto p3 = new Ponto();
}
}

Com a classe Ponto escrita como acima, no possvel mais criar um objeto sem passar nenhum argumento.
Ento, a declarao Ponto p3 = new Ponto(); ter um erro sinttico. Mas, ainda assim, possvel
escrever outro construtor que permita este tipo de comando.
possvel criar mais de um construtor, desde que os argumentos passados sejam de tipos (ou classes) diferentes.
public class Ponto {
private double x, y;

Ponto (double a, double b){


this.x = a;
this.y = b;
}

Ponto (){
this.x = 0;
this.y = 0;
}
}

Com esses dois construtores, o JAVA escolher qual deles ir utilizar, de acordo com a chamada:
public class TestaPonto{
public static void main (String[] args){
Ponto p1 = new Ponto(3, -1);
Pg.: 108/137
Prof. Daniel Oliveira

Ponto p2 = new Ponto();


}
}

Quando for criado p1, ele utilizar o primeiro construtor, pois est passando dois valores inteiros e ao criar o
p2, ele utilizar o segundo construtor.

ArrayList

Arrays so estruturas de dados interessantes, mas, muito limitadas frente as necessidades do dia a dia. O Java
prov um conjunto de objetos para colees de elementos dinmicos e com alta performance, a API
Collections.

O primeiro objeto seria o ArrayList:

import java.util.ArrayList;

public class CMain {

public static void main(String[] args) {


ArrayList list = new ArrayList();
list.add("Daniel");
list.add("Oliveira");
}
}

Reparem que o mtodo add, recebe um object ou seja, podemos colocar qualquer objeto Java nessa
coleo.

import java.util.ArrayList;

public class CMain {

public static void main(String[] args) {


ArrayList list = new ArrayList();
Funcionario f = new Funcionario();
f.setMatricula(1);
f.setNome("Daniel");
f.setCargo("Diretor");
list.add(f);

Funcionario f2 = new Funcionario();


f2.setMatricula(2);
f.setNome("Pedro");
f.setCargo("Estagirio");
list.add(f2);

System.out.println(list);

}
}

Podemos percorrer a ArrayList assim:

for(int i=0;i<list.size();i++){
Funcionario o = (Funcionario)list.get(i);
System.out.println(o.getNome());
}

Pg.: 109/137
Prof. Daniel Oliveira

Ou Ento:

for (Object o : list) {


Funcionario fo = (Funcionario)o;
System.out.println(fo.getNome());
}

Evidentemente o assunto sobre collections no se esgota aqui. Ainda temos outras estruturas de dados mais
complexas. Mas, dentro do escopo desse material as ArrayList iro ser e grande valia.

Pg.: 110/137
Prof. Daniel Oliveira

Exerccios

1) Crie uma classe seguindo as orientaes:


a) Crie uma classe Aluno que contenha dois atributos String: Nome e Matricula
b) Crie um mtodo nessa classe que exiba o Nome e a matricula do aluno
c) Crie um novo atributo ser um vetor de 2 posies de double, ser chamado Notas
d) Crie um mtodo que calcule a mdia das notas e retorne este valor.
e) Altere o mtodo do item 2 para exibir tambm a mdia do aluno.
f) Crie um construtor para a classe que receba como parmetro a quantidade de notas e
instancie o vetor de Notas com esta quantidade de elementos.

2) Com a classe criada no item 1, crie um programa que receba as informaes e notas de N alunos,
sendo N informado pelo usurio. E, exiba estas informaes no console.

3) Fazer uma classe VetorDePontos, contendo os seguintes atributos: vetor de pontos (seu
tamanho ser determinado no construtor) e um atributo inteiro chamado nElem que indicar
quantos elementos j foram armazenados no vetor. Alm disso, construa tambm os mtodos:

a) Construtor => criar o vetor com o tamanho passado por argumento


b) getTamanho
c) getPonto para retornar o ponto da posio passada
d) insere no final do vetor
e) remove do vetor
f) pesquisa ponto no vetor

4) Faa o exerccio anterior usando um ArrayList.

5) Crie uma classe chamada Complexos para efetuar operaes aritmticas com nmeros
complexos. Os nmeros complexos tm o formato: parteReal + parteImaginria*i,
aonde = 1
i. Crie um construtor para que essa classe possa ser inicializada
ii. Crie um construtor sem parmetros para a classe
iii. Crie mtodos pblicos para:
a. Soma de dois nmeros complexos (as partes reais so somadas juntas
e imaginrias so somadas juntas)
b. Subtrao (a parte real do nmero a direita subtrado da parte real
do nmero a esquerda e a mesma coisa ocorre com a parte
imaginria).

6) Crie uma classe Date:


i. Dever ter um construtor que receba o ano, ms e dia. O mtodo do construtor
dever verificar se o ms e o dia informados esto dentro de intervalos corretos.
c. Dever ser criada trs variveis privadas para conter o ano, ms e dia
ii. Dever ser criado um mtodo privado que ir testar se os dados passados formam
uma data vlida. Dica: anos bissextos so que: so mltiplos de 400 ou so mltiplos
de 4 e no so de 100.

Pg.: 111/137
Prof. Daniel Oliveira

iii. Crie um mtodo Display para retornar uma string com a Data no formato: dia / ms /
ano
iv. Crie um mtodo NextDay que incrementa o dia de um verificando:
d. Incremento para o prximo ms
e. Incremento para o prximo ano

7) Crie uma classe para modelar os funcionrios do banco. Defina nessa classe um atributo para
armazenar o valor do vale refeio dirio pago aos funcionrios.
a) Faa um teste para verificar o funcionamento do vale refeio.
b) Defina um mtodo para reajustar o vale refeio dirio a partir de uma taxa.
c) Faa um teste para verificar o funcionamento do reajuste do vale refeio

8) Crie uma classe que represente um LED. Esta classe dever ter uma varivel privada booleana
indicando o estado led (ligado ou no ligado).
a) Crie uma varivel interna da classe que contenha o nome da cor do LED
b) Crie um mtodo que retorne a cor do LED
c) Crie um construtor que receba como parmetro a cor do LED
d) Crie um mtodo que retorne o estado do LED
e) Crie um mtodo Ligar que muda o estado do LED para ligado
f) Crie um mtodo Desligar que muda o estado do LED para Desligado

9) Crie uma classe Painel aonde:


a) Contenha um vetor de objetos LED (criado no item anterior)
b) Um construtor que receba como parmetro a quantidade de LEDs do painel, e use este
parmetro para criar o vetor com esta quantidade.
c) Crie um mtodo Ligar. Este mtodo dever receber o ndice (a partir de zero) para qual
LED ser ligado. O mtodo dever verificar se o ndice est dentro do vetor, caso
contrrio dever ser exibida uma mensagem de erro)
d) Crie um mtodo Desligar, que receba o ndice do LED a ser desligado. Tendo a mesma
validao do item anterior.
e) Crie um Mtodo Listar que dever listar todos os LEDs (exibindo o ndice, a cor e o
estado do LED)
f) Crie um mtodo Display que dever exibir uma string composta por . ou X aonde
o ponto ir indicar o LED apagado e o X indica o LED acesso. Por exemplo: ..X..X..X

10) Crie uma classe Painel2D, que ao invs de ter um vetor de LED (como no item anterior) tenha
uma matriz quadrada de objetos do tipo LED. O construtor dessa classe dever receber um
nmero inteiro que ser a quantidade de linhas e colunas da matriz quadrada. Adapte os
mtodos do item anterior para suportar agora esta nova configurao.

Pg.: 112/137
Prof. Daniel Oliveira

Encapsulamento

Imagine que estamos modelando uma classe que represente um NPC (Non-Playable Caracter) em jogo:

Figura 84 - Classe NPC (inicial)

Nessa classe temos dois atributos, um representando o nvel de vida do NPC e um segundo que representa o
grau de experincia do NPC. Agora vamos imaginar que em algum momento precisamos alterar a forma de obter
clculo do Vida ou Experincia do NPC. Apenas expor os atributos diretamente, assim, no ir resolver o
problema. Teremos que rever todo o cdigo que utilize esses atributos e criar novos atributos que tenham agora
os novos valores. Isto no correto ou prudente!

Como resolver este problema? A resposta uma caracterstica muito importante do OO Encapsulamento. O
processo do encapsulamento a tcnica de se expor os atributos das classes atravs de mtodos, ou seja, vamos
envolver esses dados (esconde-los) e somente exp-los atravs de mtodos. Reescrevendo a classe:

Reparem agora como a classe NPC foi reescrita. Reparem


que agora que os campos life e xp foram alterados para
privados (esconde-os do mundo externo). E, agora, tanto a
releitura desses valores, quanto a atualizao dos valores
via mtodos. Um mtodo de leitura (get) e um mtodo de
escrita (set).

Os prefixos utilizados no nome dos mtodos (set ou get) no


uma regra, e sim, um padro. Sendo assim, deve-se seguir
este padro para manter o cdigo coeso e de fcil
compreenso para todos que utilizem o mesmo padro.

Padres, algo muito importante para o OO. Pois, assim,


independente de quem esteja codificando a compreenso
do cdigo facilitada. E, existem, vrias ferramentas que
esperam que o cdigo esteja dentro de um padro para a
Figura 85 - Classe NPC com gets e sets
sua utilizao.

Dica: Criar getters e setters pode parecer um processo trabalhoso, mas, por ser um padro de cdigo muito
comum, as principais IDEs do mercado possuem atalhos e templates que nos ajudam a fazer isso. No eclipse,
voc pode fazer isso de forma muito produtiva utilizando o atalho Control + 3 e depois digitando setters. Repare
que essas so as iniciais do comando Generate Getters and Setters. Selecionando esta opo voc poder
escolher para quais atributos criar os mtodos e clicar em Finish.

Podemos, mas, o XP do NPC um atributo somente leitura, pois, dever ser resultado de um clculo qualquer.
Para isto basta omitir a declarao do mtodo set do atributo. Logo, podemos definir o seguinte:

Pg.: 113/137
Prof. Daniel Oliveira

Tipo de acesso ao Atributo Set Get


Leitura / Escrita Sim Sim
Leitura No Sim
Escrita Sim No
Quadro 9 - Tipos de acesso aos atributos

Herana e polimorfismo

Vamos criar alguns mtodos bsicos em nossa classe NPC, veja:

Figura 86 - Classe NPC (Herana)

Na Figura 86 - Classe NPC (Herana), temos implementado alguns mtodos que iro caracterizar algumas aes
comuns aos NPCs. Vamos, agora, imaginar que termos uma nova classe de NPCs. Esta nova classe ter todas os
atributos e mtodos da classe NPC mas ir implementar alguns novos atributos e mtodos.

Como poderemos realizar isto? Copiar a estrutura do cdigo de uma classe na outra? E, se, for necessria uma
atualizao? Teremos que revisar todas as classes que copiaram a estrutura da NPC? No ser necessrio
realizada nada disso. Vamos utilizar o conceito de herana!

Em OO, herana a tcnica de que uma classe herda todas as caractersticas (atributos e mtodos) de uma outra
classe, apenas os membros no privados. Sendo assim, se alterarmos a classe bsica ou base ou tambm
chamada de superclasse, a alterao passa a valer para as classes descendentes. Este processo tambm
chamado de Generalizao / Especializao.

A classe genrica (Generalizao) herdada pelas classes especializadas (Especializao). Ento, em situaes
aonde podemos identificar este conceito ocorrendo, sempre iremos buscar colocar os atributos e mtodos
genricos e de uso geral na classe base e apenas implementar nas classes filhas as suas especificidades
(especializaes).

Pg.: 114/137
Prof. Daniel Oliveira

Na classe ao lado, vemos o processo de herana


ocorrendo. Reparem a palavra chave extends com
esta palavra que indicamos ao Java que a classe
Warrior ir herdar todos os membros no privados da
classe NPC.

Figura 88 - Classe Warrior

Na Figura 87, utilizando o Eclipse, podemos ver a


herana. Em amarelo, temos o mtodo implementado
apenas na classe filha, e, indicado pelas setas vermelhas
temos os mtodos e atributos herdados da classe NPC.

Algo importante, afirmar que a classe Warrior em


ltima instncia tambm uma classe NPC. Logo,
poderemos passar como parmetro para o mtodo
Seek um objeto no tipo Warrior. Reparem que o
mtodo espera que seja passado um tipo NPC.

Figura 87 - Herana da classe Warrior

Figura 89 - Warrior um NPC

A classe Warrior poder ter o seu construtor, basta para isso que voc o declare. Mas, caso seja necessrio,
possvel evocar o construtor da classe base tambm (Delegate Constructor):

Figura 90 - Delegate Constructor

Pg.: 115/137
Prof. Daniel Oliveira

Override

Existem situaes que iremos precisar ter uma verso sobrescrita de um mtodo da classe pai na classe filha,
assim:

Figura 91 - Sobrescrita de mtodo

Assim, teremos uma nova verso do FLEE na classe filha. Mas, pode existir situaes que queremos ainda chamar
o mtodo da classe pai, e, adicionar mais alguma coisa na classe filha:

Figura 92 - Sobrescrita como complemento de um mtodo base

Opcionalmente, podemos marcar os mtodos que so sobrescritos nas classes filhas com o diretiva @Override,
esta diretiva diz para o compilador no compilar o cdigo caso no exista o mtodo a ser sobrescrito na classe
base. O comportamento padro de caso no exista o mtodo na classe base, o mtodo encarado como sendo
um novo mtodo. No entanto, se existir o mtodo na classe base, o novo mtodo assumido como sendo uma
sobrescrita.

Figura 93 - Diretiva @Override

Polimorfismo

Vamos imaginar agora que precisamos que nossos NPC no mais se movam para uma posio apenas, mas,
em algumas situaes eles devem se mover para uma posio e com uma certa acelerao. Vamos criar um
mtodo move2 ? Certamente que no!

Pg.: 116/137
Prof. Daniel Oliveira

Para isto vamos utilizar o princpio do polimorfismo, poli vrias / morfo formas ou seja, vamos criar vrias
verses do mesmo mtodo. Assim, o cdigo que utiliza a verso antiga continua funcionando e o cdigo que
utiliza a nova verso ir simplesmente utiliz-la.

Figura 94 Polimorfismo

Figura 95 - Referncia aos mtodos polimorfos

Pg.: 117/137
Prof. Daniel Oliveira

Exerccios

1. Crie uma classe Animal, com trs mtodos (Acordar(), Comer(), Dormir()) e uma propriedade
(Nome); Crie uma classe Mamifero, que herda de Animal (criado como no item acima) e que
possui o mtodo Mamar(). Crie, ainda, as classes Morcego (que possui o mtodo Voar()) e Baleia
(que possui o mtodo Nadar()), derivadas de Mamifero;

2. Crie uma classe Pessoa que possui os mtodos Acordar(), Comer() e Dormir() e as propriedades
int Codigo, String Nome e Sexo Sexo. Crie duas classes (Homem e Mulher) que herdam de
Pessoa;

3. Crie uma classe Calculadora que faa as quatro operaes bsicas (soma, subtrao,
multiplicao e diviso). Crie uma classe derivada CalculadoraCientifica que, alm das
operaes bsicas, faa extrao de razes;

4. Crie uma classe Figura, com um campo double x (privado). Crie um construtor para fornecer o
valor para esse campo. Crie dois mtodos CalcularArea() e CalcularPerimetro() que (nas classes
derivadas) retornaro os valores da rea e do permetro de uma figura regular, baseados na
medida x. Crie as classes derivadas Equilatero, Quadrado, Circulo, Pentagono, Hexagono,
Heptagono e Octogono. Sobrescreva o mtodo ToString() de Figura.

5. Desenvolva uma classe Lampada. Esta classe dever ter uma propriedade booleana que ir indicar
se a lmpada (esta propriedade dever ser somente leitura). Esta classe dever ter dois mtodos:
Um mtodo que ir ligar a lmpada e outro mtodo para desligar a lmpada ambos os mtodos
devero alterar o valor da varivel (privada) que controla o estado da lmpada

6. Crie uma classe filha da classe Lampada criada no exerccio anterior. Esta classe filha dever ser
chamada de Led. Esta nova classe dever ter uma propriedade indicando qual a sua cor e qual a
intensidade em que est emitindo a luz (fraca, moderada, alta)

7. Crie uma classe Painel que dever conter um array de 4x4 elementos do tipo LED. Esta array dever
ser exposta via uma propriedade e dever ser criada e instanciada no contructor da classe. Esta
classe dever ter um mtodo receba dois inteiros (linha e coluna) e um booleano. De acordo com
linha e coluna informados e o booleano passado o LED naquela posio dever ser ligado ou no.

Pg.: 118/137
Prof. Daniel Oliveira

Classes Abstratas e Interfaces

Vamos imagina a seguinte situao, ao se desenvolver um jogo deve-se ter duas classes de NPCs: warrior e orc.
Dentro do nosso projeto ambas as classes so filhas da classe NPC. E, no queremos que hiptese nenhuma a
classe NPC seja instanciada ou concretizada. Obrigando assim, os desenvolvedores utilizando apenas as classes
warrior e orc.

No basta apenas documentar este fato e sim necessrio o uso de alguma funcionalidade que no permita
que uma classe seja concretizada ou instanciada. Em OO temos a palavra chave abstract. Esta palavra chave
marca a classe como no concreta ou abstrata

public abstract class NPC {

Figura 96 - Classe abstrata

Figura 97 - No possvel instanciar uma classe abstrata

Apesar de no se pode instanciar uma classe abstrata, usamos ela como um modelo ou template para a
construo das classes filhas. Assim, podemos utilizar os chamados mtodos abstratos, dando uma estrutura
melhor. Esses mtodos abstratos devero ser implementados nas classes filhas.

public abstract class NPC {

public abstract void Mover();


public abstract double XP();
public abstract void Flee();
}

Figura 98 - Mtodos abstratos

Com os mtodos abstratos impomos a implementao dos mesmos nas classes filhas. Ressaltando que at o
Java 8, classes abstratas no poderiam ter mtodos concretos, esta restrio no existe mais.

Pg.: 119/137
Prof. Daniel Oliveira

Interfaces

Agora vamos imaginar que estamos construindo um programa que realize operaes aritmticas sobre formas
geomtricas.

public class Quadrado {


private double medida;

public double getMedida(){


return medida;
}
public void setMedida(double Medida){
this.medida = Medida;
}

public double getArea(){


return getMedida()*getMedida();
}
}

Figura 99 - Classe Quadrado

public class Circulo {


private double medida;

public double getMedida(){


return medida;
}
public void setMedida(double Medida){
this.medida = Medida;
}

public double getArea(){


return Math.PI*Math.pow(getMedida(), 2);
}
}

Figura 100 - Classe Circulo


Nas duas classes anteriores
vemos uma estrutura muito
semelhante. Podemos implementar um mtodo que receba cada uma das classes e ento calcular sua rea:

Pg.: 120/137
Prof. Daniel Oliveira

public class CMain {

public static void main(String[] args) {


Quadrado a = new Quadrado();
CalculaArea(a);

Circulo b = new Circulo();


CalculaArea(b);
}

public static void CalculaArea(Quadrado q){


q.setMedida(10);
System.out.println("rea:" + q.getArea());
}

public static void CalculaArea(Circulo c){


c.setMedida(10);
System.out.println("rea:" + c.getArea());
}

Reparem que os mtodos CalculaArea so praticamente idnticos. E, se agora precisamos de mais uma forma
geomtrica, vamos construir mais uma verso do mtodo CalculaArea?

Ser que no existe uma forma de declaramos um contrato, que indique que qualquer classe que respeite ou
implemente este contrato tenha um conjunto especifico de mtodos? Este contrato possvel atravs do uso
de interfaces.

public interface IFigura {


public double getMedida();
public void setMedida(double Medida);
public double getArea();
}
Figura 101 - Interface IFigura

As interfaces, assim como nas classes abstratas definem uma estrutura.


public class Quadrado implements IFigura {
private double medida;

public double getMedida(){


return medida;
}
public void setMedida(double Medida){
this.medida = Medida;
}

public double getArea(){


return getMedida()*getMedida();
}
}

Pg.: 121/137
Prof. Daniel Oliveira

Alterando agora nosso cdigo:

public class CMain {

public static void main(String[] args) {


Quadrado a = new Quadrado();
CalculaArea(a);

Circulo b = new Circulo();


CalculaArea(b);
}

public static void CalculaArea(IFigura f){


f.setMedida(10);
System.out.println("rea:" + f.getArea());
}
}

Excees e controle de erros

Uma exceo representa uma situao que normalmente no ocorre e representa algo de estranho ou
inesperado no sistema.

Como tratar uma exceo sem que a mesma possa terminar a execuo do programa? Usando um bloco
try...catch

Pg.: 122/137
Prof. Daniel Oliveira

Lanando excees:

public class CMain {

public static void main(String[] args) {


try {
Div(1,0);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

public static void Div(int a,int b) throws Exception{

if (b == 0){
throw new Exception("Tentando dividir por zero!");
}

System.out.println(a/b);
}
}

O bloco finally, garante que um determinado cdigo sempre seja executado, mesmo quando ocorra algum tipo
de erro e o bloco catch seja executado:

try {
// bloco try
} catch (IOException ex) {
// bloco catch 1
} catch (SQLException sqlex) {
// bloco catch 2
} finally {
// bloco que ser sempre executado, independente
// se houve ou no exception e se ela foi tratada ou no
}

Um outro tipo, obriga a quem chama o mtodo ou construtor a tratar essa exceo. Chamamos esse tipo de
exceo de checked, pois o compilador checar se ela est sendo devidamente tratada, diferente das
anteriores, conhecidas como unchecked.

Um exemplo interessante o de abrir um arquivo para leitura, onde pode ocorrer o erro do arquivo no existir
(veremos como trabalhar com arquivos em outro captulo, no se preocupe com isto agora):

class Teste {
public static void metodo() {
new java.io.FileInputStream("arquivo.txt");
}
}

Compile o cdigo e veja o resultado.

Para compilar e fazer o programa funcionar, temos duas maneiras que podemos tratar o problema. O
primeiro, trat-lo com o try e catch

Pg.: 123/137
Prof. Daniel Oliveira

public static void metodo() {

try {
new java.io.FileInputStream("arquivo.txt");
} catch (java.io.FileNotFoundException e) {
System.out.println("Nao foi possvel abrir o arquivo para leitura");
}

A segunda forma de tratar esse erro, delegar ele para quem chamou o nosso mtodo, isto , passar para a
frente.

public static void metodo() throws java.io.FileNotFoundException {

new java.io.FileInputStream("arquivo.txt");

possvel tratar mais de um erro quase que ao mesmo tempo:

Com o throws:

Ou ento,

A palavra chave throw, que est no imperativo, lana uma


Exception. Isto bem diferente de throws, que est no
presente do indicativo, e que apenas avisa da possibilidade
daquele mtodo lan-la, obrigando o outro mtodo que v
utilizar deste de se preocupar com essa exceo em questo.

Pg.: 124/137
Prof. Daniel Oliveira

Sendo exception uma classe, podemos tambm criar classes filhas da mesma, criando assim nossas prprias
Exceptions.

Exemplo,

Pg.: 125/137
Prof. Daniel Oliveira

Exerccios

1) Crie uma interface chamada IArea esta interface dever conter um mtodo que retorne um double e
tenha como nome CalcularArea. Crie as classes Quadrado, Triangulo e Crculo que implemente esta
Interface. Crie um mtodo que receba objetos que implementem esta interface.

2) Crie uma interface IConta que defina dois mtodos: Sacar e Depositar o primeiro retira valores do
saldo de uma conta e o segundo deposita valores em uma conta. Uma classe abstrata Conta que tenha
um atributo Saldo. Crie dois objetos: ContaCorrente e ContaPoupanca que implementem esta interface
e herdem da classe Conta. A classe ContaCorrente dever ter um outro atributo chamado
LimiteChequeEspecial, o saldo da mesma dever levar em conta este valor.

3) Crie uma interface chamada Contato com os mtodos getNome(),getContato() e getTipo(), todos sem
parmetros e retornando String; Crie uma classe ContatoTelefone e ContatoEmail que implemente esta
interface.

4) Implementar um RadioRelogio, na linguagem Java, segundo o diagrama simples apresentado


abaixo. A classe RadioRelogio deve ter o seguinte construtor public RadioRelogio(Date horario)

5) Altere as classes do exerccio 2 para verificar em caso de saque, o saldo for inferior a zero, lanar uma
exception.

6) Crie uma exception personalizada para o exerccio anterior.

Pg.: 126/137
Prof. Daniel Oliveira

Trabalhando com arquivos

Em Java os principais objetos para se trabalhar com arquivos est no pacote java.io utiliza-se as classes
abstratas InputStream e OutStream para toda e qualquer operao, que seja relativa a um arquivo, socket de
rede ou campo blob de banco de dados.

Em um fluxo de entrada (InputStream) se l os dados, em fluxo de sada (OutputStream) se grava os dados. Em


todas as operaes iremos trabalhar com bytes para isto.

Para a leitura de bytes de um arquivo vamos utilizar o objeto FileInputStream. Para isto dever ser informado o
nome do arquivo (informado no construtor). Quando trabalhos com as classes de I/O diversos mtodos lanam
a exceo IOException, sendo uma exceo do tipo checked, nos obriga a trata-la ou declar-la.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class CMain {

public static void main(String[] args) {


try {
InputStream is = new FileInputStream("arquivo.txt");
int b = is.read();
} catch (IOException e) {
System.out.println(e.getMessage());
}

}
}

Para a leitura de dados em formato texto necessrio os bytes com enconding dado para o respectivo cdigo
Unicode. Para isto vamos utilizar a classe InputStreamReader. O construtor de InputStreamReader pode receber
o encoding a ser utilizado como parmetro, se desejado, tal como UTF-8 ou ISO-8859-1.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CMain {

public static void main(String[] args) {


InputStreamReader isr = null;
try {
InputStream is = new FileInputStream("arquivo.txt");
isr = new InputStreamReader(is);
int c = isr.read();
System.out.println(c);
isr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}

}
}

Pg.: 127/137
Prof. Daniel Oliveira

Ler um caractere simples, agora vamos ler uma cadeia de caracteres, para isto vamos utilizar o
BufferedReader:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CMain {

public static void main(String[] args) {


InputStreamReader isr = null;
try {
InputStream is = new FileInputStream("arquivo.txt");
isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
System.out.println(s);
isr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}

}
}

Pode-se configurar o tamanho do buffer no construtor da classe, aumentando a performance da leitura das
informaes.

Figura 102 - Uso das classes de stream para leitura

A padro que exibido na Figura 102, chamado de Decorator Pattern. No momento apenas lemos uma linha
do arquivo, vamos ler todo o arquivo:

Pg.: 128/137
Prof. Daniel Oliveira

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CMain {

public static void main(String[] args) {


InputStreamReader isr = null;
try {
InputStream is = new FileInputStream("arquivo.txt");
isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String s = br.readLine(); //Primeira linha


while (s != null) {
System.out.println(s);
s = br.readLine();
}

br.close();
isr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}

}
}

De forma bem anloga podemos escrever em um arquivo:

public class CMain {

public static void main(String[] args) {


try {
OutputStream os = new FileOutputStream("saida.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("Daniel");
bw.newLine();
bw.write("Oliveira");
bw.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}

}
}

Pg.: 129/137
Prof. Daniel Oliveira

Serializando objetos

Vamos agora armazenar nossos objetos em disco. Primeiro precisamos que nossos objetos implemente a
interface: Serializable.

Seja a classe:

import java.io.Serializable;

public class Funcionario implements Serializable {


private int matricula;
private String nome;
private String cargo;
public int getMatricula() {
return matricula;
}
public void setMatricula(int matricula) {
this.matricula = matricula;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCargo() {
return cargo;
}
public void setCargo(String cargo) {
this.cargo = cargo;
}
}

O processo de serializao bem simples:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class CMain {

public static void main(String[] args) {


try {
Funcionario f = new Funcionario();
f.setCargo("Diretor");
f.setMatricula(1);
f.setNome("Danie Oliveira");
FileOutputStream outFile = new FileOutputStream("funcionario.ser");
ObjectOutputStream s = new ObjectOutputStream(outFile);
s.writeObject(f);
s.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}

}
}

Pg.: 130/137
Prof. Daniel Oliveira

Lendo agora um objeto serializado:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class CMain {

public static void main(String[] args) {


try {
FileInputStream file = new FileInputStream("funcionario.ser");
ObjectInputStream s = new ObjectInputStream(file);
Funcionario o = (Funcionario)s.readObject();
s.close();
System.out.println(o.getMatricula());
System.out.println(o.getNome());
System.out.println(o.getCargo());
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}

}
}

Pg.: 131/137
Prof. Daniel Oliveira

Exerccios de Reviso do Contedo de OO

1) Crie uma classe que representa um Ponto no espao 3D. Esta classe dever ter trs propriedades: X,Y e
Z (todas do tipo double) representando as coordenadas do ponto

2) Crie uma classe Velocidade que ter as seguintes propriedades: VelocidadeX, VelocidadeY,VelocidadeZ
todas do tipo double.

3) Crie uma classe Aceleracao que ter as seguintes propriedades: AceleracaoX, AceleracaoY, AceleracaoZ
todas do tipo double.

4) Crie uma classe NPC. Esta classe ter as seguintes propriedades:


a. Posicao deve ser do tipo Ponto (Ex. 1) somente leitura
b. Velocidade deve ser do tipo Velocidade (Ex. 2)
c. Aceleracao deve ser do tipo acelerao (Ex. 3)

5) Na classe do ex. 4 crie os seguintes mtodos:


a. Mover que dever receber um parmetro do tipo Ponto que ir indicar a nova posio do NPC
b. Seguir que dever receber como parmetro um objeto do tipo NPC e o mtodo dever igualar
a posio do NPC com a posio do objeto passado como parmetro.
c. Fugir que dever receber como parmetro um objeto do tipo NPC o mtodo dever alterar
a posio do NPC para que este fique 10 unidades distante (em cada coordenada) da posio do
objeto passado como parmetro.

6) Crie um cdigo de exemplo que utilize a classe do exerccio 5, exemplificando o uso dos mtodos e
propriedades.

7) Crie uma classe chamada Funcionario. Defina dois mtodos de aumento salarial nessa classe. O primeiro
deve aumentar o salrio com uma taxa fixa de 10%. O segundo deve aumentar o salrio com uma taxa
varivel.

8) Crie uma classe Calculadora. Esta classe dever ter os seguintes mtodos:
a. Somar realiza a soma de dois nmeros informados
b. Dividir realiza a diviso entre dois nmeros
c. Subtrao - realiza a subtrao entre dois nmeros
d. Multiplicao realiza a multiplicao entre dois nmeros.

9) Crie uma classe CalculadoraCientifica que herde a classe Calculadora do exerccio anterior, esta classe
dever ter os seguintes mtodos:
a. RaizQ calcula a raiz quadrada de um nmero informado
b. Potencia recebe dois parmetros (base e expoente) e retorna o nmero da base elevado ao
expoente
c. Fava o override no mtodo Dividir, da classe base, testando a diviso por zero (retornando
uma exceo caso isto possa ocorrer) e ento chame o mtodo da classe base.

10) Crie uma classe CalculadoraFinanceira que herde de CalculadoraCientifica e que implemente os
seguintes mtodos:

Pg.: 132/137
Prof. Daniel Oliveira

a. ValorFuturo Este mtodo dever receber um valor atual, uma taxa de juros e uma quantidade
de meses. Faa uma pesquisa e implemente o clculo de juros compostos, retornando qual seria
o valor futuro do valor atual a taxa informada e no perodo informado.

11) Crie uma classe Pessoa. Esta classe dever ter:


a. Propriedades:
i. Nome
ii. CPF
iii. RG
iv. DataNascimento
v. EstadoCivil
vi. Endereco
vii. Numero
viii. Bairro
ix. Cidade

12) Crie uma classe Cadastro. Esta classe dever ter uma varivel privada que ser uma lista de objetos do
tipo Pessoa. Esta varivel dever ser instanciada no construtor da classe. Esta classe dever ter os
seguintes mtodos:
a. Inserir Mtodo que insere um objeto Pessoa na lista, passado como parmetro
b. Consultar Mtodo que recebe como parmetro uma string que ser o CPF e consulta a lista
retornando (caso encontre) o objeto com o CPF correspondente.
c. Remover Mtodo que recebe um CPF e remove o objeto Pessoa (caso encontre) com o CPF
informado.

13) Crie uma classe CadastroEstendido, que herde da classe Cadastro do exerccio anterior. Esta classe
dever ter:
a. Override do mtodo Inserir, verificando antes se j existe um objeto Pessoa com o CPF
informado se, j existir dever ser lanada uma exceo informado do erro.
b. Um mtodo esttico Salvar que receba como parmetro um nome de arquivo e um objeto do
tipo CadastroEstendido que realiza o serializao do objeto.
c. Desafio: Crie um mtodo esttico Carregar, que informado um nome de arquivo realize a de-
serializao do objeto e retorne o objeto CadastroEstendido

Pg.: 133/137
Prof. Daniel Oliveira

Anexos

Anexo A

Hierarquia do Eclipse

1) Workspace - a rea de trabalho que pode conter vrios projetos (aplicaes).

2) Project - um espao que pode conter um agrupamento de pacotes (package).

3) Package - agrupamento de classes afins - se no definido, usa o pacote default . Normalmente cada
programa seu ficar num Package;

4) Class - uma classe escrita dentro de um arquivo. Normalmente, os primeiros programas so compostos por
apenas uma classe.

Criao do primeiro programa: Os seguintes passos mostram a criao do projeto, pacote e classe,
respectivamente nos botes:

Obs: se estes botes no aparecem, selecione a opo Java dentro do boto Open Perspective acima e
direita.

Criao do projeto:
i Clique no boto New Java Project (ou selecione pelo menu: File - New - Project - Java Project - Next)
ii digite: Programas Algoritmo I (primeira letra sempre em maisculo).
iii Finish

Criao do pacote:
i Selecione o projeto que acabou de ser criado (janela Package Explorer esquerda)
ii Clique no boto New Java Package (ou selecione pelo menu: File - New - Package)
iii Digite: exercicio01 (primeira letra sempre em minsculo).
iv Finish

Pg.: 134/137
Prof. Daniel Oliveira

Criao da classe:

i Clique no boto New Java Class - Class (ou selecione pelo menu: File - New - Class)
ii Em name digite: Principal, para o nome da classe (primeira letra sempre em maisculo).
iii Como esta classe de execuo final ento ela deve possuir o mtodo main( ). Para isto
marque a caixa: public static void main (String[] args)
iv Finish
v Aparecer o seguinte cdigo:
public class Principal {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Pg.: 135/137
Prof. Daniel Oliveira

Anexo B

Uma outra forma de interagir com usurio (exibio de mensagens e obteno de valores) o
uso da classe JOptionPane. Esta uma classe que faz parte da biblioteca swing do Java
(componentes visuais do Java).

Para utilizar esta classe para obter informaes necessrio o uso do mtodo ShowInputDialog,
que diferentemente do scanner todas as informaes so retornadas em string e devem ser
convertidas para os tipos necessrios.

Para utilizar esta classe necessrio o seguinte comando de import:

import javax.swing.JOptionPane;

String name = "";


int age = 0;

name = JOptionPane.showInputDialog(null, "Informe o seu nome: ");


age = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a idade: "));

JOptionPane.showMessageDialog(null,
"Oi " + name + ". Voc tem "
+ age + " anos!");

Pg.: 136/137
Prof. Daniel Oliveira

Referncias

CORMEN, Thomas H.; LEISERSON, Charles Eric.; RIVEST, Ronald L.; STEIN, Clifford. Algoritmos:
teoria e prtica. Rio de Janeiro Campus, 2002. 916 p. ISBN 9788535209266

DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. 6. ed. So Paulo: Prentice Hall, 2005.
1110 p. ISBN 9788576050193

GOODRICH, Michael T.; TAMASSIA, Roberto,. Estruturas de dados e algoritmos em Java. 2. ed.
Porto Alegre, RS: Bookman, 2004. 584 p. ISBN 8536300434

Nki,Tecnhnologies; Eclipse User Guide. Disponvel em:


http://hotwork.sourceforge.net/hotwork/manual/eclipse/eclipse-user-guide.html. Acesso em:
Janeiro, 2012

TIEXPERT,Programao Java. Disponivel em:


http://www.tiexpert.net/programacao/java/math.php. Acesso em: Janeiro,2012

TONET, Bruno; KOLIVER, Cristian. Introduo aos Algoritmos. Disponvel em:


http://dein.ucs.br/napro/Algoritmo/manuais/ManualVisualg.pdf. Acesso em: Mar. 2004

ORACLE. Oracle Technology Network for Java Developers. Disponvel em: <
http://www.oracle.com/technetwork/java/index.html>. Acesso em: 16 Agosto de 2011.

ZIVIANI, Nivio. Projeto de algoritmos : com implementaes em Pascal e C. 4. ed. So Paulo:


Pioneira, 1999. 267 p. ISBN 8522101744

Pg.: 137/137

Вам также может понравиться