Sei sulla pagina 1di 86

APONTAMENTOS

DE
EXCEL, VB e MATLAB

LABORATRIOS DE INFORMTICA
1 ANO

MESTRADO INTEGRADO EM
ENGENHARIA DO AMBIENTE

2012-2013

Laboratrios de Informtica

MIEA 2012/13

ndice
Pg.
A. Construo de uma pgina WEB pessoal

1.Noes bsicas de Algoritmia e Programao VB


1.1 O que um algoritmo?
1.2 Etapas na resoluo de um problema
1.3Estrutura geral de um algoritmo
1.4Variveis
1.5Instrues de atribuio, leitura e escrita
1.6Expresses aritmticas
1.7Instues de controlo e seleco
1.8Operadores lgicos
1.9Instrues de repetio e de controlo de fluxo
1.10Exerccios Propostos
1.11 Exerccios Resolvidos

2.
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10

20

Introduo ao Microsoft Excel


Livro e folha de clculo
Frmulas
Referncia a clula(s)
Atribuio de nome a uma clula ou range
Referncia a clula(s) de outra Folha de Clculo
Funes
Composio de funes
Algumas funes intrnsecas do Excel
Grficos
Exerccios propostos

3. Excel e programao VBA


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

29

Prof Catarina Castro


-2-

Laboratrios de Informtica

MIEA 2012/13

3.11 Exemplo de utilizao de procedimentos


3.12 Exerccios propostos
3.13 Exerccios resolvidos

4.
Introduo ao Matlab
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

54

5.
5.1
5.2
5.3
5.4
5.5
5.6
5.7

69

Programao em MatLab introduo


Programas (script)
Funes em MatLab
Ficheiros de dados em MatLab
Instrues de Controlo para programao em MatLab
Outras funes do MatLab
Grficos 3-D
Exerccios de introduo Programao em MatLab

Resoluo de Exerccios dos Testes do ano lectivo 2010/2011

79

Prof Catarina Castro


-3-

Laboratrios de Informtica

MIEA 2012/13

A. Construo de uma pgina WEB pessoal

Sugesto:

1) Usar, por exemplo, o Microsoft Office Publisher (disponvel nas salas de aula) ou
outro software, para criar e/ou editar um ficheiro Web site com a pgina pessoal.
No Microsoft Publisher, possvel criar pginas HTML (Hypertext Markup Language),
mas no possvel abrir e editar as pginas HTML no Publisher depois de criados. Se
pretender utilizar o Microsoft Publisher para criar e publicar um Web site,
recomendvel que guarde uma cpia de segurana do seu documento como um
arquivo(. pub).
Utilizando este mtodo, se pretender efectuar quaisquer alteraes ao site, edite o
arquivo (.pub) que depois pode guardar como um novo documento HTML, e em
seguida, voltar a public-lo no Publisher.

Instrues para colocao de ficheiros com programao associada:


Ficheiros EXCEL:
Se pretender colocar ficheiros EXCEL associados sua pgina Web deve proteger o seu
cdigo fonte. Deste modo evita que o seu trabalho seja copiado por outros. O que deve
fazer? Abra o livro Excel e aceda ao editor do Visual Basic. No menu Tools, escolha a
opo VBAProject properties. No separador Protection da caixa de dilogo assinale
Lock project for viewing e escolha uma password. Clique OK e deste modo protege o
seu cdigo de ser copiado por qualquer um.

Ficheiros MATLAB:
Para criar um ficheiro executvel a partir de um script escrito no editor do MatLab,
considere o seguinte exemplo:
Suponhamos que tem um script chamado nome.m (uma palavra s, sem acentos,etc.).
Dando na janela de comandos do MatLab a instruo:
>> mcc -m nome.m
vai criar um ficheiro nome.exe que depois pode ser colocado na sua pgina WEB.
Quando clicar no ficheiro ele s executa e no vai ter acesso ao cdigo.
Prof Catarina Castro
-4-

Laboratrios de Informtica

MIEA 2012/13

2) Quando cria uma publicao no Publisher, este fica guardado com uma extenso de
ficheiro.pub. Depois necessrio public-lo em formato HTML. Fazer Save as do
ficheiro com o nome ficheiro.html escolhendo o tipo Pgina Web.

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

3) Finalmente, quando a sua pgina Web estiver pronta e para que esta fique disponvel
ao pblico, fazer Save as do ficheiro com o nome index.htm escolhendo o tipo Pgina
Web.
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.

Prof Catarina Castro


-5-

Laboratrios de Informtica

MIEA 2012/13

1. Noes Bsicas de Algoritmia e Programao VB

1.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.
1.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

Prof Catarina Castro


-6-

Laboratrios de Informtica

MIEA 2012/13

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:

Prof Catarina Castro


-7-

Laboratrios de Informtica

MIEA 2012/13

1.3 ESTRUTURA GERAL DE UM ALGORITMO:

1.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:
Long:
Single:
Double:
Variveis String:

Valores inteiros entre 32768 e 32767


Valores inteiros entre 2147483648 e 2147483647
Valores Reais de preciso simples entre +/-1.401298E-45
Valores Reais de preciso dupla entre e +/-3.402823E38

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
Prof Catarina Castro
-8-

Laboratrios de Informtica

MIEA 2012/13

1.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))

1.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

Prof Catarina Castro


-9-

Laboratrios de Informtica

MIEA 2012/13

1.7 INSTUES DE CONTROLO E SELECO


Instruo condicional simples:

Instruo condicional dupla:

Prof Catarina Castro


- 10 -

Laboratrios de Informtica

MIEA 2012/13

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

1.8 OPERADORES LGICOS

Prof Catarina Castro


- 11 -

Laboratrios de Informtica

MIEA 2012/13

1.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.

Prof Catarina Castro


- 12 -

Laboratrios de Informtica

MIEA 2012/13

Exemplo:

Outro exemplo:
a 10;
b - 4;
Enquanto b>a or b<0 faa

a = 10
b =-4
While b > a or b < 0

{b a - 1;

b=a1
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:

Prof Catarina Castro


- 13 -

Laboratrios de Informtica

MIEA 2012/13

1.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

Prof Catarina Castro


- 14 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 15 -

Laboratrios de Informtica

MIEA 2012/13

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= 13+53+33 .
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.

Prof Catarina Castro


- 16 -

Laboratrios de Informtica

MIEA 2012/13

1.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 x2;
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 );
Db2 - 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
76
68
68
8
8
4

r
8
4
0

r0
Verdadeiro
Verdadeiro
Falso

RESPOSTA: Percorreu o ciclo do enquanto 2 vezes e mdc( 76, 68) = 4 .


Prof Catarina Castro
- 17 -

Laboratrios de Informtica

MIEA 2012/13

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 diviso inteira de a por 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
5
4
3
2
1
0

F
1
1*5
1*5*4
1*5*4*3
1*5*4*3*2
1*5*4*3*2*1

n1
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.

Prof Catarina Castro


- 18 -

Laboratrios de Informtica

MIEA 2012/13

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);
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);

Prof Catarina Castro


- 19 -

Laboratrios de Informtica

MIEA 2012/13

2. 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.
2.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".
2.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

2.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.

Prof Catarina Castro


- 20 -

Laboratrios de Informtica

MIEA 2012/13

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.
2.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.

2.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.

2.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
Prof Catarina Castro
- 21 -

Laboratrios de Informtica

MIEA 2012/13

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

2.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.

2.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.
Prof Catarina Castro
- 22 -

Laboratrios de Informtica

MIEA 2012/13

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.
2.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

Prof Catarina Castro


- 23 -

Laboratrios de Informtica

MIEA 2012/13

Apontamentos de apoio aos exerccios que utilizam o pacote de estatstica


do Microsoft Excel
A instalao bsica do Excel no permite, por defeito, o acesso imediato ao pacote de
estatstica. Assim, necessrio fazer a sua instalao. Abra um livro Excel e siga as
sugestes seguintes:
1.

Comear por clicar na barra File e seleccionar Options

2. Seleccionar Add-Ins e Analysis ToolPak e clicar OK

Prof Catarina Castro


- 24 -

Laboratrios de Informtica

MIEA 2012/13

3. Verifique que se for barra de Data j tem do lado direito a possibilidade de


fazer Anlise de Dados:

4. Depois de introduzir dados na folha de clculo do EXCEL pode, por exemplo,


utilizar a anlise de dados seleccionando Estatstica Descritiva,

e seleccionar correctamente a localizao dos dados e dos resultados:

Prof Catarina Castro


- 25 -

Laboratrios de Informtica

MIEA 2012/13

5. Para construir o histograma deve comear por indicar quais as classes a

considerar e depois seleccionar a opo Histograma

seleccionar correctamente a localizao dos dados e dos resultados

Prof Catarina Castro


- 26 -

Laboratrios de Informtica

MIEA 2012/13

Prof Catarina Castro


- 27 -

Laboratrios de Informtica

MIEA 2012/13

2.10 Exerccios
n

1. A funo e x aproximada pelo polinmio Pn ( x) =

k =0

xk
para valores de
k!

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 Pn ( x) para n=2, 5 e 7. Calcule o erro relativo com que o
polinmio aproxima a funo e x nos diversos pontos e desenhe-o. Que concluses tira?

2.

Uma

funo

Pn,a ( x ) =

f (k ) (a )

k =0

f(x)

aproximada

( x a )k
para valores de
k!

pelo

polinmio

de

