Você está na página 1de 266

!

" # " $ # %& # %% %'

()*+,-* ,) +.*/01/23- %' ()*+,-*)4 +*/.56./7-4 %' ()*+,-*)4 *)8+7/-9+/4 % ()*+,-*)4 8:;/7-4 %

< % = %> %? %! %"

@ '&

+44+;)5 ,) (+*A5).*-4 )5 +B+ '& -9B)*43- ,) /(-4 ) +4./9; '% -9B)*4C)4 1.-5D./7+4 '% +4. ,) /(-4 97-5(+.EB)/4 '% 4- ,- .)78+,- (+*+ + )9.*+,+ ,) ,+,-4 ' 8;-*/.5-4 )4-8B/,-4 '>

F @ '! '$

)8)23- /5(8)4 '$ )8)23- -5(-4.+ & )8)23- 97+,)+,+ ' )8)23- )97+,)+,+ G).)*-;H9)+ ' )8)23- )97+,)+,+ G-5-;H9)+ )8)23- ,) 5I8./(8+ )47-8J+ > 8;-*/.5-4 )4-8B/,-4 !

F

&

>

)()./23- 7-5 .)4.) 9- /9E7/- > )()./23- 7-5 .)4.) 9- K/9+8 " )()./23- 7-5 B+*/DB)8 ,) 7-9.*-8) $ -5(+*+23- )9.*) )4.*1.1*+4 ,) *)()./23- >& 1.*-4 )L)5(8-4 7-5(8)5)9.+*)4 >>

F ?" ! " #$

M # !> M !! F M # !$

" %

# G = "& # N O "&

)78+*+23- "& +9/(18+23- "&

# N P O $!

)78+*+23- $! +9/(18+23- $!

F P %&! % & ' %&" %&"

J+5+,+ ,) (*-7),/5)9.-4 %&$

M %%% # %%' %%

+*A5).*-4 K-*5+/4 %% +*A5).*-4 *)+/4 %%

%%

+44+;)5 ,) (+*A5).*-4 (-* B+8-* %% +44+;)5 ,) (+*A5).*-4 (-* *)K)*H97/+ %%

< P %'% ( " ' ) %' %' %'> %'? %'?

F %'! F % & F % ' F % >

% !

F % ! F % $ F % % F %

F P Q R Q % ? < %>'

* & ! '$+ %>? %>? %>? M %>?

8+44/K/7+23-S 94.+97/+23- %>? )9)*+8/T+23-S 4()7/+8/T+23- %>! ;*);+23-S )7-5(-4/23- %>" 44-7/+23- %?%

F # %?% ! '+

%?' %?' %?' %?' %? ! " ! '+$ %?? %!&

0U).-4R 56.-,-4 ) B+*/DB)/4 %!& ;*);+23- %!& )94+;)94 %!% 8+44)4 ) /94.A97/+4 %!' G)*+92+ %!' -0*)7+*;+ ,) ()*+,-*)4 ) -8/5-*K/45- %!

& , '#$ %!>

*/+9,- + 8+44) +/L+ %!> 4+E,+ ,- (*-;*+5+ 4)*D %!? B-815) ) % & & %!?

%!?

9781/9,- 15 6.-,- 9+ 8+44) +/L+ %!! ).-*9+9,- 15 +8-* %!" 9781/9,- 15 6.-,- 7-5 +*A5).*-4 V 8+44) +/L+ %!"

%!$ %"& P NO %"& - . ' ' %"% %"' < G %" < G %" - ' G %" G %" %">

(8/7+9,- + -0*)(-4/23- ,) 6.-,-4 %">

%"? * ' # %"!

*/+9,- 15 +7-.) %"! +*/DB)8 ,) 50/)9.) G %""

%"" %"$ %"$ / & '0

%$& %$% W< G %$% G Q %$% G Q %$' W %$ M M %$

%$ 1 2 '0$ %$>

.*)+54 ,) X.)4 ) ,) +*+7.)*)4 %$> .*)+54 *),)K/9/,+4 %$?

%$?

)/.1*+ ,) +*+7.)*)4 ,- )78+,- %$! )/.1*+ ,) .*/9;4 ,- )78+,- %$"

%$" %$" ** '

'&% # '&'

9/7/+23- ) /9+8/T+23- ,) 15 ((8). '&

'& G '& / 3 $ '&>

5 *)B) J/4.:*/7- '&> */97E(/-4 0D4/7-4 ,) 15 +50/)9.) +B+ 78D44/7- '&> -* )9.*- ,+ 8+.+K-*5+ +B+ '&! -5(/8+,-* ) 50/)9.) ,) L)7123- +B+ '&"

/ 0 '&$ '&$ '&$ '&$ '%& Y '%&

M '%& '%% '%' '%' # '%'

# '%

# '%

'%

# Z '%

M '%

'%> P '%>

% .*/9; '%> ' 8+44) [1) *)(*)4)9.+ ,+.+4 F U+B+ 1./8 ,+.) '%? 8+44)4 ,) 9.*+,+ ) +E,+ '%! /8) '%"

/

4567 86 9: ;<

= 6 > ?9: ;<@

A palavra lógica é originária do grego logos, que significa linguagem racional. De acordo com o
A palavra lógica é originária do grego logos, que significa linguagem racional. De acordo com o
dicionário Michaelis, lógica é a análise das formas e leis do pensamento, mas não se preocupa
com a produção do pensamento, quer dizer, não se preocupa com o conteúdo do pensamento,
mas sim com a forma deste, isto é, com a maneira pela qual um pensamento ou uma idéia são
organizados e apresentados, possibilitando que cheguemos a uma conclusão por meio do
encadeamento dos argumentos.
Os argumentos podem ser dedutivos ou indutivos. Os argumentos indutivos são aqueles com
que, a partir dos dados, se chega a uma resposta por meio de analogia, ou seja, pela comparação
com algo conhecido, porém esse tipo de raciocínio não oferece certeza de que a resposta será de
fato verdadeira. É necessário conhecer os fatos ou as situações para que se possa fazer a
comparação.
Já os argumentos dedutivos são aqueles cuja conclusão é obtida como conseqüência das
premissas, isto é, por meio da análise das situações ou fatos, pode-se obter a resposta. Trabalha-se
com a forma das sentenças, sem que haja necessidade do conhecimento prévio das situações ou
fatos.
Exemplos:
+O
todo mamífero é um animal.
todo cavalo é um mamífero.
portanto, todo cavalo é um animal.
b)
Kaiton é um país do planeta Stix.
Todos os Xipins são de Kaiton.
Logo, todos os Xipins são Stixianos.
c)
Gerson é cientista.
Todo cientista é estudioso.
Logo, Gerson é estudioso.
A lógica é a “arte do bem pensar”, que é a “ciência das formas do pensamento”. Visto que a
forma mais complexa do pensamento é o raciocínio, a lógica estuda a “a correção do raciocínio”.
Podemos ainda dizer que a lógica tem em vista a “ordem da razão”.
AB6C D 7 8< ?9: ;<
Estudo das técnicas de formalização, dedução e análise que permitam verificar a
validade de argumentos.
A lógica também objetiva a criação de uma representação mais formal, que se
contrapõe à linguagem natural, que é suscetível a argumentações informais.
= 6 > ?9: ;< 86 E : < <4F @

