Ybadoo - Soluções em Software Livre
Turmas
2º Semestre de 2016

Questão 01

Considere a hierarquia de classes, na linguagem de programação Java, apresentada a seguir.

public class Alpha {
private int over = 1;

public int getOver() { return over; }
}

public class Beta extends Alpha {
private int over = 2;

public int getOver() { return over; }
}

public class Gamma extends Beta {
private int over = 3;

public int getOver() { return over; }

public void exec() {
Alpha a = new Gamma();
Beta b = new Gamma();
Gamma c = new Gamma();

System.out.print(super.getOver());
System.out.print(" ");
System.out.print(a.getOver());
System.out.print(" ");
System.out.print(b.getOver());
System.out.print(" ");
System.out.println(c.getOver());
}
}

public class Application {
public static void main(String[] args) {
new Gamma().exec();
}
}

O que será exibido no console após a execução do método main?

a. 1 1 2 3

b. 2 1 2 3

c. 2 3 3 3

d. 3 1 2 3

e. 3 3 3 3

Questão 02

Considere a hierarquia de classes, na linguagem de programação Java, apresentada a seguir.

public class MyException extends Exception {
public MyException() { super(); }
}

public class MyRuntime extends RuntimeException {
public MyRuntime() { super(); }
}

public class MyClass {
public int testException(int test) throws MyException {
if(test == 0) { throw new MyException(); }
return test;
}

public int testRuntime(int test) {
if(test == 0) { throw new MyRuntime(); }
return test;
}
}

Supondo que o usuário deseje utilizar os métodos definidos por MyClass, julgue as afirmativas a seguir.

  1. Para utilizar o método testException de MyClass, o usuário deverá adicionar a classe MyException a declaração do método que utilizar o método testException.
  2. Para utilizar o método testRuntime de MyClass, o usuário deverá adicionar a classe MyRuntime a declaração do método que utilizar o método testRuntime.
  3. Para utilizar o método testException de MyClass, o usuário deverá inserir o método testException dentro de um bloco try-catch, em que a exceção MyException é tratada.
  4. Para utilizar o método testRuntime de MyClass, o usuário deverá inserir o método testRuntime dentro de um bloco try-catch, em que a exceção MyRuntime é tratada.

Assinale a alternativa correta:

a. somente as afirmativas I e II são corretas.

b. somente as afirmativas I e III são corretas.

c. somente as afirmativas I e IV são corretas.

d. somente as afirmativas II e III são corretas.

e. somente as afirmativas II e IV são corretas.

Questão 03

Considere a classe, na linguagem de programação Java, apresentada a seguir.

public class X extends Y implements Z
{
private W w;
}

Assinale a alternativa correta.

a. A classe X é um tipo de Y e de Z e tem um W.

b. A classe X tem um Y e um Z e é um tipo de W.

c. A classe Y é um tipo de Z e tem um W.

d. A classe Z tem um W e é um tipo de X e de Y.

e. A classe W é um tipo de X, de Y e de Z.

Questão 04

Desenvolva uma solução que realiza a somatória dos elementos de um vetor, onde cada thread é responsável pela somatória de uma fração deste vetor. A função de soma dos elementos deve ser genérica o suficiente para ser associada a cada thread. Tal função de soma deve receber por parâmetro uma identificação, bem como o intervalo de operação sobre o vetor. Ao final da somatória de todas as frações, o processo pai deverá consolidar a somatória e apresentar o resultado final.

public class ThreadSum extends Thread {
private int end;
private int init;
private int result;
private int[] vector;

public ThreadSum(int init, int end, int[] vector) {
this.init = init;
this.vector = vector;
this.end = end;
result = 0;
}

public int getResult() { return result; }

public void run() {
for(int i = init; i < end; i++) {
result += vector[i];
}
}

public static void main(String[] args) {
int[] vector = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

ThreadSum t1 = new ThreadSum(0, 5, vector);
ThreadSum t2 = new ThreadSum(5, 10, vector);

t1.start();
t2.start();

try {
t1.join();
t2.join();
}
catch(InterruptedException exception) {
exception.printStackTrace();
}

int sum = t1.getResult() + t2.getResult();

System.out.println("SOMA: " + sum);
}
}

Questão 05

Apresente a expressão escrita na linguagem de programação LISP, utilizando apenas os operadores car e cdr, para apresentar somente o elemento e da lista a seguir.

(a (b (c (d (e (f (g (h (i (j))))))))))

(car (car (cdr (car (cdr (car (cdr (car (cdr '(a (b (c (d (e (f (g (h (i (j)))))))))))))))))))

Questão 06

Considere a função escrita na linguagem de programação LISP apresentada a seguir.

(defun xpto(e s)
(if (null s)
0
(if (eql e (car s))
(+ 1 (xpto e (cdr s)))
(+ 2 (xpto e (cdr s)))
)
)
)

A execução da expressão (xpto '1 '(1 1 1 2 2 3)) retornaria

a. 1

b. 2

c. 3

d. 9

e. 10

Questão 07

Considere as funções escritas na linguagem de programação PROLOG apresentadas a seguir.

abc([], L, L).
abc([H|T], L2, [H|L3]) :- abc(T, L2, L3).

xyz([], 0).
xyz([_|T], N) :- xyz(T, N1), N is 1 + N1.

xpto(L, N, Y) :- abc(_, Y, L), xyz(Y, N).

Qual a saída apresentada para a pergunta

?- xpto([1, 2, 3, 4, 5], 3, T), write(T), nl.

a. [3]

b. [1, 2, 3]

c. [2, 3, 4]

d. [3, 3, 3]

e. [3, 4, 5]

Questão Extra

Desenvolver um programa na linguagem de programação Prolog, que calcule o valor da exponenciação de uma base qualquer por um expoente positivo qualquer, ou seja, BE, conforme apresentado no exemplo a seguir.

?- power(2, 3, R), write(R), nl.
8
power(N, 0, 1) :- !.
power(N, K, R) :- K1 is K - 1, power(N, K1, R1), R is R1 * N.
?- power(2, 3, R), write(R), nl.