Taylor

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 Pn,a ( 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.

Prof Catarina Castro


- 28 -

Laboratrios de Informtica

MIEA 2012/13

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.

Apontamentos de apoio instalao da barra de DEVELOPER no Microsoft Excel


A instalao bsica do Excel no permite, por defeito, o acesso imediato barra de
DEVELOPER. Assim, necessrio fazer a sua instalao. Abra um livro Excel e siga as
instrues seguintes:
Comear por clicar na barra File e seleccionar Options. Depois clicar na categoria
Customize Ribbon na lista das Main Tabs e finalmente OK.

1 Exemplo simples de programao usando o editor de Visual Basic do EXCEL:


Na barra do Developer seleccionar Visual Basic

Prof Catarina Castro


- 29 -

Laboratrios de Informtica

MIEA 2012/13

Inserir uma janela de comandos (Userform) e um boto de comando

Clicar 2 vezes no boto de comando e inserir na janela do editor instrues em VB que


iro ser executadas por activao desse boto. Por exemplo:

Guardar o trabalho:

Prof Catarina Castro


- 30 -

Laboratrios de Informtica

MIEA 2012/13

Activar o boto de comando para executar as instrues:

1 Exemplo simples de programao usando o editor de macros do EXCEL:


Como gravar uma Macro?
Uma Macro uma aco ou conjunto de aces que podem ser executadas quantas
vezes quantas se quiser apenas com o clicar do rato. Depois de gravar uma Macro esta
pode ser editada, caso pretenda efectuar pequenas alteraes. Depois de gravada a nova

Prof Catarina Castro


- 31 -

Laboratrios de Informtica

MIEA 2012/13

Macro ser executada bastanto para tal dar a ordem, ou seja, apenas com um clicar do
rato do computador.
Na barra do Developer, usando o grupo CODE, clicar em Recor Macro e depois
seleccionar OK para comear a gravar. Experimente algumas aces na sua folha de
clculo, tais como inserir dados ou escrever uma frmula. Finalmente na barra do
Developer, usando o grupo CODE, clicar em Stop Recording. Para aprender um pouco
sobre a linguagem de programao Visual Basic, veja como ficou a Macro. Tente editar
a Macro. Execute a Macro e veja se algo de diferente executado.
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

Prof Catarina Castro


- 32 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 33 -

Laboratrios de Informtica

MIEA 2012/13

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:

Prof Catarina Castro


- 34 -

Laboratrios de Informtica

MIEA 2012/13

e para executar esta instruo basta clicar no boto:

Prof Catarina Castro


- 35 -

Laboratrios de Informtica

MIEA 2012/13

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:

Prof Catarina Castro


- 36 -

Laboratrios de Informtica

MIEA 2012/13

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.
Prof Catarina Castro
- 37 -

Laboratrios de Informtica

MIEA 2012/13

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

Prof Catarina Castro


- 38 -

Laboratrios de Informtica

MIEA 2012/13

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.)

Prof Catarina Castro


- 39 -

Laboratrios de Informtica

MIEA 2012/13

Exemplo:
Option Explicit

Option Explicit

Sub mensagem_minha( )

Dim mensagem As String

Dim mensagem As String


mensagem = "Vamos ver este exemplo"

Sub mensagem_minha( )

MsgBox mensagem

mensagem = "Vamos ver este exemplo"

End Sub

MsgBox mensagem

Sub mensagem_tua( )

End Sub

Dim mensagem As String

Sub mensagem_tua( )

mensagem = "Qual exemplo?"

mensagem = "Qual exemplo?"

MsgBox mensagem

MsgBox mensagem

End Sub

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?

Prof Catarina Castro


- 40 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 41 -

Laboratrios de Informtica

MIEA 2012/13

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

y=" LI "

em que y fica com o valor LI

ou

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

Prof Catarina Castro


- 42 -

Laboratrios de Informtica

MIEA 2012/13

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

Prof Catarina Castro


- 43 -

Laboratrios de Informtica

MIEA 2012/13

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

Prof Catarina Castro


- 44 -

Laboratrios de Informtica

MIEA 2012/13

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( )

Sub torres_hanoi(N, origem, temp, destino)

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

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

End Sub

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.

Prof Catarina Castro


- 45 -

Laboratrios de Informtica

MIEA 2012/13

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.
Prof Catarina Castro
- 46 -

Laboratrios de Informtica

MIEA 2012/13

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 x0, e num processo de obter sucessivamente novas iteradas
xn+1 a partir das anteriores xn, ... 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 [ an, bn ] com metade do
comprimento dos anteriores, onde se assegura a existncia da raiz.
O mtodo pode-se esquematizar:
Intervalo Inicial : [ a0, b0 ] = [ a, b ]
Repetir:
1) xn+1 = ( an + bn) / 2
2) Se f (xn+1) f(an) < 0
Ento an+1 = an; bn+1 = xn+1
Seno an+1 = xn+1; bn+1 = bn
At que :

f(xn+1) = 0 ou |xn+1-xn| <

O critrio de paragem utilizado |xn+1-xn| < onde o valor >0 um valor


suficientemente pequeno, o erro absoluto verifica | en+1 | < |an - bn| = |xn+1 - xn| < .
Pode-se determinar facilmente um majorante do erro para uma iterada xn a partir do
comprimento do intervalo inicial:
| en| < |an-1 - bn-1| = (1 / 2)n | a0 - b0|
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 x4 - 4 x3 - x + 5 = 0 e 2 ex - 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.
Prof Catarina Castro
- 47 -

Laboratrios de Informtica

MIEA 2012/13

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: xi = 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:
1

a) e x

dx ( 0.746825)

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

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.

Prof Catarina Castro


- 48 -

Laboratrios de Informtica

MIEA 2012/13

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
no jogo.
Dado o nmero de jogadores, o nmero de quadrados no percurso e a posio das
armadilhas escrever um programa que determine o vencedor do jogo.

6. Jogo do 4 em Linha Pretende-se com este trabalho que seja desenvolvida a interface
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-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
(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.

7. Jogo do galo
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
ganhos e empatados por cada jogador.

8. Outros jogos: Dados, mastermind...


9. Jogo das cores: Seleccionam-se 3 cores aleatoriamente. Se as 3 cores forem iguais o
jogador recebe 10 euros, caso contrrio perde 5 euros.
Prof Catarina Castro
- 49 -

Laboratrios de Informtica

MIEA 2012/13

3.13 Exerccios resolvidos:


A. Escreva em VB um procedimento do tipo function para calcular
x+3
f ( x, y , z ) =
+ 3 ( 3z )
2 3 4 ( y 2 + 1)
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
jogo = "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.

Prof Catarina Castro


- 50 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 51 -

Laboratrios de Informtica

MIEA 2012/13

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, = 1
2

Escreva uma Function em Vb, Function Fibonacci (n as integer) as integer, com


parmetro de entrada n e que calcula un, 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.

Prof Catarina Castro


- 52 -

Laboratrios de Informtica

MIEA 2012/13

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
Wend
End Function

' verifica se n tem divisores

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
Prof Catarina Castro
- 53 -

Laboratrios de Informtica

MIEA 2012/13

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 no lectivo 2011/2012 MATLAB 7.12.0.635 (R2011a).

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
Prof Catarina Castro
- 54 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 55 -

Laboratrios de Informtica

MIEA 2012/13

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 R2
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.
Prof Catarina Castro
- 56 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 57 -

Laboratrios de Informtica

MIEA 2012/13

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)
Prof Catarina Castro
- 58 -

