A • • • • • : __________________________________________ Duração: minutos. consulta. Não esqueça de assinalar o seu nome, a sua turma e o nome do seu professor ao lado. Parte teórica (total: pontos) Cada questão tem apenas resposta certa. Cada resposta certa vale 0,3 ponto. Três respostas erradas uma certa. Respostas em branco serão consideradas. Serão consideradas as respostas assinaladas à e sem rasuras no quadro de respostas abaixo. Parte prática (total: pontos) Utilizar o verso das folhas da prova como rascunho. Podem ser respondidas à ou à . ! : _____________________________________ : _________________________ 29/06/2004 (marque com um "X"): Custódio Dirceu Marcus Vinícius " # $ % & ' PARTE TEÓRICA Questão 1 A estratégia adotada para a execução de programas escritos na linguagem Java consiste em: A. Primeiramente compilar o programa-objeto e depois interpretar o programafonte; B. Primeiramente compilar o programa-fonte e depois intepretar o programaobjeto; C. Primeiramente interpretar o programa-fonte e depois compilar o programaobjeto; D. Primeiramente interpretar o programa-objeto e depois compilar o programafonte. Questão 2 Declarações e comandos são elementos fundamentais de programas Java e servem, respectivamente, para: 1/5 A. Descrever as operações que um programa deverá executar e as variáveis que ele irá manipular; B. Descrever as variáveis que o programa irá manipular e as operações que ele deverá executar; C. Relacionar as variáveis que o programa poderá manipular e as suas correspondentes propriedades; D. Especificar o fluxo das operações que o programa deve executar e as saídas que o mesmo deverá gerar. Questão 3 As estruturas de controle básicas de qualquer linguagem imperativa, e do Java em particular, servem ao propósito de: A. Permitir a verificação de tipos em tempo de compilação; B. Possibilitar a delimitação de escôpos, contribuindo para uma maior eficiência e uma maior legibilidade do programa-fonte; C. Permitir a seqüencialização e a repetição de comandos, bem como a ramificação do fluxo de controle; D. Reduzir o tempo de vidas das variáveis, contribuindo para um uso mais racional da memória do computador. Questão 4 Numa linguagem com escopos estáticos: A. Os escopos de algumas variáveis podem ser definidos em tempo de compilação e os de outras apenas em tempo de execução; B. Os escopos de todas as variáveis só podem ser definidos em tempo de execução; C. Os escopos de todas as variáveis podem ser definidos em tempo de compilação; D. O escopo de uma variável só pode ser definido a partir do momento em que o sistema realizar a alocação dessa variável Questão 5 O tempo de vida de uma variável é definido como sendo: A. A região de programa situada entre a declaração da variável e o término do bloco no qual ela foi declarada; B. A região de programa situada entre o início e o término do bloco no qual ela foi declarada; C. O tempo total de execução do bloco no qual ela foi declarada; D. O tempo total transcorrido entre a alocação e a desalocação da variável. A Questão 6 Variáveis estáticas, stack-dinâmicas e heap dinâmicas são desalocadas da memória, respectivamente: A. Ao término do bloco em que foram declaradas, ao fim do programa e na execução do comando new; B. Ao término da execução do programa, ao fim da execução do bloco em que foram declaradas e no instante em que não houverem mais referências para a variável; C. No instante em que não houverem mais referências para a variável, ao fim da execução do programa e no término da execução do bloco em que foram declaradas; D. Ao término da execução do programa, na execução do comando new e no instante em que não houverem mais referências para a variável. Questão 7 Ao se trabalhar com números inteiros na linguagem Java, uma alternativa seria utilizar sempre apenas o tipo de dados long, ignorando os tipos byte, short e integer. Tal escolha: A. B. C. D. Permitiria a construção de programas mais legíveis; Possibilitaria o uso mais racional da memória do computador; Tornaria a execução dos programas mais rápida; Minimizaria a possibilidade de overflow ou underflow. Questão 8 Linguagens com tipos fortes são sempre mais indicadas do que linguagens com tipos fracos. Esta afirmação: A. É verdadeira, pois linguagens com tipos fortes produzem programas mais seguros; B. É falsa, pois linguagens com tipos fracos são importantes na programação de sistemas, protocolos e controle de dispositivos; C. É falsa, pois linguagens com tipos fracos proporcionam maior liberdade ao programador; 2/5 D. É verdadeira, pois linguagens com tipos fortes sempre geram programas executáveis mais eficientes. Questão 9 Se uma linguagem possui tipos dinâmicos e tipos fortes, então: A. B. C. D. A segurança proporcionada pela tipagem forte fica comprometida; Todas as verificações poderão ser feitas em tempo de compilação; Todas as verificações deverão ser feitas em tempo de execução; Algumas verificações poderão ser feitas em tempo de compilação, outras em tempo de execução, porém todas as verificações serão sempre realizadas. Questão 1 (2,0 pontos) A O programa a seguir deve simular um jogo de adivinhação entre o sistema (computador) e um jogador, permitindo ao jogador no máximo 7 tentativas de acerto, com o seguinte mecanismo: o sistema escolhe aleatoriamente um valor inteiro na faixa de 1 a 100, sem que o jogador veja esse valor; em seguida o jogador deverá tentar adivinhar o valor escolhido pelo sistema. As tentativas devem cessar se o jogador adivinhar o valor escolhido pelo sistema antes da sétima jogada. Até a sexta tentativa, a cada tentativa incorreta, o sistema deve exibir uma mensagem de orientação: “tente um valor menor” ou “tente um valor maior” class ApAdivinha{ public static void main(String[] args){ Questão 10 Em contraposição aos tipos simples, os tipos agregados oferecidos pelas linguagens de programação mais comuns servem ao propósito mais elementar de: Keyboard kbd=Console.getInput(); Screen scr=Console.getOutput(); int alvo, palp, quant; A. Possibilitar ao programador explicitar as relações entre informações correlatas, aumentando a legibilidade do seu programa; B. Permitir a construção de programas mais eficientes; C. Favorecer a economia no uso da memória do computador; D. Introduzir mecanismos que permitam uma verificação forte de tipos. scr.println("\n\n você tem 7 chances para adivinhar o valor escolhido "); alvo=(int) (Math.random( )*100 + 1); quant=0; palp=0; while( LACUNA 1 ){ quant=quant+1; palp=kbd.readInt("\n faça sua tentativa numero : "+quant+"\n"); PARTE PRÁTICA if( LACUNA 2 ) scr.println("tente um valor maior"); else if( LACUNA 3 ) Respostas da questão 1 scr.println("tente um valor menor"); Complete com expressões adequadas as lacunas indicadas no texto do programa ao lado. } if( LACUNA 4 ) scr.println("você acertou o valor escolhido "+alvo); LACUNA 1 else scr.println você não conseguiu acertar, o valor escolhido foi "+alvo LACUNA 2 } } LACUNA 3 LACUNA 4 3/5 A } Questão 2 (20 pontos) Complete o texto do programa Java que deve receber a entrada de 100 valores reais armazenando-os num vetor x e, depois da entrada dos 100 valores, deve definir e exibir os componentes de outro vetor y, com 50 componentes, onde: y0=x0+x99 ; y1=x1+x98 ; y2=x2+x97 e assim sucessivamente até y49=x49+x50 . class ApVetores{ public static void main(String[] args){ Keyboard kbd=Console.getInput(); Screen scr=Console.getOutput(); Respostas da Questão 2 Observação: nas LACUNAS 1 e 2 devem ser dispostas as declarações dos vetores x e y, respectivamente. respostas: int a,b; LACUNA 1 ; LACUNA 1 LACUNA 2 ; a=0; while(a<100){ x[a]=kbd.readFloat("digite o "+(a+1)+"o. do vetor x: "); LACUNA 3 ; LACUNA 2 LACUNA 3 LACUNA 4 } b=0; LACUNA 5 while( LACUNA 4 ){ y[b]= LACUNA 5 ; LACUNA 6 LACUNA 6 ; } b=0; while(b<50){ scr.print("\n "+y[b]); b=b+1; } } 4/5 A Questão 3 (3,0 pontos) Considere o seguinte problema: “Uma empresa de transportes rodoviários registra, para cada um de seus motoristas, o total mensal de quilômetros percorridos e realiza pagamentos de prêmios da seguinte maneira: para quilometragens percorridas até 4000 km o prêmio é de 3,5% do salário bruto do motorista e para quilometragens superiores a 4000 km, além dos 3,5%, o motorista recebe mais 1,5% do salário bruto a cada 300km que excederem os 4000km; nessa última situação as parcelas menores do que 300km não recebem o adicional de prêmio”. Conhecendo-se o valor do salário bruto de um motorista e o seu total mensal de quilômetros percorridos, como obter o valor do prêmio correspondente?“ observação: a quilometragem percorrida deve ser representada por uma variável de tipo inteiro. Veja os exemplos: exemplo 1: salário bruto R$1270,00 e quilometragem percorrida de 3863km prêmio de 3,5% de R$1270,00 prêmio=R$44,45. exemplo 2: salário bruto R$1270,00 e quilometragem percorrida de 4812km prêmio de 3,5%+1,5%+1,5% de R$1270,00 prêmio=R$82,55 Construa o texto de um programa Java que represente um método de resolução do problema. 5/5