Diferenças entre edições de "Teste de Avaliação de 22 de janeiro"

De GNU Octave
Ir para: navegação, pesquisa
(Pergunta 4 (Responder numa linha): Matrizes mágicas)
(Há 6 edições intermédias do mesmo utilizador que não estão a ser apresentadas)
Linha 109: Linha 109:
 
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">  1 2 3 4 5 6 7 8</syntaxhighlight>
 
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">  1 2 3 4 5 6 7 8</syntaxhighlight>
 
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">  1 1 1 2 3 5 8 13</syntaxhighlight>
 
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">  1 1 1 2 3 5 8 13</syntaxhighlight>
 +
 +
 +
==== Pergunta 3 (Escolha múltipla): Gerar matriz ====
 +
 +
Considere a seguinte matriz:
 +
 +
<math>
 +
C =
 +
\begin{pmatrix}
 +
          3  &      -1  &        0 \\
 +
          6  &        0  &      0.25 \\
 +
          9  &        1  &      0.5 \\
 +
          12  &      -1  &      0.75 \\
 +
          15  &        0  &        1 \\
 +
          18  &        1  &      1.25 \\
 +
          21  &      -1  &      1.5 \\
 +
          24  &        0  &      1.75 \\
 +
          27  &        1  &        2
 +
\end{pmatrix}
 +
</math>
 +
 +
Diga qual das seguintes expressões poderia ser utilizada para gerar a matriz C.
 +
 +
# <span style="color: green;">Correta</span><syntaxhighlight>C = [3:3:27; repmat([-1 0 1], 1, 3); linspace(0, 2, 9)]'</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight>C = [3 -1 0; 6 0 0.25; 9 1 0.5; 12 -1 0.75; 15 0 1; 18 1 1.25; 21 -1 1.5; 24 0 1.25; 27 1 2]</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight>C1 = [3:3:27]; C2 = [-1 0 1 -1 0 1 -1 0 1]; C3 = 0:0.25:2; C = vertcat(vertcat(C1', C2'), C3');</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight>[3:3:27; [-1 0 1 -1 0 1 -1 0 1]; 0:0.25:2]</syntaxhighlight>
 +
 +
==== 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.
 +
 +
<math>
 +
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}
 +
</math>
 +
 +
A soma das linhas de M, das colunas e 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 e a soma das linhas dão o mesmo valor''
 +
 +
O predicado anterior tem que dar 1 (verdadeiro) aplicado a qualquer uma das matrizes anteriores.
 +
 +
Aplicado a uma matriz <math>C = \begin{pmatrix} 5 & 5 \\ 5 & 3 \end{pmatrix}</math>, tem que dar 0 (falso).
 +
 +
===== Resposta =====
 +
 +
