Diferenças entre edições de "Segundo Teste de Avaliação"
(→Números primos) |
(→Números primos) |
||
Linha 28: | Linha 28: | ||
# <syntaxhighlight enclose="none">find(isprime(1:x))</syntaxhighlight> | # <syntaxhighlight enclose="none">find(isprime(1:x))</syntaxhighlight> | ||
+ | # <syntaxhighlight enclose="none">intervalo = 1:x; primos = intervalo(isprime(intervalo))</syntaxhighlight> | ||
===Operações sobre vetores=== | ===Operações sobre vetores=== |
Revisão das 11h11min de 14 de janeiro de 2014
Índice
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.
- K=1:num; K(rem(num,K)==0)
- sort(factor(num))
- unique(factor(num))
- histc(factor(num), unique(factor(num)))
Escolha a melhor expressão para calcular todos os divisores de um inteiro num.
Resposta
- 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?
- find(isprime(1:x))
- factor(x)
- intervalo = 1:x; primos = intervalo(isprime(intervalo))
- primes(1:x)
Resposta
- find(isprime(1:x))
- intervalo = 1:x; primos = intervalo(isprime(intervalo))
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
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:
- o tamanho da pizza
- 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 525 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
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:
- a sobremesa escolhida
- 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
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.
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