PCF-3

Questões comentadas, artigos e notícias

Posts Tagged ‘Java’

Prova 2002: Q.33 Linguagens de Programação

Posted by papacharliefox3 em 06/11/2009

Salve, concurseiros!

33

Comentários

1 Compilador nada mais é que um programa que lê um código escrito em uma linguagem fonte e o traduz em um código (equivalente) em outra linguagem. Este não é necessariamente executável.

2 O código de montagem gerado pelo compilador é traduzido em código de máquina, entretanto este processo nõ ocorre somente em compiladores de linguagens de baixo nível.

3 Item anulado pela banca. Com esse monte de informações contidas no texto fica fácil arrumar justificativas que anulam o item. O carregador ou ligador é responsável pela carga e edições de ligações, colocando o código de máquina relocável em memória.

4 Em Java, bytecode não é código-fonte, diferentemente do que acontece com Perl.

5 Mais um item anulado. Muito texto, mais chance de anulações, enfim, sem comentários aqui…

Gabarito

1-C  2-E  3-X  4-E  5-X

X = anulada

Posted in Programação, Prova 2002 | Etiquetado: , , , , , , | Leave a Comment »

Prova de 2002 – Q.32 Programação

Posted by papacharliefox3 em 04/11/2009

Salve!

Na prova de 2002, cobrou-se apenas duas questões de conhecimento em Linguagens de Programação, cada uma com 5 itens. Segue abaixo a primeira:

32Comentários

1 Mais uma vez o ‘geralmente’ causa polêmica. Essa palavra não cabe na afirmação. Existem 2 tipos de casting nas duas linguagens (em C++ existem até operadores de casting):  implícitos e explícitos. O casting explícito não é uma exceção assim como o implícito não acontece ‘geralmente’.`

2 Toda classe em Java (declarada por meio da palavra class) é derivada da classe object. Sem classes não seria possível implementar as características comuns de linguagens orientadas a objeto.

3 A existência de ponteiros implica em aritimética de ponteiros (manipulação de endereços de memória) , o que não é equivalente as referências em Java. Estas se referem a instâncias de classe, enquanto ponteiros (em C++) se referem a endereços de memória.

4 Ponteiros do tipo void podem apontar para valores de qualquer tipo, assim ele é utilizado no casting de ponteiros ‘genéricos’. Run Time Type Information (RTTI) permitem a descoberta do tipo de um objeto quando há necessidade de casting, por exemplo, por meio do operador dynamic_cast, o que gera mais segurança ao código.

5 Assim como as variáveis, as funções também são instruções persistidas na memória e que podem ser referenciadas em C e C++.

Gabarito

1-E  2-C  3-E  4-C  5-C

Posted in Programação, Prova 2002 | Etiquetado: , | Leave a Comment »

Java Puzzles [#6] – O incremento.

Posted by p3r1t0cr1m1n4l em 05/03/2009

Qual a saída do programa abaixo?

public class Incremento {
public static void main(String[] args){
int j = 0;
for (int i = 0; i < 100; i++) j = j++; System.out.println(j); } } [/sourcecode]

Posted in Programação | Etiquetado: | 4 Comments »

Java Puzzle [#5] – Jackson 5.

Posted by p3r1t0cr1m1n4l em 24/02/2009

Cansado de resolver cenários de provas da PF e querendo dar uma desopilada, nosso colega Alexandre Teixeira (grande fã dos Jackson 5) decide fazer uma homenagem à sua música favorita: ABC ( http://www.youtube.com/watch?v=ZOXG8wtxx_w ). Ele abre o VIM e começa a codificar o seguinte programa:

public class ABC {
     public static void main(String args[]) {
          String amoEssaMusica = "ABC";
          char[] todosJuntos = { '1', '2', '3' };
          System.out.println(amoEssaMusica + " easy as " + todosJuntos);
     }
}

A pergunta que não quer calar, ele conseguiu imprimir o refrão da tão amada música?

Solução:

Infelizmente ao rodar o programa, o ilustre Alexandre terá como saída ABC easy as [C@16f0472.

O que aconteceu?

Muitas bibliotecas tratam os valores char de forma especial, representando caracteres ao invés de números. Por exemplo, passado um valor char para o println, ele vai imprimir um caractere Unicode, e não o seu código número. Com um array de valores char não é diferente! Através do overloading do método println serão impressos todos os caracteres contidos no array, invocando o .toString() de cada objeto.

O que acontece no entanto quando se invoca o toString() de um array de chars não-nulos? É retornada uma String com o nome da classe da qual o objeto é instância, a arroba (@) e uma representação hexadecimal do código hash do objeto.

A especificação de Class.getName diz que o resultado de invocar esse método em um objeto char[] é “[C”. Complementando com a arroba e o hexadecimal temos esse monstrinho da saída. =)

Como poderia ser resolvido?

public class ABC {
     public static void main(String args[]) {
          String amoEssaMusica = "ABC";
          char[] todosJuntos = { '1', '2', '3' };
          System.out.println(amoEssaMusica + " easy as " + String.valueOf( todosJuntos ) );
     }
}

Até o próximo!

Posted in Programação | Etiquetado: | 1 Comment »

Java Puzzle [#3] – Multicast

Posted by p3r1t0cr1m1n4l em 15/02/2009

Os casts em Java são usados para converter um valor de um tipo para outro tipo. O que o programa abaixo imprime?

public class Multicast {
  public static void main(String[] args) {
    System.out.println((int) (char) (byte) -1);
  }
}

Resposta:

O resultado é 65535.

O Java utiliza complemento de dois, e o inteiro -1 é representado pelos 32 bits setados em 1:

11111111 11111111 11111111 11111111

Ao converter para byte que é signed, sem problemas: ele deixa apenas o último byte e retira os demais valores 1’s mais significativos, ainda representando -1:

11111111

A pegadinha ocorre porém na transformação de byte (signed) para char (unsigned – não dá para representar negativos), cujo resultado são 16 bits, todos setados em 1:

11111111 11111111 = 2^16 = 65535.

A transformação para int ocorre também sem problemas, apenas acrescentando zeros nos 16 bits que faltavam para completar os 32 bits:

00000000 00000000 11111111 11111111 = 65535 (resultado final)

Posted in Programação | Etiquetado: | Leave a Comment »