Significa o uso correto das leis do pensamento, da “ordem da razão” e de processos de raciocínio e simbolização formais na programação de computadores, objetivando racionalidade e o desenvolvimento de técnicas que cooperem para a produção de soluções logicamente válidas e coerentes, que resolvam com qualidade os problemas que se deseja programar. O raciocínio é algo abstrato, intangível. Os seres humanos têm a capacidade de expressa-lo através da palavra falada ou escrita, que por sua vez se baseia em um determinado idioma, que segue uma série de padrões (gramática). Um mesmo raciocínio pode ser expresso em qualquer um dos inúmeros idiomas existentes, mas continuará representando o mesmo raciocínio, usando apenas outra convenção.

Algo similar ocorre com a lógica de programação, que pode ser concebida pela mente treinada e pode ser representada em qualquer uma das inúmeras linguagens de programação existentes. Estas, por sua vez, são muito atreladas a uma grande diversidade de detalhes computacionais, que pouco têm a ver com o raciocínio original. Para escapar dessa “Torre de Babel” e, ao mesmo tempo, representar mais fielmente o raciocínio da lógica de programação, utilizamos os algoritmos.

= 6 > <?: C @

Um algoritmo pode ser definido como uma seqüência de passos que visam atingir um objetivo bem
Um algoritmo pode ser definido como uma seqüência de passos que visam atingir um
objetivo bem definido.
Quando elaboramos um algoritmo devemos especificar ações claras e precisas, que a partir
de um estado inicial, após um período de tempo finito, produzem um estado final previsível e bem
definido. Isto significa que o algoritmo fixa um padrão de comportamento a ser seguido, uma norma
de execução a ser trilhada, com vistas a alcançar, como resultado final, a solução de um problema,
garantindo que sempre que executado, sob as mesmas condições, produza o mesmo resultado.
E CGH; < 8< ; H7C 4F 86 <?: C 7
Representar mais fielmente o raciocínio envolvido na lógica de programação e, dessa
forma, permite-nos abstrair de uma série de detalhes computacionais, que podem ser
acrescentados mais tarde. Assim podemos focalizar nossa atenção naquilo que é
importante: a lógica da construção de algoritmos.
Uma vez concebida uma solução algorítmica para um problema, esta pode ser
traduzida para qualquer linguagem de programação e ser agregada das
funcionalidades disponíveis nos diversos ambientes; costumamos denominar esse
processo de codificação.
6E 676HC<4F 86 <?: C 7
Um algoritmo é uma linha de raciocínio, que pode ser descrito de diversas maneiras, como
por exemplo: pseudicódigo, descrição narrativa, fluxograma ou diagrama de Chapin.
Exemplo: Algoritmo para trocar lâmpadas (considerando 10 lâmpadas)
Descrição narrativa
Ir até o interruptor;
Enquanto a quantidade de soquetes testados for menor que dez, faça
Acionar interruptor;
Se a lâmpada não acender, então
Pegar uma escada;
Posicionar a escada embaixo da lâmpada;
Buscar uma lâmpada nova;
Acionar o interruptor;
Subir na escada;
Retirar a lâmpada queimada;
Colocar uma lâmpada nova;
Enquanto a lâmpada não acender, faça
Retirar a lâmpada queimada;
Colocar uma lâmpada nova;
Ir até o interruptor do próximo soquete;

Diagrama Chapin ou N-S

Ir para o primeiro soquete Soquetes testados < 10 Acionar o interruptor Lâmpada não acendeu? F
Ir para o primeiro soquete
Soquetes testados < 10
Acionar o interruptor
Lâmpada não
acendeu?
F
V
Pegar uma escada
Colocar a escada embaixo do
soquete
Buscar uma lâmpada nova
Acionar o interruptor
Subir na escada
Retirar a lâmpada queimada
Colocar a lâmpada nova
Lâmpada não acendeu?
Retirar lâmpada queimada
colocar lâmpada nova
Ir pa ra o próximo soquete
Pseudocódigo ou portugol
Inicio
Declaração de variáveis;
Enquanto (soquetes testados) < 10 faça
Acionar o interruptor;
Se (lâmpada não acendeu) então
Pegar uma escada;
Colocar a escada embaixo do soquete;
Buscar lâmpada nova;
Acionar interruptor;
Subir na escada;
Retirar a lâmpada queimada;
Colocar lâmpada nova;
Enquanto (lâmpada não acender) faça
Retirar lâmpada queimada;
Colocar lâmpada nova;
Fim enquanto;
Ir para o próximo soquete;
Fim se;
Fim enquanto;
Fim;

Fluxograma ou Diagrama em blocos

início

Fluxograma ou Diagrama em blocos início Ir para o primeiro soquete Soquetes testados < 10 Acionar

Ir para o primeiro soquete

Soquetes testados < 10
Soquetes testados
< 10
Acionar o interruptor
Acionar o interruptor
Lâmpada não acendeu? Pegar uma escada Colocar a escada embaixo do soquete Buscar a lâmpada nova
Lâmpada não
acendeu?
Pegar uma escada
Colocar a escada embaixo do
soquete
Buscar a lâmpada nova
Acionar interruptor
Subir na escada
Retirar a lâmpada queimada
colocar lâmpada nova
Lâmpada não
acendeu?
Retirar a lâmpada queimada
Colocar lâmpada nova
Ir para próximo soquete

fim

I6 ;J; 7 86 I<4F

1. Descreva com suas palavras o que você entende por:

ação;

processo; estado;

evento;

padrão de comportamento.

  • 2. Escreva um algoritmo para descrever como você faz para ir da sua casa até a Faculdade.

  • 3. O que você entende por aspecto estático e aspecto dinâmico de um algoritmo? Qual o conceito que relaciona estes dois aspectos?

  • 4. Quais são as três estruturas básica de controle com as quais podemos desenvolver qualquer algoritmo?

  • 5. O que é um programa?

  • 6. O que é um bom programa?

  • 7. Com relação as aspecto de documentação, qual a vantagem de se utilizar uma pseudolinguagem para desenvolvimento de programas?

