APONTAMENTOS DE EXCEL, VB e MATLAB



Documentos relacionados
Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

Formador: Carlos Maia

1. Criar uma nova apresentação

Alguns truques do Excel. 1- Títulos com inclinação. 2- Preencha automaticamente células em branco

Microsoft Excel Macro V. Índice 16-) Formulários ) Gerando código para o Formulário... 49

Criar um formulário do tipo Diálogo modal ; Alterar a cor de fundo de um formulário; Inserir botões de comando e caixas de texto;

Facturação Guia do Utilizador

Folha de Cálculo Introdução à Folha de Cálculo

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel

GESTÃO DE INFORMAÇÃO PESSOAL OUTLOOK (1)

Alteração do POC (Decreto de Lei nº. 35/2005) no sispoc

Manual de Utilizador. Caderno. Recursos da Unidade Curricular. Gabinete de Ensino à Distância do IPP.

Manual do Utilizador. Manual do Utilizador Modelo10 no sisgep. Data última versão: Versão : 1.2. Data criação:

Boot Camp Manual de Instalação e Configuração

8. Perguntas e Respostas

Catálogo Nacional de Compras Públicas. Manual de Fornecedores

Validação e Proteção de dados no Excel

MICROSOFT ACCESS MICROSOFT ACCESS. Professor Rafael Vieira Professor Rafael Vieira

Manipulação de Células, linhas e Colunas

Base de dados I. Uma base de dados é um simples repositório de informação relacionado com um determinado assunto ou finalidade

Acessos Convergentes. Manual de Configuração e Utilização

FICHA ORIENTADA Nº1. Barra de fórmulas. Área de trabalho T E C N O L O G I A S D E I N F O R M A Ç Ã O E C O M U N I C A Ç Ã O

Para ver alguma coisa acontecer talvez seja preciso, primeiro, apagar o conteúdo da célula B2.

Microsoft Excel. O que é? Para que serve? É um poderoso programa de folha de cálculo.

Como produzir e publicar uma apresentação online dinâmica (Prezi)

UNIDADE 2: Sistema Operativo em Ambiente Gráfico

TUTORIAL PARA PREPARAÇÃO E IMPORTAÇÃO DE DADOS PARA. Os dados de suas coletas devem ser organizados em uma planilha eletrônica, de modo

Tabelas vista de estrutura

Estatística no EXCEL

1. Verificar se a Microsoft.NET Framework 2.0 está instalada. Se não estiver, efectuar o download a partir do link e instalar:

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Introdução aos Sistemas Informáticos

MICROSOFT POWERPOINT

Manual para criar actividades com o Jclic. Versão 1.0. Manual de Luís Vives Traduzido e adaptado por. Milena Jorge

BARRA DE PROGRESSO EM VBA

Gestor de Janelas Gnome

Oficina de Construção de Páginas Web

Curriculum DeGóis Guia de preenchimento do Curriculum Vitae (Informação mínima necessária)

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

Trabalho de laboratório Avaliação semestral Exame final MÉDIA PONDERADA CONCEITO

Aula 01 Conceitos Iniciais sobre Excel 2010

A p o s t i l a M i c r o s o f t A c c e s s 97

Akropole Catequista. Todos os Ficheiros no Akropole Catequista trabalham com uma simples barra de edição, com 4 botões:

MANUAL DE UTILIZAÇÃO DO EQUIPA TIC

Aplicações de Escritório Electrónico

Usando o do-file editor Automatizando o Stata

PAINEL DE ADMINISTRADOR

MATERIAL DE APRESENTAÇÃO DO SCRATCH

PRINCÍPIOS DE INFORMÁTICA PRÁTICA OBJETIVO 2. BASE TEÓRICA. 2.1 Definição de Planilha Eletrônica

LASERTECK SOFTECK FC MANUAL DO USUÁRIO

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

4 Criação de macros e introdução à linguagem VBA

Neste tópico, você aprenderá a criar facilmente um banco de dados para uma nova empresa e a definir configurações comuns de uma empresa no SAP

DotNetNuke. Gestão de Conteúdos. Módulos - II. Inserção de conteúdos nos módulos. Módulo de Text/HTML. Módulo de Sre-Notícias. Módulo de Sre-Formação

Manual de Recibos. Manual de Recibos

Boot Camp Manual de Instalação e Configuração

Índice. Como aceder ao serviço de Certificação PME? Como efectuar uma operação de renovação da certificação?

Guia rápido de criação e gestão de um espaço no SAPO Campus

Arquimedes e Controle de Obra

Conectar diferentes pesquisas na internet por um menu

Tarefa 18: Criar Tabelas Dinâmicas a partir de Listas de Excel

