Segundo Teste de Avaliação

De GNU Octave
Revisão em 02h38min de 15 de janeiro de 2014 por Jgrocha (Discussão | contribs) (Números primos)

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

Exercícios de escolha múltipla

Divisores de um número

Escolha a melhor expressão para calcular todos os divisores de um inteiro num.

  1. K=1:num; K(rem(num,K)==0)
  2. sort(factor(num))
  3. unique(factor(num))
  4. histc(factor(num), unique(factor(num)))

Escolha a melhor expressão para calcular todos os divisores de um inteiro num.

Resposta
  1. K=1:num; K(rem(num,K)==0)

Números primos

Imagine que pretende calcular todos os números primos até x. Qual a melhor expressão para o fazer?

  1. find(isprime(1:x))
  2. factor(x)
  3. intervalo = 1:x; primos = isprime(intervalo)
  4. primes(1:x)
Resposta
  1. find(isprime(1:x))

Operações sobre vetores

Despesas do Enterro da Gata

Para o Enterro da Gata, ficou de comprar os artigos e as quantidades respetivas que aparecem na tabela seguinte.

Referência Preço Quantidade
1245 76,50 € 1
1924 34,00 € 2
1820 92,12 € 4
1988 0,08 € 100

Escreva um programa Octave enterro.m para calcular o valor total que precisa, usando vetores e operações sobre vetores. Os valores não incluem o IVA. Por isso, aos valores apresentados tem que acrescentar o IVA à taxa de 23%.

Resposta

preco = [76.5 34 92.12 0.08]
quantidade = [1 2 4 100]
precocomiva = preco * 1.23
total = precocomiva * quantidade'

Peso de uma encomenda da Amazon

Suponha que encomendou da Amazon os seguintes artigos, nas respetivas quantidades, conhecendo o peso unitário de cada.

Artigo Peso Quantidade
7776 1,2 2
8324 1,2 12
3033 0,24 1
1980 0,012 85

Para calcular o valor a pagar (artigos + portes de envio), será necessário saber o peso da total da encomenda.

Atendendo às quantidades que encomendou, e utilizando vetores e operações sobre vetores, escreva um programa amazon.m que calcule o peso total que espera receber em casa, mas tenha em atenção o seguinte: cada produto vem embalado com uma caixa que tem lhe acrescenta cerca de 20% do peso.

Resposta

peso = [1.2 1.2 0.24 0.012]
quantidade = [2 12 1 85]
pesocomambalagem = peso * 1.2
total = pesocomambalagem * quantidade'

Programa em Octave

Calcular a área de uma fatia de pizza

8fatias-l.gif

Na Pizzaria Onde só Come Vegetariana (OCV), as pizzas têm as seguintes dimensões:

Tamanho Diâmetro
Pequena 25 cm
Média 30 cm
Grande 35 cm
Familiar 40 cm
Gigante 45 cm

Escreva um programa Octave areasetorcircular que calcule a área de uma fatia de pizza, sabendo:

  1. o tamanho da pizza
  2. o ângulo em graus da fatia

Ou seja, para calcular a área o utilizador tem que indicar o tamanho da pizza e o ângulo da fatia (em graus). Para o utilizador indicar o tamanho da pizza, entre os possíveis que foram indicados na tabela, use obrigatoriamente um menu.

A resposta deverá ser em cm2.

angulo = input("Ângulo que deseja (entre 0 e 360)?")
tamanho = menu("Qual o tamanho que deseja?", "Pequena", "Média", "Grande", "Familiar", "Gigante");
switch (tamanho)
		case 1
			area = pi * (25/2)^2
		case 2
			area = pi * (30/2)^2
		case 3
			area = pi * (35/2)^2
		case 4
			area = pi * (40/2)^2
		case 5
			area = pi * (45/2)^2
endswitch
printf("A área da fatia é %.2f cm2\n", area * angulo / 360)

Calcular a área de uma fatia de bolo

Bolo.jpg

No restaurante Ode de Calorias e Vinho (OCV), as sobremesas são cobradas em função da área escolhida pelos clientes. Ou seja, os clientes escolhem a sobremesa, e o ângulo em graus da fatia que desejam.

As sobremesas disponíveis e respetivos diâmetros são as seguintes:

Sobremesa Diâmetro
Toucinho do Céu 30 cm
Tarde Amêndoa 30 cm
Tarde de Mirtilo 32 cm
Bolo de Bolacha 40 cm
Bolo de Chocolate 35 cm

