This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Computação e Programação 2017/2018
Aulas de Problemas
Aula 1 - Introdução ao ambiente MATLAB
Aula 2 - Funções pré-definidas e expressões
Aula 3 - Vectores e matrizes
Aula 4 - Construir scripts
Aula 5 - Definir funções
Aula 6 - Ficha 1
Aula 7 - Selecção
Aula 8 - Iteração
Aula 9 - Ficha 2
Aula 10 - Strings, gráficos, e desenvolvimento de programas
Aula 11 - Estruturas de dados
Aula 12 - Entrada e saída a partir de ficheiros
Aula 13 - Ficha 3
Aula 14 - Linguagens compiladas (C++)
E ainda…
Aula 1 - Introdução ao ambiente MATLAB
Objectivos
Usar o MATLAB como calculadora.
Usar o comando format.
Atribuir valores a variáveis do tipo double.
Usar funções pré-definidas.
Usar expressões numéricas.
Problema 1
A função pré-definida sin calcula, e retorna, o seno de um ângulo em radianos. Introduza o
comando help elfun para descobrir a função pré-definida que permite obter o seno de um
ângulo em graus. Teste se essa função devolve o valor 1 quando recebe o valor 90.
Problema 2
Escreva as seguintes expressões em MATLAB, e teste-as:
a) √23
b) 43.2
c) tan 𝜋
Problema 3
Experimente fazer:
>> pi
>> format long
>> pi
>> format short
>> pi
Compare os resultados. Use o comando doc format para obter ajuda. Procure, e utilize, a
opção para format que permitirá depois obter o seguinte resultado:
>> 5/16 + 2/7
ans =
67/112
Problema 4
Crie uma variável que guarde o valor da sua altura. Em seguida, retire 10 centímetros ao valor
guardado. Por fim, adicione meio metro ao valor guardado.
Problema 5
Considere a seguinte função 𝑧 = 𝑓(𝑥, 𝑦):
𝑧 = 𝑥3 − (𝑥 − 𝑦)3
𝑥2 − (𝑥 − 𝑦)2
Crie as variáveis x e y, atribuindo-lhes valores à sua escolha. Depois crie a variável z com o valor
resultante da avaliação da função f para os valores guardados em x e y.
EXERCÍCIOS COMPLEMENTARES
Exercício 1
Prima F1, ou faça:
>> doc
e explore a organização da documentação disponibilizada pelo MATLAB, com particular ênfase
para a informação acedida a partir do tópico MATLAB.
Exercício 2
Tome conhecimento de dois valores especiais no MATLAB, verificando o que acontece ao fazer:
>> 1/0
>> log(0)
>> exp(1000)
>> 0/0
>> inf/inf
Exercício 3
Tome conhecimento de alguns cuidados a ter na identificação de variáveis, verificando o que
acontece ao fazer:
>> sin(pi/2)
>> pi = 0
>> sin(pi/2)
>> sin = 0
>> sin(pi/2)
Para repor a situação original, faça:
>> clear pi sin
Exercício 4
Comece por criar várias variáveis. Faça:
>> save as_minhas_variaveis
Repare que na sua área de trabalho (Current Folder) existe agora um ficheiro chamado
as_minhas_variaveis.mat. Apague as variáveis criadas, fazendo:
>> clear
Confirme que o seu espaço de dados (Workspace) ficou vazio. Faça agora:
>> load as_minhas_variaveis
para confirmar que acabou de recuperar as variáveis guardadas no ficheiro e posteriormente
apagadas. Faça alguns cálculos com elas.
Exercício 5
Comece por fazer:
>> diary aula1
Dê várias instruções na janela de comandos, e faça:
>> diary off
Repare que na sua área de trabalho (Current Folder) existe agora um ficheiro aula1. Abra-o para
confirmar que acabou de gravar uma sessão de trabalho.
Exercícios no livro adoptado
Resolva os seguintes exercícios propostos no livro adoptado:
2ª edição: Capítulo 1 - Exercícios 1 a 13, e 15.
3ª edição: Capítulo 1 - Exercícios 1 a 15, 19, e 29 a 34.
Aula 2 - Funções pré-definidas e expressões
Objectivos
Usar as funções de arredondamento.
Conhecer as capacidades de representação dos tipos numéricos e as possibilidades
para a conversão de valores entre estes tipos de dados.
Usar números pseudoaleatórios.
Usar os códigos inteiros ASCII dos caracteres, e conhecer as conversões implícitas que
os podem envolver.
Usar expressões lógicas.
Problema 1
Utilize o comando help elfun e faça experiências na linha de comando (prompt) do MATLAB
de modo a identificar a eventual diferença de resultado entre:
a) fix(3.5) e floor(3.5)
b) fix(3.4) e fix(-3.4)
c) fix(3.2) e floor(3.2)
d) fix(-3.2) e floor(-3.2)
e) fix(-3.2) e ceil(-3.2)
Problema 2
Utilize intmin e intmax para determinar o intervalo de valores que os tipos uint32 e
uint64 permitem representar.
Problema 3
Utilize help para descobrir se existem equivalentes a intmin e intmax para os tipos que
permitem representar números reais.
Problema 4
Guarde um valor com casas decimais numa variável double (acontece por omissão). Converta
o valor guardado na variável para o tipo int32 e guarde o resultado numa nova variável.
Problema 5
Crie um número (pseudo)aleatório:
a) real pertencente a [0, 1];
b) real pertencente a [0, 20];
c) real pertencente a [20, 50];
d) inteiro pertencente a [1, 10];
e) inteiro pertencente a [50, 100].
Problema 6
As letras do alfabeto encontram-se ordenadas na tabela de códigos ASCII, ou seja, o 'a' está
antes do 'b' e o 'A' está antes do 'B'. Qual a ordem entre maiúsculas e minúsculas? As
minúsculas estão antes ou depois das maiúsculas?
Problema 7
Antecipe quais os resultados das seguintes expressões? (confirme depois no MATLAB):
a) 'b' >= 'c' – 1
b) 3 == 2 + 1
c) (3 == 2) + 1
d) xor(5 < 6, 8 > 4)
EXERCÍCIOS COMPLEMENTARES
Exercício 1
Tome conhecimento de algumas limitações das representações habituais dos números reais
(neste caso, do tipo double), verificando o que acontece ao fazer:
>> 0.7 - 0.6 == 0.1
>> sin(pi) == 0
>> sin(pi) - 0 < eps
>> help eps
Exercício 2
Tome conhecimento de alguns perigos na utilização de números inteiros guardados em tipos
inteiros (neste caso, no tipo int32), verificando o que acontece ao fazer:
>> numReal = int32(3) / 2
>> whos numReal
Exercícios no livro adoptado
Resolva os seguintes exercícios propostos no livro adoptado:
2ª edição: Capítulo 1 - Exercícios 14, e 16 a 21; Capítulo 3 - Exercício 1.
3ª edição: Capítulo 1 - Exercícios 16 a 18, e 20 a 28.
Aula 3 - Vectores e matrizes
Objectivos
Usar o operador “dois pontos” ou a função linspace para criar um vector.
Criar uma matriz.
Alterar ou apagar elementos de um array (vector ou matriz).
Referenciar uma parte de um array.
Usar um array como argumento numa chamada a uma função pré-definida.
Usar operadores "elemento a elemento" (ou de array).
Usar vectores lógicos e indexação lógica.
Problema 1
Crie os seguintes vectores linha usando o operador “dois pontos” e a função linspace.
a) -5 -4 -3 -2 -1
b) 5 7 9
c) 8 6 4
Problema 2
Escreva uma expressão para obter (apenas) os elementos em posições ímpares de um vector v.
Teste a expressão com um vector de tamanho par e outro de tamanho ímpar (quaisquer).
Escreva uma instrução para apagar os elementos nas posições pares de um vector v. Teste-a.
Problema 3
Crie a seguinte matriz sem escrever todos os valores directamente:
mat =
7 8 9 10
12 10 8 6
Escreva as expressões para referenciar as seguintes partes da matriz:
a) elemento na primeira linha e na terceira coluna;
b) segunda linha;
c) primeiras duas colunas.
Problema 4
Crie uma matriz 3 x 5 com números reais aleatórios. Escreva uma instrução para remover a
terceira linha.
Problema 5
Crie um vector x com 21 valores igualmente espaçados entre 𝛑 e –𝛑. Crie um vector y com os
valores do seno para os valores correspondentes no vector x.
Nota: É frequente a construção de um gráfico 2D começar desta maneira, sendo que os vectores
x e y contêm as coordenadas dos pontos a representar. Repare que, neste caso (como em muitos
outros) seria sempre conveniente escolher um número ímpar de pontos. Para o confirmar, faça
plot(x, y).
Problema 6
Crie uma matriz 3 x 5 com números inteiros aleatórios entre –10 e 5. Crie outra matriz que
guarde em cada elemento o valor absoluto do elemento correspondente na primeira matriz.
Problema 7
Determine o resultado da soma abaixo, começando por criar um vector para os numeradores e
outro para os denominadores.
3
10 +
5
9 +
7
8 +
9
7
Problema 8
Crie um vector com cinco números inteiros aleatórios entre -10 e 5. Escreva as expressões para
obter desse vector:
a) todos os elementos subtraídos de três unidades;
b) a contagem de quantos elementos são positivos;
c) todos os elementos em valor absoluto;
d) o valor máximo;
e) o somatório dos elementos positivos.
EXERCÍCIOS COMPLEMENTARES NO LIVRO ADOPTADO
Nota prévia: Os arrays tridimensionais (“three-dimensional matrices”, no livro) não fazem parte
do programa na sua vertente prática. Em todo o caso, a sua utilização segue a lógica dos arrays
bidimensionais (as matrizes). Se os alunos quiserem praticar esta matéria não perdem nada com
isso.
Resolva os seguintes exercícios propostos no livro adoptado:
2ª edição: Capítulo 1 - Exercícios 22 a 42 (o exercício 41 é sobre arrays
tridimensionais).
3ª edição: Capítulo 1 - Exercício 23; Capítulo 2 - Exercícios 1 a 44 (os exercícios 18 e 19
são sobre arrays tridimensionais).
Aula 4 - Construir scripts
Objectivos
Usar a função input.
Usar a função fprintf.
Construir gráficos 2D.
Construir um script.
Usar as funções load e save para ler e escrever em ficheiros de texto.
Problema 1
A função input pode ser usada para receber um vector. Por exemplo:
>> vec = input(['Introduza um vector ' ...
'usando uma expressão válida em MATLAB: '])
Introduza um vector usando uma expressão válida em MATLAB: 4:7
vec =
4 5 6 7
Experimente a entrada de vectores e matrizes usando a função input.
Nota: Salvo situações muito excepcionais, este tipo de utilização da função input é uma
péssima opção, porque o programador está a contar que o utilizador conheça a linguagem
MATLAB. Por outro lado, só num contexto didáctico é que faz sentido usar a função input na
janela de comandos.
Problema 2
Experimente a função fprintf para mostrar números reais com diferentes formatações para
o número total de colunas utilizadas e número de casas decimais mostradas. Faça as suas
experiências com a notação decimal e com a notação científica.
Problema 3
Mostre em dois gráficos separados a função seno no domínio entre 0 e 𝛑. Um dos gráficos deve
resultar da utilização para as abcissas de um vector com 11 valores, e o outro gráfico de um
vector com 101 valores.
Nota: Recorda-se a habitual conveniência em se escolher um número ímpar de pontos (a que
corresponderá um número par de intervalos).
Problema 4
Um ficheiro reais.dat foi criado para ser usado numa experiência. No entanto, o ficheiro contém
números reais, quando o que se desejava era que fossem inteiros. Por outro lado, o ficheiro não
está no formato correcto; os valores estão organizados por colunas em vez de por linhas. Por
exemplo, se o ficheiro tiver o conteúdo:
90.5792 27.8498 97.0593
12.6987 54.6882 95.7167
91.3376 95.7507 48.5376
63.2359 96.4889 80.0280
9.7540 15.7613 14.1886
o que se pretende é:
91 13 91 63 10
28 55 96 96 16
97 96 49 80 14
Comece por criar um ficheiro reais.dat no formato "reais por colunas". Seguidamente, escreva
um script que leia os dados de reais.dat para uma matriz, arredonde os números, e escreva a
matriz no formato "inteiros por linhas" num ficheiro chamado inteiros.dat.
EXERCÍCIOS COMPLEMENTARES NO LIVRO ADOPTADO
Resolva os seguintes exercícios propostos no livro adoptado:
2ª edição: Capítulo 2 - Exercícios 1 a 22, e 38 a 40.
3ª edição: Capítulo 3 - Exercícios 1 a 23, e 42.
Aula 5 - Definir funções
Objectivos
Definir uma função.
Invocar uma função previamente definida a partir de um script.
Problema 1
Defina uma função meiasDuzias que receba dois inteiros positivos, e devolva (retorne) uma
matriz com o número de linhas coincidente com o primeiro valor recebido e o número de
colunas coincidente com o segundo valor recebido, e em que todos os seus elementos sejam
iguais a 6.
Problema 2
Desenvolva um predicado divisivelPor5 que receba um inteiro, e retorne (devolva) o valor
lógico true se o valor recebido for divisível por 5, ou o valor lógico false se não o for. Não
utilize instruções de selecção.
Problema 3
Defina uma função para receber um vector e devolver (retornar) um dos valores guardados no
vector, escolhido aleatoriamente.
Problema 4
O custo C de produção de n unidades de um determinado produto numa fábrica é dado pela
seguinte equação:
𝐶(𝑛) = 5 𝑛2 + 44 𝑛 + 11
Escreva uma função calculaCusto para receber o número de unidades a produzir e retornar
(devolver) o respectivo custo. Escreva um script progCalculaCusto para:
Obter do utilizador o número n de unidades a produzir.
Chamar a função calculaCusto para obter o custo de produzir as n unidades.
Dar o resultado ao utilizador tal como se mostra em baixo.
>> progCalculaCusto
Introduza o número de unidades: 100
O custo para produzir 100 unidades é 54411.00 €.
EXERCÍCIOS COMPLEMENTARES NO LIVRO ADOPTADO
Resolva os seguintes exercícios propostos no livro adoptado:
2ª edição: Capítulo 2 - Exercícios 23 a 37; Capítulo 3 - Exercícios 18 a 20.
3ª edição: Capítulo 3 - Exercícios 24 a 41.
Aula 6 - Ficha 1
Objectivos
Incentivar os alunos a distribuir o seu estudo autónomo ao longo de todo o semestre.
Fornecer aos alunos uma oportunidade para avaliarem o estado actual dos seus