informácapara as ciênciase engenharias versão: d...

66
Informá(ca para as Ciências e Engenharias Versão : D (Engenharias Mecânica e Gestão Industrial) Pedro Barahona 2019 / 20

Upload: others

Post on 28-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Informá(ca para as Ciências e EngenhariasVersão : D

(Engenharias Mecânica e Gestão Industrial)

Pedro Barahona

2019 / 20

Page 2: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Sumário

• Python§ Funções.

§ Testes unitários.

§ Exercícios

• Resolução de problemas§ Metodologia e níveis de abstração.

• Ficheiros com código fonte. Ciclo de vida de um programa.

• Tipos de erros. Representação de números em binário.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 2

Page 3: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Sumário

• Python§ Funções.

§ Testes unitários.

§ Exercícios

• Resolução de problemas§ Metodologia e níveis de abstração.

• Ficheiros com código fonte. Ciclo de vida de um programa.

• Tipos de erros. Representação de números em binário.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 3

Page 4: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Matemá(ca – Definição de funções

• Definição:nomeFunção: Domínio -> Contradomínio

• Sintaxe:nomeFunção(parâmetros) = expressão

com os parâmetros separados por vírgulas.

• Exemplos:§ f(x) = x2

§ g(x) = |x|§ h(x,y) = max(f(x), g(y))

• Há problemas por x ser um parâmetro de f, de g e de h?§ Não, porque os contextos são diferentes.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 4

Page 5: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Matemá(ca – Chamada de funções

• Sintaxe da aplicação (ou chamada):

nomeFunção(argumentos)com os argumentos separados por vírgulas.

• Exemplo:Sendo f(x) = x2 ; g(x) = |x|; h(x,y) = max(f(x),g(y))

temos, por exemplo§ f(3) (que vale 9)

§ h(4,-11) (que vale 16)

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 5

Page 6: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Definição de funções [1]

• Sintaxe da definição:

com os parâmetros separados por vírgulas;

• A instrução return termina a execução da função, podendo devolverum resultado .

§ A função não devolve resultado quando o return não tem parâmetrosou tem o parâmetro None

• À primeira linha da definição (que começa por def) chama-se a assinaturada função.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 6

def nomeFunção(parâmetros) instruçõesreturn [None | Resultado]

Page 7: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Definição de funções [2]

Exemplo:

• Implementação de f(x) = x2 (1ª versão):

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 7

def f (x) return x**2

def nomeFunção(parâmetros) instruçõesreturn [None | Resultado]

Page 8: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

REGRA DE PROGRAMAÇÃO

• Todos os iden,ficadores (nomes) devem ser escolhidos deforma a indicar o seu significado.

§ O nome de uma variável diz o que é guardado nessa posição dememória.

§ O nome de uma função diz o que a função calcula.

§ O nome de um parâmetro diz o que o parâmetro vai receber.

Nota: Nenhum nome pode ter acentos ou cedilhas.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 8

Page 9: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Definição de funções [3]

• Implementação de f(x) = x2 (1ª versão):

• Problemas?§ Neste caso (em que a função “vem” da MatemáMca), o

idenMficador x do parâmetro é muito natural.

§ Mas o idenMficador f da função não dá qualquer informação.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 9

def f(x) return x**2

Page 10: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Definição de funções [4]

• Implementação de f(x) = x2 (1ª versão):

• Implementação de f(x) = x2 (2ª versão):

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 10

def f(x) return x**2

def quadrado(x) return x**2

Page 11: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

REGRA DE PROGRAMAÇÃO

• Todas as funções devem ser documentadas, indicando-se asintaxe da chamada, o que a função calcula e o que são osseus parâmetros.

• Isto é feito escrevendo um comentário depois da assinaturada função, entre aspas triplas - """ comentário """.

• Em Python, o comando help(nomeFunção) escreve essecomentário.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 11

Page 12: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Definição de funções [5]

• Implementação de f(x) = x2 (3ª versão):

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 12

def quadrado (x)""" Calcula o quadrado do numero x """return x**2

In : help(quadrado)Help on function quadrado in module __main__:

quadrado(x)Calcula o quadrado do numero x.

Page 13: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Ficheiros de Código

• O código dum programa deve ser guardado num ficheiro comextensão .py.

• Um ficheiro pode conter múl^plas funções.

• Deve usar nomes que sejam indica^vos do conteúdo doficheiro.

• Para executar/ler um ficheiro no interpretador, pode usar ocomando:

exec(open(nome_do_ficheiro).read())

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 13

Page 14: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Ficheiros de Código

• No Anaconda/Spyder pode usar em alterna^va o comando

runfile(nome_do_ficheiro)

• O comando, Run File (F5), pode ser dado diretamente peloicon indicado, (que executa o ficheiro na janela de edição)

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 14

Page 15: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Chamada de funções [1]

• Execução da 1ª chamada:1. É avaliado o valor da expressão

usada como argumento (que é-3).

2. Executa-se o código da função,usando como valor doparâmetro o valor doargumento respeCvo.

3. O valor da chamada é o valordo parâmetro da instruçãoreturn

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 15

def quadrado (x)""" Calcula o ... """return x**2

In : quadrado( -1 * 3) Out: 9 In : x = quadrado(-5) – 1 In : xOut: 24

4. Na 2ª chamada, o valor da função é atribuído à variavel x, e não é apresentado.

5. Mas o valor da variável pode ser mostrado.

Page 16: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Outra Função

• Comprimento do segmento (x,y) (x’,y’)

• Implementação da função:

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 16

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

(𝑥 − 𝑥!)"+(𝑦 − 𝑦!)"𝑓(𝑥,𝑦,𝑥’,𝑦’) =

Page 17: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

REGRA DE PROGRAMAÇÃO

• Cada linha de código tem de ser muito fácil de entender.§ No Python é obrigatória a indentação (o número de espaços em

branco no início da linha) dos blocos de instruções – funções eoutras instruções que veremos nas próximas aulas.

§ As linhas devem ser curtas (80 caracteres, no máximo, contandocom os espaços em branco do início).

§ As expressões complicadas devem ser simplificadas, usandovariáveis (auxiliares).

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 17

Page 18: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Chamada de funções [1]

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 18

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

In : comprSegmento(0,1,2+1,5)

1. A expressão 2+1 é avaliada

2. Os parâmetros x1, y1, x2, y2 são criados, sendo-lhe atribuídos os objetoscom os valores 0, 1, 3, 5.

x1 ← 0; y1 ← 1; x2 ← 3; y2 ← 5.

...

Page 19: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Chamada de funções [2]

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 19

In : comprSegmento(0,1,2+1,5)

...3. A expressão (x1 – x2) ** 2 + (y1 – y2) ** 2 é avaliada e o seu valor (25) é

atribuído à variável aux.4. Avalia-se a expressão math.sqrt(aux), chamando-se a função math.sqrt

com o valor de aux (25)....

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

Page 20: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Chamada de funções [3]

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 20

In : comprSegmento(0,1,2+1,5)Out: 5

...

5. As variáveis x1, x2, y1 e y2 criadas na execução da função são destruídas.

6. O valor da função comprSegmento(0,1,2+1,5) é o valor retornado (– 5).

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

Page 21: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

REGRA DE PROGRAMAÇÃO

• As variáveis criadas no corpo (dentro) de uma função são destruídas (noexemplo a variável aux) quando a execução do código da função termina.

• Chamam-se variáveis locais da função.

• Os parâmetros (no exemplo os parâmetros x1, x2, y1 e y2) tambémdeixam de exisZr quando a execução da função termina.

• As variáveis criadas diretamente no interpretador nunca são destruídas –exceto se for executado o comando del nomeVariável.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 21

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

Page 22: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Python – Chamada de funções [4]

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 22

In : comprSegmento(0,1,2+1,5)Out: 5 In : x1Traceback (most recent call last):

File "<ipython-input-9-04358ba4b61b>", line 1, in <module>x1

NameError: name 'x1' is not defined

...• As variáveis x1, x2, y1 e y2 criadas na execução da função são destruídas.

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

Page 23: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

REGRA DE PROGRAMAÇÃO

• Testes Unitários:§ cada função deve ser testada isoladamente, antes de ser integrada

no programa completo.

• Representa,vidade:§ Os casos testados devem ser o mais variados possível: casos gerais,

casos parMculares, casos degenerados, casos limite, ...

• Erros§ É essencial ler e tentar compreender asmensagens de erro.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 23

Page 24: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

TESTES UN ITÁR IO S

• Casos de Teste:§ pontos diferentes

§ pontos iguais

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 24

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

In : comprSegmento(4,0,0,3)Out: 5 In : comprSegmento(0,0,0,0)Out: 0

Page 25: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

SISTEM ATIZAR TESTES UN ITÁR IO S

• Sugestão:§ Criar função com casos de teste, usando instrução assert para

verificar resultados.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 25

def unitTestComprSegmento() :assert comprSegmento(4,0,0,3) == 5assert comprSegmento(0,0,0,0) == 0

In : comprSegmento(4,0,0,3)Out: 5 In : comprSegmento(0,0,0,0)Out: 0 In : unitTestComprSegmento()

Page 26: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

SISTEM ATIZAR TESTES UN ITÁR IO S

• Quando a função retorna um valor não esperado (no exemplo seguinte,devido a ter um valor errado) esse facto é reportado pelo interpretador

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 26

def unitTestComprSegmento() :assert comprSegmento(4,0,0,3) == 5assert comprSegmento(0,0,0,0) == 1

In : comprSegmento(4,0,0,3)Out: 5 In : comprSegmento(0,0,0,0)Out: 0 In : unitTestComprSegmento()Traceback (most recent call last):

File "<ipython-input-10-4aed2ea501ae>", line 1, in <module>assert comprSegmento(0,0,0,0) == 1

AssertionError

Page 27: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Sumário

• Python§ Funções.

§ Testes unitários.

§ Exercícios

• Resolução de problemas§ Metodologia e níveis de abstração.

• Ficheiros com código fonte. Ciclo de vida de um programa.

• Tipos de erros. Representação de números em binário.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 27

Page 28: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Metodologia de Resolução de Problemas

• Compreender totalmente o problema.§ Caracterizar o problema.§ Generalizar o problema (sempre que for possível).

• Desenhar o algoritmo para resolver o problema.1. Decompor o problema em sub-problemas.2. Iden+ficar, caracterizar e generalizar cada sub-problema.3. Conceber o algoritmo, assumindo que os sub-problemas estão resolvidos.

• Para cada sub-problema, começando pelos mais simples1. Implementar o respeLvo algoritmo; e2. Testar o “sub-programa” obLdo.

• Para o problema inicial1. Implementar o algoritmo; e2. Testar o programa obLdo.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 28

Page 29: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Problema da Vedação

• Na sequência de uma expropriação de terrenos, vai sercolocada uma vedação entre três estacas, cujas coordenadascartesianas são (x1,y1), (x2,y2) e (x3,y3).

• Pretende-se calcular o comprimento da vedação.

(x1,y1)

(x3,y3)

(x2,y2)

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 29

Page 30: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Problema [1]

1. Compreender totalmente o problema descrito noenunciado.

• Não ficar com dúvidas sobre:§ a informação que se recebe (os dados de entrada);

§ a informação que se produz (os resultados, a saída).

• Devemos saber resolver o problema “à mão”.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 30

Page 31: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Problema [2]

2. Caracterizar o problema.

• Problema: Comprimento de uma vedação.

• Entrada: estaca (x1,y1), estaca (x2,y2), estaca (x3,y3).

• Saída: o comprimento da vedação delimitada pelas estacas(x1,y1), (x2,y2) e (x3,y3).

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 31

Page 32: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Problema [3]

3. Generalizar o problema (sempre que for possível).

• Problema: Perímetro de um triângulo.

• Entrada: vér^ce (x1,y1), vér^ce (x2,y2), vér^ce (x3,y3).

• Saída: o perímetro do triângulo definido pelos vér^ces(x1,y1), (x2,y2) e (x3,y3).

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 32

Page 33: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Algoritmo [1]

4. Desenhar o algoritmo para resolver o problema.a) Conceber o algoritmo, decompondo o problema em sub-

problemas.

§ Como calcular o perímetro de um triângulo?

§ Somam-se os comprimentos dos três lados do triângulo.« Necessário obter o comprimento de cada lado

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 33

Page 34: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Algoritmo [2]

b) Iden,ficar, caracterizar e generalizar cada sub-problema.

• Sub-problema: Comprimento de um segmento de reta.

• Entrada: ponto (x,y), ponto (x’,y’).

• Saída: o comprimento do segmento de reta definido pelospontos (x,y) e (x’,y’).

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 34

Page 35: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Algoritmo [3]

c) Conceber o algoritmo, assumindo que os sub-problemasestão resolvidos.

Perímetro triângulo (x1,y1), (x2,y2), (x3,y3) :

comprimento segmento (x1,y1) (x2,y2) +

comprimento segmento (x2,y2) (x3,y3) +

comprimento segmento (x3,y3) (x1,y1)

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 35

Page 36: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Algoritmo [4]

5. Para cada sub-problema, desenhar o algoritmo para oresolver.

a) Conceber o algoritmo, decompondo o problema em sub-problemas.

