Sie sind auf Seite 1von 70

APONTAMENTOS

DE
EXCEL, VB e MATLAB


LABORATRIOS DE INFORMTICA
1 ANO
do
MESTRADO INTEGRADO EM
ENGENHARIA DO AMBIENTE

2009-2010






Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 2 -

ndice
Pg.
1. Introduo ao Microsoft Excel 4
1.1 Livro e folha de clculo
1.2 Frmulas
1.3 Referncia a clula(s)
1.4 Atribuio de nome a uma clula ou range
1.5 Referncia a clula(s) de outra Folha de Clculo
1.6 Funes
1.7 Composio de funes
1.8 Algumas funes intrnsecas do Excel
1.9 Grficos
1.10 Exerccios propostos

2. Noes bsicas de Algoritmia e Programao VB 9
2.1 O que um algoritmo?
2.2 Etapas na resoluo de um problema
2.3 Estrutura geral de um algoritmo
2.4 Variveis
2.5 Instrues de atribuio, leitura e escrita
2.6 Expresses aritmticas
2.7 Instues de controlo e seleco
2.8 Operadores lgicos
2.9 Instrues de repetio e de controlo de fluxo
2.10 Exerccios Propostos
2.11 Exerccios Resolvidos

3. Excel e programao VBA 23
3.1 Dialog / UserForm
3.2 Eventos
3.3 Procedimentos tipo Sub
3.4 Procedimentos tipo Funes
3.5 Objectos
3.6 Declarao de Variveis
3.7 Operadores
3.8 Funes de manipulao de texto
3.9 Instrues Condicionais
3.10 Ciclos
3.11 Exemplo de utilizao de procedimentos
3.12 Exerccios propostos
3.13 Exerccios resolvidos


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 3 -
4. Introduo ao Matlab 45
4.1 Ficheiros do Matlab: M-ficheiros
4.2 Ambiente de trabalho em MATLAB
4.3 Comandos de visualizao e informao
4.4 Comandos para atribuir valores s variveis
4.5 Grficos de funes
4.6 Algumas das funes matemticas elementares
4.7 Funes para manipulao algbrica
4.8 Exerccios
4.9 Matrizes e Vectores em MatLab
4.10 Inicializao de matrizes
4.11 Operaes sobre vectores
4.12 Operaes sobre matrizes
4.13 Operadores aritmticos, relacionais e lgicos
4.14 Valores booleanos
4.15 Instrues bsicas de programao em MatLab
4.15.1 Instrues de Controlo
4.15. 2 Ciclo for
4.15. 3 Instrues de entrada/sada de dados
4.16 Exerccios propostos
4.17 Exerccios Resolvidos

5. Programao em MatLab introduo 59
5.1 Programas (script)
5.2 Funes em MatLab
5.3 Ficheiros de dados em MatLab
5.4 Instrues de Controlo para programao em MatLab
5.5 Outras funes do MatLab
5.6 Grficos 3-D
5.7 Exerccios de introduo Programao em MatLab

6. Construo de uma pgina WEB pessoal 70

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 4 -


1. Introduo ao Microsoft Excel

O Excel uma aplicao que permite trabalhar num ambiente de Folhas de Clculo
para armazenar constantes, utilizar frmulas, utilizar funes matemticas, criar
grficos, etc.

1.1 Livro e folha de clculo
No Excel, livro ou workbook o nome do ficheiro em que se trabalha e onde so
guardados os dados. Cada livro pode conter vrias folhas de clculo.
A folha de clculo o documento utilizado para guardar e manipular dados. Uma folha
de clculo composta por clulas organizadas em colunas e linhas e faz sempre parte
de um livro. A identificao de uma clula feita usando a letra da coluna e o nmero
da linha em que a clula se encontra. Por exemplo: D5 clula da coluna "D" linha "5".
Os dados inseridos nas clulas podem ser de vrios tipos: valores numricos ou
alfanumricos, frmulas e funes.

No cran de abertura os separadores de folhas mostram os nomes das folhas.
Selecciona-se o separador que representa a folha a visualizar e o nome da folha que est
visvel encontra-se a negrito.
Se os separadores de folhas no esto visveis:
menu ToolsOptionsViewseleccionar "Sheet Tabs".

1.2 Frmulas
Uma frmula pode ser composta por valores, referncias a clulas, funes ou
operadores. Uma clula pode guardar uma frmula e neste caso comea sempre com o
sinal =.
Operadores aritmticos: +, -, /, *, %, ^
Operadores de comparao: =, >, <, >=, <=, <>
Para copiar uma frmula pode usar copy/paste ou seleccionar a clula origem, clicar
no canto inferior direito da clula origem e arrastar para as clulas de destino se forem
imediatamente abaixo ou direita.
Para ver as frmulas contidas na folha (em vez dos valores):
menu Tools Options View activar Formulas

1.3 Referncia a clula(s)

Uma referncia identifica uma clula ou um intervalo ou range de clulas (isto , clulas
adjacentes formando um rectngulo).
Por exemplo:
B2:D3 o conjunto de clulas (B2, C2, D2, B3, C3, D3)
C2:H20 o conjunto de todas as clulas que se encontram entre a coluna C e a coluna
H nas linhas 2 a 20, um total de 6(colunas)19(linhas) = 114 clulas.


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 5 -
Referncias relativas e absolutas
A distino entre referncia relativa e absoluta a clulas importante quando uma
frmula copiada de uma clula para outra(s). Quando uma frmula copiada, as
referncias relativas so ajustadas automaticamente para a nova localizao. Assim, a
referncia relativa numa frmula copiada refere-se a clulas diferentes das referidas na
frmula original. Mas quando se copia uma frmula, as referncias absolutas so
copiadas exactamente como aparece na clula origem. A existncia de um sinal $ antes
da identificao de uma linha/coluna indica uma referncia absoluta. Podem tambm ser
utilizadas referncias mistas, tais como E$4 ou $E4. Uma frmula contendo referncias
mistas quando copiada, ajustada a coluna ou linha (que no tem o $) e no alterada a
outra parte da referncia.

1.4 Atribuio de nome a uma clula ou range
possvel atribuir um nome a uma clula ou a um range de clulas. Este nome nico
dentro de um livro.
Para atribuir um nome a uma clula/range:
1 Seleccionar a clula/range
2 menu Insert Name Define em Names in workbook: escrever o nome.
Quando atribudo um nome a uma clula ou range, este nome pode ser utilizado
sempre que seja necessrio utilizar uma referncia absoluta a essa clula ou range.

1.5 Referncia a clula(s) de outra Folha de Clculo
possvel referir clula(s) que se encontra(m) numa folha de clculo diferente daquela
em que se est a trabalhar. Para isso o endereo da(s) clula(s) referida(s) deve comear
pelo nome da folha de clculo em que esta(s) se encontra(m). Em alternativa pode ser
utilizado o seu nome (desde que lhe(s) tenha sido previamente atribudo esse nome).
Se a(s) clula(s) a referir se encontra(m) noutro livro, o endereo deve comear pelo
nome desse ficheiro. Quando utilizado um percurso relativo no nome do ficheiro, o
Excel assume que a directoria corrente a directoria do livro workbook que contm a
referncia.
Exemplos: [meulivro.xls]folha_A!B2:B4 ou ento[meulivro.xls]nome.

1.6 Funes
As funes so utilizadas geralmente numa frmula. Os valores sobre os quais uma
funo efectua operaes so os chamados argumentos:
nomedafuno (argumento1; argumento2,...).
Os valores dos argumentos podem ser constantes, referncias a clulas, ranges, funes
ou expresses. Quando uma funo requer mais do que um argumento e naquelas em
que cada argumento possui um significado prprio, a ordem pela qual so indicados os
valores dos argumentos fundamental.
Exemplos:
Na funo SUM possvel utilizar desde 1 at 30 argumentos, tendo todos eles
significado idntico; logo, a ordem dos argumentos (quando so utilizados dois ou mais
argumentos) no significativa. Assim, SUM(B2:D4;F2:G4) e SUM(F2:G4;B2:D4)
produzem o mesmo resultado (a soma dos valores das clulas das duas ranges indicadas
nos argumentos).
A funo IF requer 3 argumentos com significados distintos: o primeiro
obrigatoriamente uma condio (cujo valor Verdadeiro ou Falso), o segundo o valor
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 6 -
que a clula toma quando a condio Verdadeira, o terceiro o valor da clula quando
a condio Falsa; logo, a ordem dos argumentos significativa. Assim,
IF(A1>A2;1;0) e IF(A1>A2;0;1) produzem resultados diferentes (mas IF(A1>A2;1;0) e
IF(A1<=A2;0;1) produzem o mesmo resultado).

Algumas funes possuem argumentos para os quais se encontram pr-definidos valores
por omisso, isto , valores que so utilizados no caso do utilizador no fornecer
valores.
Exemplo: A funo IF pode ser utilizada com valores apenas para os dois primeiros
argumentos; neste caso, o terceiro argumento tem como valor de omisso a constante
FALSE. Assim, IF(A1>A2;1) e IF(A1>A2;1;FALSE) produzem o mesmo resultado.
Para inserir uma funo numa clula:
Seleccionar a clula onde se quer guardar o resultado da funo e introduzir o sinal =
seguido da definio da funo ou
Seleccionar a clula onde se quer guardar o resultado da funo e
menu Insert Function e seguir as instrues do Assistente de Funes


1.7 Composio de funes

Quando uma funo aplicada a outra funo:
= if (sum (b2 : g2) > = 9.5 ; Aprovado; Reprovado)
= if (count (a1:a10) >=5 ; max (a1:a10) ; min (a1:10))

A descrio das funes intrnsecas do Excel pode ser encontrada no Assistente de
Funes ou em HELP. Referem-se de seguida algumas funes.

1.8 Algumas funes intrnsecas do Excel

FREQUENCY (matriz_dados, matriz_bin)
Calcula a frequncia com que os valores ocorrem num intervalo de valores e devolve
uma coluna de nmeros. Exemplo:


Matriz_dados uma matriz de ou uma referncia a um conjunto de valores, cujas
frequncias se deseja contar. Se matriz_dados no contiver valores, FREQUENCY
devolve zeros. FREQUENCY ignora clulas em branco e texto.
Matriz_bin uma matriz de ou uma referncia a intervalos, nos quais deseja agrupar os
valores contidos em matriz_dados. Se matriz_bin no contiver valores, FREQUENCY
devolve o nmero de elementos em matriz_dados.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 7 -
FREQUENCY introduzida como uma frmula de matriz: seleccione uma clula para
escrever e guardar, depois seleccione esta clula e um intervalo de clulas adjacentes no
qual deseja que a distribuio devolvida aparea, clicar F2 seguido de
CRTL+SHIFT+ENTER. A matriz devolvida tem mais um elemento que matriz_bin.
Esse elemento adicional contm o nmero de valores que se encontram acima do
intervalo mais alto (ver exemplo dado).

COUNTIF(intervalo,critrio)
Calcula o nmero de clulas num intervalo que corresponde aos critrios determinados.
Intervalo o intervalo de clulas a partir do qual se deseja contar clulas. Critrio o
critrio (na forma de um nmero, expresso ou texto) que define quais as clulas que
sero contadas. Critrios podem ser expressos como 52, ">52", "ABC".

