COMPUTAÇÃO E PROGRAMAÇÃO 1º Semestre 2010/2011 MEMec, LEAN Ficha da Aula Prática 5: Selecção e repetição. Funções. Sumário das tarefas e objectivos da aula: 1. Implementar estruturas de selecção e repetição. (revisão) 2. Implementar as novas formas de funções definidas pelo programador. 1
1. Estruturas de selecção e repetição. (revisão) 1.1 HANDS-ON 30. Write a script called prtemps that will prompt the user for a maximum Celsius value in the range from 16 to 20; error-check to make sure it s in that range. Then, print a table showing degrees F and degrees C until this maximum is reached. The first value that exceeds the maximum should not be printed. The table should start at 0 degrees F, and increment by 5 degrees F until the max (in C) is reached. Both temperatures should be printed with a field width of 6 and one decimal place. The formula is C = 5/9 (F 32). For example, the execution of the script might look like this (the format should be exactly like this): 1. Contexto do problema Prete-se desenvolver uma aplicação que peça ao utilizador um valor em graus Celsius entre 16 e 20, e crie uma tabela de conversão entre Fahrenheit e Celsius com valores entre 0 F e o valor introduzido pelo utilizador. 2.1 Esquema de processamento Entradas Limite superior da tabela (max_celsius) Saídas Tabela de conversão de temperaturas 2.2 Especificações funcionais e requisitos (EF) O programa deve perguntar ao utilizador o valor máximo da tabela em Celsius (max_celsius) (EF) O programa deve verificar que o valor pertence ao intervalo de -16 a 20 (EF) O programa deve apresentar uma tabela de conversão entre graus Fahrenheit e graus Celsius (REQ) A tabela apresentará valores no intervalo de 0 F até ao valor max_celsius (REQ) Os valores da tabela são apresentados em intervalos de 5 F (REQ) As temperaturas são apresentadas em campos com 6 caracteres de largura e com 1 casa decimal 2
2.3 Métodos de processamento Conversão em Celsius: temp_c = 5/9 (temp_f 32) 2.4 Fluxos de dados Utilizador Programa Pede o valor de max_celsius Introduz valor de max_celsius Apresenta tabela de conversão 3.1 Abordagem top-down Lista de tarefas: 3.3 Algoritmo principal 1) Repetir indefinidamente a) Apresentar mensagem pedindo ao utilizador um valor de temperatura entre -16 e 20 C b) Ler do teclado o valor de max_celsius c) Se -16 max_celsius 20 terminar repetição (1) d) Apresentar mensagem indicando que o valor não pertence ao intervalo desejado 2) Apresentar cabeçalho da tabela 3) Inicializar temp_f = 0 e temp_c = -5/9*32 4) Repetir enquanto temp_c max_celsius a) Apresentar uma linha com temp_f e temp_c no formato especificado nos requisitos b) Incrementar temp_f de 5 unidades c) Calcular temp_c recorro ao método Conversão em Celsius 3
2. Funções 2.1 Novos tipos de funções definidas pelo programador Estrutura da função Exemplo Função que devolve mais do que um valor: Função que não devolve valores: Função que não devolve nem recebe valores: function functionname() % Comments describing the function Outra função que não devolve nem recebe valores: function functionname % Comments describing the function Função com sub-funções: function [output arguments] = subfunction1 (input arguments) % Comment describing subfunction1 ( ) function [output arguments] = subfunctionn (input arguments) % Comment describing subfunctionn 4
Estudo Autónomo 2.2 Funções (implemente os exemplos em ficheiros com o nome das respectivas funções) 1 Write a function that will receive as an input argument a temperature in degrees Fahrenheit, and will return the temperature in both degrees Celsius and Kelvin. The conversion factors are: C = (F 32) * 5/9 and K = C + 273.15 2 Chame a função anterior na janela de comando com uma temperatura de 18 ºF 3 Implemente uma função que escreva uma palavra dada começando em qualquer uma das suas letras (ver exemplo de execução seguinte em caso de dúvida) function [C,K] = cels_and_kelv(f) % Esta função converte graus % Fahrenheit em Celsius e Kelvin % simultâneamente C = (F 32) * 5/9; K = C + 273.15; >> [C, K] = cels_and_kelv(18) C = K = -7.7778 265.3722 function word_ring(wd) % Writes a word in a loop % starting by any of its letters for i = 0:length(wd)-1, new_wd = [wd(i+1:) wd(1:i)]; fprintf('%s\n', new_wd); Estudo Autónomo 4 Chame a função anterior na janela de comando com a palavra tec lado 5 Escreva uma função que crie um ficheiro de exemplo chamado example.dat, para o utilizador de um programa saber em que formato deve fornecer os ficheiros de dados. O ficheiro é composto por duas colunas de números reais com 5 posições e três casas decimais cada uma. >> word_ring('teclado') teclado ecladot cladote ladotec adotecl dotecla oteclad function test_file % Creates an example file in a % format that the main program % can read fl = fopen('example.dat','wt'); for x = 0:pi/10:pi, y = sin(x); fprintf(fl,'%5.2f %5.2f\n',x,y); fclose(fl); 6 Depois de correr a função test_file procure na sua directoria de trabalho e abra o ficheiro example.dat. 0.00 0.00 0.31 0.31 0.63 0.59 0.94 0.81 1.26 0.95 1.57 1.00 1.88 0.95 2.20 0.81 2.51 0.59 2.83 0.31 3.14 0.00 5
7 Escreva uma função chamada dist_letra que pede ao utilizador para introduzir duas letras mínusculas, verifica que o utilizador realmente introduz letras mínusculas, e apresenta a distância entre as duas no alfabeto. Note que a verificação da introdução de dados deve ser feita duas vezes, utilize para tal uma sub-função. function dist_letra % Apresenta a distância entre duas letras inseridas pelo utilizador letra1 = insere_letra(1); letra2 = insere_letra(2); fprintf('distância: %d letras\n',... abs(letra1-letra2)); function letra = insere_letra(n) % Sub-função que pede e verifica a introdução de uma letra minúscula while true fprintf('\n%dª minúscula: ', n); letra = input('','s'); if letra >= 'a' && letra <= 'z' break fprintf('não era minúscula!'); 2.3 HANDS-ON 3. A vector can be represented by its rectangular coordinates x and y or by its polar coordinates r and θ. The conversions from polar to rectangular are x = r cos(θ) and y = r sin(θ). Write a function to receive the polar coordinates as input arguments and return the corresponding rectangular coordinates. 3. Bibliografia Capítulo 5 de Stormy Attaway (2009), Matlab: A Practical Introduction to Programming and Problem Solving, Elsevier. 6