View
3
Download
0
Category
Preview:
Citation preview
Informá(ca para as Ciências e EngenhariasVersão : D
(Engenharias Mecânica e Gestão Industrial)
Pedro Barahona
2019 / 20
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
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
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
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
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]
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]
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
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
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
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
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.
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
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
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.
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)
(𝑥 − 𝑥!)"+(𝑦 − 𝑦!)"𝑓(𝑥,𝑦,𝑥’,𝑦’) =
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
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.
...
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)
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)
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)
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)
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
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
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()
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
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
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
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
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
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
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
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
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
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
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
(𝑥 − 𝑥!)"+(𝑦 − 𝑦!)"
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
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
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)
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
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
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
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)
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
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
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
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
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
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
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
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?
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Recommended