MATCH(valor_proc, matriz_proc, tipo_corresp)
Se o tipo_corresp for 0 esta funo devolve a posio relativa de um item numa matriz
que coincide com um valor especificado na forma especificada. Valor_proc o valor
utilizado para localizar o valor desejado numa tabela. Matriz_proc um intervalo
contguo de clulas que contm possveis valores de procura. MATCH devolve a
posio do valor correspondente em matriz_proc e no o valor propriamente dito. Por
exemplo: MATCH("b,{"a","b","c"},0) devolve 2, a posio relativa de "b" na matriz
{"a","b","c"}. MATCH no faz distino entre letras maisculas e minsculas ao fazer
corresponder valores de texto. Se MATCH no conseguir localizar um valor
correspondente, devolve o valor de erro #N/A. Se tipo_corresp for 0 e valor_proc for
texto, valor_proc pode conter os caracteres globais, asterisco (*) e ponto de interrogao
(?). Um asterisco coincide com qualquer srie de caracteres; um ponto de interrogao
coincide com qualquer carcter.
Para outros valores de tipo_corresp estudar o help desta funo.

INDEX (matriz, num_linha, num_coluna)
Devolve o valor de um elemento numa matriz, seleccionada pelos ndices do nmero de
linha e coluna. A funo INDEX apresenta duas formas: de matriz e de referncia. A
forma de matriz devolve sempre um valor ou uma matriz de valores.
Matriz um intervalo/range de clulas. Se a matriz for constituda por uma s linha ou
coluna, o argumento correspondente a
num_linha ou num_coluna opcional.
Se a matriz tiver mais de uma linha e mais de uma coluna e se definir num_linha ou
num_coluna como 0 (zero), INDEX (introduzida como frmula de matriz) devolve a
matriz de valores para a coluna ou linha inteira, respectivamente.

1.9 Grficos

Um grfico pode ser criado na mesma folha em que se encontram os dados ou numa
folha de grfico. Um grfico est ligado aos dados que o originaram, sendo actualizado
sempre que estes so alterados. Os grficos podem ser criados a partir de um range ou
de uma unio de ranges.
Para criar um grfico numa folha de clculo/folha de grfico:
1 Seleccionar a(s) range(s) que contm o texto que identifica os eixos e os dados
2 menu Insert Chart
3 seguir as instrues do Assistente de Grficos

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 8 -
1.10 Exerccios
1. A funo
x
e aproximada pelo polinmio
0
( )
!
n
k
n
k
x
P x
k
=
=

para valores de x na
vizinhana de 0. Usando uma folha de clculo Excel construa uma tabela, sendo a
primeira coluna valores de x entre -5 e 5 com incremento 0.01 e na segunda coluna os
valores do polinmio ( )
n
P x para n=2, 5 e 7. Calcule o erro relativo com que o
polinmio aproxima a funo
x
e nos diversos pontos e desenhe-o. Que concluses tira?

2. Uma funo f ( x ) aproximada pelo polinmio de Taylor
( )
,
0
( )
( ) ( )
!
n k
k
n a
k
x a
P x f a
k
=

para valores de x na vizinhana de a.


a) Considere f ( x ) sen( x ) = e a=0;
b) Considere f ( x ) ln( x ) = e a=1;
c) Considere f ( x ) x = e a=4;
Usando um livro Excel com trs folhas (uma folha para cada alnea) comece por
construir uma tabela sendo a 1 coluna valores de x entre a-2 e a+2 com incremento
0.01 e as colunas seguintes os polinmios
,
( )
n a
P x para n=1, 2,..., 7. Para n=2, 5 e 7
calcule e desenhe o erro relativo com que o polinmio aproxima a funo f ( x ) nos
diversos pontos.

3. Construa um ficheiro Excel com 50 observaes da temperatura diria registada num
determinado perodo na cidade do Porto. Coloque os dias na coluna A e o registo das
temperaturas com duas casas decimais na coluna B.
1. Calcule a diferena relativamente ao dia anterior (coluna C); no caso de valores
desconhecidos o resultado deve ser :
2. Formate as clulas da coluna C com uma casa decimal;
3. Calcule da mdia, a mediana e a moda;
4. Calcule a varincia;
5. Calcule o desvio padro;
6. Calcule o mnimo;
7. Calcule o mximo;
8. Calcule a amplitude;
9. Construa uma coluna D em que classifica os dias quentes, se a temperatura for
superior a 25 graus, os dias frios, se a temperatura for inferior a 15 graus e os dias
amenos, se a temperatura ficar entre 15 e 25 graus.

4. Considere 5 ou 6 classes de temperaturas apropriadas aos dados do exerccio anterior.
Utilize o package de estatstica do Excel para contruir o histograma e estudar os dados.
Compare os resultados.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 9 -

2. Noes Bsicas de Algoritmia e Programao VB


2.1. O QUE UM ALGORITMO?
Um algoritmo uma sequncia finita de instrues bem definidas e no ambguas, cada
uma das quais pode ser executada mecnicamente num perodo de tempo finito e com
uma quantidade de esforo finita.
O conceito de algoritmo frequentemente ilustrado pelo exemplo de uma receita,
embora muitos algoritmos sejam mais complexos. Podem repetir passos (fazer
iteraes) ou necessitar de decises (tais como comparaes ou lgica). Um algoritmo
corretamente executado no ir resolver um problema se estiver implementado
incorretamente ou se no for apropriado ao problema.
Um programa de computador essencialmente um algoritmo que diz ao computador os
passos especficos e em que ordem eles devem ser executados.

2.2 ETAPAS NA RESOLUO DE UM PROBLEMA




Exemplo
Calcular a rea de um rectngulo sendo dados os valores do comprimento e da largura.

Corpo do ALGORITMO:
LEIA (comprimento, largura);
area comprimento * largura;
ESCREVA (area);


Cdigo VB:
Private Sub CommandButton1_Click ()

Dim comprimento, largura, area As Double
comprimento = Val(InputBox("Comprimento?"))
largura = Val(InputBox("Largura?"))
area = comprimento * largura
MsgBox (Str(area))

End Sub

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 10 -
Para inserir o script no Visual Basic do Excel sugere-se, por exemplo, que no menu
Developer insira um boto de comando usando insert form controls;


Clicando agora sobre o boto com a tecla do lado direito do rato escolha assign macro
ou

e finalmente new ou edit abre a janela de edio VB:


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 11 -

2.3 ESTRUTURA GERAL DE UM ALGORITMO:


2.4 VARIVEIS
Varivel a forma programtica de identificar uma zona de memria do computador
que pode ser consultada e alterada pelo Programa em execuo.

Tipos de Variveis:
Variveis Numricas
Variveis String
Variveis Booleanas
Variveis Data
Variveis Objecto
Variveis Variant

Variveis Numricas:
Integer: Valores inteiros entre 32768 e 32767
Long: Valores inteiros entre 2147483648 e 2147483647
Single: Valores Reais de preciso simples entre +/-1.401298E-45
Double: Valores Reais de preciso dupla entre e +/-3.402823E38

Variveis String: Uma sequncia de caracteres

Exemplo de Cdigo VBA:
Private Sub CommandButton1_Click()

Dim palavra1, palavra2 As String
palavra1 = "lenta"
palavra2 = "mente"
MsgBox (palavra1 + palavra2)

End Sub

Variveis Booleanas (Boolean):
S toma dois valores:
True
False
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 12 -

2.5 INSTRUES DE ATRIBUIO, LEITURA E ESCRITA

Instruo de atribuio:

Instruo de leitura, atribuio e escrita:

Corpo do Algoritmo VB

Leia (x,y);
Soma x + y;
Escreva (soma);
x=Val( InputBox(Introduza x)
y=Val( InputBox(Introduza y))
soma=x+y
MsgBox (Soma= & Str(soma))



2.6 EXPRESSES ARITMTICAS

Exemplos:
area comprimento * largura;
soma x + y cos (x)+ y^x;
media soma/ 2;

As expresses aritmticas envolvem
- OPERANDOS
- VARIVEIS NUMRICAS
- CONSTANTES NUMRICAS
- OPERADORES ARITMTICOS
- FUNES
- PARNTESIS


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 13 -
2.7 INSTUES DE CONTROLO E SELECO

Instruo condicional simples:



Instruo condicional dupla:


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 14 -



Seleco mltipla:
A seleco mltipla permite executar um conjunto de instrues em funo do valor de
uma varivel ou expresso. Por exemplo:






2.8 OPERADORES LGICOS


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 15 -
2.9 INSTRUES DE REPETIO E DE CONTROLO DE FLUXO

Ciclo para que se utiliza quando priori conhecido o nmero de vezes que um bloco
de instrues dever ser executado.





Quando no conhecido o nmero de vezes que um bloco de instrues dever ser
executado utiliza-se o ciclo enquanto ou ciclo repete.

Ciclo enquanto: permite executar repetidamente um bloco de instues enquanto o
valor de uma expresso (condio) for verdadeiro. Neste caso, o bloco de instrues
pode nunce ser executado.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 16 -
Exemplo:


Outro exemplo:

a 10; a = 10
b - 4; b = - 4
Enquanto b>a or b<0 faa While b > a or b < 0
{b a - 1; b = a 1
Wend

Quantas vezes este ciclo executado?


Ciclo Repete: permite executar repetidamente um bloco de instrues at que o valor de
uma expresso (condio) seja verdadeiro.


Exemplo:


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 17 -
2.10 Exerccios propostos:

A. Qual o objectivo de cada um destes programas?
a)

Private Sub CommandButton1_Click( )

Dim mdia, soma As Double
Dim N, i, nota As Integer
N = Val(InputBox("Nmero de disciplinas concludas"))
soma = 0
For i = 1 To N
nota = Val(InputBox("Introduza a nota de uma disciplina concluda"))
soma = soma + nota
Next
mdia = soma / N
MsgBox ("Mdia= " & Str(mdia))

End Sub


b)

Private Sub CommandButton1_Click( )

Dim exame As Double
Dim nota As Integer
Dim classificao As String
Do
exame = Rnd( ) * 20
MsgBox (exame)
nota = Round(exame)
If nota < 10 Then
classificao = "Reprovado"
Else
Select Case nota
Case 10 To 13
classificao = "Suficiente"
Case 14 To 17
classificao = "Bom"
Case 18 To 20
classificao = "Muito Bom"
End Select
End If
MsgBox (Str(nota) & " " & classificao)
Loop Until nota = 20

End Sub

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 18 -

1. Escreva um algoritmo que calcule as razes reais de uma equao real de 2 grau.

2. a) Escrever um algoritmo que calcule a norma euclidiana de um vector;
b) Traduza para Visual Basic o algoritmo anterior.
3. Durante o ms de Janeiro de 2005, registou-se todos os dias, pelas 14 horas, a
temperatura da sala de aula.
a) Escreva um algoritmo que calcule o valor mdio dessas temperaturas.
b) Escreva um algoritmo que calcule o desvio padro dessas temperaturas.
c) Escreva um programa em VBA que calcule o valor mdio e o desvio padro
dessas temperaturas.

4. Um aluno da FEUP j terminou N disciplinas com notas entre 10 e 20.
a) Escreva um algoritmo que calcule a mdia das N notas e se a mdia for inferior a
13.5 escreve Suficiente, se for entre 13.5 e inferior e 17.5 escreve Bom e se for
superior ou igual a 17.5 escreve Muito Bom.
b) Escreva um programa em VBA que calcule a mdia das N notas e se a mdia for
inferior a 13.5 escreve Suficiente, se for entre 13.5 e inferior e 17.5 escreve Bom
e se for superior ou igual a 17.5 escreve Muito Bom.

5. Registou-se, durante N dias, pelas 14 horas, a temperatura do bar da biblioteca.
a) Escreva um algoritmo que calcule o mximo dessas temperaturas.
b) Escreva um algoritmo que calcule o mnimo dessas temperaturas.
c) Escreva um algoritmo que calcule o nmero de dias em que essa
temperatura ultrapassou os 20 graus.
d) Escreva um programa em VBA que calcule o mximo e o mnimo dessas
temperaturas e que calcule o nmero de dias em que essa temperatura
ultrapassou os 20 graus .

6. a) Escreva um algoritmo que calcule a soma dos quadrados dos nmeros inteiros
entre 3000 e 7800, inclusiv.
b) Escreva um programa em VBA que calcule a soma dos quadrados dos
nmeros inteiros entre 3000 e 7800, inclusiv.

7. a) Escreva um algoritmo que calcule o factorial de um nmero inteiro positivo.
b) Escreva um programa em VBA que calcule o factorial de um nmero inteiro
positivo.

8. a) Escreva um algoritmo que determine se um nmero inteiro dado par ou
mpar.
b) Escreva um programa em VBA que determine se um nmero inteiro dado
par ou mpar.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 19 -
9. Considere a funo rnd( ) do VBA que gera valores aleatrios entre 0 e 1:
0 rnd( ) < 1.
O valor N = Int (1 + 50 rnd( )) retorna valores aleatrios inteiros entre 1 e 50.
a) Escreva um algoritmo que gere nmeros aleatrios inteiros entre 1 e 50 at que
aparea um nmero aleatrio mltiplo de 3.
b) Escreva um programa em VBA que gere nmeros aleatrios inteiros entre 1 e 50
at que aparea um nmero aleatrio mltiplo de 3.

10. Considere a funo rnd( ) do VBA que gera valores aleatrios entre 0 e 1:
0 rnd( ) < 1. Usando esta funo simule um jogo em que ganha o jogador A se o
resultado da rnd() for superior a 0.6. Caso contrrio ganha o jogador B.

