Você está na página 1de 24

7/7/2010

ALGORITMO
 Método para resolver um
classe de problemas;

UFPEL ALgoritimos e Programação


 Conjunto finito de
instruções claras, que
ALGORITMOS & podem ser realizadas em
um tempo finito com
esforço finito.
PROGRAMAÇÃO
Professor: Anderson Priebe Ferrugem  Exemplifique algum
Universidade Federal de Pelotas algoritmo.
Instituto de Física, Matemática
Curso de Ciência da Computação 2
Disciplina: Algoritmos e Programação - Prática

ALGORITMO PROBLEMA

 Qualquer  Considere um grupo de


procedimento 3 canibais e 3
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

computacional bem missionários que


definido, que toma desejam atravessar
algum valor ou um rio em um bote
conjunto de valores com dois lugares.
como entrada e produz Nunca o número de
algum valor ou valores canibais deve ser
como saída. superior ao de
missionários.
3 4

1
7/7/2010

CIÊNCIA DA COMPUTAÇÃO PROGRAMA


Seqüência de instruções que especificam como
realizar uma computação.

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


5 6

LINGUAGENS DE PROGRAMAÇÃO LINGUAGENS DE PROGRAMAÇÃO

Linguagens interpretadas Linguagens compiladas


Modo interativo
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


 Modo script

7 8

2
7/7/2010

LINGUAGENS DE PROGRAMAÇÃO LINGUAGENS DE PROGRAMAÇÃO


Entrada Linguagem

de alto nível
Pascal, C, C++, Perl, Java,Python.
Matemática Linguagem de baixo nível

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


Linguagem de Máquina;
Execução Condicional

 Linguagem de Montagem (Assembly)
Repetição Procure na Internet os dois tipos de linguagens.

9 10

PYTHON
Monty Python
UFPEL ALgoritimos e Programação

PYTHON

11

3
7/7/2010

TIPOS BÁSICOS TIPO Integer


Tipo Descrição Sintaxe Tipo Descrição
Integer Número sem uma parte 42 Integer Número sem uma parte fracionária
fracionária
Long integer Número inteiro estendido 42L >>> 300 300 em decimal
42.5e-2
Float Número com uma parte 42.5 >>> 0x12c 300 em hexadecimal
fracionária.
Complex Soma de um número real
(integer ou float) e um número
38 + 4j
42j
>>> 0454 300 em octal

imaginário
String Seqüência de caracteres 'foo' "bar" """baz""" r'\n'
imutáveis.

Integers são números inteiros na faixa de -


2147483648 à 2147483647 (números de 32 bits com
sinal)

TIPO long integer FUNÇÕES MATEMÁTICAS


Similar ao tipo integer, exceto pelo fato que os Operação Resultado
valores máximos e minimos são restringidos apenas -x negativo
pela quantidade de memória que você possui. Para
diferenciar do tipo integer é acrescentado um L no +x Positivo, idem ao x sem sinal
final. x+y Soma de x e y
x-y Diferença de x e y
x*y Produto de x e y
x/y Divisão de x por y
x//y Parte inteira da divisão de x por y
x%y Resto da divisão de x por y
x**y x elevado a potência y

4
7/7/2010

COMPARADORES Expressões Booleanas


operador significado Operador Descrição Exemplo Resultado

< Menor & Operador E (And) 5&2


11&3
0
3
<= Menor ou igual | Operador Ou (Or) 5|2
11|3
7
11
> Maior Operador ou exclusivo (Xor) 5^2 7
^ 5^3 8

>= Maior ou igual

<> ou != Diferente

== Igual

Palavras reservadas ESTRUTURA DE CONTROLE


and def finally is print yield  IF
as del from import raise if condição:
assert exec for lambda return comando
break except global not try [elif condição: comando]
continue else in or while
[else:
class elif if pass with
comando]

5
7/7/2010

IF IF
if x<0:
print "negativo"
elif x==0:
print "zero"
else:
print "positivo"

ESTRUTURAS DE REPETIÇÃO ESTRUTURAS DE REPETIÇÃO


 While n,fat = 5,1
while condição: while n>1:
comando[s] fat = n*fat
[else: n = n-1
comando] print fat

6
7/7/2010

ESTRUTURAS DE REPETIÇÃO EXERCÍCIOS:


FOR 1) Considere as seguintes estruturas:
for i in range(4):
width = 17

UFPEL ALgoritimos e Programação


print “alo voce” height = 12.0
delimiter = '.'
Para cada expressão abaixo, escreva o valor resultante e
o tipo.
for i in range(4):
print i 1. width/2
2. width/2.0
3. height/3
4. 1 + 2 * 5
5. delimiter * 5
26

EXERCÍCIOS: EXERCÍCIOS:
2) O último teorema de Fermat diz que não existem 3) Crie um programa que calcule a distância
inteiros a, b e c que satisfaçam cartesiana entre dois pontos.
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

an+bn = cn
para qualquer valor de n maior que 2. Escreva um 4) A função de Ackermann A(m,n) é definidada
como:
programa que receba como entrada a,b,c,n e
averigua se Fermat estava certo. Se n for maior
que 2 e contradizer o teorema escreva “Caramba, A(m,n) = n+1 se m = 0,
Fermat estava errado”, caso contrário escreva A(m−1,1) se m > 0 e n = 0
“Caramba, Fermat está certo, você não”. O A(m−1,A(m,n−1)) se m > 0 e n > 0.
programa deve perguntar ao usuário se deseja Escreva um programa que retorne a resposta dado
continuar. as entradas feitas pelo usuário.
27 28

7
7/7/2010

Turtle World Turtle World


 thinkpython.com/swampy

Turtle World Turtle World

8
7/7/2010

Operações Exemplo
from TurtleWorld import *
Operação Resultado
fd ir para frente x passos world=TurtleWorld()
bk ir para trás x passos world.clear
rt Girar a direita x graus (default =90) john =Turtle()
lt Girar a esquerda x graus (default =90) pu(john)
pu Elevar caneta – pen up fd(john,100)
pd Baixar caneta – pen down
pd(john)
set_color Muda a cor da tartaruga
bob = Turtle()
clear Limpa o ambiente
set_color(bob,"green")
print bob,john
wait_for_user()

Turtle World Tuplas e Listas

9
7/7/2010

Seqüências Tuplas
 Strings, listas, e tuplas são Tipos de dados seqüenciais no
python.
 Uma lista ou uma tupla ao contrário do tipo string
(caracteres) pode se composta de qualquer tipo de dado,
incluindo outras tuplas ou listas.
 A diferença principal entre listas e tuples é a mutabilidade;
 EM Listas pode-se mudar, adicionar ou remover os
elementos, em uma tupla não;
 LISTAS = Linhas de texto de um arquivo;
 Tuplas coordenadas x,y,z de um ponto em um espaço
tridimensional.

Tuplas Tuplas
 Para criar um tupla com apenas um elemento é
necessário colocar vírgula

10
7/7/2010

Tuplas Tuplas
 Forma alternativa de criar tupla

Tuplas Tuplas
 Tuplas são imutáveis

 Mas podem ser substituidas por uma nova tupla.

11
7/7/2010

Tuplas LISTAS
 Listas são mutavéis

LISTAS LISTAS
 OPERADOR in

12
7/7/2010

LISTAS
 OPERADOR concatenar

LISTAS

PYTHON SEQÜÊNCIAS
Strings, listas, e tuplas são Tipos de dados
Monty Python 
seqüenciais no python.
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

 Uma lista ou uma tupla ao contrário do tipo


string (caracteres) pode se composta de qualquer
tipo de dado, incluindo outras tuplas ou listas.
 A diferença principal entre listas e tuples é a
mutabilidade;
 EM Listas pode-se mudar, adicionar ou remover
os elementos, em uma tupla não;
 LISTAS = Linhas de texto de um arquivo;

51  Tuplas coordenadas x,y,z de um ponto em um 52


espaço tridimensional.

13
7/7/2010

TUPLAS TUPLAS

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


53 54

TUPLAS TUPLAS
 Para criar um tupla com apenas um elemento é  Forma alternativa de criar tupla
necessário colocar vírgula
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

55 56

14
15
7/7/2010

UFPEL ALgoritimos e Programação UFPEL ALgoritimos e Programação


58

60
TUPLAS

UFPEL ALgoritimos e Programação UFPEL ALgoritimos e Programação

57

59
Mas podem ser substituidas por uma nova tupla.
Tuplas são imutáveis
TUPLAS