Laboratrios de Informtica

MIEA 2012/13

4.8 Exerccios:
1. Calcule as expresses seguintes para diferentes valores de x:
1
sen x
c) x sec 2 ( x 2 ) + e
a)
b)
3
3 + cos x + 2 sen x
( 4x x2 ) 2

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

y=

1
+ 3 3x7
x +1

z=

5
x + x+3
2

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


f ( x) =

x5
+ x
x2 + 1

g ( x ) = x 3 / 2 + 52 x 2

h( x) =

ex x 1
x2

4. Utilize um nico grfico para desenhar as funes


f ( x ) = sec( x ) + cosec( x )

g ( x ) = x 2 tg ( x 3 )

5. Faa os grficos das funes


f ( x ) = ln( arc cos( x )) + tg (ln( x ))

g ( x ) = sen 2 ( x + 1) + tg ( x 3 )

6. Utilize um nico grfico para desenhar pelo menos duas das trs funes
g ( x ) = 2tg (e x ) 5sec( x ) +

f ( x ) = cos( x ) + sen 2 ( x )

tg ( x ) + arcsen( x 2 + 1)
h( x) =
cos 2 ( x )

7. Considere f ( x ) =

sen x
3 + cos x + 2 sen x

g ( x) =

1
3

( 4x x2 )2

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

8. Resolva as equaes:
a)

x3 + 3 x e x = 0

b)

1
arcsen
2
1+ x

=0

c)

arctg ( x ) = x 2 .

Prof Catarina Castro


- 59 -

Laboratrios de Informtica

MIEA 2012/13

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=
00000
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=
1111
1111
>> 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 =
24

Prof Catarina Castro


- 60 -

Laboratrios de Informtica

MIEA 2012/13

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=
1234
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
A(2:3, 1:2) % selecciona uma sub-matriz

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

ans =
3
ans =
56
9 10

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

Prof Catarina Castro


- 61 -

Laboratrios de Informtica

MIEA 2012/13

Outras operaes sobre matrizes:


inv inversa

eye matriz identidade

A. transposta

rot90 rotao dos elementos da matriz

rank caracterstica

fliplr inverter matrix left-to-right

det determinante

flipud inverter matrix up-and-down

eig valores e vectores prprios

diag extrair a diagonal principal

norm norma

tril lower triangular part

rand elementos aleatrios

triu upper triangular part

4.13 Operadores aritmticos, relacionais e lgicos

Operadores aritmticos

Operadores aritmticos sobre matrizes

+ Adio

.+ Somar por elemento

- Subtraco

.- Subtrair por elemento

* Multiplicao

.* Multiplicao por elemento

/ Diviso direita (a/b=a*b-1)

./ Diviso por elemento

\ Diviso esquerda (a\b=a-1*b)

.^ Potncia por elemento

^ Potncia

Exemplos: A = [1 2; 3 4];

A^2 % o quadrado da matriz, A*A

A.^2 % o quadrado de cada elemento

ans =

da matriz.

7 10

ans =

15 22

14
9 16

Operadores Relacionais

Operadores Lgicos

==

negao

~= no igual a

&

conjuno

<

menor que

disjuno

>

maior que

xor ou exclusivo

<=

menor ou igual a

>=

maior ou igual a

igual a

Prof Catarina Castro


- 62 -

Laboratrios de Informtica

MIEA 2012/13

4.14 Valores booleanos: 1 True; 0 False


Exemplos:

Seja v1=1; v2= - 4; v3=5 e v4=0

Expresso lgica

Resultado

v1==1

Verdadeiro

v1>v2 & v3<v4

Falso

~(-2<v1 | v1<=5)

Falso

-5<v2<-3

Falso

xor (v1>v2 , v3<v4)

Verdadeiro

(v4~=0) && (v3/v4<5)

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

if expression1

passagem=1

statements1

else

elseif expression2

passagem=0

statements2

end

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

Prof Catarina Castro


- 63 -

Laboratrios de Informtica

MIEA 2012/13

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: ')
Armazena o resultado de
Introduza uma expresso aritmtica: 5*cos(pi/4)
uma expresso
r1 =
3.5355
>> A=input('Introduza uma matriz: ')
Define uma matriz
Introduza uma matriz: [1 2 3; 6 7 8]
A=
1 2 3
6 7 8
>> leitura=input('Introduza um texto: ')
Define um texto
Introduza um texto: 'Quer continuar?'
leitura =
Quer continuar?
>> A=input('Introduza uma matriz: \n ')
\n (= mudana de linha)
Introduza uma matriz:
[1 2 3]
A=
1 2 3
Var = input(texto,s)
>> Var = input('texto?\n','s')
texto?
Estou na aula
Var =
Estou na aula
>> Pergunta=input('O que isto? ','s')
O que isto? [1 2 3; 6 7 8]
Pergunta =
[1 2 3; 6 7 8]
Instrues de sada :
>> x=2*cos(pi/4)
x=
1.4142
>> disp(rand(2));
0.8147 0.1270
0.9058 0.9134
>> fprintf('O valor de Pi = %f \n',pi)
O valor de Pi = 3.141593