H;6 C 7 A 7 ; 7 7 A 6 <?: C 7

O s dados são na verdade, os valores que serão utilizados para a resolução de um problema. Esses valores podem ser fornecidos pelo usuário do programa, podem ser originados a partir de processamentos (cálculos) ou, então, a partir de arquivos, bancos de dados ou outros

programas.

E 7 E C D 7

Para entender os tipos primitivos, voltemos nossa atenção para um conceito muito importante: informação. Informação é a matéria-prima que faz com que seja necessária a existência dos computadores, pois eles são capazes de manipular e armazenar um grande volume de dados com alta performance, liberando o Homem para outras tarefas nas quais seu conhecimento é indispensável. Os dados são armazenados temporariamente em variáveis para que sejam processados de acordo com as especificações do algoritmo. Para que haja integridade no resultado obtido, os dados devem ser classificados de acordo com o tipo do valor a ser armazenado na variável, isto é, para evitar problemas que podem ser ocasionados devido ao fornecimento de valores inadequados à operação que será realizada. Aproximando-nos da maneira pela qual o computador manipula as informações, vamos dividi- las em quatro tipos primitivos, que serão os tipos básicos que usaremos na construção de algoritmos. Como os dados manipulados pelos computadores durante a execução dos programas são armazenados na memória, esses tipos seguem características de formato e espaço disponível nessa memória. Definir o tipo de dados mais adequado para ser armazenado em uma variável é uma questão de grande importância para garantir a resolução do problema. Ao desenvolver um algoritmo, é necessário que se tenha conhecimento prévio do tipo de informação (dado) que será utilizado para resolver o problema proposto. A partir daí, escolhe-se o tipo adequado para a variável que representará esse valor. Na confecção de algoritmos, utilizamos os tipos de dados primitivos (literal, inteiro, real e lógico), uma vez que os algoritmos apenas representam a resolução dos problemas. Já na confecção de programas, existem desdobramentos para esses tipos de dados a fim de adequá-los melhor ao propósito de cada linguagem e à resolução prática dos problemas.

"< D6?

Um dado é classificado como variável quando tem a possibilidade de ser alterado em algum instante no decorrer do tempo, ou seja, durante a execução do algoritmo em que é utilizado, o valor do dado sofre alteração ou o dado é dependente da execução em um certo momento ou circunstância. Quando um algoritmo é transcrito para uma determinada linguagem de programação, as variáveis também terão a função de armazenar dados temporariamente, mas na memória RAM do computador. Esses dados serão utilizados durante o processamento para a resolução do problema em questão.

 

! " # " # "

$%

&

' ()$*'+ ($*,+

$% ()-* ,%'+ (-* ,%,+

 

 

 
 

.

-*

(* $/, /'- %/,+

()* $/, /'- %/'+

0

%/ ()1 **- -,* 2-% '3/ ,,3 '2'+ (1 **- -,* 2-% '3/ ,,3 '2,+

7 " 4

4

-* ()- /5)-'+ ()- /56-'+

 

" 0

%/ ()$ ,5)-2'+ (6$ ,56-2'+

80

4 (2+

($+

' ! " )

HC6 7

Java define quatro tipos inteiros: byte, short, int e long. Todos os tipos inteiros são sinalizados, ou seja, podem assumir valores positivos e negativos. Java não suporta tipos não sinalizados (inteiros somente positivos). O tamanho de um tipo inteiro não deve ser visto como a quantidade de memória para armazenar o dado e sim o comportamento apresentado pelo dado. O ambiente de execução Java pode utilizar qualquer tamanho de memória para armazenar o dado desde que o comportamento correto seja mantido. A variação dos valores que cada tipo de dado inteiro pode assumir é mostrada na tabela acima.

E 7 86 <8 7 86 * HC ? C <HC6 Os números de ponto flutuante, também conhecidos como números reais, são utilizados em operações que necessitam de precisão fracionária, tais como raiz quadrada, seno e cosseno. Java define dois tipos de dados de ponto flutuante: float e double, que representam números de precisão simples e dupla, respectivamente. A variação dos valores dos tipos de dados de ponto flutuante podem assumir é mostrado na tabela acima.

< <;C6 67

Em Java o tipo de dados utilizado para armazenar um caractere é o char. O tipo char em Java é diferente do char no C/C++. Em C/C++, char é um inteiro de 8 bits. Java utiliza o Unicode para representar seus caracteres. O Unicode define um conjunto de caracteres internacional que representa todos os caracteres encontrados em todos os idiomas humanos. É uma união de doze conjuntos de caracteres, como Latim, Grego e Árabe. Para isso os caracteres unicode necessitam de 16 bits para serem representados. Assim, em Java, os caracteres tem o tamanho de 16 bits variando de O a 65.536, não existindo valores para este tipo de dado.

?6<H 7

Para valores lógicos, Java possui o tipo boolean. Uma variável booleana pode assumir valor true (verdadeiro) ou false (falso). Este tipo de dado é retornado por todos os operadores relacionais, como a < b. Além disso, boolean é o tipo de dado requerido por condicionais que controlam estruturas de controle como if e for.

 
 

H7C<HC67

Entendemos que um dado é constante quando não sofre nenhuma variação no decorrer do tempo, ou seja, seu valor é constante desde o início até o fim da execução do algoritmo ou da execução do programa, assim como é constante para execuções diferentes no tempo.

Em Java, uma constante é uma variável declarada com o modificar final Por exemplo:

final float pi = 3.1415f;

\ 5-,/K/7+,-*)4 43- 1./8/T+,-4 (+*+ 5-,/K/7+* + +.*/01/23- ,) 78+44)4R B+*/DB)/4 -1 56.-,-4

86HC K ;<4F 8<7 D< D6 7 E< < < ? H: <:6 !<D<