Visão Artificial Para a Indústria. Manual do Utilizador

Gestor de ligações Manual do Utilizador

O QUE É A CENTRAL DE JOGOS?

COMO PROGRAMAR SEU TIME

Laboratório de Programação I

Como enviar e receber correio eletrónico utilizando o Gmail

Associação Educacional Dom Bosco Curso de Engenharia 1º ano

Manual do Utilizador. Janeiro de 2012.

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

Manual do Gestor da Informação do Sistema

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

2ºCiclo (5º e 6º Anos de escolaridade) 3ºCiclo (7º e 8º Anos de escolaridade)

Bem-vindo ao nosso mundo virtual! Guia do Portal de Ensino à Distância da Get Training 1

Mas para iniciar o uso do CRM é necessário efetuar algumas configurações em primeiro lugar.

INTRODUÇÃO À LINGUAGEM C++

Licenciatura em Eng.ª Informática Redes de Computadores - 2º Ano - 2º Semestre. Trabalho Nº 1 - Ethereal

Sumário. 1. Propósito 1 2. Tabela de Ferragem 1 3. Criar Tabela de Ferragem 1 4. Conector de Ferragens 7

1.1. Clique no botão Iniciar, seleccione Todos os programas, Microsoft Office e no submenu aberto escolha o programa Microsoft FrontPage.

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

Tutorial :: Introdução ao VHDL em ambiente Design Works

JavaScript (ou JScript)

Primeiros passos das Planilhas de Obra v2.6

Manual do Teclado de Satisfação Online WebOpinião

APOSTILA ZELIO SOFT 2

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

MANUAL DA SECRETARIA

E x c e l 5 M a c r o s e V B A

Passo 3: No diagrama de blocos com o menu de funções aberto (Figura anterior), abra a função express Signal Analysis e escolha Simulate signal.

Visual Basic for Applications: # 1

Lição 1 - Criação de campos calculados em consultas

Informática básica Telecentro/Infocentro Acessa-SP

APOSTILA DE EXEMPLO (Esta é só uma reprodução parcial do conteúdo)

Manipulando Strings no VBA (Replace, Mid e InStr)

Aula 4 Estatística Conceitos básicos

Cópia de Segurança e Recuperação Manual do utilizador

Instituto Superior Técnico Licenciatura em Engenharia Informática e de Computadores. Projecto de. Arquitectura de Computadores.

Transcrição:

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

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

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

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

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

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

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 e finalmente new ou edit abre a janela de edição VB: ou - 7 -

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

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 Leia (x,y); Soma x + y; Escreva (soma); VB 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 - 9 -

Laboratórios de Informática MIEA 2012/13 1.7 INSTUÇÕES DE CONTROLO E SELECÇÃO Instrução condicional simples: Instrução condicional dupla: - 10 -

Laboratórios de Informática MIEA 2012/13 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 - 11 -

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

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

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

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

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= 1 3 +5 3 +3 3. 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. - 16 -

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 x 2 ; 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 b 2-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. - 17 -

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

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

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

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

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

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

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

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

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

- 27 -

2.10 Exercícios n k x x 1. A função e é aproximada pelo polinómio Pn ( x) = para valores de x na k! k = 0 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 P ( x ) para n=2, 5 e 7. Calcule o erro relativo com que o polinómio aproxima a função n x e nos diversos pontos e desenhe-o. Que conclusões tira? 2. Uma função f ( x ) é aproximada pelo polinómio de Taylor n k ( k) ( x a) Pn, a ( x) = f ( a) para valores de x na vizinhança de a. k! k= 0 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 Pn, a ( 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. - 28 -

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

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

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

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

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

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

e para executar esta instrução basta clicar no botão: - 35 -

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

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

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

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

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

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

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

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

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 Dest; 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 - 44 -

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( ) Sub torres_hanoi(n, origem, temp, destino) If IsNumeric(ActiveCell.Value) Then torres_hanoi ActiveCell.Value, "A", "B", "C" End If End Sub 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. - 45 -

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

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 x 0, e num processo de obter sucessivamente novas iteradas x n+1 a partir das anteriores x n,... Desta forma, pretende-se obter uma 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 [ a n, b n ] com metade do comprimento dos anteriores, onde se assegura a existência da raiz. O método pode-se esquematizar: Intervalo Inicial : [ a 0, b 0 ] = [ a, b ] Repetir: 1) x n+1 = ( a n + b n ) / 2 2) Se f (x n+1 ) f(a n ) < 0 Então a n+1 = a n ; b n+1 = x n+1 Senão a n+1 = x n+1 ; b n+1 = b n Até que : f(x n+1 ) = 0 ou x n+1 -x n < ε O critério de paragem utilizado é x n+1 -x n < ε onde o valor ε>0 é um valor suficientemente pequeno, o erro absoluto verifica e n+1 < ½ a n - b n = x n+1 - x n < ε. Pode-se determinar facilmente um majorante do erro para uma iterada x n a partir do comprimento do intervalo inicial: e n < ½ a n-1 - b n-1 = (1 / 2) n a 0 - b 0 a) Escrever uma macro em VB tal que dada uma 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 x 4-4 x 3 - x + 5 = 0 e 2 e x - 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. - 47 -

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: x i = 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 x 2 0 e dx ( 0.746825) b) 1 0 1 sen dx x + 0.1 ( 0.5945) 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. - 48 -

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

3.13 Exercícios resolvidos: A. Escreva em VB um procedimento do tipo function para calcular x + 3 f ( x, y, z) = + 3 ( 3z) 2 2 3 4 y + 1 ( ) Resposta: Function f_xyz ( x as Double, y as Double, z as Double ) as Double f_xyz = (x+y)/(2*3*4*(y^2+1)+(3*z)^(1/3) End Function B. Escreveu-se em VB o seguinte procedimento do tipo function Function jogo ( N as Integer, K as Integer ) as String Dim i, soma as Integer soma = 0 For i = 1 to N soma = soma + Int (RND( )*6+1) Next i ( ) if soma / N K Then jogo = " ganha" Else jogo = "perde" End if End Function a) Considere agora este procedimento que chama a 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. - 50 -

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

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 u n, 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. - 52 -

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 Wend End Function ' verifica se n tem divisores b) Escreveu-se um procedimento do tipo Sub, Sub primos( ), para determinar os primeiros K primos, i.e., 2, 3, 5, 7, 11, 13,... chamando a function verifica. Este procedimento está incorrecto. Altere este procedimento garantido que o seu objectivo é determinar os primeiros K primos recorrendo à function verifica. 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 MsgBox ("O número " & X & " é primo") X = X + 1 Wend End Sub 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 - 53 -

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

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

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

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

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

4.8 Exercícios: 1. Calcule as expressões seguintes para diferentes valores de x: sen x 1 2 2 a) b) c) x sec ( x ) + e 3 + cos x + 2 sen x 2 4x x 2 ( ) 3 x 2. Calcule para x= 0, 3 e 30 os valores de y e de z y 1 x + 1 = 5 + 3 7 3x z = x 2 5π + x + 3 3. Faça os gráficos das funções e calcule as suas derivadas 5 x f ( x) = + 2 x + 1 x ; g( x) x x e h( x) = 3 / 2 5 2 = + ; 2 2 x x 1 x 4. Utilize um único gráfico para desenhar as funções f ( x) = sec( x) + cosec( x) e g x 2 3 ( ) = x tg( x ) 5. Faça os gráficos das funções f ( x) = ln( arc cos( x)) + tg(ln( x)) e g x sen x tg x 2 3 ( ) = ( + 1) + ( ) 6. Utilize um único gráfico para desenhar pelo menos duas das três funções 2 x π f ( x) = cos( x) + sen ( x) g( x) = 2 tg( e ) 5sec( x) + 2 tg x h( x) = 2 ( ) + arcsen( x + 1) 2 cos ( x) sen x 7. Considere f ( x) = 3 + cos x + 2 sen x e calcule f(g(x)) e as funções inversas de f(x) e de g(x). g( x) = 1 ( ) 3 2 4x x 2 8. Resolva as equações: a) 1 + 3 = 0 b) arcsen 0 2 = 1+ x 3 x x e x c) arctg( x) 2 = x. - 59 -

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

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 0 1 4 5 X(2:4) X(:) A(:,3) X(end) B=A(:,2) Representa da 2ª à 4ª componente Vector coluna com todas as componentes de X Representa a 3ª coluna de A Representa a última componente de X 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 - 61 -

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 + Adição - Subtracção * Multiplicação / Divisão à direita (a/b=a * b -1 ) \ Divisão à esquerda (a\b=a -1 *b) ^ Potência Operadores aritméticos sobre matrizes.+ 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 == igual a ~= não igual a < menor que > maior que <= menor ou igual a >= maior ou igual a Operadores Lógicos ~ negação & conjunção disjunção xor ou exclusivo - 62 -

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 for x=initval:stepval:endval, statements, end >> k=3; >> for m=1: k, a(m)=1/m; end >> a a = 1.0000 0.5000 0.3333-63 -

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 >> A=input('Introduza uma matriz: ') Introduza uma matriz: [1 2 3; 6 7 8] A = 1 2 3 6 7 8 >> leitura=input('introduza um texto: ') Introduza um texto: 'Quer continuar?' leitura = Quer continuar? >> A=input('Introduza uma matriz: \n ') Introduza uma matriz: [1 2 3] A = 1 2 3 Armazena o resultado de uma expressão Define uma matriz Define um texto \n (= mudança de linha) Var = input( texto, s ) >> Var = input('texto?\n','s') texto? Estou na aula Var = Estou na aula >> Pergunta=input('O que é isto? ','s') O que é isto? [1 2 3; 6 7 8] Pergunta = [1 2 3; 6 7 8] Instruções de saída : >> x=2*cos(pi/4) x = 1.4142 >> disp(rand(2)); 0.8147 0.1270 0.9058 0.9134 >> fprintf('o valor de Pi é = %f \n',pi) O valor de Pi é = 3.141593 Armazena um texto Interpreta sempre como sendo um texto Instruções sem ; Função disp; Função fprintf - 64 -

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+(20 8 ); - 65 -

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 > A ln @ + :! B ; C) D + E FG HIG J ; 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) ) 3 M, = 0; N7C9+O ()); b) )5, +, > 10 > ; N7C9+O()5) ; c) 7+ Q = 0 +RãM T 1 7+ãM T :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. - 66 -

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 1 Y &0' Z + &1 :1 [ ; Resposta: D. VB Matlab a) r = A * Cos(teta - t) r=a*cos(teta-t) b) r1 = Exp(-t * teta) r1=exp(-t*teta) c) Pi = Atn(1) * 4 R=sin(1/(n+1)+n*pi) R = Sin(1 / (n + 1) + n * Pi) d) k = Sqr(x ^ 2 - y ^ 2) / (x + 3 ^ y) + (x - y) / y ^ 2.5 k=sqrt(x^2-y^2)/(x+3^y)+(xy)/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) ) 3 M, = 0 b) )5 ( M > 3) + > 0 c) 7+ \ é ^ú`rab`m c+ 5 M 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-67 -

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

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; Execute o programa PlotSin na janela de comandos do MATLAB. >> PlotSin O seguinte gráfico será visualizado: 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; Comentário: O comando plot requer dois vectores de igual dimensão. - 69 -

Exemplo 2: Escreva um programa em MatLab que construa o gráfico do polinómio p(x) = x 5 10 x 4 + 35 x 3 50 x 2 + 24. Grave o programa num ficheiro com o nome PlotPoly.m % PlotPoly constroi o 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). - 70 -

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

Exemplo 5 : Implemente em Matlab a função f2ramos definida por: h e(f) = g i jh i < 0 k + lmnop(i) jh i 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 - 72 -

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)» G([2 1]) ans = ans = 1.85463599915323 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-73 -

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

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 Exemplo 11: while <expressão> { <instruções executáveis>} end m = 10; k = 0; while k<=m x = k/10; disp([x, x^2, x^3]); % uma tabela de valores k = k+1; end - 75 -

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

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

5.7 Exercícios de introdução à Programação em MatLab 5 Uma equação do 2º grau tem a forma genérica + + C = 0 com 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 qbar` Ta` = qbar` aaca` (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 T() & v Para procurar numericamente este limite pode avaliar f(x) para a seguinte sucessão: + w, + w,, + w, para valores de b e n dados sendo h x x Y xh 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. - 78 -

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( ) ; ), 2.5 0 105 ln E % + J ; C) q + @ A 10& 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=2.5e5*log(pi/2+n); B = 250000 * 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) c) L +!;7+ L < 0 +RãM, 10 > 7+ãM, L 10 > ; N7C9+O(,) ; 3; b9 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; B = 3. e-004 if k<0,b=1.e-4;else B=k*1.e-4;end,disp(B); 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. - 79 -

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: Corpo: Objectivo: Leia (N); R Verdadeiro; d 2; V.Dados: Enquanto R =Verdadeiro e d<n faça V. Resultado: se N mod d=0 então R Falso; V. Aux: 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 N mod d=0 d<n 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. - 80 -

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 n 0 maior do que 1; o número seguinte na sequência, n i+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. - 81 -

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

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) c) d) 3;! ; L +!;7+ L 0 +RãM }L 10 > ; N7C9+O(L) ; 1; 3; b9 a 1 Ré Tç } a; N7C9+O (); 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; k=0 if k~= 0, k=1.e-4;end, disp(k); 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-83 -

Resposta possível: 2. VB Resultado a) x=10 A=True y=20 A=x< >0 And y>=1/x Msgbox(A) b) x=-3 k=0 y=abs(x) k=x+y if k< >0 Then k=1.e-4 End if Msgbox (k) c) x=1 x=6 n=3 For i=1 To n x=x*i Next i Msgbox(x) 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); - 84 -

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

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