Computação e Programação

Documentos relacionados
Computação e Programação

RESOLUÇÃO. Computação e Programação (2009/2010-1º Semestre) 1º Teste (11/11/2009) Nome. Número. Leia com atenção os pontos que se seguem:

Computação e Programação. MEMec - LEAN 1º Semestre

Processo de Desenvolvimento

COMPUTAÇÃO E PROGRAMAÇÃO 1º Semestre 2010/2011 MEMec, LEAN

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2006/2007

PROJECTO DE COMPUTAÇÃO E PROGRAMAÇÃO

Introdução à Programação. João Manuel R. S. Tavares

Introdução à Programação

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

Estruturas de Dados I Enunciado do Trabalho Prático

Computação e Programação 2009 / 2010

AULA TEÓRICA 1 Tema 6. Algoritmos e Fluxogramas

Fundamentos de Lógica e Algoritmos Aula 2.5 Conceitos Básicos de Algoritmos. Prof. Dr. Bruno Moreno

Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo

Computação e Programação Exame Época de recurso

PCAAC - Programa Comunitário de Apoio Alimentar a Carenciados Manual do Utilizador - Web

1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível?

SISTEMA INTEGRADO DE INFORMAÇÃO BIBLIOGRÁFICA UNIVERSIDADE DE COIMBRA

Ficheiros de texto 1. Ficheiros de texto. 1. Implementar um programa que leia uma frase do teclado e a escreva num ficheiro.

Fundamentos da Programação. Ano lectivo , 2 o Semestre Projecto Primeira Parte 1. Nim

Algoritmos e Programação (While Do While - Do) Prof. Me. Adelson Felipe Dias Nogueira

Para cada programa, por mais simples que seja, comece sempre por esboçar a solução desenhando um fluxograma.

Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII Objectivos e tarefas

GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS SISTEMA DE GESTÃO PARA EMBALAGENS NÃO REUTILIZÁVEIS

Laboratório de Informática Avançada Automatização de Horários Manual do Professor

Portal Cliente MYG SYSTEM

AULA TEÓRICA 2. Tema 1. Desenho de Algoritmos (continuação)

Exemplo de número de caixa. Exemplo de número de posto

ANEXO I. O Ambiente de desenvolvimento MpLab IDE v6.62

Computação e Programação

Algoritmos e Programação

ZS POS MOBILE manual de utilização

GUIA PARA O PREENCHIMENTO DOS FORMULÁRIOS - ENTIDADE GESTORA VALORPNEU

Programação Procedimental

Stock da Dívida. Serviços e Fundos Autónomos SIN2/DSI5 SFA MANUAL. SFA_Stock Divida - Manual Utilizador_Serv.doc Não classificado

UFCD 786 Instalação e configuração de sistemas de bases de dados

Aula 10: Introdução a Vetores e Matrizes

DOSSIER DA DISCIPLINA

Informática para Ciências e Engenharias 2013/14. Teórica 7

CEFAPA Aplicação Informática

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 04 Algoritmos e Programação Estruturada

Transcrição:

Computação e Programação MEMec, LEAN - 1º Semestre 2015-2016 Aula Teórica 10 Exemplo de desenvolvimento de Programa Modular: Máquina de venda de bilhetes D.E.M. Área Científica de Controlo Automação e Informática Industrial Wrap Up da última aula Problema Análise Algoritmo Testes OK Codificação Testes OK Produção 1. Definição do problema 2. Análise / síntese do problema 3. Esquema de processamento 4. Algoritmo e testes 5. Codificação 6. Testes e validação 7. Produção / manutenção Computação e Programação 2015 / 2016 2 1

Wrap Up da última aula Abstracção procedimental A solução algorítmica vai sendo construída por diferentes níveis de abstracção até não restarem ambiguidades sobre as tarefas a realizar Computação e Programação 2015 / 2016 3 Wrap Up da última aula Tipos de Erros Erros Lógicos (ou de semântica) Erros de Sintaxe Erros de Execução Computação e Programação 2015 / 2016 4 2