<syntaxhighlight>range([sum(N) sum(N')]) == 0</syntaxhighlight>
 +
 +
ou
 +
 +
<syntaxhighlight>length(unique([sum(N) sum(N')])) == 1</syntaxhighlight>
 +
 +
==== 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.
 +
 +
 +
<ol>
 +
<li><span style="color: green;">Correta</span><syntaxhighlight>
 +
function Xmax = golf(angulo, velocidade)
 +
g = 9.80665;
 +
Xmax = 2 * ( velocidade^2/g) * sind(angulo) * cosd(angulo);
 +
endfunction
 +
</syntaxhighlight>
 +
</li>
 +
<li><span style="color: red;">Errada</span><syntaxhighlight>
 +
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
 +
</syntaxhighlight>
 +
</li>
 +
<li><span style="color: red;">Errada</span><syntaxhighlight>
 +
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
 +
</syntaxhighlight>
 +
</li>
 +
<li><span style="color: red;">Errada</span><syntaxhighlight>
 +
function res = golf(angulo, velocidade)
 +
g = 9.80665;
 +
theta = angulo*pi/180;
 +
Xmax = 2 * ( velocidade^2/g) * sin(theta) * cos(theta);
 +
disp(res);
 +
endfunction
 +
</syntaxhighlight>
 +
</li>
 +
</ol>
 +
 +
 +
==== Pergunta 6 (Escolha múltipla): Resolução de equações ====
 +
 +
Os alunos de eletromagnetismo foram fazer compras.
 +
O André comprou uma resistência, dois condensadores e dois transístores por 3,95 €.
 +
Por sua vez, o Gustavo, comprou três resistências e um condensador por 1,50 €.
 +
O Daniel levou uma resistência, quatro condensadores, um díodo e dois transístores por 5,85 €.
 +
Por fim, o Afonso adquiriu duas resistências, três condensadores e um díodo por 3,15 €.
 +
 +
Qual o preço unitário de cada um dos componentes adquiridos?
 +
 +
Para resolver este problema, escreveram-se as quatro equações seguintes, em que temos igualmente quatro variáveis, que são o preço unitário de cada componente.
 +
 +
<math>\begin{align}
 +
  x_1 & + & 2 x_2 & + &      & + & 2 x_4 & = 3,95 \\
 +
3 x_1 & + &  x_2 &  &      &  &      & = 1,50 \\
 +
  x_1 & + & 4 x_2 & + &  x_3  & + & 2 x_4 & = 5,85 \\
 +
2 x_1 & + & 3 x_2 & + &  x_3  &  &      & = 3,15
 +
 +
\end{align}</math>
 +
 +
Recorrendo a matrizes, podemos escrever estas equações da forma: <math>A x = b</math>, cuja solução é <math>x = A^{-1} b</math>.
 +
 +
Indique, portanto, o resultado desta equação.
 +
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    x = [0.50; 0.50; 0.50; 0.50];</syntaxhighlight>
 +
# <span style="color: green;">Correta</span><syntaxhighlight enclose="none">  x = [ 0.25; 0.75; 0.40; 1.10];</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    x = [0.25; 0.50; 0.75; 1.00];</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    x = [0.50; 0.75; 0.75; 0.75];</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    x = [0.12; 0.35; 1.25; 0.20];</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    x = [0.95; 0.75; 0.25; 0.75];</syntaxhighlight>
 +
 +
==== Pergunta 7 (Escolha múltipla): Invocar função ====
 +
 +
Considere as temperaturas mínimas mensais observados em Lisboa, em 2012.
 +
 +
{| class="wikitable"
 +
| jan || fev || mar || abr || mai || jun || jul || ago || set || out || nov || dez
 +
|-
 +
| 8 || 9 || 9 || 11 || 13 || 16 || 17 || 17 || 17 || 14 || 11 || 9
 +
|}
 +
 +
Considere a seguinte função '''fresco''' que indica o número de meses em que a temperatura mínima esteve abaixo de um determinado valor.
 +
 +
<syntaxhighlight>
 +
function n = fresco(t,v)
 +
  n = length(t(t<v));
 +
endfunction
 +
</syntaxhighlight>
 +
 +
Qual das seguintes expressões usaria para calcular, para Lisboa, quantos meses tiveram temperaturas mínimas inferiores a 16º, recorrendo à função '''fresco'''?
 +
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    fresco([8 9 9 11 13 16 17 17 17 14 11 9], 16)</syntaxhighlight>
 +
# <span style="color: green;">Correta</span><syntaxhighlight enclose="none">  lisboa = 8 9 9 11 13 16 17 17 17 14 11 9; fresco(lisboa, 16)</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    fresco(8, 9, 9, 11, 13, 16, 17, 17, 17, 14, 11, 9, 16)</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    fresco(1:12, 16)</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    lisboa = [8 9 9 11 13 16 17 17 17 14 11 9]; lisboa(lisboa<16)</syntaxhighlight>
 +
# <span style="color: red;">Errada</span><syntaxhighlight enclose="none">    fresco(lisboa, 16)</syntaxhighlight>
 +
 +
==== Pergunta 8 (Enviar resposta): Corrigir e melhorar função ====
 +
 +
Pretende-se uma função somamatriz que soma todos os elementos de uma matriz maiores do que zero.
 +
 +
Fez-se uma versão inicial da função mas tem dois problemas: não corre (dá um erro qualquer) e está a somar elementos positivos e negativos. A função que apresenta problemas é a seguinte:
 +
 +
<syntaxhighlight>
 +
function soma = somamatriz(m)
 +
for i = 1:size(m)(2)
 +
  for j = 1:size(m)(1)
 +
    soma = soma + m(j,i);
 +
  end
 +
end
 +
</syntaxhighlight>
 +
 +
Por favor envie uma versão corrigida da função '''somamatriz.m''', que não dê erro e que some apenas os elementos positivos da matriz.
 +
 +
''Teste a função antes de enviar a resposta.''
 +
 +
===== Resposta (corrigir para não dar erro) =====
 +
 +
Bastaria acrescentar: <syntaxhighlight enclose="none">soma = 0;</syntaxhighlight> antes do ciclo.
 +
 +
<syntaxhighlight>
 +
function soma = somamatriz(m)
 +
soma = 0;
 +
for i = 1:size(m)(2)
 +
  for j = 1:size(m)(1)
 +
    soma = soma + m(j,i);
 +
  endfor
 +
endfor
 +
endfunction
 +
</syntaxhighlight>
 +
 +
===== Resposta completa =====
 +
 +
Além de se acrescentar <syntaxhighlight enclose="none">soma = 0;</syntaxhighlight> antes do ciclo, era necessário só efetuar a soma, caso o valor de <syntaxhighlight enclose="none">m(j,i)</syntaxhighlight> seja maior do que zero. Pra tal, usa-se uma condição <syntaxhighlight enclose="none">if</syntaxhighlight>.
 +
 +
<syntaxhighlight>
 +
function soma = somamatriz(m)
 +
soma = 0;
 +
for i = 1:size(m)(2)
 +
  for j = 1:size(m)(1)
 +
    if (m(j,i) > 0)
 +
      soma = soma + m(j,i);
 +
    endif
 +
  endfor
 +
endfor
 +
endfunction
 +
</syntaxhighlight>

Revisão das 01h22min de 5 de fevereiro de 2014

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 Fibonacci

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

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

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

fibonacci(8)
  1. Correta   1 1 2 3 5 8 13 21
  2. Errada   1 2 3 5 8 13 21 34
  3. Errada   1 2 3 4 5 6 7 8
  4. Errada   1 1 1 2 3 5 8 13


Pergunta 3 (Escolha múltipla): Gerar matriz

Considere a seguinte matriz:


 C =
 \begin{pmatrix}
           3   &       -1  &         0 \\
           6   &        0  &      0.25 \\
           9   &        1  &       0.5 \\
          12   &       -1  &      0.75 \\
          15   &        0  &         1 \\
          18   &        1  &      1.25 \\
          21   &       -1  &       1.5 \\
          24   &        0  &      1.75 \\
          27   &        1  &         2
 \end{pmatrix}

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

  1. Correta
    C = [3:3:27; repmat([-1 0 1], 1, 3); linspace(0, 2, 9)]'
  2. Errada
    C = [3 -1 0; 6 0 0.25; 9 1 0.5; 12 -1 0.75; 15 0 1; 18 1 1.25; 21 -1 1.5; 24 0 1.25; 27 1 2]
  3. Errada
    C1 = [3:3:27]; C2 = [-1 0 1 -1 0 1 -1 0 1]; C3 = 0:0.25:2; C = vertcat(vertcat(C1', C2'), C3');
  4. Errada
    [3:3:27; [-1 0 1 -1 0 1 -1 0 1]; 0:0.25:2]

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 e 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 e a soma das linhas dão o mesmo valor

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

Aplicado a uma matriz C = \begin{pmatrix} 5 & 5 \\ 5 & 3 \end{pmatrix}, tem que dar 0 (falso).

Resposta
range([sum(N) sum(N')]) == 0

ou

length(unique([sum(N) 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

Os alunos de eletromagnetismo foram fazer compras. O André comprou uma resistência, dois condensadores e dois transístores por 3,95 €. Por sua vez, o Gustavo, comprou três resistências e um condensador por 1,50 €. O Daniel levou uma resistência, quatro condensadores, um díodo e dois transístores por 5,85 €. Por fim, o Afonso adquiriu duas resistências, três condensadores e um díodo por 3,15 €.

Qual o preço unitário de cada um dos componentes adquiridos?

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

\begin{align}
  x_1 & + & 2 x_2 & + &       & + & 2 x_4 & = 3,95 \\
3 x_1 & + &   x_2 &   &       &   &       & = 1,50 \\
  x_1 & + & 4 x_2 & + &  x_3  & + & 2 x_4 & = 5,85 \\
2 x_1 & + & 3 x_2 & + &  x_3  &   &       & = 3,15

\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 = [0.50; 0.50; 0.50; 0.50];
  2. Correta   x = [ 0.25; 0.75; 0.40; 1.10];
  3. Errada    x = [0.25; 0.50; 0.75; 1.00];
  4. Errada    x = [0.50; 0.75; 0.75; 0.75];
  5. Errada    x = [0.12; 0.35; 1.25; 0.20];
  6. Errada    x = [0.95; 0.75; 0.25; 0.75];

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

Considere as temperaturas mínimas mensais observados em Lisboa, em 2012.

jan fev mar abr mai jun jul ago set out nov dez
8 9 9 11 13 16 17 17 17 14 11 9

Considere a seguinte função fresco que indica o número de meses em que a temperatura mínima esteve abaixo de um determinado valor.

function n = fresco(t,v)
  n = length(t(t<v));
endfunction

Qual das seguintes expressões usaria para calcular, para Lisboa, quantos meses tiveram temperaturas mínimas inferiores a 16º, recorrendo à função fresco?

  1. Errada    fresco([8 9 9 11 13 16 17 17 17 14 11 9], 16)
  2. Correta   lisboa = 8 9 9 11 13 16 17 17 17 14 11 9; fresco(lisboa, 16)
  3. Errada    fresco(8, 9, 9, 11, 13, 16, 17, 17, 17, 14, 11, 9, 16)
  4. Errada    fresco(1:12, 16)
  5. Errada    lisboa = [8 9 9 11 13 16 17 17 17 14 11 9]; lisboa(lisboa<16)
  6. Errada    fresco(lisboa, 16)

Pergunta 8 (Enviar resposta): Corrigir e melhorar função

Pretende-se uma função somamatriz que soma todos os elementos de uma matriz maiores do que zero.

Fez-se uma versão inicial da função mas tem dois problemas: não corre (dá um erro qualquer) e está a somar elementos positivos e negativos. A função que apresenta problemas é a seguinte:

function soma = somamatriz(m)
for i = 1:size(m)(2)
  for j = 1:size(m)(1)
    soma = soma + m(j,i);
  end
end

Por favor envie uma versão corrigida da função somamatriz.m, que não dê erro e que some apenas os elementos positivos da matriz.

Teste a função antes de enviar a resposta.

Resposta (corrigir para não dar erro)

Bastaria acrescentar: soma = 0; antes do ciclo.

function soma = somamatriz(m)
soma = 0;
for i = 1:size(m)(2)
  for j = 1:size(m)(1)
    soma = soma + m(j,i);
  endfor
endfor
endfunction
Resposta completa

Além de se acrescentar soma = 0; antes do ciclo, era necessário só efetuar a soma, caso o valor de m(j,i) seja maior do que zero. Pra tal, usa-se uma condição if.

function soma = somamatriz(m)
soma = 0;
for i = 1:size(m)(2)
  for j = 1:size(m)(1)
    if (m(j,i) > 0)
      soma = soma + m(j,i);
    endif
  endfor
endfor
endfunction