11. Considere a funo rnd( ) do VBA que gera valores aleatrios entre 0 e 1:
0 rnd( ) < 1. Usando esta funo simule o seguinte jogo de dados equilibrados.
Lanam-se 2 dados. Se a soma de pontos for superior a 6 ganha o jogador A. Caso
contrrio ganha o jogador B.

12. Considere a funo rnd( ) do VBA que gera valores aleatrios entre 0 e 1:
0 rnd( ) < 1. Usando esta funo simule o seguinte jogo com um dado viciado,
em que as probabilidades de sada de cada face so as seguinte: P(face 1)= P(face 2)=
P(face 3)= P(face 4)= 2P(face 5)= 2P(face 6). Lana-se o dado uma vez. Se sair o
nmero 5 ou 6 ento ganha o jogador A, seno ganha o jogador B.

13. Registou-se durante todos os dias do ano 2001 e pelas 14 horas, o nmero de
automveis que entravam no parque da FEUP.
a) Escreva um algoritmo que calcule o mximo e o mnimo desses valores e os
respectivos dias.
b) Escreva um programa em VBA que calcule o mximo e o mnimo desses valores
e os respectivos dias.
Exemplo: Em 2001, o nmero mximo de automveis foi de 500 no dia 21 de Maro e
o nmero mnimo foi de 72 no dia 5 de Agosto.

14. Dado um nmero inteiro positivo:
a) Escreva um algoritmo que determine se o nmero dado primo ou no.
b) Escreva um programa em VBA que determine se o nmero dado primo
ou no.

15. Define-se nmero de Armstrong como sendo aquele cuja soma dos cubos dos
algarismos que o compom igual ao prprio nmero. Ex: 153= 1
3
+5
3
+3
3
.
a) Escreva uma funo booleana capaz de determinar se um nmero natural dado ou
no um nmero de Armstrong.
b) Escreva um programa que procure os primeiros 5 nmeros de Armstrong.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 20 -
2.11 Exerccios Resolvidos:
A. Escreva um algoritmo que calcule as razes reais de uma equao real de 2
grau.

Sugesto de resposta para o algoritmo pedido:

Cabealho:
Objectivo: Calcular as razes reais de uma equao real de 2 grau
V.Dados: a, real, coeficiente de x
2
;
b, real, coeficiente de x;
c, real, termo independente;
V. Resultado: x1, real, primeira raz a calcular;
x2, real, segunda raz a calcular;
V. Aux: D, real, discriminante;
Corpo:
Leia ( a ); Leia ( b ); Leia ( c );
Db
2
- 4
*
a
*
c;
Se D<0 ento
Escreva(No tem razes reais);
Seno
1 /2 ;
2 /2 ;
Escreva(x1 , x2);

B. Considere o seguinte algoritmo de Euclides que permite calcular o mximo
divisor comum de dois nmeros naturais, mdc(a,b), definido como maior
nmero inteiro que divide simultaneamente a e b:

Cabealho:
Objectivo:
V.Dados:
V. Resultado:
V. Aux:
Corpo:
Leia (a, b); r a mod b;
Enquanto r 0 faa
a b;
b r;
r a mod b;
Escreva ( b );

a) Percorra o algoritmo de Euclides para calcular o mximo divisor comum
de 76 e 68, i.e., mdc( 76, 68).
Quantas vezes executou o ciclo do enquanto ? Qual o mdc( 76, 68) obtido?

RESPOSTA:
a b r r0
76 68 8 Verdadeiro
68 8 4 Verdadeiro
8 4 0 Falso

RESPOSTA: Percorreu o ciclo do enquanto 2 vezes e mdc( 76, 68) = 4 .
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 21 -

b) Preencha o cabealho deste algoritmo.
Resposta possvel:
Cabealho:
Objectivo: Calcular o mximo divisor comum de dois nmeros naturais;
V.Dados: a, inteiro, 1 nmero natural a introduzir;
b, inteiro, 2 nmero natural a introduzir;
V. Resultado: b, inteiro, mximo divisor comum entre a e b;
V. Aux: r, inteiro, resto da disio inteira entre a e b;

C. Considere o seguinte algoritmo:
Cabealho:
Objectivo:
V.Dados:
V. Resultado:
V. Aux:
Corpo:
Leia ( n ); F 1;
Enquanto n 1 faa
F F
*
n;
n n-1;
Escreva ( F );

a) Percorra o algoritmo para n inicial igual a 5, qual o valor final de F a ser escrito?
E qual o valor final da varivel n?

Percorrer o Algoritmo:

n F n1
5
4
3
2
1
0
1
1*5
1*5*4
1*5*4*3
1*5*4*3*2
1*5*4*3*2*1
Verd
Verd
Verd
Verd
Verd
Falso

O valor final de F a ser escrito 1*5*4*3*2*1=5!=120

O valor final da varivel n 0.

b) Preencha o cabealho deste algoritmo.

Resposta possvel
Cabealho:
Objectivo: Calcular o factorial de um nmero dado n
V.Dados: n, inteiro, n a introduzir
V. Resultado: F, inteiro, factorial de n
V. Aux:


D. Escreva um algoritmo que ordene por ordem crescente trs valores dados: A, B e C.
Por exemplo, se A toma o valor 23, B o valor 50 e C for -3, a resposta : -3 23 50.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 22 -
Resposta possvel:
Cabealho:
Objectivo: Ordenar por ordem crescente
trs valores dados: A, B e C;
V. Dados:
A, real, 1 nmero a introduzir;
B, real, 2 nmero a introduzir;
C, real, 3 nmero a introduzir;
V. Resultado:
V. Aux: aux, real, auxiliar para troca.
Corpo:
Leia (A, B, C);
MaxA;
Se b < a ento aux b; b a; a aux;

Se c < a ento aux c; c a; a aux;

Se c < b ento aux c; c b; b aux;

Escreva (a , " <= " , b , " <= " , c);


E. Registou-se durante todos os dias do ano 2009 e pelas 14 horas, o nmero de
automveis que se encontravam no parque da FEUP. Escreva um algoritmo que calcule
o mximo e o mnimo desses valores e os respectivos dias.

Resposta:

Cabealho
Objectivo: calcular o mximo e o mnimo do nmero de automveis que se
encontravam no parque da FEUP em cada dia do ano 2009 e pelas 14 horas e os
respectivos dias.