Alinhamento da AT 10 Exemplo de desenvolvimento de Programa Modular: Máquina de venda de bilhetes Computação e Programação 2015 / 2016 5 Máquina de venda de bilhetes Pretende-se criar um programa para controlar uma máquina simples de venda automática de bilhetes. A máquina possui vários componentes que são apresentadados na figura anexa. O programa deverá gerir o processo de compra, permitindo ao utilizador escolher um tipo de bilhete num menu, e em seguida efectuar o pagamento e recolher o bilhete. A operação de venda deve poder ser interrompida pelo utilizador a qualquer momento, sendo devolvida a quantia introduzida. Computação e Programação 2015 / 2016 6 3

Máquina de venda de bilhetes Componentes do sistema Ecrã Teclado Entrada do Detector/ Dispensador (D/D) de moedas Saída da Impressora Saída do D/D de moedas Computação e Programação 2015 / 2016 7 Máquina de venda de bilhetes A máquina vende apenas dois tipos de bilhetes: o bilhete simples, e o bilhete de ida-e-volta. O menu deverá ter aproximadamente a seguinte aparência: - Bilhete Simples - Bilhete de Ida-e-Volta - Cancelar operação Nos bilhetes devem constar as cidades de partida e destino, bem como a data e hora de emissão do bilhete. O programa deverá simular a comunicação com os vários componentes da máquina, através de entradas do teclado e saídas para o ecrã. Computação e Programação 2015 / 2016 8 4

1. Contexto do Problema e Objectivos do Programa O programa simula uma operação de venda de bilhetes a ser realizada por uma máquina de venda automática. Os utilizadores doprogramaserãoopúblicoaquemsedestinamosbilhetes. O programa interage com os utilizadores, mas também com os restantes dispositivos da máquina, nomeadamente o Detector/Dispensador de moedas e a impressora de bilhetes. A interacção com os dispositivos é simulada através do teclado e do ecrã. Computação e Programação 2015 / 2016 9 1. Contexto do Problema e Objectivos do Programa A partir de um menu inicial o programa permite ao utilizador escolher o tipo de bilhete (Simples ou Ida-e- Volta), ou cancelar a operação. Uma vez seleccionado o bilhete o programa processa a venda, verificando a quantia introduzida e o troco, voltando depois ao menu inicial. Computação e Programação 2015 / 2016 10 5

2.1 Entradas 2.2 Saídas Opção de menu do utilizador Quantia para pagamento Quantia de troco ou de devolução Texto do bilhete a imprimir Computação e Programação 2015 / 2016 11 2.3 Especificações Funcionais O programa deve: Obter opção do utilizador Obter quantia para pagamento Verificar a quantia introduzida Devolver o troco, ou a quantia Imprimir o bilhete Simular todas as entradas pelo teclado, e todas as saídas pelo ecrã Apresentar quantias em, com precisão de duas casas decimais Computação e Programação 2015 / 2016 12 6

2.5 Métodos de Processamento Calcular pagamento pagamento = k Calcular troco valor_moeda k troco= quantia-preco Computação e Programação 2015 / 2016 13 3.1 Projecto Genérico Abordagem top-down Venda de bilhetes Obter opção Processar venda Emitir bilhete Computação e Programação 2015 / 2016 14 7

3.1 Projecto Genérico Lista de tarefas Obter opção válida Processar venda Emitir bilhete Computação e Programação 2015 / 2016 15 3.1 Projecto Genérico Algoritmo 1) Repetir indefinidamente a) opcao = Obter opção válida b) Casoopcao= 1 i. Processar venda (preço Simples) ii. Se a venda foi concretizada A. Emitir bilhete (Simples) Computação e Programação 2015 / 2016 16 8

