Baixe o app para aproveitar ainda mais
Prévia do material em texto
INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 1 INF 10 0– Int rod uçã o à Pr ogr am açã o 1 Un ive rsid ade Fe der al d e V iço sa Universidade Federal de Viçosa Centro de Ciências Exatas e Tecnológicas Departamento de Informática INF 100 – Introdução à Programação Funções (parte 1) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 2 INF 10 0– Int rod uçã o à Pr ogr am açã o 22 Departamento de Informática Motivação • Exemplo de cálculo de usando o algoritmo proposto por Heron de Alexandria (Método de Newton): 1. Leia x 2. Faça r = x/2 # chute inicial para a raiz 3. Faça r = (r + x/r) / 2 4. Se |r² - x| > , retorne ao passo 3 5. Escreva r onde = um erro estabelecido qualquer, por exemplo, 10-10. x INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 3 INF 10 0– Int rod uçã o à Pr ogr am açã o 33 Departamento de Informática Motivação • Possível implementação em Python: x = float( input('Entre com o valor de x: ')) r = x/2 # chute inicial para a raiz while abs( r*r - x ) > 1e-10: r = (r + x/r) / 2 print('Raiz de', x, '=', r ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 4 INF 10 0– Int rod uçã o à Pr ogr am açã o 44 Departamento de Informática Motivação • Imagine se tivéssemos que usar o Método de Newton sempre que fosse preciso calcular uma raiz quadrada! – Código confuso. – Difícil reusar em outros programas. – Fácil cometer erros. – Por que preciso saber como calcular raiz (ou seno, cosseno, logaritmo etc.) sempre que precisar disso? INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 5 INF 10 0– Int rod uçã o à Pr ogr am açã o 55 Departamento de Informática Funções em Python • Por isso usamos funções: import math x = float( input('Entre com o valor de x: ')) r = math.sqrt( x ) print('Raiz de', x, '=', r ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 6 INF 10 0– Int rod uçã o à Pr ogr am açã o 66 Departamento de Informática Funções em Python • Outros exemplos de funções da biblioteca math: – log(x) – log10(x) – exp(x) – sqrt(x) – tan(x) – sin(x) – cos(x) – … INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 7 INF 10 0– Int rod uçã o à Pr ogr am açã o 77 Departamento de Informática # Este programa calcula o dia e mês do # domingo de páscoa entre um ano inicial # e um ano final fornecidos pelo usuário ano1 = int( input('Digite o ano inicial (1582 a 2499): ')) while ano1 < 1582 or ano1 > 2499: ano1 = int( input('Digite o ano inicial (1582 a 2499): ')) print() ano2 = int( input('Digite o ano final (1582 a 2499) : ')) while ano2 < 1582 or ano2 > 2499: ano2 = int( input('Digite o ano final (1582 a 2499) : ')) print('\nAno Data da Páscoa') print('----------------------') ano = ano1 while ano <= ano2: ... Identificando oportunidades para reuso de código... Prática 05 INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 8 INF 10 0– Int rod uçã o à Pr ogr am açã o 88 Departamento de Informática # Este programa calcula o dia e mês do # domingo de páscoa entre um ano inicial # e um ano final fornecidos pelo usuário ano1 = int( input('Digite o ano inicial (1582 a 2499): ')) while ano1 < 1582 or ano1 > 2499: ano1 = int( input('Digite o ano inicial (1582 a 2499): ')) print() ano2 = int( input('Digite o ano final (1582 a 2499) : ')) while ano2 < 1582 or ano2 > 2499: ano2 = int( input('Digite o ano final (1582 a 2499) : ')) print('\nAno Data da Páscoa') print('----------------------') ano = ano1 while ano <= ano2: ... Identificando oportunidades para reuso de código... Prática 05 INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 9 INF 10 0– Int rod uçã o à Pr ogr am açã o 99 Departamento de Informática while True: n = int( input('Entre com a quantidade de alunos: ')) if n < 2 or n > 50: print('Valor deve estar entre 2 e 50') else: break soma = 0 for i in range(0, n): while True: x = int( input('Entre com a nota do próximo aluno: ')) if x < 0 or x > 100: print('Valor deve estar entre 0 e 100') else: break soma = soma + x media = soma / n print('Média das notas:', media ) Identificando oportunidades para reuso de código... INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 10 INF 10 0– Int rod uçã o à Pr ogr am açã o 1010 Departamento de Informática ... while True: n = int( input('Entre com a quantidade de alunos: ')) if n < 2 or n > 50: print('Valor deve estar entre 2 e 50') else: break soma = 0 for i in range(0, n): while True: x = int( input('Entre com a nota do próximo aluno: ')) if x < 0 or x > 100: print('Valor deve estar entre 0 e 100') else: break soma = soma + x media = soma / n Identificando oportunidades para reuso de código... INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 11 INF 10 0– Int rod uçã o à Pr ogr am açã o 1111 Departamento de Informática Funções em Python O código para a função leiaInt será apresentado mais adiante... # Este programa calcula o dia e mês do # domingo de páscoa entre um ano inicial # e um ano final fornecidos pelo usuário ano1 = leiaInt('Digite o ano inicial (1582 a 2499): ', 1582, 2499) print() ano2 = leiaInt('Digite o ano final (1582 a 2499) : ', 1582, 2499) print('\nAno Data da Páscoa') print('----------------------') ano = ano1 while ano <= ano2: ... INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 12 INF 10 0– Int rod uçã o à Pr ogr am açã o 1212 Departamento de Informática Funções em Python O código para a função leiaInt será apresentado mais adiante... n = leiaInt('Entre com a quantidade de alunos: ', 2, 50) soma = 0 for i in range(0, n): x = leiaInt('Entre com a nota do próximo aluno: ', 0, 100) soma = soma + x media = soma / n print('Média das notas:', media ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 13 INF 10 0– Int rod uçã o à Pr ogr am açã o 1313 Departamento de Informática Funções em Python • Vantagens do uso de funções: – Modularidade e clareza do código fonte. – Reuso de software. – Menores chances de erros. – Separar o uso da função de seus detalhes de implementação. – Permitem pensar no algoritmo em mais alto nível primeiro, para depois ir refinando ao nível de comandos da linguagem de programação. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 14 INF 10 0– Int rod ução à Pr ogr am açã o 1414 Departamento de Informática Funções em Python • Para criar uma função, devemos conhecer bem as suas necessidades: – A função necessita de dados de entrada (parâmetros)? – Se sim, quais dados? – Espera-se que a função responda com alguma informação? – Se sim, qual ou quais? • Essas perguntas devem ser respondidas enquanto se projeta a função, e elas estarão especificadas na declaração da mesma. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 15 INF 10 0– Int rod uçã o à Pr ogr am açã o 1515 Departamento de Informática Definição de uma função em Python def nome( lista_de_parâmetros ): <comandos> return <valor(es) de retorno> • nome: nome usado para chamar (usar) a função. • lista_de_parâmetros: dados (constantes, variáveis) passados para a função. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 16 INF 10 0– Int rod uçã o à Pr ogr am açã o 1616 Departamento de Informática Funções em Python • Para se trabalhar com funções deve-se – Declarar a função; – Programar a função; – Evocar (chamar, usar) a função. • Exemplo: definição da função leiaInt()... INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 17 INF 10 0– Int rod uçã o à Pr ogr am açã o 1717 Departamento de Informática # Este programa calcula o dia e mês do # domingo de páscoa entre um ano inicial # e um ano final fornecidos pelo usuário def leiaInt( msg, vmin, vmax ): v = int( input( msg )) while v < vmin or v > vmax: v = int( input( msg )) return v ano1 = leiaInt('Digite o ano inicial (1582 a 2499): ', 1582, 2499) print() ano2 = leiaInt('Digite o ano final (1582 a 2499) : ', 1582, 2499) print('\nAno Data da Páscoa') print('----------------------') ano = ano1 while ano <= ano2: ... INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 18 INF 10 0– Int rod uçã o à Pr ogr am açã o 1818 Departamento de Informática Funções em Pythondef leiaInt( msg, vmin, vmax ):v = int( input( msg )) while v < vmin or v > vmax: print('Valor deve estar entre', vmin, 'e', vmax ) v = int( input( msg )) return v n = leiaInt('Entre com a quantidade de alunos: ', 2, 50) soma = 0 for i in range(0, n): x = leiaInt('Entre com a nota do próximo aluno: ', 0, 100) soma = soma + x media = soma / n print('Média das notas:', media ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 19 INF 10 0– Int rod uçã o à Pr ogr am açã o 1919 Departamento de Informática Exercício • Defina uma função chamada abs() que aceita como parâmetro um valor x qualquer e retorna o módulo ou valor absoluto de x. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 20 INF 10 0– Int rod uçã o à Pr ogr am açã o 2020 Departamento de Informática Exercício def abs( x ): if x < 0: return -x else: return x INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 21 INF 10 0– Int rod uçã o à Pr ogr am açã o 2121 Departamento de Informática Exercício – programa completo def abs( x ): if x < 0: return -x else: return x x1 = float( input('Entre com o x1: ')) x2 = float( input('Entre com o x2: ')) print('|x1 - x2| =', abs( x1-x2 )) print('|x1| =', abs( x1 )) print('|x2| =', abs( x2 )) 1 2 3 4 INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 22 INF 10 0– Int rod uçã o à Pr ogr am açã o 2222 Departamento de Informática Passagem de parâmetro – por valor 1. A expressão é avaliada (uma constante, umavariável ou uma expressão / fórmula); 2. O valor-resultado é copiado para dentro doparâmetro da função, obedecendo a mesma ordemde chamada e de declaração; 3. A execução do programa é desviada para o início dafunção; 4. Ao encontrar um comando return, o programaretorna a execução para o local de onde a funçãofoi chamada, juntamente com o valor de retorno,se houver. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 23 INF 10 0– Int rod uçã o à Pr ogr am açã o 2323 Departamento de Informática def leiaInt( msg, vmin, vmax ): v = int( input( msg )) while v < vmin or v > vmax: v = int( input( msg )) return v def leiaInt( msg, vmin, vmax ): v = int( input( msg )) while v < vmin or v > vmax: print('Valor deve estar entre', vmin, 'e', vmax ) v = int( input( msg )) return v Esta função não mostra uma mensagem de erro quando o usuário entra com um valor fora do intervalo. Esta função mostra! Como implementar uma função mais genérica, que pode mostrar ou não a mensagem de erro, de acordo com a minha necessidade? INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 24 INF 10 0– Int rod uçã o à Pr ogr am açã o 2424 Departamento de Informática def leiaInt( msg, vmin, vmax, mostraErro ): v = int( input( msg )) while v < vmin or v > vmax: if mostraErro: print('Valor deve estar entre', vmin, 'e', vmax ) v = int( input( msg )) return v ano1 = leiaInt('Ano inicial (1582 a 2499): ', 1582, 2499, False) print() ano2 = leiaInt('Ano final (1582 a 2499) : ', 1582, 2499, False) ... n = leiaInt('Entre com a quantidade de alunos: ', 2, 50, True) soma = 0 for i in range(0, n): x = leiaInt('Entre com a nota do próximo aluno: ', 0, 100, True) soma = soma + x media = soma / n print('Média das notas:', media ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 25 INF 10 0– Int rod uçã o à Pr ogr am açã o 2525 Departamento de Informática def leiaInt( msg, vmin, vmax, mostraErro=True ): v = int( input( msg )) while v < vmin or v > vmax: if mostraErro: print('Valor deve estar entre', vmin, 'e', vmax ) v = int( input( msg )) return v ano1 = leiaInt('Ano inicial (1582 a 2499): ', 1582, 2499, False) ... n = leiaInt('Entre com a quantidade de alunos: ', 2, 50 ) Parâmetros podem assumir valores ”default”: mostraErro=False mostraErro=True INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 26 INF 10 0– Int rod uçã o à Pr ogr am açã o 2626 Departamento de Informática Funções em Python • Nos casos anteriores, as funções abs() e leiaInt() retornam um resultado. • Podemos ter funções que executam alguma tarefa específica mas não retornam nenhum valor como resultado. Ex.: sound( frequencia, duracao_ms ) Propósito: emitir um som com determinada frequência em hertz e duração em ms pelo autofalante do computador. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 27 INF 10 0– Int rod uçã o à Pr ogr am açã o 2727 Departamento de Informática Funções em Python def sound( frequencia, duracao_ms ): ... ... ...def sound( frequencia, duracao_ms ): ... ... return Nesse caso não precisa ter o comando return. A execução da função terminará quando o último comando da função for executado. Ou pode ter o comando return, mas sem o valor de retorno. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 28 INF 10 0– Int rod uçã o à Pr ogr am açã o 2828 Departamento de Informática Funções em Python • Também podemos ter funções que não recebem nenhum parâmetro: def beep(): ... def pi(): return 3.1415926535897 INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 29 INF 10 0– Int rod uçã o à Pr ogr am açã o 2929 Departamento de Informática Funções em Python • Exemplos de uso: beep() sound( 200, 1000 ) print( pi() ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 30 INF 10 0– Int rod uçã o à Pr ogr am açã o 3030 Departamento de Informática Mais exemplos ... def media( a, b ): m = (a + b) / 2 return m m = media( 5.5, 7.8 ) print('Média =', m ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 31 INF 10 0– Int rod uçã o à Pr ogr am açã o 3131 Departamento de Informática Mais exemplos ... def media( a, b ): return (a + b) / 2 m = media( 5.5, 7.8 ) print('Média =', m ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 32 INF 10 0– Int rod uçã o à Pr ogr am açã o 3232 Departamento de Informática Mais exemplos ... def maior( a, b ): if a > b: return a else: return b x = float( input('x = ')) y = float( input('y = ')) print('Maior valor =', maior( x, y )) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 33 INF 10 0– Int rod uçã o à Pr ogr am açã o 3333 Departamento de Informática Funções em Python • Erros comuns: def f( x, y ): r = x*x + y def funcao( x, y ): return x*x + y def pi(): return 3.1415926535897 print( pi ) print( funcao( 12 )) (esqueceu do return) pi() (faltou um parâmetro) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 34 INF 10 0– Int rod uçã o à Pr ogr am açã o 3434 Departamento de Informática Exercício 1 • Implemente uma função que recebe como parâmetros três valores reais a, b e c, e retorna o maior deles. Use duas abordagens: a) Uma função maior3( a, b, c ) totalmente independente; b) Uma função maior3( a, b, c ) que usa a função maior( a, b ) já feita antes. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 35 INF 10 0– Int rod uçã o à Pr ogr am açã o 3535 Departamento de Informática Exercício 1a def maior3( a, b, c ): if a > b and a > c: return a else: if b > c: return b else: return c INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 36 INF 10 0– Int rod uçã o à Pr ogr am açã o 3636 Departamento de Informática Exercício 1a def maior3( a, b, c ): m = a if b > m: m = b if c > m: m = c return m INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 37 INF 10 0– Int rod uçã o à Pr ogr am açã o 3737 Departamento de Informática Exercício 1b def maior( a, b ): if a > b: return a else: return b def maior3( a, b, c ): return maior( maior( a, b ), c ) INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 38 INF 10 0– Int rod uçã o à Pr ogr am açã o 3838 Departamento de Informática Exercício 2 • Implemente uma função que recebe como parâmetro um valor inteiro n e retorna o valor de n!. A função pode supor que n será sempre inteiro e não negativo, sem ter que verificar essa condição. INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 39 INF 10 0– Int rod uçã o à Pr ogr am açã o 3939 Departamento de Informática Exercício 2 # versão 1 def fatorial( n ): fat = 1 while n > 1: fat = fat * n n = n - 1 return fat INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 40 INF 10 0– Int rod uçã o à Pr ogr am açã o 4040 Departamento de Informática Exercício 2 # versão 2 def fatorial( n ): fat = 1 for i in range(2, n+1): fat = fat * i return fat INF 10 0– Int rod uçã o à Pr ogr am açã o INF 10 0– Int rod uçã o à Pr ogr am açã o 41 INF 10 0– Int rod uçã o à Pr ogr am açã o 4141 Departamento de Informática Para Casa Faça pelo menos 5 (cinco) dos exercícios E.01, E.05 até E.17, E.21, E.22 do run.codes.
Compartilhar