V. Dados: X, inteiro, n de automveis que se encontravam na FEUP em cada dia do
ano 2009 e pelas 14 horas;
V. Resultado: X_max, inteiro, n mximo registado;
X_min, inteiro, n mnimo registado;
D_max, inteiro, dia em que se registou o n mximo;
D_min, inteiro, dia em que se registou o n mnimo;
V. Aux.: i, inteiro, contador de ciclo;
Corpo
{
{
leia (X);
X_max X;
X_min X;
D_max 1;
D_min 1;
para i 2 at 365 faa
leia (X);
se X > X_max ento X_max X; D_max i;
se X < X_min ento X_min X; D_min i;
Escreva (X_max, D_max, X_min, D_min);



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 23 -
3. Excel e programao VBA

Um computador pode ajudar-nos a resolver problemas, especialmente aqueles que
requerem um grande nmero de clculos repetitivos. O Excel um software muito
utilizado para a resoluo de problemas numricos em engenharia. Tem como
facilidades a criao de comandos Macro que iro dar ordens ao Excel para executar as
tarefas repetidas e a possibilidade de escrita de cdigo de programao para resolver
problemas especficos.
O VBA a linguagem de programao associada ao Excel. Numa linguagem de
programao clssica, os dados esto num ficheiro, geralmente com uma formatao
rigorosa, ou ento pedem-se dados especficos ao utilizador. O Excel tem j a interface
com o utilizador e o cdigo apenas se preocupa com o processamento de dados. O Excel
tem muitas funcionalidades e pode tornar-se mais genrico sempre que as inexistentes
forem programadas.
Exemplo de gravao de uma Macro:



e no esquecer




Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 24 -
Esta Macro1( ) pode ser gravada e executada sempre que necessrio. Por exemplo,
podemos comear uma folha nova e mandar executar esta Macro nessa folha, fazendo
simplesmente



Macros ajudam-nos a cumprir objectivos que tm que ser repetidos mas no permitem
resolver problemas numricos que envolvem clculos iterativos. Para isso necessrio
escrever um cdigo VBA adaptado resoluo do nosso problema.
Para programar, podemos iniciar um cdigo no Excel criando uma macro e em seguida
editar o cdigo da macro. Alternativamente podemos escrever o cdigo comeando por
desenhar um boto de comando tal como veremos mais adiante.

O HELP do Excel uma enorme fonte de informaes. Por exemplo, podemos a
encontrar as definies das funes intrnsecas do Excel e tambm aprender como
escrever as nossas funes, funes VBA.

3.1 Dialog / UserForm

Pode-se criar dialogs, e inserir graficamente elementos. No VBA, aps inserir um
"UserForm" (dialog) fica visvel uma Toolbox com os diversos tipos de objectos que se
podem inserir, por exemplo:
Label / Frame para colocar um texto
TextBox - uma caixa de texto em que o utilizador pode inserir um valor
ListBox / ComboBox - uma lista de opes em que o utilizador pode selecionar uma
delas
CommandButton / OptionButton / CheckBox - vrios tipos de botes, na qual o
utilizador pode carregar de forma a executar um conjunto de instrues.

Ao inserir uma UserForm, e objectos dentro dela, passa a ser objecto do Excel e permite
associar um cdigo. Uma propriedade comum a diferentes objectos o "Value" tal
como nas clulas.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 25 -
3.2 Eventos
Cada tipo de objecto tem eventos que podem ser intersectados, sendo criado um
procedimento que ser chamado quando o evento ocorrer no objecto. Por exemplo, nos
botes tem interesse intersectar o evento "Click".
Na UserForm tem interesse intersectar o evento "Activate" para efectuar inicializaes,
e nas listas pode ter interesse intersectar o evento "Change" para efectuar alguma
actualizao aps o elemento da lista ter sido alterado.

3.3 Procedimentos tipo Sub
Quando queremos escrever o nosso cdigo de programao necessrio guard-lo num
local associado nossa folha de trabalho. Os dados do programa podem estar na folha
Excel ou ento ser introduzidos pelo utilizador e depois a escrita dos resultados feita na
folha de trabalho. Podemos colocar o cdigo de programao num procedimento
associado ao VBAProject e que acedido atravs do editor VBA. O procedimento pode
ser executado quer usando a caixa de dilogo das Macros, quer criando uma short-cut
atravs da caixa de dilogo das Macros, quer ainda criando um boto de comando e
depois associando-o ao procedimento especfico.
Um procedimento a que chamamos do tipo Sub um conjunto de instrues colocadas
entre Sub e End Sub que executa aces mas que no retorna um valor especfico.
Como veremos adiante uma funo um conjunto de instrues colocadas entre
Function e End Function que retorna um valor especfico executa uma srie de
instrues.
Exemplo de desenvolvimento de um procedimento:



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 26 -








e para executar esta instruo basta clicar no boto:






Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 27 -
Exemplos de instrues so:

A=A+10

B=2

Exemplo de declaraes de variveis:

Dim A, B As Integer

Se para escrever uma instruo necessrio utilizar mais do que uma linha o VBA
permite fazer a mudana de linha usando o under scroll ( _ ).
Exemplo:

Resultado= 1+3*Math.sin(2)+_
5*Math.cos(3)

Mas cuidado, o under scroll no pode ser utilizado, por exemplo, com instrues do
tipo MsgBox. Nesse caso ser necessrio considerar vrias MsgBox.

Comentrios: Por vezes escrevemos centenas ou milhares de linhas de cdigo sendo
necessrio comentar para mais tarde nos lembrarmos o que um determinado conjunto de
instrues faz.
Exemplo:



Ateno ao modo como se guardam os ficheiros com cdigo VBA associado:


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 28 -
ou


3.4 Procedimentos tipo Funes
O cdigo est agrupado em funes e procedimentos, que so chamados de outra funo
ou quando um determinado evento ocorre.
Uma funo um processo que permite converter um conjunto de dados de entrada num
resultado de sada atravs de instrues/comandos bem definidos. Um procedimento do
tipo funo um conjunto de instrues colocadas entre as instrues iniciadas por
Function e End Function. Uma Function semelhante a uma Sub mas a funo pode
ainda retornar um valor. Por exemplo a funo seguinte converte valores da temperatura
em graus Celsius em valores de temperatura Kelvin.


Function CelsiusToKelvin (GrausCelsius As Double) As Double
Dim ZeroAbsoluto As Double
ZeroAbsoluto = 273.15
CelsiusToKelvin = GrausCelsius + ZeroAbsoluto
End Function

Uma das vantagens da utilizao de funes a possibilidade de extrair instrues
repetidas de cdigo, substitu-las por uma nica linha de comando e assim estruturando
o programa. Um programa bem estruturado mais fcil de compreender, manter, alterar
e encontrar erros.
O utilizador pode criar funes e procedimentos que apenas ele utiliza, para desta forma
melhor organizar o cdigo e evitar repetio de comandos.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 29 -

Function <nome> ( <args> ) As <tipo>
<comandos>
<nome>=<valor>
End Function

Os <args> uma lista de <var> As <tipo> e o tipo o tipo de valor de retorno da
funo.
No comando <nome>=<valor> definido o valor a retornar pela funo.


3.5 Objectos

Os objectos mais relevantes que permitem editar um documento do Excel so:
Sheets("nome") - objecto de acesso a qualquer folha
Cells(linha,coluna) - objecto de acesso a qualquer clula na folha actual
Range("conjunto") - objecto de acesso a um conjunto de clulas
Selection - objecto de acesso ao conjunto de clulas selecionado
ActiveCell - objecto de acesso clula activa
Todos estes objectos tm propriedades e mtodos, sendo ambos acedidos por um ponto
a seguir ao nome do objecto, aps o qual o Excel mostra todas as propriedades e
mtodos aplicveis nesse objecto. Para realar o mais importante, nas clulas existe a
propriedade "Value" que tem o valor numrico da clula, e o mtodo "Activate" para
passar a ser a clula activa, e nos conjuntos existe o "Select" para passar a ser o
conjunto seleccionado.

Exemplo: Suponhamos que queremos preencher a coluna 6, linhas 1 a 20 com valores
aleatrios entre 5 e 6. Ento o cdigo a considerar seria simplesmente:

Dim i As Integer
For i = 1 To 20
Cells(i, 5).Value = Rnd( ) + 5
Next i




Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 30 -
3.6 Declarao de Variveis
essencial numa linguagem ter entidades que se podem alterar. Podem-se declarar
variveis internas para uso apenas no cdigo ou utilizar um valor de uma clula como
varivel. A declarao de uma varivel em programao VBA :
Dim <varivel> As <tipo>

Os tipos mais utilizados so Integer, Double, String, e Boolean, para representar
respectivamente um inteiro, um nmero real, um texto e um valor booleano.
Integer so as variveis do tipo inteiro guardadas em 2 bytes e variam entre -32 768 e
32 767.
Double (reais de dupla preciso) so as variveis guardadas como nmeros em vrgula
flutuante de 64-bit (8-bytes) e variam
desde -1.79769313486231E308 at -4.94065645841247E-324 para valores negativos e
desde 4.94065645841247E-324 at 1.79769313486232E308 para valores positivos.
As variveis do tipo Booleano so guardadas como nmeros de 2 bytes e tomam apenas
2 valores: Verdadeiro ou Falso.
Se o tipo de varivel no for especificado ento o VBA considera o tipo Variant
(nmeros de 16-bytes). Este tipo de variveis ocupa muito espao e deve ser evitado.
Muitos programas VBA que resolvem problemas numricos utilizam milhares de
variveis usando ciblos que so repetidos milhares de vezes. A n declarao de
variveis iria tornar o programa extremamente pesado.

Aconselha-se a utilizao da instruo Option Explicit no incio de cada
programa/cdigo o que obriga o programador a declarar todas as variveis.


A declarao de variveis pode ser feita:
- dentro de um procedimento e ento a varivel utilizada apenas ao nvel do
procedimento ou
- no mdulo e fora do procedimento e ento a varivel passa a ser utilizada ao nvel do
mdulo e por qualquer dos procedimentos. (No fica disponvel para outro mdulo.)



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 31 -
Exemplo:
Option Explicit
Sub mensagem_minha( )
Dim mensagem As String
mensagem = "Vamos ver este exemplo"
MsgBox mensagem
End Sub
Sub mensagem_tua( )
Dim mensagem As String
mensagem = "Qual exemplo?"
MsgBox mensagem
End Sub
Option Explicit
Dim mensagem As String

Sub mensagem_minha( )
mensagem = "Vamos ver este exemplo"
MsgBox mensagem
End Sub
Sub mensagem_tua( )
mensagem = "Qual exemplo?"
MsgBox mensagem
End Sub

No entanto necessrio ter cuidado uma vez que variveis declaradas a nvel de mdulo
podem ser modificadas erradamente.

Exemplo:
Dim x, y As Integer

Sub codigo( )
x = 10
y = minha_funcao( )
End Sub

Function minha_funcao( ) As Integer
minha_funcao=200 * x
x = 40
End Function

Qual o valor de x e de y aps a execuo do procedimento/cdigo?




Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 32 -
3.7 Operadores




Exemplo:




3.8 Funes de manipulao de texto

Len (string) retorna o nmero de caracteres da string.
InStr([start,]string1,string2[,compare]) retorna a posio da primeira ocorrncia de um
texto dentro de outro.
Ltrim(string), Rtrim(string) e Trim(string) retorna o texto sem deixar espaos
esquerda, direita ou ambos.
Right(string, length) retorna o texto com o nmero especfico de caracteres contados a
partir da direita.
Left(string,N) retorna os primeiros N caracteres da string
Mid(string,start[,length]) retorna o texto contendo um nmero especfico de caracteres
de um texto.
Asc(string) retorna um inteiro representando o cdigo do caracter correspondendo
primeira letra de um texto.
Chr(charcode) retorna um texto contendo o caracter associado ao cdigo especfico.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 33 -
A funo Str(<Integer>) permite converter um inteiro num texto.

Exemplo de codificao de uma mensagem:

Dim texto, mensagem As String
Dim i, n As Integer
texto = "Ests bem?"
mensagem = ""
For i = 1 To Len(texto)
n = Asc(Mid(texto, i, 1))
mensagem = mensagem + Chr(n + 20)
Next
Cells(2, 3) = mensagem
As atribuies de valores a variveis podem ser feitas por valor atravs do comando:
Let x=3 em que x fica com o valor 3 ou
y=" LI " em que y fica com o valor LI
Existe ainda uma atribuio por referncia, destinada a objectos:

Dim r As Range
Set r =Range("A1:C3")

a partir deste comando, utilizar r ou Range("A1:C3") a mesma coisa.

3.9 Instrues Condicionais
Uma instruo condicional em que o primeiro conjunto de instrues s executado no
caso da condio ser verdadeira, , por exemplo:

If <condio> Then
<bloco de instrues>
Else
<bloco de instrues>
End If


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 34 -
3.10 Ciclos
Um ciclo permite executar um bloco de instrues, um determinado nmero de vezes.
Os ciclos podem ser implementados de diversas maneiras, a primeira dependente de
uma condio que enquanto for verdadeira o bloco de instrues executado:

While <condio>
< um bloco de instrues >
Wend

Evidentemente que a condio deve depender de alguma varivel alterada pelos
comandos, caso contrrio existiria um ciclo infinito.

A segunda forma utiliza um contador para parar o ciclo:

For <contador>=<comeo> To <fim>
< um bloco de instrues >
Next <contador>

A terceira forma serve para ser utilizada em conjuntos:

For Each <elemento> In <conjunto>
< um bloco de instrues >
Next <elemento>

Por exemplo se o conjunto fosse o "Select", o ciclo seria executado tantas vezes quantas
as clulas que estiverem selecionadas:

Dim y As String
y = InputBox("Comentrio")
For Each x In Selection
y = y + y
If Len(x.Value) < 20 Then
x.Value = y
End If
Next x

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 35 -

3.11 Exemplo de utilizao de procedimentos

Como exemplo de utilizao de procedimentos vamos considerar o problema das Torres
de Hanoi.
As Torres de Hanoi so um quebra-cabeas muito antigo e conhecido. Considera-se de
um conjunto de N discos de tamanhos diferentes e trs pinos verticais, nos quais os
discos podem ser encaixados. Cada pino pode conter uma pilha com qualquer nmero
de discos, desde que cada disco no seja colocado acima de outro disco de menor
tamanho. Na configuraco inicial todos os discos esto no pino A.


O objectivo mover todos os discos para um dos outros pinos, sempre obedecendo
restrio de no colocar um disco sobre outro menor.

Na configuraco final todos os discos esto no pino C.




Um algoritmo para resolver este problema o seguinte:


procedimento Hanoi(N, Orig, Dest, Temp)
se N = 1 ento
mover o menor disco do pino Orig para o pino Dest;
seno
Hanoi(N-1, Orig, Temp, Dest);
mover o N-simo menor disco do pino Orig para o pino Dest;
Hanoi(N-1, Temp, Dest, Orig);
fim-se
fim

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 36 -
Criou-se uma macro em que se a clula activa tiver um valor numrico, esta chama um
procedimento TorresHanoi que recursivamente vai resolver o problema.
Sub Macro2( )

If IsNumeric(ActiveCell.Value) Then
torres_hanoi ActiveCell.Value, "A", "B", "C"
End If

End Sub

Sub torres_hanoi(N, origem, temp, destino)

If N = 1 Then
ActiveCell.Range("A2").Activate
ActiveCell.Value = origem + " para " + destino

Else
torres_hanoi N - 1, origem, destino, temp
ActiveCell.Range("A2").Activate
ActiveCell.Value = origem + " para " + destino
torres_hanoi N - 1, temp, origem, destino
End If

End Sub


Primeiro, caso apenas se queira mover um s disco, a sub move-o sem utilizar o local
auxiliar, caso contrrio, move todos os discos mais pequenos para o local auxiliar
chamando a funo recursivamente, de seguida move o disco maior para o destino, e
finalmente chama novamente a funo recursivamente para mover os discos mais
pequenos do local auxiliar para o destino.

O resultado de executar esta sub com a clula com o 3 seleccionada, so as ordens de
movimento descritas nas clulas abaixo:

3
A para C
A para B
C para B
A para C
B para A
B para C
A para C


Na configuraco final todos os discos esto no pino C.



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 37 -
3.12 Exerccios propostos:

1. Gesto de Custos Pretende-se com este trabalho que seja desenvolvida uma
aplicao, que permita a gesto de custos correntes de um aluno do MIEA.
Os registos de custos (ou receitas), devem ter associados um valor, uma data, uma
categoria e um projecto. Devem poder ser inseridos atravs de uma dialog, assim como
devem poder ser adicionadas mais categorias e projectos.
Como relatrios, dever-se- apresentar um relatrio por Categoria, por Projecto, para
um dado ms ou ano, e os saldos dos Projectos em cada ms ao longo de um ano.
Tambm poder ser gerado um grfico da evoluo dos projectos,...
Exemplo de aplicao:



2. Vencimentos. Considere a folha de clculo Funcionrios referente aos funcionrios
de uma empresa contendo uma tabela com as seguintes informaes de cada
funcionrio:
Cdigo (string);
Nome;
Categoria (A, B ou C);
Vencimento;
Nmero de horas extras;
Valor de uma hora extra (1% do vencimento);
Total a receber.



Os vencimentos das categorias A, B e C so, respectivamente, de 1000, 1500 e
2000.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 38 -
O nmero de horas extras nunca pode ser superior a 20. Faa uma macro que permita
inserir ou actualizar registos de empregados, sendo dado o cdigo de cada empregado.
Nos locais referentes aos vencimentos, aos valores das horas extras e aos totais a
receber, devem ser inseridas frmulas em vez de valores.

3. Mtodos iterativos para clculo de razes de equaes no lineares
Pretende-se determinar a raz de equaes da forma f ( x ) = 0, onde f uma funo
contnua numa vizinhana da raiz. Um mtodo iterativo, consiste de um modo geral,
numa aproximao inicial x
0
, e num processo de obter sucessivamente novas iteradas
x
n+1
a partir das anteriores x
n
, ... Desta forma, pretende-se obter uma sucesso que
convirja para z, soluo da equao f(x)=0, tambm designada por raiz da equao, ou
zero da funo f.
MTODO da BISSECO. Sabendo que no intervalo [a, b] a equao f(x) = 0 tem
apenas uma e uma s raiz , podem-se construir intervalos [ a
n
, b
n
] com metade do
comprimento dos anteriores, onde se assegura a existncia da raiz.
O mtodo pode-se esquematizar:
Intervalo Inicial : [ a
0
, b
0
] = [ a, b ]
Repetir:

1) x
n+1
= ( a
n
+ b
n
) / 2
2) Se f (x
n+1
) f(a
n
) < 0
Ento a
n+1
= a
n
; b
n+1
= x
n+1

