Informática II Ficha 4_resolução

Documentos relacionados
Resolução de exercícios da ficha de trabalho nº. 8 de VBA

Informática II Ficha 5_resolução

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Exercícios Data Modeling

Objectivos. Introdução à programação Macros em Microsoft Excel Introdução ao Visual Basic para Aplicações (VBA)

Exercícios de VBA. Paulo Melo Joana Dias Óscar Lourenço 17 de Maio de 2006

Informática II Cap. 4-4

Instituto Superior de Línguas e Administração GAIA Concurso: Oscares da Academia

Um algoritmo deve conter passos não ambíguos, executáveis e que sejam terminados quando seguidos.

Variáveis Tipos de Dados

Variáveis Tipos de Dados. APROG (Civil) Aula 2

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

INFORMÁTICA DE GESTÃO

Módulo 1a: Introdução ao Visual Basic for Applications (VBA)

5. NOÇÕES DE PROGRAMAÇÃO

Variáveis indexadas Vectores e Matrizes. APROG (Civil) Aula 12

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Tipos de Referência. Referência Relativa $A$1. Referência Absoluta. Referência Mista. $A1 ou A$1

Programação de Computadores usando VBA

PROGRAMAÇÃO E SISTEMAS DE INFORMAÇÃO 11ºANO

Tutorial de Extensibilidade

Linguagem de Programação II. Introdução à programação em VB Professor: Armando Hage

CÓDIGO FONTE CALCULADOR DE 04 OPERAÇÕES

Macros e Programação VBA

Variáveis Escalar e de Array

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

Normalização de Entidades

Refinamentos sucessivos

Exame de 1ª Época Introdução à Programação IGE e ETI 2003/02/25-1º semestre de 2002/2003 ISCTE

Código do formulário frmfacturascliente

1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de º Semestre

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

INSTITUTO SUPERIOR DE ENGENHARIA DO PORTO

Programação Introdução

Resumão VB (com Excel Avançado) Autor: Everton M. Messias

Informática para Ciências e Engenharias 2014/15. Teórica 4

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Sumário. 1.1 Variáveis Globais e Locais Passagem de Parâmetro (por valor por referência) 1

Material de Apoio. Access - Módulo II (Novo) 1632_MA01 Novembro/2013

DESENVOLVIMENTO DE SOFTWARE

Programar. Visual Basic 1/61

EISnt Centro de Formação em Tecnologia

IV. Trabalhar o Processo: Em Análise Preliminar

Fundamentos Programação

Correção do 1º Exame de INTRODUÇÃO À PROGRAMAÇÃO Licenciatura em Engenharia Mecânica 30 de Junho de 2006, 2º Semestre

Tarefa Orientada 7 Consultas de selecção

Excel. Aula Prática n o 6 VBA. 1. Inicie o Microsoft Excel e abra o ficheiro "Excel_6" que se encontra no directório APROG.

Introdução à Ciência da Computação

Trabalho final Formulário com VBA

Gestão de SHST. Manual do utilizador. - Versão 1 -

Grupo I. 1 - Range("cell")

Visual Basic. V - Repetição. CFAC Concepção e Fabrico Assistidos por Computador João Manuel R. S. Tavares

Visual Basic for Applications

Estruturas de Decisão Embutidas. APROG (Civil) Aula 7

Tratamento de erros I Ideia básica

PROGRAMAÇÃO PARA DESIGNERS - PENSAR COMO O INIMIGO

ESTRUTURA COM DECISÃO COMPOSTA

Estruturas de Decisão. APROG (Civil) Aula 6

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

V - Repetição. CFAC Concepção e Fabrico Assistidos por Computador. 2) Elementos de uma estrutura de repetição;

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Transcrição:

Ficha 4_resolução 1 Objectivo: Pretende-se um programa que permita gerir as refeições de uma cantina na sua vertente ementa e reservas de refeições. A cantina funciona de 2.ª a 6.ª Feira, servindo almoços e jantares. Requisitos: 1. Permitir a definição da ementa para a semana (indicando-se o prato a servir em cada refeição); 2. Mostra a ementa para a semana; 3. Permitir o registo de reserva para uma dada refeição; 4. Consultar as reservas efectuadas para uma dada refeição. Solução: 1. Implementar o programa como um todo. Esta abordagem mostrar-se-á decerto extensa e com partes que serão sucessivamente repetidas (caso do aceitar o dia e refeição a tratar utilizados em definir ementa, reservas, consultar reservas) 2. Criar diversos subprogramas segundo a máxima dividir para reinar : dividir o problema em subproblemas, tornando-o assim mais manejável. Isto irá permitir uma melhor correcção ou alteração e ainda a reutilização. 2 1