TUPLAS



16
7/7/2010

UFPEL ALgoritimos e Programação UFPEL ALgoritimos e Programação


62

64
Listas são mutavéis

OPERADOR in
LISTAS

LISTAS



UFPEL ALgoritimos e Programação UFPEL ALgoritimos e Programação

61

63
LISTAS
TUPLAS
7/7/2010

LISTAS LISTAS
 OPERADOR concatenar  OPERADOR Del (remover)

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


>>> lista = [1, 2, 3, ['ab', 'CD']]
>>> del lista [2]
>>> print lista
[1, 2, ['ab', 'CD']]
>>> del lista [2][1]
>>> lista
[1, 2, ['ab']]r)
65 66

LISTAS LISTAS
 Iniciando uma lista  Para um lista usada como vetor, com um número
 Não é possível atribuir um valor a uma posição predeterminado de elementos, é necessária inicia-

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

inexistente
 >>> vetor = [] >>> vetor = [0]*10
 >>> vetor [0] = 1 >>> vetor [0] = 3
Traceback (most recent call last): >>> vetor
File "<pyshell#2>", line 1, in <module> [3, 0, 0, 0, 0, 0, 0, 0, 0, 0]
vetor[0]=1
IndexError: list assignment index out of range

67 68

17
7/7/2010

LISTAS LISTAS
 OPERADOR none  OPERADOR len, min e max
 Usado para preencher uma posição com um valor  len (lista)- número de elementos de lista

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


“não válido”  min (lista) e max (lista) retornam o menor/maior
 Não faz parte de tipo nenhum elemento da lista
 Melhor que usar 0, [] ou uma string vazia >>> lista = [1, 2, 9, 3, 4]
>>> min(lista)
 Útil para criar uma lista “vazia” mas com um
1
número conhecido de posições.
>>> len (lista)
>>> lista = [None]*5
5
>>> lista >>> max (lista)
[None, None, None, None, None] 9
69 >>> max (['a', 'b', 'c']) 70

'c'

LISTAS LISTAS (COMPARAR)


 A função list >>> [1,2] < [2, 3]
 Converte uma string numa lista True
Lista pode ser modificada, string, não
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

>>> [1,2] < [1, 2, 3]




 Transformação inversa join True


>>> lista = list('alo') >>> [1,2] != [1,2]
>>> lista False
['a', 'l', 'o'] >>> min([[1],[2,3],[3,4],[]])
>>> lista[1]='xx‘ []
>>> lista >>> max([[1],[2,3],[3,4],[]])
['a', 'xx', 'o'] [3, 4]
>>> ''.join(lista) >>> min(0,[],"")
'axxo' 71 0 >>> max(0,[],"") 72

''

18
7/7/2010

LISTAS (COMPARAR) EXERCÍCIOS


 Listas são comparadas lexicograficamente  Construa um programa que calcule o número de
 Se duas listas são iguais até o késimos elementos, o resultado sextas –feiras 13 ocorreram desde o seu
da comparação depende da comparação entre os nascimento até o dia de hoje. Armazene as datas

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


(k+1)ésimos elementos
em uma lista e depois imprima na tela.
 Se alguma das listas possui menos elementos, então esta é
a menor
 Duas listas são iguais se e somente possuem o mesmo
comprimento e todos os elementos de mesma posição são
iguais.
 Uma lista é maior que um número mas menor que uma
string

73 74

MATRIZES MATRIZES

Matrizes podem ser construídas a partir de listas Não criar matriz desta forma:
podem ser usadas para guardar matrizes y = [[1]*3]*3
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

Exemplo:
matriz 3x3 com valor null GERA ERRO !!!
m=[]
for i in range(3): Exemplo
m.append([None]*3) >>> y[1][1]=0
>>> print y
[[1, 0, 1], [1, 0, 1], [1, 0, 1]]
75 76

19
7/7/2010

MATRIZES MATRIZES

ERROS  NumPy
>>> y=[[0]*3]*3  NumPy é um pacote que inclui:

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