Seno a
n+1
= x
n+1
; b
n+1
= b
n

At que :
f(x
n+1
) = 0 ou |x
n+1
-x
n
| <
O critrio de paragem utilizado |x
n+1
-x
n
| < onde o valor >0 um valor
suficientemente pequeno, o erro absoluto verifica | e
n+1
| < |a
n
- b
n
| = |x
n+1
- x
n
| < .
Pode-se determinar facilmente um majorante do erro para uma iterada x
n
a partir do
comprimento do intervalo inicial:
| e
n
| < |a
n-1
- b
n-1
| = (1 / 2)
n
| a
0
- b
0
|

a) Escrever uma macro em VB tal que dada uma equao f ( x ) = 0 e um intervalo
inicial [a, b] que contenha uma raiz dessa equao calcule a raiz e o erro
absoluto associado.
b) Desenhar no EXCEL a funo f ( x ) para encontrar intervalos que contenham
uma nica raiz e utilize a function desenvolvida para encontrar as razes da
equao.
Considere as equaes x
4
- 4 x
3
- x + 5 = 0 e 2 e
x
- x sin(x+3) = 0 e outras.

4. Clculo numrico do valor de um integral -- Regra dos Trapzios Composta

Trata-se de fazer uma aproximao da funo integranda, usando uma spline linear.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 39 -
Para simplificar, consideremos que o tamanho desses sub-intervalos constante = h.
Define-se h = ( b - a ) / N, onde N o nmero de sub-intervalos ( = nmero de ns - 1),
e temos: x
i
= a + i h.
O valor do integral igual soma dos integrais nos sub-intervalos

Aplicando a regra dos trapzios simples a cada um desses sub-intervalos,

e reparando que h termos que aparecem repetidos na soma, pode simplificar-se a
expresso obtendo-se a Regra dos Trapzios Composta:

Neste caso, a frmula do erro da regra dos trapzios composta dada por



Calcule uma aproximao para os integrais descritos abaixo e os respectivos erros
usando programao estruturada VB:

a)
1
2
0
( 0.746825)
x
e dx



b)
1
0
1
( 0.5945)
0.1
sen dx
x
| |

|
+
\



5. Jogo do Ganso Um jogo simples consiste num tabuleiro contendo um percurso de
quadrados e um conjunto de peas coloridas. No incio do jogo cada jogador recebe uma
pea; todas as peas so inicialmente posicionadas imediatamente antes do primeiro
quadrado do percurso. Em cada jogada, os jogadores jogam um par de dados, e movem
as suas peas para a frente o nmero de quadrados correspondente soma dos pontos
obtidos nos dados. A ordem em que os jogadores jogam os dados sempre a mesma
(jogador A, depois jogador B, etc.).
A maioria dos quadrados no tabuleiro so 'normais', mas alguns so 'armadilhas'.
Considere, por exemplo, o tabuleiro da figura cujos quadrados so numerados de 1 a 48.
H exactamente trs armadilhas neste tabuleiro.
Laboratrios de Informtica MIEA 2009/10
Se a pea de um jogador cai numa armadilha no final do movimento de um jogador, o
jogador perde a vez de jogar na jogada segui
sua pea fica nessa jogada sem avanar.
alcana o final do percurso aps o ltimo quadrado.
no jogo.
Dado o nmero de jogadores, o nmero
armadilhas escrever um programa que determine o vencedor do jogo.

6. Jogo do 4 em Linha Pretende
do jogo do 4 em Linha entre dois jogadores humanos, no sendo pretendido que se
implemente o jogador artificial.
O jogo do 4 em linha joga
jogam de forma alternada, cores diferentes, numa coluna que tenha ca
preenchendo a casa vazia mais baixa. O objectivo do jogo fazer 4 em linha
(horizontal, vertical ou diagonal).
Dever ser feito o teste de fim de jogo, e corrigir as jogadas que so feitas em casas
invlidas para a casa correcta da
as quatro casas em linha. Devem tambm ser contabilizados os jogos ganhos e
empatados por ambas as cores.

7. Jogo do galo
Este jogo muito conhecido e dispensa apresentaes. Os jogadores jogam de for
alternada usando smbolos diferentes. Dever ser feito o teste de fim de jogo, e anular as
jogadas que so feitas em casas invlidas. Devem tambm ser contabilizados os jogos
ganhos e empatados por cada jogador.
8. Outros jogos: Dados, mastermind...
9. Jogo das cores: Seleccionam
jogador recebe 10 euros, caso contrrio perde 5 euros.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 40 -
Se a pea de um jogador cai numa armadilha no final do movimento de um jogador, o
jogador perde a vez de jogar na jogada seguinte. Ou seja, ele/ela no joga os dados e a
sua pea fica nessa jogada sem avanar. O vencedor do jogo o jogador cuja pea
alcana o final do percurso aps o ltimo quadrado. Note-se ainda que no h empates
Dado o nmero de jogadores, o nmero de quadrados no percurso
armadilhas escrever um programa que determine o vencedor do jogo.
Pretende-se com este trabalho que seja desenvolvida a interface
4 em Linha entre dois jogadores humanos, no sendo pretendido que se
implemente o jogador artificial.
O jogo do 4 em linha joga-se numa matriz de 7 x 7, inicialmente vazia. Os jogadores
jogam de forma alternada, cores diferentes, numa coluna que tenha ca
preenchendo a casa vazia mais baixa. O objectivo do jogo fazer 4 em linha
(horizontal, vertical ou diagonal).

Dever ser feito o teste de fim de jogo, e corrigir as jogadas que so feitas em casas
invlidas para a casa correcta da mesma coluna. No caso de vitria, devem ser marcadas
as quatro casas em linha. Devem tambm ser contabilizados os jogos ganhos e
empatados por ambas as cores.
Este jogo muito conhecido e dispensa apresentaes. Os jogadores jogam de for
alternada usando smbolos diferentes. Dever ser feito o teste de fim de jogo, e anular as
jogadas que so feitas em casas invlidas. Devem tambm ser contabilizados os jogos
ganhos e empatados por cada jogador.


ados, mastermind...
Seleccionam-se 3 cores aleatoriamente. Se as 3 cores forem iguais o
jogador recebe 10 euros, caso contrrio perde 5 euros.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro

Se a pea de um jogador cai numa armadilha no final do movimento de um jogador, o
nte. Ou seja, ele/ela no joga os dados e a
O vencedor do jogo o jogador cuja pea
se ainda que no h empates
e a posio das
se com este trabalho que seja desenvolvida a interface
4 em Linha entre dois jogadores humanos, no sendo pretendido que se
se numa matriz de 7 x 7, inicialmente vazia. Os jogadores
jogam de forma alternada, cores diferentes, numa coluna que tenha casas vazias,
preenchendo a casa vazia mais baixa. O objectivo do jogo fazer 4 em linha

Dever ser feito o teste de fim de jogo, e corrigir as jogadas que so feitas em casas
mesma coluna. No caso de vitria, devem ser marcadas
as quatro casas em linha. Devem tambm ser contabilizados os jogos ganhos e
Este jogo muito conhecido e dispensa apresentaes. Os jogadores jogam de forma
alternada usando smbolos diferentes. Dever ser feito o teste de fim de jogo, e anular as
jogadas que so feitas em casas invlidas. Devem tambm ser contabilizados os jogos
se 3 cores aleatoriamente. Se as 3 cores forem iguais o
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 41 -
3.13 Exerccios resolvidos:

A. Escreva em VB um procedimento do tipo function para calcular
( )
( )
3
2
3
( , , ) 3
2 3 4 1
x
f x y z z
y
+
= +
+

Resposta:

Function f_xyz ( x as Double, y as Double, z as Double ) as Double
f_xyz = (x+y)/(2*3*4*(y^2+1)+(3*z)^(1/3)
End Function


B. Escreveu-se em VB o seguinte procedimento do tipo function

( )
Function jogo ( N as Integer, K as Integer ) as String
Dim i, soma as Integer
soma = 0
For i = 1 to N
soma = soma + Int (RND( )*6+1)
Next i
if soma / N K Then
jogo = " ganha"
Else
j

ogo = "perde"
End if
End Function



a) Considere agora este procedimento que chama a funo acima descrita:
Private Sub CommandButton3_Click( )
Dim X, Y As String
X = jogo (1000, 8)
Y = jogo (1000, 1)
MsgBox(X & Y)
End Sub



Qual seria o valor das variveis X e Y?

Resposta: X seria perde e Y seria ganha.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 42 -
b) E neste outro procedimento qual seria o resultado das variveis X e Y?

Private Sub CommandButton2_Click( )
Dim X, Y As String
X = jogo (3, 2)
Y = jogo (1, 5)
MsgBox(X & Y)
End Sub

Resposta: A Function jogo simula o lanamento de N dados no viciados, calcula a
mdia dos valores obtidos e se essa mdia for maior ou igual a K o valor da function
ganha caso contrrio perde. Nesta alnea b) e para determinar o valor de X, o dado
lanado 3 vezes, se a mdia dos resultados dos 3 lanamentos for maior ou igual a 2 o
valor de X ser ganha caso contrrio o valor de X ser perde. Para determinar o
valor de Y, o dado lanado uma nica vez vezes, se o resultado do lanamento for 5
ou 6 o valor de Y ser ganha e se i resultado do lanamento for 1, 2, 3 ou 4 o valor de
Y ser perde.

C. Qual o objectivo deste procedimento VB?

Private Sub CommandButton1_Click( )
Dim Resultado, soma As Double
Dim N, i, nota As Integer
Dim classificao As String
N = Val(InputBox("Nmero de disciplinas concludas"))
soma = 0
For i = 1 To N
nota = Val(InputBox("Introduza a nota de uma disciplina concluda"))
soma = soma + nota
Next
Resultado= soma / N
Select Case Resultado
Case 10 To 13
classificao = "Suficiente"
Case 14 To 17
classificao = "Bom"
Case 18 To 20
classificao = "Muito Bom"
End Select
MsgBox (classificao)
End Sub


Resposta: O objectivo deste procedimento : Atribuir uma classificao de Suficiente,
Bom ou Muito Bom caso a mdia das notas das disciplinas concludas fosse
respectivamente entre 10 e 13, entre 14 e 17 ou entre 18 e 20.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 43 -
D. Considere a sucesso de Fibonacci:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

definida de forma recursiva do modo seguinte:

0,

, 2

Escreva uma Function em Vb, Function Fibonacci (n as integer) as integer, com
parmetro de entrada n e que calcula u
n
, o termo de ordem n da sucesso de Fibonacci.

Respostas possveis:
Function Fibonacci (n As Integer) As
Integer
Dim u_0, u_1 As Double
Dim i As Integer
u_0 = 0
u_1 = 1
i = 1
Fibonacci = 1
While i < n
Fibonacci = u_0 + u_1
i = i + 1
u_0 = u_1
u_1 = Fibonacci
Wend
End Function
Function Fibonacci (n As Integer) As Integer
Select Case n
Case 0
Fibonacci = 0
Case 1
Fibonacci = 1
Case Is > 1
Fibonacci = Fibonacci (n - 1) + Fibonacci (n - 2)
End Select
End Function



E. Escreveu-se em VB o seguinte procedimento do tipo function para verificar se
um nmero natural primo.

Function verifica(N) As Boolean
Dim d As Integer
verifica = True
While d < N / 2 And verifica = True
d = d + 1
Wend
End Function

a) Esta function est incompleta. Altere ou acrescente instrues a esta function de
modo que esta verifique se um nmero natural N ou no primo.



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 44 -

Resposta Possvel:

Function verifica(n) As Boolean
Dim d As Integer
verifica = True
d = 1 'inicializa d
While d < n / 2 And verifica = True
d = d + 1
If n Mod d = 0 Then verifica = False ' verifica se n tem divisores
Wend
End Function

b) Escreveu-se um procedimento do tipo Sub, Sub primos( ), para determinar os
primeiros K primos, i.e., 2, 3, 5, 7, 11, 13,... chamando a function verifica. Este
procedimento est incorrecto. Altere este procedimento garantido que o seu
objectivo determinar os primeiros K primos recorrendo function verifica.
Sub primos( )
Dim K, X, i As Integer
K = Val(InputBox("Quantos primos quer determinar?"))
i = 0
X = 2
While i < K
If verifica(X) Then
MsgBox ("O nmero " & X & " primo")
X = X + 1
Wend
End Sub

Possvel Resposta:


Sub primos()
Dim K, X, i As Integer
K = Val(InputBox("Quantos primos quer determinar?"))
i = 0
X = 2
While i < K
If verifica(X) Then
i = i + 1 ' conta mais um primo encontrado
MsgBox ("O nmero " & X & " primo")
End If ' termina a condio if
X = X + 1
Wend
End Sub
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 45 -
4. INTRODUO AO MATLAB

O MATLAB, Laboratrio de Matrizes, uma ferramenta para computao numrica e
visualizao grfica destinado a utilizadores, fundamentalmente das reas das
engenharias e cincias, que precisam de para realizar clculos matemticos, desenvolver
algoritmos, modelao, simulao, etc. Baseado em matrizes que no requerem
dimensionamento, um dos objectivos principais proporcionar ao utilizador uma
soluo simples e eficiente de muitos problemas computacionais que envolvem matrizes
e vectores. Permite solucionar muitos problemas numricos com um esforo muito
menor do esforo que seria necessrio para escrever um programa numa linguagem de
programao de alto nvel.
O MatLab est dotado de um sistema interactivo e duma linguagem de programao.
Alm de bibliotecas para clculos aritmticos bsicos, oferece ainda um grande nmero
de ferramentas (tool-boxes) para a resoluo de problemas especficos da estatstica,
programao linear, etc.
Na FEUP a verso instalada neste ano lectivo 2009/2010 MATLAB 7.8.0 (R2009a).

4.1 Ficheiros do Matlab: M-ficheiros
M-Ficheiros so ficheiros com extenso .m que contm programas (scripts) e
funes que podem ser chamados e executados na janela de comandos do MATLAB.
programas utilizados para armazenar comandos
funes utilizados para armazenar funes e procedimentos.

4.2 Ambiente de trabalho em MATLAB

Janela de comando:
Existem dois modos de utilizao:
1. modo imediato - para entrar variveis e executar os comandos
2. modo de execuo de funes - para executar procedimentos e programas
armazenados em M- ficheiros. Neste caso, utiliza-se o comando cd (change directory)
para procurar a pasta onde se encontra o M-ficheiro e introduz-se o nome do ficheiro
para comear a sua execuo.



Trao do programa
diary <filename> redirecciona a informao de sada para um ficheiro
diary on/off activa/ desactiva o trao do programa
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 46 -

Janela de edio: para a edio dos M-ficheiros. Esta janela aberta a partir do Menu
File na janela de comandos escolhendo New ou Open:


Janela de grficos: para a visualizao e impresso de grficos.Esta janela abre-se
automaticamente quando se pede a execuo de um grfico. Por exemplo se na janela de
comandos escrever
>> x=[-4:0.01:4];
>> y= sin( x );
>> plot(x,y)
Ir ser desenhada a funo trigonomtrica seno de x para x entre -4 e 4 e por
incrementos 0.01.


Janela de help: para ajuda,
abre-se a partir do Menu Help
podendo ser usada em modo interactivo.





Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 47 -
4.3 Comandos de visualizao e informao

; coloca-se no final da linha para suprimir a repetio (echo) do comando
, coloca-se no final da linha se se deseja a repetio (echo) do comando
... coloca-se no final da linha quando o comando demasiado longo para ser inserido
numa nica linha
% comentrio
format short visualiza 4 lugares decimais
format long visualiza 14 lugares decimais
who lista todas as variveis utilizadas
whos lista todas as variveis utilizadas juntamente com a informao sobre a sua
dimenso
what lista os ficheiros
clear apaga o espao de trabalho
clear variables apaga as variveis
clear x y z apaga apenas as variveis x, y e z da memria.
clear functions apaga as funes
clc limpa o display
clg limpa o grfico

4.4 Comandos para atribuir valores s variveis
>> x = 2;
>> y = x^2 -3*x + 2;
>> z = tan( x^2 )-cos(3*y)^2 + 2*x*y;

No Matlab letras maisculas e minsculas so diferentes.
Evitar utilizar como nomes variveis que sejam nomes de variveis intrnsecas do
Matlab (por ex: sin, cos, exp, sqrt, etc.). Sempre que o nome de uma funo utilizado
para definir uma varivel, a funo deixa de poder ser utilizada.

Algumas das variveis pr-definidas:
ans toma o valor do resultado da ltima expresso.
pi o nmero
eps a menor diferena entre 2 nmeros: 2^(-52)
inf usado para infinito
i definido como 1 , que 0+1.0000i
j o mesmo que i
NaN Not-a-Number por exemplo 0/0.

4.5 Grficos de funes
A funo plot( ) - gera grficos em R
2

plot(x,y) desenha um grfico que passa pelos pontos (x(i),y(i))
plot(y) desenha um grfico que passa pelos pontos (i,y(i))
plot(x,y, S) S pode ser formado pelo primeiro elemento que identifica a cor da linha
e o segundo que identifica o tipo de linha:
cor : y amarelo; m magenta, c - azul celeste; r - vermelho; g verde; b - azul ;
w branco; k- preto
tipo de linha: . ; -; o ; : ; x; -. ; + ; --; * ; s - quadrado; d diamante; v;^ ; <; >; etc.
Por exemplo, plot(x1,y1,r*, x2,y2, g, x2,y2,:) desenha trs grficos com
diferentes cores e formatos de linhas.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 48 -
Para desenhar o grfico de uma funo de uma varivel podemos usar por exemplo:

>> x=[-2:0.01:4];
>> y=3.5.^(-x/2).*cos(6*x);
>> plot(x,y)





>> fplot('3*x^3-26*x+10',[-2,2])
>> hold on
>> fplot('x^4',[-2,2],'--r')
>>
>> hold off











>> f=inline('x^2+exp(x)-3*x-4');
>> fplot(f,[-2,2])










4.6 Algumas das funes matemticas elementares:

abs(x) - valor absoluto de x.
acos(x) - arco cujo cosseno x.
asin(x) - arco cujo seno x.
atan(x) - arco cuja tangente x.
cos(x) - cosseno de x.
exp(x) - exponencial de x.

factorial(x) funo factorial.
log(x) - logaritmo de x na base e.
log10(x) - logaritmo de x na base 10.
sin(x) - seno de x.
sqrt(x) - raiz quadrada de x.
tan(x) - tangente de x.


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 49 -
4.7 Funes para manipulao algbrica

O comando Sym e Syms permite definir variveis simblicas para manipulao
algbrica.
Por exemplo: Syms x y z

Algumas das funes mais utilizadas para manipulao algbrica so:

compose(f,g) - determina a composta f(g(x)).
expand(expr) - expande uma expresso expr.
finverse(expr) - determina a funo inversa de expr.
pretty(expr) - exibe a expresso expr numa forma mais bonita.
simple - procura encontrar uma forma mais simples de escrever expr.
simplify(expr) - simplifica a expresso expr.
solve(expr) determina as solues da equao expr= 0.
subs(expr,x,a) - substitui na expresso expr a varivel x por a.

Exemplos:

>> syms x y z
>> y=sin(x);
>> z=x^2;
>> diff(y)
ans = cos(x)
>> diff(y+z)
ans =
2*x + cos(x)

>> syms x y z
>> y=sin(x);
>> z=x^2;
>> compose(y,z)
ans =
sin(x^2)

>> syms f x
>> f=x^2+5*x+4;
>> solve(f)
ans =
-4
-1
>>





>> f=inline('x^2+exp(x)-3*x-4');
>> fplot(f,[-2,2])
>> solve(f)

ans = -0.9188921458584411416756

>>


>> clear f g x
>> clear functions
>> syms f g x
>> f=x^3;
>> g=finverse(f)
Warning: finverse(x^3) is not unique.
> In sym.finverse at 46
g = x^(1/3)

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 50 -
4.8 Exerccios:
1. Calcule as expresses seguintes para diferentes valores de x:
a)
3 cos 2
sen x
x sen x + +
b)
( )
3
2
2
1
4x x
c)
2 2
sec ( )
x
x x e +

2. Calcule para x= 0, 3 e 30 os valores de y e de z

3 7
5
1
3
1
y x
x
= +
+

2
5
3
z
x x

=
+ +


3. Faa os grficos das funes e calcule as suas derivadas

5
2
( )
1
x
f x x
x
= +
+
;
3/ 2 2
5
2
( ) g x x x = + ;
2
1
( )
x
e x
h x
x

=


4. Utilize um nico grfico para desenhar as funes

( ) sec( ) cosec( ) f x x x = + e
2 3
( ) ( ) g x x tg x =

5. Faa os grficos das funes

( ) ln( cos( )) (ln( )) f x arc x tg x = + e
2 3
( ) ( 1) ( ) g x sen x tg x = + +

6. Utilize um nico grfico para desenhar pelo menos duas das trs funes

2
( ) cos( ) ( ) f x x sen x = + ( ) 2 ( ) 5sec( )
2
x
g x tg e x

= +
2
2
( ) ( 1)
( )
cos ( )
tg x arcsen x
h x
x
+ +
=
7. Considere ( )
3 cos 2
sen x
f x
x sen x
=
+ +
e
( )
3
2
2
1
( )
4
g x
x x
=


calcule f(g(x)) e as funes inversas de f(x) e de g(x).


8. Resolva as equaes:

a)
3
3 0
x
x x e + = b)
2
1
0
1
arcsen
x
| |
=
|
+
\
c)
2
( ) arctg x x = .



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 51 -

4.9 Matrizes e Vectores em MatLab

O MATLAB, Laboratrio de Matrizes, uma ferramenta para computao numrica e
visualizao grfica. Um dos objectivos principais proporcionar ao utilizador uma
soluo simples e eficiente de muitos problemas computacionais que envolvem matrizes
e vectores.

Todas as variveis em MATLAB so tratadas como matrizes (arrays). Um escalar
considerado uma matriz de um por um.

4.10 Inicializao de matrizes:
Uma matriz pode ser inicializada de vrias formas. Por exemplo:
X = [ 1,2;3,4] %matriz 22 inicializada usando o operador concatenao [ ]
Y = [ 1,2,3] %vector linha, matriz 13 inicializada usando o operador [ ]
B = [ 1;2;3] %vector coluna, matriz 31 inicializada usando o operador [ ]
Z = zeros(1,5) % Inicializa um vector como uma linha com zero
Z =
0 0 0 0 0
W = zeros(3,1) % Inicializa um vector como coluna com zeros
W =
0
0
0
M = ones(2,4) % Inicializa uma matriz de 2 linhas e 4 colunas com uns
M =
1 1 1 1
1 1 1 1
>> A=rand(2,4) % Inicializa uma matriz de 2 linhas e 4 colunas com valores aleatrios
% reais entre 0 e 1
A =
0.8147 0.1270 0.6324 0.2785
0.9058 0.9134 0.0975 0.5469
>> rand(size(A)) % Retorna uma matriz de valores aleatrios com a mesma dimenso
% de A
ans =
0.4218 0.7922 0.6557 0.8491
0.9157 0.9595 0.0357 0.9340
>> out = randint(3,3,[0,7]) % Inicializa uma matriz 3 por 3 com valores aleatrios
% inteiros entre 0 e 7
out =
7 0 4
7 2 2
3 3 4
size(M) % Devolve a dimenso de uma matriz: # de linhas, # de colunas
ans =
2 4


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 52 -
4.11 Operaes sobre vectores: podem ser introduzidos e armazenados como uma
matriz de uma nica linha ou uma nica coluna
V = [1,2,3,4]
V =
1 2 3 4
length(V) % o comprimento de um vector V
ans =
4
sum(V) % a soma dos elementos de V
ans =
10
mean(V) % a mdia aritmtica dos elementos de V
ans =
2.5000
Podem ser criados vectores utilizando o operador : <incio : incremento : fim>
XX = 0.2:0.2:1; % um vector com 5 componentes.
Se o incremento for igual a um pode ser omitido:
X = 1:20; % um vector com nmeros inteiros desde 1 at 20.
Y = X.^2; % um vector com cada nmero elevado ao quadrado.
Y(10:20) % visualiza os ltimos 11 elementos.
ans =
100 121 144 169 196 225 256 289 324 361 400
x=1:4:20; % um vector com nmeros inteiros desde 1 to 20, com incremento 4.
x =
1 5 9 13 17

4.12 Operaes sobre matrizes
A = [1 2 3 4; 5 6 7 8; 9 10 11 12];
A(1,3) % selecciona um elemento da matriz ans =
3
A(2:3, 1:2) % selecciona uma sub-matriz

ans =
5 6
9 10