Toda variável deve ser identificada, isto é, deve receber um nome ou identificador. O nome de uma variável deve ser único e deve estar de acordo com algumas regras. Em Java, os nomes para as variáveis são case-sensitive, isto é, nomes com letras maiúsculas são diferenciados de nomes com letras minúsculas. Por exemplo: soma_total é diferente de Soma_Total e também de Soma_total. Nomes devem começar com uma letra, um caractere 'sublinha' ou 'underline' (_) ou o símbolo cifrão ($). Os caracteres subseqüentes podem também ser algarismos. Não utilizar caracteres especiais, como acentos, símbolos (? / : # etc), ç, entre outros, exceto os acima citados. As letras podem ser maiúsculas ou minúsculas. Não podem ser utilizadas palavras reservadas, como final, float, for, int etc.

A linguagem Java exige que todas as variáveis tenham um tipo de dado definido antes de serem utilizadas no programa, ou seja, elas devem ser obrigatoriamente declaradas, independentemente do ponto do programa, tanto faz, seja no início, no meio ou no final, desde que seja antes de sua utilização no programa. Essa característica difere da maioria das linguagens de programação. Quando as variáveis são declaradas, a linguagem Java atribui a elas valores-padrão, a menos que especificado de maneira contrária pelo programador. Atribui-se a todas as variáveis dos tipos: char, byte, short, int long, long e double o valor 0 (zero) por default. Já as variáveis do tipo boolean, por default, atribui-se false. Entretanto, dependendo do ponto do programa em que a variável é utilizada, torna-se obrigatório sua inicialização com algum valor, mesmo com a linguagem possuindo esses valores padrão.

A forma básica de uma declaração é a seguinte:

tipo identificador [= valor], identificador [= valor],...

O tipo é um dos tipos elementares de Java, ou o nome de uma classe ou de um a interface. O identificador é o nome da variável. Uma variável pode ser iniciada especificando-se um sinal de igualdade e um valor. Para se declarar mais de uma variável do mesmo tipo basta utilizar uma vírgula como separador. A seguir são mostrados alguns exemplos de declarações de variáveis:

int a, b, c;

// declaração de três inteiros a, b,c

int d=1,e,f,g=2; // declaração de mais quatro inteiros

byte x = 22; double PI = 3.1416; char y = 'Y';

 
 

H ; <4F HG ;<

// iniciando d e g //inicia x com 22 // declara uma aproximação de PI // a variável x é iniciada com 'Y'

Embora os exemplos anteriores tenham exibido apenas variáveis sendo iniciadas com valores constantes, Java permite que as variáveis sejam iniciadas dinamicamente, utilizando expressões válidas no momento da declaração. Por exemplo, a seguir é mostrado um trecho de código onde é calculado o comprimento da hipotenusa de um triângulo retângulo com os valores dos dois catetos:

// demonstração de iniciação dinâmica class DinIni { public static void main(String args[]) { double cateto_oposto = 3.0, cateto_adjacente = 5.0; // hipotenusa é iniciado dinamicamente double hipotenusa = Math.sqrt(cateto_oposto*cateto_oposto + cateto_adjacente*cateto_adjacente); System.out.println("A hipotenusa é " + hipotenusa);

}

}

As variáveis cateto_oposto e cateto_adjacente são iniciadas por constantes. Entretanto, a variável hipotenusa é iniciada dinamicamente utilizando o Teorema de Pitágoras. O programa utiliza também o método embutido, sqrt(), que é um membro da classe Math, para calcular a raiz quadrada.

7; E 6 6 E 86 " 8< 86 < "< D6? Como dito anteriormente, Java permite que as variáveis sejam declaradas em qualquer bloco. Um bloco define um escopo. Assim, sempre que um novo bloco é iniciado, um novo escopo é criado. Um escopo define que objetos são visível para outras partes do código do programa. O escopo define também o tempo de vida de uma variável. Em linguagens procedurais existem dois tipos de escopo: global e local. Contudo, devido ao seu modelo orientado a objeto, estes tipos de escopo não se aplicam à Java. Em Java existem dois tipos principais de escopo, um é definido por uma classe e o outro é definido por um método. A seguir é mostrado um exemplo em Java mostrando estes conceitos:

 
 

// Demonstra o escopo de blocos class Escopo{ public static void main(String args[]) { int x; // acessível por todo o código dentro do método m x = 10; if (x == 10) { // início de um novo escopo int y - 20; // acessível apenas neste bloco

 

// x e y são acessíveis neste trecho

x - y

* 3;

 

} // y não é acessível fora do bloco "if" // x ainda é acessível neste trecho System.out.println("x é " + x); }

}

 

Um aspecto importante a ser lembrado é que as variáveis são criadas apenas quando o seu escopo é iniciado e são destruídas tão logo seu escopo chega ao fim. Isto significa, que uma variável não guardará seu valor uma vez que tenha saído do seu escopo. Assim, o tempo de vida de uma variável dura enquanto seu escopo estiver ativo.

6HC 7

Os comentários são linhas adicionadas ao programa que servem para facilitar seu entendimento por parte do programador, ou ainda por uma outra pessoa que consulte o programa. Essas linhas não afetam o programa em si, pois não são consideradas parte do código. O Java aceita três tipos de comentários: de uma linha, de múltiplas linhas e de documentação. Para inserir comentários de linha única utilizam-se // (duas barras) em qualquer local do programa e tudo o que estiver escrito depois deste sinal e na mesma linha será considerado um comentário. Para inserir comentários que envolvam várias linhas, utiliza-se /* (barra asterisco) para demarcar o início e */ (asterisco barra) para o final, ou seja, tudo o que estiver entre dois sinais será considerado comentário. O terceiro tipo é semelhante ao comentário de múltiplas linhas, entretanto tem o propósito de possibilitar a documentação do programa por meio de um utilitário (javadoc) fornecido pela Sun junto com o SDK. Esse tipo de comentário inicia-se com /** e é encerrado com */.

I6 E? \

/**Exemplo1:

Essa classe demonstra a utilização de variáveis em uma classe em Java. São declaradas as variáveis do tipo int e O exemplo também demonstra como imprimir o conteúdo das variáveis na tela. */

public class Exemplo1{

double.

public static void main (String args[]){

//declaração de variáveis do tipo inteiro

int x = 10, y = 20; double dolar = 2.92;

/* As linhas seguintes enviam o conteúdo das variáveis

para a tela */

System.out.println(x);

System.out.println(y);

System.out.println(dolar);

}

}

/**Exemplo2:

imprimindo múltiplas linhas de texto com uma única instrução */

public class Exemplo2{ public static void main (String args[]){

//o método main inicia a execução deo aplicativo java

System.out.println(“Bem\nvindos\nao\nJava”);

}

}

   

 

9

: " 8

9

; <# = " " 8 " <#

9

7 > # < " " 8 ? @ "

99

 

A " "

9B

C " " A " " " "

 

8;15+4 4)[]H97/+4 7-5194 ,) )47+()

E6 <8 67

 
 

Os operadores são utilizados para representar expressões de cálculo, comparação, condição e atribuição. Temos os seguintes tipos de operadores: de atribuição, aritméticos, relacionais e lógicos.