Escreva um programa Octave areasetorcircular que calcule a área de uma fatia de bolo, sabendo:

  1. a sobremesa escolhida
  2. o ângulo em graus da fatia

Ou seja, para calcular a área, o utilizador tem que indicar a sobremesa e o ângulo da fatia (em graus). Para o utilizador escolher a sobremesa, entre as possíveis que foram indicados na tabela, use obrigatoriamente um menu.

A resposta deverá ser em cm2.

Função para manipular strings

Apelido em miúsculas

Escreva uma função Octava chamada normaliza que recebe um nome completo de uma pessoa e devolve o mesmo nome, com o apelido em maiúsculas. Os outros nomes mantêm-se inalterados.

Exemplo:

>>> normaliza("Ernesto Rafael Guevara de la Serna")
 
ans = Ernesto Rafael Guevara de la SERNA
Resposta
function novonome = normaliza(nome)
% normaliza(nome)
%	Recebe o nome e retorna o mesmo, com o apelido em maiúsculas.
% 	O apelido é a parte do nome após o último espaço.
%	Exemplo: 
%		n = "Camilo Castelo Branco"
%		normaliza(n);
%		ans = Camilo Castelo BRANCO
%
%	Limitação: esta função só funciona se houver pelo menos um ' ' no nome.
	posicaoespacos = find(nome == " ")
	ultimoespaco = posicaoespacos(end)
	apelido = nome(ultimoespaco+1:end)
	proprio = nome(1:ultimoespaco)
	novonome = [proprio upper(apelido)]
endfunction

Extensão em minúsculas

Escreva uma função extensao que recebe o nome de um arquivo. Como resultado, a função devolve o mesmo nome, mas com a extensão em minúsculas. A extensão é formada pelas letras após o último ponto.

Exemplo:

>>> extensao('EnterroDaGata.JPG')
 
ans = EnterroDaGata.jpg

Exemplo:

>>> extensao('Grafico.m.TIFF')
 
ans = Grafico.m.tiff
Resposta
function novo = extensao(ficheiro)
% extensao(ficheiro)
%	Recebe o nome de um ficheiro e retorna o mesmo, com a extensão em minúsculas.
% 	A extensão é a parte do nome após o último ponto.
%	Exemplo: 
%		f = "Aulas.1213.OCV.DOC"
%		extensao(f);
%		ans = Aulas.1213.OCV.doc
%
%	Limitação: esta função só funciona se houver pelo menos um '.' no nome.
	posicaopontos = find(ficheiro == ".")
	ultimoponto = posicaopontos(end)
	extensao = ficheiro(ultimoponto+1:end)
	inicio = ficheiro(1:ultimoponto)
	novo = [inicio lower(extensao)]
endfunction

Função para manipular vetores

Pontos acumulados pelo Sporting Clube de Braga

Sc braga.png

Considere os resultados do Sporting Clube de Braga na Liga Zon Sagres 2012/2013 relativos às 15 primeiras jornadas, onde cada letra representa um Empate, Vitória ou Derrota.

resultados_scb = "EVDVVEVVDDVVVDV";

Para contar as vitórias do Sporting Clube de Braga podemos usar a expressão:

>>> length(resultados_scb(resultados_scb=='V'))
ans =  9

Aplicando a função pontosporjogo a cada um dos resultados ('E', 'V' ou 'D'), obtém um novo vetor, com os pontos obtidos em cada jornada:

pontos_scb = [ 1   3   0   3   3   1   3   3   0   0   3   3   3   0   3];

A função pontosporjogo está definida da seguinte forma:

function pontos = pontosporjogo(resultado)
  switch (resultado)
    case 'D'
      valor = 0;
    case 'E'
      valor = 1;
    case 'V'
      valor = 3;
  endswitch
  pontos = valor;

A partir do vetor com os pontos obtidos em cada jornada, podemos saber o total com a expressão:

>>> sum(pontos_scb)
ans =  29

Podemos fazer um gráfico com a evolução dos pontos obtidos. No gráfico seguinte, jornada a jornada mostra-se os pontos que a equipa foi acumulando, até chegar aos atuais 29 pontos, ao fim das 15 primeiras jornadas.

Liga Zon Sagres 073.png

Para apresentar o gráfico anterior, precisamos de criar um vetor com o acumulado dos pontos.

Escreva a função acumula, que pega num vetor com os pontos obtidos em cada jogo e dá um novo vetor, com os pontos acumulados.

Exemplo:

>>> acumula(pontos_scb)
ans =
 1    4    4    7   10   11   14   17   17   17   20   23   26   26   29