3.1 Projecto Genérico Algoritmo (continuação) c) Casoopcao = 2 i. Processar venda (preço Ida-e-Volta) ii. Se a venda foi concretizada A. Emitir bilhete (Ida-e-Volta) d) Casoopcao= C i. Terminar repetição (1) Computação e Programação 2015 / 2016 17 3.2 Projecto detalhado dos módulos: Obter opção Abordagem top-down Obter opção Apresentar menu Validar opção Mensagem opção errada Ler opção Computação e Programação 2015 / 2016 18 9

3.2 Projecto detalhado dos módulos: Obter opção Entradas: lê valor do teclado para opcao Saídas: opcao(carácter) Algoritmo 1) Repetir indefinidamente a) Apresentar menu b) Ler valor para opcao c) Seopcao= 1 ou opcao= 2 ou opcao= C i. Terminar repetição (1) d) Apresentar mensagem de opção errada Computação e Programação 2015 / 2016 19 3.2 Projecto detalhado dos módulos: Processar venda Abordagem top-down Processar venda * Ambas as tarefas são genéricas a qualquer problema de maquinas de venda. Se as tornarmos em módulos independentes poderemos reutilzá-las. Receber pagamento* Calcular troco Devolver quantia* Calcular pagamento Ler moeda Mensagem quantia em falta Devolver moedas Mensagem aviso de devolução Computação e Programação 2015 / 2016 20 10

3.2 Projecto detalhado dos módulos: Processar venda Abordagem top-down (forma final) Processar venda Receber pagamento Calcular troco Devolver quantia Computação e Programação 2015 / 2016 21 3.2 Projecto detalhado dos módulos Processar venda Entradas: preco preço do bilhete especificado (real) Saídas: compraok indica sucesso (lógico) Computação e Programação 2015 / 2016 22 11

3.2 Projecto detalhado dos módulos Processar venda Algoritmo 1) pagamento = Receber pagamento (preco) 2) troco= pagamento preco 3) Se troco< 0 a) compraok é falso b) Devolver quantia (pagamento) Caso contrário a) compraok é verdadeiro b) Devolver quantia (troco) Computação e Programação 2015 / 2016 23 3.2 Projecto detalhado dos módulos: Receber pagamento Abordagem top-down Receber pagamento Calcular pagamento Ler moeda Mensagem quantia em falta Computação e Programação 2015 / 2016 24 12

3.2 Projecto detalhado dos módulos: Receber pagamento Entradas: preco preço do bilhete especificado (real) Lê do D/D o valor valor_moeda Saídas: pagamento valor total introduzido (real) Computação e Programação 2015 / 2016 25 3.2 Projecto detalhado dos módulos: Receber pagamento Algoritmo 1) pagamento = 0 2) Repetir indefinidamente a) Apresentar mensagem quantia em falta b) Ler moeda do D/D para valor_moeda c) pagamento = pagamento + valor_moeda d) Sepagamento precoouvalor_moeda= 0 i. Terminar repetição (1) Computação e Programação 2015 / 2016 26 13

3.2 Projecto detalhado dos módulos: Devolver quantia Abordagem top-down Devolver quantia Devolver moedas Mensagem aviso de devolução Computação e Programação 2015 / 2016 27 3.2 Projecto detalhado dos módulos: Devolver quantia Entradas: valor valor a devolver ao utlizador (real) Saídas: comando ao D/D com valor a devolver Algoritmo 1) Apresentar mensagem de aviso de devolução 2) Comando ao D/D contendo valor Computação e Programação 2015 / 2016 28 14

3.2 Projecto detalhado dos módulos: Emitir bilhete Abordagem top-down Emitir bilhete Emitir bilhete Simples Emitir bilhete Ida-e-Volta Computação e Programação 2015 / 2016 29 3.2 Projecto detalhado dos módulos: Emitir bilhete Entradas: tipo tipo de bilhete (carácter) Saídas: comando à impressora Algoritmo 1) Apresentar mensagem de recolha de bilhete 2) Setipo= Simples a) Imprimir bilhete simples com data Caso contrário se tipo = Ida-e-Volta a) Imprimir bilhete de ida-e-volta com data Computação e Programação 2015 / 2016 30 15