Armazena um texto

Interpreta sempre como sendo um texto

Instrues sem ;

Funo disp;

Funo fprintf

Prof Catarina Castro


- 64 -

Laboratrios de Informtica

MIEA 2012/13

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)
b)
c)
d)
e)

Calcule a norma do vector;


Calcule a soma dos elementos do vector;
Calcule a mdia dos elementos do vector;
Calcule o produto dos elementos de ndice mpar do vector;
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-1A = 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) /

(&

)(& ')

&01

e) )3 | . !| 0.5 10 5;
f) 6 7+ (208 );

Prof Catarina Castro


- 65 -

Laboratrios de Informtica

MIEA 2012/13

4.17 Exerccios Resolvidos:


A. Escreva em VB ou MATLAB as seguintes instrues de atribuio, considerando
todas as variveis como escalares:
) 91 0.5 10 > ln @ + A:!B ;
a) 9 : ! sen(n ) ;
C) D +

FG
J
HIG

d) L

!/cos ( + ) ;

Resposta possvel:
A.
a)
b)
c)
d)

VB
r = Sqr(x^2-y^2)*Sin(n*alfa)
r1=0.5e-4*Ln(x+y^(1/3))
R = Exp(-1/(n+1))
Pi = Atn(1) * 4
k = x*y/Cos(Pi/2+n)

Matlab
r = sqrt(x^2-y^2)*sin(n*alfa)
r1=0.5e-4*log(x+y^(1/3))
R = exp(-1/(n+1))
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) )

b) )5

3 M , = 0; N7C9+O ());

, + | ,| > 10 > ; N7C9+O ()5) ;

c) 7+ Q = 0 + RM T 1 7+ M T :1 + 1/Q; N7C9+O (T);


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.
Prof Catarina Castro
- 66 -

Laboratrios de Informtica

b)

MIEA 2012/13

>> 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) 9

cos(U R) ;

C) D 7+ E

+ XJ ;

) 91 +
d) L

VW

:& Y 1 Y
&0'Z

& 1
:1 [

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

k=sqrt(x^2-y^2)/(x+3^y)+(x-

^ 2.5

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 M , = 0
b) )5 ( M > 3) + > 0
c) 7+ \ ^`Rab`M c+ 5 M c+ 7 + RM \ \ 2; N7C9+O (\);
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

Prof Catarina Castro


- 67 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 68 -

Laboratrios de Informtica

MIEA 2012/13

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)

Execute o programa PlotSin na

X = 0:pi/16:pi;

janela de comandos do MATLAB.

Y = sin(X);
figure(1); clf;

>> PlotSin
O seguinte grfico ser visualizado:

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)');

Comentrio: O comando plot requer dois

grid;

vectores de igual dimenso.

hold off;

Prof Catarina Castro


- 69 -

Laboratrios de Informtica

MIEA 2012/13

Exemplo 2: Escreva um programa em MatLab que construa o grfico do polinmio


p(x) = x5 10 x4 + 35 x3 50 x2 + 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).

Prof Catarina Castro


- 70 -

Laboratrios de Informtica

MIEA 2012/13

% 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
Prof Catarina Castro
- 71 -

Laboratrios de Informtica

MIEA 2012/13

Exemplo 5 : Implemente em Matlab a funo f2ramos definida por:


e(f) = g

jh i < 0
h i
k + lmnop(i) jh i 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

\n muda de linha

decimais

%g real na forma mais compacta

0 os espaos so preenchidos por zeros

Prof Catarina Castro


- 72 -

Laboratrios de Informtica

MIEA 2012/13

Exemplo 6 : Escreva as seguintes funes MatLab nos ficheiros f.m and G.m.

function y = f(x)

function W = G(Z) % Z vector linha com 2 componentes

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

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)

G([2 1])

ans =

ans =

1.85463599915323

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

Prof Catarina Castro


- 73 -

Laboratrios de Informtica

MIEA 2012/13

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

>> clear variables

>> a=1;b=sin(a)+exp(a);load fich1 a b

>> 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

Prof Catarina Castro


- 74 -

Laboratrios de Informtica

MIEA 2012/13

5.4.2 Ciclo FOR

for varivel = expresso


{<instrues executveis>}

end

Exemplo 7:

Exemplo 8:

Exemplo 9:

for k=1:100,

sum1 = 0;

sum2 = 0;

x=sqrt(k);

for k = 1:1:10000,

for k = 10000:-1:1,

if x>5, break, end

sum1 = sum1 + 1/k;

sum2 = sum2 + 1/k;

end

end

end

sum1

sum2

sum1 =

sum2 =

9.78760603604434

9.78760603604439

A instruo break interrompe o ciclo


A instruo Pause gera uma pausa na execuo do programa

5.4.3 Ciclo WHILE

Exemplo 11:

while <expresso>
{ <instrues executveis>} m = 10;

end

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

Prof Catarina Castro


- 75 -

Laboratrios de Informtica

MIEA 2012/13

5.5 Outras funes do MatLab

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

Funes Matemticas:

cos(x) cosine (radians)

fix(x) round towards zero

