Sie sind auf Seite 1von 3

Resolução do Teste de Computação e Programação

25 de Janeiro 2010
1 (1). Considere a seguinte representação de números reais:

Havia duas versões desta pergunta mas como se pede o número mais próximo de zero, o resultado é um número
desnormalizado.
S E M
1 4 5
Indique qual é o número negativo mais próximo de zero (pode indicar o resultado como uma soma de potências de 2).
Neste caso, como o número de bits para o expoente é 4, o excesso é 24−1 = 8.
S = 1
E = 0000
M = 00001
V = (−1)1 × 0.00001(2) × 2−8 = −2−5 × 2−8 = −2−13

S E M
1 5 4
Indique qual é o número positivo mais próximo de zero (pode indicar o resultado como uma soma de potências de 2).
Neste caso, como o número de bits para o expoente é 5, o excesso é 25−1 = 16.
S = 0
E = 00000
M = 0001
V = (−1)0 × 0.0001(2) × 2−16 = 2−4 × 2−16 = 2−20
2 (2). Indique o valor correspondente aos dois números representados em complemento para dois:
a) 010110 positivo, logo é só converter: 24 + 22 + 21 = 22
b) 100110 negativo, logo é necessário inverter e somar 1; inversão => 11001, somar 1 11001(2) + 1 = 11010(2) =>
−(24 + 23 + 21 ) = −26
a) 010101 positivo, logo é só converter: 24 + 22 + 20 = 21
b) 101110 negativo, logo é necessário inverter e somar 1; inversão => 10001, somar 1 10001(2) + 1 = 10010(2) =>
−(24 + 21 ) = −18
3 (1). Sabendo que os caracteres são representados como números inteiros positivos, indique quantos bits são
necessários para representar as letras maiúsculas, minúsculas e algarismos.

Maiúsculas 26
Minúsculas 26
Algarismos 10
Total 62
Primeira potência de 2 maior do que 62: 26 = 64 logo são necessários 6 bits.

No outro caso existem mais 4 sinais de pontuação, logo são 66 caracteres e a potência de 2 necessária é 27 = 128 e
logo são precisos 7 bits.
4 (2). Considere a seguinte função:
f=function(a,b) {i=0;while(a>b){a=a-b;i=i+1};return(a)}
a) O resultado de f(33,7) dá: 5
Na versão f=function(a,b) {i=0;while(a>b){a=a-b;i=i+1};return(i)} dá 4.
b) Que nome daria à função, justifique. Esta função vai retirando sucessivamente o valor b ao a enquanto a for maior
do que b. É assim que se processa a divisão inteira.
No caso da versão que devolve a a função chamar-se-ia resto.da.divisao já que dá como resultado o resto da
divisão inteira de a por b.
No caso da versão que devolve i a função chamar-se-ia divisao.inteira ou quociente já que devolve o quociente
da divisão de a por b.
5 (1). Indique o valor final da variável i no código i=1; a=c(4,3,1,2);for(j in 1:7) i = a[i]
Experimente o código em R. O valor da variável i no fim da execução é 3.
Na outra versão i=1; a=c(3,4,2,1);for(j in 1:7) i = a[i]
o resultado final é 4.
6 (2). Escreva uma função que conte quantas letras são iguais no inı́cio de duas palavras.
E.g., inicioigual("sono", "sol") daria como resultado 2.

inicioigual=function(a, b) {
i = 1
while(i <= nchar(a) && i <= nchar(b) && substr(a, i, i) == substr(b, i, i))
i = i + 1

return (i - 1)
}

iniciodif=function(a, b) {
i = 1
while(i <= nchar(a) && i <= nchar(b) && substr(a, i, i) != substr(b, i, i))
i = i + 1

return (i - 1)
}

7 (2). Escreva uma função que dê como resultado o número de vogais de uma palavra.
E.g. vogais("abaco") daria 3.

vogais = function(s) {
n = 0
for(i in 1:nchar(s)) {
letra = substr(s, i, i)
if(letra == "a" || letra == "e" || letra == "i" || letra == "o" || letra == "u")
n = n + 1
}
return (n)
}

consoantes = function(s) {
n = 0
for(i in 1:nchar(s)) {
letra = substr(s, i, i)
if(letra != "a" && letra != "e" && letra != "i" && letra != "o" && letra != "u")
n = n + 1
}
return (n)
}

8 (2). Escreva uma função que dado um vector com zeros e uns dê o número decimal correspondente.
E.g. bin2dec(c(1,0,1,0)) daria 10.

bin2dec=function(v) {
s = 0
p = length(v) - 1
for(i in 1:length(v)) {
s = s + v[i] * 2^p
p = p - 1
}
return (s)
}
9 (4). Considere o esquema conceptual duma base de dados:
aula=(id, disc, doc, tipo, turno, sala, dia, inicio, duracao)
docente=(id, nome, grupo)
grupo=(id, nome)
disciplina=(id, nome, curso)
curso=(id, nome)
sala=(id, nome, capacidade)

a) Sublinhe as chaves das tabelas no esquema; As chaves são todos os campos chamados id (é o primeiro campo de
cada tabela).
b) Liste os nomes das disciplinas do curso cujo nome é LAR; Liste os nomes dos docentes do grupo cujo nome é MFL

select disciplina.nome
from disciplina inner join curso on curso=id
where curso.nome = "LAR"

select docente.nome
from docente inner join grupo on grupo=id
where grupo.nome = "MFL"

c) Liste os nomes do docentes que dão mais do que 8 horas de aulas por semana; Liste os nomes das disciplinas com
mais do que 3 turmas do tipo TP

select docente.nome
from docente inner join aula on id=doc
group by docente.id
having sum(duracao) > 8

select disciplina.nome
from disciplina inner join aula on id = disc
where tipo = "TP"
group by disc
having count(*) > 3

d) Qual é a carga diária máxima do curso cujo nome é LAR.

select max(soma) from (


select dia, sum(dur) as soma from (
select dia, inicio, max(duracao) as dur
from (aula inner join disciplina on disc=id) inner join curso on curso=id
group by dia, inicio )
group by dia )

10 (3). Desenhe o diagrama de entidades e relacionamentos para a base de dados da pergunta anterior.

Das könnte Ihnen auch gefallen