b) IdenMficar, caracterizar e generalizar cada sub-problema.

c) Conceber o algoritmo, assumindo que os sub-problemas estãoresolvidos.

§ Como calcular o comprimento do segmento (x,y) (x’,y’)?

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 36

(𝑥 − 𝑥!)"+(𝑦 − 𝑦!)"

Page 37: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução – Programa

6. Para cada sub-problema (começando pelos mais simples),implementar o respe^vo algoritmo e testar o “sub-programa”.

7. Implementar o algoritmo que resolve o problema e testar oprograma pedido.

Em ICE, os “sub-programa” e o programa são implementadoscomo funções.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 37

Page 38: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Resolução de Problemas

Enunciado

Programa

Algoritmo

ProblemaPrograma

(guardado em ficheiros)

EdiçãoInterpretação

Execução

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 38

Page 39: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Problema da Vedação – Passo 6

Comprimento do segmento (x,y) (x’,y’)

• Implementação da função:

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 39

(𝒙 − 𝒙!)𝟐+(𝒚 − 𝒚!)𝟐

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do segmento de reta definido pelospontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

Page 40: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Problema da Vedação – Passo 7 [1]

Perímetro triângulo (x1,y1) (x2,y2) (x3,y3)

• Implementação da função:

• Caso especial de teste: os três pontos são colineares.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 40

