Computação e Programação

Documentos relacionados
COMPUTAÇÃO E PROGRAMAÇÃO

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

Computação e Programação

COMPUTAÇÃO E PROGRAMAÇÃO

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

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

Processo de Desenvolvimento

Manipulação de strings e conversão entre tipos de dados

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?

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

Manipulação de strings e conversão entre tipos de dados

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

COMPUTAÇÃO E PROGRAMAÇÃO

COMPUTAÇÃO E PROGRAMAÇÃO

COMPUTAÇÃO E PROGRAMAÇÃO

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

Estruturas de dados complexas: cell arrays e structures

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

MATLAB. Programação básica

Aula 12 - Correção de erros

Para calcular o polinómio de Lagrange noutros pontos Ficheiro polagrangeval.m

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

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

Programação em MATLAB

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

I-3 Introdução ao Matlab

Computação e Programação. Exame Época Normal

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

Divisão de Engenharia Mecânica. Programa de Pós-Graduação em Engenharia Aeronáutica e Mecânica. Prova de Seleção para Bolsas 1 o semestre de 2014

1. O número de bactérias numa cultura pode ser estimado pela expressão:

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

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

f. Exemplo: verificar condição de aprovação de alunos

Apontamentos de. Programação e Algoritmia

Banco de Dados PLPGSQL. Prof. Dr. Joel da Silva

Computação e Programação Exame Resolvido 1ª Época

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

Linguagem de programação: Pascal

DIBELS TM. Portuguese Translations of Administration Directions

I-3 Introdução ao Matlab

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

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

Exercícios Extra de Computação. Secção de Matemática Departamento de Engenharia Civil FEUP

Computação e Programação

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

Prof. Marcelo Azevedo Costa. Departamento de Engenharia de Produção Universidade Federal de Minas Gerais

Introdução à Programação em C Input / Output

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

Transcrição:

Computação e Programação 7ª Aula de Problemas Sub-funções; Vectorização; Manipulação de strings; Estrutura try-catch Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII

Problema 1 Seja um polinómio em x descrito por: Escreva uma função, denominada calculapolinomio com as seguintes especificações: Parâmetros de entrada: coef vector com os coeficientes do polinómio por ordem decrescente [c n... c 0 ]. Parâmetros de saída: pol c c x c x c x n 2 0 1 2... Utilize uma sub-função para cálculos auxiliares. x vector com os pontos para os quais se pretende calcular o valor do polinómio. resultado vector com a avaliação do polinómio nos pontos pretendidos. Sempre que possível evite os ciclos for, e utilize a funcionalidade de vectorização do Matlab. n n

Problema 1 Análise resumida Algoritmo da função calculapolinomio: 1. Seja n o valor do comprimento de coef menos uma unidade. 2. Criar um vector chamado expoente com elementos entre n e 0 com passo -1 3. Para cada elemento i de x fazer a) Utilizando operações elemento-a-elemento calcular o vector parcelas = coef * x(i) ^ expoente b) Calcular resultado(i) = soma_parcelas(parcelas) Algoritmo da função soma_parcelas: 1. Retornar a soma dos elementos do vector de entrada 3

Problema 1 Codificação calculapolinomio.m function resultado = calculapolinomio(coef, x) expoente = (length(coef)-1):-1:0; for i = 1:length(x), parcelas = coef.* x(i).^ expoente; resultado(i) = soma_parcelas(parcelas); end return % Esta sub-função é um exemplo de como em Matlab também se pode % realizar um somatório recorrendo a uma operação matricial ao % invés de utilizar um ciclo. function res = soma_parcelas(parc) return res = parc*ones(length(parc),1);

Problema 2 Escreva uma função, denominada analisastring, com as seguintes especificações: Parâmetros de entrada: cadeia_car uma string; Parâmetros de saída: info_cadeia_car vector linha contendo a seguinte informação: 1. Número de letras maiúsculas existentes na string; 2. Número de letras minúsculas existentes na string; 3. Número de caracteres em branco existentes na string; A função deve testar se o parâmetro de entrada é realmente uma string, se não for deve abortar com uma mensagem de erro associada. Teste a função com um script.

Problema 2 Codificação function info_cadeia_car = analisastring(cadeia_car) if ~ischar(cadeia_car) error('não é uma cadeia de caracteres.'); end % Em Matlab a função sum() pode ser utilizada para somar todos os % elementos de um vector evitando a utilização de um ciclo ou a % realização da operação matricial utilizada no problema anterior info_cadeia_car(1) = sum( cadeia_car >= 'A' & cadeia_car <= 'Z' ); info_cadeia_car(2) = sum( cadeia_car >= 'a' & cadeia_car <= 'z' ); info_cadeia_car(3) = sum( isspace(cadeia_car) );

Problema 2 Codificação clc, clear all, close all cadeia = input('introduza uma cadeia de carateres: ', 's'); info = analisastring(cadeia); fprintf('a cadeia de caracteres introduzida possui:\n'); fprintf('%8d letras maiúsculas\n', info(1)); fprintf('%8d letras minúsculas\n', info(2)); fprintf('%8d espaços\n', info(3));

Problema 3 Escreva um script que peça ao utilizador uma expressão matemática, sintaticamente correcta em Matlab, em função da variável x (por exemplo: 3*x^3+4*x^2+2*x ). Em seguida deve pedir o vector de pontos onde se pretende avaliar o valor da função. O vector com o resultado deve ser apresentado no monitor e, se todos os seus valores forem finitos (ou seja diferentes de Inf ou NaN), deve ser apresentado um gráfico da função. A sintaxe da função fornecida pelo utilizador deve ser testada utilizando os comandos try-catch e a função eval. Se a sintaxe não estiver correcta o programa deve avisar o utilizador e permitir nova introdução.