sin(x) sine (radians)

floor(x) round towards -

tan(x) tangent (radians)

ceil(x) round towards +

cosd(x) cosine (degrees)

sign(x) signum function

sind(x) sine (degrees)

cosh(x) hyperbolic cosine

tand(x) tangent (degrees)

sinh(x) hyperbolic sine

exp(x) exponential exp(x)

tanh(x) hyperbolic tangent

acos(x) inverse cosine (radians)

acosh(x) inverse hyperbolic cosine

asin(x) inverse sine (radians)

asinh(x) inverse hyperbolic sine

atan(x) inverse tangent (radians)

atanh(x) inverse hyperbolic tangent

log(x) natural logarithm base e

real(z) real part of complex number z

log10(x) common logarithm base 10

imag(z) imaginary part of complex number z

sqrt(x) square root

conj(z) complex conjugate of the complex number z

abs(x) absolute value

angle(z) argument of complex number z

round(x) round to nearest integer

rem(p,q) remainder when p is divided by q

Funes para Anlise de Dados:

max maximum value


min minimum value

cumsum cumulative sum of elements

mean mean value

cumprod cumulative product of elements

median median value

diff approximate derivatives (differences)

std standard deviation

hist histogram

sort sorting

corrcoef correlation coefficients

sum sum the elements

cov covariance matrix

prod form product of the elements

Prof Catarina Castro


- 76 -

Laboratrios de Informtica

MIEA 2012/13

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.

Prof Catarina Castro


- 77 -

Laboratrios de Informtica

MIEA 2012/13

5.7 Exerccios de introduo Programao em MatLab


5

Uma equao do 2 grau tem a forma genrica


+
+ C = 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.

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

q baR ` Ta ` = q baR ` a aCa ` (1 + R)r


onde R a taxa de juro aplicada (0 < R < 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.
7

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.

Escreva uma funo em MatLab para procurar numericamente o limite

lim T( )

&v

Para procurar numericamente este limite pode avaliar f(x) para a seguinte
w
w
w
sucesso: + , + Y , , + H , para valores de b e n dados sendo h
x
x
x
escolhido convenientemente. Experimente para b=5, h=1 e n=10 calculando
a) lim& E
9

z{ &

&Y

b)

lim& (7+ )&

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.

Prof Catarina Castro


- 78 -

Laboratrios de Informtica

MIEA 2012/13

LABORATRIOS DE INFORMTICA - MIEA


RESOLUO dos Exerccios 1 a 6 do TESTE de 20 de Janeiro 2011
1. Escreva em VB ou MATLAB as seguintes instrues de atribuio, considerando todas
as variveis como escalares:
%
b)
: ' + ! ' cos(
) ;
) , 2.5 105 ln E + J ;
C) q +

@ A10&B

d)

/sen ( 1 + 1/R) ;

Resposta possvel:
1.
VB
a)
A = Sqr(x ^ 3 + y ^ 3) * Cos(-1 / (n + 1))

Matlab
A=sqrt(x^3+y^3)*cos(1/(n+1));
B=2.5e5*log(pi/2+n);

c)

Pi = Atn(1) * 4
B = 250000 * Log(Pi / 2 + n)
C = Exp((x + y) ^ (1 / 3))

d)

D = x / Sin(1 + 1 / t)

D=x/sin(1+1/t);

b)

C=exp((x+y)^(1/3));

2. Escreva as seguintes expresses em MatLab e indique o resultado, comeando por atribuir


valores a x e y.

a)

b)

c)

0 + ! 1/ ; N7C9+O ( );

+ !; 7+ L < 0 + RM , 10 >

7+ M , L 10 > ;
N7C9+O (,) ;
3; b 9 a 1 R T }
N7C9+O ( );

+ a;

Resposta possvel:

2.
a)
b)
c)

MatLab

Resultado

x=2;y=1;A=x~=0&&y>=1/x;disp(A);
x=2;y=1;k=x+y;
if k<0,B=1.e-4;else B=k*1.e-4;end,disp(B);
x=2;n=3;for i=1:n, x=x+i;end,disp(x);

A = 1
B = 3. e-004
x = 8

3. Em MatLab a instruo randint(30,1, [1,6]) simula o resultado de 30 lanamentos de um dado.


Usando esta instruo escreva:
a)

um script em Matlab para contar o nmero de vezes que em 30 lanamentos de um dado sai um
resultado mpar;

b) um script em Matlab para contar o nmero de vezes que em 30 lanamentos de um dado a soma
dos resultados de 2 lanamentos consecutivos superior a 6.

Prof Catarina Castro


- 79 -

Laboratrios de Informtica

MIEA 2012/13

Resposta possvel:

3.
a)
b)

MatLab
X=randint(30,1,[1,6]);R=mod(X,2);disp(sum(R));
X=randint(30,1,[1,6]);c=0; for i=1:29,z(i)=X(i)+X(i+1);
if z(i)>6,c=c+1;end,
end,disp(c);

4. Escreva um algoritmo que determine o valor mximo e o valor mnimo de N nmeros reais a
introduzir.

Resposta possvel:
Cabealho:
Objectivo: Determinar o valor mximo e
o valor mnimo de N nmeros reais;
V. Dados:
N, inteiro, quantidade de nmeros
reais;
X, real, nmeros reais a introduzir;
V. Resultado:
Max, real, mximo a calcular;
Min, real, mnimo a calcular;
V. Aux: i, inteiro, contador de ciclo.

Corpo:
Leia (N);
Leia(X); MaxX; MinX;
Para i 2 at N faa
Leia(X);
Se X > Max ento
Se X< Min ento

Max X;
Min X;

Escreva (Max,Min);

5. Considere o seguinte algoritmo que verifica se um nmero natural N dado primo ou no:
Cabealho:
Corpo:
Objectivo:
Leia (N); R Verdadeiro; d2;
V.Dados:
Enquanto R =Verdadeiro e d<N faa
V. Resultado:
se N mod d=0 ento RFalso;
V. Aux:
dd+1;
Escreva ( R );
a)

Percorra o algoritmo para N=7. Quantas vezes executou o ciclo do enquanto ?

RESPOSTA:
R

R=Verdadeiro e
d<N
7
Verdadeiro
2
Verdadeiro
3
Verdadeiro
4
Verdadeiro
5
Verdadeiro
6
Verdadeiro
7
Falso
RESPOSTA: Percorreu o ciclo do enquanto 5 vezes.

N mod d=0
Falso
Falso
Falso
Falso
Falso

b) Preencha o cabealho do algoritmo.

Prof Catarina Castro


- 80 -

Laboratrios de Informtica

MIEA 2012/13

Resposta possvel:
Cabealho:
Objectivo: Verificar se um nmero natural N primo;
V.Dados:
N, inteiro, nmero natural a introduzir;
V. Resultado: R, Booleana, toma o valor Verd se N primo, toma o valor Falso
se N no primo;
V. Aux:
d, inteiro, divisores possveis de N;
c) Escreva uma funo em Vb, Function primo (ByVal N As Integer ) As Boolean
que permita determinar se um nmero inteiro primo ou no.

Resposta possvel:

Function primo(ByVal n As Integer) As Boolean


Dim R As Boolean
Dim d As Integer
R = True
d=2
While R = True And d < n
If n Mod d = 0 Then
R = False
End If
d=d+1
Wend
primo = R
End Function

6. A sequncia de Collatz pode ser definida do modo seguinte: inicia-se com qualquer nmero natural
n0 maior do que 1; o nmero seguinte na sequncia, ni+1, obtem-se do anterior adicionando 1 ao seu
triplo se o anterior for mpar ou dividindo-o por 2 se este for par. Repete-se o processo at se atingir o
nmero 1. Por exemplo, iniciando a processo com o nmero 52, a sequncia ser: 52 26 13 40 20
10 5 16 8 4 2 1.
Escreveu-se em VB a seguinte funo que calcula o elemento seguinte da sequncia:

Function Seguinte (ByVal N as Integer) as Integer


Dim NS as Integer
If N Mod 2 then
NS=3*N+1
NS=N/2
Seguinte=NS
End Function
a) Esta function est errada.
Altere ou acrescente instrues de modo que esta calcule o termo seguinte da sequncia.

Prof Catarina Castro


- 81 -

Laboratrios de Informtica

MIEA 2012/13

Resposta possvel a):

Function seguinte(ByVal n As Integer) As Integer


Dim NS As Integer
If n Mod 2 < > 0 Then
NS = 3 * n + 1
Else
NS = n / 2
End If
seguinte = NS
End Function
b) Escreva em VB um procedimento do tipo Sub, Sub Collatz( ), que leia um nmero
inicial e escreva a sequncia da em diante at 1, considerando a chamada da funo
definida anteriormente.
Resposta possvel b):

Sub collatz( )
Dim n As Integer
Dim escrita As String
n = Val(InputBox("Introduza o valor inicial n"))
escrita = Str(n)
While n > 1
n = seguinte(n)
escrita = escrita + " " + Str(n)
Wend
MsgBox (escrita)
End Sub

Prof Catarina Castro


- 82 -

Laboratrios de Informtica

MIEA 2012/13

LABORATRIOS DE INFORMTICA - MIEA


RESOLUO dos Exerccios 1 a 5 do TESTE de 7 de Fevereiro 2011
1. Escreva em VB ou MATLAB as seguintes instrues de atribuio, considerando
todas as variveis como escalares:
[
+ ! + @&B ; ) , 2.5 : ' + ! ' ;
c)
C) q sen(X9 );
d)
R~ ( R + 1/(1 + R)) ;
Resposta possvel:
1.
VB
a)
A = x + y * Exp(Sqr(x))
b)
B= 2.5 * (x ^ 3 + y ^ 3) ^ (1 / 5)
c)
Pi = Atn(1) * 4
C = Sin(Pi * r ^ 2)
d)
D = x * Tan(t + 1 / (1 + t))

Matlab
A = x+y*exp(sqrt(x));
B= 2.5*(x^3+y^3)^(1/5);
C = sin(pi*r^2);
D = x*tan(t+1/(1+t));

2. Escreva em VB ou MATLAB cada bloco de instrues e indique o resultado:


a) 10; ! 20;
0 + ! 1/ ; N7C9+O ( );
b)

3; ! | |; L
N7C9+O (L) ;

+ !; 7+ L 0 + RM }L 10 > ;

c)

1;

3; b 9 a 1 R T }

a;

N7C9+O ( );
d)

M^ 0;

1;

3; N

M^ M^ + ;
RM < T g
+ 1;

N7C9+O (M^ );

Resposta possvel:

2.
a)
b)
c)
d)

MatLab
x=10;y=20; A=x~=0 && y>=1/x; disp (A);
x=-3;y=abs(x); k=x+y;
if k~= 0, k=1.e-4;end, disp(k);
x=1;n=3; for i=1 : n, x=x*i; end, disp(x);
Soma=0; x=1; n=3;
while x<n, Soma=Soma+x^2;x=x+1; end, disp(Soma);

Resultado
A=1
k=0
x=6
Soma=5

Prof Catarina Castro


- 83 -

Laboratrios de Informtica

MIEA 2012/13

Resposta possvel:

2.
a)

b)

c)

d)

VB
x=10
y=20
A=x< >0 And y>=1/x
Msgbox(A)
x=-3
y=Abs(x)
k=x+y
if k< >0 Then
k=1.e-4
End if
Msgbox (k)
x=1
n=3
For i=1 To n
x=x*i
Next i
Msgbox(x)
Soma=0
x=1
n=3
While x<n
Soma=Soma+x^2
x=x+1
Wend
Msgbox(Soma)

Resultado
A=True

k=0

x=6

Soma=5

3. Considere que mensalmente o nmero mdio de visitantes a um determinado museu


varia entre 20 e 120. A instruo do MatLab
A=20+100*rand (12,1);
cria um vector com 12 componentes que, de acordo com o director do museu, permite
simular o nmero mdio mensal de visitantes nos 12 meses do ano de 2011.
a) Considerando que o preo pago por cada visitante de 5 euros, escreva um
script em Matlab para calcular qual o valor anual arrecadado pelo museu com o
pagamento das entradas (a instruo A=20+100*rand (12,1); deve ser utilizada).
Resposta possvel:
A=20+100*rand(12,1);

valor=5*sum(A);

disp(valor);

b)Considerando que no incio do ano (1 de Janeiro) o stock de postais na loja do museu


de 500 unidades e que cada visitante leva um postal, escreva um script em Matlab
para calcular em que ms iro os postais esgotar?
Resposta possvel:
A=20+100*rand(12,1); total=500;i=0;
while total>0, i=i+1;total=total-A(i); end, disp(i);

Prof Catarina Castro


- 84 -

Laboratrios de Informtica

MIEA 2012/13

c)
No incio do ano, o director do museu determinou que a prxima encomenda de
postais seja feita quando o stock baixar para 50. Utilizando os dados fornecidos, escreva
um script em Matlab para determinar para que ms se deve agendar essa encomenda?
Resposta possvel:
A=20+100*rand (12,1);total=500;i=0;
while total>50, i=i+1;total=total-A(i); end, disp(i);

4. a) Dado um conjunto de N nmeros inteiros positivos, escreva um algoritmo que

calcule quantos desses nmeros so simultaneamente mltiplos de 5 e de 7.


Exemplo: para N=6 e dado o conjunto = }2, 70, 42, 35, 14, 5 o resultado 2.
Cabealho:
Corpo:
Objectivo: Dado um conjunto de N Leia (N); conta 0;
nmeros inteiros positivos, quantos desses
Para i 1 at N faa
inteiros so simultaneamente mltiplos de 5
Leia(X);
e de 7.
V.Dados: N, inteiro, dimenso do
Se (X mod 5)=0 e (X mod 7)=0 ento
conjunto;
conta conta+1;
X,

inteiro,

elementos

do

conjunto;

V. Resultado: conta, inteiro, contador do


n de mltiplos de 5 e de 7;

Escreva ( conta );

V. Aux:

a) Percorra o seu algoritmo para o exemplo indicado na alnea anterior.


RESPOSTA:
N
conta
6

0
1
2

(X mod 5)=0 e (X mod


7)=0

1
2
3
4
5
6

2
70
42
35
14
5

Falso
Verdadeiro
Falso
Verdadeiro
Falso
Falso

b)Escreva um procedimento em VB do tipo Sub, Sub conta_multiplos ( ),que leia


um conjunto de nmeros inteiros e calcule quantos desses nmeros so ao mesmo
tempo mltiplos de 5 e de 7.

Prof Catarina Castro


- 85 -

Laboratrios de Informtica

MIEA 2012/13

Resposta possvel:
Sub conta_multiplos ( )
Dim N, conta, i, X as integer
N=Val(InputBox(N?))
conta=0
For i=1 To N
X=Val(InputBox(Introduza X))
If X Mod 5 =0 And X Mod 7=0 Then
conta=conta+1
End If
Next i
Msgbox(conta)
End Sub

5. Considere a conjectura de Goldbach, para os nmeros pares: "Todo o nmero par


maior ou igual a 4 a soma de dois nmeros primos." Exemplos: 8 = 3 + 5;
Escreva um procedimento em VB do tipo Sub, Sub Goldbach ( ), que leia um nmero
natural par maior ou igual a 4 e escreva os 2 nmeros primos que verificam a conjectura
de Goldbach. O procedimento desenvolvido deve considerar a chamada da funo
Function verifica (ByVal N As Integer ) As Boolean definida abaixo que verifica se um
nmero inteiro maior do que 1, primo ou no (no tem que reescrever a funo).

Resposta possvel:
Sub Goldbach( )
Dim n, i As Integer
Dim gold As Boolean
gold = False
n = Val(InputBox("Introduza o valor n>=4"))
i=1
While i <= n \ 2 And gold = False
i=i+1
gold = verifica(i) And verifica(n - i)
Wend
MsgBox ("O nmero par " & n & ">= 4 a soma dos primos " & i & " e " & n - i)
End Sub

Prof Catarina Castro


- 86 -

Potrebbero piacerti anche