Exemplos:
Seja X=[10,20,30,40] e

2 3 0
1 4 5


X(2:4) Representa da 2 4 componente
X(:) Vector coluna com todas as componentes de X
A(:,3) Representa a 3 coluna de A
X(end) Representa a ltima componente de X
B=A(:,2) B um vector coluna com a 2 coluna de A
A(:,1)=[ ] Apaga a 1 coluna de A, A passa a ser uma matriz 22
A(3) 3 componente de A quando os elementos so ordenados por colunas, -3.
A(end,:) Representa a ltima linha de A

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 53 -
Outras operaes sobre matrizes:
inv inversa
A. transposta
rank caracterstica
det determinante
eig valores e vectores prprios
norm norma
rand elementos aleatrios
eye matriz identidade
rot90 rotao dos elementos da matriz
fliplr inverter matrix left-to-right
flipud inverter matrix up-and-down
diag extrair a diagonal principal
tril lower triangular part
triu upper triangular part

4.13 Operadores aritmticos, relacionais e lgicos

Operadores aritmticos Operadores aritmticos sobre matrizes
+ Adio
- Subtraco
* Multiplicao
/ Diviso direita (a/b=a
*
b
-1
)
\ Diviso esquerda (a\b=a
-1
*
b)
^ Potncia
.+ Somar por elemento
.- Subtrair por elemento
.* Multiplicao por elemento
./ Diviso por elemento
.^ Potncia por elemento

Exemplos: A = [1 2; 3 4];
A^2 % o quadrado da matriz, A*A
ans =
7 10
15 22

A.^2 % o quadrado de cada elemento
da matriz.
ans =
1 4
9 16

Operadores Relacionais Operadores Lgicos
== igual a
~= no igual a
< menor que
> maior que
<= menor ou igual a
>= maior ou igual a
~ negao
& conjuno
| disjuno
xor ou exclusivo

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 54 -
4.14 Valores booleanos: 1 True; 0 False
Exemplos: Seja v1=1; v2= - 4; v3=5 e v4=0
Expresso lgica Resultado
v1==1 1 Verdadeiro
v1>v2 & v3<v4 0 Falso
~(-2<v1 | v1<=5) 0 Falso
-5<v2<-3 0 Falso
v1>v2 xor v3<v4 1 Verdadeiro
(v4~=0) && (v3/v4<5) 0 o valor lgico do 2 operando s analisado se o valor lgico do
1 no for suficiente. Neste caso evita-se a diviso por zero.

4.15 Instrues bsicas de programao em MatLab
4.15.1 Instrues de Controlo
>> if faltas>0.25,passagem=0,end
if expression, statements, end

>> if faltas<0.25 && nota>=10
passagem=1
else
passagem=0
end
if expression1
statements1
elseif expression2
statements2
else
statements3
end

4.15. 2 Ciclo for
for x=initval:endval, statements, end >> k=3;
>> for m=1: k , a(m)=1/m; end
>> a
a =
1.0000 0.5000 0.3333
for x=initval:stepval:endval, statements, end






Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 55 -
4.15. 3 Instrues de entrada/sada de dados
Para inicializar variveis usando a funo input escrita na janela de comandos:
Var = input(texto)
>> r1=input('Introduza uma expresso aritmtica: ')
Introduza uma expresso aritmtica: 5*cos(pi/4)
r1 =
3.5355
Armazena o resultado de
uma expresso
>> A=input('Introduza uma matriz: ')
Introduza uma matriz: [1 2 3; 6 7 8]
A =
1 2 3
6 7 8
Define uma matriz
>> leitura=input('Introduza um texto: ')
Introduza um texto: 'Quer continuar?'
leitura =
Quer continuar?
Define um texto
>> A=input('Introduza uma matriz: \n ')
Introduza uma matriz:
[1 2 3]
A =
1 2 3
\n (= mudana de linha)

Var = input(texto,s)
>> Var = input('texto?\n','s')
texto?
Estou na aula
Var =
Estou na aula
Armazena um texto
>> Pergunta=input('O que isto? ','s')
O que isto? [1 2 3; 6 7 8]
Pergunta =
[1 2 3; 6 7 8]
Interpreta sempre como sendo um texto

Instrues de sada :
>> x=2*cos(pi/4)
x =
1.4142
Instrues sem ;
>> disp(rand(2));
0.8147 0.1270
0.9058 0.9134
Funo disp;
>> fprintf('O valor de Pi = %f \n',pi)
O valor de Pi = 3.141593
Funo fprintf

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 56 -
4.16 Exerccios propostos:

1. Explique o resultado do seguinte cdigo MatLab:
a) prod([eye(2); -3*(0:1)])
b) A= [-3 2 -2; 1 0 -3 ]; A(3, : )=ones(1,3); B=find(A>1)
c) S= [ 2, 3, 40]; if mod(S(end),2)==0 , S(end)=0 , end
d) for i = 1: length(S) , T(i) = i* norm(S,2); end; T

2. Seja k = <ltimo algarismo do seu nmero de cdigo da FEUP>
Defina um vector X de dimenso N=10+k em que as componentes do vector tomam
valores aleatrios inteiros entre 1 e os dois ltimos algarismos do seu nmero de
cdigo da FEUP.
a) Calcule a norma do vector;
b) Calcule a soma dos elementos do vector;
c) Calcule a mdia dos elementos do vector;
d) Calcule o produto dos elementos de ndice mpar do vector;
e) Determine o ndice do primeiro elemento do vector igual ao algarismo das dezenas do
seu nmero da FEUP. Caso no exista deve sair uma mensagem;
f) Substitua os elementos mpares do vector por zero;
g) Defina um vector aleatrio Y de dimenso N=10+k e calcule Z = X+Y;
h) Calcule o produto de um escalar por Z, i.e., W = Z

3. Seja A matriz com nn elementos e b um vector com n elementos, para n>3.
a) Calcule A
-1
, a inversa de A, i.e., AA
-1
= A
-1
A = matriz identidade.
b) Resolva a equao Ax=b, i.e., determine o vector x.
Deve apresentar pelo menos um exemplo possvel e determinado.
c) Some os elementos da diagonal principal de A;
d) Dada uma B matriz com mn elementos, calcule a soma de A com B;
e) Calcule o produto de um escalar pela matriz A, A.

4. Escreva as seguintes expresses aritmticas e/ou lgicas em MatLab e indique o resultado
atribuindo valores a x, y, k, A e B.
a) cos

;
b) 3 0;
c) 2 2;
d)

;
e) 3 |. | 0.5 10

;
f) 20

;


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 57 -
4.17 Exerccios Resolvidos:

A. Escreva em VB ou MATLAB as seguintes instrues de atribuio, considerando
todas as variveis como escalares:
a)

senn ; 1 0.5 10

ln

; d) /cos

;

Resposta possvel:

A. VB Matlab
a) r = Sqr(x^2-y^2)*Sin(n*alfa) r = sqrt(x^2-y^2)*sin(n*alfa)
b) r1=0.5e-4*Ln(x+y^(1/3)) r1=0.5e-4*log(x+y^(1/3))
c) R = Exp(-1/(n+1)) R = exp(-1/(n+1))
d) Pi = Atn(1) * 4
k = x*y/Cos(Pi/2+n)
k = x*y/cos(pi/2+n)


B. Escreva as seguintes expresses em MatLab e indique o resultado, comeando por atribuir
valores a A, B e T.
a) 3 0; ;
b) 5 | | 10

; 5 ;
c) 0 1 1 1/; ;
Resposta possvel:

B. MatLab Resultado
a) A=3;B=2;P=A<=3|B= =0 P=1
b) A=2;B=0;P5=(A~=B)&abs(A-B)>1.e-4 P5=1
c) T=1; if T==0, f=1;else f= sqrt(1+1/T); end; f
f=2 ou f=1.4142


C. Explique o resultado do seguinte cdigo MatLab:
a) >> D=1+fix(6*rand(1,10)); R=mod(D,3); C=prod(R);C
C =
0
Resposta possvel:

A funo rand(1,10) cria uma matriz de 1 linha e 10 colunas com elementos aleatrios
entre 0 e 1; a instruo D=1+fix(6*rand(1,10)) vai criar um vector com 10 elementos
aleatrios inteiros entre 1 e 6 (ver exerccio do Lanamento de dados); a instruo
R=mod(D,3) vai criar um vector com 10 elementos que so o resto da diviso inteira de
cada elemento de D por 3; a instruo C=prod(R) atribui a C o produto dos elementos de
R; C vai tomar o valor 0 se algum dos elementos do vector C for 0; finalmente a instruo
C obriga escrita do valor da varivel C.
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 58 -

b) >> h=0.1; X=[0.5:-h:0]; Y=cos(X).^X; disp(Y(end));
1
Resposta possvel:

A instruo h=0.1 atribui varivel h o valor 0.1; a instruo X=[0.5:-h:0] cria um
vector com elementos comeando em 0.5, incremento h e termina em 0, ou seja,
X=[0.5, 0.4, 0.3, 0.2, 0.1,0] vai ter 6 elementos; a instruo Y=cos(X).^X vai criar um
vector em que cada elemento de calculado custa de cada elemento de X usando a
funo cos(x)^x; a instruo disp(Y(end)) escreve a ltima componente do vector Y,
como cos(0)^1 igual a 1, a resposta ser 1.

D. Escreva em VB ou MATLAB as seguintes instrues de atribuio, considerando
todas as variveis como escalares:

a) cos ; 1

; d)

;

Resposta:

D. VB Matlab
a) r = A * Cos(teta - t) r=A*cos(teta-t)
b) r1 = Exp(-t * teta) r1=exp(-t*teta)
c) Pi = Atn(1) * 4
R = Sin(1 / (n + 1) + n * Pi)
R=sin(1/(n+1)+n*pi)
d) k = Sqr(x ^ 2 - y ^ 2) / (x + 3 ^ y) + (x - y) / y
^ 2.5
k=sqrt(x^2-y^2)/(x+3^y)+(x-
y)/y^2.5


E. Escreva as seguintes expresses em MatLab e indique o resultado, comeando por atribuir
valores a A, b, B e M.
a) 3 0 b) 5 3 0
c) 5 7 2; ;

Resposta Possvel:

E. MatLab Resultado
a) A=3;B=2;P=A>=3|B= =0 P=1
b) A=2;b=0;P5=(A~=b|A>-3)&b>0 P5=0
c) M=70; if mod(M,5)==0|mod(M,7)==0,M=2*M,end M=140

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 59 -
F. Explique o resultado do seguinte cdigo MatLab:
a) >> A= ones(3,2);B=randint(3,2,[2,7]);C=A+B; V=find(C==1)
V =
Empty matrix: 0-by-1

b) >> S= [ -2, 3, 7]; if mod(prod(S),3)==0 , S=10*S; end; S
S =
-20 30 70

Resposta Possvel:
a) >> A= ones(3,2);B=randint(3,2,[2,7]);C=A+B; V=find(C==1)
V =
Empty matrix: 0-by-1

A= ones(3,2); Inicializa a matriz A com 3 linhas e 2 colunas e elementos
todos iguais a 1;
B=randint(3,2,[2,7]); Inicializa a matriz B com 3 linhas e 2 colunas e
elementos com valores aleatrios inteiros entre 2 e 7;
C=A+B; Constroi a matriz C soma de A com B e os elementos tomam
valores aleatrios inteiros entre 3 e 8;
V=find(C==1) Constroi um vector V com a localizao dos elementos de C
cujos valores so exactamente 1. Como todos os elementos de C esto entre 3 e 8 a
resposta vector V vazio.

Resposta Possvel:

b) >> S= [ -2, 3, 7]; if mod(prod(S),3)==0 , S=10*S; end; S
S =
-20 30 70

S= [ -2, 3, 7]; Inicializa um vector C com 3 colunas e elementos indicados;
prod(S) Faz o produto dos elementos de S, i.e. -2*3*7;
mod(prod(S),3) Calcula o resto da diviso inteira prod(S) por 3;
if mod(prod(S),3)==0 , S=10*S; end; Se o resto da diviso inteira prod(S)
por 3 for exactamente 0 ento os elementos de S so multiplicados por 10; seno no
faz nada;
S Escreve o vector S. Como neste exemplo o produto dos elementos de S
mltiplo de 3, o novo vector S tem os elementos iguais a 10 vezes os elementos do
vector S inicial.



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 60 -
5. Programao em MatLab - introduo

5.1 Programas (script) - um conjunto de comandos e instrues em MatLab
armazenadas num M-Ficheiro
% <program-name>
{<specification-statements>}
{<executable-statements>}