def perimetroTriang(x1, y1, x2, y2, x3, y3)""" Calcula o perimetro do triangulo definido pelosvertices (x1,y1), (x2,y2) e (x3,y3)."""lado1 = comprSegmento(x1, y1, x2, y2)lado2 = comprSegmento(x2, y2, x3, y3)lado3 = comprSegmento(x3, y3, x1, y1)return lado1 + lado2 + lado3

Page 41: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Sumário

• Resolução de problemas§ Metodologia e níveis de abstração.

§ Funções.

§ Testes unitários.

• Ficheiros com código fonte. Ciclo de vida de um programa.

• Tipos de erros. Representação de números em binário.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 41

Page 42: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Ficheiro

• Do ponto de vista lógico, um ficheiro contém uma sequênciade bits, que pode representar um texto, números, umaimagem, sons, etc.

• Um ficheiro é guardado no disco (para que a informação nãose perca quando o computador não está a funcionar) e éacessível através de um iden,ficador único (nome).

• Um ficheiro com código fonte é um ficheiro de texto comcódigo escrito pelo programador.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 42

Page 43: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Edição de um ficheiro com código fonte

Programador

quadrado.pyFicheiro

fonte (original)

do programa

Editorde texto

Programa carregado a partir do disco

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções

43

def comprSegmento( x1, y1, x2, y2) :""" Calcula o comprimento do ... pontos (x1,y1) e (x2,y2). """aux = (x1-x2)**2 + (y1-y2)**2return math.sqrt(aux)