DADOS Por cada refeição, teremos de guardar o prato a servir e a quantidade de refeições reservadas Solução 1: 10 variáveis string para o nome do prato (1 para refeição 5 dias * 2 refeições / dia) 10 variáveis inteiras para as reservas por cada refeição Problema levantado Código muito extenso pois que assim se iria impossibilitar a utilização de ciclos Código para aceitar cada prato, mostrá-lo, aceitar cada reserva, etc... Solução 2: Criar um vector de 10 posições para o nome do prato Criar um vector de 10 posições para as reservas de cada refeição Mas... p. ex. ao aceitarmos as reservas para 6.ª feira, almoço, em vez de guardarmos na posição 6 do vector, teria o programa de saber que deveria fazê-lo na posição 9, já que o array é de uma só dimensão e não sabe que há duas refeições por dia. 3 DADOS Solução 3: Criar um array de duas dimensões Uma para os dias da semana (de 2 a 6), 2.ª a 6.ª feira Outra para a refeição (de 1 a 2), 1 almoço, 2 jantar Teríamos: Dim registo (2 To 6, 1 To 2) Mas... Por cada registo temos de guardar a descrição do prato e a quantidade reservada Então: vamos definir um tipo de dados que contenha os 2: Type elemento ementa As String reserva as Integer End Type E quanto ao nosso registo: Dim registo (2 To 6, 1 To 2) as elemento 4 2

Vamos criar o programa principal (menu que chama os outros subprogramas) Sub opções() Dim op As String * 1, resp As Integer, tex As String tex = "D-Definir ementa" & Chr(13) & "L-Listar ementa da semana" & Chr(13) & _ "R-Registar reserva" & Chr(13) & "C-Consultar nº de reservas de dia e refeição" Do op = UCase(InputBox("Digite a opção: " & Chr(13) & tex)) ' Ucase devolve a letra maiúscula correspondente Select Case op Case "D" define_ementa Case "L" listar_ementa_semana Case "R" registar_reserva Case "C" consultar_reservas Case Else MsgBox "Opção Inválida" End Select resp = MsgBox("Pretende continuar", vbyesno) Loop Until resp = 7 5 Vamos criar o subprograma que permite definir o prato a servir para cada refeição Teremos de aceitar qual o dia da semana e refeição que pretendemos indicar o prato Em vários locais teremos de aceitar o dia da semana e refeição que queremos tratar. Ou seja, teremos pedaços de código utilizados em vários locais. Assim, iremos criar funções para as funcionalidades pretendidas: Function ler_dia() As Integer ' função que devolve o dia da semana pretendido (2-2.ª feira... 6-6.ª feira) Dim dia As Integer Do dia = Val(InputBox("Digite o dia da semana [2-Segunda.. 6-Sexta]")) Loop Until (dia >= 2 And dia <= 6) ler_dia = dia Function ler_ref() As Integer ' função que devolve 1 - se almoço e 2 - se jantar Dim ref As Integer Do ref = Val(InputBox("Qual a refeição [1-Almoço.. 2-Jantar]")) Loop Until (ref = 1 Or ref = 2) ler_ref = ref 6 3

Vamos criar o subprograma que permite definir o prato a servir para cada refeição Desta forma o subprograma que irá permitir carregar o array com a ementa ficará: Sub define_ementa() ' para aceitar o nome do prato a servir no dia / refeição escolhido Dim dia As Integer, ref As Integer dia = ler_dia() chama a função que aceita e devolve o dia pretendido ref = ler_ref() chama a função que aceita e devolve a refeição pretendida registo(dia, ref).ementa = InputBox("Digite a descrição da ementa " & dia_s(dia) & _ " " & refeição(ref)) aceita o nome do prato e guarda-o no elemento conveniente da tabela 7 Quanto à opção L, listar ementa da semana: Sub listar_ementa_semana() ' mostra a lista da ementa da semana Dim dia As Integer, tex As String tex = " Almoço " & Chr(13) For dia = 2 To 6 tex = tex & dia_s(dia) & " " & registo(dia, 1).ementa & Chr(13) Next tex = tex & " Jantar " & Chr(13) For dia = 2 To 6 tex = tex & dia_s(dia) & " " & registo(dia, 2).ementa & Chr(13) Next MsgBox tex 8 4

Quanto à função dia_s, que mostra a descrição de um dado dia da semana Function dia_s(dia As Integer) ' função que devolve o nome do dia da semana indicado no parâmetro Select Case dia Case 2 dia_s = "Segunda" Case 3 dia_s = "Terça" Case 4 dia_s = "Quarta" Case 5 dia_s = "Quinta" Case 6 dia_s = "Sexta" End Select 9 Quanto à opção R, registar reserva: Temos simplesmente que saber qual o dia e refeição a reservar e incrementar de 1 o valor da reserva para essa refeição Sub registar_reserva() ' permite registar uma reserva para uma dada refeição Dim dia As Integer, ref As Integer dia = ler_dia() ref = ler_ref() registo(dia, ref).reserva = registo(dia, ref).reserva + 1 10 5

Quanto à opção C, consultar reservas: Temos simplesmente que saber qual o dia e refeição de que pretendemos saber o número de refeições reservadas e mostrar o correspondente elemento do array. Sub consultar_reservas() ' permite consultar o número de refeições reservada para uma refeição seleccionada Dim dia As Integer, ref As Integer dia = ler_dia() ref = ler_ref() MsgBox "Número de reservas na " & dia_s(dia) & " para a refeição " & _ refeição(ref) & " : " & registo(dia, ref).reserva 11 Quanto à opção C, consultar reservas: Estamos a utilizar a função refeição que devolve almoço ou jantar de acordo com a argumento que lhe seja passado for 1 ou 2. Function refeição(ref As Integer) ' função que devolve "Almoço" se o parâmetro for 1 e "Jantar" se for 2 If ref = 1 Then refeição = "Almoço" Else refeição = "Jantar" End If 12 6