Programa venda_de_bilhetes.m 3.3 Organização dos módulos do programa: venda_de_bilhetes.m script(módulo principal) o obteropcao.m função o processarvenda.m função receberpagamento.m função devolverquantia.m função o emitirbilhete.m função Computação e Programação 2015 / 2016 31 Script venda_de_bilhetes.m 3.4 Código fonte: NOTA: nestes exemplos os comentários foram omitidos para permitir a representação dos ficheiros numa única página Computação e Programação 2015 / 2016 32 16

obteropcao.m 3.4 Código fonte: Computação e Programação 2015 / 2016 33 processarvenda.m 3.4 Código fonte: Computação e Programação 2015 / 2016 34 17

receberpagamento.m 3.4 Código fonte: Computação e Programação 2015 / 2016 35 devolverquantia.m 3.4 Código fonte: Computação e Programação 2015 / 2016 36 18

emitirbilhete.m 3.4 Código fonte: Computação e Programação 2015 / 2016 37 emitirbilhete.m 3.5 Testes aos módulos: Bottom-up Casos de teste A função emitirbilhete recebe apenas duas variantes de valores válidos, logo os casos de teste serão apenas as strings 'Simples' e 'Ida-e-Volta' Computação e Programação 2015 / 2016 38 19

emitirbilhete.m 3.5 Testes aos módulos : Bottom-up >> emitirbilhete('simples') Por favor recolha o seu bilhete. Lisboa -> Cacilhas 26-10-2011 20h 18min >> emitirbilhete('ida-e-volta') Por favor recolha o seu bilhete. Lisboa -> Cacilhas Cacilhas -> Lisboa 26-10-2011 20h 18min Computação e Programação 2015 / 2016 39 devolverquantia.m 3.5 Testes aos módulos: Bottom-up Casos de teste A função devolverquantia apresenta uma mensagem e o valor da quantia com a precisão especificada. Um único valor será portanto suficiente para testar o seu desempenho. Computação e Programação 2015 / 2016 40 20

devolverquantia.m 3.5 Testes aos módulos: Bottom-up >> devolverquantia(.5) Por favor retire o troco. Devolvido: 0.50 Computação e Programação 2015 / 2016 41 21

receberpagamento.m 3.5 Testes aos módulos: Bottom-up >> receberpagamento(1.5) Por favor introduza 1.50, ou 0 para Cancelar -.2 Por favor introduza 1.30, ou 0 para Cancelar -.5 Por favor introduza 0.80, ou 0 para Cancelar - 1 ans = 1.7000 >> receberpagamento(2.0) Por favor introduza 2.00, ou 0 para Cancelar -.5 Por favor introduza 1.50, ou 0 para Cancelar - 0 ans = 0.5000 Computação e Programação 2015 / 2016 43 obteropcao.m 3.5 Testes aos módulos: Bottom-up Casos de teste A função obteropcao apresenta um menu e devolve uma opção válida. Deve verificar-se cada opção correcta para conferir o valor devolvido e, pelo menos, uma incorrecta para verificar o comportamento do ciclo. Computação e Programação 2015 / 2016 44 22

obteropcao.m 3.5 Testes aos módulos: Bottom-up >> obteropcao 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 1 ans = 1 >> obteropcao 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 2 ans = 2 Computação e Programação 2015 / 2016 45 obteropcao.m 3.5 Testes aos módulos: Bottom-up >> obteropcao 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 5 A opção escolhida não existe! 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: C ans = C >> Computação e Programação 2015 / 2016 46 23