Page 44: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

CPU

Edição do programa

Memória

Teclado Ecrã Disco

Interligação

Editor de textoExecução dasinstruções

quadrado.m

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 44

Page 45: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Interpretação e Execução de Programa

Leitura de Linha

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 45

Análise do Conteúdo

Execução das Ações

Page 46: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

In : c = comprSegmento(1,1,4,5)In : cOut: 5

Execução do programa

CPU Memória

Teclado Ecrã Disco

Interligação

InterpretadorExecução dasinstruções

quadrado.m

comprSegmento.m

perimetroTriang.m

A azul o queé escrito pelointerpretador

A vermelho o que é escritopeloprogramador11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 46

Page 47: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Sumário

• Resolução de problemas§ Metodologia e níveis de abstração

§ Funções.

§ Testes Unitários.

• Ficheiros com código fonte. Ciclo de vida de um programa.

• Tipos de erros. Representação de números em binário.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 47

Page 48: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Programa(guardado em ficheiros)

EdiçãoInterpretaçãoExecução

Erros nos programas

Erros!

sintá3cos

de execução

lógicos

numéricos

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 48

Page 49: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Tipos de Erros [1]

• Erros sintá,cos:§ quando expressões ou instruções não cumprem as regras sintáMcas

da linguagem de programação.

