VBA Apontamentos
VBA Apontamentos
VBA 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
2.
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
20
29
Laboratrios de Informtica
MIEA 2012/13
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
79
Laboratrios de Informtica
MIEA 2012/13
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.
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.
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:);
Laboratrios de Informtica
MIEA 2012/13
Exemplo
Calcular a rea de um rectngulo sendo dados os valores do comprimento e da largura.
Corpo do ALGORITMO:
LEIA (comprimento, largura);
area comprimento * largura;
ESCREVA (area);
Cdigo VB:
Private Sub CommandButton1_Click ()
Dim comprimento, largura, area As Double
comprimento = Val(InputBox("Comprimento?"))
largura = Val(InputBox("Largura?"))
area = comprimento * largura
MsgBox (Str(area))
End Sub
Laboratrios de Informtica
MIEA 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:
Laboratrios de Informtica
MIEA 2012/13
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:
Laboratrios de Informtica
MIEA 2012/13
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))
Laboratrios de Informtica
MIEA 2012/13
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:
Laboratrios de Informtica
MIEA 2012/13
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
Exemplo:
Laboratrios de Informtica
MIEA 2012/13
b)
Private Sub CommandButton1_Click( )
Dim exame As Double
Dim nota As Integer
Dim classificao As String
Do
exame = Rnd( ) * 20
MsgBox (exame)
nota = Round(exame)
If nota < 10 Then
classificao = "Reprovado"
Else
Select Case nota
Case 10 To 13
classificao = "Suficiente"
Case 14 To 17
classificao = "Bom"
Case 18 To 20
classificao = "Muito Bom"
End Select
End If
MsgBox (Str(nota) & " " & classificao)
Loop Until nota = 20
End Sub
Laboratrios de Informtica
MIEA 2012/13
1. Escreva um algoritmo que calcule as razes reais de uma equao real de 2 grau.
2.
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Corpo:
Leia (a, b); r a mod b;
Enquanto r 0 faa
a b;
b r;
r a mod b;
Escreva ( b );
r
8
4
0
r0
Verdadeiro
Verdadeiro
Falso
Laboratrios de Informtica
MIEA 2012/13
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
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);
Laboratrios de Informtica
MIEA 2012/13
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
Laboratrios de Informtica
MIEA 2012/13
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
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
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
2.10 Exerccios
n
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.
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Guardar o trabalho:
Laboratrios de Informtica
MIEA 2012/13
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
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.
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.
Function e End Function que retorna um valor especfico executa uma srie de
instrues.
Exemplo de desenvolvimento de um procedimento:
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
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.
Laboratrios de Informtica
MIEA 2012/13
ou
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.
Laboratrios de Informtica
MIEA 2012/13
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.
Dim i As Integer
For i = 1 To 20
Cells(i, 5).Value = Rnd( ) + 5
Next i
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Exemplo:
Option Explicit
Option Explicit
Sub mensagem_minha( )
Sub mensagem_minha( )
MsgBox mensagem
End Sub
MsgBox mensagem
Sub mensagem_tua( )
End Sub
Sub mensagem_tua( )
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
Laboratrios de Informtica
MIEA 2012/13
3.7 Operadores
Exemplo:
Laboratrios de Informtica
MIEA 2012/13
y=" LI "
ou
Dim r As Range
Set r =Range("A1:C3")
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:
Por exemplo se o conjunto fosse o "Select", o ciclo seria executado tantas vezes quantas
as clulas que estiverem selecionadas:
Dim y As String
y = InputBox("Comentrio")
For Each x In Selection
y=y+y
If Len(x.Value) < 20 Then
x.Value = y
End If
Next x
Laboratrios de Informtica
MIEA 2012/13
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.
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( )
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
Laboratrios de Informtica
MIEA 2012/13
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.
Trata-se de fazer uma aproximao da funo integranda, usando uma spline linear.
Prof Catarina Castro
- 47 -
Laboratrios de Informtica
MIEA 2012/13
Neste caso, a frmula do erro da regra dos trapzios composta dada por
a) e x
dx ( 0.746825)
0
1
1
b) sen
dx ( 0.5945)
x
+
0.1
Laboratrios de Informtica
MIEA 2012/13
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.
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
= 0, = 1
2
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
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).
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:
Laboratrios de Informtica
MIEA 2012/13
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])
Laboratrios de Informtica
MIEA 2012/13
>> 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
y=
1
+ 3 3x7
x +1
z=
5
x + x+3
2
x5
+ x
x2 + 1
g ( x ) = x 3 / 2 + 52 x 2
h( x) =
ex x 1
x2
g ( x ) = x 2 tg ( x 3 )
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
8. Resolva as equaes:
a)
x3 + 3 x e x = 0
b)
1
arcsen
2
1+ x
=0
c)
arctg ( x ) = x 2 .
Laboratrios de Informtica
MIEA 2012/13
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(:)
A(:,3)
Representa a 3 coluna de A
X(end)
B=A(:,2)
A(:,1)=[ ]
A(3)
A(end,:)
Laboratrios de Informtica
MIEA 2012/13
A. transposta
rank caracterstica
det determinante
norm norma
Operadores aritmticos
+ Adio
- Subtraco
* Multiplicao
^ Potncia
Exemplos: A = [1 2; 3 4];
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
Laboratrios de Informtica
MIEA 2012/13
Expresso lgica
Resultado
v1==1
Verdadeiro
Falso
~(-2<v1 | v1<=5)
Falso
-5<v2<-3
Falso
Verdadeiro
if expression1
passagem=1
statements1
else
elseif expression2
passagem=0
statements2
end
else
statements3
end
>> k=3;
>> for m=1: k , a(m)=1/m; end
>> a
a=
1.0000
0.5000
0.3333
Laboratrios de Informtica
MIEA 2012/13
Armazena um texto
Instrues sem ;
Funo disp;
Funo fprintf
Laboratrios de Informtica
MIEA 2012/13
2.
a) ! cos ( '( );
b) ) 3 + , 0;
c) )2 < , < 2;
d) /
(&
)(& ')
&01
e) )3 | . !| 0.5 10 5;
f) 6 7+ (208 );
Laboratrios de Informtica
MIEA 2012/13
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)
a) )
b) )5
3 M , = 0; N7C9+O ());
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)
f=2 ou f=1.4142
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
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.
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
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
Laboratrios de Informtica
MIEA 2012/13
Resposta Possvel:
a)
b)
30 70
Laboratrios de Informtica
MIEA 2012/13
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).
X = 0:pi/16:pi;
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)');
grid;
hold off;
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
');
');
figure(1);clf;
fplot(f,[a b]); % desenha o grfico
hold on;
xlabel('x');
ylabel('y');
title(f);
grid;
>> sraiz(9)
5
3.4000
3.0235
3.0001
3.0000
3
3
Prof Catarina Castro
- 71 -
Laboratrios de Informtica
MIEA 2012/13
jh i < 0
h i
k + lmnop(i) jh i 0
%d inteiro
%s texto
\n muda de linha
decimais
Laboratrios de Informtica
MIEA 2012/13
Exemplo 6 : Escreva as seguintes funes MatLab nos ficheiros f.m and G.m.
function y = f(x)
y = exp(-x./10) + sin(x);
x = Z(1);
y = Z(2);
W = [x.^2-y.^2 2*x.*y];
f(pi/2)
G([2 1])
ans =
ans =
1.85463599915323
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
>> z=chamada(0)+chamada(1)
z=
5.5708
Laboratrios de Informtica
MIEA 2012/13
>> z=chamada(0)+fa(2)+fb(3)
??? Undefined function or method 'fa' for input arguments of type 'double'.
Porqu?
%Exemplo
>> k=4;
>> for m = 1:k
for n = 1:k
if m == n
a(m,n) = 2;
elseif abs(m-n) == 2
a(m,n) = 1;
else
a(m,n) = 0;
end
end
end
>> a
a=
2 0 1 0
0 2 0 1
1 0 2 0
0
1 0 2
Laboratrios de Informtica
MIEA 2012/13
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,
end
end
end
sum1
sum2
sum1 =
sum2 =
9.78760603604434
9.78760603604439
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
Laboratrios de Informtica
MIEA 2012/13
Nota: exemplos de utilizao destas funes podem ser estudadas usando o HELP
Funes Matemticas:
hist histogram
sort sorting
Laboratrios de Informtica
MIEA 2012/13
Laboratrios de Informtica
MIEA 2012/13
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)
Laboratrios de Informtica
MIEA 2012/13
@ 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));
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
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.
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)
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
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:
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:
Laboratrios de Informtica
MIEA 2012/13
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
Laboratrios de Informtica
MIEA 2012/13
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));
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
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
valor=5*sum(A);
disp(valor);
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);
inteiro,
elementos
do
conjunto;
Escreva ( conta );
V. Aux:
0
1
2
1
2
3
4
5
6
2
70
42
35
14
5
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Falso
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
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