Segunda Parte

Transcrição

Segunda Parte

Faculdade
de
Ciências
‐
Universidade
Agostinho
Neto
Departamento
de
Matemática
e
Engenharia
Geográfica
Ciências
da
Computação
Programação
II
Segunda
Parte
Adaptado de um original dos docentes de ISCTE
Objectivos
Os alunos no final desta lista dos exercicios deverão conhecer:
1.
2.
3.
4.
A estrutura básica de programas em Java.
O conceito de variável.
Os tipos primitivos em Java.
Procedimentos simples para leitura do teclado e escrita no ecrã.
Os alunos no final desta aula deverão ser capazes de:
1. Desenvolver programas simples com o Eclipse e as ferramentas de desenvolvimento do
J2SE.
Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão repetir a
aula autonomamente ou recorrer aos horários de dúvidas.
Resumo
Variáveis:
•
•
•
Servem para guardar informação
Têm sempre tipo*, nome e valor
Têm que ser declaradas (associadas a um tipo) e inicializadas (sendo-lhes atribuído
um valor)
o exemplo abaixo declara a variável um_número como do tipo inteiro e em seguida
inicializa-a com o valor 12, o que se poderia traduzir em Java por: int um_número = 12;
Em seguida exemplifica-se a declaração e inicialização de uma variável booleana:
boolean encontrado = false;
* Tipos Primitivos:
•
•
•
•
char – um caracter;
int – número inteiro;
float ou double – número decimal;
boolean – verdadeiro ou falso;
Outros tipos de dados:
•
•
Tipos definidos na biblioteca do Java (e.g. Object, String);
Tipos definidos pelo utilizador;
Operadores lógicos:
•
•
•
&& (e)
|| (ou)
! (negação)
Operadores aritméticos:
•
•
•
•
•
•
•
•
•
•
•
x
x
x
x
x
x
x
x
x
x
x
< y (x menor que y?),
> y (x maior que y?),
<= y (x menor ou igual a y?),
>= y (x maior ou igual a y?),
== y (x é igual a y?),
!= y (x é diferente de y?)
= y (x passa a ter o valor de y)
/ y (resultado da divisão de x por y)
% y (resto da divisão de x por y)
+ y (soma de x e y)
– y (subtracção de x e y)
Operadores de incrementação e decrementação (prefixos e sufixos):
•
•
++ (p.e., ++x ou x++ que equivale a x = x + 1; depois veremos diferenças)
-- (p.e., --x ou x-- )
Expressões: Combinam variáveis, valores literais e operadores produzindo um valor
Variáveis e operadores (Exemplos de expressões, com variáveis declaradas e inicializadas com
valores):
•
•
•
•
•
char a = ‘z’;
int x = 45 + 23;
int y = x + 1;
String nome = “Introdução à Programação”;
boolean b = (x >= 0 && x <= 10);
Conversões entre tipos de dados:
tipo_destino variável_destino = (tipo_destino)variável_original;
Conversões possíveis actualmente
•
•
caracteres (char) <-> números inteiros (int)
números decimais (float, double) <-> números inteiros (int)
Exemplos de aplicação de conversões:
// se considerarmos
int i = 65;
char c = 'a';
System.out.println(" "+i+“,"+(char)i+“,"+(float)i+" ");
System.out.println(" "+c+“,"+(int)c+“,"+(float)c+" ")
// as instruções acima resultarão em:
Instruções de selecção (if):
Servem para indicar em que condições um conjunto de instruções é executado ou não:
(condição) { // Guarda
instruções_1; // instruções executadas quando a condição é verdadeira
} else {
instruções_2; // instruções executadas quando a condição é falsa
}
if
Exemplo de utilização da instrução 'if' para calcular se um número está entre 0 e 10
int x = Teclado.intLido();
if (x >= 0 && x <= 10) {
System.out.println(“x está entre 0 e 10”);
} else {
System.out.println(“x não está entre 0 e 10”);
}
Exercício 1
a) Execute o seguinte código e interprete o resultado
System.out.println("Caracteres: " + (char)73 + (char)80);
System.out.println("Codigos: " + (int)'I' + " " + (int)'P');
char letra_actual = 'A';
char fora_alfabeto = (char) ( (int)'Z' + 1 );
do {
System.out.print(letra_actual);
letra_actual = (char) ((int)letra_actual + 1);
} while ( letra_actual != fora_alfabeto );
System.out.println();
b) Execute o seguinte código e interprete o resultado. Experimente com os números 5 e 10.
Scanner teclado = new Scanner( System.in );
int a = 2147483640;
int b;
int soma;
System.out.print("Diga um número:");
b = teclado.nextInt();
soma = a + b;
System.out.println("Soma: = " + soma );
c) Verifique o resultado produzido pelo código anterior quando substitui int por float ou por
double.
Para imprimir um número decimal (x) de modo a ver todas as casas decimais, use:
System.out.printf("%10.0f\n", (float)x);
ou
System.out.format("%10.0f\n", (float)x);
ou (último recurso, para versões mais antigas da máquina virtual Java)
System.out.printf("%10.0f\n", (new Object[1])[0] = new Float(x));
d) Faça um programa que dado um número indique se ele é "zero", "positivo" ou "negativo". No
caso de ser positivo deve também indicar se é da ordem das dezenas (10.. 99), das centenas
(100..999).
Utilize a instrução de selecção if para esse efeito:
if ( condição ) {
instruções_se_verdade;
} else {
instruções_se_falso;
}
Exercício 2
a) Pretende-se escrever um programa que solicita ao utilizador o código Unicode de um
caractere representável no ecrã (ou seja, um inteiro entre 33 e 127) e imprime no ecrã o
caractere correspondente a esse código. Lembre-se que ao atribuir um valor inteiro a uma
variável do tipo char este é "transformado" no caractere correspondente do código em uso
(neste caso Unicode).
Os códigos abaixo do número 33 representam caracteres de controlo e a sua impressão no
ecrã poderá dar origem a "coisas estranhas". Os caracteres acima do 127 são específicos das
várias línguas (incluindo caracteres árabes, chineses, etc.) o que poderá originar o
aparecimento de sinais estranhos no ecrã, por isso não os iremos tentar imprimir.
b) Modifique o seu código de forma a validar o código introduzido, de forma a evitar
caracteres não representáveis
Exercício 3
a) Modifique o código do exercício 1.b) para ler dois números inteiros e calcular os seguintes
resultados:
subtracção de a por b: a - b
divisão de a por b: a / b
resto da divisão de a por b: a % b
multiplicação de a por b: a * b
Exercício 4
a) Escreva um programa que peça ao utilizador a idade de uma pessoa e escreva no ecrã a sua
faixa etária. As faixas etárias são:
•
•
•
•
dos 0 aos 14 anos: criança
dos 15 aos 17: adolescente
dos 18 aos 65: adulto
a partir dos 65: idoso
b) Altere o seu programa para que receba o ano de nascimento em vez da idade.
c) Altere o seu programa para validar o ano de nascimento, que deve estar entre 1850 e o ano
actual. Caso não esteja deve emitir uma mensagem de erro ("ano inválido") em vez da faixa
etária.
d) Altere o programa para emitir mensagens diferentes caso o ano seja abaixo de 1850 ou
acima do ano corrente.
Exercício 5
a) Escreva um programa que mostre o número de dias de um mês num determinado ano. Quer
o mês quer o ano são dados pelo utilizador (o utilizador deve introduzir uma maior do que
1752). Os anos bissextos são:
•
•
todos os múltiplos de 400,
os anos múltiplos de 4 excepto se forem múltiplos de 100.
(esta regra só é válida para datas ocidentais em geral após de 1752, embora em Portugal o
calendário Gregoriano tenha sido adoptado desde 1582).
Verifique que são bissextos os anos:
•
•
•
•
•
•
1996
2000
2004
2008
2400
2800
Verifique que não são bissextos os anos:
•
•
•
•
•
•
•
•
1800
1900
2001
2002
2003
2005
2006
2200
b) Sabendo que a fórmula para calcular o dia da semana (chamada congruência de Zeller) dada
uma data é a seguinte:
(d + 26(m+1)/10 + k + k/4 + J/4 + 5J) % 7
em que:
•
•
d é o dia do mês,
m é o mês
(Janeiro e Fevereiro contam como os meses 13 e 14 do ano anterior),
i.e. se o mês for menor que três é necessário somar 12 ao mês e subtrair 1 ao ano.
•
•
J é o século (igual a ano/100) e
k é o ano deste século (ou ano % século).
O resultado será 0 para Sábado, 1 para Domingo, 2 para Segunda, etc. até 6 para Sexta.
Crie um programa que dada uma data, escreva no ecrã o número correspondente ao dia da
semana a que esta se refere.
Se quiser completar o seu programa para escrever o dia da semana por extenso, pode usar a
seguinte estratégia:
final String[] nomes_dos_dias = {"Sábado", "Domingo", "Segunda", ... ,
"Sexta"};
System.out.println("Dia por extenso: " + nomes_dos_dias[dia]);
Nota: esta regra só é válida para datas ocidentais em geral após de 1752, embora em Portugal
o calendário Gregoriano tenha sido adoptado desde 1582.