§ São os erros mais fáceis de corrigir.

• Exemplos:

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 49

In : 6 + * 2File "<ipython-input-16-6cd5088db287>", line 1

6+*2^

SyntaxError: invalid syntax

In : total + 1 = 2File "<ipython-input-17-19d05b472fc7>", line 1

total + 1 = 2^

SyntaxError: can't assign to operator

Page 50: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Tipos de Erros [2]

• Erros de execução:§ quando a execução do programa não pode conMnuar por qualquer

moMvo, mas nenhuma regra sintáMca foi violada.

• Exemplos:§ Avaliar uma variável que não existe.

§ Aceder a uma função definida num ficheiro que não foi importado

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 50

In : x = 3 + aTraceback (most recent call last):

File "<ipython-input-18-78e2622543de>", line 1, in <module>x = 3 + a

NameError: name 'a' is not defined In : f(4)Traceback (most recent call last):

File "<ipython-input-19-255902b873a2>", line 1, in <module>f(4)

NameError: name 'f' is not defined

Page 51: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Tipos de Erros [3]

• Erros lógicos:§ quando a execução do programa termina com sucesso (ou seja,

sem ter havido erros sintáMcos ou de execução), mas o resultadonão é o que se pretende devido a erros nos algoritmos.

• Exemplo:§ trocar os valores das variáveis x e y (que existem), com as duas

seguintes instruções:

x = yy = x

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 51

Qual é o erro?

Page 52: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Tipos de Erros [4]

• Erros numéricos:§ quando os resultados das operações aritméMcas não são exatos e

os erros (pela falta de precisão) afetam a saída do programa.

• Exemplos:

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 52

In : math.sqrt(2)**2 – 2Out: 4.440892098500626e-16 In : math.sin(math.pi)Out: 1.2246467991473532e-16

Page 53: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Erros numéricos

• Em geral, os erros numéricos devem-se à forma como osnúmeros são representados. Há problemas com:§ números muito grandes (em valor absoluto);

§ a falta de precisão (que se verifica na representação quer deracionais quer de irracionais).

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 53

Page 54: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Elementos simples de armazenamento

• Guardam informação segundo uma lógica de dois valores ou lógicabinária, e.g.§ Passa / não passa corrente elétrica§ Reflete / não reflete a luz

• Com um elemento destes podemos armazenar um bit, que é um dedois valores diferentes.§ Exemplos

« 0/1

« Verdade/Falso

• Com uma sequência de n bits, podemos armazenar um de quantosvalores diferentes?

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 54

Page 55: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Representação de informação em binário [1]

• Quantos valores diferentes podem ser representados comuma sequência de n bits?

• 2 bits :

• 22 = 4 valores dis^ntos

00011011

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 55

è 22

Page 56: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Representação de informação em binário [2]

• Quantos valores diferentes podem ser representados comuma sequência de n bits?

• 3 bits :

