Programação de Computadores II TCC 00.174 Profs.: Leandro A. F. Fernandes (A1) & Marcos Lage (B1) & Isabel Rosseti (C1) (Turma A1) www.ic.uff.br/~laffernandes (Turma B1) www.ic.uff.br/~mlage (Turma C1) www.ic.uff.br/~rosseti Conteúdo: Introdução ao Java (exercícios) Material elaborado pelos profs. Anselmo Montenegro e Marcos Lage com contribuições do prof. Leandro A. F. Fernandes Conversão de cores Diferentes sistemas são utilizados para representar cores. Por exemplo, o sistema mais comum para representação de cores em display LCD, câmeras digitais e páginas web conhecido como sistema RGB, especifica os níveis de vermelho(r), verde(g) e azul(b) em uma escala de 0 a 255. O sistema utilizado na publicação de livros e revistas, conhecido como CMYK, especificaosníveisdeciano,magenta,amareloepretoemum escala de 0.0 a 1.0. 10/09/2013 Programação de Computadores II 2 1
Conversão de cores Escreva um programa Java que receba três inteiros r, g e b representando um cor no sistema RGB e imprima os valores das componentes c, m, y, k correspondentes no sistema CMYK. Se r=g=b=0 então c=m=y=0 e k = 1, caso contrário utilize a fórmula abaixo: w max(r / 255, g /255,b /255); c (w (r / 255)) / w m (w (g / 255)) / w y (w (b /255))/w k 1 w 10/09/2013 Programação de Computadores II 3 Padrão de divisores EscrevaumprogramaJavaque receba um inteiro N e imprima um tabela NxN com um asterisco na linha i e coluna j se ou i divide j ou j divide i. 10/09/2013 Programação de Computadores II 4 2
Fatoração de Inteiros EscrevaumprogramaJavaque receba um inteiro N e imprima sua fatoração. (sequencia de inteiros primos que multiplicados iguala a N). Escreva umaversão maiseficiente do seu algoritmo. 10/09/2013 Programação de Computadores II 5 Fatoração de Inteiros EscrevaumprogramaJavaque receba um número inteiro N e gere todos os fatores primos de N. 10/09/2013 Programação de Computadores II 6 3
Cálculo de Raiz Quadrada Escreva um programa Java que ache a raiz quadrada de um número real c utilizando método de Newton Raphson. Sob certas condições, dada uma função f(x), o método de Newton Raphson é capaz de encontrar as raízes de uma equação f(x)=0. Algoritmo: 1. O método inicia com uma estimativa da raíz t 0 2. A partir de uma estimativa t i,computeumanovaestimativat i+1 onde t i é a interseção da linha tangente ao gráfico de f(x) no ponto (t i,f(t i )) com o eixo das abcissas. 10/09/2013 Programação de Computadores II 7 Cálculo de Raiz Quadrada t i f(t i+1 ) f(t i ) t i+1 t i f (t i ) f (t ) 0 i t i t i 1 f (t i )(t i t i 1 ) f (t i ) t i 1 t i f (t ) i f (t i ) 10/09/2013 Programação de Computadores II 8 4
Cálculo de Raiz Quadrada Computar a raiz de um número é equivalente a achar a raíz da função f(x)=x 2 c. Considere uma estimativa inicial t 0 =c. Se t i *t i c<eps;entãotomet i como raiz de c. 10/09/2013 Programação de Computadores II 9 Jogo de senhas EscrevaumprogramaemJavaque simule um jogo de senhas. Objetivo: descobrir a senha gerada aleatoriamente pelo computador. A cada rodada: o jogador tenta descobrir a senha e o computador retorna * para os dígitos que ainda não foram descobertos e o valor do digito nas posições corretas. Fim do jogo: Jogo continua até que a senha seja descoberta ou o numero máximo de jogadas seja atingido. Obs: As senhas são compostas por números inteiros de 0 ao numero de dígitos da senha. O número de tentativas é igual ao número de dígitos da senha. 10/09/2013 Programação de Computadores II 10 5
Jogo de dados Escreva um programa em Java que simule um jogo de dados. Lançamento inicial: Se o lançador tirar um 7 ou 11 no primeiro lançamento, vence o jogo. Se os dados somarem 2, 3 ou 12, o jogador perde o jogo. Qualquer outro número que saia no lançamento inicial (4, 5, 6, 8, 9, ou 10) se torna o seu Ponto. Os lançamentos continuam até que: OPonto sair antes de um 7, e assim o jogador vence. O 7 sair antes do Ponto, e assim o jogador perde. 10/09/2013 Programação de Computadores II 11 Picos de um terreno Escreva um programa em Java que calcule os picos de um terreno. Modelagem do terreno: Podemos representar um terreno computacionalmente através de uma matriz que armazena a altura dos NxN pontos de um reticulado. 10/09/2013 Programação de Computadores II 12 6
Matriz de Hadamard A Matriz de Hadamard é uma matriz quadrada cujas entradas são 1 ou 1 e as linhas são ortogonais entre si. Podemos construir uma matriz de Hadamard NxN, com N sendo potência de 2, da seguinte forma: Para N=1 M 1 = 1 Para N = 2 M 2 = 1 1 1 1 Para N = 2 k M 2k = M 2k 1 M 2k 1 M 2k 1 M 2k 1 10/09/2013 Programação de Computadores II 13 Sequencia de Símbolos Escreva um programa em Java que receba uma sequencia de letras da linha de comando formada por um conjunto de símbolos e gere as seguintes mensagens: Para uma letra a Soco. Para uma letra b Chute lateral. Para duas letras a s consecutivas Chute circular. Para uma letra a seguida de uma letra b imprime dragon punch. 10/09/2013 Programação de Computadores II 14 7
Sequência de Símbolos O problema pode ser resolvido através de um autômato finito determinístico, que é um modelo para definição de linguagens regulares composto de cinco elementos: <Σ,S,s o, δ, F>, onde: Σ éoalfabeto sobre o qual a linguagem é definida; S é um conjunto finito de estados não vazio; s o éoestado inicial, s o S; δ:s Σ S é a função de transição de estados; Féoconjuntodeestados finais F S. 10/09/2013 Programação de Computadores II 15 Sequência de Símbolos Um AFD é uma máquina reconhecedora de cadeias que pertencem a linguagem. Ele recebe uma cadeia e diz se ela pertence ou não a linguagem modelada. Ele possui um controle de estados S. O Controle Finito de Estados sempre coloca a máquina em um estado pertencente a S. 10/09/2013 Programação de Computadores II 16 8
Sequência de Símbolos A função F diz como a máquina deve mudar de estado, à medida em que os símbolos da cadeia são analisados. Após processar todos os símbolos e realizar as mudanças determinadas o AFD aceita ou não a cadeia. Uma cadeia é rejeitada quando o autômato para em um estado que não é final. Referência: Como construir um compilador utilizando ferramentas Java. (Márcio Delamaro novatec). 10/09/2013 Programação de Computadores II 17 Sequência de Símbolos a b b a Aceita Aceita Controle finito de estados Rejeita Controle finito de estados Rejeita 10/09/2013 Programação de Computadores II 18 9
Sequência de Símbolos Autômato finito determinístico para o problema da sequência de símbolos I s 0 a CH b a CC Sx a b Estado I CH SO Inicial CH CC DP Chute b SO DP SO CC Soco Chute circular DP Dragon Punch 10/09/2013 Programação de Computadores II 19 Caminhos Aleatórios sem Auto Interseção Suponha que você abandone seu cão no meio de uma grande cidade cujas ruas formam uma estrutura de reticulado. Considere que existamnruasna direção norte sulem nadireção leste oeste. Com o objetivo de escapar da cidade, o cão faz uma escolha aleatória de qual direção ir em cada iteração, mas sabe através do faro como evitar visitar um lugar previamente visitado. Apesar de tudo é possível que o cão fique perdido em um beco sem saída onde a próxima escolha obrigatoriamente leva a um lugar já percorrido. 10/09/2013 Programação de Computadores II 20 10
Caminhos Aleatórios sem Auto Interseção Escreva um programa Java que receba como parâmetros a largura e altura do reticulado e simule o caminho percorrido porumcãotvezes. O programa deve determinar o número de vezes em que o cão fica sem saída. 10/09/2013 Programação de Computadores II 21 11