Questões de Programação

Ao realizar algum tipo de concurso que inclua desenvolvimento, o concurseiro fatalmente deverá estar preparado para resolver algumas questões envolvendo linguagem de programação, o que, por conseqüência, incluirá as principais linguagens em uso no momento.

Dada a tendência de adoção do software livre pelo governo, estas questões que anteriormente abordavam linguagens como VisualBasic e Delphi, tendem agora a abordar mais amplamente linguagens como JAVA, PHP, PERL entre outras, sem esquecer de questões em C e C++.

Vejam, trata-se de uma tendência, ou seja, nada impede que um órgão governamental crobre determinada linguagem necessária à manutenção de algum software que demande a contratação de desenvolvedor com perfil específico.

Enfim, o que deve ser estudado para resolver este tipo de questão em um concurso?

Pergunta complicada essa, uma vez que cada linguagem tem suas características e cada prova suas necessidades. Complica muito tentar estabelecer uma norma, mas, ao meu ver, ao menos alguns aspectos podem ser ressaltados:

  • Não adianta conhecer ou saber como executar o famoso programa “Hello World” em várias linguagens e nada mais saber de fundamentos da mesma linguagem. Normalmente as questões de desenvolvimento não são extensas, dado o tempo da prova e outras dificuldades óbvias de publicar todo o algoritmo do programa. Em geral, a questão acaba versando sobre aspectos da linguagem: tipos, declarações de classes, integração da linguagem com banco de dados, entre muitos outros pontos devem ser muito bem treinados.
  • Detalhe importante! Não adianta treinar somente na IDE!!! Ou seja, utilizando como exemplo o Java, interfaces para desenvolvimento como Eclipse e Netbeans são ótimas, mas justamente porque tiram do desenvolvedor boa parte da carga e responsabilidade na hora de digitar o código. Se você pretende fazer uma prova, precisa ter o código entendido, logo não use sempre a IDE!  Dê preferência, quando possível, a um editor de textos normal ou até mesmo papel e lápis.

Questões Exemplo:

- Este é um exemplo de questão retirada da prova BNDES, aplicada pela CESGRANRIO para o cardo de Profissional Básico- Análise de SistemasDesenvolvimento no ano de 2008:

package p;
public class exemplo {
public exemplo() { }

public static void main(String[] args) {
try {
System.out.println(1/0);
System.out.println(“M”);
}
catch (ArithmeticException ex2) {
System.out.print(“X”);
}
catch (Exception ex3) {
System.out.print(“Y”);
}
finally {
System.out.print(“Z”);
}
System.out.print(“F”);
}
}

A resposta:  imprime XZF, pois vai gerar exceção logo ao realizar a primeira divisão, de 1 por 0, do tipo AritmeticException, que imprimirá o X.

Em seguida executará a cláusula “finally” que sempre é executada e imprimir Z.

Por último, ao sair do comando”try-catch” vai imprimir F, que independe de existir ou não exceção pois está no fluxo normal do programa.
Não se trata de uma questão difícil, mas mesmo um desenvolvedor Java que não se atenha aos detalhes sobre a exceção criada ou o próprio fluxo do programa pode errar.

Mais um exemplo segue abaixo, extraído da prova REFAP SA, elaborada também pela Cesgranrio,para o cargo Analista de Sistemas Júnior em 2007:

Em JAVA , o modificador utilizado para definir um método de  classe é o:
a) static

b) implements

c) belongs

d) unique

e) instanceof

A resposta é a) static. Na verdade, trata-se de uma questão simples mas que deve estar bem fixada, pois, mais uma vez, conceitos de OO e definições de linguagem se sobressaem, razão pela qual devem ser estudados com muito cuidado.

Para concluir, outro exemplo muito interessante segue abaixo:
A questão é, deve-se achar uma declaração para i, de forma que a execução do loop abaixo torne-se infinita. Segue:

int i = ?????
while ((i == -i) && (i=!0)) {
faça algo

}

Resista a tentação de responder que é impossível e que a questão é falsa pois, embora apareça inocente, esta questão apresenta alta complexidade.
Se desejar, pare aqui para pensar mais um pouco e tentar achar a resposta…

Não? Então vamos lá!

Primeiramente, vamos pensar sobre o domínio da declaração int. Os inteiros são infinitos, porém uma variável do tipo int não.
Ela tem escopo de 2 elevado à 32 potência, ou os valores de -2147483648 à 2147483647. Veja abaixo:

o menor int é  = Integer.MIN_VALUE = -2147483648
o maior int é = Integer.MAX_VALUE = 2147483647

Tentando resolver com o menor valor ocorre:
para ser infinito teria de ser (i == -i),
logo teríamos que (-2147483648 == -(-2147483648))
segue: (-2147483648 == 2147483648)

Parece que é falso, mas na verdade não é, pois se você atribuir o valor 2147483648 para uma variável int em java ocorre overflow já que o maior valor inteiro positivo é MAX_VALUE = 2147483647.

Neste caso com o overflow ocorre que acaba sendo setado o bit mais alto, alterando o valor para negativo, que se for calculado dará -2147483648 (vide complemento de 2 para entender o cálculo). Ou seja obtemos o menor valor de novo.

Este é um problemas de complexidade alta, talvez exceda o que se pretente para um concurso, mas ele é excelente para entender o que muitas vezes está embutido em questões que abordam desenvolvimento.

Veja, em uma pergunta simples está implícito noções de definição de tipo em Java, complemento de 2, programação(entender o algoritmo), além, logicamente, do conhecimento da própria linguagem.

Estas são apenas algumas dicas que visam condensar a forma como enventualmente são cobrados conceitos de programação em concursos, que esperamos sejam úteis.

Por enquanto, é isto.

Abraços, bons estudos, boa sorte.

Mauricio Ferste ([email protected])

»crosslinked«

2 Comentários

  1. sandro

    é meu velho, nao é facil nao. nada de hello world mesmo . kkk

    mas não é eles pedem c++, delphi, java e um monte de outras coisas. ai fica um pouco dificil mesmo. quem domina todas linguagens a fundo.. bom eu sei um pouco de cada.. q deus me ajude. kkk 

  2. mafconc

    Pessoal,

    Para complementar, fui convidado assim como muitos aqui a postar alguns trabalhos relacionados com concursos.
    Espero poder fazer alguns bons trabalhos, não somente relacionados à Desenvolvimento.
    Enfim, ainda quero aprender muito com vocês também e contribuir, estou disponível para trocarmos idéias.
    Agradeço por suas crítica e sugestões.
    Até.

Deixe uma resposta