Exercício /Solução Exercícios em Java usando estruturas de controle de fluxo Slides_Java_3 • Escreva um programa em Java que calcule a soma dos números pares entre 2 e 200. • (resultado=10100) public class SumEvenIntegers{ public static void main(String[] args){ int sum = 0; for (int i = 2; i <= 200; i =i+2) { sum = sum+ i; } System.out.println("Sum: " + sum); } } Sistemas Informáticos Exercício/Solução Exercício Semelhante • Escreva um programa que leia valores inteiros de um ficheiro e que no final do programa imprima no écrân a média dos números positivos. • O programa termina quando chegar ao final do ficheiro. • Determinar os múltiplos de 5, mas que não sejam múltiplos de 3, entre 100 e 10000. import essential.*; class multiplos{ public static void main(String args[]){ System.out.println("Eis os numeros entre 100 e 10000 que sao multiplos de 5 mas nao sao de 3:"); for(int i =100; i <= 10000; i++){ if((i % 5 == 0)&&(i % 3 != 0)) System.out.println(i+" "); } } } Exercício • • Escreva um programa que represente um quadrado de asteriscos. O tamanho do lado é definido pelo utilizador. Exemplo (n=5): ***** ***** ***** ***** ***** Solução import essential.*; class Asteriscos { public static void main(String[] args) { int lado; System.out.print("Qual a dimensão do quadrado? "); lado = Keyboard.readInt(); if (lado >0) { for (int i = 1; i<= lado; i++) { for (int j = 1; j <=lado; j++) System.out.print("*"); System.out.println(); } } else System.out.println("Por favor, introduza um valor positivo!"); } } 1 Exercício Calcular o valor do saldo de um artigo, sabendo que os descontos são feitos em função do preço e segundo a seguinte tabela: Preço P>10000 5000 < P <= 10000 2500 < P <= 5000 outros Desconto 40% 20% 10% 5% Solução import essential.*; public class saldo{ public static void main(String args[]){ int p; double saldo; System.out.println("Qual o preço do artigo: "); p = Keyboard.readInt(); if(p > 10000) saldo = p * 0.4; else if(p > 5000) saldo = p * 0.2; else if(p > 2500) saldo = p * 0.1; else saldo = p*0.05; System.out.println("Terá um saldo de "+ saldo + " euros"); System.out.println("Custo final do artigo = "+ (p-saldo)); } } Exercício • Dados três números inteiros positivos: Exercício • – Determinar se estes 3 números podem ser os comprimentos dos lados de um triângulo rectângulo; – Determinar a soma dos seus quadrados; – Determinar o quadrado da sua soma; apresenta a tangente. – Determinar a sua média aritmética. Exercício • Escreva um programa que calcule qual é o menor e o maior de 10 números inteiros introduzidos pelo utilizador. • Exemplo: 8 23 45 2 56 3 7 12 38 43 Maior=56 Menor=2 Escreva um programa em Java que apresente uma tabela no écrân onde a primeira coluna deve ter os graus de um ângulo desde 0º a 360º (de 30 em 30). Na 2ª coluna apresenta o seno desse ângulo, na 3ª coluna apresenta o coseno e na 4ª coluna Grau Seno Coseno Tangente 0 30 60 90 120 150 180 ... 0.00 0.50 0.87 1.00 0.87 0.50 0.00 1.00 0.87 0.50 0.00 -0.50 -0.87 -1.00 0.00 0.58 1.73 16331239353195370.00 -1.73 -0.58 -0.00 Exercício • Escreva um programa que calcule e apresente todos os divisores de um número. • Exemplo: input = 12 divisores = 1, 2, 3, 4, 6, 12 2 Exercício • Escreva um programa que leia 2 nºs inteiros e apresente a sua soma se ambos forem pares, o seu produto se ambos forem ímpares ou o número ímpar se um deles for par e o outro ímpar. • Exemplos: input: x=4, y=8 ----- result = 12 input: x=3, y=9 ----- result = 27 input: x=4, y=11 ----- result = 11 Exercício 1. Escreva um programa que determine se um determinado ano (introduzido pelo utilizador) é um ano bissexto ou não. 2. Os anos bissextos são múltiplos de 4, não são múltiplos de 100, com excepção dos anos que são múltiplos de 400, que também são bissextos. 3. Por exemplo, os anos 1996 e 2000 são bissextos, enquanto que os anos 1998 e 1900 são comuns. Exercício • Ler três números inteiros e determinar qual deles é o maior e qual é o menor. Exercício • A série de Fibonnaci é dada por: F(0) = 0 F(1) = 1 F(n) = F(n-2) + F(n-1) (n>=2) • Escreva um programa para apresentar os primeiros 20 termos desta série. Exercício • Um hotel concebeu uma forma original de cobrar aos seus clientes. A 1ª noite custa 50€, a segunda 25€ (50€/2), a n-ésima custa 50€/n. Calcule a cobrança a efectuar a um cliente que fique n noites no hotel (preço a pagar por noite e o total). Exercício Escreva um programa para calcular a soma dos digitos de um número. Exemplos: 43 -> 7 432 -> 9 3271 -> 13 3 Gerador de Números • Escreva um programa que execute em ciclo, a gerar números aleatórios entre 1 e 6. O programa deve terminar quando sair um 6 e deve imprimir no écrân quantos números é que foram gerados. Estrutura do Programa 1. Gera um número entre 1-6 e imprime no écrân 2. Incrementa contador de tentativas 3. Enquanto esse número for diferente de 6 repete: 1. Gera um novo número entre 1-6 e imprime 2. Incrementa contador de tentativas 4. Imprime no écrân o número total de tentativas • Como gerar um número inteiro entre 1 e 6: int number = (int) Math.floor(6*Math.random())+1; random()- Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. floor(double a) - Returns the largest (closest to positive infinity) double value that is not greater than the argument and is equal to a mathematical integer. Jogo: Adivinhar um número • Escreva um programa em Java que começa por gerar um número entre 1 e 100 e depois pede ao utilizador para adivinhar esse número. O programa executa em ciclo até o número ser adivinhado. • Eis a estrutura: 1. 2. 3. Gera número (n) entre 1 e 100. Pergunta ao utilizador qual é o número Enquanto a resposta não estiver certa 1. Se a tentativa do utilizador for menor do que o número n 2. Se a tentativa do utilizador for maior do que o número n 1. 1. 3. 4. Diz ao utilizador que o número está acima Diz ao utilizador que o número está abaixo Pede ao utilizador uma nova tentativa Imprime “certo!” no écrân Resolução parcial... number = (int) Math.floor(6*Math.random())+1; Exercício • Calcular as coordenadas de um projéctil e fazer a sua representação usando a classe Graph. • Se o projéctil é lançado a uma velocidade inicial de υ m/s e segundo um ângulo α sobre a horizontal então as coordenadas x,y do projéctil t segundos depois do lançamento são dadas pelas seguintes fórmulas: x = υt cos(α ) y = υt sin(α ) − gt 2 2 • Considera-se que não existe resistência do ar. • Os graus α na fórmula devem ser em radianos. π _ radians = 180 º Output (60º, 60 m/s) import essential.*; public class MyProjectil{ public static void main(String[ ] args){ double a, u; System.out.print( "Introduza o grau inicial (em graus): " ); a = Keyboard.readDouble(); System.out.print( "Introduza a velocidade inicial: " ); u = Keyboard.readDouble(); a = a*Math.PI/180; //converter para radianos Graph traj = new Graph(); traj.setAxes(0, 400, 0, 150); .... traj.addPoint(x, y); } } } 4 Determinar se um número é Primo • Escreva um programa em Java que indique se um determinado número (P) é primo ou não. Eis um possível algoritmo: • • • • • • P é o número que vai ser testado. Temos que verificar se P conseguimos encontrar qualquer número N, em que dá resto N zero. Se não existir nenhum número N então P é um número primo. Se P deve ser ímpar então os números N devem ser todos ímpares. N começa no número 3. Quando paramos o teste? Quando N=P? Não é preciso, podemos parar quando N atingir P Se existir um factor superior a P deve existir um outro factor menor que P, que deverá ter sido encontrado. Algoritmo • • • • – Incrementa N por 2 (N = N + 2) – Calcula R (R = P % N) • Se R ≠ 0 P é um número Primo! • Caso contrário, P não é primo. Exercício • Escreva um programa em Java para inverter os digitos de um número positivo. Pede ao utilizador para introduzir o número P N=3 Encontra resto da divisão (R = P % N) Enquanto R ≠ 0 e N p P repete: Exercício • Um número inteiro não negativo diz-se perfeito se é igual à soma dos seus divisores próprios. • Por exemplo, 6 é um número perfeito porque 6=2+3+1. • Dado n, determine todos os números perfeitos inferiores a n. • Exemplo: input: 1234 result: 4321 Exercício • Resultado Escreva um programa em Java, que usando a classe Graph, represente o seguinte fractal que é dado pela seguinte fórmula: x k +1 = y k (1 + sin 0.7 x k ) − 1.2 x k y k +1 = 0.21 − x k • • Comece com xo=yo=0.0. Deve representar os pontos em separado no gráfico da figura usando as seguintes instruções: Graph one = new Graph(); one.setDrawingStyle(Graphable.PLOTPOINTS); one.setAxes(-1,0.5,-0.5,2); // ... one.addPoint(…,…); 5 Exercício Resultado • A seguinte fórmula é usada para modelar o crescimento limitado da população quando existem, por exemplo, restrições de alimento: yk+1 = r.yk(1-yk) • Fenómenos interessantes ocorrem quando o valor de r está entre 3 e 4 (conhecido pelo “caos matemático”). • Escreva um programa em Java para representar a evolução de y sobre k, usando a classe Graph. • Teste por exemplo com 3.9, e y0=0.2. Exercício Resultado • A Espiral de Arquimedes é representada pela seguinte fórmula: r = a.α x = r.cos(α ) y = r.sin(α ) • Escreva um programa em Java, usando a class Graph, que represente uma espiral de Arquimedes. (por ex: a=0.1,α =0.1.....50). Exercício Resultado • A equação de uma elipse em coordenadas polares é dada pela seguinte fórmula: r = a.(1-e2)/(1 – e.cosθ) • a é o semi-eixo maior; • “e” é a ecentrecidade. • O cometa Halley que nos visitou em 1985/86 movese numa trajectória elíptica em órbita do Sol. O semieixo maior (a) é igual a 17.9 A.U. (A.U.= 1 unidade astronómica, aprox. distância da Terra ao Sol, 149.6 milhões kms). • A ecentricidade da órbita é 0.967276. • Escreva um programa em Java que desenhe a órbita do cometa Halley e a órbita da Terra (neste último caso, assuma uma órbita circular). 6 Números Triangulares 1 3 6 10 1 3 6 10 15 21 28 36 45 55 66 ... Programa em Java • Escreva um programa em Java que calcule os primeiros 100 números triangulares e os armazene num vector. Deve também apresentá-los no écrân. • De seguida escreva mais um pedaço de código que prove a seguinte propriedade: 1+3=4 (22) 3+6=9 (32) 6+10=16 (42) 10+15=25 (52) 1 3 6 10 15 21 28 36 45 55 66 ... Os números de Bonatchi 1 1 2 3 5 8 13 21 34 55 89 144 233 ... 1=1 1+1=2 1+2=3 2+3=5 3+5=8 5+8=13 8+13=21 13+21=34 Programa em Java • Escreva um programa em Java para calcular os 40 primeiros números da série de Bonatchi. 1 1 2 3 5 8 13 21 34 55 89 144 233 ... Série de Bonatchi 1 1 2 3 5 8 13 21 34 55 89 144 233 ... 1+1+3+8+21=34 1+2+5+13+34=55 1+1+3+8+21+55=89 ... • Acrescente mais um pedaço de código no seu programa de modo a provar que esta regra é verdadeira. 7 8