Problema 3 Análise resumida Algoritmo da função obter_expressao_valida: 1. Pedir ao utilizador uma cadeia de caracteres expressao contendo a expressão a avaliar. 2. Repetir enquanto expressao não corresponder a uma expressão sintacticamente correcta a) Avaliar expressao b) Se a expressão não for sintacticamente correcta i) Pedir novamente a cadeia-de-caracteres expressao 3. Retornar o valor de expressao 9

Problema 3 Codificação function expressao = obter_expressao_valida expressao = input('por favor introduza a expressão a avaliar:','s'); x = 1; exp_correcta = false; while ~exp_correcta try res = eval(expressao); exp_correcta = true; catch disp('a expressão introduzida não é válida em Matlab.'); expressao = input('por favor repita a introdução: ', 's'); exp_correcta = false; end end

Problema 3 Análise resumida Algoritmo da função obter_vector_valido: 1. Repetir indefinidamente a) Pedir um vector de pontos vec_x ao utilizador b) Se vec_x tiver o formato de um vector i) Retornar vec_x c) Apresentar mensagem indicando que o vector não é válido 11

Problema 3 Codificação function vec_x = obter_vector_valido while true vec_x = input('por favor introduza o vector de pontos: '); if isvector(vec_x), return end disp('os dados introduzidos não formam um vector válido.'); end

Problema 3 Análise resumida Parâmetros de entrada: expressao, vector_x Parâmetros de saída: resultado Algoritmo da função avalia_expressao: 1. Em cada ponto i de vector_x, avaliar expressao e atribuir a resultado(i) 13

Problema 3 Codificação function resultado = avalia_expressao(expressao, vector_x) for i = 1:length(vector_x), x = vector_x(i); resultado(i) = eval(expressao); end

Problema 3 Análise resumida Algoritmo do programa principal: 1. Chamar função expressao = obter_expressao_valida 2. Chamar função vec_x = obter_vector_valido 3. Chamar função res = avalia_expressao(expressao, vec_x) 4. Apresentar valores de res na forma de uma coluna 5. Se todos os elementos de res são finitos a) Apresentar gráfico de res em função de vec_x 15

Problema 3 Codificação % Obter uma expressão válida em Matlab expressao = obter_expressao_valida; % Obter pontos a avaliar na forma de um vector vec_x = obter_vector_valido; % Avaliar a expressão res = avalia_expressao(expressao, vec_x); % Apresentar resultados if size(res,1) > 1, disp(res) else disp(res') end if all(isfinite(res)) plot(vec_x, res); end

Exercícios Propostos [Livro 1] (Ver referências no último slide) 18. Write a script that will Call a function to prompt the user for an angle in degrees Call a function to calculate and return the angle in radians Call a function to print the result Note that the solution to this problem involves four M-files: one which acts as a main program, and three for the functions 19. Modify the above program so that the function to calculate the angle is a subfunction to the function that prints. 17

Exercícios Propostos [Livro 1] (Ver referências no último slide) 23. The resistance R in ohms of a conductor is given by R = E / I where E is the potential in volts and I is the current in amperes. Write a script that will Call a function to prompt the user for the potential and the current Call a function that will print the resistance; this will call a subfunction to calculate and return the resistance 24. The power in watts is given by P = EI. Modify the program above to calculate and print both the resistance and the power. Modify the subfunction so that it calculates and returns both values. 18

Exercícios Propostos [Livro 1] (Ver referências no último slide) 2. Write a function that will receive a name and department as separate strings and will create and return a code consisting of the first two letters of the name and the last two letters of the department. The code should be upper-case letters. For example, >> namedept('robert','mechanical') ans = ROAL 3. Write a function that will prompt the user separately for a first and last name and will create and return a string with the form last, first. 19

Exercícios Propostos [Livro 1] (Ver referências no último slide) 7. Write a script that will create x and y vectors. Then, it will ask the user for a color ( red, blue, or green ) and for a plot style ( o, * ). It will then create a string pstr that contains the color and plot style, so that the call to the plot function would be: plot(x,y,pstr). For example, if the user enters blue and *, the variable pstr would contain b*. 10. Write a function that will receive two strings as input arguments, and will return a character matrix with the two strings in separate rows. Rather than using the char function to accomplish this, the function should pad with extra blanks as necessary and create the matrix using square brackets. 20

Exercícios Propostos [Livro 1] (Ver referências no último slide) 14. Write a function that will receive two input arguments: a character matrix which is a column vector of strings, and a string. It will loop to look for the string within the character matrix. The function will return the row number in which the string is found if it is in the character matrix, or the empty vector if not. 18. In cryptography, the intended message sometimes consists of the first letter of every word in a string. Write a function crypt that will receive a string with the encrypted message and return the message. >> estring = 'The early songbird tweets'; >> m = crypt(estring) m = Test 21

Exercícios Propostos [Livro 1] (Ver referências no último slide) 18. In cryptography, the intended message sometimes consists of the first letter of every word in a string. Write a function crypt that will receive a string with the encrypted message and return the message. >> estring = 'The early songbird tweets'; >> m = crypt(estring) m = Test 21. Create the following two variables: >> var1 = 123; >> var2 = '123'; Then, add 1 to each of the variables. What is the difference? 22

Referências [Livro 1] Capítulo 5 e 6 de Matlab: A Practical Introduction to Programming and Problem Solving, Stormy Attaway (2009) Elsevier. 23