Escolar Documentos
Profissional Documentos
Cultura Documentos
So Domingos
40
Fundamentos de Programao
em
Java
guia prtico
Luanda, 2011
40
Princpios da programao na
linguagem Java
Como qualquer linguagem de programao, a linguagem Java tem
regras estritas indicando como os programas devem ser escritos.
bom ter familiaridade com a sintaxe da linguagem, aprendendo a
reconhecer e definir os tipos primitivos, identificadores e expresses
em Java
Antes de comear
Convenes do Cdigo Java
a) Classes: O nome da classe deve ter a inicial maiscula e as demais
minsculas. Quando voc utiliza dois nomes, as iniciais devem ser
maisculas.
class MeuPrimeiroPrograma
b) Interfaces: A mesma regra aplicada s classes
c) Mtodos: Devem iniciar com letra minsculas e as iniciais das
prximas palavras devem ser maisculas.
informeSalario()
d) Variveis: Devem iniciar com letra minsculas e as iniciais das
prximas palavras devem ser maisculas.
clienteCorrente
e) Constantes: Devem ser todas em maisculas, com as palavras
separadas por sublinhado.
IDADE_MAXIMA 40
f) Utilizar identao de cdigo
g) boa prtica comentar o cdigo!
Palavras Reservadas
Tipos de Dados
Quadro Resumo
40
Variveis
Uma varivel um espao reservado na memria do computador
para armazenar um determinado tipo de dado.
Uma Varivel: objeto que pode assumir diversos valores; espao
de memria de um certo tipo de dado associado a um nome para
referenciar o seu contedo
A varivel o ncleo de um objecto. Varveis so espaos nomeados
na memria que armazenam valores e para cada espao de memria 40
associado um nome (identificador) e o tipo de valor a ser
armazenado, dentre os tipos primitivos temos o tipo numricos,
caracteres, boobelanos e referencia.
Uma varivel representa a unidade bsica de armazenamento
temporrio de dados e composta por um tipo, um identificador
(nome), um tamanho e um valor.
Declarao de Variveis
Sintaxe
>> tipo de dado nomeDaVarivel; ou
>> tipo nome1, nome2,...,nomen
Constantes
As constantes podem ser declaradas em qualquer lugar dentro de
uma classe ou de um mtodo.
Para definir uma constante no Java, utiliza-se o modificador final e,
no seu identificador, todas as letras devem ser maisculas (de acordo
com a conveno de codificao). O seu contedo uma vez atribudo
no poder mais ser alterado.
A sintaxe para a definio de constantes :
[modificador de acesso] static final tipo idetificador = valor;
Exemplo
Inicializao de variveis.
Inicializar uma varivel atribuir um valor varivel
Sintaxe: A sintaxe para a inicializao de variveis :
tipo var_1 = valor_1 [, var_2 = valor_2, ...]
Onde tipo o tipo de dado, var_1 o nome da varivel a ser
inicializada e valor_1 o valor inicial da varivel.
Operador e atribuio
Para se inicializar uma varivel utiliza-se o operador de atribuio =
importante notar que, em java, o operador de igualdade tem
outra notao ==.
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0D
char \u0000
boolean false
Referncias a null
Objectos
Programa(s) introducao.TiposPrimitivos.java
Demonstrao
/**
* Demonstrao de Tipos Primitivos
*/
package introducao;
}
}
Comentrios
Comentrios em Java podem ser expressos em trs formatos
distintos. Na primeira forma, uma
barra dupla // marca o incio do comentrio, que se estende at o
fim da linha. A segunda forma o comentrio no estilo C tradicional,
onde o par de smbolos /* marca o incio de comentrio, que pode se
estender por diversas linhas at encontrar o par de smbolos */, que
delimita o fim do comentrio.
O outro estilo de comentrio especfico de Java e est associado
gerao automtica de documentao do software desenvolvido.
Nesse caso, o incio de comentrio delimitado pelas sequncias de
incio /** e de trmino */. O texto entre essas sequncias ser
utilizado pela ferramenta javadoc para gerar a documentao do
cdigo em formato hipertexto.
Para gerar esse tipo de documentao, os comentrios devem estar
localizados imediatamente antes da definio da classe ou membro
(atributo ou mtodo) documentado. Cada comentrio pode conter
uma descrio textual sobre a classe ou membro, possivelmente
incluindo tags HTML, e directrizes para o programa javadoc. As 40
diretrizes para javadoc so sempre precedidas por @, como em @see
nomeClasseOuMembro que gera na documentao um link para a
classe ou membro especificado, precedido pela frase See also .
A documentao de uma classe pode incluir as directrizes @author,
que inclui o texto na sequncia como informao sobre o autor do
cdigo na documentao; e @version, que inclui na documentao
informao sobre a verso do cdigo.
A documentao de um mtodo pode incluir as directrizes @param,
que apresenta o nome e uma descrio de cada argumento do
mtodo; @return, que apresenta uma descrio sobre o valor de
retorno; e @exception, que indica que excepes podem ser lanadas
pelo mtodo.
Quadro Resumo
// este um comentrio monolinha; termina no fim desta linha
/* este multilinha; s termina quando aparecer o delimitador
final */
/** este um comentrio de documentao para a ferramenta
javadoc */
Operadores
Veremos agora os operadores da linguagem Java, que agregam
importantes funcionalidades aos programas.
Eles possuem uma ordem de precedncia na execuo da expresso.
Para alterar a ordem de precedncia deve-se, agrupar as expresses
com parnteses.
Atribuio
Sintaxe:
identificador = valor ou expresso;
onde identificador o nome de uma varivel e expresso uma
expresso vlida (ou outro identificador).
Exemplo:
a = 1;
delta = b * b - 4. * a * c;
i = j;
= ==
o smbolo "=" representa o comando de atribuio.
o smbolo "==" representa o sinal de igualdade.
Atribuio Composta
Para facilitar a programao, Java oferece um tipo de atribuio
chamada atribuio composta. Esse tipo de atribuio pode ser
utilizado quando se deseja atribuir a uma varivel X, o valor de X
adicionado a 10, por exemplo.
Exemplos:
x += 10; // Equivale x = x + 10;
x += y; // Equivale x = x + y;
a -= b; // Equivale a = a b;
a *= 3; // Equivale a = a * 3;
40
Concatenao de Strings
O operador + executa uma concatenao de objetos de Strings,
gerando uma nova String.
String tratamento = Sra. ;
String nomeCompleto = Marta Rocha;
String saudao = tratamento + nomeCompleto;
Operadores aritmticos
So utilizadas para criar expresses aritmticas. Expresses que
resultam num valor numrico
Operador Ao
aritmtico
- Subtrao
+ Adio
* Multiplicao
/ Diviso
% Resto inteiro da diviso
-- ++ Decremento/incremento
40
Operadores relacionais
Operado Ao
r
> Maior que
>= Maior ou igual a
< Menor que
<= Menor ou igual
== Igual a
!= Diferente de
Operadores Lgicos
So utilizadores para combinar o valor lgicos de duas ou
mais expresses booleanas. So operadores utilizados em
comandos que tem mais de uma condio.
Operadores lgicos
Operador Ao
lgica
&& ou & AND (e)
|| ou | OR (ou)
! NOT (no)
p q p&&q p||q !q !p
0 0 0 0 1 1
0 1 0 1 0 1
1 0 0 1 1 0
1 1 1 1 0 0
Exerccios
Qual o resultado da expresso
a) !0 && 0 || 0 b) !(0 && 0) || 0
10>5 && !(10<9) || 3<=4
Incremento ++
Decremento --
X Y X Y
10 10 y = x++ 11 10 y=xx=
x+1
10 11 y = ++x 11 11 x = x+1 y =
x
10 10 y = x -- 9 10 y=xx=x
1
10 9 y = -- x 9 9 x = x -1 y = x
Linearizao de expresses
Uma expresso em Java qualquer combinao vlida de operadores
(aritmticos, relacionais, lgicos), constantes, variveis e mtodos.
Exemplo: c = Math.sqrt (a) + b / 3.4;
Operador Aco
40
import java.util.Scanner;
s = JOptionPane.showInputDialog("String: ");
int x = Integer.parseInt(s);
JOptionPane.showMessageDialog(null, "Inteiro: " + x,
"Resultado", JOptionPane.PLAIN_MESSAGE);
// JOptionPane.showMessageDialog(null, "Inteiro: " + x);
// funciona tambm, pois os dois ltimos argumentos podem
ser suprimidos
System.exit(0);
}
}
Sintaxe:
JOptionPane.showMessageDialog(null, x = + x, Ttulo,
JOptionPane.PLAIN_MESSAGE);
import java.util.Scanner;
Controlo de Fluxo
O Controle de fluxo a habilidade de ajustar a maneira como um
programa realiza as suas tarefas. Por meio de estruturas e instrues
especiais, essas tarefas podem ser executadas selectivamente,
repetidamente ou excepcionalmente. No fosse o controlo de fluxo,
um programa poderia executar apenas uma nica sequncia de
tarefas, perdendo completamente uma das caractersticas mais
interessantes da programao: a dinmica.
Em java podemos classificar a estruturas de controlo de fluxo em
basicamente quatro categorias:
Categoria Estrutura
Tomada de decises if-else, switch-case
Laos ou repeties for, while, do-while
tratamento de excees try-catch-finally, throw
Outros break, continue, return, label
Estruturas ou comandos de seleco
ou deciso 40
40
Falso
Condio
Verdadeiro
Process
import java.util.Scanner;
if(<expresso booleana>){
<sequencia de instrues 1>
}
else{
<sequencia de instrues 2>
}
Verdadeiro Falso
condio
Aco Acco
40
import java.util.Scanner;
public class SituacaoAluno{
media = (nota1+nota2+nota3)/3;
if(media <9.5) 40
System.out.println("O aluno N:\t"+matricula+"\tDeve fazer o
Exame. Ele teve media:\t"+media);
else
System.out.println("O aluno N:\t"+matricula+"\tFicou aprovado
com a media:\t"+media);
}
import java.util.Scanner;
public class OrdenaTresNumeros{
System.out.println("\nOrdenacao do numeros"); 40
if((numero1>numero2)&&(numero1>numero3)){
if((numero2>numero1)&&(numero2>numero3)){
if((numero3>numero1)&&(numero3>numero2)){
}
}
import java.util.Scanner;
public class OrdenaTresNumerosSegundo{
System.out.println("\nOrdenacao do numeros");
if(numero1>numero2){
if(numero1>numero3){
System.out.println("O maior numero digitado
foi:\t"+numero1);
}
else{
System.out.println("O maior numero digitado
foi:\t"+numero3);
}
}
else{
if(numero2>numero3){
System.out.println("O maior numero digitado foi:\t"+numero2);
}
else{
System.out.println("O maior numero digitado foi:\t"+numero3);
}
}
}
}
O programa do exemplo a seguir recebe do utilizador trs nmeros
inteiros e verifica se eles podem ser tamanhos dos lados de um
tringulo. Caso verdadeiro, o programa ainda indica a classificao do
tringulo.
import java.util.Scanner;
public class Triangulos{
40
if((lado1==lado2) &&(lado2==lado3)){
System.out.println("Triangulo equilatero");
}
else{
if((soma1>lado3)&&(soma2>lado2)&&(soma3>lado1)){
if((lado1!=lado2)&&(lado1!=lado3)&&(lado2!=lado3)){
System.out.println("Triangulo escaleno\n");
}
else{
System.out.println("Triangulo isosceles\n");
}
}
else{
System.out.println("Os tres lados nao formam um triangulo");
}
} 40
}
}
Forma geral
switch(<valor>){
case <valor1>:
<sequencia de instrues 1>
break;
case <valor2>:
<sequencia de instrues 2>
break;
case <valorN>:
<sequencia de instrues N>
break;
default:
<sequencia de instrues>
}
40
import java.util.Scanner;
public class Urna{
public static void main(String[] args){
int opcao;
}
}
}
Exerccios 40
40
O comando for
Estrutura de repetio simples
Sintaxe
for(inicializao; expresso booleana; iterao)
instruo
40
ou
for(inicializao; expresso booleana; iterao){
instrues
}
import java.util.Scanner;
40
import java.util.Scanner;
public class Factorial
{
public static void main(String args[]) {
Scanner teclado = new Scanner(System.in);
int num,fatorial=1;
System.out.println("Informe um numero inteiro:");
num=teclado.nextInt();
for(int i=num;i>=1;i--)
fatorial*=i;
System.out.println("O factorial do numero e:\t"+fatorial);
}
}
O comando while
inicializao
while(condio)
{
Instruo
iterac
}
while(contador>0)
{
System.out.println(contador+"!");
contador--;
}//fim de while.
System.out.println("Ok!");
}//fim de main()
}//fim de class WhileDemo
40
import java.util.Scanner;
Forma geral
inicializao
do
{
Instruo
iteraco
}while(condio);
int a =0;
do{
System.out.println("Java");
a=a+1;
}while(a<5);
}
}
import javax.swing.*;
Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).
Opinio Significado
A timo
B Bom
C Regular
D Ruim
E Pssimo
A entrada de dados sobre a opinio deve ser validada.
O final da pesquisa ser indicado quando a idade do utilizador for
informada como negativa (idade inexistente).
Construa um programa que, lendo esses dados, calcule e apresente:
Quantidade de pessoas que respondeu a pesquisa
Mdia de idade das pessoas que responderam a pesquisa
Porcentagem de cada uma das respostas 40
Modularizao
Mtodos
funo f(x)
Entrada Sada
40
Os dados de entrada so chamados de parmetros e o valor de sada
chamado de retorno. Durante a execuo do mtodo, os dados de
entrada so manipuladores, com o auxilio de operadores, de maneira
a produzir o resultado esperado. Durante esta manipulao de dados
a funo pode chamar outras funes, que contm rotinas que
auxiliam na elaborao do resultado final.
funo f(x)
Entrada Sada
funo
auxiliar
Os mtodos so utilizados para executar operaes, funes, aces,
etc., dentro das aplicaes. Desta forma, eles representam a parte
funcional de qualquer sistema, sendo muito importe compreender
bem a sua utilizao.
sintaxe para a declarao de um mtodo
[modificador]tipo_retorno identificador([parmetros]){
//corpo
[return]
}
Partes de um mtodos
Um mtodo constitudo por um cabealho, um dicionrio de dados,
um corpo e comentrio
Cabealho
O cabealho ou assinatura do mtodo onde esto definidos o nome
do mtodo, os tipos dos seus parmetros de entrada e o tipo de dado
de retorno.
Os parmetros do mtodos, so as informaes que ele precisa para
executar as suas instrues e o seus tipos devem ser rigorosamente
respeitados. Os parmetros do mtodo podem ser constitudos por
uma lista, separada por vrgulas, com os nomes das variveis (e seus 40
tipos) que recebero os argumentos quando o mtodo for chamado
ou executado. Nem todos mtodos recebem parmetros.
Na chamada da funo a quantidade o tipo de parmetros deve ser
rigorosamente respeitada sob pena do compilador detectar erros do
tipo not find simbol
O tipo de retorno do mtodo simboliza o tipo de produto gerado por
ele, melhor especifica o tipo de dado que ser retornado pelo mtodo.
O retorno do mtodo feito pelo comando return (valor).
Se o mtodo diz que retorna um nmero float, que dizer que o
programador deve esperar receber apenas este tipo de dado e tomar
as medidas necessrias para manipula-lo posteriormente.
O nome do mtodo server para identific-lo. O programador deve
escolher nomes auto-explicativos sobre a funcionalidade do mtodo,
ou seja, para o que ele serve. Isto torna o cdigo mais legvel e
menos susceptvel de erros por parte do programador.
Exemplo
float calculaMedia(float a, float b);
No exemplo acima, a funo calculaMedia possui dois parmetros de
entrada do tipo float e retorna um valor tambm do tipo float, j que
o tipo indicado para ele o float. O primeiro parmetro recebe o
nome a e o segundo recebe o nome b. O mtodo retorna um dado do
tipo float, ou seja, retornar um nmero que contm casas decimais.
Dicionrio de dados
O dicionrio de dados onde se faz a declarao de variveis e
constantes usadas no mtodos e no declaradas no cabealho do
mtodo.
Quando se declaram variveis nos mtodos, estas s podem ser
utilizadas naquele mtodos. Qualquer outro mtodos, mesmo aquele
que chamar o mtodo, no tem acesso a estas variveis. Assim, por
existirem e serem acessveis apenas naquele mtodo, so chamadas
de variveis locais. 40
Corpo
O corpo do mtodo onde esto contidas as instrues a serem
executadas pelo mtodos. Nele, podem ser realizadas operaes, tais
como: atribuies de valores s variveis, chamadas de outras
funes, clculos de expresses, leitura de dados e apresentao de
resultados.
Comentrios
Para melhorar a legibilidade e o entendimento do cdigo do mtodo,
recomendvel fazer comentrios.
Acima de cada mtodo pode-se colocar comentrios com as seguintes
finalidades: dizer para que serve o mtodo, quais os parmetros que
ele recebe, explicando como devem ser estes parmetros (unidade
de medida, relevncia para o mtodo, etc.), restries para
aplicaes, entre outras.
No dicionrios de dados, os comentrios podem ser utilizados para
explicar o significado de alguma varivel cujo nome no
suficientemente significativo.
No corpo do mtodo, os comentrios podem ser utilizados para
explicar o que foi feito num determinado conjunto de instrues cujo
entendimento no fcil ou que no tem utilidade aparente.
Em java, os comentrios dos mtodos devem ser feitos da mesma
maneira que a indicada anteriormente, entre /* e */ ou aps //
Exemplo
/*
Mtodo para calcular a distancia entre dois pontos no plano
cartesiano .
Dados de entrada :
float x1: a coordenada x do primeiro ponto .
float y1: a coordenada y do primeiro ponto .
float x2: a coordenada x do segundo ponto .
float y2: a coordenada y do segundo ponto .
40
Dados de sada :
dist : retorna a distncia entre os pontos passados
*/
float distancia ( float x1 , float y1 , float x2 , float y2){
float dx , dy , dist ;
dx = x2 - x1;
dy = y2 - y1;
dist = Math.sqrt (dx*dx + dy*dy);
return dist ;
}
import javax.swing.JOptionPane;
public class EstudoMetodosI {
public static void main(String[] args) {
double xa, xb, ya, yb, distancia;
JOptionPane.showMessageDialog(null, "Forneceda as
coordendadas x e Y (em quilometros) das cidades A e B,
respectivamente");
xa =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xa
"));
xb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xb
"));
ya =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
ya"));
yb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
yb"));
distancia = distancia(xa, ya, xb, yb);
JOptionPane.showMessageDialog(null, "A distancia de " +
distancia + "Quilomentros");
}
static double distancia(double x1, double y1, double x2, double y2)
{ 40
double dx, dy, distancia;
dx = x2 - x1;
dy = y2 - y1;
distancia = Math.sqrt(dx * dx + dy * dy);
return distancia;
}
}
Passagem de parmetros
import javax.swing.JOptionPane;
public class EstudoMetodos {
public static void main(String[] args) {
mutiplica(3, 3, 3);
// metodo distancia
double xa, xb, ya, yb, distancia;
JOptionPane.showMessageDialog(null, "Forneceda as
coordendadas x e Y (em quilometros) das cidades A e B,
respectivamente");
xa =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xa
"));
xb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada xb
"));
ya =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
ya"));
yb =
Double.parseDouble(JOptionPane.showInputDialog("Coordenada
yb"));
distancia = distancia(xa, ya, xb, yb);
JOptionPane.showMessageDialog(null, "A distancia e de " +
distancia + "Quilomentros");
// metodo dobraValor
int x = 10; 40
dobraValor(x);
}
static double distancia(double x1, double y1, double x2, double y2)
{
double dx, dy, distancia;
dx = x2 - x1;
dy = y2 - y1;
distancia = Math.sqrt(dx * dx + dy * dy);
return distancia;
}
static int dobraValor(int a) {
System.out.println("Valor Original:\t" + a);
a = 2 * a;
return a;
}
static void imprimeNome() {
System.out.println("Maria do Rosario Hangalo");
}
static void mutiplica(float a, float b, float c) {
System.out.println("Resultado:\t" + (a * b * c));
}
static void saudacao() {
JOptionPane.showMessageDialog(null, "Bem vindos ao Centro de
Formao \n So Domingos");
}
}
Retorno de valores 40
Esta seco trata da forma como os dados dos mtodos so
retornados, isto , como se produz uma sada do mtodo.
Um mtodo pode produzir, no decorrer da execuo das suas
instrues, uma valor final (uma sada), que dever ser passado para
o programa ou mesmo mtodo que o chamou. O valor retornado pelo
mtodo ser atribudo a alguma varivel do programa que chamou
este mtodo ou ento utilizado nalguma expresso ou ainda passado
para um mtodo de impresso no ecro.
Em java, deve-se declara o tipo de dado retornado pelo mtodo no
cabealho do mtodo e utiliza-se o comando return para especificar a
varivel ou o valor que dever ser retornado. Aps a sua execuo, a
execuo do mtodo corrente termina.
import javax.swing.*;
import java.text.*;
kms = conversor(milhas);
mostraMsg(milhas, kms);
}
}
}
}
Mtodos sem retorno de dados
Assim como h mtodos que no tm nenhum parmetro, tambm h
funes que no retornam nenhum tipo de dados. Em java, para
traduzir esta situao utiliza-se a palavra reservada void como tipo de
dado retornado.
float num1;
float num2;
float resultado;
float getNum1() {
return num1;
}
float getNum2() {
return num2;
}
float getResultado() {
return resultado; 40
}
void menu() {
System.out.println("@@@@@@@@@@Calculadora@@@@@@@@@
@@@@@");
System.out.println("Escolha a operasao");
System.out.println("1-Soma");
System.out.println("2-Divisao");
System.out.println("3-Multiplicasao");
System.out.println("4-Subtrasao");
}
}
import java.util.Scanner;
Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).
40
1. Escreva um mtodo que receba um nmero inteiro positivo N como
parmetro e retorne a soma dos N nmeros inteiros existentes entre 1 e
esse nmero.
2. Escreva um mtodo que faa a converso binrio/decimal e vice-versa.
Sugesto: considerar o numero binrio como um vector de char de
0 ..1
3. Escrever um mtodo que aceite como entrada um numero inteiro positivo
n e mostre a sucesso dos nmeros inteiros positivos de 1 a n.
4. Escreva um mtodo que aceite como entrada um numero inteiro n e
visualize a sucesso dos nmeros inteiros positivos impares de 1 a n
5. Escreva um mtodo que aceite como entrada dois nmeros inteiros
positivos n e m, com n menor que m, e visualize a sucesso dos nmeros
positivos de n a m.
6. Escreva um mtodo que aceite como entrada um numero inteiro n e
visualize os nmeros primos menores do que n.
7. Escreva um mtodo que aceite como entrada um numero inteiro n e
visualize os nmeros triangulares menores do que n: 1, 3, 6, 10, 15, 21 [A
sequencia dos nmeros triangulares obtem-se partindo da unidade e
somando ao numero precedente: 2, 3, 4, 5]
8. Escrever um mtodo que aceite como entrada um numero inteiro n e
visualize as potencias cbicas dos nmeros naturais at potencia no
superior ao valor de n. 1, 8, 27, 64, 124
9. Escreva um mtodo que receba um valor inteiro positivo como parmetro
e retorne o factorial do nmero.
10. Escreva um mtodo que calcule uma potncia qualquer com expoente
inteiro maior ou igual a zero.
11. Alterar o mtodo anterior de modo que calcule tambm potncias com
expoente inteiro negativo.
12 . Escreva um mtodo que calcule, em funo da varivel x, o valor da
expresso:
13. O governo de uma cidade fez uma pesquisa entre os habitantes,
colectando dados sobre o salrio e o nmero de filhos.
Escreva uma funo que leia esses dados para um nmero no determinado
de pessoas e mostre a mdia salarial da populao, a mdia de filhos, o
maior salrio e a percentagem de pessoas com salrio at AKZ 12000,00.
14. Escreva um programa que controle o stock de uma empresa. Para isso
utilize uma matriz, onde cada coluna representa o cdigo do produto e cada
linha a quantidade em stock deste produto. Escreva trs funes para
controlo de stock: a primeira ser responsvel pela insero de produtos no
stock, a segunda pela remoo e a terceira para listar todo o stock.
15. Escreva um mtodo que dado um nmero inteiro retorne uma string
com cada dgito deste nmero por extenso, da forma:
40
64852 <= nmero passado como parmetro seis quatro oito cinco dois <=
string a ser retornada
16 Escreva um mtodo que receba um nmero inteiro. Este mtodo deve
verificar se tal nmero primo. No caso positivo, a funo deve retornar 1,
caso contrrio zero.
Escreva tambm um programa para testar tal mtodo.
17. Escreva um mtodo que receba dois nmeros inteiros x e y. Esse
mtodo deve verificar se x divisvel por y. No caso positivo, a funo deve
retornar 1, caso contrrio zero.
Escreva tambm um programa para testar tal mtod.
18. Um nmero dito regular caso a sua decomposio em factores primos
apresenta apenas potncias de 2, 3 e 5. Faa um mtodo que verifique se
um nmero (retorne 1) ou no (retorne 0) regular. Escreva tambm um
programa para testar tal funo.
19. Criar um mtodo que determine se um carcter, recebido como
parmetro, ou no uma letra do alfabeto. O mtodo deve retornar 1 caso
positivo e 0 em caso contrrio.
Escreva tambm um programa para testar tal mtodo.
20. Um nmero dito ser capicua se quando lido da esquerda para a
direita o mesmo que quando lido da direita para a esquerda. O ano 2002,
por exemplo, capicua. Ento, elabore um mtodo para verificar se um
nmero possui essa caracterstica. Caso o nmero seja capicua, o mtodo
deve retornar 1 e 0 em caso contrrio. Escreva tambm um programa para
testar tal mtodo.
21. Criar um mtodo que calcule e retorne o MAIOR entre dois valores
recebidos como parmetro. Um programa para testar tal mtodo deve ser
criado.
22 Criar um mtodo que verifique quantas vezes um nmero inteiro x
divisvel por um nmero inteiro y. O mtodo deve retornar -1 caso no seja
possvel calcular. Escreva tambm um programa para testar tal mtodo.
23. Construa uma funo que efectue a TROCA dos valores de a por b,
recebidos como parmetro. Crie tambm um programa que leia dois
valores quaisquer, e imprima os valores aps a chamada da funo TROCA.
24. Construa um mtodo que receba trs valores, a, b e c, retorne o
MAIOR e o MENOR valor desses trs. Deve ser criado um programa para
utilizar tal mtodo lendo os trs valores e imprimindo o maior e o menor
valor computado.
25. Construa um mtodo que receba dois valores inteiros a e b, retorne o
quociente, div, e o resto diviso, mod, de a por b. A funo deve retornar:
-1 caso no seja possvel realizar as operaes e 0 caso seja possvel. Um
programa para utilizar tal mtodo deve ser criado, tratando o retorno da
funo.
26. Construa um mtodo que receba cinco valores e determine o 2 e o 4
maior valores dentre eles. Construa tambm um programa para ler tais
valores, e imprimir o resultado obtido com a chamada do mtodo.
27. Construa um mtodo, que receba trs coeficientes relativos uma 40
equao de segundo grau (a.x2 + b.x + c = 0) e calcule as suas razes
atravs da frmula de Baskara:
29. Crie um mtodo que realize a converso de Fahrenheit (F) para graus
Celsius (C), onde F passado como parmetro e C retornado. Sabe-se que
os pontos de fuso e ebulio nas escalas Celsius e Fahrenheit so: 0C e
100C, e 32F e 212F, respectivamente. Crie tambm um programa para
testar tal mtodo.
30. Crie um mtodo que realize a converso de Polegadas (pol) para
Centmetros (cm), onde pol passado como parmetro e cm retornado.
Sabe-se que 1 polegada est para 2,54 centmetros. Crie tambm um
programa para testar tal mtodo.
31. Crie um mtodo que realize a converso de ps (feet) para metros (m),
onde feet passado como parmetro e m retornado. Sabe-se que 1
metro est para 3,281 ps. Crie tambm um programa para testar tal
mtodo.
32. Crie um mtodo que realize a converso da escala Kelvin (K - escala
absoluta) para a escala Fahrenheit (F). Sabe-se que 273K equivale a 32F e
a cada variao de 10 unidades na escala Kelvin equivale a 18 na escala
Fahrenheit. O mtodo deve retornar zero caso no seja possvel realizar a
converso e um em caso contrrio. Crie tambm um programa para testar
tal mtodo.
33. Escrever um mtodo que receba o salrio mensal e a percentagem de
reajuste.
Calcular e retornar o valor do novo salrio. O salrio mensal, reajuste e novo
salrio devem ser do tipo float.
34. Escrever um mtodo que receba o raio de um crculo, calcular e
escrever a sua rea.
35. Faa um mtodo que leia uma sequncia de notas de alunos e mostre a
maior e a menor das notas. O final da leitura ser identificado pela
introduo de uma nota negativa, que no deve fazer parte do clculo.
36. Implementar um mtodo lerValorValido() que verifica se um valor
introduzido pelo utilizador pertence ao conjunto limitado por dois dados
valores inteiros, devolvendo o primeiro valor que pertena quele intervalo;
40
Criao de arrays
Pode-se criar arrays vazios ou com elementos e estes elementos
podem ser consultados ou modificados.
Lembrete
Um a arrays uma coleco de tipos iguais sendo eles primitivos ou
no
O tamanho do array pode ou no ser especificado;
Pode-se colocar os colchetes [] antes ou depois do identificador do
array;
Pode-se fazer converso (casting) em elementos de arrays desde que
sejam seguidas as regras padro de casting.
Pode-se copiar topo ou parte de um array para outro arrays, desde
que seja do mesmo tipo
A criao de um array d-se quando da sua declarao.
Sintaxe
tipo_de_dado[] identificador = new tipo_de_dado[tamanho];
ou
tipo_de_dado identificador [] = new tipo_de_dado[tamanho];
Exemplo 1
float[] salario;
exemplo 2
double a[], b[], c[];
pode ser escrito como: double[] a, b, c;
Esta declarao simples de um array no aloca memria para
armazenar os elementos do array, ela apenas indica que se trata de
algum tipo de array. Se o programa tentar aceder qualquer elemento
deste array antes de se alocar memria para ele, o compilador
mostrar um erro de compilao.
Exemplo 2
char letra[] = new char[26]; // vetor de 26 valores do tipo char 40
Ponto p[] = new Ponto[3]; // vetor de 3 objetos da classe Ponto
int x[] = {2,8,3,5,1}; // declarao e inicializao
Inicializao de arrays
Aps a criao, os elementos do array devem ser inicializados, antes
de serem utilizados (na criao, os elementos so inicializados com o
valor padro). Na verdade, quando se cria um novo array ele no tem
nada dentro dele e quando inicializado passa a ter o mnimo dentro
dele o que depende de cada tipo de array criado.
Existem diferentes modos de declarao e de inicializao de arrays.
Exemplo Descrio
String nome[] = new String[3]; Declara primeiro e inicializa
nome[0] = "Z"; depois. O tamanho do array
nome[1] = "J"; dado na declarao. A alocao
nome[2] = "Lu"; de memria feita pela
declarao. A inicializao ocorre
depois da memria ter sido
alocada.
String nome[]; Declara somente o ponteiro. Em
int n = 3; seguida cria os objectos. Notar
nome = new String[n]; que entre a declarao do
nome[0] = "Z"; ponteiro e a criao dos objectos,
nome[1] = "J"; o tamanho do array pode ser lido,
nome[2] = "Lu"; atribudo ou calculado. Com isso,
o array pode ter exactamente o
tamanho necessrio. A
inicializao ocorre depois da
memria ter sido alocada.
String nome[] = {"Z","J","Lu"}; Declara e inicializa. O tamanho
do array dado pelo nmero de
valores na lista de inicializao. A
alocao de memria feita
durante a inicializao.
import java.util.*;
public class ExemploArray {
Recordando:
Exerccios de consolidao.
1
Criar um programa que receba um array de inteiros e o apresente
ordenado utilizando o algoritmo da fora bruta
public class OrdenaVector {
public static void main(String[] args) {
int[] vetor = {5, 40, 20, 10, 50, 30};
System.out.print("Vector de Entrada: ");
for (int i = 0; i < vetor.length; i++) {
System.out.print(vetor[i] + " ");
}
System.out.println();
for (int i = 0; i < vetor[0] - 1; i++) {
for (int j = i + 1; j < vetor[0]; j++) {
if (vetor[i] > vetor[j]) {
int temp = vetor[i]; // sort 40
vetor[i] = vetor[j];
vetor[j] = temp;
}
}
}
System.out.print("Vetor Ordenado: ");
for (int i = 1; i < vetor.length; i++) {
System.out.print(vetor[i] + " ");
}
System.out.println();
System.out.println("Nmero de Elementos: " + vetor[0]);
}
}
2
Considere que um array v contm o nmero de notas dos alunos de
FP2 agrupadas em categorias, ou seja: v[0] contm o nmero de
notas de 0.0 a 0.9, v[1] contm o nmero de notas de 1.0 a 1.9, v[2]
contm o nmero de notas de 2.0 a 2.9, assim por diante, at v[10],
que contm o nmero de notas 10. Mostrar a distribuio de notas
por meio de um grfico de barra de asteriscos (*).
Arryas Multidimensionais
}
}
import java.util.*;
public class ExemploMatriz {
public static void lerMatriz(int m[][]) {
Scanner in = new Scanner(System.in);
for (int i = 0; i < m.length; i++) {
for (int j = 0; j < m[i].length; j++) {
System.out.print("m[" + i + "," + j + "] = ");
m[i][j] = in.nextInt();
}
}
}
Exerccios de consolidao
1
Criar um programa que leia 4 notas de X alunos e armazene os
dados numa matriz. Em seguida, mostre as 4 notas e a mdia obtida
dos X aluno.
import java.util.Scanner;
public class MediaAlunos {
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Digite a quantidade de alunos: ");
int lin = Entrada.nextInt();
float[][] mat = new float[lin][4];
for (int i = 0; i < mat.length; i++) {
System.out.println("Aluno" + (i + 1));
System.out.print("Digite nota 1: ");
mat[i][0] = Entrada.nextFloat();
System.out.print("Digite nota 2: ");
mat[i][1] = Entrada.nextFloat();
System.out.print("Digite nota 3: ");
mat[i][2] = Entrada.nextFloat();
System.out.print("Digite nota 4: ");
mat[i][3] = Entrada.nextFloat();
System.out.println("=========================
=======");
}
for (int i = 0; i < mat.length; i++) {
System.out.println("Aluno" + (i + 1));
System.out.println("Nota 1: " + mat[i][0]); 40
System.out.println("Nota 2: " + mat[i][1]);
System.out.println("Nota 3: " + mat[i][2]);
System.out.println("Nota 4: " + mat[i][3]);
System.out.println("Mdia: " + ((mat[i][0] + mat[i][1] +
mat[i][2] + mat[i][3]) / 4));
System.out.println("=========================
=======");
}
}
}
2
Criar um programa que l uma matriz e uma linha qualquer e retorne
a soma dos elementos dessa linha.
import java.util.Scanner;
public class ElementoLinha {
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Linhas: ");
int lin = Entrada.nextInt();
System.out.print("colunas: ");
int col = Entrada.nextInt();
int[][] mat = new int[lin][col];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print("Elemento: ");
mat[i][j] = Entrada.nextInt();
System.out.print("\n");
}
}
System.out.print("Digite uma linha (0-" + (lin - 1) + "): ");
int linha = Entrada.nextInt();
System.out.println("Elementos da Linha");
for (int j = 0; j < col; j++) {
System.out.print(mat[linha][j] + "\t");
}
}
}
3
Cria um programa que le uma matriz quadrada e retorne a soma dos
elementos da diagonal principal e abaixo desta.
import java.util.Scanner;
public class SomaDiagonalAbaixo {
40
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Ordem da Matriz: ");
int lin = Entrada.nextInt();
int[][] mat = new int[lin][lin];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < lin; j++) {
System.out.print("Elemento: ");
mat[i][j] = Entrada.nextInt();
System.out.print("\n");
}
}
int soma = 0;
for (int i = 0; i < lin; i++) {
for (int j = 0; j < lin; j++) {
if (i >= j) {
System.out.print(mat[i][j] + "\t");
soma = mat[i][j] + soma;
}
}
}
System.out.println("A soma dos elementos : " + soma);
}
}
4
Criar um programa que leia uma matriz matA e retorne matB, tal que
matB=matAT.
import java.util.Scanner;
public class Transposta {
public static void main(String[] args) {
Scanner Entrada;
Entrada = new Scanner(System.in);
System.out.print("Linhas: ");
int lin = Entrada.nextInt();
System.out.print("colunas: ");
int col = Entrada.nextInt();
int[][] mat = new int[lin][col];
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print("Elemento: ");
mat[i][j] = Entrada.nextInt();
System.out.print("\n");
}
}
int[][] mat2 = new int[lin][col];
for (int i = 0; i < lin; i++) { 40
for (int j = 0; j < col; j++) {
mat2[i][j] = mat[j][i];
}
}
System.out.println("Matriz digitada:");
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print(mat[i][j] + "\t");
}
System.out.print("\n");
}
System.out.println("Matriz transposta:");
for (int i = 0; i < lin; i++) {
for (int j = 0; j < col; j++) {
System.out.print(mat2[i][j] + "\t");
}
System.out.print("\n");
}
}
}
Exerccios
Algumas frmulas apresentadas nos enunciados esto na sua forma
MATEMTICA e no na forma como devem ser escritas nos nos programas.
As indicaes entre parnteses so sugestes de nomes de
variveis(escrever os nomes das variveis conforne a conveno).
Elaborar o diagrama de blocos e/ou o pseudocdigo (portugus estruturado)
em todos os casos(em comentrio no programa).
1. Implementar o mtodo lerVector() que preenche um vector com DIM
valores reais (DIM >= 1);
11. Dada uma tabela de 4x5 elementos, faa um programa para calcular a
soma de cada linha da matriz. Apresente o somatrio de cada linha, e o
somatrio total de todas as linhas.
22. O Sudoku um jogo japons onde deve-se completar uma matriz 9x9 de
nmeros inteiros entre 1 e 9, de tal forma que:
em cada linha, aparea apenas um dgito de cada;
em cada coluna, aparea apenas um dgito de cada;
em cada sub-matriz 3x3 aparea apenas um dgito de cada;
Elabore um programa que seja capaz de verificar se uma matriz 9x9 uma
soluo para o Sudoku.
Dica: para verificar a presena nica de cada dgito em cada linha, coluna
ou submatriz, utilize um vector auxiliar de tamanho 10.
(continua)