Exemplo 1: Escreva um programa em MatLab que construa o grfico da funo
y=sin(x), para x pertencente ao intervalo [0, ] com passo /8 . Grave o programa num
ficheiro com o nome PlotSin.m.

O Matlab permite rapidamente avaliar funes num largo conjunto de dados. Por
exemplo, se X=[-1 0 1], ento sin(X) produz o resultado [sin(-1) sin(0) sin( 1)].
Do mesmo modo se X= [0:pi/8:pi] ento Y=sin(X) produz um vector Y com a mesma
dimenso que X e com os correspondentes valores de sen(x).

% PlotSin constroi o grfico da funo y=sin(x)
X = 0:pi/16:pi;
Y = sin(X);
figure(1); clf;
hold on;
axis([-0.2 3.2 -0.1 1.1]); % define os eixos de oordenadas
plot([-0.2 3.2],[0,0],[0,0],[-0.1 1.1]); % desenha os eixos
plot(X,Y); % desenha o grfico
xlabel('x');
ylabel('y');
title('Graph of y = sin(x)');
grid;
hold off;
Execute o programa PlotSin na
janela de comandos do MATLAB.

>> PlotSin
O seguinte grfico ser visualizado:

Comentrio: O comando plot requer dois
vectores de igual dimenso.


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 61 -
Exemplo 2: Escreva um programa em MatLab que construa o grfico do polinmio
p(x) = x
5
10 x
4
+ 35 x
3
50 x
2
+ 24.
Grave o programa num ficheiro com o nome PlotPoly.m

% PlotPoly constroi o grfico do polinmio
figure(1);clf;
C = [1 -10 35 -50 24]; % define um vector com os coeficientes do polinmio
X=[-0.2:0.1:4.2]; % define as abcissas
Y=polyval(C,X); % polyval - funo que avalia um polinmio
axis([-0.2 4.2 -2.3 4.3]); % define os eixos
plot([-0.2 4.2],[0,0],[0,0],[-2.3 4.3]); % desenha os eixos
plot(X,Y); % desenha o grfico
hold on;
xlabel('x');
ylabel('y');
title('Grfico de um polinmio');
grid;


Execute o programa PlotPoly. O seguinte grfico ser visualizado:


Exemplo 3: Escreva um programa em MatLab onde o utilizador pode introduzir uma
funo para construir o grfico.
Sugesto: A funo f pode ser definida como texto, por exemplo, se f=sin(x), ento
pode ser usado o comando fplot(fun,limits) ou fplot(fun,limits,LineSpec).

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 62 -
% PlotFun constroi o grfico de uma funo
f=input('f(x)= ','s');
a= input('limite inferior para x ');
b= input('limite superior para x ');
figure(1);clf;
fplot(f,[a b]); % desenha o grfico
hold on;
xlabel('x');
ylabel('y');
title(f);
grid;

5.2 Funes em MatLab

function [lista de parmetros de sada] = nome (lista de parmetros de entrada)
{<instrues para declarao de variveis>}
{<instrues de execuo>}

Exemplo 4 : Implemente a funo sraiz para determinar a raz quadrada positiva de um
nmero positivo pelo mtodo de Newton. Grave esta funo no M-ficheiro sraiz.m.
function [r]=sraiz(A)
% Mtodo de Newton para determinar a raiz quadrada de A
p0 = 1; % valor inicial
for k=1:50,
p1 = (p0+A/p0)/2;
disp(p1);
if abs(p1-p0)/p1 < eps, break, end;
p0 = p1;
end
r=p1;
Executando a funo sraiz na janela de comandos do MATLAB, obtm-se:
>> sraiz(9)
5
3.4000
3.0235
3.0001
3.0000
3
3

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 63 -
Exemplo 5 : Implemente em Matlab a funo f2ramos definida por:

0
0



Grave esta funo no M-ficheiro f2ramos.m
function [y]=f2ramos(t)
if t<0
y=exp(-t);
else
y=1+atan(t);
end


Agora executando a funo f2ramos na janela de comandos do MATLAB, obtm-se
por exemplo:
>> t=-0.5; fprintf('Valor de f(%f)=%f \n',t,f2ramos(t))
Valor de f(-0.500000)=1.648721
>> t=0.5; fprintf('Valor de f(%g)=%g \n',t,f2ramos(t))
Valor de f(0.5)=1.46365

Aqui foi utilizada a funo fprintf(formato, resultados) em que format um string.

Alguns caracteres de converso, controlos de escrita do texto utilizados no formato so:

\t tabelamento (de 4 em 4 caracteres)

%d inteiro

%f real em vrgula fixa com 6 casas decimais

%s texto

%e real em vrgula flutuante com 6 casas
decimais

\n muda de linha

%g real na forma mais compacta 0 os espaos so preenchidos por zeros



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 64 -
Exemplo 6 : Escreva as seguintes funes MatLab nos ficheiros f.m and G.m.

function y = f(x)
y = exp(-x./10) + sin(x);

function W = G(Z) % Z vector linha com 2 componentes
x = Z(1);
y = Z(2);
W = [x.^2-y.^2 2*x.*y];

Execute as funes f e G na janela de comandos. Obtm-se:
f(pi/2)
ans =
1.85463599915323
G([2 1])
ans =
3 4

Exemplo 7 : Escreva as seguintes funes MatLab no ficheiro chamada.m.
function [y]=chamada(x)
y=fa(x)+fb(x);
return


function [y]=fa(t)
if t<0,
y=exp(-t);
else
y=1+atan(t);
end
return


function [y]=fb(t)
if t<0,
y=exp(-2*t);
else
y=1+atan(t^2);
end
return


Agora executando a funo chamada na janela de comandos do MATLAB, obtm-se
por exemplo:

>> z=chamada(0)+chamada(1)
z =
5.5708
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 65 -

Se introduzir na janela de comandos a seguinte instruo z=chamada(0)+fa(2)+fb(3)
obtem-se

>> z=chamada(0)+fa(2)+fb(3)
??? Undefined function or method 'fa' for input arguments of type 'double'.

Porqu?

5.3 Ficheiros de dados em MatLab
A instruo save nome_ficheiro lista_variveis opes guarda variveis do workspace
num ficheiro. Para carregar para o espao de trabalho as variveis guardadas num
ficheiro utiliza-se a instruo load nome_ficheiro lista_variveis. Por exemplo:

>> clear variables
>> a=1;b=sin(a)+exp(a);load fich1 a b
>> clear variables
>> load fich1 a b;disp(a);disp(b)
1
3.5598

5.4 Instrues de Controlo para programao em MatLab

5.4.1 IF ELSEIF ELSE END

if (<expreso-lgica#1>),
{<instrues executveis>}
elseif (<expreso-lgica#2>),
{<instrues executveis>}
.
else
{<instrues executveis>}
end

%Exemplo
>> k=4;
>> for m = 1:k
for n = 1:k
if m == n
a(m,n) = 2;
elseif abs(m-n) == 2
a(m,n) = 1;
else
a(m,n) = 0;
end
end
end
>> a
a =
2 0 1 0
0 2 0 1
1 0 2 0
0 1 0 2
Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 66 -

5.4.2 Ciclo FOR

for varivel = expresso
{<instrues executveis>}
end

Exemplo 7: Exemplo 8: Exemplo 9:
for k=1:100,
x=sqrt(k);
if x>5, break, end
end

sum1 = 0;
for k = 1:1:10000,
sum1 = sum1 + 1/k;
end
sum1
sum1 =
9.78760603604434
sum2 = 0;
for k = 10000:-1:1,
sum2 = sum2 + 1/k;
end
sum2
sum2 =
9.78760603604439

A instruo break interrompe o ciclo
A instruo Pause gera uma pausa na execuo do programa

5.4.3 Ciclo WHILE


while <expresso>
{ <instrues executveis>}
end

Exemplo 11:

m = 10;
k = 0;
while k<=m
x = k/10;
disp([x, x^2, x^3]); % uma tabela de valores
k = k+1;
end


Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 67 -
5.5 Outras funes do MatLab

Nota: exemplos de utilizao destas funes podem ser estudadas usando o HELP


Funes Matemticas:

cos(x) cosine (radians)
sin(x) sine (radians)
tan(x) tangent (radians)
cosd(x) cosine (degrees)
sind(x) sine (degrees)
tand(x) tangent (degrees)
exp(x) exponential exp(x)
acos(x) inverse cosine (radians)
asin(x) inverse sine (radians)
atan(x) inverse tangent (radians)
log(x) natural logarithm base e
log10(x) common logarithm base 10
sqrt(x) square root
abs(x) absolute value
round(x) round to nearest integer
fix(x) round towards zero
floor(x) round towards -
ceil(x) round towards +
sign(x) signum function
cosh(x) hyperbolic cosine
sinh(x) hyperbolic sine
tanh(x) hyperbolic tangent
acosh(x) inverse hyperbolic cosine
asinh(x) inverse hyperbolic sine
atanh(x) inverse hyperbolic tangent
real(z) real part of complex number z
imag(z) imaginary part of complex number z
conj(z) complex conjugate of the complex number z
angle(z) argument of complex number z
rem(p,q) remainder when p is divided by q

Funes para Anlise de Dados:

max maximum value
min minimum value
mean mean value
median median value
std standard deviation
sort sorting
sum sum the elements
prod form product of the elements

cumsum cumulative sum of elements
cumprod cumulative product of elements
diff approximate derivatives (differences)
hist histogram
corrcoef correlation coefficients
cov covariance matrix



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 68 -

5.6 Grficos 3-D
Exemplo de grfico de linhas:

>> % Exemplo de utilizao da funo plot3(x,y,z)
>> z=[0:0.1:10];
>> x=z.*cos(2*z);y=z.*sin(2*z);plot3(x,y,z);
>> title('Grfico de linha 3-D'); grid on





Exemplos de outros grficos 3-D so os chamados grficos de superfcie e de contornos
cujos exemplos podem ser consultados usando a facilidade HELP do MatLab.

Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 69 -
5.7 Exerccios de introduo Programao em MatLab

1. Uma equao do 2 grau tem a forma genrica

0 com 0.
Escreva um programa em MatLab que leia os valores dos parmetros a, b e c e
determine as duas razes da equao.
Nota: as razes podem ser reais ou complexas.

2. Numa conta a prazo com capitalizao automtica o valor do juro acumulado
ao capital inicial no final de cada perodo. Assim, o capital acumulado ao fim de
N perodos dado pela equao

1


onde a taxa de juro aplicada 0 1.

Escreva um programa MatLab que tenha como dados o Capital inicial, a taxa de
juro anual t e o nmero de anos N e que calcule o capital acumulado ao fim
desses anos.

3. Escreva um programa em MatLab que mande desenhar um grfico com vrias
funes sobrepostas. O utilizador deve poder escolher quantas e quais as funes
a introduzir para construir o grfico.

4. Escreva uma funo em MatLab para procurar numericamente o limite

lim



Para procurar numericamente este limite pode avaliar f(x) para a seguinte
sucesso:

, ,

, para valores de b e n dados sendo h


escolhido convenientemente. Experimente para b=5, h=1 e n=10 calculando
a) lim

b) lim



5. A instruo 1+fix(6*rand(1,10)) simula o resultado de fazer dez lanamentos de
um dado. Usando uma instruo semelhante, escreva um programa para:
a) Contabilizar o nmero de vezes que em 50 lanamentos saram valores
pares;
b) Contabilizar o nmero de vezes que nos 50 lanamentos, a soma do
resultado de dois lanamentos consecutivos foi de exactamente 8.



Laboratrios de Informtica MIEA 2009/10
Prof Catarina Castro
- 70 -

6. Construo de uma pgina WEB pessoal

Sugesto:
1) Usar, por exemplo, o Microsoft Office Publisher 2007 (disponvel nas salas de aula)
para criar ou editar um ficheiro Web site com a pgina pessoal;

2) Fazer Save as do ficheiro com o nome index.html escolhendo o tipo Pgina Web;

Como colocar a sua pgina pessoal em http://www.fe.up.pt/~username

3) Arrastar este ficheiro para dentro da pasta public_html da rea de trabalho pessoal,
\\samba.fe.up.pt\LOGIN, armazenada nos servidores centrais da FEUP (geralmente a
drive Z:);

4) Na pgina pessoal do SIFEUP em administrao escolher configurar, Pgina Web,
http://www.fe.up.pt/~username;

5) Se necessrio, no Tools do browser retirar os cookies.
E tudo.................