Teste de Avaliação de 21 de janeiro

De GNU Octave
Revisão em 16h34min de 4 de fevereiro de 2014 por Jgrocha (Discussão | contribs) (Pergunta 7 (Escolha múltipla): Resolução de equações)

(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)
Ir para: navegação, pesquisa

Pergunta 1 (Escolha múltipla): Gerar triângulos de pitágoras

O teorema de Pitágoras estabelece a seguinte propriedade: se os lados a e b de um triângulo formam um ângulo reto, então verifica-se que a²+b²=h², em que h é o lado oposto ao ângulo reto, designado hipotenusa.

Considere o seguinte algoritmo para gerar um triângulo de Pitágoras:

  • Comece por um número ímpar, x.
  • Seja y igual a esse número mais 2, sendo que y é também ímpar.
  • Crie duas frações unitárias, com x e y no denominador (1/x e 1/y), e some-as.
  • A fração obtida tem no numerador e no denominador os dois lados de um triângulo de pitágoras, a e b
  • A hipotenusa ser calculada com a fórmula: h = √(a² + b²)

Este algoritmo pode ser ilustrado, começando por escolher 3

  • x = 3
  • y = 5
  • 1/3 + 1/5 = 8/15
  • a = 8 (numerador), b= 15 (denominador)
  • h = √(8² + 15²) = 17

Resulta, nesta ilustração do algoritmo, o rectângulo com os lados 8, 15 e 17.

Diga qual dos seguintes programas melhor implementa o referido algoritmo?

  1. Correta
    do
      x = input("Numero impar?");
    until (rem(x, 2) != 0);
    y = x + 2;
    a = lcm(x,y)/x + lcm(x,y)/y;
    b = lcm(x,y);
    h = sqrt(a^2 + b^2);
    printf("O triangulo de pitagoras tem os lados %d, %d e %d\n", a, b, h);
  2. Errada
    do
      x = input("Numero impar?");
    until (rem(x, 2) != 0);
    do
      y = input("Numero impar?");
    until (rem(y, 2) != 0);
    if (y-x != 2)
      disp("y tem que ser igual a x mais 2");
    else
      a = lcm(x,y)/x + lcm(x,y)/y;
      b = lcm(x,y);
      h = sqrt(a^2 + b^2);
      printf("O triangulo de pitagoras tem os lados %d, %d e %d\n", a, b, h);
    endif
  3. Errada
    x = input("Numero impar?");
    y = input("Numero impar?");
    if (y-x != 2 & rem(x,2)!= 0)
      disp("y tem que ser igual a x mais 2");
    else
      n1 = lcm(x,y)/x;
      n2 = lcm(x,y)/y;
      a = n1 + n2;
      b = lcm(x,y);
      h = sqrt(a^2 + b^2);
      printf("O triangulo de pitagoras tem os lados %d, %d e %d\n", a, b, h);
    endif
  4. Errada porque a expressão rem(x,0) dá sempre x
    x = input("Numero impar?");
    y = x+2;
    if (rem(x,0)==0)
      disp("x tem que ser impar");
    else
      mmc = lcm(x,y);
      a = mmc/x + mmc/y;
      b = mmc;
      h = sqrt(a^2 + b^2);
      printf("O triangulo de pitagoras tem os lados %d, %d e %d\n", a, b, h);
    endif

Pergunta 2 (Escolha múltipla): Sequência de Lucas

Considere a seguinte função que gera uma sequência de Lucas:

function luc = lucas(n)
luc = zeros(n,1);
luc(1) = 2;
luc(2) = 1;
for k = 3:n
  luc(k) = luc(k-1) + luc(k-2);
end
endfunction

Diga qual das seguintes sequências é gerada com a invocação:

lucas(10)
  1. Correta   2           1           3           4           7          11          18          29          47          76
  2. Errada    1           2           3           5           8          13          21          34          55          89
  3. Errada    1           2           3           4           5           6           7           8           9          10
  4. Errada    1           1           2           3           5           8          13          21          34          55

Pergunta 3 (Escolha múltipla): Gerar matriz

Considere a seguinte matriz:


 A =
 \begin{pmatrix}
  1 & 2 & 3 & 4 & 5 & 6 \\
  9 & 7 & 5 & 3 & 1 & -1 \\
  4 & 8 & 16 & 32 & 64 & 128
 \end{pmatrix}

Diga qual das seguintes expressões poderia ser utilizada para gerar a matriz A.

  1. Correta
    A = [1:6; 9:-2:-1; 2.^(2:7)]
  2. Errada
    A = [1:6; 9:-2:-1; 4.*1:4:32]
  3. Errada
    A = [1:6; fliplr(-1:2:9); 2^(2:7)]
  4. Errada
    A = [[1 2 3 4 5 6] [9 7 5 3 1 -1] [4 8 16 32 64 128]]

Pergunta 4 (Responder numa linha): Matrizes mágicas

Uma matriz de n por n contendo os números de 1 até n² diz-se uma matriz mágica, se cada uma das colunas, cada uma das linhas e as duas diagonais principais tiverem a mesma soma.

Considere a matriz M e a matriz N.


 M =
 \begin{pmatrix}
  8 & 1 & 6 \\
  3 & 5 & 7 \\
  4 & 9 & 2 
 \end{pmatrix},
 N =
 \begin{pmatrix}
  16 & 2 & 3 & 13 \\
  5 & 11 & 10 & 8 \\
  9 & 7 & 6 & 12 \\
  4 & 14 & 15 & 1
 \end{pmatrix}

A soma das linhas de M, das colunas de de cada uma das diagonais dá sempre 15. Da mesma forma, a soma das linhas de N, das colunas e das diagonais dá sempre 34. Ambas são matrizes mágicas.

Verifica-se o também a seguinte propriedade: a soma de cada linha, coluna ou diagonal é igual à soma de todos os elementos da matriz a dividir pela dimensão da mesma. Ou seja, na matriz M todas as linhas, colunas e diagonais somam 15 que é igual a 45 (soma de todos os elementos da matriz) a dividir por 3 (a dimensão da matriz). De igual modo, todos os elementos da matriz N somam 136, que dividindo por 4, dá 34, que é a soma das linhas, colunas e diagonais.

Escreva numa única linha um predicado (uma expressão que dá 1 ou 0, consoante seja verdade ou falso) que diga se uma dada matriz M verifica a seguinte propriedade:

a soma das colunas são todas iguais

O predicado anterior tem que dar 1 (verdadeiro) aplicado a qualquer uma das matrizes anteriores.

Resposta
range(sum(N)) == 0

ou

length(unique(sum(N))) == 1

Pergunta 5 (Escolha múltipla): Passar um programa para função

Num exame anterior, foi pedido que escrevesse um programa para calcular o alcance e o tempo de viagem de uma bola de golf. Esse mesmo exercício está resolvido no wiki da disciplina, em Exame de Recurso#Programa para calcular o alcance de uma bola de golfe.

Pretende-se uma função que faça apenas o cálculo da distância alcançada pela bola de golf, sabendo os mesmos dados: o ângulo e a velocidade inicial.

Escolha a implementação que lhe parece melhor conseguida.


  1. Correta
    function Xmax = golf(angulo, velocidade)
    g = 9.80665;
    Xmax = 2 * ( velocidade^2/g) * sind(angulo) * cosd(angulo);
    endfunction
  2. Errada
    function golf(angulo, velocidade)
    angulo = input("Angulo de lançamento?");
    velocidade = input("Velocidade inicial?");
    g = 9.80665;
    theta = angulo*pi/180;
    Xmax = 2 * ( velocidade^2/g) * sin(theta) * cos(theta);
    printf("Uma bola de golf lançada a %.2f graus a uma velocidade de %.2f m/s, atinge o solo a uma distância de %.2f m", angulo, velocidade, Xmax );
    endfunction
  3. Errada
    function golf(angulo, velocidade)
    angulo = input("Angulo de lançamento?");
    velocidade = input("Velocidade inicial?");
    g = 9.80665;
    theta = angulo*pi/180;
    Xmax = 2 * ( velocidade^2/g) * sin(theta) * cos(theta);
    disp(Xmax);
    endfunction
  4. Errada
    function res = golf(angulo, velocidade)
    g = 9.80665;
    theta = angulo*pi/180;
    Xmax = 2 * ( velocidade^2/g) * sin(theta) * cos(theta);
    disp(res);
    endfunction

Pergunta 6 (Escolha múltipla): Resolução de equações

A Matilde comprou três maças, uma dúzia de bananas e uma laranja por 6,80 €. A Sara comprou uma dúzia de maças e duas laranjas por 2,50 €. A Rita comprou duas bananas e três laranjas por 2,05 €. Quanto custa uma peça de cada fruta?

Para resolver este problema, escreveram-se as três equações seguintes, em que temos igualmente três variáveis, que são o preço unitário de cada peça de fruta.

\begin{align}
 3 x_1 & + & 12 x_2 & + &   x_3 & = 6,80 \\
12 x_1 &   &        & + & 2 x_3 & = 2,50 \\
       &   & 2 x_2  & + & 3 x_3 & = 2,05
\end{align}

Recorrendo a matrizes, podemos escrever estas equações da forma: A x = b, cuja solução é x = A^{-1} b.

Indique, portanto, o resultado desta equação.

  1. Errada    x = [1.15; 0.25; 0.35]
  2. Correta   x = [0.15; 0.5; 0.35]
  3. Errada    x= [0.10; 0.50; 0.65]
  4. Errada    x= [0.50; 0.35; 0.45]
  5. Errada    x= [0.12; 0.45; 0.80]
  6. Errada    x= [0.80; 0.30; 0.50]

Pergunta 7 (Escolha múltipla): Invocar função

Considere que já tem disponível a a seguinte função auxiliar menorde3:

function n = menorde3(t)
n = min(t);
endfunction

Qual dos seguintes programas usaria para calcular o menor de 3 números indicados pelo utilizador, tirando proveito da função anterior menorde3?

  1. Correta   t = input("Valores?"); menorde3(t)
  2. Errada   a = input("a?"); b = input("b?"); c= input("c?"); menorde3(a, b, c)
  3. Errada   a = input("a?"); b = input("b?"); c= input("c?"); maiorde3([a, b, c])
  4. Errada   t = input("Valores?"); menorde3(t(1), t(2), t(3))

Pergunta 8 (Escolha múltipla): Ano bissexto

De x em x anos, em vez de 365 dias, o ano tem 366 dias, o qual é designado ano bissexto. Isto é feito com o objetivo de manter o calendário anual ajustado com a translação do planeta. Diga qual das seguintes expressões calcula corretamente o número de anos bissextos que já se verificaram (depois de Cristo).

  1. Correta   sum(is_leap_year(4:4:2014))
  2. Errada   length(anos(mod(anos,4)==0))
  3. Errada   length(anos(bissexto(anos)))
  4. Errada   round(2014/4)