Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Tamanho: px
Começar a partir da página:

Download "Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação"

Transcrição

1 FaculdadedeCiências UniversidadeAgostinhoNeto DepartamentodeMatemáticaeEngenhariaGeográfica CiênciasdaComputação ProgramaçãoII SegundaParte Adaptado de um original dos docentes de ISCTE Objectivos Os alunos no final desta lista dos exercicios deverão conhecer: 1. A estrutura básica de programas em Java. 2. O conceito de variável. 3. Os tipos primitivos em Java. 4. 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;

2 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 < y (x menor que y?), x > y (x maior que y?), x <= y (x menor ou igual a y?), x >= y (x maior ou igual a y?), x == y (x é igual a y?), x!= y (x é diferente de y?) x = y (x passa a ter o valor de y) x / y (resultado da divisão de x por y) x % y (resto da divisão de x por y) x + y (soma de x e y) x 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 = ; 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)

3 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: if (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 } 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 = ; int b; int soma; System.out.print("Diga um número:"); b = teclado.nextint(); soma = a + b; System.out.println("Soma: = " + soma );

4 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 ( ), das centenas ( ). 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:

5 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: Verifique que não são bissextos os anos: 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.

6 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.