100% acharam este documento útil (3 votos)
22K visualizações17 páginas

Exercicios Resolvidos Java

Enviado por

Helder Trindade
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
100% acharam este documento útil (3 votos)
22K visualizações17 páginas

Exercicios Resolvidos Java

Enviado por

Helder Trindade
Direitos autorais
© Attribution Non-Commercial (BY-NC)
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 17

FICHA PRTICA 1

LABORATRIO BASE DE JAVA6

TIPOS PRIMITIVOS & ESTRUTURAS DE CONTROLO

PROF. F. MRIO MARTINS D I /U M

VERSO 2.0 20 10

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010

FICHA PRTICA 1 LABORATRIO BASE DE JAVA


SNTESE TERICA
JAVA uma linguagem de programao por objectos. Porm, a tecnologia JAVA muito mais do que a linguagem de programao em que se baseia. A figura seguinte mostra a arquitectura de software correspondente ao ambiente JSE6 que necessrio instalar nas nossas mquinas para executarmos e criarmos programas escritos em JAVA (na sua verso mais actual JAVA6).

Figura 1 - Arquitectura JSE6


Quando programamos em JAVA6 temos nossa disposio todas estas bibliotecas predefinidas, que possuem disponveis classes para quase todas as mais diferentes funcionalidades necessrias s nossas aplicaes. Porm, o nosso objectivo neste contexto conhecermos o ncleo fundamental da linguagem, e as suas construes bsicas para realizarmos programao sequencial, mas seguindo princpios rigorosos da Engenharia de Software que so mais facilmente respeitados se utilizarmos correctamente caractersticas e propriedades disponveis no paradigma da Programao por Objectos e suas linguagens (cf. C++, C# e JAVA). A execuo de um programa JAVA passa fundamentalmente pela compilao do seu cdigo fonte para um cdigo intermdio, designado byte-code. Este byte-code, que o resultado da compilao, um cdigo standard que poder ser em seguida executado (interpretado) por uma qualquer Java Virtual Machine (JVM). Naturalmente que, para cada sistema operativo e arquitectura, existir uma JVM especfica que interpreta correctamente o byte-code em tal contexto

Laboratrios de JAVA: Java Base

F. Mrio Martins

Pg. 2

(cf. Windows, Linux, Solaris, PDA, Java Card, etc.). Neste facto reside a grande portabilidade e flexibilidade da linguagem JAVA.

Java byte-code (1010100010010001)

Biblioteca de Classes

Java Class Loader

S D K

JVM
Interpretador de Java Compilador Just-in-Time

Sistema de Runtime de Java

Sistema Operativo

Hardware

SINTAXE ESSENCIAL 1.- ESTRUTURA BASE DE UM PROGRAMA JAVA


Em JAVA tudo so classes. Um programa JAVA uma classe especial que, entre outros, possui obrigatoriamente um mtodo main() pelo qual se inicia a execuo do cdigo do programa. O nome do programa (classe) dever ser igual ao do ficheiro fonte que a contm. Exemplo: a public class Teste1 dever ser guardada no ficheiro Teste1.java.

public class Teste1 { public static void main(String[] args) { // declaraes e cdigo // ............ } }

Porm, e por razes de estruturao do cdigo, nada impede que se criem mtodos externos ao mtodo main() que pertencem igualmente ao programa e que podem ser invocados a partir do mtodo main() e, at, invocarem-se entre si. A figura seguinte mostra este tipo um pouco mais complexo de estruturao do programa, mas que apenas um caso particular do primeiro. Finalmente, e por razes a ver posteriormente, todos estes mtodos devem possuir o atributo static, podendo ser public ou no (usaremos de momento sempre public).

Pg. 3

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010

public class Teste2 { public static <tipoRes> metodo_Aux1 (argumentos opcionais) { // .. } public static <tipoRes> metodo_Aux2 (argumentos opcionais) { // .. }

public static void main(String[] args) { // ............ // declaraes e cdigo // ............ } }

2.- COMPILAO E EXECUO A PARTIR DE LINHA DE COMANDOS


Ficheiro fonte: Teste1.java Compilao: > javac Teste1.java Execuo: > java Teste1 cria ficheiro Teste1.class

3.- EDIO, COMPILAO E EXECUO USANDO BLUEJ


- Invocar o BlueJ (eventualmente usar opo New Project ); - Criar o ficheiro fonte usando a opo New Class (ou editar ficheiro existente); - Se fizermos apenas Save criado um cone sombreado com o nome do ficheiro criado, que se apresentar a tracejado indicando que no se encontra compilado ainda; - Pode no entanto usar-se a opo Compile imediatamente aps o fim da edio; - Se no existirem erros, aparece o mesmo cone mas sem qualquer tracejado; - Para ficheiros no compilados, clicar no boto direito do rato e executar a opo Compile - Para executar o programa, sobre o cone clicar no boto direito do rato e seleccionar o mtodo
main()

- Os resultados so apresentados na Terminal Window do BlueJ EXEMPLO:

Edio
Laboratrios de JAVA: Java Base F. Mrio Martins Pg. 4

Execuo

Resultados

4.- TIPOS PRIMITIVOS E OPERADORES


Os tipos primitivos de JAVA so os usuais tipos simples que se associam a variveis nas quais pretendemos guardar valores (cf. Pascal, C, etc.). A tabela seguinte mostra os tipos disponveis, gama de valores aceites e nmero de bits de representao.

Tipo

Valores false, true caracter unicode inteiro c/ sinal inteiro c/ sinal inteiro c/ sinal inteiro c/ sinal IEEE 754 FP IEEE 754 FP

Omisso false \u0000 0 0 0 0L 0.0F 0.0

Bits 1 16 8 16 32 64 32 64

Gama de valores false a true \u0000 a \uFFFF -128 a +127 -32768 a +32767 -2147483648 a 2147483647 -1E+20 a 1E+20 3.4E+38 a 1.4E-45 (7 d) 1.8E+308 a 5E-324 (15d)

boolean char byte short int long float double

Tabela 1 Tipos primitivos de Java

5.- DECLARAO E INICIALIZAO DE VARIVEIS.


Associadas a um tipo de dados, poderemos ter uma sequncia de declaraes de variveis separadas por vrgulas, eventualmente com atribuies dos valores de expresses para a inicializao de algumas delas, cf. a forma geral e os exemplos seguintes: id_tipo id_varivel [ = valor] [, id_varivel [ = valor ] ] ;
int dim = 20, lado, delta = 30; char um = '1'; char newline = '\n'; byte b1 = 0x49; // hexadecimal, cf. 0x como prefixo

Pg. 5

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010
long diametro = 34999L; double raio = -1.7E+5; double j = .000000123; // parte inteira igual a 0 int altura = dim + delta; // inicializao usando clculo de expresso

Associados a estes tipos simples existe um conjunto de operadores necessrios sua utilizao, comparao, etc. Vejamos os mais importantes na tabela seguinte.
Precedncia 12 11 9 8 4 3 1 Operador Tipos dos Operandos nmero boleano nmero, nmero inteiro, inteiro nmero, nmero nmeros aritmticos primitivos primitivos boleanos boleanos boleano boleano varivel, qualquer Associao D D E E E E E E E E E E E D D D D D D Operao sinal; unrio negao multipl, diviso quoc. int e mdulo soma e subtraco comparao comparao igual valor valor diferente OUEXC lgico OU lgico E condicional OU condicional atribuio atribuio aps oper. atribuio aps oper. atribuio aps oper. atribuio aps oper. atribuio aps oper.

+, ! *, / /,% +, <, <= >, >= == != ^ | && || = *= += <<= >>>= ^= /= -= >>= &= |= %=

varivel, qualquer varivel, qualquer varivel, qualquer varivel, qualquer varivel, qualquer

Tabela 2 Operadores de JAVA para tipos simples

6.- DECLARAO DE CONSTANTES.


As constantes JAVA so tambm, por razes de estilo e de legibilidade, identificadas usando apenas letras maisculas, em certos casos usando-se tambm o smbolo _. As seguintes declaraes,
final double PI = 3.14159273269; final double R_CLAP = 8.314E+7;

definem, num dado contexto, constantes identificadas, cujos valores no podero ser alterados por nenhuma instruo. O atributo final garante que um erro de compilao ser gerado caso haja a tentativa de modificar tal valor.

7.- COMENTRIOS.
// 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 */

Laboratrios de JAVA: Java Base

F. Mrio Martins

Pg. 6

8.- ESTRUTURAS DE CONTROLO


if if if if (condio) (condio) (condio) (condio) instruo; { instruo1; instruo2; } instruo1; else instruo2; ou { instrues } { instruo1; instruo2; } else { instruo1; instruo2; }

switch (expresso_simples) { case valor_1 : instrues; [break;] case valor_n : instrues; [break;] default: instrues; } for (inicializao; condio de sada; incremento) instruo; ou { instrues } for (Tipo varivel : array de elementos de tipo Tipo) instruo; ou { instrues } while (condio de execuo) { instrues } do { instrues; } while(condio de repetio);

9.- IMPORTAO NORMAL E ESTTICA REUTILIZAO DE CLASSES


Importao por omisso: import java.lang.*; Importao global de um package: import java.util.*; Importao selectiva de classes: import java.lang.Math; Importao esttica (elimina prefixos): import static java.lang.Math.abs;

10.- OUTPUT BSICO E FORMATADO


10.1- As instrues bsicas de escrita (output) de JAVA so dirigidas ao dispositivo bsico de sada, o monitor, que a partir do programa visto como um ficheiro de caracteres do sistema designado por System.out. Assim, so mensagens bsicas todas as strings (cf. abc mais operador de concatenao + para strings e valores de tipos simples) enviadas para tal ficheiro usando a instruo println(), o que se escreve:
System.out.println("Bom dia e \tbom trabalho!\n\n\n"); System.out.println("Linguagem : " + lp + 5); System.out.println(nome + ", eu queria um " + carro + "!");

Se nos programas em que tivermos que realizar muitas operaes de sada escrevermos no seu incio a clusula de importao import static java.lang.System.out;, ento, em vez de se escrever System.out.println(.) bastar escrever-se out.println(.), cf. em:
out.println(Hello Java!); out.println(nome + tem + idade + anos.);

10.2 10.2.- JAVA possui tambm uma forma formatada de escrita de dados, baseada em especial no .2 mtodo printf(). O mtodo printf(formatString, lista_valores) permitir a sada de uma lista de valores (sejam variveis, constantes ou expresses), que sero formatados segundo as directivas dadas na string de formatao, que o primeiro parmetro, e que pode incluir texto livre. A forma geral de formatao de valores de tipos primitivos a seguinte (para cada valor a formatar):

Pg. 7

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010
%[ndice_arg$] [flags] [dimenso][.decimais] converso

Os caracteres de converso so os que indicam o tipo de valor resultado da converso do parmetro, sendo: c (carcter), b (boleano), o (octal), h (hexadecimal), d (inteiro), f (real, vrgula fixa), s (string), e (real, vrgula flutuante), t (data) e n (newline independente da plataforma). Um valor de dado tipo se formatado para outro tipo compatvel automaticamente convertido. As flags podem permitir alinhar os resultados esquerda (-), obrigar a incluir sempre o sinal (+), colocar zeros no incio (0), colocar espaos no incio ( ) ou colocar parntesis (() se o nmero for negativo.
float f1 = 123.45f; double d2 = 234.678; double d3 = 12.45E-10; out.printf("R1 %5.2f R2 %3$-12.7f Exp1 %2$8.4e%n",f1, d2, d3);

Por exemplo, usando apenas caracteres de converso podemos automaticamente fazer a converso de um nmero inteiro na base 10 para a base 8 e para a base 16.
int x = 1261; out.printf("Inteiro %d = Octal %o = Hexa %h%n", x,x,x); out.printf("Inteiro %d = Octal %1$o = Hexa %1$h%n", x);

11.- INPUT COM CLASSE SCANNER


A classe java.util.Scanner possui mtodos para realizar leituras de diversos tipos a partir de diversos ficheiros, e no s. Interessa-nos aqui ver como podemos usar esta classe para realizar leituras de valores de tipos simples a partir do teclado. O teclado est, por omisso, associado a uma varivel designada System.in. Assim, teremos que associar um Scanner ao teclado para se poder ler os valores primitivos necessrios aos programas. Vejamos os passos: 1.- Escrever no incio do ficheiro a clusula de importao import java.util.Scanner; 2.- Criar um Scanner que se vai associar ao teclado, e que vamos designar por input:
Scanner input = new Scanner(System.in);

3.- Tendo o scanner input associado ao teclado, usar mtodos de Scanner para ler os valores, cf.:
String nome = input.next(); String linha = input.nextLine(); int x = input.nextInt(); double pi = input.nextDouble(); input.nextTipoSimples(); input.close(); // // // // // // l uma string l uma linha de texto terminada por \n l um inteiro vlido l um real vlido, sendo , o separador l um valor de qualquer tipo simples fecha o scanner

Nota: Posteriormente usaremos uma classe Input especialmente desenvolvida

12.- CLASSES PREDEFINIDAS IMPORTANTES


java.lang.Math Math.PI; Math.E: // valores de PI e da base E com grande preciso tipo_numrico abs(tipo_numrico val); // valor absoluto double sqrt(double val); // raiz quadrada double pow(double base, double exp); // potenciao double random(); // resultado no intervalo [0.0 1.0[ tipo_numrico max (tipo_numrico val1, tipo_numrico val2); tipo_numrico min (tipo_numrico val1, tipo_numrico val2); int round(float val); float round(double val); // seno e coseno double sin(double val); double cos(double val);

Laboratrios de JAVA: Java Base

F. Mrio Martins

Pg. 8

java.lang.Integer java.lang.Double java.lang.Float <classe>.MAX_VALUE; <classe>.MIN_VALUE // mximo e mnimo definidos java.util.GregorianCalendar // classe til para tratamento de datas GregorianCalendar agora = new GregorianCalendar(); // idem GregorianCalendar hoje = new GregorianCalendar(2007, Calendar.MARCH, 10, 23, 15); // define data hoje.set(GregorianCalendar.YEAR, 2009); // modifica o campo ANO int ms = hoje.get(GregorianCalendar.MONTH); // consulta o campo MS // tempo decorrido desde o incio da ERA at data e hora actuais em ms long milis = agora.getTimeInMillis(); // diferena entre duas datas (agora e inicio) em nmero de dias long dif_milis = agora.getTimeInMillis() - inicio.getTimeInMillis(); int dias = dif_milis/(24*60*60*1000); // escrever a hora actual e escrever a data actual out.printf(%tT%n, agora) // 12:23:35 out.printf(%1$tY/%1$tm/%1$td%n, agora); // 2005/03/21 java.lang.String Constantes: abcd Uma linha\n Exemplo\t\tFinal\n\n Concatenao: abc + 25 Lus + Carlos Linha1\n + Linha2\n String valueOf(tipo_simples val); // converte para string um valor simples char charAt(int ndex); // devolve o carcter na posio ndex da string int length(); //devolve o comprimento da string String substring(int inic, int fim); // devolve uma substring boolean equals(String str) // igualdade de strings

EXERCCIOS RESOLVIDOS:
Ex1: Ler um nome e uma idade e imprimir um texto com os resultados.
1 2 3 4 5 6 7 8 9 10 11 import java.util.Scanner; public class Leitura1 { public static void main(String[] args) { String nome; int idade; // Scanner: classe para leitura Scanner input = new Scanner(System.in); // l via teclado System.out.print("Nome: "); nome = input.next(); System.out.print("Idade: "); idade = input.nextInt(); System.out.println(nome + " tem " + idade + " anos."); } }

Ex2: Ler 10 inteiros e determinar o maior inteiro introduzido.


1 import java.util.Scanner; 2 public class MaxInt { 3 public static void main(String[] args) { 4 Scanner input = new Scanner(System.in); // l via teclado 5 int valor; int maior = Integer.MIN_VALUE; 6 for(int i = 1; i <= 10; i++) { 7 System.out.print("Inteiro " + i + " : "); valor = input.nextInt(); 9 if (valor > maior) maior = valor; 10 } 11 System.out.println("Maior inteiro = " + maior); 12 } 13 }
Pg. 9

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010

Ex3: Sendo N dado pelo utilizador, ler N reais e dar os resultados das suas potncias de expoente Exp, tambm introduzido pelo utilizador.
import static java.lang.System.out; import java.util.Scanner; public class Expoentes { public static void main(String[] args) { Scanner input = new Scanner(System.in); // l via teclado int total; double valor; int exp; out.print("Total de valores a ler: "); total = input.nextInt(); out.print("Expoente a que os quer elevar: "); exp = input.nextInt(); for(int i = 1; i <= total; i++) { out.print("Introduza valor real: "); valor = input.nextDouble(); out.printf("Valor %7.2f elevado a %2d = %8.4f%n", valor, exp, Math.pow(valor, exp)); } } }

Ex4: Ler uma sequncia de inteiros positivos (terminada pelo valor -1) e determinar a diferena entre o maior e o menor inteiro lidos. Imprimir esse valor, bem como o maior e o menor.
import java.util.Scanner; import static java.lang.System.out; public class DiferencaInt { public static void main(String[] args) { int valor; int maior = Integer.MIN_VALUE; int menor = Integer.MAX_VALUE; int diferenca; Scanner input = new Scanner(System.in); // l via teclado valor = input.nextInt(); while(valor != -1) { if (valor > maior) maior = valor; if (valor < menor) menor = valor; } diferenca = maior menor; out.println("Maior = " + maior + " Menor = " + menor + "\n"); out.println("A diferena entre eles : " + diferenca); } }

Ex5: Escrever um programa que calcule o factorial de um valor inteiro, dado como argumento do mtodo main() atravs dos argumentos deste mtodo.
import static java.lang.System.out; public class FactorialInt{ public static long factorial(long n) { if (n==1) return 1; else return n*factorial(n-1); } public static void main(String[] args) { long i = Integer.parseInt(args[0]); out.println( i + "! = " + factorial(i) ); } }

Execuo: > FactorialInt 4 (em Bluej em args introduzir {4}) Nota: Para outro tipo teramos parseDouble(), parseFloat(), parseByte(), etc.

Laboratrios de JAVA: Java Base

F. Mrio Martins

Pg. 10

Ex6: Escrever um programa que determine a data e hora do sistema, realize um ciclo com 10 milhes de incrementos unitrios de uma dada varivel, determine a hora aps tal ciclo, e calcule o total de milissegundos que tal ciclo demorou a executar.
import java.util.Scanner; import java.util.Calendar; import static java.lang.System.out; public class Ex6 { public static void main(String[] args) { int x = 0; Calendar inicio = Calendar.getInstance(); for(int i = 0; i < 10000000; i++) x = x +1; Calendar fim = Calendar.getInstance(); long milisegs = fim.getTimeInMillis() - inicio.getTimeInMillis(); out.println("O ciclo demorou " + milisegs + " milisegundos a executar."); out.println("A varivel x tem o valor: " + x); } }

Ex7: Escrever um programa que use um mtodo auxiliar que aceite duas datas e determine a sua diferena em dias, horas, minutos e segundos. O resultado do mtodo dever ser uma string.
import java.util.Scanner; import java.util.GregorianCalendar; import static java.lang.System.out; public class Ex7 { public static String difDatas(GregorianCalendar fim, GregorianCalendar inicio) { long totalmilis = fim.getTimeInMillis() - inicio.getTimeInMillis(); long milis = totalmilis%1000; long totalseg = totalmilis/1000; long seg = totalseg%60; int totalmin = (int) totalseg/60; int min = totalmin%60; int totalhoras = totalmin/60; int horas = totalhoras%60; int totaldias = totalhoras/24; return totaldias + " dias, " + horas +" horas, "+ min+ " minutos e " + seg + "," + milis + " segundos."; } public static void main(String[] args) { GregorianCalendar inicio = new GregorianCalendar(); inicio.set(GregorianCalendar.YEAR, 2007); inicio.set(GregorianCalendar.MONTH, 2); inicio.set(GregorianCalendar.DAY_OF_MONTH, 8); inicio.set(GregorianCalendar.HOUR, 12); inicio.set(GregorianCalendar.MINUTE, 20); inicio.set(GregorianCalendar.SECOND, 33); inicio.set(GregorianCalendar.MILLISECOND, 111); // ou new GregorianCalendar(2007, Calendar.MARCH, 8, 23, 15); GregorianCalendar fim = new GregorianCalendar(); fim.set(GregorianCalendar.YEAR, 2009); fim.set(GregorianCalendar.MONTH, 2); fim.set(GregorianCalendar.DAY_OF_MONTH, 13); fim.set(GregorianCalendar.HOUR, 22); fim.set(GregorianCalendar.MINUTE, 12); fim.set(GregorianCalendar.SECOND, 15); fim.set(GregorianCalendar.MILLISECOND, 444); // ou new GregorianCalendar(2007, Calendar.MARCH, 10, 12, 15); String difTempo = difDatas(fim, inicio); out.println("Diferena: " + difTempo); } }

Pg. 11

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010

Ex8: Escrever um programa aceite N classificaes (nmeros reais) entre 0 e 20 e determine a sua mdia (usar printf() para os resultados).
import static java.lang.System.out; public class Ex8 { public static void main(String[] args) { double nota, soma = 0.0; int total; out.print("Total de notas a ler: "); total = Input.lerInt(); for(int i = 1; i <= total; i++) { out.println("Nota N. " + i); nota = Input.lerDouble(); soma += nota; } out.printf("A mdia das %2d notas %4.2f%n", total, soma/total); } }

Ex9: Escrever um programa aceite N temperaturas inteiras (pelo menos duas) e determine a mdia das temperaturas, o dia (2,3, ) em que se registou a maior variao em valor absoluto relativamente ao dia anterior e qual o valor efectivo (positivo ou negativo) dessa variao. Os resultados devem ser apresentados sob a forma:
A mdia das N temperaturas foi de ____ graus. A maior variao de temperatura registou-se entre os dias __ e __ e foi de ___ graus. A temperatura entre o dia __ e o dia __ subiu/desceu ___ graus. import java.util.Scanner; import static java.lang.System.out; import static java.lang.Math.abs; public class Temperaturas { public static void main(String[] args) { int temp; int anterior; int dia = 0; int total; int maiorDif = 0; int soma = 0; int difReal = 0, difAbs = 0; Scanner input = new Scanner(System.in); // l via teclado out.print("Total de temperaturas a ler: "); total = Input.lerInt(); out.print("Temperatura " + 1 + " : "); temp = Input.lerInt(); soma = temp; for(int i = 2; i <= total; i++) { anterior = temp; out.print("Temperatura " + i + " : "); temp = Input.lerInt(); soma += temp; difReal = temp - anterior; difAbs = abs(temp - anterior); if (difAbs > maiorDif) { dia = i; maiorDif = difAbs; } } // resultados out.printf("A mdia das %2d temperaturas %4.2f%n", total, ((double) soma)/total); out.println("Maior variao de temperaturas entre os dias " + (dia-1) + " e " + dia); String txt = difReal > 0 ? "subiu " : "desceu "; out.println("A temperatura entre esses dias " + txt + difAbs + " graus."); } }

Laboratrios de JAVA: Java Base

F. Mrio Martins

Pg. 12

Ex10: Escrever um programa que leia sucessivas vezes o raio (real) de um crculo e calcule a rea e o permetro respectivos com grande preciso (5 decimais). Usar printf() para os resultados. O programa apenas dever terminar com a leitura de um raio = 0.0
import static java.lang.Math.PI; import static java.lang.System.out; public class AreaCirculo { public static void main(String[] args) { double raio; out.print("Valor do raio: "); raio = Input.lerDouble(); while(raio != 0.0) { out.printf("Raio = %7.3f => rea = %9.5f e Permetro = %9.5f%n", raio, PI*raio*raio, 2*PI*raio); out.print("Valor do raio: "); raio = Input.lerDouble(); } } }

Ex11: Escrever um programa que faa a leitura de uma sequncia no vazia de nmeros reais terminada por 0.0 e calcule o seu somatrio () e o seu produtrio () com preciso de 4 casas decimais no resultado.
import static java.lang.System.out; public class Ex11 { public static void main(String[] args) { double soma = 0; double prod = 1; double num; int conta = 0; out.print("Nmero Real: "); num = Input.lerDouble(); while(num != 0.0) { soma += num; prod *= num; conta++; out.print("Nmero Real: "); num = Input.lerDouble(); } out.printf("Soma dos %2d nmeros reais = %8.4f ; Produto = %12.4f%n%n", conta, soma, prod); } }

Ex12: Escrever um programa leia um inteiro N e imprima todos os nmeros mpares inferiores a N.
import static java.lang.System.out; public class Impares { public static void main(String[] args) { int limite; out.print("Ler nmero limite: "); limite = Input.lerInt(); out.println("Nmeros mpares menores ou iguais a " + limite); for(int i = 1; i <= limite; i = i + 2) out.println(i); } }

Ex13: Escrever um programa que apresente ao utilizador um menu vertical com as opes:
1.- Inserir 2.- Remover 3.- Consultar 4.- Gravar 5.- Sair

Em seguida, o programa dever ler um int, que apenas ser vlido se entre 1 e 5, e dever apresentar ao utilizador, textualmente, a opo escolhida (Inserir, Remover, etc.) ou a mensagem Opo Invlida!. O programa dever repetir a apresentao do menu at que o utilizador seleccione a opo 5.- Sair.

Pg. 13

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010
import static java.lang.System.out; public class Ex13 { public static void menu() { out.println("--------------------------------------------"); out.println("-OPCOES DISPONVEIS ---"); out.println("--------------------------------------------"); out.println(" 1. INSERIR "); out.println(" 2. REMOVER "); out.println(" 3. CONSULTAR "); out.println(" 4. GRAVAR "); out.println(" 5. SAIR "); out.println("--------------------------------------------"); } public static int opcao() { int opcao; boolean valida = false; do { out.print("OPCAO: "); opcao = Input.lerInt(); valida = (opcao >= 1) && (opcao <= 5); if(!valida) out.println("OPCAO INVLIDA !!"); } while(!valida); return opcao; } public static void texto_opcao(int op) { switch(op) { case 1 : out.println("INSERIR"); break; case 2 : out.println("REMOVER"); break; case 3 : out.println("CONSULTAR"); break; case 4 : out.println("GRAVAR"); break; case 5 : out.println("SAIR"); break; } } public static void main(String[] args) { int escolha; do { menu(); escolha = opcao(); texto_opcao(escolha); } while(escolha != 5); out.println("FIM DE PROGRAMA !!"); } }

Ex14: Escrever um programa que gere um nmero aleatrio entre 1 e 100. O programa dar 5 tentativas ao utilizador para acertar no nmero gerado. A cada tentativa do utilizador, o programa indicar se o nmero gerado maior ou menor que o nmero dado pelo utilizador. terceira tentativa falhada o utilizador perde. Quer perca quer acerte, o programa deve perguntar ao utilizador se quer continuar a jogar ou no. Se sim, novo nmero ser gerado e o jogo retomado.
import static java.lang.System.out; import static java.lang.Math.random; public class Ex14 { public static int geraNumero() { int numAleat = 1 + (int) (random() * 100); return numAleat; }
Laboratrios de JAVA: Java Base F. Mrio Martins Pg. 14

public static void main(String[] args) { int numero; int opcao; int tentativa; int palpite; int resposta; boolean acertou; do { numero = geraNumero(); tentativa = 1; out.print("Tentativa " + tentativa + " - Qual o numero gerado? "); palpite = Input.lerInt(); acertou = false; while( tentativa < 5 && !acertou) { if(palpite == numero) acertou = true; else { if (palpite > numero) out.println("PARA BAIXO !!"); else out.println("PARA CIMA !!"); tentativa++; out.print("Tentativa " + tentativa + " - Qual o numero gerado? "); palpite = Input.lerInt(); } } // verifica se acertou ou no if (acertou) out.println("PARABNS ACERTOU !!"); else out.println("FALHOU ! O nmero era o " + numero); out.println("Continuar Jogo (1) ou Sair(outro): "); resposta = Input.lerInt(); } while(resposta == 1); out.println("FIM DO JOGO ........"); } }

Ex15: Escrever um programa que leia o ano, ms e dia de nascimento de uma pessoa e calcule a sua idade actual, indicando ao utilizador a data de nascimento lida, o dia de hoje e a idade que foi calculada.
import java.util.GregorianCalendar; import static java.lang.System.out; public class Ex15 { public static void main(String[] args) { int ano, mes, dia; String resp = ""; do { out.print("Ano de nascimento: "); ano = Input.lerInt(); do { out.print("Ms de nascimento: "); mes = Input.lerInt(); } while(mes <= 0 || mes > 12); do { out.print("Dia de nascimento: "); dia = Input.lerInt(); } while(dia <= 0 || dia > 31); // Nota: Janeiro = 0 para um Calendar !! GregorianCalendar dataNascimento = new GregorianCalendar(ano, mes-1, dia); out.printf("NAscido a %1$td/%1$tm/%1$tY%n", dataNascimento); GregorianCalendar hoje = new GregorianCalendar();

Pg. 15

F. Mrio Martins

Laboratrios de JAVA: Java Base

2009-2010
// diferena de anos int anos = hoje.get(GregorianCalendar.YEAR) dataNascimento.get(GregorianCalendar.YEAR); out.printf("DATA ACTUAL : %1$td-%1$tm-%1$tY%n", hoje); out.println("IDADE NO CORRIGIDA: " + anos + " anos."); GregorianCalendar diaDeAnosEsteAno = dataNascimento; // dia de anos este ano = data de nascimento + idade no corrigida diaDeAnosEsteAno.add(GregorianCalendar.YEAR, anos); out.printf("ANOS A %1$td-%1$tm-%1$tY%n", diaDeAnosEsteAno); // j fez anos ou no ?? if (hoje.before(diaDeAnosEsteAno)) out.println("Ainda l no chegamos !!"); anos--; out.println("A pessoa tem " + anos + " anos !"); out.println("------------------------------------------"); out.print("Quer calcular mais (S/*) ? "); resp = Input.lerString(); out.println(); } while(resp.equals("S") || resp.equals("s")); out.println("---- FIM DO CALCULADOR DE IDADES .... "); } }

Ex16: Escrever um programa que leia duas datas (ano, ms e dia) e determine o nmero de anos entre tais datas.
/** * Clculo da Diferena em Anos entre duas Datas * * @author FMM * @version 1.0/2009 */ import java.util.GregorianCalendar; import static java.lang.System.out; public class Ex16 { public static GregorianCalendar lerData() { int ano, mes, dia; do { out.print("Ano a considerar: "); ano = Input.lerInt(); } while(ano <= 0); do { out.print("Ms (Janeiro = 0) : "); mes = Input.lerInt(); } while(mes <= 0 || mes > 12); do { out.print("Dia: "); dia = Input.lerInt(); } while(dia <= 0 || dia > 31); return new GregorianCalendar(ano, mes, dia); }

Laboratrios de JAVA: Java Base

F. Mrio Martins

Pg. 16

public static int totalAnos(GregorianCalendar data1, GregorianCalendar data2) { long dif = data1.getTimeInMillis() - data2.getTimeInMillis(); // de milisegundos para anos long totalSeg = dif/1000; int totalMin = (int) totalSeg/60; int totalDias = totalMin/(60*24); int anos = totalDias/(30*12); return anos; } public static void main(String[] args) { out.println("DATAS EM COMPARAO : "); GregorianCalendar data1, data2; data1 = lerData(); data2 = lerData(); out.printf("DATA1 %1$td/%1$tm/%1$tY%n", data1); out.printf("DATA1 %1$td/%1$tm/%1$tY%n", data2); int anos = 0; if(data1.before(data2)) anos = data2.get(GregorianCalendar.YEAR) - data1.get(GregorianCalendar.YEAR); if(data2.get(GregorianCalendar.MONTH)< data1.get(GregorianCalendar.MONTH)) anos--; out.println("Diferem de " + anos + " anos!"); // ou ainda long anos1 = (data1.before(data2)) ? totalAnos(data2, data1) : totalAnos(data1, data2); if(data2.get(GregorianCalendar.MONTH) < data1.get(GregorianCalendar.MONTH)) anos--; out.println("Diferem de " + (int) anos1 + " anos!"); } }

Pg. 17

F. Mrio Martins

Laboratrios de JAVA: Java Base

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy