Computação e Programação (2010/2011-1º Semestre)

Documentos relacionados
Computação e Programação (2009/2010-1º Semestre)

COMPUTAÇÃO E PROGRAMAÇÃO

Computação e Programação

Programação. Folha Prática 5. Lab. 5. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

TÉCNICO DE INFORMÁTICA - SISTEMAS

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

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

Processo de Desenvolvimento

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

Ficha de trabalho nº3

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Funções definidas pelo programador: Passagem de argumentos Formas de Funções comuns Programas modulares

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

Objectivos. Programação I (2010/2011) 2 o Trabalho de Programação

Introdução à Programação 2006/07. Algoritmos

Computação e Programação (2007/2008-1º Semestre)

Introdução à Programação

MATLAB. Programação básica. Abordagem topo-base. Início. Definição das. Divisão em Sub-problemas. Divisão em Sub-problemas. Abordagem topo-base

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

COMPUTAÇÃO E PROGRAMAÇÃO

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

MATLAB Avançado. Melissa Weber Mendonça

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

Programação Universidade da Beira Interior Departamento de Informática 2007/08

Linguagens de programação. Introdução ao C (continuação)

Linguagem C. Programação Estruturada. Estruturas de Controle. Prof. Luis Nícolas de Amorim Trigo

JSP Prof. Daniela Pires. VARIAVEIS... 2 Tipos de Dados... 2 String Float Integer Boolean... 3

Programação de Computadores:

Páginas seleccionadas

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

Fábio Rodrigues / Israel Lucania

Variáveis, Tipos de Dados e Operadores

Escreva a função e_caracter que verifica se um determinado caracter é um numero ou não. Escreva um Programa de teste da função.

Noções de algoritmos - Aula 1

Introdução ao MATLAB. Parte II. Afonso Paiva ICMC-USP

Computação e Programação

Slides trabalhados durante a quinta aula

Laboratório de Sistemas e Sinais Máquinas de Estados

Folha de Cálculo. Manual de Apoio. Fórmulas e Gráficos

Programação: Vetores

LISTA DE ATIVIDADES ...

Introdução ao Javascript

Cell arrays e estruturas: exemplos

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

REVISÕES DA SESSÃO ANTERIOR

Programação de Computadores III

Aulas Anteriores. Detalhes da linguagem de programação

Matemática A. Teste Intermédio de Matemática A. Versão 1. Teste Intermédio. Versão 1. Duração do Teste: 90 minutos º Ano de Escolaridade

CADERNO DE EXERCÍCIOS ALGORITMOS

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Programação em C#.Net 4.0 com Mobile Apps

Gestão de Base de dados Tabelas e Chaves

Computação e Programação

Aula Anterior. Decomposição algorítmica (continuação)

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2014/2015

UNIVERSIDADE DE AVEIRO PROGRAMAÇÃO I EXAME PRÁTICO

2 Fluxogramas e Pseudocódigo. 18 Programação em C/C++ estrutura básica e conceitos fundamentais

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 1º Semestre 2007/2008

Leitura e Validação de Dados I

Curso de PHP. FATEC - Jundiaí TIPOS DE VARIÁVEIS

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

1ª LISTA DE EXERCÍCIOS

Computação e Programação

Programação de Computadores III

Introdução à Programação em C

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Noções de Algoritmos

MC102 Algoritmos e Programação de Computadores

Programação. Folha Prática 10. Lab. 10. Departamento de Informática Universidade da Beira Interior Portugal. Copyright 2010 All rights reserved.

Iteração e Pontos Fixos

Microsoft Excel: # 1

Introdução à Programação em C (I)

3. Construção de páginas web Introdução ao HTML

Conceitos básicos de programação

PROGRAMAÇÃO DE MICROPROCESSADORES 2009 / 2010

Módulo 1: Introdução ao MatLab. (scripts e functions) Interfaces Gráficas (GUIs)

Algoritmos e Lógica de Programação. Prof. Marcos Antonio Estremoe. 1 - Faça um programa que imprima a frase: Bem Vindo à Engenharia Firb 2014.

Algoritmos. Algoritmos. Linguagem de programação. Conceitos. Conceitos. Conceitos. Sintaxe do comando para incluir bibliotecas no programa:

Manipulação avançada de ficheiros

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

Teste Intermédio de Matemática A Matemática A Versão 1 11.º Ano de Escolaridade COTAÇÕES GRUPO I 50 pontos GRUPO II

INTRODUÇÃO À COMPUTAÇÃO - EPET006 -

Funções em Matlab. Subprogramas em Matlab são funções.

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

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

1ª Lista de Exercícios

Introdução ao MATLAB. Parte 2

Rodrigo de Barros Paes

Comandos em C (cont.)

Material Didático Proposto

Programação Estruturada Comandos Condicionais (Decisão) Operadores Relacionais

Desenho de algoritmos

Conceitos Básicos de Algoritmos

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

Prova Escrita de Matemática

Introdução à Programação Aula 3 Primeiros programas

EMGI Programação. Ficha 7 Resolução. Programação 1 Calcular a hipotenusa de um triângulo rectângulo, sabendo as medidas dos seus catetos:

DELPHI Curso Extensão. walter Prof. Walter Gima

Variáveis primitivas e Controle de fluxo

Transcrição:

Computação e Programação (2010/2011-1º Semestre) 1º Exame: 27.1.2011 DURAÇÃO: 2 horas MEMec - LEAN Leia com atenção os pontos que se seguem: Comece por escrever o seu nome e número nesta folha, e número, primeiro e último nome nas restantes. Não desagrafe as folhas. Não se tiram dúvidas durante a realização da prova. A prova é sem consulta. Escreva as suas respostas nos espaços indicados (e se necessário, no verso da página). Pode utilizar as duas últimas folhas em branco como rascunho; Inicie a prova apenas quando o docente der indicação. Nome Número 1/14

2/14

P1 Análise e depuração de código em MATLAB (7 valores) NOTA: utilize o símbolo para indicar mudança de linha e o símbolo para indicar tabulação horizontal. 1.a) Apresente o(s) resultado(s) enviado(s) para o monitor em cada um dos seguintes casos? matriz = [1.2 2.4 5.1]; fprintf('%4.2f \t %4.2f \t %4.2f \n', matriz); RESPOSTA: 1.20 2.40 5.10 (0.5v) a = 0; while 1 if a > 9 break fprintf('x = %d \n', a) a = a + 4; x = 0 x = 4 x = 8 RESPOSTA: (0.5v) frase = 'Alameda' letra = 'a'; indice = (frase == letra) novafrase = frase(indice) frase = Alameda RESPOSTA: indice = 0 0 1 0 0 0 1 novafrase = aa (0.5v) 3/14 Número: Primeiro e Último Nome:

cromo(5) = struct('datainicio', 19181214,... 'datafim', 19191005,... 'nome', ' João do Canto e Castro',... 'notas', 'Partido Nacional Republicano'); cromo(1) = struct('datainicio', 19110824,... 'datafim', 19150525,... 'nome',' Manuel José de Arriaga',... 'notas', 'Partido Republicano Português'); RESPOSTA: (0.5v) Nome: Manuel José de Arriaga Nome: Nome: João do Canto e Castro for k = 1:2:5 fprintf('nome: %s\n', cromo(k).nome) a = myfun1(2, 2, 2); b = myfun1(2, 4, 1, 3); a + b RESPOSTA: (0.5v) myfun1.m function res = myfun1(varargin) res = 1; for i = 1:nargin, res = res * varargin{i}; 32 myfun2 = @(a,b,x) a*x^2+b; fprintf('res = %d \n',myfun3(2,3,1,myfun2)) res = 5 RESPOSTA: (0.5v) myfun3.m function res = myfun3(a1,a2,a3,f) res = f(a1,a2,a3); 4/14

1.b) Prete-se ler o conteúdo de 18 ficheiros com informação relativa aos presidentes da República Portuguesa para um array de estruturas, de nome cromos. Cada ficheiro contém a seguinte informação relativa a um presidente: Nome; Data(s) de início de mandato(s); Data(s) de fim de mandato(s); Notas gerais. Os ficheiros são identificados com o nome cromok.dat, onde K representa o índice do ficheiro entre 1 e 18. A Figura 1 exibe o caso de um Presidente que cumpriu dois mandatos: o primeiro entre 06 de Agosto de 1915 e 02 de Dezembro de 1917 e o segundo entre 11 de Dezembro de 1925 e 31 de Maio de 1926. Figura 1: exemplo do ficheiro cromo3.dat. Cada um dos seguintes programas tem cinco situações de erro e cinco de omissão de comentários (várias linhas de comentários seguidas contam como uma única omissão). Complete ou corrija as situações detectadas em cada caso para que os programas executem correctamente. NOTA IMPORTANTE - Para modificar o código deve proceder do seguinte modo: Na sua resposta deve apenas assinalar situações para as quais o código está incorrecto, devo escrever na linha respectiva a alteração proposta. Caso necessite de adicionar novas linhas numere-as utilizando a linha anterior como base, seguida de um ponto e das letras a, b, etc. RESPOSTA 1: letra = input('resposta(s/n): ',s); 2: if letra == 's' letra == 'S' 3: 4: elseif letra == 'n' letra == 'N' 5: 6: else 7: 8: disp('continuar') disp('parar') disp(erro) 1: letra = input('resposta(s/n): ','s'); 2: 3: 4: elseif letra == 'n' letra == 'N' 5: 6: 7: disp('erro') 8: 5/14 Número: Primeiro e Último Nome:

