86
APONTAMENTOS DE EXCEL, VB e MATLAB LABORATÓRIOS DE INFORMÁTICA 1º ANO MESTRADO INTEGRADO EM ENGENHARIA DO AMBIENTE 2012-2013

APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Embed Size (px)

Citation preview

Page 1: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

APONTAMENTOS

DE

EXCEL, VB e MATLAB

LABORATÓRIOS DE INFORMÁTICA

1º ANO

MESTRADO INTEGRADO EM

ENGENHARIA DO AMBIENTE

2012-2013

Page 2: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 2 -

Índice

Pág.

A. Construção de uma página WEB pessoal 4

1.Noções básicas de Algoritmia e Programação VB 6 1.1 O que é um algoritmo? 1.2 Etapas na resolução de um problema 1.3Estrutura geral de um algoritmo 1.4Variáveis 1.5Instruções de atribuição, leitura e escrita 1.6Expressões aritméticas 1.7Instuções de controlo e selecção 1.8Operadores lógicos 1.9Instruções de repetição e de controlo de fluxo 1.10Exercícios Propostos 1.11 Exercícios Resolvidos

2. Introdução ao Microsoft Excel 20 2.1 Livro e folha de cálculo 2.2 Fórmulas 2.3 Referência a célula(s) 2.4 Atribuição de nome a uma célula ou range 2.5 Referência a célula(s) de outra Folha de Cálculo 2.6 Funções 2.7 Composição de funções 2.8 Algumas funções intrínsecas do Excel 2.9 Gráficos 2.10 Exercícios propostos

3. Excel e programação VBA 29

3.1 Dialog / UserForm 3.2 Eventos 3.3 Procedimentos tipo Sub 3.4 Procedimentos tipo Funções 3.5 Objectos 3.6 Declaração de Variáveis 3.7 Operadores 3.8 Funções de manipulação de texto 3.9 Instruções Condicionais 3.10 Ciclos

Page 3: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 3 -

3.11 Exemplo de utilização de procedimentos 3.12 Exercícios propostos 3.13 Exercícios resolvidos 4. Introdução ao Matlab 54 4.1 Ficheiros do Matlab: M-ficheiros 4.2 Ambiente de trabalho em MATLAB 4.3 Comandos de visualização e informação 4.4 Comandos para atribuir valores às variáveis 4.5 Gráficos de funções 4.6 Algumas das funções matemáticas elementares 4.7 Funções para manipulação algébrica 4.8 Exercícios 4.9 Matrizes e Vectores em MatLab 4.10 Inicialização de matrizes 4.11 Operações sobre vectores 4.12 Operações sobre matrizes 4.13 Operadores aritméticos, relacionais e lógicos 4.14 Valores booleanos 4.15 Instruções básicas de programação em MatLab 4.15.1 Instruções de Controlo 4.15. 2 Ciclo for 4.15. 3 Instruções de entrada/saída de dados 4.16 Exercícios propostos 4.17 Exercícios Resolvidos 5. Programação em MatLab – introdução 69 5.1 Programas (script) 5.2 Funções em MatLab 5.3 Ficheiros de dados em MatLab 5.4 Instruções de Controlo para programação em MatLab 5.5 Outras funções do MatLab 5.6 Gráficos 3-D 5.7 Exercícios de introdução à Programação em MatLab

Resolução de Exercícios dos Testes do ano lectivo 2010/2011 79

Page 4: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 4 -

A. Construção de uma página WEB pessoal

Sugestão:

1º) Usar, por exemplo, o Microsoft Office Publisher (disponível nas salas de aula) ou

outro software, para criar e/ou editar um ficheiro Web site com a página pessoal.

No Microsoft Publisher, é possível criar páginas HTML (Hypertext Markup Language),

mas não é possível abrir e editar as páginas HTML no Publisher depois de criados. Se

pretender utilizar o Microsoft Publisher para criar e publicar um Web site, é

recomendável que guarde uma cópia de segurança do seu documento como um

arquivo(. pub).

Utilizando este método, se pretender efectuar quaisquer alterações ao site, edite o

arquivo (.pub) que depois pode guardar como um novo documento HTML, e em

seguida, voltar a publicá-lo no Publisher.

Instruções para colocação de ficheiros com programação associada:

Ficheiros EXCEL:

Se pretender colocar ficheiros EXCEL associados à sua página Web deve proteger o seu

código 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

opção VBAProject properties. No separador Protection da caixa de diálogo assinale

Lock project for viewing e escolha uma password. Clique OK e deste modo protege o

seu código de ser copiado por qualquer um.

Ficheiros MATLAB:

Para criar um ficheiro executável 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 instrução:

>> mcc -m nome.m

vai criar um ficheiro nome.exe que depois pode ser colocado na sua página WEB.

Quando clicar no ficheiro ele só executa e não vai ter acesso ao código.

Page 5: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 5 -

2º) Quando cria uma publicação no Publisher, este fica guardado com uma extensão de

ficheiro.pub. Depois é necessário publicá-lo em formato HTML. Fazer Save as do

ficheiro com o nome ficheiro.html escolhendo o tipo Página Web.

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

3º) Finalmente, quando a sua página Web estiver pronta e para que esta fique disponível

ao público, fazer Save as do ficheiro com o nome index.htm escolhendo o tipo Página

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 página pessoal do SIFEUP em administração escolher configurar, Página Web,

http://www.fe.up.pt/~username;

5º) Se necessário, no Tools do browser retirar os cookies.

Page 6: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 6 -

1. Noções Básicas de Algoritmia e Programação VB

1.1. O QUE É UM ALGORITMO?

Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecânicamente num período de tempo finito e com uma quantidade de esforço finita.

O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita, embora muitos algoritmos sejam mais complexos. Podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica). Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema.

Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordem eles devem ser executados. 1.2 ETAPAS NA RESOLUÇÃO DE UM PROBLEMA

Exemplo Calcular a área de um rectângulo sendo dados os valores do comprimento e da largura. Corpo do ALGORITMO: LEIA (comprimento, largura); area ← comprimento * largura; ESCREVA (area); Código 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

Page 7: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 7 -

Para inserir o script no Visual Basic do Excel sugere-se, por exemplo, que no menu “Developer” insira um botão de comando usando “insert form controls”;

Clicando agora sobre o botão com a tecla do lado direito do rato escolha “assign macro”

ou e finalmente “new “ ou “edit” abre a janela de edição VB:

Page 8: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 8 -

1.3 ESTRUTURA GERAL DE UM ALGORITMO:

1.4 VARIÁVEIS Variável é a forma programática de identificar uma zona de memória do computador que pode ser consultada e alterada pelo Programa em execução. Tipos de Variáveis:

Variáveis Numéricas Variáveis String Variáveis Booleanas Variáveis Data Variáveis Objecto Variáveis Variant

Variáveis Numéricas:

Integer: Valores inteiros entre –32768 e 32767 Long: Valores inteiros entre –2147483648 e 2147483647 Single: Valores Reais de precisão simples entre +/-1.401298E-45 Double: Valores Reais de precisão dupla entre e +/-3.402823E38

Variáveis String: Uma sequência de caracteres Exemplo de Código VBA:

Private Sub CommandButton1_Click() Dim palavra1, palavra2 As String palavra1 = "lenta" palavra2 = "mente" MsgBox (palavra1 + palavra2) End Sub

Variáveis Booleanas (Boolean): Só toma dois valores:

True False

Page 9: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 9 -

1.5 INSTRUÇÕES DE ATRIBUIÇÃO, LEITURA E ESCRITA Instrução de atribuição:

Instrução de leitura, atribuição 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 EXPRESSÕES ARITMÉTICAS Exemplos: area ← comprimento * largura; soma ← x + y – cos (x)+ y^x; media ← soma/ 2; As expressões aritméticas envolvem

- OPERANDOS - VARIÁVEIS NUMÉRICAS - CONSTANTES NUMÉRICAS - OPERADORES ARITMÉTICOS - FUNÇÕES - PARÊNTESIS

Page 10: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 10 -

1.7 INSTUÇÕES DE CONTROLO E SELECÇÃO Instrução condicional simples:

Instrução condicional dupla:

Page 11: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 11 -

Selecção múltipla:

A selecção múltipla permite executar um conjunto de instruções em função do valor de

uma variável ou expressão. Por exemplo:

1.8 OPERADORES LÓGICOS

Page 12: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 12 -

1.9 INSTRUÇÕES DE REPETIÇÃO E DE CONTROLO DE FLUXO Ciclo para que se utiliza quando à priori é conhecido o número de vezes que um bloco de instruções deverá ser executado.

Quando não é conhecido o número de vezes que um bloco de instruções deverá ser executado utiliza-se o ciclo enquanto ou ciclo repete. Ciclo enquanto: permite executar repetidamente um bloco de instuções enquanto o valor de uma expressão (condição) for verdadeiro. Neste caso, o bloco de instruções pode nunce ser executado.

Page 13: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 13 -

Exemplo:

Outro exemplo: a← 10; a = 10 b← - 4; b = - 4 Enquanto b>a or b<0 faça While b > a or b < 0

{b← a - 1; b = a – 1 Wend

Quantas vezes é este ciclo executado? Ciclo Repete: permite executar repetidamente um bloco de instruções até que o valor de uma expressão (condição) seja verdadeiro.

Exemplo:

Page 14: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 14 -

1.10 Exercícios propostos: A. Qual o objectivo de cada um destes programas? a) Private Sub CommandButton1_Click( ) Dim média, soma As Double Dim N, i, nota As Integer N = Val(InputBox("Número de disciplinas concluídas")) soma = 0 For i = 1 To N

nota = Val(InputBox("Introduza a nota de uma disciplina concluída")) soma = soma + nota

Next média = soma / N MsgBox ("Média= " & Str(média)) End Sub b) Private Sub CommandButton1_Click( ) Dim exame As Double Dim nota As Integer Dim classificação As String Do

exame = Rnd( ) * 20 MsgBox (exame) nota = Round(exame) If nota < 10 Then

classificação = "Reprovado" Else

Select Case nota Case 10 To 13 classificação = "Suficiente" Case 14 To 17 classificação = "Bom" Case 18 To 20 classificação = "Muito Bom" End Select

End If MsgBox (Str(nota) & " " & classificação)

Loop Until nota = 20 End Sub

Page 15: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 15 -

1. Escreva um algoritmo que calcule as raízes reais de uma equação 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 mês 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 médio dessas temperaturas. b) Escreva um algoritmo que calcule o desvio padrão dessas temperaturas. c) Escreva um programa em VBA que calcule o valor médio e o desvio padrão

dessas temperaturas.

4. Um aluno da FEUP já terminou N disciplinas com notas entre 10 e 20. a) Escreva um algoritmo que calcule a média das N notas e se a média 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 média das N notas e se a média 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 máximo dessas temperaturas. b) Escreva um algoritmo que calcule o mínimo dessas temperaturas. c) Escreva um algoritmo que calcule o número de dias em que essa

temperatura ultrapassou os 20 graus. d) Escreva um programa em VBA que calcule o máximo e o mínimo dessas

temperaturas e que calcule o número de dias em que essa temperatura ultrapassou os 20 graus .

6. a) Escreva um algoritmo que calcule a soma dos quadrados dos números inteiros entre 3000 e 7800, inclusivé.

b) Escreva um programa em VBA que calcule a soma dos quadrados dos números inteiros entre 3000 e 7800, inclusivé. 7. a) Escreva um algoritmo que calcule o factorial de um número inteiro positivo.

b) Escreva um programa em VBA que calcule o factorial de um número inteiro positivo. 8. a) Escreva um algoritmo que determine se um número inteiro dado é par ou ímpar.

b) Escreva um programa em VBA que determine se um número inteiro dado é par ou ímpar.

Page 16: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 16 -

9. Considere a função rnd( ) do VBA que gera valores aleatórios entre 0 e 1: 0 ≤≤≤≤ rnd( ) < 1. O valor N = Int (1 + 50××××rnd( )) retorna valores aleatórios inteiros entre 1 e 50.

a) Escreva um algoritmo que gere números aleatórios inteiros entre 1 e 50 até que apareça um número aleatório múltiplo de 3.

b) Escreva um programa em VBA que gere números aleatórios inteiros entre 1 e 50 até que apareça um número aleatório múltiplo de 3.

10. Considere a função rnd( ) do VBA que gera valores aleatórios entre 0 e 1: 0 ≤≤≤≤ rnd( ) < 1. Usando esta função simule um jogo em que ganha o jogador A se o resultado da rnd() for superior a 0.6. Caso contrário ganha o jogador B.

11. Considere a função rnd( ) do VBA que gera valores aleatórios entre 0 e 1: 0 ≤≤≤≤ rnd( ) < 1. Usando esta função simule o seguinte jogo de dados equilibrados. Lançam-se 2 dados. Se a soma de pontos for superior a 6 ganha o jogador A. Caso contrário ganha o jogador B.

12. Considere a função rnd( ) do VBA que gera valores aleatórios entre 0 e 1: 0 ≤≤≤≤ rnd( ) < 1. Usando esta função simule o seguinte jogo com um dado é viciado, em que as probabilidades de saída de cada face são as seguinte: P(face 1)= P(face 2)= P(face 3)= P(face 4)= 2∗P(face 5)= 2∗P(face 6). Lança-se o dado uma vez. Se sair o número 5 ou 6 então ganha o jogador A, senão ganha o jogador B. 13. Registou-se durante todos os dias do ano 2001 e pelas 14 horas, o número de automóveis que entravam no parque da FEUP.

a) Escreva um algoritmo que calcule o máximo e o mínimo desses valores e os respectivos dias.

b) Escreva um programa em VBA que calcule o máximo e o mínimo desses valores e os respectivos dias. Exemplo: Em 2001, o número máximo de automóveis foi de 500 no dia 21 de Março e o número mínimo foi de 72 no dia 5 de Agosto. 14. Dado um número inteiro positivo:

a) Escreva um algoritmo que determine se o número dado é primo ou não. b) Escreva um programa em VBA que determine se o número dado é primo ou não.

15. Define-se número de Armstrong como sendo aquele cuja soma dos cubos dos

algarismos que o compoêm é igual ao próprio número. Ex: 153= 13+53+33 .

a) Escreva uma função booleana capaz de determinar se um número natural dado é ou

não um número de Armstrong.

b) Escreva um programa que procure os primeiros 5 números de Armstrong.

Page 17: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 17 -

1.11 Exercícios Resolvidos:

A. Escreva um algoritmo que calcule as raízes reais de uma equação real de 2º grau.

Sugestão de resposta para o algoritmo pedido: Cabeçalho: Objectivo: Calcular as raízes reais de uma equação 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 raíz a calcular;

x2, real, segunda raíz a calcular; V. Aux: D, real, discriminante;

Corpo: Leia ( a ); Leia ( b ); Leia ( c ); D←b2 - 4*a*c; Se D<0 então Escreva(“Não tem raízes reais”); Senão

�1 ← (−� + √)/(2 ∗ �); �2 ← (−� − √)/(2 ∗ �); Escreva(x1 , x2);

B. Considere o seguinte algoritmo de Euclides que permite calcular o máximo

divisor comum de dois números naturais, mdc(a,b), definido como maior número inteiro que divide simultaneamente a e b:

Cabeçalho: Objectivo: V.Dados: V. Resultado: V. Aux:

Corpo: Leia (a, b); r ← a mod b; Enquanto r ≠ 0 faça

a ← b; b ← r; r ← a mod b;

Escreva ( b );

a) Percorra o algoritmo de Euclides para calcular o máximo divisor comum de 76 e 68, i.e., mdc( 76, 68).

Quantas vezes executou o ciclo do “enquanto” ? Qual o mdc( 76, 68) obtido? RESPOSTA:

a b r r≠0 76 68 8 Verdadeiro 68 8 4 Verdadeiro 8 4 0 Falso

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

Page 18: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 18 -

b) Preencha o cabeçalho deste algoritmo.

Resposta possível: Cabeçalho: Objectivo: Calcular o máximo divisor comum de dois números naturais; V.Dados: a, inteiro, 1º número natural a introduzir;

b, inteiro, 2º número natural a introduzir; V. Resultado: b, inteiro, máximo divisor comum entre a e b;

V. Aux: r, inteiro, resto da divisão inteira de a por b;

C. Considere o seguinte algoritmo: Cabeçalho: Objectivo: V.Dados: V. Resultado: V. Aux:

Corpo: Leia ( n ); F ← 1; Enquanto n ≥ 1 faça

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 variável n? Percorrer o Algoritmo:

n F n≥1 5 4 3 2 1 0

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

Verd Verd Verd Verd Verd Falso

O valor final de F a ser escrito é 1*5*4*3*2*1=5!=120 O valor final da variável n é 0.

b) Preencha o cabeçalho deste algoritmo. Resposta possível

Cabeçalho: Objectivo: Calcular o factorial de um número 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 três 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.

Page 19: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 19 -

Resposta possível: Cabeçalho: Objectivo: Ordenar por ordem crescente três valores dados: A, B e C; V. Dados: A, real, 1º número a introduzir; B, real, 2º número a introduzir; C, real, 3º número a introduzir; V. Resultado: V. Aux: aux, real, auxiliar para troca.

Corpo: Leia (A, B, C); Se B < A então aux ← B; B ← A; A← aux; Se C < A então aux ← C; C ← A; A← aux; Se C < B então 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 número de automóveis que se encontravam no parque da FEUP. Escreva um algoritmo que calcule o máximo e o mínimo desses valores e os respectivos dias. Resposta: Cabeçalho Objectivo: calcular o máximo e o mínimo do número de automóveis 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 automóveis que se encontravam na FEUP em cada dia do

ano 2009 e pelas 14 horas; V. Resultado: X_max, inteiro, nº máximo registado; X_min, inteiro, nº mínimo registado;

D_max, inteiro, dia em que se registou o nº máximo; D_min, inteiro, dia em que se registou o nº mínimo;

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 faça

leia (X);

se X > X_max então X_max X; D_max i;

se X < X_min então X_min X; D_min i;

Escreva (X_max, D_max, X_min, D_min);

←←←←

← ← ← ←

Page 20: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 20 -

2. Introdução ao Microsoft Excel

O Excel é uma aplicação que permite trabalhar num ambiente de Folhas de Cálculo para armazenar constantes, utilizar fórmulas, utilizar funções matemáticas, criar gráficos, etc. 2.1 Livro e folha de cálculo

No Excel, livro ou workbook é o nome do ficheiro em que se trabalha e onde são guardados os dados. Cada livro pode conter várias folhas de cálculo. A folha de cálculo é o documento utilizado para guardar e manipular dados. Uma folha de cálculo é composta por células organizadas em colunas e linhas e faz sempre parte de um livro. A identificação de uma célula é feita usando a letra da coluna e o número da linha em que a célula se encontra. Por exemplo: D5 célula da coluna "D" linha "5". Os dados inseridos nas células podem ser de vários tipos: valores numéricos ou alfanuméricos, fórmulas e funções. 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á visível encontra-se a negrito. Se os separadores de folhas não estão visíveis: menu Tools→Options→View→seleccionar "Sheet Tabs". 2.2 Fórmulas

Uma fórmula pode ser composta por valores, referências a células, funções ou operadores. Uma célula pode guardar uma fórmula e neste caso começa sempre com o sinal =. Operadores aritméticos: +, -, /, *, %, ^ Operadores de comparação: =, >, <, >=, <=, <> Para copiar uma fórmula pode usar copy/paste ou seleccionar a célula origem, clicar no canto inferior direito da célula origem e arrastar para as células de destino se forem imediatamente abaixo ou à direita. Para ver as fórmulas contidas na folha (em vez dos valores): menu Tools → Options → View → activar Formulas 2.3 Referência a célula(s)

Uma referência identifica uma célula ou um intervalo ou range de células (isto é, células adjacentes formando um rectângulo). Por exemplo: B2:D3 − o conjunto de células (B2, C2, D2, B3, C3, D3) C2:H20 − o conjunto de todas as células que se encontram entre a coluna C e a coluna H nas linhas 2 a 20, um total de 6(colunas)×19(linhas) = 114 células.

Page 21: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 21 -

Referências relativas e absolutas A distinção entre referência relativa e absoluta a células é importante quando uma fórmula é copiada de uma célula para outra(s). Quando uma fórmula é copiada, as referências relativas são ajustadas automaticamente para a nova localização. Assim, a referência relativa numa fórmula copiada refere-se a células diferentes das referidas na fórmula original. Mas quando se copia uma fórmula, as referências absolutas são copiadas exactamente como aparece na célula origem. A existência de um sinal $ antes da identificação de uma linha/coluna indica uma referência absoluta. Podem também ser utilizadas referências mistas, tais como E$4 ou $E4. Uma fórmula contendo referências mistas quando copiada, é ajustada a coluna ou linha (que não tem o $) e não é alterada a outra parte da referência. 2.4 Atribuição de nome a uma célula ou range

É possível atribuir um nome a uma célula ou a um range de células. Este nome é único dentro de um livro. Para atribuir um nome a uma célula/range: 1º Seleccionar a célula/range 2º menu Insert → Name → Define → em Names in workbook: escrever o nome. Quando é atribuído um nome a uma célula ou range, este nome pode ser utilizado sempre que seja necessário utilizar uma referência absoluta a essa célula ou range. 2.5 Referência a célula(s) de outra Folha de Cálculo

É possível referir célula(s) que se encontra(m) numa folha de cálculo diferente daquela em que se está a trabalhar. Para isso o endereço da(s) célula(s) referida(s) deve começar pelo nome da folha de cálculo em que esta(s) se encontra(m). Em alternativa pode ser utilizado o seu nome (desde que lhe(s) tenha sido previamente atribuído esse nome). Se a(s) célula(s) a referir se encontra(m) noutro livro, o endereço deve começar 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 contém a referência. Exemplos: [meulivro.xls]folha_A!B2:B4 ou então[meulivro.xls]nome. 2.6 Funções

As funções são utilizadas geralmente numa fórmula. Os valores sobre os quais uma função efectua operações são os chamados argumentos: nomedafunção (argumento1; argumento2,...). Os valores dos argumentos podem ser constantes, referências a células, ranges, funções ou expressões. Quando uma função requer mais do que um argumento e naquelas em que cada argumento possui um significado próprio, a ordem pela qual são indicados os valores dos argumentos é fundamental. Exemplos: Na função SUM é possível utilizar desde 1 até 30 argumentos, tendo todos eles significado idêntico; logo, a ordem dos argumentos (quando são utilizados dois ou mais argumentos) não é significativa. Assim, SUM(B2:D4;F2:G4) e SUM(F2:G4;B2:D4) produzem o mesmo resultado (a soma dos valores das células das duas ranges indicadas nos argumentos). A função IF requer 3 argumentos com significados distintos: o primeiro é obrigatoriamente uma condição (cujo valor é Verdadeiro ou Falso), o segundo é o valor

Page 22: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 22 -

que a célula toma quando a condição é Verdadeira, o terceiro é o valor da célula quando a condição é 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 funções possuem argumentos para os quais se encontram pré-definidos valores por omissão, isto é, valores que são utilizados no caso do utilizador não fornecer valores. Exemplo: A função IF pode ser utilizada com valores apenas para os dois primeiros argumentos; neste caso, o terceiro argumento tem como valor de omissão a constante FALSE. Assim, IF(A1>A2;1) e IF(A1>A2;1;″FALSE″) produzem o mesmo resultado. Para inserir uma função numa célula: Seleccionar a célula onde se quer guardar o resultado da função e introduzir o sinal = seguido da definição da função ou Seleccionar a célula onde se quer guardar o resultado da função e menu Insert → Function e seguir as instruções do Assistente de Funções… 2.7 Composição de funções Quando uma função é aplicada a outra função: = if (sum (b2 : g2) > = 9.5 ; “Aprovado”; “Reprovado”) = if (count (a1:a10) >=5 ; max (a1:a10) ; min (a1:10)) A descrição das funções intrínsecas do Excel pode ser encontrada no Assistente de Funções ou em HELP. Referem-se de seguida algumas funções. 2.8 Algumas funções intrínsecas do Excel FREQUENCY (matriz_dados, matriz_bin) Calcula a frequência com que os valores ocorrem num intervalo de valores e devolve uma coluna de números. Exemplo:

Matriz_dados é uma matriz de ou uma referência a um conjunto de valores, cujas frequências se deseja contar. Se matriz_dados não contiver valores, FREQUENCY devolve zeros. FREQUENCY ignora células em branco e texto. Matriz_bin é uma matriz de ou uma referência a intervalos, nos quais deseja agrupar os valores contidos em matriz_dados. Se matriz_bin não contiver valores, FREQUENCY devolve o número de elementos em matriz_dados.

Page 23: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 23 -

FREQUENCY é introduzida como uma fórmula de matriz: seleccione uma célula para escrever e guardar, depois seleccione esta célula e um intervalo de células adjacentes no qual deseja que a distribuição devolvida apareça, clicar “F2” seguido de “CRTL+SHIFT+ENTER”. A matriz devolvida tem mais um elemento que matriz_bin. Esse elemento adicional contém o número de valores que se encontram acima do intervalo mais alto (ver exemplo dado). COUNTIF (intervalo,critério ) Calcula o número de células num intervalo que corresponde aos critérios determinados. Intervalo é o intervalo de células a partir do qual se deseja contar células. Critério é o critério (na forma de um número, expressão ou texto) que define quais as células que serão contadas. Critérios podem ser expressos como 52, ">52", "ABC". MATCH(valor_proc, matriz_proc, tipo_corresp) Se o tipo_corresp for 0 esta função devolve a posição 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 contíguo de células que contém possíveis valores de procura. MATCH devolve a posição do valor correspondente em matriz_proc e não o valor propriamente dito. Por exemplo: MATCH("b”,{"a","b","c"},0) devolve 2, a posição relativa de "b" na matriz {"a","b","c"}. MATCH não faz distinção entre letras maiúsculas e minúsculas ao fazer corresponder valores de texto. Se MATCH não 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 interrogação (?). Um asterisco coincide com qualquer série de caracteres; um ponto de interrogação coincide com qualquer carácter. Para outros valores de tipo_corresp estudar o help desta função. INDEX (matriz, num_linha, num_coluna) Devolve o valor de um elemento numa matriz, seleccionada pelos índices do número de linha e coluna. A função INDEX apresenta duas formas: de matriz e de referência. A forma de matriz devolve sempre um valor ou uma matriz de valores. Matriz é um intervalo/range de células. Se a matriz for constituída 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 fórmula de matriz) devolve a matriz de valores para a coluna ou linha inteira, respectivamente. 2.9 Gráficos Um gráfico pode ser criado na mesma folha em que se encontram os dados ou numa folha de gráfico. Um gráfico está ligado aos dados que o originaram, sendo actualizado sempre que estes são alterados. Os gráficos podem ser criados a partir de um range ou de uma união de ranges. Para criar um gráfico numa folha de cálculo/folha de gráfico: 1º Seleccionar a(s) range(s) que contêm o texto que identifica os eixos e os dados 2º menu Insert → Chart 3º seguir as instruções do Assistente de Gráficos…

Page 24: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 24 -

Apontamentos de apoio aos exercícios que utilizam o pacote de estatística do Microsoft Excel

A instalação básica do Excel não permite, por defeito, o acesso imediato ao pacote de estatística. Assim, é necessário fazer a sua instalação. Abra um livro Excel e siga as sugestões seguintes:

1. Começar por clicar na barra File e seleccionar Options

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

Page 25: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 25 -

3. Verifique que se for à barra de Data já tem do lado direito a possibilidade de fazer Análise de Dados:

4. Depois de introduzir dados na folha de cálculo do EXCEL pode, por exemplo,

utilizar a análise de dados seleccionando Estatística Descritiva,

e seleccionar correctamente a localização dos dados e dos resultados:

Page 26: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 26 -

5. Para construir o histograma deve começar por indicar quais as classes a

considerar e depois seleccionar a opção Histograma

seleccionar correctamente a localização dos dados e dos resultados

Page 27: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 27 -

Page 28: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 28 -

2.10 Exercícios

1. A função xe é aproximada pelo polinómio 0

( )!

n k

nk

xP x

k==∑ para valores de x na

vizinhança de 0. Usando uma folha de cálculo 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 polinómio ( )nP x para n=2, 5 e 7. Calcule o erro relativo com que o

polinómio aproxima a função xe nos diversos pontos e desenhe-o. Que conclusões tira?

2. Uma função f ( x ) é aproximada pelo polinómio de Taylor

( ),

0

( )( ) ( )

!

n kk

n ak

x aP x f a

k=

−=∑ para valores de x na vizinhança 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 três folhas (uma folha para cada alínea) 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 polinómios , ( )n aP x para n=1, 2,..., 7. Para n=2, 5 e 7

calcule e desenhe o erro relativo com que o polinómio aproxima a função f ( x ) nos

diversos pontos. 3. Construa um ficheiro Excel com 50 observações da temperatura diária registada num determinado período 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 diferença relativamente ao dia anterior (coluna C); no caso de valores desconhecidos o resultado deve ser “ : “ 2. Formate as células da coluna C com uma casa decimal; 3. Calcule da média, a mediana e a moda; 4. Calcule a variância; 5. Calcule o desvio padrão; 6. Calcule o mínimo; 7. Calcule o máximo; 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 exercício anterior. Utilize o package de estatística do Excel para contruir o histograma e estudar os dados. Compare os resultados.

Page 29: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 29 -

3 Excel e programação VBA

Um computador pode ajudar-nos a resolver problemas, especialmente aqueles que requerem um grande número de cálculos “repetitivos”. O Excel é um software muito utilizado para a resolução de problemas numéricos em engenharia. Tem como facilidades a criação de comandos Macro que irão dar ordens ao Excel para executar as tarefas repetidas e a possibilidade de escrita de código de programação para resolver problemas específicos.

Apontamentos de apoio à instalação da barra de DEVELOPER no Microsoft Excel

A instalação básica do Excel não permite, por defeito, o acesso imediato à barra de DEVELOPER. Assim, é necessário fazer a sua instalação. Abra um livro Excel e siga as instruções seguintes: Começar 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 programação usando o editor de Visual Basic do EXCEL:

Na barra do Developer seleccionar Visual Basic

Page 30: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 30 -

Inserir uma janela de comandos (Userform) e um botão de comando

Clicar 2 vezes no botão de comando e inserir na janela do editor instruções em VB que irão ser executadas por activação desse botão. Por exemplo:

Guardar o trabalho:

Page 31: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 31 -

Activar o botão de comando para executar as instruções:

1º Exemplo simples de programação usando o editor de macros do EXCEL: Como gravar uma Macro? Uma Macro é uma acção ou conjunto de acções 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 alterações. Depois de gravada a nova

Page 32: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 32 -

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 começar a gravar. Experimente algumas acções na sua folha de cálculo, tais como inserir dados ou escrever uma fórmula. Finalmente na barra do Developer, usando o grupo CODE, clicar em Stop Recording. Para aprender um pouco sobre a linguagem de programação 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 programação associada ao Excel. Numa linguagem de programação clássica, os dados estão num ficheiro, geralmente com uma formatação rigorosa, ou então pedem-se dados específicos ao utilizador. O Excel tem já a interface com o utilizador e o código apenas se preocupa com o processamento de dados. O Excel tem muitas funcionalidades e pode tornar-se mais genérico sempre que as inexistentes forem programadas. Exemplo de gravação de uma Macro:

e não esquecer

Page 33: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 33 -

Esta Macro1( ) pode ser gravada e executada sempre que necessário. Por exemplo, podemos começar uma folha nova e mandar executar esta Macro nessa folha, fazendo simplesmente

Macros ajudam-nos a cumprir objectivos que têm que ser repetidos mas não permitem resolver problemas numéricos que envolvem cálculos iterativos. Para isso é necessário escrever um código VBA adaptado à resolução do nosso problema. Para programar, podemos iniciar um código no Excel criando uma macro e em seguida editar o código da macro. Alternativamente podemos escrever o código começando por desenhar um botão de comando tal como veremos mais adiante. O HELP do Excel é uma enorme fonte de informações. Por exemplo, podemos aí encontrar as definições das funções intrínsecas do Excel e também aprender como escrever as nossas funções, funções VBA. 3.1 Dialog / UserForm Pode-se criar dialogs, e inserir graficamente elementos. No VBA, após inserir um "UserForm" (dialog) fica visível 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 opções em que o utilizador pode selecionar uma delas

• CommandButton / OptionButton / CheckBox - vários tipos de botões, na qual o utilizador pode carregar de forma a executar um conjunto de instruções. Ao inserir uma UserForm, e objectos dentro dela, passa a ser objecto do Excel e permite associar um código. Uma propriedade comum a diferentes objectos é o "Value" tal como nas células.

Page 34: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 34 -

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

botões tem interesse intersectar o evento "Click".

Na UserForm tem interesse intersectar o evento "Activate" para efectuar inicializações,

e nas listas pode ter interesse intersectar o evento "Change" para efectuar alguma

actualização após o elemento da lista ter sido alterado.

3.3 Procedimentos tipo Sub

Quando queremos escrever o nosso código de programação é necessário guardá-lo num

local associado à nossa folha de trabalho. Os dados do programa podem estar na folha

Excel ou então ser introduzidos pelo utilizador e depois a escrita dos resultados feita na

folha de trabalho. Podemos colocar o código de programação num procedimento

associado ao VBAProject e que é acedido através do editor VBA. O procedimento pode

ser executado quer usando a caixa de diálogo das Macros, quer criando uma short-cut

através da caixa de diálogo das Macros, quer ainda criando um botão de comando e

depois associando-o ao procedimento específico.

Um procedimento a que chamamos do tipo Sub é um conjunto de instruções colocadas

entre Sub e End Sub que executa acções mas que não retorna um valor específico.

Como veremos adiante uma função é um conjunto de instruções colocadas entre

Function e End Function que retorna um valor específico executa uma série de

instruções.

Exemplo de desenvolvimento de um procedimento:

Page 35: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 35 -

e para executar esta instrução basta “clicar” no botão:

Page 36: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 36 -

Exemplos de instruções são: A=A+10 B=2 Exemplo de declarações de variáveis: Dim A, B As Integer Se para escrever uma instrução é necessário utilizar mais do que uma linha o VBA

permite fazer a mudança de linha usando o under scroll ( _ ).

Exemplo:

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

5*Math.cos(3)

Mas cuidado, o under scroll não pode ser utilizado, por exemplo, com instruções do

tipo MsgBox. Nesse caso será necessário considerar várias MsgBox.

Comentários: Por vezes escrevemos centenas ou milhares de linhas de código sendo

necessário comentar para mais tarde nos lembrarmos o que um determinado conjunto de

instruções faz.

Exemplo:

Atenção ao modo como se guardam os ficheiros com código VBA associado:

Page 37: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 37 -

ou 3.4 Procedimentos tipo Funções

O código está agrupado em funções e procedimentos, que são chamados de outra função

ou quando um determinado evento ocorre.

Uma função é um processo que permite converter um conjunto de dados de entrada num

resultado de saída através de instruções/comandos bem definidos. Um procedimento do

tipo função é um conjunto de instruções colocadas entre as instruções iniciadas por

Function e End Function. Uma Function é semelhante a uma Sub mas a função pode

ainda retornar um valor. Por exemplo a função 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 utilização de funções é a possibilidade de extrair instruções

repetidas de código, substituí-las por uma única linha de comando e assim estruturando

o programa. Um programa bem estruturado é mais fácil de compreender, manter, alterar

e encontrar erros.

O utilizador pode criar funções e procedimentos que apenas ele utiliza, para desta forma

melhor organizar o código e evitar repetição de comandos.

Page 38: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 38 -

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 função. No comando <nome>=<valor> é definido o valor a retornar pela função. 3.5 Objectos Os objectos mais relevantes que permitem editar um documento do Excel são:

• Sheets("nome") - objecto de acesso a qualquer folha

• Cells(linha,coluna) - objecto de acesso a qualquer célula na folha actual

• Range("conjunto") - objecto de acesso a um conjunto de células

• Selection - objecto de acesso ao conjunto de células selecionado

• ActiveCell - objecto de acesso à célula activa

Todos estes objectos têm propriedades e métodos, sendo ambos acedidos por um ponto

a seguir ao nome do objecto, após o qual o Excel mostra todas as propriedades e

métodos aplicáveis nesse objecto. Para realçar o mais importante, nas células existe a

propriedade "Value" que tem o valor numérico da célula, e o método "Activate" para

passar a ser a célula 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

aleatórios entre 5 e 6. Então o código a considerar seria simplesmente:

Dim i As Integer

For i = 1 To 20

Cells(i, 5).Value = Rnd( ) + 5

Next i

Page 39: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 39 -

3.6 Declaração de Variáveis

É essencial numa linguagem ter entidades que se podem alterar. Podem-se declarar

variáveis internas para uso apenas no código ou utilizar um valor de uma célula como

variável. A declaração de uma variável em programação VBA é:

Dim <variável> As <tipo>

Os tipos mais utilizados são Integer, Double, String, e Boolean, para representar

respectivamente um inteiro, um número real, um texto e um valor booleano.

Integer são as variáveis do tipo inteiro guardadas em 2 bytes e variam entre -32 768 e

32 767.

Double (reais de dupla precisão) são as variáveis guardadas como números em vírgula

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 variáveis do tipo Booleano são guardadas como números de 2 bytes e tomam apenas

2 valores: Verdadeiro ou Falso.

Se o tipo de variável não for especificado então o VBA considera o tipo Variant

(números de 16-bytes). Este tipo de variáveis ocupa muito espaço e deve ser evitado.

Muitos programas VBA que resolvem problemas numéricos utilizam milhares de

variáveis usando ciblos que são repetidos milhares de vezes. A nã declaração de

variáveis iria tornar o programa extremamente pesado.

Aconselha-se a utilização da instrução Option Explicit no início de cada

programa/código o que obriga o programador a declarar todas as variáveis.

A declaração de variáveis pode ser feita:

- dentro de um procedimento e então a variável é utilizada apenas ao nível do

procedimento ou

- no módulo e fora do procedimento e então a variável passa a ser utilizada ao nível do

módulo e por qualquer dos procedimentos. (Não fica disponível para outro módulo.)

Page 40: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 40 -

Exemplo:

Option Explicit

Sub mensagem_minha( )

Dim mensagem As String

mensagem = "Vamos ver este exemplo"

MsgBox mensagem

End Sub

Sub mensagem_tua( )

Dim mensagem As String

mensagem = "Qual exemplo?"

MsgBox mensagem

End Sub

Option Explicit

Dim mensagem As String

Sub mensagem_minha( )

mensagem = "Vamos ver este exemplo"

MsgBox mensagem

End Sub

Sub mensagem_tua( )

mensagem = "Qual exemplo?"

MsgBox mensagem

End Sub

No entanto é necessário ter cuidado uma vez que variáveis declaradas a nível de módulo

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 após a execução do procedimento/código?

Page 41: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 41 -

3.7 Operadores

Exemplo:

3.8 Funções de manipulação de texto

• Len (string) retorna o número de caracteres da string.

• InStr([start,]string1,string2[,compare]) retorna a posição da primeira ocorrência de um

texto dentro de outro.

• Ltrim(string), Rtrim(string) e Trim(string) retorna o texto sem deixar espaços à

esquerda, à direita ou ambos.

• Right(string, length) retorna o texto com o número específico 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 número específico de caracteres

de um texto.

• Asc(string) retorna um inteiro representando o código do caracter correspondendo à

primeira letra de um texto.

• Chr(charcode) retorna um texto contendo o caracter associado ao código específico.

Page 42: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 42 -

A função Str(<Integer>) permite converter um inteiro num texto.

Exemplo de codificação de uma mensagem:

Dim texto, mensagem As String

Dim i, n As Integer

texto = "Estás 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 atribuições de valores a variáveis podem ser feitas por valor através do comando:

Let x=3 em que x fica com o valor 3 ou

y=" LI " em que y fica com o valor LI

Existe ainda uma atribuição por referência, 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 Instruções Condicionais

Uma instrução condicional em que o primeiro conjunto de instruções só é executado no

caso da condição ser verdadeira, é, por exemplo:

If <condição> Then <bloco de instruções> Else <bloco de instruções> End If

Page 43: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 43 -

3.10 Ciclos

Um ciclo permite executar um bloco de instruções, um determinado número de vezes.

Os ciclos podem ser implementados de diversas maneiras, a primeira é dependente de

uma condição que enquanto for verdadeira o bloco de instruções é executado:

While <condição> < um bloco de instruções > Wend

Evidentemente que a condição deve depender de alguma variável alterada pelos comandos, caso contrário existiria um ciclo infinito. A segunda forma utiliza um contador para parar o ciclo:

For <contador>=<começo> To <fim> < um bloco de instruções > Next <contador>

A terceira forma serve para ser utilizada em conjuntos:

For Each <elemento> In <conjunto>

< um bloco de instruções >

Next <elemento>

Por exemplo se o conjunto fosse o "Select", o ciclo seria executado tantas vezes quantas

as células que estiverem selecionadas:

Dim y As String

y = InputBox("Comentário")

For Each x In Selection

y = y + y

If Len(x.Value) < 20 Then

x.Value = y

End If

Next x

Page 44: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 44 -

3.11 Exemplo de utilização de procedimentos Como exemplo de utilização de procedimentos vamos considerar o problema das Torres de Hanoi. As Torres de Hanoi são um quebra-cabeças muito antigo e conhecido. Considera-se de um conjunto de N discos de tamanhos diferentes e três pinos verticais, nos quais os discos podem ser encaixados. Cada pino pode conter uma pilha com qualquer número de discos, desde que cada disco não seja colocado acima de outro disco de menor tamanho. Na configuracão inicial todos os discos estão no pino A.

O objectivo é mover todos os discos para um dos outros pinos, sempre obedecendo à restrição de não colocar um disco sobre outro menor. Na configuracão final todos os discos estão no pino C.

Um algoritmo para resolver este problema é o seguinte: procedimento Hanoi(N, Orig, Dest, Temp)

se N = 1 então

mover o menor disco do pino Orig para o pino De st;

senão

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

Page 45: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 45 -

Criou-se uma macro em que se a célula activa tiver um valor numérico, esta chama um

procedimento TorresHanoi que recursivamente vai resolver o problema.

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

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

Primeiro, caso apenas se queira mover um só disco, a sub move-o sem utilizar o local auxiliar, caso contrário, move todos os discos mais pequenos para o local auxiliar chamando a função recursivamente, de seguida move o disco maior para o destino, e finalmente chama novamente a função recursivamente para mover os discos mais pequenos do local auxiliar para o destino. O resultado de executar esta sub com a célula com o 3 seleccionada, são as ordens de movimento descritas nas células abaixo:

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

Na configuracão final todos os discos estão no pino C.

Page 46: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 46 -

3.12 Exercícios propostos: 1. Gestão de Custos Pretende-se com este trabalho que seja desenvolvida uma aplicação, que permita a gestão 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 através de uma dialog, assim como devem poder ser adicionadas mais categorias e projectos. Como relatórios, dever-se-á apresentar um relatório por Categoria, por Projecto, para um dado mês ou ano, e os saldos dos Projectos em cada mês ao longo de um ano. Também poderá ser gerado um gráfico da evolução dos projectos,... Exemplo de aplicação:

2. Vencimentos. Considere a folha de cálculo Funcionários referente aos funcionários de uma empresa contendo uma tabela com as seguintes informações de cada funcionário: Código (string); Nome; Categoria (A, B ou C); Vencimento; Número de horas extras; Valor de uma hora extra (1% do vencimento); Total a receber.

Os vencimentos das categorias A, B e C são, respectivamente, de 1000€, 1500€ e 2000€.

Page 47: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 47 -

O número de horas extras nunca pode ser superior a 20. Faça uma macro que permita inserir ou actualizar registos de empregados, sendo dado o código de cada empregado. Nos locais referentes aos vencimentos, aos valores das horas extras e aos totais a receber, devem ser inseridas fórmulas em vez de valores. 3. Métodos iterativos para cálculo de raízes de equações não lineares Pretende-se determinar a raíz de equações da forma f ( x ) = 0, onde f é uma função contínua numa vizinhança da raiz. Um método iterativo, consiste de um modo geral, numa aproximação inicial x0, e num processo de obter sucessivamente novas iteradas xn+1 a partir das anteriores xn, ... Desta forma, pretende-se obter uma sucessão que convirja para z, solução da equação f(x)=0, também designada por raiz da equação, ou zero da função f. MÉTODO da BISSECÇÃO. Sabendo que no intervalo [a, b] a equação 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 existência da raiz. O método pode-se esquematizar:

Intervalo Inicial : [ a0, b0 ] = [ a, b ] Repetir:

1) xn+1 = ( an + bn) / 2 2) Se f (xn+1) f(an) < 0

Então an+1 = an; bn+1 = xn+1 Senão an+1 = xn+1; bn+1 = bn

Até que : f(xn+1) = 0 ou |xn+1-xn| < ε

O critério 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 equação f ( x ) = 0 e um intervalo inicial [a, b] que contenha uma raiz dessa equação calcule a raiz e o erro absoluto associado.

b) Desenhar no EXCEL a função f ( x ) para encontrar intervalos que contenham uma única raiz e utilize a function desenvolvida para encontrar as raízes da equação.

Considere as equações x4 - 4 x3 - x + 5 = 0 e 2 ex - x sin(x+3) = 0 e outras. 4. Cálculo numérico do valor de um integral -- Regra dos Trapézios Composta

Trata-se de fazer uma aproximação da função integranda, usando uma spline linear.

Page 48: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 48 -

Para simplificar, consideremos que o tamanho desses sub-intervalos é constante = h. Define-se h = ( b - a ) / N, onde N é o número de sub-intervalos ( = número de nós - 1), e temos: xi = a + i h.

O valor do integral é igual à soma dos integrais nos sub-intervalos

Aplicando a regra dos trapézios simples a cada um desses sub-intervalos,

e reparando que há termos que aparecem repetidos na soma, pode simplificar-se a expressão obtendo-se a Regra dos Trapézios Composta:

Neste caso, a fórmula do erro da regra dos trapézios composta é dada por

Calcule uma aproximação para os integrais descritos abaixo e os respectivos erros usando programação estruturada VB:

a) 1 2

0( 0.746825)xe dx− ≈∫

b) 1

0

1( 0.5945)

0.1sen dx

x ≈∫ +

5. Jogo do Ganso Um jogo simples consiste num tabuleiro contendo um percurso de quadrados e um conjunto de peças coloridas. No início do jogo cada jogador recebe uma peça; todas as peças são inicialmente posicionadas imediatamente antes do primeiro quadrado do percurso. Em cada jogada, os jogadores jogam um par de dados, e movem as suas peças para a frente o número 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 são 'normais', mas alguns são 'armadilhas'. Considere, por exemplo, o tabuleiro da figura cujos quadrados são numerados de 1 a 48. Há exactamente três armadilhas neste tabuleiro.

Page 49: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 49 -

Se a peça 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 não joga os dados e a sua peça fica nessa jogada sem avançar. O vencedor do jogo é o jogador cuja peça alcança o final do percurso após o último quadrado. Note-se ainda que não há empates no jogo. Dado o número de jogadores, o número de quadrados no percurso e a posição 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, não 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 são feitas em casas inválidas para a casa correcta da mesma coluna. No caso de vitória, devem ser marcadas as quatro casas em linha. Devem também ser contabilizados os jogos ganhos e empatados por ambas as cores. 7. Jogo do galo Este jogo é muito conhecido e dispensa apresentações. Os jogadores jogam de forma alternada usando símbolos diferentes. Deverá ser feito o teste de fim de jogo, e anular as jogadas que são feitas em casas inválidas. Devem também 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 contrário perde 5 euros.

Page 50: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 50 -

3.13 Exercícios resolvidos:

A. Escreva em VB um procedimento do tipo function para calcular

( ) ( )32

3( , , ) 3

2 3 4 1

xf x y z z

y

+= +× × × +

Resposta: Function f_xyz ( x as Double, y as Double, z as Double ) as Double

f_xyz = (x+y)/(2*3*4*(y^2+1)+(3*z)^(1/3)

End Function

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

( )

Function jogo ( N as Integer, K as Integer ) as String

Dim i, soma as Integer

soma = 0

For i = 1 to N

soma = soma + Int (RND( )*6+1)

Next i

if soma / N K Then

jogo = " ganha"

Else

j

ogo = "perde"

End if

End Function

a) Considere agora este procedimento que chama a função 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 variáveis X e Y? Resposta: X seria “perde” e Y seria “ganha”.

Page 51: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 51 -

b) E neste outro procedimento qual seria o resultado das variáveis 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 lançamento de N dados não viciados, calcula a média dos valores obtidos e se essa média for maior ou igual a K o valor da function é ganha caso contrário é perde. Nesta alínea b) e para determinar o valor de X, o dado é lançado 3 vezes, se a média dos resultados dos 3 lançamentos for maior ou igual a 2 o valor de X será “ganha” caso contrário o valor de X será “perde”. Para determinar o valor de Y, o dado é lançado uma única vez vezes, se o resultado do lançamento for 5 ou 6 o valor de Y será “ganha” e se i resultado do lançamento 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 classificação As String N = Val(InputBox("Número de disciplinas concluídas")) soma = 0 For i = 1 To N

nota = Val(InputBox("Introduza a nota de uma disciplina concluída")) soma = soma + nota

Next Resultado= soma / N

Select Case Resultado Case 10 To 13 classificação = "Suficiente" Case 14 To 17 classificação = "Bom"

Case 18 To 20 classificação = "Muito Bom" End Select

MsgBox (classificação) End Sub Resposta: O objectivo deste procedimento é: Atribuir uma classificação de Suficiente, Bom ou Muito Bom caso a média das notas das disciplinas concluídas fosse respectivamente entre 10 e 13, entre 14 e 17 ou entre 18 e 20.

Page 52: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 52 -

D. Considere a sucessão 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 parâmetro de entrada n e que calcula un, o termo de ordem n da sucessão de Fibonacci. Respostas possíveis: 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 número 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 instruções a esta function de

modo que esta verifique se um número natural N é ou não primo.

Page 53: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 53 -

Resposta Possível:

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

b) Escreveu-se um procedimento do tipo Sub, Sub primos( ), para determinar os

primeiros K primos, i.e., 2, 3, 5, 7, 11, 13,... chamando a function verifica. Este procedimento está incorrecto. Altere este procedimento garantido que o seu objectivo é determinar os primeiros K primos recorrendo à function verifica.

Sub primos( ) Dim K, X, i As Integer K = Val(InputBox("Quantos primos quer determinar?")) i = 0 X = 2 While i < K If verifica(X) Then MsgBox ("O número " & X & " é primo") X = X + 1 Wend End Sub

Possível 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 número " & X & " é primo") End If ' termina a condição if X = X + 1 Wend End Sub

Page 54: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 54 -

4 INTRODUÇÃO AO MATLAB

O MATLAB, Laboratório de Matrizes, é uma ferramenta para computação numérica e visualização gráfica destinado a utilizadores, fundamentalmente das áreas das engenharias e ciências, que precisam de para realizar cálculos matemáticos, desenvolver algoritmos, modelação, simulação, etc. Baseado em matrizes que não requerem dimensionamento, um dos objectivos principais é proporcionar ao utilizador uma solução simples e eficiente de muitos problemas computacionais que envolvem matrizes e vectores. Permite solucionar muitos problemas numéricos com um esforço muito menor do esforço que seria necessário para escrever um programa numa linguagem de programação de alto nível. O MatLab está dotado de um sistema interactivo e duma linguagem de programação. Além de bibliotecas para cálculos aritméticos básicos, oferece ainda um grande número de ferramentas (tool-boxes) para a resolução de problemas específicos da estatística, programação linear, etc. Na FEUP a versão instalada no lectivo 2011/2012 é MATLAB 7.12.0.635 (R2011a). 4.1 Ficheiros do Matlab: M-ficheiros M-Ficheiros – são ficheiros com extensão “.m” que contêm programas (scripts) e funções que podem ser chamados e executados na janela de comandos do MATLAB. programas – utilizados para armazenar comandos funções – utilizados para armazenar funções e procedimentos.

4.2 Ambiente de trabalho em MATLAB Janela de comando: Existem dois modos de utilização: 1. modo imediato - para entrar variáveis e executar os comandos 2. modo de execução de funções - 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 começar a sua execução.

Traço do programa diary <filename> → redirecciona a informação de saída para um ficheiro diary on/off → activa/ desactiva o traço do programa

Page 55: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 55 -

Janela de edição: para a edição dos M-ficheiros. Esta janela é aberta a partir do Menu File na janela de comandos escolhendo New ou Open:

Janela de gráficos: para a visualização e impressão de gráficos.Esta janela abre-se automaticamente quando se pede a execução de um gráfico. Por exemplo se na janela de comandos escrever >> x=[-4:0.01:4]; >> y=sin( x ); >> plot(x,y) Irá ser desenhada a função trigonométrica 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.

Page 56: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 56 -

4.3 Comandos de visualização e informação ; coloca-se no final da linha para suprimir a repetição (echo) do comando , coloca-se no final da linha se se deseja a repetição (echo) do comando ... coloca-se no final da linha quando o comando é demasiado longo para ser inserido numa única linha % comentário format short visualiza 4 lugares decimais format long visualiza 14 lugares decimais who lista todas as variáveis utilizadas whos lista todas as variáveis utilizadas juntamente com a informação sobre a sua dimensão what lista os ficheiros clear apaga o espaço de trabalho clear variables apaga as variáveis clear x y z apaga apenas as variáveis x, y e z da memória. clear functions apaga as funções clc limpa o display clg limpa o gráfico 4.4 Comandos para atribuir valores às variáveis >> x = 2; >> y = x^2 -3*x + 2; >> z = tan( x^2 )-cos(3*y)^2 + 2*x*y; No Matlab letras maiúsculas e minúsculas são diferentes. Evitar utilizar como nomes variáveis que sejam nomes de variáveis intrínsecas do Matlab (por ex: sin, cos, exp, sqrt, etc.). Sempre que o nome de uma função é utilizado para definir uma variável, a função deixa de poder ser utilizada. Algumas das variáveis pré-definidas: ans toma o valor do resultado da última expressão. pi o número π eps a menor diferença entre 2 números: 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 Gráficos de funções A função plot( ) - gera gráficos em R2 plot(x,y) → desenha um gráfico que passa pelos pontos (x(i),y(i)) plot(y) → desenha um gráfico 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 três gráficos com diferentes cores e formatos de linhas.

Page 57: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 57 -

Para desenhar o gráfico de uma função de uma variável 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 funções matemáticas 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) – função 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.

Page 58: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 58 -

4.7 Funções para manipulação algébrica O comando Sym e Syms permite definir variáveis simbólicas para manipulação algébrica. Por exemplo: Syms x y z Algumas das funções mais utilizadas para manipulação algébrica são: compose(f,g) - determina a composta f(g(x)). expand(expr) - expande uma expressão expr. finverse(expr) - determina a função inversa de expr. pretty(expr) - exibe a expressão expr numa forma mais bonita. simple - procura encontrar uma forma mais simples de escrever expr. simplify(expr) - simplifica a expressão expr. solve(expr) – determina as soluções da equação expr= 0. subs(expr,x,a) - substitui na expressão expr a variável 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)

Page 59: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 59 -

4.8 Exercícios: 1. Calcule as expressões seguintes para diferentes valores de x:

a) 3 cos 2

sen x

x sen x+ + b)

( )3

2 2

1

4x x− c) 2 2sec ( ) xx x e+

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

3 751

31

y xx

= ++

2

5

3z

x x

π=+ +

3. Faça os gráficos das funções e calcule as suas derivadas

5

2( )

1

xf x x

x= +

+ ; 3 / 2 25

2( )g x x x= + ; 2

1( )

xe xh x

x

− −=

4. Utilize um único gráfico para desenhar as funções ( ) sec( ) cosec( )f x x x= + e 2 3( ) ( )g x x tg x=

5. Faça os gráficos das funções ( ) ln( cos( )) (ln( ))f x arc x tg x= + e 2 3( ) ( 1) ( )g x sen x tg x= + +

6. Utilize um único gráfico para desenhar pelo menos duas das três funções

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

xg x tg e xπ= − +

2

2

( ) ( 1)( )

cos ( )

tg x arcsen xh x

x

+ +=

7. Considere ( )3 cos 2

sen xf x

x sen x=

+ + e

( )3

2 2

1( )

4

g x

x x

=−

calcule f(g(x)) e as funções inversas de f(x) e de g(x). 8. Resolva as equações:

a) 3 3 0xx x e+ − = b) 2

10

1arcsen

x = +

c) 2( )arctg x x= .

Page 60: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 60 -

4.9 Matrizes e Vectores em MatLab O MATLAB, Laboratório de Matrizes, é uma ferramenta para computação numérica e visualização gráfica. Um dos objectivos principais é proporcionar ao utilizador uma solução simples e eficiente de muitos problemas computacionais que envolvem matrizes e vectores. Todas as variáveis em MATLAB são tratadas como matrizes (arrays). Um escalar é considerado uma matriz de um por um. 4.10 Inicialização de matrizes: Uma matriz pode ser inicializada de várias formas. Por exemplo: » X = [ 1,2;3,4] %matriz 2×2 inicializada usando o operador concatenação [ ] » Y = [ 1,2,3] %vector linha, matriz 1×3 inicializada usando o operador [ ] » B = [ 1;2;3] %vector coluna, matriz 3×1 inicializada usando o operador [ ] » Z = zeros(1,5) % Inicializa um vector como uma linha com zero Z = 0 0 0 0 0 » W = zeros(3,1) % Inicializa um vector como coluna com zeros W = 0 0 0 » M = ones(2,4) % Inicializa uma matriz de 2 linhas e 4 colunas com uns M = 1 1 1 1 1 1 1 1 >> A=rand(2,4) % Inicializa uma matriz de 2 linhas e 4 colunas com valores aleatórios % 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 aleatórios com a mesma dimensão % 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 aleatórios % inteiros entre 0 e 7 out = 7 0 4 7 2 2 3 3 4 » size(M) % Devolve a dimensão de uma matriz: # de linhas, # de colunas ans = 2 4

Page 61: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 61 -

4.11 Operações sobre vectores: podem ser introduzidos e armazenados como uma matriz de uma única linha ou uma única coluna » V = [1,2,3,4] V = 1 2 3 4 » length(V) % o comprimento de um vector V ans = 4 » sum(V) % a soma dos elementos de V ans = 10 » mean(V) % a média aritmética dos elementos de V ans = 2.5000 Podem ser criados vectores utilizando o operador “:” <início : 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 números inteiros desde 1 até 20. » Y = X.^2; % um vector com cada número 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 números inteiros desde 1 to 20, com incremento 4. x = 1 5 9 13 17 4.12 Operações sobre matrizes » A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; » A(1,3) % selecciona um elemento da matriz ans =

3 » A(2:3, 1:2) % selecciona uma sub-matriz

ans = 5 6 9 10

Exemplos:

Seja X=[10,20,30,40] e � = �2 −3 01 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 2×2

A(3) 3ª componente de A quando os elementos são ordenados por colunas, -3.

A(end,:) Representa a última linha de A

Page 62: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 62 -

Outras operações sobre matrizes:

inv → inversa

A.’ → transposta

rank → característica

det → determinante

eig → valores e vectores próprios

norm → norma

rand → elementos aleatórios

eye → matriz identidade

rot90 → rotação dos elementos da matriz

fliplr → inverter matrix left-to-right

flipud → inverter matrix up-and-down

diag → extrair a diagonal principal

tril → lower triangular part

triu → upper triangular part

4.13 Operadores aritméticos, relacionais e lógicos

Operadores aritméticos Operadores aritméticos sobre matrizes

+ Adição

- Subtracção

* Multiplicação

/ Divisão à direita (a/b=a*b-1)

\ Divisão à esquerda (a\b=a-1*b)

^ Potência

.+ Somar por elemento

.- Subtrair por elemento

.* Multiplicação por elemento

./ Divisão por elemento

.^ Potência por elemento

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

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

ans =

7 10

15 22

» A.^2 % o quadrado de cada elemento

da matriz.

ans =

1 4

9 16

Operadores Relacionais Operadores Lógicos

== igual a

~= não igual a

< menor que

> maior que

<= menor ou igual a

>= maior ou igual a

~ negação

& conjunção

| disjunção

xor ou exclusivo

Page 63: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 63 -

4.14 Valores booleanos: 1 True; 0 False

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

Expressão lógica Resultado

v1==1 1 Verdadeiro

v1>v2 & v3<v4 0 Falso

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

-5<v2<-3 0 Falso

xor (v1>v2 , v3<v4) 1 Verdadeiro

(v4~=0) && (v3/v4<5) 0 o valor lógico do 2º operando só é analisado se o valor lógico do

1º não for suficiente. Neste caso evita-se a divisão por zero.

4.15 Instruções básicas de programação em MatLab

4.15.1 Instruções de Controlo

>> if faltas>0.25,passagem=0,end if expression, statements, end

>> if faltas<0.25 && nota>=10

passagem=1

else

passagem=0

end

if expression1

statements1

elseif expression2

statements2

else

statements3

end

4.15. 2 Ciclo for

for x=initval:endval, statements, end >> k=3;

>> for m=1: k , a(m)=1/m; end

>> a

a =

1.0000 0.5000 0.3333

for x=initval:stepval:endval, statements, end

Page 64: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 64 -

4.15. 3 Instruções de entrada/saída de dados Para inicializar variáveis usando a função input escrita na janela de comandos:

Var = input(‘texto’) >> r1=input('Introduza uma expressão aritmética: ') Introduza uma expressão aritmética: 5*cos(pi/4) r1 = 3.5355

Armazena o resultado de uma expressão

>> A=input('Introduza uma matriz: ') Introduza uma matriz: [1 2 3; 6 7 8] A = 1 2 3 6 7 8

Define uma matriz

>> leitura=input('Introduza um texto: ') Introduza um texto: 'Quer continuar?' leitura = Quer continuar?

Define um texto

>> A=input('Introduza uma matriz: \n ') Introduza uma matriz: [1 2 3] A = 1 2 3

‘\n’ (= mudança de linha)

Var = input(‘texto’,’s’) >> Var = input('texto?\n','s') texto? Estou na aula Var = Estou na aula

Armazena um texto

>> Pergunta=input('O que é isto? ','s') O que é isto? [1 2 3; 6 7 8] Pergunta = [1 2 3; 6 7 8]

Interpreta sempre como sendo um texto

Instruções de saída : >> x=2*cos(pi/4) x = 1.4142

Instruções sem ;

>> disp(rand(2)); 0.8147 0.1270 0.9058 0.9134

Função disp;

>> fprintf('O valor de Pi é = %f \n',pi) O valor de Pi é = 3.141593

Função fprintf

Page 65: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 65 -

4.16 Exercícios propostos: 1. Explique o resultado do seguinte código 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 número de código da FEUP>

Defina um vector X de dimensão N=10+k em que as componentes do vector tomam valores aleatórios inteiros entre 1 e os dois últimos algarismos do seu número de código da FEUP. a) Calcule a norma do vector;

b) Calcule a soma dos elementos do vector;

c) Calcule a média dos elementos do vector;

d) Calcule o produto dos elementos de índice ímpar do vector;

e) Determine o índice do primeiro elemento do vector igual ao algarismo das dezenas do

seu número da FEUP. Caso não exista deve sair uma mensagem;

f) Substitua os elementos ímpares do vector por zero;

g) Defina um vector aleatório Y de dimensão 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 n×n elementos e b um vector com n elementos, para n>3.

a) Calcule A-1

, a inversa de A, i.e., A×A-1

= A-1

×A = matriz identidade.

b) Resolva a equação Ax=b, i.e., determine o vector x.

Deve apresentar pelo menos um exemplo possível e determinado.

c) Some os elementos da diagonal principal de A;

d) Dada uma B matriz com m×n elementos, calcule a soma de A com B;

e) Calcule o produto de um escalar β pela matriz A, β×A.

4. Escreva as seguintes expressões aritméticas e/ou lógicas 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);

Page 66: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 66 -

4.17 Exercícios Resolvidos:

A. Escreva em VB ou MATLAB as seguintes instruções de atribuição, considerando todas as variáveis como escalares:

a) 9 ← :�� − !�sen(n × α); �)91 ← 0.5 × 10�>ln@� + :!A B; C)D ← +E FG

HIGJ; d) L ← � × !/cos(%� + �); Resposta possível:

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

k = x*y/Cos(Pi/2+n) k = x*y/cos(pi/2+n)

B. Escreva as seguintes expressões em MatLab e indique o resultado, começando por atribuir

valores a A, B e T.

a)) ← � ≤ 3M�, = 0; N7C9+O�()); b) )5 ← � ≠ ,+|� − ,| > 10�>; N7C9+O�()5); c) 7+Q = 0+�RãMT ← 17+�ãMT ← :1 + 1/Q; N7C9+O�(T);

Resposta possível:

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 código MatLab:

a) >> D=1+fix(6*rand(1,10)); R=mod(D,3); C=prod(R);C

C =

0

Resposta possível:

A função rand(1,10) cria uma matriz de 1 linha e 10 colunas com elementos aleatórios entre 0 e 1; a instrução D=1+fix(6*rand(1,10)) vai criar um vector com 10 elementos aleatórios inteiros entre 1 e 6 (ver exercício do Lançamento de dados); a instrução R=mod(D,3) vai criar um vector com 10 elementos que são o resto da divisão inteira de cada elemento de D por 3; a instrução 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 instrução C obriga à escrita do valor da variável C.

Page 67: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 67 -

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

1

Resposta possível:

A instrução h=0.1 atribui à variável h o valor 0.1; a instrução X=[0.5:-h:0] cria um vector com elementos começando 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 instrução Y=cos(X).^X vai criar um vector em que cada elemento de é calculado à custa de cada elemento de X usando a função cos(x)^x; a instrução 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 instruções de atribuição, considerando todas as variáveis como escalares:

a) 9 ← � cos(U − R); �)91 ← +�VW; C)D ← 7+� E �

�0� + �XJ ; d) L ← :&Y�1Y&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

^ 2.5

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

y)/y^2.5

E. Escreva as seguintes expressões em MatLab e indique o resultado, começando por atribuir

valores a A, b, B e M.

a)) ← � ≥ 3M�, = 0 b) )5 ← (� ≠ �M�� > −3)+� > 0 c) 7+\é^ú`Rab`Mc+5M�c+7+�RãM\ ← \ ∗ 2; N7C9+O�(\); Resposta Possível:

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

Page 68: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 68 -

F. Explique o resultado do seguinte código 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 Possível: 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 aleatórios inteiros entre 2 e 7; C=A+B; → Constroi a matriz C soma de A com B e os elementos tomam

valores aleatórios inteiros entre 3 e 8; V=find(C==1) → Constroi um vector V com a localização dos elementos de C

cujos valores são exactamente 1. Como todos os elementos de C estão entre 3 e 8 a resposta é vector V vazio. Resposta Possível:

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 divisão inteira prod(S) por 3; if mod(prod(S),3)==0 , S=10*S; end; → Se o resto da divisão inteira prod(S)

por 3 for exactamente 0 então os elementos de S são multiplicados por 10; senão não faz nada;

S → Escreve o vector S. Como neste exemplo o produto dos elementos de S é múltiplo de 3, o novo vector S tem os elementos iguais a 10 vezes os elementos do vector S inicial.

Page 69: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 69 -

5. Programação em MatLab - introdução

5.1 Programas (script) - um conjunto de comandos e instruções em MatLab

armazenadas num M-Ficheiro

% <program-name>

{<specification-statements>}

{<executable-statements>}

Exemplo 1: Escreva um programa em MatLab que construa o gráfico da função

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 funções num largo conjunto de dados. Por

exemplo, se X=[-1 0 1], então sin(X) produz o resultado [sin(-1) sin(0) sin( 1)].

Do mesmo modo se X= [0:pi/8:pi] então Y=sin(X) produz um vector Y com a mesma

dimensão que X e com os correspondentes valores de sen(x).

% PlotSin – constroi o gráfico da função y=sin(x)

X = 0:pi/16:pi;

Y = sin(X);

figure(1); clf;

hold on;

axis([-0.2 3.2 -0.1 1.1]); % define os eixos de oordenadas

plot([-0.2 3.2],[0,0],[0,0],[-0.1 1.1]); % desenha os eixos

plot(X,Y); % desenha o gráfico

xlabel('x');

ylabel('y');

title('Graph of y = sin(x)');

grid;

hold off;

Execute o programa PlotSin na

janela de comandos do MATLAB.

>> PlotSin

O seguinte gráfico será visualizado:

Comentário: O comando plot requer dois

vectores de igual dimensão.

Page 70: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 70 -

Exemplo 2: Escreva um programa em MatLab que construa o gráfico do polinómio

p(x) = x5 – 10 x4 + 35 x3 – 50 x2 + 24.

Grave o programa num ficheiro com o nome PlotPoly.m

% PlotPoly constroi o gráfico do polinómio

figure(1);clf;

C = [1 -10 35 -50 24]; % define um vector com os coeficientes do polinómio

X=[-0.2:0.1:4.2]; % define as abcissas

Y=polyval(C,X); % polyval - função que avalia um polinómio

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 gráfico

hold on;

xlabel('x');

ylabel('y');

title('Gráfico de um polinómio');

grid;

Execute o programa PlotPoly. O seguinte gráfico será visualizado:

Exemplo 3: Escreva um programa em MatLab onde o utilizador pode introduzir uma

função para construir o gráfico.

Sugestão: A função f pode ser definida como texto, por exemplo, se f=’sin(x)’, então

pode ser usado o comando fplot(fun,limits) ou fplot(fun,limits, LineSpec).

Page 71: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 71 -

% PlotFun constroi o gráfico de uma função

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 gráfico

hold on;

xlabel( 'x' );

ylabel( 'y' );

title(f);

grid;

5.2 Funções em MatLab

function [lista de parâmetros de saída] = nome (lista de parâmetros de entrada)

{<instruções para declaração de variáveis>}

{<instruções de execução>}

Exemplo 4 : Implemente a função sraiz para determinar a raíz quadrada positiva de um

número positivo pelo método de Newton. Grave esta função no M-ficheiro sraiz.m.

function [r]=sraiz(A)

% Método 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 função sraiz na janela de comandos do MATLAB, obtém-se:

>> sraiz(9) 5 3.4000 3.0235 3.0001 3.0000 3 3

Page 72: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 72 -

Exemplo 5 : Implemente em Matlab a função f2ramos definida por:

e(f) = g h�i jhi < 0k + lmnop(i) jhi ≥ 0

Grave esta função no M-ficheiro f2ramos.m

function [y]=f2ramos(t)

if t<0

y=exp(-t);

else

y=1+atan(t);

end

Agora executando a função f2ramos na janela de comandos do MATLAB, obtém-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 função fprintf( formato, resultados) em que format é um string.

Alguns caracteres de conversão, controlos de escrita do texto utilizados no formato são:

\t tabelamento (de 4 em 4 caracteres)

%d inteiro

%f real em vírgula fixa com 6 casas decimais

%s texto

%e real em vírgula flutuante com 6 casas

decimais

\n muda de linha

%g real na forma mais compacta 0 os espaços são preenchidos por zeros

Page 73: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 73 -

Exemplo 6 : Escreva as seguintes funções MatLab nos ficheiros f.m and G.m.

function y = f(x)

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

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

x = Z(1);

y = Z(2);

W = [x.^2-y.^2 2*x.*y];

Execute as funções f e G na janela de comandos. Obtém-se:

» f(pi/2)

ans =

1.85463599915323

» G([2 1])

ans =

3 4

Exemplo 7 : Escreva as seguintes funções 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 função chamada na janela de comandos do MATLAB, obtém-se

por exemplo:

>> z=chamada(0)+chamada(1)

z =

5.5708

Page 74: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 74 -

Se introduzir na janela de comandos a seguinte instrução 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 instrução save nome_ficheiro lista_variáveis opções guarda variáveis do workspace

num ficheiro. Para carregar para o espaço de trabalho as variáveis guardadas num

ficheiro utiliza-se a instrução load nome_ficheiro lista_variáveis. Por exemplo:

>> clear variables

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

>> clear variables

>> load fich1 a b;disp(a);disp(b)

1

3.5598

5.4 Instruções de Controlo para programação em MatLab

5.4.1 IF – ELSEIF – ELSE – END if (<expresão-lógica#1>), {<instruções executáveis>} elseif (<expresão-lógica#2>), {<instruções executáveis>} …. else {<instruções executáveis>} 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

Page 75: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 75 -

5.4.2 Ciclo FOR

for variável = expressão

{<instruções executáveis>}

end

Exemplo 7: Exemplo 8: Exemplo 9:

for k=1:100,

x=sqrt(k);

if x>5, break, end

end

sum1 = 0;

for k = 1:1:10000,

sum1 = sum1 + 1/k;

end

» sum1

sum1 =

9.78760603604434

sum2 = 0;

for k = 10000:-1:1,

sum2 = sum2 + 1/k;

end

» sum2

sum2 =

9.78760603604439

A instrução break interrompe o ciclo

A instrução Pause gera uma pausa na execução do programa

5.4.3 Ciclo WHILE

while <expressão>

{ <instruções executáveis>}

end

Exemplo 11:

m = 10;

k = 0;

while k<=m

x = k/10;

disp([x, x^2, x^3]); % uma tabela de valores

k = k+1;

end

Page 76: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 76 -

5.5 Outras funções do MatLab

Nota: exemplos de utilização destas funções podem ser estudadas usando o HELP

Funções Matemáticas:

cos(x) → cosine (radians)

sin(x) → sine (radians)

tan(x) → tangent (radians)

cosd(x) → cosine (degrees)

sind(x) → sine (degrees)

tand(x) → tangent (degrees)

exp(x) → exponential exp(x)

acos(x) → inverse cosine (radians)

asin(x) → inverse sine (radians)

atan(x) → inverse tangent (radians)

log(x) → natural logarithm base e

log10(x) → common logarithm base 10

sqrt(x) → square root

abs(x) → absolute value

round(x) → round to nearest integer

fix(x) → round towards zero

floor(x) → round towards -ì

ceil(x) → round towards +ì

sign(x) → signum function

cosh(x) → hyperbolic cosine

sinh(x) → hyperbolic sine

tanh(x) → hyperbolic tangent

acosh(x) → inverse hyperbolic cosine

asinh(x) → inverse hyperbolic sine

atanh(x) → inverse hyperbolic tangent

real(z) → real part of complex number z

imag(z) → imaginary part of complex number z

conj(z) → complex conjugate of the complex number z

angle(z) → argument of complex number z

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

Funções para Análise de Dados:

max → maximum value

min → minimum value

mean → mean value

median → median value

std → standard deviation

sort → sorting

sum → sum the elements

prod → form product of the elements

cumsum → cumulative sum of elements

cumprod → cumulative product of elements

diff → approximate derivatives (differences)

hist → histogram

corrcoef → correlation coefficients

cov → covariance matrix

Page 77: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 77 -

5.6 Gráficos 3-D

Exemplo de gráfico de linhas:

>> % Exemplo de utilização da função plot3(x,y,z)

>> z=[0:0.1:10];

>> x=z.*cos(2*z);y=z.*sin(2*z);plot3(x,y,z);

>> title('Gráfico de linha 3-D'); grid on

Exemplos de outros gráficos 3-D são os chamados gráficos de superfície e de contornos

cujos exemplos podem ser consultados usando a facilidade HELP do MatLab.

Page 78: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 78 -

5.7 Exercícios de introdução à Programação em MatLab

5 Uma equação do 2º grau tem a forma genérica ��� + �� + C = 0com� ≠ 0.

Escreva um programa em MatLab que leia os valores dos parâmetros a, b e c e determine as duas raízes da equação.

Nota: as raízes podem ser reais ou complexas.

6 Numa conta a prazo com capitalização automática o valor do juro é acumulado ao capital inicial no final de cada período. Assim, o capital acumulado ao fim de N períodos é dado pela equação

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 número de anos N e que calcule o capital acumulado ao fim desses anos.

7 Escreva um programa em MatLab que mande desenhar um gráfico com várias

funções sobrepostas. O utilizador deve poder escolher quantas e quais as funções a introduzir para construir o gráfico.

8 Escreva uma função em MatLab para procurar numericamente o limite

lim&→v T(�)

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

sucessão: � + wx , � + w

xY , … , � + wxH , … para valores de b e n dados sendo h

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

a) lim&→� E z{ &&Y��J b) lim&→�(7+��)&

9 A instrução 1+fix(6*rand(1,10)) simula o resultado de fazer dez lançamentos de um

dado. Usando uma instrução semelhante, escreva um programa para: a) Contabilizar o número de vezes que em 50 lançamentos saíram valores

pares; b) Contabilizar o número de vezes que nos 50 lançamentos, a soma do

resultado de dois lançamentos consecutivos foi de exactamente 8.

Page 79: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 79 -

LABORATÓRIOS DE INFORMÁTICA - MIEA

RESOLUÇÃO dos Exercícios 1 a 6 do TESTE de 20 de Janeiro 2011

1. Escreva em VB ou MATLAB as seguintes instruções de atribuição, considerando todas as variáveis como escalares:

b) � ← :�' + !'cos( ���0�); �), ← 2.5 × 105lnE%

� + �J; C)q ← +@ √10&A B; d) ← �/sen(1 + 1/R);

Resposta possível:

1. VB Matlab a) A = Sqr(x ^ 3 + y ^ 3) * Cos(-1 / (n + 1)) A=sqrt(x^3+y^3)*cos(-

1/(n+1));

b) Pi = Atn(1) * 4 B = 250000 * Log(Pi / 2 + n)

B=2.5e5*log(pi/2+n);

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

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

2. Escreva as seguintes expressões em MatLab e indique o resultado, começando por atribuir valores a x e y.

a) � ← � ≠ 0+! ≥ 1/�; N7C9+O�(�);

b) L ← � + !; 7+L < 0+�RãM, ← 10�>

7+�ãM, ← L ∗ 10�>;N7C9+O�(,);

c) � ← 3; b�9�a ← 1�Ré�T�ç�}� ← � + a;

N7C9+O�(�);

Resposta possível:

2. MatLab Resultado a) x=2;y=1;A=x~=0&&y>=1/x;disp(A); A = 1 b) x=2;y=1;k=x+y;

if k<0,B=1.e-4; else B=k*1.e-4; end ,disp(B); B = 3. e-004

c) x=2;n=3; for i=1:n, x=x+i; end ,disp(x); x = 8

3. Em MatLab a instrução randint(30,1, [1,6]) simula o resultado de 30 lançamentos de um dado. Usando esta instrução escreva: a) um script em Matlab para contar o número de vezes que em 30 lançamentos de um dado sai um

resultado ímpar; b) um script em Matlab para contar o número de vezes que em 30 lançamentos de um dado a soma

dos resultados de 2 lançamentos consecutivos é superior a 6.

Page 80: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 80 -

Resposta possível:

3. MatLab a) X=randint(30,1,[1,6]);R=mod(X,2);disp(sum(R)); b) 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 máximo e o valor mínimo de N números reais a introduzir.

Resposta possível: Cabeçalho: Objectivo: Determinar o valor máximo e o valor mínimo de N números reais; V. Dados: N, inteiro, quantidade de números reais; X, real, números reais a introduzir; V. Resultado: Max, real, máximo a calcular; Min, real, mínimo a calcular; V. Aux: i, inteiro, contador de ciclo.

Corpo: Leia (N); Leia(X); Max←X; Min←X; Para i ← 2 até N faça Leia(X); Se X > Max então Max ← X; Se X< Min então Min ← X; Escreva (Max,Min);

5. Considere o seguinte algoritmo que verifica se um número natural N dado é primo ou não:

Cabeçalho: Objectivo: V.Dados: V. Resultado: V. Aux:

Corpo: Leia (N); R ← Verdadeiro; d←2; Enquanto R =Verdadeiro e d<N faça

se N mod d=0 então R←Falso; d←d+1;

Escreva ( R );

a) Percorra o algoritmo para N=7. Quantas vezes executou o ciclo do “enquanto” ? RESPOSTA:

N R d R=Verdadeiro e d<N

N mod d=0

7 Verdadeiro 2 Verdadeiro Falso 3 Verdadeiro Falso 4 Verdadeiro Falso 5 Verdadeiro Falso 6 Verdadeiro Falso 7 Falso

RESPOSTA: Percorreu o ciclo do enquanto 5 vezes.

b) Preencha o cabeçalho do algoritmo.

Page 81: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 81 -

Resposta possível: Cabeçalho: Objectivo: Verificar se um número natural N é primo; V.Dados: N, inteiro, número natural a introduzir; V. Resultado: R, Booleana, toma o valor Verd se N é primo, toma o valor Falso

se N não é primo; V. Aux: d, inteiro, divisores possíveis de N;

c) Escreva uma função em Vb, Function primo (ByVal N As Integer ) As Boolean que permita determinar se um número inteiro é primo ou não. Resposta possível:

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 sequência de Collatz pode ser definida do modo seguinte: inicia-se com qualquer número natural n0 maior do que 1; o número seguinte na sequência, 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 número 1. Por exemplo, iniciando a processo com o número 52, a sequência será: 52 26 13 40 20 10 5 16 8 4 2 1. Escreveu-se em VB a seguinte função que calcula o elemento seguinte da sequência:

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 instruções de modo que esta calcule o termo seguinte da sequência.

Page 82: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 82 -

Resposta possível 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 número inicial e escreva a sequência daí em diante até 1, considerando a chamada da função definida anteriormente. Resposta possível 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

Page 83: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 83 -

LABORATÓRIOS DE INFORMÁTICA - MIEA

RESOLUÇÃO dos Exercícios 1 a 5 do TESTE de 7 de Fevereiro 2011

1. Escreva em VB ou MATLAB as seguintes instruções de atribuição, considerando todas as variáveis como escalares:

c) � ← � + ! ∗ +@√&B; �), ← 2.5 × :�' + !'[ ; C)q ← sen(X9�); d) ← � ∗ R~(R + 1/(1 + R));

Resposta possível:

1. VB Matlab a) A = x + y * Exp(Sqr(x)) A = x+y*exp(sqrt(x)); b) B= 2.5 * (x ^ 3 + y ^ 3) ^ (1 / 5) B= 2.5*(x^3+y^3)^(1/5); c) Pi = Atn(1) * 4

C = Sin(Pi * r ^ 2) C = sin(pi*r^2);

d) D = x * Tan(t + 1 / (1 + t)) D = x*tan(t+1/(1+t));

2. Escreva em VB ou MATLAB cada bloco de instruções e indique o resultado: a) � ← 10; ! ← 20; � ← � ≠ 0+! ≥ 1/�; N7C9+O�(�);

b)

� ← −3; ! ← |�|; L ← � + !; 7+L ≠ 0+�RãM}L ← 10�>; N7C9+O�(L);

c)

� ← 1; � ← 3; b�9�a ← 1�Ré�T�ç�}� ← � ∗ a;N7C9+O�(�);

d)

�M^� ← 0; � ← 1; � ← 3; N�����RM� < �T�ç� g�M^� ← �M^� + ��;� ← � + 1;

N7C9+O�(�M^�);

Resposta possível:

2. MatLab Resultado a) x=10;y=20; A=x~=0 && y>=1/x; disp (A); A=1 b) x=-3;y=abs(x); k=x+y;

if k~= 0, k=1.e-4;end, disp(k); k=0

c) x=1;n=3; for i=1 : n, x=x*i; end, disp(x); x=6 d) Soma=0; x=1; n=3;

while x<n, Soma=Soma+x^2;x=x+1; end, disp(Soma); Soma=5

Page 84: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 84 -

Resposta possível:

2. VB Resultado a) x=10

y=20 A=x< >0 And y>=1/x Msgbox(A)

A=True

b) x=-3 y=Abs(x) k=x+y if k< >0 Then k=1.e-4 End if Msgbox (k)

k=0

c) x=1 n=3 For i=1 To n x=x*i Next i Msgbox(x)

x=6

d) Soma=0 x=1 n=3 While x<n Soma=Soma+x^2 x=x+1 Wend Msgbox(Soma)

Soma=5

3. Considere que mensalmente o número médio de visitantes a um determinado museu varia entre 20 e 120. A instrução 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 número médio mensal de visitantes nos 12 meses do ano de 2011.

a) Considerando que o preço 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 instrução A=20+100*rand (12,1); deve ser utilizada).

Resposta possível: A=20+100*rand(12,1); valor=5*sum(A); disp(valor);

b)Considerando que no início 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 mês irão os postais esgotar?

Resposta possível: A=20+100*rand(12,1); total=500;i=0; while total>0, i=i+1;total=total-A(i); end , disp(i);

Page 85: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 85 -

c) No início do ano, o director do museu determinou que a próxima encomenda de postais seja feita quando o stock baixar para 50. Utilizando os dados fornecidos, escreva um script em Matlab para determinar para que mês se deve agendar essa encomenda? Resposta possível: 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 números inteiros positivos, escreva um algoritmo que calcule quantos desses números são simultaneamente múltiplos de 5 e de 7.

Exemplo: para N=6 e dado o conjunto � = }2, 70, 42, 35, 14, 5� o resultado é 2.

Cabeçalho: Objectivo: Dado um conjunto de N números inteiros positivos, quantos desses inteiros são simultaneamente múltiplos de 5 e de 7. V.Dados: N, inteiro, dimensão do conjunto; X, inteiro, elementos do conjunto; V. Resultado: conta, inteiro, contador do nº de múltiplos de 5 e de 7; V. Aux:

Corpo: Leia (N); conta ← 0; Para i ← 1 até N faça

Leia(X); Se (X mod 5)=0 e (X mod 7)=0 então conta ← conta+1;

Escreva ( conta );

a) Percorra o seu algoritmo para o exemplo indicado na alínea anterior. RESPOSTA:

N conta i X (X mod 5)=0 e (X mod 7)=0

6 0 1 2 Falso 2 70 Verdadeiro 1 3 42 Falso 4 35 Verdadeiro 2 5 14 Falso 6 5 Falso

b)Escreva um procedimento em VB do tipo Sub, Sub conta_multiplos ( ),que leia um conjunto de números inteiros e calcule quantos desses números são ao mesmo tempo múltiplos de 5 e de 7.

Page 86: APONTAMENTOS DE EXCEL, VB e MATLAB elaborados pela Prof

Laboratórios de Informática MIEA 2012/13

Profª Catarina Castro - 86 -

Resposta possível: 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 números pares: "Todo o número par maior ou igual a 4 é a soma de dois números primos." Exemplos: 8 = 3 + 5; Escreva um procedimento em VB do tipo Sub, Sub Goldbach ( ), que leia um número natural par maior ou igual a 4 e escreva os 2 números primos que verificam a conjectura de Goldbach. O procedimento desenvolvido deve considerar a chamada da função Function verifica (ByVal N As Integer ) As Boolean definida abaixo que verifica se um número inteiro maior do que 1, é primo ou não (não tem que reescrever a função). Resposta possível: 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 número par " & n & ">= 4 é a soma dos primos " & i & " e " & n - i) End Sub