E6 <8 86 <C A 4F

 
 

São utilizados para expressar o armazenamento de um valor em uma variável. Esse valor pode ser pré-definido (variante ou não) ou pode ser o resultado de um processamento.

Ex:

 

nome = “fulano de tal”; resultado = a + 5; valor = 3;

C<\ (+*+ +8;-*/.5-4 (-,)5-4 1./8/T+* ^<< (+*+ /9,/7+* +.*/01/23-

 
 

E6 <8 67 < C >C ; 7

 

São utilizados para realização dos diversos cálculos matemáticos. São eles:

 

!

 

!

   

"

.

A ) " # " 6 $

66

C $ 5 " 66 ( " $ +> 66 ( $ ) +

D

A ) " # " ) $

))

$ 5 " )) (

E

E

" $ +> )) ( $ + E ( " " +

= " <# D #

F

F

F ( " +

!

 

!

   

"

5 " <#

G EE 5 " * - *G-

A

 

= 8

H

H (

"

# "

 

" 4

1

4 *

1 H *> # / ( + $+

C <#

6

6

6 ( +

<#

)

)

) ( +

 

E6 <8 67 6?<; H< 7

 

São utilizados para estabelecer uma relação de comparação entre valores ou expressões. O resultado dessa comparação é sempre um valor lógico (booleano) verdadeiro ou falso.

!

 

!

   

"

=

I

I

I ( 4 @ # 4 +

= 0

IJ

IJ

IJ ( 4 0 # 4 +

=

K

K

K ( 4 @ # 4 +

= 0

KJ

KJ

KJ ( 4 0 # 4 +

!

!

 

"

 

.0

LJ

LJJ

JJ ( 4 0

 

 

#

 

4

D 4

KI

MJ

MJ ( 4

 

4

#

4

 

E6 <8 67 ?9: ; 7

 
 

São utilizados para concatenar ou associar expressões que estabeleçam uma relação de comparação entre valores. O resultado dessas expressões é sempre um valor lógico (booleano) verdadeiro ou falso.

!

!

 

"

 

5

NN

C J 3 NN MJ 1 (

 

! 0 3

! 4 1 #

O

4 +

PP

C J 3 PP MJ 1 ( ! 0 3 ! 4 1 #

 

" <Q

4

4 +

#

#

M

M I 3 ( 4 @ 3

 

4

O +

<A6?<LD6 8<86

A tabela verdade expressa o conjunto de possibilidades existentes para a combinação de variáveis ou expressões e operadores lógicos. Veja o exemplo abaixo:

#$

   

!!

"

 

% & '

( )* +

% & ' ( )* +

% & ' ( )* +

% & '

#$

% && '

( "& +

% && ' , "& +

% && ' !! ( "& +

"% && '

-

R

R

R

R

S

.

R

S

S

R

S

   

S

R

S

R

R

S

S

S

S

R

* 6;68MH; < 8 7 E6 <8 67

As linguagens de programação normalmente estabelecem uma ordem de avaliação considerando a precedência dos operadores quando mais de um operador é usado em uma expressão. Veja abaixo a precedência dos operadores:

Os operadores são mostrados em ordem crescente de precedência, de cima para baixo:

% 66 )) 66 )) 6 ) M W ( " + E F H
%
66
))
66
))
6
)
M
W
( " +
E
F
H
6
)
(
+
T
&
<#
8 )
8 )
)
)
=
=
: 0 <# 80
O "
D @ "
U
V
D " @
D " @
O
<#
= " <#
D #
= 8
D @ "
C <#
<#
D @ "
%
KK
D " @
D "
#
D "
#
D @ "
II
III
K
7
@
D @ "
KJ
7 0
I
7 @
7 0
IJ
. 4
JJ
MJ
O " <# "
7
0
D @ "
7 # 0
N
G
5
A
A
80
D @ "
D @ "
P
A
A 80
D @ "
NN
PP
5 80
A 80
X
;
J
C
<#
D @ "
D @ "
D " @
D " @
6J
C
<#
)J
C
<#
<#
<#
EJ
C <# " <#
FJ
C <# #
C <# 8
HJ
NJ
C
<#
5
GJ
C <# A
C <# A
C <# " @
C <# "
#
PJ
KKJ
IIJ

IIIJ

C <# "

#

De maneira geral, temos:

Parênteses mais internos Operadores aritméticos Operadores relacionais Operadores lógicos

class Exemplo3{

public static void main (String args[]){

//declaração e inicialização de variáveis

int x = 10, y = 3;

// várias operações com as variáveis

System.out.println(“x = “+ x); System.out.println(“y = “+ y); System.out.println(“-x = “ +(-x)); System.out.println(“x/y = “ +(x/y)); System.out.println(“Resto de x por y = “ +(x%y)); System.out.println(“Inteiro de x por y = “ +(int)(x/y)); System.out.println(“x + 1 = “ +(++x));

}

}

6: <7 E< < ; <4F 86 A H7 <?: C 7

Use comentários com freqüência. Isto torna o algoritmo mais legível e facilita o entendimento da lógica empregada. Seus algoritmos deverão ser lidos e entendidos por outras pessoas (e por você mesmo) de tal forma que possam ser corrigidos e receber manutenção.

Obs: Não se esqueça de atualizar os comentários, em caso de manutenção. Pior do que um programa sem comentários, é um programa com comentários errados.

Use comentários, também, no cabeçalho do algoritmo, incluindo, principalmente:

 

o

o

o

descrição do que faz o algoritmo

autor

data de criação

Escolha nomes de variáveis significativos, todavia evite nomes muito longos.

Ex:

Prefira SalBruto ou SalarioBruto ao invés de SB ou VAR1

 

Prefira TotAlunosAprovDireta ao invés de TotalAlunosAprovacaoDireta

Destaque as palavras-chave das estruturas de controle e comandos com sublinhado.

Ex:

se media >= 7 então

 

...

 

senão

 

...

 

fim-se

Utilize espaços e linhas em branco para melhorar a legibilidade.

Coloque apenas um comando por linha. Vários comandos em uma linha causa ilegibilidade e

dificulta a depuração. Utilize parênteses para aumentar a legibilidade e prevenir-se de erros.

Use identação nos comandos de acordo com o nível que estejam, ou seja, alinhe comandos de mesmo nível e desloque comandos de nível inferior.

Ex.:

início comando 1; se condicao1 então

comando2;

comando3;

senão

comando4;

comando5;

fim-se

comando6;

fim