função separadatas.m RESPOSTA: (2.0v) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: function [dataout] = separadatas(datain) % Separação / conversão entre formatos de datas: % datain: cadeia de caracteres AAAA-MM-DD % dataout: valor numeric do tipo AAAAMMDD dataout = []; while true % Separação em cadeias de caracteres divididas pelo espaço [data datain = strtok(datain); % Interrompe o ciclo de repetição caso "data" seja vazio if isempty(data) break else indice = (data ~= '-'); % Remoção dos hífens e conversão para o tipo numérico novadata = str2num(data(indice)); % Construção do vector de datas por actualização de dataout dataout = [dataout novadata]; 6/14

função leituracromos.m RESPOSTA: (2.0v) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: function cromo = leituracromos() % Leitura dos ficheiros cromok.dat para a estrutura cromo. % não tem entradas % a saída é um array de estruras for k = 18:-1:1 % Construção do nome do ficheiro nomeficheiro = sprintf('cromo%d.dat', k); fid = fopen(nomeficheiro,'rt'); % Validação se o ficheiro foi bem aberto if fid == -1 error('erro na Abertura'); % Carrega a informação do ficheiro para a estrutura else cromo(k).nome = fgetl(fid); data = fgetl(fid); cromo(k).datainicio = separadatas(data); data = fgetl(fid); cromo(k).datafim = separadatas(data); cromo(k).notas = fgetl(fid); % Fecho do ficheiro fecho = fclose(fid); if fecho == -1 error('erro no Fecho'); 7/14 Número: Primeiro e Último Nome:

P2 Análise de Problema e Algoritmo (5 valores) NOTA IMPORTANTE: a robustez dos programas ao tipo de entrada apenas deve ser considerada quando explicitamente pedida no enunciado da pergunta! Prete-se implementar um programa que calcule e apresente no ecrã a média aritmética de uma série de dados com dimensão arbitrária, ou seja. Os valores da série são números inteiros positivos,. Inicialmente o programa deve pedir ao utilizador a dimensão da série de dados. De seguida, os valores da série são introduzidos pelo utilizador, um por um. A expressão para o cálculo da média aritmética é dada por: O resultado da média deverá ser apresentado no ecrã com uma precisão de duas casa decimais. Exemplo de utilização: se o utilizador escolher uma dimensão da série, poderá introduzir valores sequencialmente, por exemplo 3, 2 e 3, o que irá resultar num valor médio. [0,5 val] 2.a) Descreva as entradas/saídas do programa. Entradas: dimensão, elementos da série de dados Saídas: média dos valores da série [1,0 val] 2.b) Descreva a especificação funcional e os requisitos [EF] Pedir dimensão da série de dados [EF] Pedir elementos da série de dados, um por um [EF] Efectuar o cálculo da média dos valores da série [REQ] Apresentação do resultado com uma precisão de duas casa decimais [REQ] Os valores da série são números inteiros positivos [0,5 val] 2.c) Descreva os métodos de processamento [1] 8/14

[1,0 val] 2.d) Descreva a abordagem Top-down [2,0 val] 2.e) Escreva o algoritmo 1. Pedir o valor de n 2. Repetir para i = 1 até n a. Pedir o valor de x i 3. Calcular a média da série com a expressão [1] 4. Apresentar o valor da média com precisão de 2 casas decimais 9/14 Número: Primeiro e Último Nome:

P3 Codificação de Programas em MATLAB (7 valores) NOTA IMPORTANTE: a robustez dos programas ao tipo de entrada apenas deve ser considerada quando explicitamente pedida no enunciado da pergunta! [1,0 val] 3.a.i) Um número complexo é dado na forma, onde é a parte real, é a parte imaginária e o operador. Escreva a função apresentacomplexo.m, que recebe como argumentos uma estrutura z com as partes real, z.a, e imaginária, z.b, do número complexo. De seguida a função apresenta no ecrã o número complexo no formato com os valores respectivos (use uma precisão de duas casas decimais). Por exemplo: >> apresentacomplexo(2.12,3.3) z = 2.12 + i * 3.30 Resolução: apresentacomplexo.m function apresentacomplexo(z) fprintf('z = %.2f + i * %.2f \n',z.a,z.b) 10/14

[1,0 val] 3.b.ii) Escreva o driver da função, driverapresentacomplexo.m, que pede ao utilizador os valores das partes real e imaginária do numero complexo e, a seguir, faz a chamada à função apresentacomplexo.m para apresentar no ecrã o número no formato adequado. Por exemplo: >> driverapresentacomplexo Parte Real: 2.12 Parte Real: 3.3 Número Complexo: z = 2.12 + i * 3.30 Resolução: driverapresentacomplexo.m z = struct('a',[],'b',[]); z.a = input('parte Real: '); z.b = input('parte Imaginária: '); fprintf('número Complexo: '); apresentacomplexo(z) 11/14 Número: Primeiro e Último Nome:

[3,0 val] 3.c) A soma dos primeiros termos de uma série geométrica convergente é dada por, Escreva um script em MATLAB que calcule e apresente no monitor cada um dos primeiros termos da série, bem como a sua soma. O script deve pedir ao utilizador os parâmetros da série (,, ) que deverão ser validados com as condições e. O programa só deve terminar após opção do utilizador, caso contrário deve pedir novos parâmetros e repetir o cálculo. Resolução: calculasomaserie.m while true a = input('a = '); while true n = input('n = '); if n > 1 break fprintf('o parâmetro n tem que ser maior que 1. \n'); while true r = input('r = '); if abs(r) < 1 break fprintf('o valor absoluto de r tem que ser menor que 1. \n'); soma = 0; for k = 0:(n-1) termo = a * r^k; soma = soma + termo; fprintf('a*r^%d = %f \n',k,termo); fprintf('soma = %.2f \n',soma); opcao = input('prima (T)erminar, ou outra tecla para continuar: ','s'); if lower(opcao) == 't' break 12/14

P4 Interface Gráfica do Utilizador - GUI (3 valores) Prete-se implementar uma GUI, tal como se mostra no esboço da Figura 1, para conversão de unidades de comprimento - de polegadas para centímetros (1 in = 2.54 cm). As caixas a tracejado delimitam as várias componentes e controlos que constituem a GUI. (A) (B) (C) (D) (E) Figura 2: esboço da GUI para conversão entre unidades de comprimento. O modo de operação da GUI é o seguinte: o utilizador escreve o valor em polegadas a converter na caixa identificada pela componente (A). O utilizador pressiona o controlo (E), to como resultado a actualização do texto na componente (C) com o valor em centímetros resultante do cálculo. [1,0 val] 4.a) Complete a tabela seguinte enunciando os nomes das componentes/controlos da GUI e respectivas propriedades. Tipo de Componente Propriedades String Tag FontSize (A) Edit text 1.00 edtvalorin 15 (B) Static text in = sttunidadesin 15 (C) Static text 2.54 sttvalorcm 15 (D) Static text cm sttunidadescm 15 (E) Push Button Converter pbconverter 15 13/14 Número: Primeiro e Último Nome:

[2,0 val] 4.b) Complete, a partir do protótipo do cabeçalho que se apresenta a seguir, o código da callback para o botão Converter. % --- Executes on button press in pbconverte. function pbconverte_callback(hobject, eventdata, handles) % hobject handle to pbconverte (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) Resolução: stringin = get(handles.edtvalorin,'string'); valorin = str2num(stringin); valorcm = valorin * 2.54; stringcm = num2str(valorcm); set(handles.sttvalorcm,'string', stringcm); guidata(hobject,handles); Exemplos de utilização: NOTAS: Sintaxe Descrição get(h,'propriedade') Retorna o conteúdo do atributo 'PROPRIEDADE' da estrutura H. set(h,'propriedade', VALOR) guidata(h1,h2) Actualiza o atributo 'PROPRIEDADE' da estrutura H com o conteúdo de VALOR. Armazena na estrutura de atributos e propriedades H1 o conteúdo da estrutura H2. 14/14