Exame de 6 de fevereiro

De GNU Octave
Revisão em 01h24min de 11 de fevereiro de 2014 por Jgrocha (Discussão | contribs)

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

Pergunta 1 (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   fix(2014/4)-fix(2014/100)+fix(2014/400)
  2. Errada    length(is_leap_year(1:4:2014))
  3. Errada    anos = 1:2014; length(anos(mod(anos,4)==0))
  4. Errada    anos = 1:2014; sum(anos(mod(anos,4)==0))

Pergunta 2 (Enviar programa): 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.

Num dos testes anteriores, discutiu-se um programa para gerar um triângulo de Pitágoras a partir de um número ímpar.

Considere o seguinte algoritmo para gerar um triângulo de Pitágoras, partindo de um número par (e não um número ímpar):

  • Comece por um ler um número par, x.
  • Seja y igual a esse número mais 2, sendo que y é também par.
  • Crie duas frações unitárias, com x e y no denominador (1/x e 1/y), e some-as.
  • Simplifique a fração obtida.
  • A fração simplificada 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 4

  • x = 4
  • y = x + 2 = 6
  • 1/4 + 1/6 = 10/24
  • 10/24 = 5/12
  • a = 5 (numerador), b= 12 (denominador)
  • h = √(5² + 12²) = 13

Resulta, nesta ilustração do algoritmo, o rectângulo com os lados 5, 12 e 13.

Escreva em Octave este algoritmo num documento pitagoras.m e envie o mesmo. Teste o programa antes de o enviar.

Resposta

# ler o primeiro numero
x = input("Numero?");
# calcular o segundo numero
y = x + 2
# somar as fracoes 1/x + 1/y
# que dao y/x*y + x/x*y
numerador = y+x
denominador = y*x
# simplificar a fracao resultante
mdc = gcd(numerador,denominador)
a = numerador/mdc
b = denominador/mdc
# calcular a hipotenusa
h = sqrt(a^2 + b^2)
# apresentar o triangulo resultante
printf("O triangulo de pitagoras tem os lados %d, %d e %d\n", a, b, h);
Possíveis melhorias

Nota: Esta validação não era necessária para ter a cotação toda

Em vez de:

x = input("Numero?");

podia-se garantir que o número lido era par e positivo, com:

do
  x = input("Numero?");
until (rem(x,2)==0 & x>0)

Pergunta 3 (Preencher espaços): Escrever matrizes

Pergunta 4 (Escolha múltipla): Gerar matriz

Pergunta 5 (Valor): Ciclo while

Considere o seguinte excerto de um programa, onde aparece um ciclo while.

x = 1; 
while (x < 8) 
  disp('Acabou o teste?') 
  x = x + 2.5
end

Quantas vezes é executada a instrução disp ao executar este excerto?

  • 3

Pergunta 6 (Escolha múltipla): Números aleatórios

Pergunta 7 (Preencher espaços): Sudoku

Pergunta 8 (Preencher espaços): As condições if elseif