processarvenda.m 3.5 Testes aos módulos / testes de integração Casos de teste A função processarvenda integra as funções receberpagamento e devolverquantia. Estas funções já estão testadas, pelo que é necessário verificar apenas que há uma operação de pagamento, que há uma operação de devolução, e o valor de saída de processarvenda no caso em que o pagamento é interrompido, e no caso em que é concluído. Computação e Programação 2015 / 2016 47 processarvenda.m 3.5 Testes aos módulos / testes de integração >> processarvenda(2.0) Por favor introduza 2.00, ou 0 para Cancelar -.5 Por favor introduza 1.50, ou 0 para Cancelar - 1 Por favor introduza 0.50, ou 0 para Cancelar - 0 Por favor retire o troco. Devolvido: 1.50 ans = 0 Computação e Programação 2015 / 2016 48 24

processarvenda.m 3.5 Testes aos módulos / testes de integração >> processarvenda(2.0) Por favor introduza 2.00, ou 0 para Cancelar - 1 Por favor introduza 1.00, ou 0 para Cancelar -.5 Por favor introduza 0.50, ou 0 para Cancelar - 2 Por favor retire o troco. Devolvido: 1.50 ans = 1 Computação e Programação 2015 / 2016 49 venda_de_bilhetes.m 3.5 Testes aos módulos / testes de integração Casos de teste O scriptvenda_de_bilhetes chama as funções obteropcao, processarvenda e emitirbilhete. Todas estão já testadas. Resta garantir que são correctamente chamadas. Cinco casos podem acontecer: 1. opção 1 e pagamento efectuado (apresenta bilhete); 2. opção 1 e pagamento cancelado (não apresenta bilhete); 3.e4. os mesmos para a opção 2; 5. e a opção de cancelar a venda. Computação e Programação 2015 / 2016 50 25

Script venda_de_bilhetes.m 3.5 Testes aos módulos / testes de integração >> venda_de_bilhetes 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 1 Por favor introduza 2.00, ou 0 para Cancelar - 2 Por favor retire o troco. Devolvido: 0.00 Por favor recolha o seu bilhete. Lisboa -> Cacilhas 26-10-2011 22h 22min Computação e Programação 2015 / 2016 51 Script venda_de_bilhetes.m 3.5 Testes aos módulos / testes de integração 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 1 Por favor introduza 2.00, ou 0 para Cancelar - 0 Por favor retire o troco. Devolvido: 0.00 Computação e Programação 2015 / 2016 52 26

Script venda_de_bilhetes.m 3.5 Testes aos módulos / testes de integração 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 2 Por favor introduza 3.20, ou 0 para Cancelar - 3.2 Por favor retire o troco. Devolvido: 0.00 Por favor recolha o seu bilhete. Lisboa -> Cacilhas Cacilhas -> Lisboa 26-10-2011 22h 26min Computação e Programação 2015 / 2016 53 Script venda_de_bilhetes.m 3.5 Testes aos módulos / testes de integração 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: 2 Por favor introduza 3.20, ou 0 para Cancelar - 0 Por favor retire o troco. Devolvido: 0.00 1 - Bilhete Simples 2 - Bilhete de Ida e Volta C - Cancelar venda Introduza o tipo de bilhete pretendido: C >> Computação e Programação 2015 / 2016 54 27

venda_de_bilhetes.m Computação e Programação 2015 / 2016 55 Na realidade A norma portuguesa de representação numérica, separa a parte inteira da parte decimal de um número por uma vírgula, em vez de um ponto. Como procederia para dar mensagens ao utilizador de acordo com a norma portuguesa? Como procederia se o Detector/Dispensador de moedas não soubesse fazer uma dada quantia de troco? Ou seja, se o programa tivesse que indicar ao D/D de moedas quantas moedas teria que dispensar do valor x, mais quantas moedas do valor y, mais quantas moedas do valor z Computação e Programação 2015 / 2016 56 28

Referências Secção 6.2 de Matlab: A Practical Introduction to Programming and Problem Solving, Stormy Attaway (2012) Elsevier. As aulas teóricas contêm contribuições dos profs. José Borges e Miguel Silva Computação e Programação 2015 / 2016 57 29