>C 8 E< < 8676HD ?D 6HC 86 <?: C 7

  • 1. Faça uma leitura de todo o problema até o final, a fim de formar a primeira impressão. A

seguir, releia o problema e faça anotações sobre os pontos principais.

  • 2. Verifique se o problema foi bem entendido. Questione, se preciso, ao autor da especificação

sobre suas dúvidas. Releia o problema quantas vezes for preciso para tentar entendê-lo.

  • 3. Extraia do problema todas as suas saídas.

  • 4. Extraia do problema todas as suas entradas.

  • 5. Identifique qual é o processamento principal.

  • 6. Verifique se será necessário algum valor intermediário que auxilie a transformação das

entradas em saídas. Esta etapa pode parecer obscura no início, mas com certeza no desenrolar do

algoritmo, estes valores aparecerão naturalmente.

  • 7. Teste cada passo do algoritmo, com todos os seus caminhos para verificar se o

processamento está gerando os resultados esperados.

  • 8. Crie valores de teste para submeter ao algoritmo.

  • 9. Reveja o algoritmo, checando as boas normas de criação.

I6 ;J; 7 86 K I<4F

  • 1. Dadas as expressões a seguir, identificar o resultado verdadeiro ou falso que cada uma delas retornaria, em função dos valores dados. Supondo A = 2 e B = 7.

    • a) A = 3 .e. B = 7

    • b) A < 3 .ou. B <> 7

  • c) A <= 2 .e. B = 7

    • d) .não. A = 2 .e. B = 7

    • e) A < 5 .e. B > 2 .ou. B <> 7

  • 2. Verifique se as variáveis abaixo possuem nomes corretos e justifique as alternativas falsas:

    • a) b) tempo

    n#1

    c) n_1

    d) $din

    e) n 1

    • f) K2K

    g) n1

    h) U F

    i) 2nome

    j) dep

    • k) l) val#r

    nome2

    • 3. Sabe-se que o uso incorreto da precedência de operadores ocasiona erros. Pensando nisso, avalie as expressões a seguir e:

      • a) classifique a ordem em que as operações devem ser executadas;

      • b) determine o resultado das operações.

    Considere os seguintes valores para as variáveis:

    A <-- 8; B <-- 5; C <-- -4; D <-- 2

    • a) Delta <-- B 2 – 4 * A * C

    • b) J <-- “Hoje” <> “HOJE”

    • c) Media <--(A + B + C+ D)/4

    • d) Media <-- A + B + C + D/4

    • e) Resultado <-- A mod D/5

    • f) Resultado <-- (A mod D)/5

    • g) X <-- (A + B) – 10 * C

    • h) X <-- A + B – 10 * C

    • i) Y <-- A > 8 .e. B + C > D

    • j) Y <-- A > 3 * 2 .OU. B + C <> D

      • 4. Considere a seguinte atribuição de valores para as variáveis:

    A <-- 3, B <--4 e C <-- 8

    • a) A > 3 .e. C = 8

    • b) A <> 2 .ou. B <= 5

    • c) = 3 .ou. B >= 2 .e. C = 8

    A

    • d) A = 3 .e.

    .nâo. B >= 4 .e. C = 8

    • e) A <> 8 .ou. B = 4 .e. C > 2

    • f) B > A .e. C <> A

    • g) A > B .ou. B < 5

    • h) A <> B .e. B = C

    • i) C > 2 .ou. A < B

    • j) A > B .ou. B > A .e. C <> B

      • 5. Complete a tabela-verdade a seguir:

    # 5 " # C J / KI 3 C J / KI 3 C
    #
    5
    " #
    C J /
    KI 3
    C J / KI 3
    C J / KI 3
    # C J /
    7
    "
    • 6. Construa a tabela-verdade para as expressões:

      • a) A >= 3 .ou. B = 5

      • b) A <> 9 .e. B <= 6

      • c) .não. A = 2 .OU. B >= 1

      • d) A > 3 .e. B <> 5 .ou. C < 8

        • 7. Dada a declaração de variáveis:

    A,B,C

    :inteiro;

    x,y,z

    : real;

    Nome, Rua

    :literal;

    L1

    : lógico;

    e atribuindo-se a essas variáveis os valores:

    A <-- 1 B <-- 2

    X <-- 2.5 Y <-- 10.0

    Nome <-- “Pedro” Rua <-- “Girassol”

    C <-- 3

    Z <-- -1.0

    L1 <-- .v.

    Determine o resultado das expressões a seguir:

    • a) Nome = Rua

    • b) X > Y .e. C <= B

    • c) (C – 3 * A) < (X + 2 * Z)

    • d) ((Y/2) = X) .ou. ((B * 2) >= (A + C))

    • e) .não. L1

    • f) .não. C = B .e. X + Y <= 20 .OU. L1 <> .v.

    7C C <7 86 ; HC ?6

    N a criação de algoritmos utilizamos os conceitos de blocos lógicos, entrada e saída de dados,
    N a criação de algoritmos utilizamos os conceitos de blocos lógicos, entrada e saída de dados,
    variáveis, constantes, atribuições, expressões lógicas, relacionais e aritméticas, bem com
    comandos que traduzam esses conceitos de forma a representar o conjunto de ações.
    Para que esse conjunto de ações se torne viável, deve existir uma perfeita relação lógica
    intrínseca ao modo pelo qual essas ações são executadas, ao modo pelo qual é regido o fluxo de
    execução do algoritmo.
    Através das estruturas básicas de controle do fluxo de execução – sequenciação, seleção,
    repetição – e da combinação delas, poderemos criar algoritmos para solucionar nossos problemas.
    Quando fazemos um programa, devemos saber construí-lo para prever qualquer intenção que
    o usuário tenha ao utilizar esse programa.
    É importante ressaltar a seqüência de fatos que fundamentam a lógica computacional: a
    entrada de dados que serão processados para obter a saída. Os dados que entram em
    processamento sofrem transformações resultantes do processo e uma saída é produzida,
    representando a solução de um problema.
    ENTRADA
    PROCESSAMENTO
    SAÍDA
    7C C < 6=N6H; <?
    A estrutura seqüencial de um algoritmo corresponde ao fato de que o conjunto de ações
    primitivas será executado em uma seqüência linear de cima para baixo e da esquerda para a direita,
    isto é, na mesma ordem em que foram escritas. Convencionaremos que as ações serão seguidas por
    um ponto-e-vírgula (;), que objetiva separar uma ação da outra e auxiliar a organização seqüencial
    das ações, pois após encontrar um (;) deveremos executar o próximo comando da seqüência.
    Mostramos abaixo o modelo geral de um algoritmo:
    HJ; SS /,)9./K/7+23- ,- /9E7/- ,- 08-7- 7-**)4(-9,)9.) +- +8;-*/.5-
    SS ,)78+*+23- ,+4 B+*/DB)/4
    SS 7-*(- ,- +8;-*/.5-
    +23- %_
    +23-
    '_
    +23- _
    +23-
    9_
    K SS K/5 ,- +8;-*/.5-

    *<77<:6 86 E< G 6C 7 6 !<D<

    Uma aplicação Java pode receber valores a partir da linha de comando, isto é, no momento em que ele é executado. Quando um parâmetro é recebido por um programa, ele pode ser manipulado internamente e usado em um procedimento qualquer. O exemplo a seguir, demonstra a utilização da passagem de parâmetros a um programa. Este exemplo apresenta na tela as palavras que o usuário digitar no momento da execução do programa por meio da linha de comando.

    I6 E? )\

    class Exemplo4{ public static void main (String args[]){ System.out.println(args[0]); //imprima o 1º argumento na tela; System.out.println(args[1]); //imprima o 2º argumento na tela;

    }

    }

    Ao executar o exemplo4, o usuário deve colocar o comando no seguinte formato:

    java Exemplo4 argumento1 argumento2

    Exemplo:

    java Exemplo4 Aprendendo Java

    Os argumentos passados na linha de comando sempre se referem a “variáveis” do tipo String devido à sintaxe utilizada no método principal (main), ou seja, args é um vetor de String. Por esse motivo, mesmo que sejam passados números como parâmetros, eles serão considerados como caracteres.

     
     

    HD6 7F 86 E 7 6 <7C H:

    Como vimos anteriormente, todos os dados recebidos como argumentos em uma aplicação referem-se a valores do tipo String. Essa característica gera um inconveniente no caso de ser necessária a utilização de valores de outro tipo. Em diversos tipos de programas em Java, necessita- se realizar a conversão entre os diversos tipos primitivos existentes. Em programação é comum atribuir a uma variável de um tipo um valor de outro tipo. Sempre que os dois tipos forem compatíveis, a conversão será feita automaticamente em Java. Por exemplo, é sempre possível atribuir a uma variável long um valor do tipo int. Contudo nem todos os tipos são compatíveis e, portanto, nem todas as conversões são feitas automaticamente. Por exemplo, não existe nenhuma convenção definida de double para byte. Felizmente, é possível converter tipos que a princípio são incompatíveis. Para tanto, basta fazer uso do cast, que executa uma conversão de tipos de forma explícita.

    HD6 7567 C C ;<7

    Quanto um tipo de dados é atribuído a uma variável de outro tipo, uma conversão automática de tipos é feita desde que estas duas condições sejam satisfeitas:

    Os dois tipos são compatíveis.

    • O tipo de destino é maior do que o tipo de origem.

    Por exemplo, um long (64 bits) sempre poderá receber um int (32 bits), um short (16 bits) ou um byte (8 bits). Isto porque são todos compatíveis (tipos inteiros) e o long do que todos os outros.

    <7C 86 E 7 H; E<CJD6 7

    Embora a conversão automática de tipos seja de grande ajuda, ela não atende todas as

    necessidades. Por exemplo, uma conversão de int para byte não é automática pois, embora sejam tipos compatíveis, o byte é menor do que o int. Nestes casos, pode-se utilizar o cast para fazer a conversão de forma explícita da seguinte forma:

    (tipo desejado) valor A seguir é mostrado um exemplo de casting e de conversão automática de tipos:

    class Conversao{

    public static void main(String args[]) {

    byte

    b = 2;

    int

    i;

    double d - 2.987;

    //conversão automática de byte para int i = b; System.out.println("Conversão de int para byte."); System.out.println("i = " + i + " e b » " + b); // conversão forçada de double para int i = (int) d; System.out.println("Conversão de double para int."); System.out.println("d = " + d + " e i = " + i);

    }

    }

    Este programa sera a seguinte saída:

    Conversão de int para byte. i = 2 e b = 2 Conversão de double para int. d = 2.987 e i = 2

    A linguagem Java possui uma série de classe que realizam essa tarefa de conversão. Segue abaixo tabela mostrando essa tarefa:

     

    # "

    $

     

    % # & '

     

    J $2

     

    4

    4

    & J (4 +

    J $2

     

    & J ( +

    4

    J $2 3

    & J ( +

    0

    J Y$2B

    0

    0

     

    & J . 0 " . ( +

    J Y*2 3/B

    4

    & J S " S ( +

    J Y*2 3/B

    & J D " D ( +

    0 J Y! B

     

    R &

    & UV J 0 & (+

    J $2

     

    0

    0 & J 0 4( +

    4

    J $2 -3

    0

    0 & J 0 4( +

    J *3/ -3

     

    0

    0 & J 0 4( +

    & UV )( & +

    0

    0 & J Z 0( +

    O exemplo 5 demonstra a criação de uma classe que recebe três valores da linha de comando (nota1, nota2 e trabalho) e calcula a média entre as notas, utilizando para isso o conversor de tipo String para double. Para que este exemplo seja executado com sucesso, existe a necessidade de o usuário entrar com três dados numéricos na linha de comando, conforme mostrado abaixo:

    I6 E? $3
    I6 E? $3

    class Exemplo5{ public static void main (String args[]){ double nota1, nota2, trabalho, media; nota1 = Double.parseDouble(args[0]); nota2 = Double.parseDouble(args[1]); trabalho = Double.parseDouble(args[2]); media = (nota1+ nota2 + trabalho)/3; System.out.println(“Media = “+ media);

    }

    7 8 C6;?<8 E< < < 6HC <8< 86 8<8 7

    Apesar de uma aplicação provavelmente não necessitar receber dados pelo prompt durante a execução do programa, pois existem meios mais eficientes de fazer isso, é interessante verificar como é possível entrar com dados via teclado. O exemplo 5 ilustra a resolução do problema apresentado no exemplo 4 utilizando entrada via teclado:

    I6 E? +3

    import java.io.*; class Exemplo6{ public static void main(String args[]){ String s = " "; float nota1 =0, nota2 =0, trabalho=0, media=0; DataInputStream dado; try{ System.out.println("Entre com a nota 1"); dado = new DataInputStream(System.in); s = dado.readLine(); nota1 = Float.parseFloat(s);

    System.out.println("Entre com a nota 2"); dado = new DataInputStream(System.in); s = dado.readLine(); nota2 = Float.parseFloat(s);

    System.out.println("Entre com a nota do trabalho"); dado = new DataInputStream(System.in); s = dado.readLine(); trabalho = Float.parseFloat(s);

    media = (nota1+ nota2+ trabalho)/3; System.out.println("Media = "+ media); } catch(IOException e) { System.out.println("Houve erro na entrada de dados"); } catch(NumberFormatException e) { System.out.println("Houve erro na conversao, digite apenas caracteres numericos"); }

    }

    }

    Uma breve explicação do exemplo:

    A linha 1 contém uma diretiva de compilação, isto é, contém um apontamento para uma classe externa que será usada durante o processo de compilação. A instrução import indica que um determinado pacote de classes deve ser carregado no momento da compilação. Isso é necessário quando uma classe precisa utilizar recursos já definidos em outras classes. Neste exemplo está sendo chamado o pacote java.io que contém uma série de classes especializadas em entrada e saída de dados. No exemplo está sendo usada a classe DataInputStream que pertence ao pacote java.io. Entenda o pacote como um grupo de classes de mesmo tipo armazenadas em uma pasta qualquer. O asterisco presente em import java.io.* indica que devem ser carregadas todas as classes presentes no pacote java.io. Uma alternativa é realizar a declaração da seguinte forma:

    import java.io.DatInputStream, indicando que será utilizada apenas a classe DataInputStream. A linha 8 declara um objeto chamado dado a partir da classe DataInputStream. DataInputStream é uma classe que possibilita a entrada de dados via teclado. A linha 9 contém o bloco try (tente). Um bloco constitui-se num trecho de código delimitado por abre e fecha chaves. O bloco try sempre atua em conjunto com um ou vários blocos catch. O interpretador Java tentará executar o bloco try e se algum erro ocorrer, a execução do programa será desviada para um dos blocos catch, dependendo do erro gerado na aplicação. Neste exemplo poderá ocorrer um erro de entrada de dados pelo teclado (IOException) e um erro na conversão de String em float (NumberFormatException).

    Na

    linha

    12

    o

    objeto

    dado

    recebe

    o

    que

    foi

    digitado

    pelo

    usuário

    por

    meio

    de

    new

    DataInputStream(System.in). Esta linha pode gerar algum tipo de erro, uma vez que manipula troca de dados entre um periférico (teclado) e a memória. Caso ocorra algum erro, a execução do programa será desviado para a linha 29 que trata de erros de entrada e saída de dados. Na linha 13, a variável s recebe o conteúdo do objeto dado (o que foi digitado pelo usuário). Na linha 14, o conteúdo da variável s é convertido em uma variável numérica do tipo float por meio de Float.parseFloat. Neste momento pode ocorrer um erro de conversão, caso o usuário tenha digitado um conteúdo diferente de número. Caso ocorra algum erro, a execução do programa será desvida para a linha 33 que trata de erros de conversão de tipos.

    I6 E? #3

    Neste exemplo o programa pergunta qual é o nome do usuário e o escreve novamente na tela.

    import java.io.*; class Exemplo7{ public static void main(String args[]){ BufferedReader entrada; entrada = new BufferedReader (new InputStreamReader System.in)); String nome; try{ System.out.println("Qual o seu nome?"); nome = entrada.readLine(); System.out.println(nome); } catch(Exception e) { System.out.println("Houve erro durante a leitura"); }

    }

     

    }

     
     

    Uma breve explicação do exemplo:

    A cláusula import indica a utilização do pavote de entrada e saída de dados (java.io.*) da linguagem Java nesse programa. Embora isso seja desnecessário para a saída de dados, a linguagem requer um tratamento de entrada de dados para sua leitura correta. class Exemplo6 indica o nome do programa e, novamente, public static void main (String args[]) indica o bloco de instruções que serão executados quando o programa for requisitado pelo usuário. Nas linhas 4 e 5 estão a declaração e a criação da variável entrada que será utilizada para a leitura do teclado. Isso é necessário para garantir que a leitura seja armazenada na memóira com o formato de uma seqüência de caracteres (String) para que seu valor possa ser manipulado senmpre da mesma forma. A vantagem dessa sintace é que o programador pode utilizar apenas uma varipavel de entrada e depois convertê-la para os valores desejados quantas vezes forem necessárias. A variável nome está sendo declarada para receber e armazenar na memória o valor escrito pelo usuário. Como se deseja a entrada de um texto, ela é declarada como do tipo String. As linhas 11, 12 e 13 definem um bloco de tratamento de erros característico da linguagem Java. Sempre que houver entrada de dados na linguagem Java, um tratamento de erros similar será necessário. A variável nome recebe, por meio do método readLine(), o valor que o usuário escreveu. A variável entrada é um objeto que permite a utilização desse método para leitura. Essa maneira de chamar métodos é típica da orientação a objetos. Após a leitura da variável, ela é mostrada na tela como saída de dados.

    " & \

     

    A linguagem Java possui um pacote de classes padrão que é carregada toda vez que uma classe é compilada. Trata-se do pacote java.lang. Caso esse pacote defaut não fosse carregado automaticamente, mesmo para enviar qualquer informação na tela por meio de System.out.println, seria necessário declarar explicitamente a diretiva. No caso da classe System, seria necessária a seguinte declaração: import java.lang.System.

    A utilização do * não gera overhead (sobrecarga) no programa e normalmente é utilizado para reduzir o tamanho do código. A utilização do * pode gerar uma certa confusão, uma vez que ele deve ser usado apenas para identificar um grupo de classes e não um grupo de pacotes. Por exemplo, suponha que um programa utiliza os pacotes java.util.* (o asterisco indica todas as classes do pacote util) e java.net.* (o asterisco indica todas as classes do pacote net). Não é possível utilizar java.* achando que os dois pacotes (util e net) serão incorporados ao programa.

    I6 E? 7\

    • a) Construa um algoritmo que calcule a média aritmética entre quatro notas semestrais quaisquer fornecidas por um aluno (usuário).

    • b) Construa um algoritmo que calcule a quantidade de latas de tinta necessárias e o custo para pintar tanques cilíndricos de combustível, em que são fornecidos a altura e o raio desse cilindro. Sabendo que:

    A lata de tinta custa R$ 50,00;

    Cada lata contém 5 litros;

    Cada litro de tinta pinta 3 metros quadrados.

    • c) Construa um algoritmo para calcular as raízes de uma equação do 2º grau (ax 2 + bx + c), sendo que os valores de a, b e c são fornecidos pelo usuário (considere que a equação possui duas raízes reais).

    • d) Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer do plano P(x 1 ,y 1 ) e Q(x 2 ,y 2 ), imprima a distância entre eles.