Excel Ficha de Trabalho n.º 1 Objectivo: Estudo prático de algoritmos e sua implementação em Visual Basic do Excel. Introdução: Um algoritmo pode ser definido como “a sequência lógica de procedimentos tendentes à resolução dum problema”. Ora a actividade humana, pode ser considerada como uma sequência interminável de soluções para problemas. Também, como os computadores são utilizados para resolver problemas, desde os mais simples aos mais complexos, é natural que para que ele os possa resolver, tenhamos de indicar-lhe os “passos” que deverá realizar. Assim, e antes de criar qualquer pequeno programa, deveremos sempre criar o “algoritmo” que permita solucionar o problema posto, que o programa depois implementará em termos da sintaxe da linguagem escolhida. Como decerto já saberão, a ordem de execução dos procedimentos que permitem a solução dum problema, normalmente sequencial, pode também efectuar testes a condições e executar um ou outro conjunto de instruções ou mesmo executar repetidamente um conjunto de instruções, dependendo ou não de uma dada condição. Pode demonstrar-se que com estes 3 tipos de estruturas, podem resolver-se todos os problemas que possam ser postos. Estrutura de um módulo em Visual Basic: ‘OPÇÕES DO VISUAL BASIC Option Explicit ‘Força declaração explícita de todas as variáveis ‘DECLARAÇÃO DE CONSTANTES DO MÓDULO Const prato_dia = 1100 ‘DECLARAÇÃO DE VARIÁVEIS DO MÓDULO Dim ementa(2 To 6) As String ‘PROCEDIMENTOS Sub define_ementa() Dim dia As Integer Do dia = Val(InputBox("Digite o dia da semana [2-Segunda .. 6-Sexta]")) Loop Until (dia >= 2 And dia <= 6) ementa(dia) = InputBox("Digite a descrição da ementa") End Sub Sub consulta_ementa() Dim dia As Integer MsgBox ("EMENTA: " & Chr(13) & "Segunda - " & ementa(2) & Chr(13) & _ "Terça - " & ementa(3) & Chr(13) & "Quarta - " & ementa(4) & Chr(13) & _ "Quinta - " & ementa(5) & Chr(13) & "Sexta - " & ementa(6) & Chr(13)) & _ "Preço = " & prato_dia & "$00" End Sub Sub opções() Dim op As String * 1, resp As Integer Do Do op = UCase(InputBox("Digite a opção [C-Consultar ementa D-Definir ementa]")) Loop Until (op = "C" Or op = "D") If op = "C" Then consulta_ementa Else define_ementa End If resp = MsgBox("Pretende continuar", vbYesNo) Loop Until resp = 7 End Sub Tarefas Propostas: 1. Elabore o algoritmo e implemente-o utilizando a linguagem de programação VB, para resolver cada uma das seguintes alíneas: a) Ler duas palavras, correspondentes ao seu primeiro e o último nome, e inverter a sua ordem na escrita. b) Ler dois números inteiros e escrever os números em linhas distintas, mas na mesma caixa de mensagem. c) Dados dois valores inteiros A e B, calcular a sua média aritmética. d) Dados os valores do custo unitário, percentagem de lucro e taxa de IVA de um produto, determinar a margem de lucro, o valor do IVA e o preço de venda ao público. e) Dados os valores da margem de lucro, do IVA e do preço de venda ao público de um produto, determinar o custo unitário, percentagem de lucro e taxa de IVA. f) Determinar o preço final de uma encomenda, dado o preço unitário do produto e sabendo que o desconto efectuado para encomendas superiores a 90 unidades é 10%. g) Dados dois números inteiros A e B, determinar qual deles é o maior. h) Calcular o valor da comissão de um vendedor, sabendo que para quantidades vendidas (QV): • 50 < QV < 100 a comissão é de 5% do lucro; • 100 <= QV <= 200 a comissão é de 15% do lucro; • QV > 200 a comissão é de 25% do lucro. i) Ler um número entre 1 e 7 e escrever o correspondente dia de semana. j) Simular uma máquina de calcular que só efectua as operações básicas de adição, subtracção, multiplicação e divisão entre dois números. Deve ainda impedir a situação de erro resultante da divisão por zero. k) Dado o número de dias úteis de um determinado mês, calcular o valor médio de encomendas. l) Dados os valores das vendas mensais do ano anterior, determinar o valor mínimo das vendas e o(s) respectivo(s) mês(es). m) Dados os valores das vendas mensais do ano anterior, determinar o valor máximo, o valor médio e os meses em que as vendas foram superiores à média. n) Alterar o exercício anterior por forma a permitir a sua execução enquanto o utilizador o desejar. o) Dado um número inteiro positivo N, determinar o maior número par P tal que a soma de todos os números pares inferiores a P seja inferior a N. Por exemplo, se o valor dado N for 57, então o resultado será P =14, pois 2 + 4 + 6 + 8 + 10 + 12 + 14 = 56. OBS: Garantir que N é positivo. p) Dado o valor de N compreendido entre o e 9,produzir um triângulo de números de acordo com o exemplo seguinte para N=4. 1 121 12321 1234321 Tipo de Dados (em Português) Tipo de Dados (em Inglês) Ocupação (em bytes) Intervalo de valores possíveis 2 Booleano Inteiro Longo (Inteiro Longo) Simples (VF de Precisão Simples) Duplo (VF de Precisão Dupla) Moeda Boolean Integer Long 2 bytes 2 bytes 4 bytes Verdadeiro/True ou Falso/False -32768 a 32767 -2,147,483,648 a 2,147,483,647 Single 4 bytes Ver manual Double 8 bytes Ver manual Currency 8 bytes Data Cadeia Variante Objecto Definida pelo Utilizador Date String Variant Object Definida pelo Utilizador 8 bytes 1 bytes p/ caracter Como apropriado 4 bytes Número requerido pelos elementos Valores com 4 casas decimais e até aos biliões 1 de Jan 0100 até 31 Dez 9999 0 a 65535 ou mais em alguns sistemas Texto ou valores até Double Qualquer referência a um objecto O de cada elemento que constitui o tipo de dados definido Principais instruções InputBox(Prompt [,títulol] [,valor por defeito] [,x pos][,y pos], [fich_Ajuda, contexto]) Descrição breve Instrução de Leitura - Mostra uma caixa de diálogo e espera que o utilizador escreva texto ou escolha um botão, retornando então o conteúdo da caixa de texto. MsgBox(prompt [,botões] [título] [fich_Ajuda, contexto]) Instruções de Escrita - Mostra uma mensagem numa caixa de diálogo. O valor devolvido, indica o botão que foi “clicado” pelo utilizador. If condição1 Then instrução1 ElseIf condição2 Then instrução2 Else instrução3 End If Select Case expressão_de_teste Case lista1expressão Instruções1 Case lista2expressão Instruções2 ...... Case Else Instruções End Select For contador = início To Fim [Step incr] Instruções Next [contador] Estrutura de selecção - Permite a execução condicional entre uma ou mais instruções. Se condição1 for verdadeira, executa a instrução1; senão se a condição2 for verdadeira executa a instrução2; senão executa a instrução3 Do While Condição Instruções Loop Do Instruções Loop until Condição Estrutura de selecção - Permite a execução condicional entre uma ou mais instruções. Cada listaexpressão é uma lista de um ou mais valores (separados por vírgulas). As instruções do Case Else são executadas, se nenhum dos listaexpressão satisfizer a expressão_de_teste. Estrutura de repetição equivalente a ciclo Para. É usada quando o número de iterações pode ser predefinido. O contador vai sendo incrementado (ou decrementado) do valor dado por incr, desde um valor inicial (início), até a um valor final (Fim). Estrutura de repetição equivalente a ciclo Enquanto. Repete as instruções enquanto a condição for verdadeira (true). Estrutura de repetição equivalente a ciclo Repetir-Até. Repete as instruções até que a condição se torne verdadeira. 3