• 23 = 8 valores dis^ntos

000001010011100101110111

è 23

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 56

Page 57: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Representação de informação em binário [3]

• Quantos valores diferentes podem ser representados comuma sequência de n bits?

• n bits :

• 2n valores dis^ntos

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 57

Page 58: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Potências de dois

1021

42

83

164

325

646

1287

2568

5129

102410

204811

409612

819213

1638414

3276815

6553616

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções

58

10100101 165 = 5* 100

+ 6* 101

+ 1* 102

= 165

= 1* 20

+ 1* 22

+ 1* 25

+ 1* 27

= 165

Page 59: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Representação de informação em binário [4]

• 1 bit de informação – dois valores dis^ntos

• 1 byte de informação = 8 bits

28 = 256 valores dis^ntos

• 2 bytes de informação = 16 bits

216 = 65.536 valores dis^ntos

• 4 bytes de informação = 32 bits

232 = 4.294.967.296 valores dis^ntos

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 59

Page 60: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

60

Representação de inteiros

• Com n bits, podem-se representar 2n valores diferentes.

• Se representarmos números inteiros sem sinal, os valores são:de 0 a 2n – 1.

com 32 bits: de 0 a 4.294.967.295

• Se representarmos números inteiros com sinal, os valores são:de -2n-1 a 2n-1 - 1.

com 32 bits: de -2.147.483.648 a +2.147.483.647

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 60

Page 61: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

61

Operações aritmé(cas com umnúmero fixo de bits

• Se somarmos 2.147.483.647 (intmax) com 10 deveria dar

2.147.483.657,

que não é representável com 32 bits (com sinal), porque é maiordo que intmax (2.147.483.647).

• O mesmo problema ocorre quando o resultado de uma operaçãofor menor do que -2.147.483.648 (intmin)

• A aritmé^ca dos computadores reserva-nos algumas surpresas !

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 61

Page 62: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

62

Inteiros em Python

Felizmente ...

• Em Python os inteiros podem ter qualquer dimensão.

• Assim, os problemas anteriores não ocorrem.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 62

Page 63: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

63

Representação de reais [1]

• Também é feita com um número fixo de bits:§ 32 bits precisão simples; 64 bits precisão dupla.

• O valor representado é (-1)S × F × 2E

S E F

32 ou 64 bits

1 bit parao sinal S

8 ou 11 bits parao expoente E

23 ou 52 bits paraa fração F

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 63

Page 64: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Representação de reais [2]

• Não se conseguem representar números muito grandes nemnúmeros muito pequenos (em valor absoluto).§ Precisão simples: +/- 1.18 x 10 -38 a +/- 3.4 x 10 +38

§ Precisão dupla: +/- 2.23 x 10 -308 a +/- 1.80 x 10 +308

• Dois números podem ser tão próximos que a suarepresentação é igual (falta de precisão (eps)).§ Precisão simples: cerca de 7 casas decimais

§ Precisão dupla: cerca de 15 casas decimais

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 64

Page 65: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

65

Python - Erros Numéricos

• Em geral, os erros numéricos devem-se à forma como osnúmeros são representados. Há problemas com:§ números muito grandes (em valor absoluto);

§ a falta de precisão (que se verifica na representação quer de racionaisquer de irracionais) – em Python, os números reais (float) sãorepresentados em precisão dupla.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 65

In : math.piOut: 3.141592653589793In : math.eOut: 2.718281828459045 In : 0.1 + 0.2Out: 0.30000000000000004

Page 66: Informácapara as Ciênciase Engenharias Versão: D ...icec.ssdi.di.fct.unl.pt/1920/teoricas/T02/iced_t02.pdf · 11 Março 2020 ICE-D Aula 2: Python -Resolução de Problemas; Funções

Para saber Mais

• Consultar um dos livros de texto aconselhados

• Por exemplo:§ “Think Python: How to Think Like a Computer ScienMst ”:

cap. 3.

§ “IntroducMon to ComputaMon and Programming Using Python”:cap. 4.

11 Março 2020 ICE-D Aula 2: Python - Resolução de Problemas; Funções 66