[[0, 0, 0], [0, 0, 0], [0, 0, 0]] Classe array.
>>> y[1][1]=6 Classe matrix.
[[0, 6, 0], [0, 6, 0], [0, 6, 0]] Funções auxiliares.
>>> y[1][2]=3
[[0, 6, 3], [0, 6, 3], [0, 6, 3]]
>>> y[0][2]=4
[[0, 6, 4], [0, 6, 4], [0, 6, 4]]
77 78

MATRIZES EXERCÍCIO
 Usando a biblioteca numpy para criar uma  Escreva um programa:
matriz  Que compute o triângulo de Pascal até a linha n l(valor
 import numpy inteiro e positivo ), fornecido pelo usuário.
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

O elemento na iésima linha e jésima coluna do triângulo de


 print 'Criando uma matriz a partir de uma

Pascal contém o número de combinações de i elementos j a j
lista:' O triângulo deve ser posto numa lista onde o iésimo
 l = [[3,4,5], [6, 7, 8], [9, 0, 1]] elemento é uma lista com a iésima linha do triângulo
 Z = numpy.matrix(l)  Ex:
Quantas linhas? 7
 print Z


 [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4,


 # [[3 4 5]
 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15,
 # [6 7 8]
 20, 15, 6, 1]
 # [9 0 1]] 79 80

20
7/7/2010

EXERCÍCIO EXERCÍCIO
Ex: Ex:
Número de linhas: 7

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4,
6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15,
20, 15, 6, 1]

81 82

FUNÇÕES FUNÇÕES
 É uma seqüência rotulada de estruturas que  Modulos-bibliotecas de funções
desempenham uma computação.  Math, numpy
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

 É composta >>> import math


 Nome >>> print math
 Estrutura.
<module 'math' from '/usr/lib/python2.5/lib-
dynload/math.so'>
 Chamada de função usando notação por ponto.

>>> ratio = signal_power / noise_power


>>> decibels = 10 * math.log10(ratio)
>>> radians = 0.7
83 84
>>> height = math.sin(radians)

21
7/7/2010

FUNÇÕES FUNÇÕES
Chamada de função usando notação por ponto.  def refrao():
>>> ratio = signal_power / noise_power print “ Marcha soldado."

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


>>> decibels = 10 * math.log10(ratio) print “ cabeça de papel."
>>> radians = 0.7  def é a palavra chave que indica a criação de uma

>>> height = math.sin(radians) função.


 O nome da função segue as mesmas regras dos
nomes de variáveis. Evite usar nome de variáveis
iguais ao de funções.
 Os parênteses vazios indicam que a função não
possui argumentos.
85 86

FUNÇÕES FUNÇÕES
>>> print refrao  >>> refrao()

<function refrao at 0xb7e99e9c> Marcha soldado.


UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

>>> print type(refrao) cabeça de papel.


<type 'function'>
 Funções aninhadas

def repete_refrao():
refrao()
refrao()
87 88

22
7/7/2010

FUNÇÕES – PARÂMETROS E ARGUMENTOS FUNÇÕES


 Dentro de uma função, os argumentos são def func(parametro1, parametro2=padrao):
associados à variáveis chamados parâmetros. """Doc String """

UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação


<bloco de código>
def repete(joao): return valor O
print joao
print joao

>>> repete('Spam')

89 90

FUNÇÕES - RECURSÃO EXERCÍCIOS


 # Fatorial implementado de forma recursiva  Faça um programa, com uma função que
necessite de três argumentos, e que forneça a
soma desses três argumentos.
UFPEL ALgoritimos e Programação

UFPEL ALgoritimos e Programação

def fatorial(num):
 Faça um programa, com uma função que
if num <= 1:
necessite de um argumento. A função retorna o
return 1 valor de caractere ‘P’, se seu argumento for
else: positivo, e ‘N’, se seu argumento for zero ou
return(num * fatorial(num – 1)) negativo.
 Reverso do número. Faça uma função que
retorne o reverso de um número inteiro
informado. Por exemplo: 127 -> 721.
 print fatorial(10) 91 92

23
7/7/2010

EXERCÍCIOS
 Data com mês por extenso. Construa uma
função que receba uma data no formato
DD/MM/AAAA e devolva uma string no formato

UFPEL ALgoritimos e Programação


D de mesPorExtenso de AAAA. Opcionalmente,
valide a data e retorne NULL caso a data seja
inválida.
 Construa uma função recursiva para calcular o
enésimo elemento da serie de fibonacci.

93

24