A sequência de passos que o programa efectua quando executa esta função é o seguinte:

Tamanho: px
Começar a partir da página:

Download "A sequência de passos que o programa efectua quando executa esta função é o seguinte:"

Transcrição

1 Funções: Recursão A sequência de passos que o programa efectua quando executa esta função é o seguinte: fact(3) -> 3*fact(2) (reserva memória no stack) fact(2) -> 2*fact(1) (reserva memória no stack) fact(1) -> 1 volta para trás: fact(2) <- 2*1 fact(3) <- 3*2*1 = 6 Computadores e Programação p.171

2 Funções: Recursão A definição de funções de forma recursiva é expressiva, mas a sua execução (em termos de tempo de cálculo e, nalguns casos, de gasto de memória intermédia stack) pode ser dispendiosa. Há contudo algoritmos que podem ser expressos de forma muita simples recursivamente e que, expressos de outra forma são muito complicados. Há também muitos casos em que o tempo de execução da forma recursiva de uma função não lhe é desfavorável... Computadores e Programação p.172

3 Funções: Processamento genérico de argumentos É por vezes desejável escrever funções que possam aceitar um número variável de argumentos. Para o efeito, os símbolos *args e **keyw utilizados como argumentos de uma função (na sua definição ou chamada) significam um número arbitrário de argumentos posicionais (*args) e de argumentos com valor por defeito (**keyw). No primeiro caso args é uma lista que contém os argumentos posicionais e no segundo keyw um dicionário contendo os argumentos e os valores por omissão. Computadores e Programação p.173

4 Funções: Processamento genérico de argumentos >>> def union(*args): >>> res = [] >>> for seq in args: >>> for x in seq: >>> if not x in res: >>> res.append(x) >>> return res >>> >>> a = [1,2,3]; b =[2,7,8]; c =[0,3] >>> print union(a,b,c) >>> [1, 2, 3, 7, 8, 0] >>> L = [a,b,c] >>> print union(*l) >>> [1, 2, 3, 7, 8, 0] Computadores e Programação p.174

5 Programação funcional O que é a programação funcional? A programação funcional é um estilo de programação que dá uma ênfase especial à utilização de funções. Numa linguagem de programação puramente funcional, qualquer instrução é uma função pura e um programa é uma sequência de funções puras. Computadores e Programação p.175

6 Programação funcional Uma função pura é uma função que não altera o valor dos seus argumentos. Nota: em Python as funções não são necessariamente puras uma vez que um objecto mutável passado como argumento de uma função pode ser alterado no interior da função. Função pura: def square(x): return x*x Função impura: def sort(l): L.sort() Computadores e Programação p.176

7 Programação funcional Tal como nas linguagens de programação funcional, em Python as funções são objectos de primeira categoria, o que significa que podem ser passados como argumentos de funções e serem devolvidos por funções. Também, como qualquer outro tipo de objecto, as funções podem ser armazenadas em tuplas, listas ou dicionários. Exemplo: import math ftrig = (math.sin,math.cos,math.tan) for f in ftrig: print f(math.pi) Computadores e Programação p.177

8 Programação funcional: Linguagens O LISP = LISt Processor, que é uma das linguagens de programação mais antigas é uma linguagem de programação funcional. Um programa em LISP é um conjunto de funções que operam sobre listas. O LISP, ou algum dos seus derivados, são bastante usados em alguns domínios específicos da computação, por ex. em Inteligência Artificial. Linguagens funcionais descendentes do LISP: Haskell Scheme Erlang (desenvolvido pela Eriksson, telemóveis) Computadores e Programação p.178

9 Programação funcional Grande parte da teoria da computação está descrita no paradigma da programação funcional. Existem mais artigos teóricos sobre computação formulados em LISP do que em C ou em qualquer outra linguagem! Vantagens da programação funcional: Elegância formal Segurança (elimina os efeitos laterais ) Desvantagens: ineficiência (em termos de rapidez de computação), código hermético. Computadores e Programação p.179

10 Programação funcional: Ferramentas A linguagem de programação Python possui algumas ferramentas de programacão funcional, correspondentes a cinco funções pré-definidas: filter map reduce lambda apply Utilizando estas ferramentas e algumas das características intrínsecas do Python, em particular a avaliação em curto-circuito de expressões lógicas, é possível escrever programas no estilo funcional. Mesmo quando esse não é o objectivo, as ferramentas de programação funcional do Python revelam-se muito úteis em vários contextos. Computadores e Programação p.180

11 Programação funcional: filter A função pré-definida filter tem a sintaxe filter(f, L) onde f é uma função e L uma sequência (tupla, lista ou cadeia de caracteres). A função filter devolve um valor que é uma sequência que contem todos os elementos de L para os quais o resultado da aplicação da função f tem o valor lógico verdadeiro. No caso de f ser None, filter devolve uma lista com todos os elementos de L que têm o valor lógico verdadeiro. Computadores e Programação p.181

12 Programação funcional: filter Exemplo 1: >>> numbers = range(8) >>> def even(x): >>> return x % 2 == 0 >>> print filter(even,numbers) >>> [0, 2, 4, 6] Exemplo 2: >> bag = [ a,2,0,[], ] >> newbag = filter(none,bag) >> print bag >> [ a, 2, 0, [], ] >> print newbag >> [ a, 2] Computadores e Programação p.182

13 Programação funcional: map A função pré-definida map tem a sintaxe map(f, L1, L2,...) onde f é uma função e L1, L2,... são uma ou mais sequências. O resultado desta função é uma lista contendo os objectos resultantes da aplicação de f à (às) lista(listas). Se existirem n listas, f deverá ser uma função de n argumentos. Se f for None, a lista devolvida é uma lista dos elementos de L1, ou no caso de haver mais do que uma lista, devolve uma lista de tuplas, cada tupla contendo um elemento de cada sequência. No caso de as listas não terem todas o mesmo número de elementos, os elementos em falta nas listas mais pequenas são substituídos por None. Computadores e Programação p.183

14 Programação funcional: map Exemplo 1: >>> city = Coimbra >>> print map(none,city) >>> [ C, o, i, m, b, r, a ] Exemplo 2: >> x = [1,2,3] >> y = [4,5,6] >> def mul(x,y): return x*y >> z = map(mul,x,y) >> print z >> [4,10,18] Computadores e Programação p.184

15 Programação funcional: reduce A função pré-definida reduce tem a sintaxe reduce(f, L, <default>). Esta instrução devolve um valor que é o resultado da aplicação de uma função binária a uma sequência L, de acordo com o esquema seguinte: f(l[0],l[1]) -> x; f(x,l[2]) -> x;... f(x,l[-1]) -> retorno Exemplo: >> def add(x,y): >> return x+y >> print reduce(add,range(0,5)) # >> 10 Computadores e Programação p.185

16 Programação funcional: reduce Nota: pode ser passado a reduce um terceiro parâmetro, opcional, que é o valor devolvido por defeito no caso de a sequência se encontrar vazia. Exemplo: >> print reduce(add,range(0,5)) >> 10 >> print reduce(add,[]) >> Type error: reduce of empty sequence. >> print reduce(add,[],0) >> 0 Computadores e Programação p.186

17 Programação funcional: expressões lambda É possível definir uma função da seguinte forma f = lambda x: x**2 Na realidade, lambda tem o valor sintáctico de uma expressão que devolve um objecto do tipo função à qual pode ser atribuído (opcionalmente) um nome. Muitas vezes o objecto devolvido pela expressão lambda permanece anónimo. Computadores e Programação p.187

18 Programação funcional: expressões lambda Exemplo (calcular a soma dos números da lista L): def add(x,y): return x+y print reduce(add, L) ou, utilizando a expressão lambda, add = lambda x,y: x+y print reduce(add, L) ou ainda (numa só linha!) print reduce(lambda x,y: x+y, L) Computadores e Programação p.188

19 Programação funcional: expressões lambda Note-se que NÃO é permitido escrever (porquê?): print reduce(def add(x,y): return x+y: x+y, L) Sintacticamente uma expressão lambda tem a forma: lambda args: expr onde args são os argumentos da função (separados por vírgulas) e expr uma expressão que define a função. Computadores e Programação p.189

20 Programação funcional: expressões lambda Vantagens e desvantagens do uso de lambda: Pode ser utilizada em situações onde sintacticamente é exigida uma expressão (+) Uma função anónima é usada onde é preciso e de seguida descartada, não ficando a poluir o espaço dos nomes (+) Está restringida a funções simples (é uma expressão!), pelo que não se podem incluir na definição da função estruturas de controle (if, for, while... ) ( ). Na maior parte dos casos a utlização de lambda em vez de def é uma pura questão de estilo. A utilização de lambda permite escrever programas mais compactos, mas também se pode argumentar que ficam menos legíveis! Computadores e Programação p.190

21 Programação funcional: expressões lambda Que fazem as funções criadas pelas seguintes expressões lambda? lambda a,b: not b and a or gcd(b, a % b) lambda L: reduce(lambda a,b: gcd(a,b), L) lambda x,y: (x < y and [x] or [y])[0] E o que fará a função definida por esta expressão? lambda n: map(lambda x,f=lambda x,f:(x<=1)\ or (f(x-1,f)+f(x-2,f)):f(x,f),range(n)) Who ordered the spanish inquisition? Computadores e Programação p.191

22 Abrangências de listas Existe uma forma simples de criar listas sem recorrer às ferramentas de programação funcional e que pode emular algumas das funções de map, filter e/ou lambda. Trata-se das abrangências de listas, que são listas criadas por expressões contendo uma instrução for, eventualmente seguida de uma ou mais instruções for ou if. Computadores e Programação p.192

23 Abrangências de listas: exemplos >>> names = [ ana matos, pedro santos ] >>> [name.title() for name in names] [ Ana Matos, Pedro Santos ] >>> vec = [2, 4, 6] >>> [3*x for x in vec] [6, 12, 18] >>> [3*x for x in vec if x > 3] [12, 18] >>> [3*x for x in vec if x < 2] [] >>> [[x,x**2] for x in vec] [[2, 4], [4, 16], [6, 36]] Computadores e Programação p.193

24 Abrangências de listas: exemplos >>> [x, x**2 for x in vec] # error:() required File "<stdin>", line 1, in? [x, x**2 for x in vec] ˆ SyntaxError: invalid syntax >>> [(x, x**2) for x in vec] [(2, 4), (4, 16), (6, 36)] >>> vec1 = [2, 4, 6] >>> vec2 = [4, 3, -9] >>> [x*y for x in vec1 for y in vec2] [8, 6, -18, 16, 12, -36, 24, 18, -54] >>> [x+y for x in vec1 for y in vec2] [6, 5, -7, 8, 7, -5, 10, 9, -3] Computadores e Programação p.194

25 Abrangências de listas: exemplos >>> [vec1[i]*vec2[i] for i in range(len(vec1))] [8, 12, -54] >>> n = >>> [int(i) for i in str(n)] [1, 2, 3, 4, 5, 6] >>> sum([int(i) for i in str(n)]) 21 >>> hexa = [ AF, 12CF ] >>> [int(n,16) for n in hexa] [175, 4815] >>> message = Hello, world. What a nice day! >>> [word.strip(,.?! ) \ for word in message.split()] [ Hello, world, What, a, nice, day ] Computadores e Programação p.195

26 Abrangências vs. programação funcional Suponhamos que pretendíamos criar uma lista com o quadrado de todos os números inteiros pares inferiores a 10. Utilizando abrangências, >>>L = [x**2 for x in range(10) if x % 2 == 0] Utilizando as ferramentas de programação funcional, >>>L = map(lambda x: x*x,\ >>> filter(lambda x: x % 2 == 0,range(10)) Qual das duas instruções é mais clara? Sem dúvida, a abrangência é mais legível! No entanto, os dois pedaços de código não são equivalentes, embora produzam correctamente a mesma lista de números: [0, 4, 16, 36, 64]. Computadores e Programação p.196

27 Abrangências vs. programação funcional Exemplo: >>>x = 123 >>>L = [x**2 for x in range(10) if x % 2 == 0] >>>print L,x [0, 4, 16, 36, 64] 9 >>>x = 123 >>>L = map(lambda x: x*x,\ >>> filter(lambda x: x % 2 == 0,range(10)) >>>print L,x [0, 4, 16, 36, 64] 123 Computadores e Programação p.197

28 Abrangências vs. programação funcional O valor de x foi alterado no primeiro caso, como efeito lateral do cálculo da abrangência o que pode ser perigoso, se não estivermos a contar com este comportamento! As ferramentas de programação funcional não têm efeitos laterais, pelo que a variável x é apenas e efectivamente uma variável auxiliar, cuja existência não colide com a de outra variável com o mesmo nome no exterior da função. Computadores e Programação p.198

29 Programação funcional Na tentativa de eliminar os efeitos laterais, as linguagens funcionais puras traduzem as estruturas de controle habituais (if, for, while) por funções. Vejamos um exemplo em Python. O pedaço de código seguinte >>>if x < 0: >>> print "Negative number" >>>else: >>> print math.sqrt(x) >>> >>>print x(2),x(-1) tem a seguinte transcrição funcional: >>>sqroot = lambda x: x<0 and "Negative number"\ >>> or math.sqrt(x) >>>print sqroot(2),sqroot(-1) Computadores e Programação p.199

30 Módulos Cada ficheiro de um programa python é um módulo com um espaço de nomes próprio. Este nomes podem ser importados para o espaço dos nomes de outro programa através da instrução import que tem duas variantes sintáticas: import module e from module import obj No primeiro caso todos os objectos definidos no módulo ficam disponíveis por qualificação do nome do módulo; no segundo, o objecto importado fica disponível através da simples invocação do seu nome. Exemplo: >>>import math >>>print math.cos(math.pi) ou >>>from math import cos >>>print cos(pi) Computadores e Programação p.200

31 Módulos Para importar todos os objectos definidos num módulo podemos escrever from module import *. Existe ainda a possibilidade de importar um objecto definido num módulo criando um nome alternativo no espaço dos nomes local: from module import name1 as name2. Exemplo: >>>from math import cos as coseno >>>from math import pi >>> >>>print coseno(pi) Esta opção é útil quando a função a importar tem o mesmo nome de uma outra já definida no programa importador. Para evitar poluir o espaço dos nomes, a forma from module import * deve ser evitada. Computadores e Programação p.201

32 Módulos Cada módulo tem um nome, acessível através do identificador reservado name. O módulo do programa principal tem o nome especial main. É vulgar encontrar a construção: >>>if name == " main ": >>> instructions >>>... As instruções do bloco if só são processadas quando o ficheiro é executado como programa principal; quando é importado como um módulo são ignoradas, permanecendo invisíveis ao programa importador. Computadores e Programação p.202

33 Módulos Vantagens da utilização de módulos: Reutilização de código Partição do espaço dos nomes Partilha de funções e estruturas de dados entre vários componentes de um programa A característica modular do Python é particularmente apreciada em grandes projectos de software, tendo sido inspirada na linguagem de programação MODULA, um sucessor do PASCAL. Computadores e Programação p.203

34 Classes Todos os tipos de dados são objectos em Python. É o facto de um objecto saber o que é e que funções se lhe podem aplicar que confere robustez ao Python e o torna tão simples. É possível adicionar classes de objectos à linguagem através da instrução class. Por exemplo, para criar uma classe de vectores: >>> class Vec:... def init (self,x,y,z):... self.x=x... self.y=y... self.z=z... def norm(self):... return (self.x**2+self.y**2+self.z**2)**0.5 Computadores e Programação p.204

35 Classes A instrução class apenas define a classe, não cria nenhum objecto. Para criar um objecto do tipo Vec (em terminologia de programação orientada por objectos, diz-se criar uma instância da classe) invoca-se a classe como se de uma função se tratasse: >>> u=vec(1,1,1) Neste exemplo, u será uma instância da classe Vec: >>> type(u) <type instance > >>> type(vec) <type classobj > Computadores e Programação p.205

36 Classes A função definida no interior da classe (designa-se por método da classe) é uma função especial (usa o nome especial init ) que dá valores iniciais aos atributos do objecto (x, y e z, neste caso). O seu primeiro argumento (self) representa a própria instância da classe e é sempre omitido quando se invoca um método. Uma classe é um espaço de nomes, tal como um módulo. Os métodos são invocados qualificando o objecto (objecto.metodo()) >>> u.x 1 >>> u.norm() >>> Vec.norm(u) Computadores e Programação p.206

37 Classes Ao contrário dos módulos, é possível adicionar nomes a uma classe. Para tal basta fazer uma atribuição: >>> dir(u) [ doc, init, module, x, y, z ] >>> u.novo_atributo=100 >>> dir(u) [ doc, init, module, novo_atributo, \ x, y, z ] >>> u.novo_atributo 100 Embora as classes e os módulos sejam ambos espaços de nomes, são estruturas bastante diferentes: as classes são fábricas de objectos que herdam propriedades umas das outras e permitem fazer a sobrecarga de operadores. Computadores e Programação p.207

38 Classes Podem-se definir subclasses de uma classe existente. Neste caso a subclasse herda todos os atributos e métodos da classe mãe: >>> class UnitVec(Vec):... def init (self,x,y,z): Vec. init (self,x,y,z) n = self.norm() self.x = x/n self.y = y/n self.z = z/n >>> v=unitvec(3,1,2) >>> dir(v) [ doc, init, module, norm, \ x, y, z ] >>> v.x >>> v.norm() 1.0 Computadores e Programação p.208

39 Classes Há um conjunto de nomes especiais para os métodos que permite fazer a sobrecarga de operadores. Por exemplo, se se definir um método usando o nome especial or esse método passa a poder ser invocado usando o operador : Computadores e Programação p.209

40 Classes >>> class Vec:... (...)... def prod(self,other):... return Vec(self.y*other.z-self.z*other.y,\... self.z*other.x-self.x*other.z,\... self.x*other.y-self.y*other.x)... def or (self,other):... return self.prod(other)... >>> u=vec(1,0,0) >>> v=vec(0,1,0) >>> a=u.prod(v) >>> print a.x, a.y, a.z >>> b=u v >>> print b.x, b.y, b.z Computadores e Programação p.210

41 Classes Alguns nomes especiais para sobrecarga de operadores: init, del, add, or, repr, len, cmp, etc. Resumindo: as classes permitem incorporar numa estrutura única os atributos de um objecto e as funções que é possível efectuar sobre esse objecto. A herança é um mecanismo que permite definir subclasses especializadas que herdam todos os atributos e métodos da classe mãe. As subclasses podem conter novos métodos ou versões diferentes dos métodos da classe mãe. As interfaces gráficas são construídas com classes... Computadores e Programação p.211

42 Ferramentas de introspecção: metaprogramação Os objectos definidos num módulo podem ser listados com a instrução dir(module), tal como os atributos de qualquer objecto podem ser listados com dir(obj). O tipo e endereço de um objecto na memória são dados pelas funções type(obj) e id(obj). O Python possui várias outras ferramentes de introspecção, mas uma das mais importantes é o atributo doc de cada objecto, que é suposto conter uma sequência de caracteres com uma descrição sumária do objecto a string de documentação, ou doc string. Os módulos, funções e classes definidas pelo utilizador devem também ser documentadas com uma doc string. Computadores e Programação p.212

43 Ferramentas de introspecção: metaprogramação As strings de documentação são colocadas no início dos módulos e imediatamente a seguir à instrução de definição das funções e classes. Exemplo: >>>def gcd(a,b): >>> """ >>> Greatest common divider between a and b. >>> Uses Euclide s algorithm. >>> """ >>> while b: >>> a,b = b, a % b >>> return a >>> >>>print gcd. doc >>> Greatest common divider between a and b. >>> Uses Euclide s algorithm. Computadores e Programação p.213

44 Iteradores As sequências, os dicionários e os ficheiros são objectos iteráveis, aos quais é possível aceder, elemento a elemento, utilizando uma sintaxe comum: for x in obj: print x A instrução for x in obj chama a função iter(obj) que cria um iterador para o objecto obj. Cada um dos elementos é obtido chamando it.next() onde it é o iterador do objecto. Quando se esgotam os elementos do objecto é levantada uma excepção que indica ao ciclo for o fim da iteração. Computadores e Programação p.214

45 Iteradores >>> it = iter( abc ) >>> it <iterator object at 0x00A1DB50> >>> it.next() a >>> it.next() b >>> it.next() c >>> it.next() Traceback (most recent call last): File "<pyshell#6>", line 1, in -toplevelit.next() StopIteration Computadores e Programação p.215

46 Iteradores É muito fácil tornar uma classe de objectos iterável. Basta para isso que a classe defina o método iter que deverá devolver um objecto (o iterador) que por sua vez deverá definir o método next. Se next for definido na própria classe, basta ao método iter devolver a instância (self ). Computadores e Programação p.216

47 Iteradores >>> class Reverse: "Iterator for looping a sequence backwards" def init (self, data): self.data = data self.index = len(data) def iter (self): return self def next(self): if self.index == 0: raise StopIteration self.index = self.index - 1 return self.data[self.index] >>> for char in Reverse( spam ): print char m a p s Computadores e Programação p.217

48 Geradores Um gerador é qualquer função que contenha a palavra chave yield, utilizada para devolver valores à semelhança de return. Estas funções especiais implementam automaticamente o método next(). Quando se chama next() a função retoma a execução na instrução que se segue a yield (o gerador lembra-se exactamente do ponto onde saiu e dos valores de todas as variáveis locais). Computadores e Programação p.218

49 Geradores >>> def reverse(data): for index in range(len(data)-1, -1, -1): yield data[index] >>> g = reverse((1,2,3)) >>> g.next() >>> 3 >>> g.next() >>> 2 >>> g.next() >>> 1 >>> g.next() Traceback (most recent call last): File "<stdin>", line 1, in?: StopIteration >>> for char in reverse( abc ): print char c b a Computadores e Programação p.219

50 Geradores Na maioria dos casos os geradores são a forma mais simples de implementar um iterador. Os geradores guardam memória das variáveis locais e do estado de execução entre as chamadas da função. Esta característica fundamental, podendo também ser útil noutras situações, simplifica muito a escrita de um iterador! Um gerador invoca automaticamente a excepção StopIteration que assinala o fim da iteração. O conceito de gerador é central na definição de alguma linguagens de programação como o Icon. Iteradores e geradores são ferramentas poderosas do Python inspiradas nesta linguagem. Computadores e Programação p.220

51 Geradores Geradores recursivos são muitas vezes utilizados para a resolução de problemas de Inteligência Artificial. Alguns problemas de enunciado simples, mas que desafiam resolução analítica, podem ser resolvidos por computador usando algoritmos simples, mas eficazes, baseados nestas ferramentas. Alguns exemplos clássicos (problemas de xadrez): Problema das oito raínhas Problema da volta do cavalo Computadores e Programação p.221

52 Excepções Os erros de sintaxe são normalmente detectados pelo compilador na fase de conversão do programa para bytecode ou na fase de depuração do programa. Contudo, existe um outro tipo de erros que podem manifestar-se na execução do programa mesmo quando este é sintacticamente correcto. A este tipo de erros damos o nome de excepções. Alguns exemplos de acções que quando intentadas no decorrer de um programa dão origem a uma excepção: Dividir um número por zero. Aceder a um elemento inexistente de uma lista. Abrir um ficheiro inexistente. Converter num número uma string que não representa um número. Iterar um objecto não iterável.... Computadores e Programação p.222

53 Excepções O interpretador de Python detecta a ocorrência de excepções, dando ao programa a oportunidade de corrigir o erro. Assim, podemos escrever programas robustos que não "estouram"mesmo quando ocorrem situações... excepcionais. As excepções são objectos do tipo classe. Quando ocorre uma excepção, é instanciada a classe que define a excepção. Esta operação é detectada pelo interpretador, havendo a possibilidade de processar a excepção com a instrução try...except. Se o programa não tratar a excepção, o interpretador abortará o programa com uma mensagem de erro. Computadores e Programação p.223

54 Excepções Sintaxe da instrução try...except: try:... except <ExceptionClass>:... <else>:... <finally>:... As cláusulas else e finally são opcionais. O bloco de código indentado por else é executado se e só se não ocorrer a excepção. O bloco de código indentado por finally é sempre executado, quer tenha ocorrido, ou não, uma excepção. O nome da excepção que se pretende apanhar e processar também é opcional. Se não for indicado, todas as excepções serão apanhadas. Computadores e Programação p.224

55 Excepções A cláusula except pode ainda tomar as seguintes formas: except (ExceptionClass1, ExceptionClass2,..) except ExceptionClass, instance No primeiro caso (notar os parêntesis obrigatórios) serão apanhadas todas as excepções enumeradas na tupla. No segundo caso, é passada uma instância da classe que pode conter informação adicional sobre a excepção (ver adiante). Nalguns casos, é útil que o próprio código levante explicitamente excepções, utilizando a instrução raise ExceptionClass. Computadores e Programação p.225

56 Excepções Vejamos um exemplo do uso da excepção pré-definida IndexError que é accionada quando se tenta aceder a um elemento de uma sequência com um índice inexistente: def getn(l,n): print L[n] L = [ a, b, c ] while 1: try: n = input( Item? ) getn(l,n) except IndexError: print "Bad index. Try again." else: break Computadores e Programação p.226

57 Hierarquia das excepções pré-definidas Exception +-- SystemExit +-- StopIteration +-- StandardError +-- KeyboardInterrupt +-- ImportError +-- EnvironmentError +-- IOError +-- OSError +-- WindowsError +-- EOFError +-- RuntimeError +-- NotImplementedError +-- NameError +-- UnboundLocalError Computadores e Programação p.227

58 Hierarquia das excepções pré-definidas +-- AttributeError +-- SyntaxError +-- IndentationError +-- TabError +-- TypeError +-- AssertionError +-- LookupError +-- IndexError +-- KeyError +-- ArithmeticError +-- OverflowError +-- ZeroDivisionError +-- FloatingPointError +-- ValueError +-- UnicodeError +-- UnicodeEncodeError +-- UnicodeDecodeError +-- UnicodeTranslateError Computadores e Programação p.228

59 Hierarquia das excepções pré-definidas +-- ReferenceError +-- SystemError +-- MemoryError +---Warning +-- UserWarning +-- DeprecationWarning +-- PendingDeprecationWarning +-- SyntaxWarning +-- OverflowWarning +-- RuntimeWarning +-- FutureWarning Computadores e Programação p.229

60 Hierarquia das excepções pré-definidas Verifica-se que IndexError é uma subclasse de LookupError que por sua vez é uma subclasse de StandardError que deriva da classe mãe Exception. De acordo com a hierarquia das excepções, a instrução: try:... except LookupError... irá apanhar os erros de indexação (de sequências) e os erros de chave inexistente num dicionário. Computadores e Programação p.230

61 Hierarquia das excepções pré-definidas Se quisermos apanhar exclusivamente os erros de indexação, try:... except IndexError... As excepções não servem apenas para assinalar e processar erros. Por vezes, são utilizadas para notificar eventos ou para assinalar situações excepcionais que exijam uma atenção especial e acção imediata. def search(word,file): for line in file: if word in line: raise ItemFound try: search( pyhton,myfile) except ItemFound: print "Item found." Computadores e Programação p.231

62 Excepções definidas pelo programador É muito fácil definir novas excepções. As excepções são classes que herdam da classe mãe Exception. Assim, para criar a nova excepção MyException basta criar esta nova classe e invocá-la com a instrução raise: class MyException(Exception): pass try:... except: raise MyException Computadores e Programação p.232

63 Excepções definidas pelo programador É possível criar excepções mais sofisticadas. Vamos dar como exemplo a criação de uma excepção NonPositiveNumber como guardião do cálculo de raízes quadradas. O próprio número faltoso e uma mensagem de erro são guardadas nas instâncias da classe (cada vez que é criada uma excepção a classe é instanciada). Computadores e Programação p.233

64 Excepções definidas pelo programador class NonPositiveNumber(Exception): def init (self,x): self.x = x self.mesg = "is negative!" def my_sqrt(x): from math import sqrt if x <0 : raise NonPositiveNumber(x) return sqrt(x) while 1: try: x = input("number? ") print my_sqrt(x) except NonPositiveNumber, error: print "Bad value: ", error.x, error.mesg except EOFError: break Computadores e Programação p.234

65 Excepções definidas pelo programador Neste exemplo, error é a instância da classe NonPositiveNumber criada quando é levantada a excepção. O nome escolhido para a instância é arbitrário. Para aceder a essa instância basta utilizar a sintaxe: except ExceptionClass, instance em lugar da forma mais simples e vulgar: except ExceptionClass A excepção EOFError é utilizada para detectar o fim do input de um ficheiro. Quando os dados estão a ser inseridos pelo teclado, o fim dos input é habitualmente assinalado premindo a combinação de teclas (CTRL+d) que levanta a referida excepção. Computadores e Programação p.235

66 Depuração de código Uma maneira simples de efectuar testes para potenciais situações de erro no interior de um programa consiste na utlização da instrução assert, que tem a seguinte sintaxe: assert <test>, <message> e que equivale a: if not test: raise AssertionError, message Computadores e Programação p.236

67 Depuração de código Um exemplo simples de utilização: def days_of_month(month): assert 1 < month < 12, \ "Error: month must be "... Os testes assert são muito úteis quando se procede ao depuramento de código (debug. As mensagens de erro incluem automaticamente alguma informação sobre a parte do código que desencadeou a excepção. Estes testes não serão efectuados, acelerando a execução de um programa já depurado, quando se invoca o interpretador de python com a opção -O: > python -O myprog.py. Computadores e Programação p.237

68 Ficheiros Os ficheiros permitem guardar objectos de forma permanente. O Python tem um conjunto rico de instruções para manipular ficheiros. Um objecto do tipo ficheiro é criado com a instrução open: f = open(filename,mode) onde filename é o nome do ficheiro (ex. report.txt ), e mode uma das alternativas r, w, a, r+ que significam abertura para leitura, escrita, continuação (append) e leitura e escrita. Um ficheiro é um objecto iterável onde o iterador devolve, em sequência, cada linha do ficheiro. Computadores e Programação p.238

1 Ficheiros 1 1.1 Métodos sobre ficheiros... 2 1.2 Ficheiros de texto vs. binários... 3 1.3 Procurar ocorrências de uma palavra...

1 Ficheiros 1 1.1 Métodos sobre ficheiros... 2 1.2 Ficheiros de texto vs. binários... 3 1.3 Procurar ocorrências de uma palavra... Nesta aula... Conteúdo 1 Ficheiros 1 1.1 Métodos sobre ficheiros......................... 2 1.2 Ficheiros de texto vs. binários..................... 3 1.3 Procurar ocorrências de uma palavra..................

Leia mais

Linguagens de programação

Linguagens de programação Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s

Leia mais

1 Detecção e correcção de erros 1 1.1 Erros sintáticos... 1 1.2 Erros de execução... 2 1.3 Erros semânticos... 5 1.4 Erros semânticos...

1 Detecção e correcção de erros 1 1.1 Erros sintáticos... 1 1.2 Erros de execução... 2 1.3 Erros semânticos... 5 1.4 Erros semânticos... Nesta aula... Conteúdo 1 Detecção e correcção de erros 1 1.1 Erros sintáticos............................. 1 1.2 Erros de execução............................ 2 1.3 Erros semânticos............................

Leia mais

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza. josineys@inf.ufpr.br Fundamentos de Programação Turma CI-240-EST Josiney de Souza josineys@inf.ufpr.br Agenda do Dia Aula 2 (07/08/15) Introdução ao Python História Características Estrutura dos código-fonte Primeiros elementos

Leia mais

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani Minicurso de Python Aula 1 Raphael Lupchinski Marcelo Millani Introdução Python é uma linguagem de programação poderosa e fácil de aprender Possui estruturas de dados eficientes e de alto nível, além de

Leia mais

Computadores e Programação

Computadores e Programação Computadores e Programação 2007 2008 Orlando Oliveira, Helmut Wolters adaptado a partir duma apresentação de Fernando Nogueira, José António Paixão, António José Silva orlando@teor.fis.uc.pt, helmut@coimbra.lip.pt

Leia mais

Danilo Borges da Silva daniloborges_@hotmail.com

Danilo Borges da Silva daniloborges_@hotmail.com Danilo Borges da Silva daniloborges_@hotmail.com Simples o suficiente para um curso introdutório Muitos recursos Orientação a Objetos Escalável (módulos, classes, controle de exceções) Biblioteca embutida

Leia mais

MAB224 Programação de Computadores II. Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro

MAB224 Programação de Computadores II. Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro MAB224 Programação de Computadores II Prof. Franklin Marquezino Universidade Federal do Rio de Janeiro Parte IV Conceitos de Orientação a Objetos em Python Atenção: Slides em constante atualização. Consultem

Leia mais

Variáveis, Expressões e Comandos. Prof. Alberto Costa Neto Programação em Python

Variáveis, Expressões e Comandos. Prof. Alberto Costa Neto Programação em Python Variáveis, Expressões e Comandos Prof. Alberto Costa Neto Programação em Python Constantes Valores fixos tais como números, letras, e strings são chamados constantes - porque seus valores não mudam. Constantes

Leia mais

Refinando a Formatação de Saída

Refinando a Formatação de Saída Capítulo 7: Entrada e saída Existem várias maneiras de apresentar a saída de um programa; os dados podem ser exibidos ou impressos em forma legível para seres humanos, ou escritos em arquivos para uso

Leia mais

Python Funções. Introdução à Programação SI1

Python Funções. Introdução à Programação SI1 Python Funções Introdução à Programação SI1 Conteúdo Funções Conceitos Objetivos Modularização Exemplos Exercícios 2 Funções O que são? Qual a função de uma função? 3 Imagine o código 4 Imagine o código

Leia mais

Pragmática das Linguagens de Programação 2004/2005

Pragmática das Linguagens de Programação 2004/2005 Instituto Superior Técnico Pragmática das Linguagens de Programação 2004/2005 Segundo Exame 11/2/2005 Número: Turma: Nome: Escreva o seu número em todas as folhas do teste. O tamanho das respostas deve

Leia mais

Python: Comandos Básicos. Claudio Esperança

Python: Comandos Básicos. Claudio Esperança Python: Comandos Básicos Claudio Esperança Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são escritas e computadas imediatamente Variáveis podem

Leia mais

Aula 4: adivinhe o número

Aula 4: adivinhe o número Aula 4: adivinhe o número Kaya Sumire Abe kaya.sumire@gmail.com Diego de Faria do Nascimento df.nascimento93@gmail.com Fabian Czajkowski fabiancza22@gmail.com 05/09/2012 Resumo Através do que já vimos,

Leia mais

Introdução à Linguagem

Introdução à Linguagem Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin jjscremin@jjscremin.t5.com.br Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:

Leia mais

Programação com Objectos. Processamento de Dados I. 5. Excepções

Programação com Objectos. Processamento de Dados I. 5. Excepções Programação com Objectos Processamento de Dados I 5. Excepções 1 O que é uma excepção? Tratamento de excepções: Try e Catch Lançamento de excepções: Throw e Throws Classes de excepção Programação com Objectos

Leia mais

e à Linguagem de Programação Python

e à Linguagem de Programação Python Introdução a Algoritmos, Computação Algébrica e à Linguagem de Programação Python Curso de Números Inteiros e Criptografia Prof. Luis Menasché Schechter Departamento de Ciência da Computação UFRJ Agosto

Leia mais

AMBIENTE DE PROGRAMAÇÃO PYTHON

AMBIENTE DE PROGRAMAÇÃO PYTHON Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 1 AMBIENTE DE PROGRAMAÇÃO PYTHON 1.1. Objectivos

Leia mais

Metalinguagem. As linguagens dinâmicas (nas quais. A serpente que morde a própria cauda

Metalinguagem. As linguagens dinâmicas (nas quais. A serpente que morde a própria cauda A serpente que morde a própria cauda Metalinguagem Com a chegada do Ruby On Rails, os programadores estão redescobrindo um conceito não muito moderno, mas surpreendente...programas que modificam programas?

Leia mais

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

Laboratório 4 Validação do Formulário

Laboratório 4 Validação do Formulário Laboratório 4 Validação do Formulário Introdução Agora que já definimos os nossos documentos usando xhtml e já os embelezámos através da utilização das CSS, está na hora de validar a informação que o utilizador

Leia mais

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas) ENIAC Introdução aos Computadores e à ção (Noções Básicas) Introdução aos Computadores e à ção (Noções Básicas) 1 Introdução aos Computadores e à ção (Noções Básicas) 2 O transistor foi inventado em 1947

Leia mais

Hugo Pedro Proença, 2007

Hugo Pedro Proença, 2007 Stored Procedures À medida que a complexidade dos sistemas aumenta, torna-se cada vez mais difícil a tarefa de integrar o SQL com as aplicações cliente. Além disto, é necessário que todas as aplicações

Leia mais

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 1 Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira Linguagem a ser Utilizada? Nossa disciplina é de Algoritmos e Estrutura de Dados, e não de linguagem

Leia mais

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções)

Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução. (procedimentos e funções) Aulas anteriores... Formulação adequada do problema Identificação das variáveis de entrada; resultados/variáveis de saída e método ou solução Definição do algoritmo Método de decomposição hierárquica utilizando

Leia mais

Primeiro programa em Java (compilação e execução)

Primeiro programa em Java (compilação e execução) Universidade Federal do ABC Disciplina: Linguagens de Programação (BC-0501) Assunto: Primeiro programa em Java (compilação e execução) Primeiro programa em Java (compilação e execução) Introdução Este

Leia mais

Lógica de Programação com Python

Lógica de Programação com Python Lógica de Programação com Python por Nilo Menezes http://www.nilo.pro.br/python/ Python 2.7 requer PyGame Atualizada em 30/10/2012 1 Objetivos Introduzir os conceitos de programação Apresentar as principais

Leia mais

Capítulo 2. Fundamentos de Java

Capítulo 2. Fundamentos de Java Capítulo 2. Fundamentos de Java 1/52 Índice 2.1 - Variáveis Tipos Escopo Inicialização Casting Literais 2.2 - Operadores Aritméticos Relacionais Bit a Bit De atribuição 2.3 - Expressões, statements e blocos

Leia mais

A Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python

A Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python A Linguagem Python: Uma visão geral Prof. Alberto Costa Neto Programação em Python Python é a linguagem do interpretador Python e daqueles que são capazes de conversar com ele. Um indivíduo que fala Python

Leia mais

Python: Funções. Claudio Esperança

Python: Funções. Claudio Esperança Python: Funções Claudio Esperança Abstração É uma técnica de programação que nos permite pensar num problema em diversos níveis A idéia é que quando estamos pensando num problema macroscopicamente, não

Leia mais

Métodos de Programação I 2. 1 Ana Maria de Almeida CAPÍTULO 2 CONTEÚDO

Métodos de Programação I 2. 1 Ana Maria de Almeida CAPÍTULO 2 CONTEÚDO Métodos de Programação I 2. 1 CAPÍTULO 2 CONTEÚDO 2.1 Programação: Conceitos Fundamentais 2.1.1 Fases de construção de um programa executável 2.2.2 Metodologia da programação 2.2 A Linguagem Pascal 2.2.1

Leia mais

Programação Elementar de Computadores Jurandy Soares

Programação Elementar de Computadores Jurandy Soares Programação Elementar de Computadores Jurandy Soares Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Objectivos Indicação onde são utilizados os computadores Primeiro programa em C++ Etapas básicas do desenvolvimento de programas Projecto centrado nos objectos Classes e programação

Leia mais

QUITETURA AVANÇADA DE SISTEMAS

QUITETURA AVANÇADA DE SISTEMAS QUITETURA AVANÇADA DE SISTEMAS ICARDO MENDÃO SILVA RMSILVA AT UAL DOT PT MARÇO 2015 AAS OUTLINE INTRODUÇÃO COMENTÁRIOS VARIÁVEIS OPERADORES IF STATEMENT FUNÇÕES CICLO FOR CICLO WHILE STRINGS LISTAS TUPLAS

Leia mais

Introdução à Programação Aula 2 Introdução à linguagem Python

Introdução à Programação Aula 2 Introdução à linguagem Python Introdução à Programação Aula 2 Introdução à linguagem Python Pedro Vasconcelos DCC/FCUP 2015 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 2 Introdução à linguagem Python 2015 1 / 24 Nesta

Leia mais

Slides_Java_1 !"$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code.

Slides_Java_1 !$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code. Slides_Java_1!"#$!" $ % & $ Sistemas Informáticos I, 2005/2006 ( Java source code Compile javac Java bytecode Run java Output:!"#) %& Name of program. Must be the same as name of file.!"#$!"$ % & $ Where

Leia mais

Curso de Iniciação ao Access Basic (I) CONTEÚDOS

Curso de Iniciação ao Access Basic (I) CONTEÚDOS Curso de Iniciação ao Access Basic (I) CONTEÚDOS 1. A Linguagem Access Basic. 2. Módulos e Procedimentos. 3. Usar o Access: 3.1. Criar uma Base de Dados: 3.1.1. Criar uma nova Base de Dados. 3.1.2. Criar

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

Introdução à estrutura de dados com Python

Introdução à estrutura de dados com Python Introdução à estrutura de dados com Python CLEIBSON APARECIDO DE ALMEIDA UFPR Universidade Federal do Paraná PPGMNE Programa de Pós Graduação em Métodos Numéricos em Engenharia Centro Politécnico CEP 81.531-980

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 2 Introdução aos aplicativos Java Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 2.1 Introdução Programação de aplicativo Java. Utilize as ferramentas do JDK para compilar

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Capítulo 1. Linguagens e processadores

Capítulo 1. Linguagens e processadores Capítulo 1. 1. Linguagens 1.1. Definição Definição : Uma linguagem L sobre um alfabeto, também designado com frequência por vocabulário, V, é um conjunto de frases, em que cada frase é uma sequência de

Leia mais

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Exceções e Finalizações

Prof. Marcelo Heitor Teixeira marceloheitor.com. Java Exceções e Finalizações Prof. Marcelo Heitor Teixeira marceloheitor.com Java Exceções e Finalizações # Exceções em Java # Hierarquia de Classes # Lançando, Declarando e Capturando # Classes de Exceções Personalizadas # Entendendo

Leia mais

Organização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br

Organização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br Organização de programas em Python Vanessa Braganholo vanessa@ic.uff.br Vamos programar em Python! Mas... } Como um programa é organizado? } Quais são os tipos de dados disponíveis? } Como variáveis podem

Leia mais

Luciano Ramalho luciano@ramalho.org. setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Luciano Ramalho luciano@ramalho.org. setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python Luciano Ramalho luciano@ramalho.org setembro/2012 Objetos Pythonicos Orientação a objetos e padrões de projeto em Python Aula 4 Recapitulando iteráveis etc. Herança múltipla, MRO e super Propriedades Polimorfismo

Leia mais

Algoritmos e programação

Algoritmos e programação Algoritmos e programação Introdução à Programação Prof. Bonadia dos Santos Conceitos básicos Desde o início de sua existência, o homem procurou criar máquinas que o auxiliassem em seu trabalho. Dentre

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC (UFABC) Disciplina: Processamento da Informação (BC-0505) Assunto: Java e Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas necessários...

Leia mais

Programar será assim tão difícil?

Programar será assim tão difícil? Programar será assim tão difícil? Ernesto Costa Departamento de Engenharia Informática Universidade de Coimbra 17 de Novembro de 2007 Resumo Para muitos não informáticos programar parece ser algo de extremamente

Leia mais

1. Instruções detalhadas para o primeiro programa

1. Instruções detalhadas para o primeiro programa DEPARTAMENTO DE ENGENHARIA INFORMÁTICA INFORMÁTICA PARA A SAÚDE COMPUTADORES E PROGRAMAÇÃO Ano Lectivo 2012/2013 1º Semestre FOLHA 1 - INTRODUÇÃO À LINGUAGEM DE PROGRAMAÇÃO JAVA 1. Instruções detalhadas

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo GENERICS (Tipos Parametrizados, Classes Parametrizadas) : têm o objectivo de tornar as Colecções seguras em termos

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 5. Tratamento de Exceções Introdução e conceitos Capturando exceção usando

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Allisson Barros 12/0055619 Daniel Luz 13/0007714 Leandro Bergmann 14/0149007 Luiz Fernando Vieira 13/0013757 Uriel Silva 12/0137232

Allisson Barros 12/0055619 Daniel Luz 13/0007714 Leandro Bergmann 14/0149007 Luiz Fernando Vieira 13/0013757 Uriel Silva 12/0137232 Allisson Barros 12/0055619 Daniel Luz 13/0007714 Leandro Bergmann 14/0149007 Luiz Fernando Vieira 13/0013757 Uriel Silva 12/0137232 Início da Implementação Python 0.9.0 alt.sources Python 1.0 Python 2.0

Leia mais

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Computabilidade 2012/2013 Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto Capítulo 1 Computabilidade 1.1 A noção de computabilidade Um processo de computação

Leia mais

Curso Técnico em Redes

Curso Técnico em Redes Curso Técnico em Redes Prof. Airton Ribeiro - 2012 Histórico das Linguagens de Programação O que é? É um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas

Leia mais

Aprendendo Python na Prática. Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa

Aprendendo Python na Prática. Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa Aprendendo Python na Prática Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa Introdução ou Não pensem besteira Por que usar Python? produtivo Por que usar Python? produtivo portável

Leia mais

Python. Uma visão geral sobre a linguagem. Guilherme Artém Henrique Castro José Mauro

Python. Uma visão geral sobre a linguagem. Guilherme Artém Henrique Castro José Mauro Python Uma visão geral sobre a linguagem Guilherme Artém Henrique Castro José Mauro Sumário Introdução Um primeiro programa Compilação e Interpretação Sintaxe Blocos Objetos Controle de Fluxo Estruturas

Leia mais

DICIONÁRIOS. template class Par { public: K chave; T valor; Par():chave(),valor()

DICIONÁRIOS. template<class K,class T> class Par { public: K chave; T valor; Par():chave(),valor() DICIONÁRIOS Esta estrutura inclui-se nos chamados contentores associativos, que não são mais do que uma colecção de estruturas de tipo Par, com dois membros de dados (chave de pesquisa e valor associado),

Leia mais

Disparando o interpretador

Disparando o interpretador Capítulo 2: Usando o interpretador Python Disparando o interpretador O interpretador é frequentemente instalado como /usr/local/bin/python nas máquinas onde está disponível; adicionando /usr/local/bin

Leia mais

Usando Python como uma calculadora

Usando Python como uma calculadora Capítulo 3: Uma introdução informal a Python Nos exemplos seguintes, pode se distinguir a entrada da saída pela presença ou ausência dos prompts (>>> e...): para repetir o exemplo, você deve digitar tudo

Leia mais

Mestrado em Matemática Financeira

Mestrado em Matemática Financeira Programação Mestrado em Matemática Financeira http://moodle.fc.ul.pt Luís Sequeira 03 de Janeiro de 2014 Bom dia! 2 Contactos......................................................... 3 Abstracção!.......................................................

Leia mais

Erros, exceçõ. ções e asserçõ

Erros, exceçõ. ções e asserçõ Java 2 Standard Edition Erros, exceçõ ções e asserçõ ções Helder da Rocha www.argonavis.com.br 1 Controle de erros com Exceções Exceções são Erros de tempo de execução Objetos criados a partir de classes

Leia mais

Capítulo 5. Tratamento de excepções

Capítulo 5. Tratamento de excepções Capítulo 5. Tratamento de excepções 1/20 Índice Indice 5.1 - Excepção 5.2 - Try-Catch-Finally 5.3 - Escalar excepção não tratada 5.4 - Como lançar excepções 2/20 Índice 5.1 Excepção 5.1 - Excepção 5.2

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31 APROG Algoritmia e Programação Linguagem JAVA Básico Nelson Freire (ISEP DEI-APROG 2012/13) 1/31 Linguagem Java Estrutura de um Programa Geral Básica Estruturas de Dados Variáveis Constantes Tipos de Dados

Leia mais

3 Classes e instanciação de objectos (em Java)

3 Classes e instanciação de objectos (em Java) 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Módulo 06 Desenho de Classes

Módulo 06 Desenho de Classes Módulo 06 Desenho de Classes Última Atualização: 13/06/2010 1 Objetivos Definir os conceitos de herança, polimorfismo, sobrecarga (overloading), sobreescrita(overriding) e invocação virtual de métodos.

Leia mais

Laboratório de Programação I

Laboratório de Programação I Laboratório de Programação I Introdução à Programação em Visual Basic Fabricio Breve Objetivos Ser capaz de escrever programas simples em Visual Basic Ser capaz de usar os comandos de entrada e saída Familiarizar-se

Leia mais

Algoritmia e Estruturas de Dados

Algoritmia e Estruturas de Dados JOSÉ BRAGA DE VASCONCELOS JOÃO VIDAL DE CARVALHO Algoritmia e Estruturas de Dados Programação nas linguagens C e JAVA Portugal/2005 Reservados todos os direitos por Centro Atlântico, Lda. Qualquer reprodução,

Leia mais

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica 28 de Fevereiro de 2013 Nesta aula apresentam-se dois dos aspetos fundamentais das linguagens de programação, sintaxe e semântica.

Leia mais

Guião de Introdução ao Eclipse IDE Índice

Guião de Introdução ao Eclipse IDE Índice Índice 1. Introdução... 2 1.1. O que é um ambiente de desenvolvimento (IDE)?... 2 1.2. Visão geral sobre o Eclipse IDE... 2 2. Iniciar o Eclipse... 3 2.1. Instalação... 3 2.2. Utilizar o Eclipse... 3 3.

Leia mais

1 Introdução. 2 Algumas funções úteis para lidar com strings

1 Introdução. 2 Algumas funções úteis para lidar com strings Departamento de Engenharia Electrotécnica PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008 Mestrado Integrado em Engenharia Electrotécnica e Computadores 1º ano 1º semestre Strings e apontadores http://tele1.dee.fct.unl.pt

Leia mais

Trabalho Prático Nº1 Introdução ao C#.NET

Trabalho Prático Nº1 Introdução ao C#.NET Trabalho Prático Nº1 Introdução ao C#.NET 1. OBJECTIVOS - Entender o contexto da plataforma.net - Desenvolver programas simples em C#.NET - Saber efectuar entradas de dados em modo Consola e Windows Forms

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Resumo da Introdução de Prática de Programação com C. A Linguagem C Resumo da Introdução de Prática de Programação com C A Linguagem C O C nasceu na década de 70. Seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 rodando o sistema operacional

Leia mais

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]

Leia mais

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

MC102 Algoritmos e programação de computadores Aula 3: Variáveis MC102 Algoritmos e programação de computadores Aula 3: Variáveis Variáveis Variáveis são locais onde armazenamos valores na memória. Toda variável é caracterizada por um nome, que a identifica em um programa,

Leia mais

Algoritmos e Programação Estruturada

Algoritmos e Programação Estruturada Algoritmos e Programação Estruturada Virgínia M. Cardoso Linguagem C Criada por Dennis M. Ritchie e Ken Thompson no Laboratório Bell em 1972. A Linguagem C foi baseada na Linguagem B criada por Thompson.

Leia mais

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Especialização em desenvolvimento para web com interfaces ricas Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares Objetivos Conceito de exceções Tratar exceções pelo uso de try, catch e

Leia mais

Fábio Rodrigues Jorge. E-mail: fabinhojorgenet@gmail.com

Fábio Rodrigues Jorge. E-mail: fabinhojorgenet@gmail.com Fábio Rodrigues Jorge E-mail: fabinhojorgenet@gmail.com Este minicurso tem por objetivo apresentar uma noção introdutória á linguagem Python. Temas abordados no minicurso: -variáveis -comandos de decisão

Leia mais

Javascript 101. Parte 2

Javascript 101. Parte 2 Javascript 101 Parte 2 Recapitulando O Javascript é uma linguagem de programação funcional Os nossos scripts são executados linha a linha à medida que são carregados. O código que está dentro de uma função

Leia mais

4 Conversor EDTV Raw. 4.1 Arquitetura

4 Conversor EDTV Raw. 4.1 Arquitetura 4 Conversor EDTV Raw O conversor EDTV Raw é o programa que lê um documento escrito no perfil NCL EDTV e gera um documento Raw equivalente, i.e. que define a mesma apresentação. Este capítulo, apresenta

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) 2013/2. Introdução à Programação de Computadores. Aula - Tópico 1

Algoritmos e Estruturas de Dados I (DCC/003) 2013/2. Introdução à Programação de Computadores. Aula - Tópico 1 Algoritmos e Estruturas de Dados I (DCC/003) 2013/2 Introdução à Programação de Computadores Aula - Tópico 1 1 Por que usar um computador? Como conversar com um computador? 0101001001010100101011 0010100110101011111010

Leia mais

Geração de código intermediário. Novembro 2006

Geração de código intermediário. Novembro 2006 Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 2 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Exemplo Inicial Uma

Leia mais

Curso de Linguagem C

Curso de Linguagem C Curso de Linguagem C 1 Aula 1 - INTRODUÇÃO...4 AULA 2 - Primeiros Passos...5 O C é "Case Sensitive"...5 Dois Primeiros Programas...6 Introdução às Funções...7 Introdução Básica às Entradas e Saídas...

Leia mais

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código } Este documento tem o objetivo de demonstrar os comandos e sintaxes básicas da linguagem Java. 1. Alguns passos para criar programas em Java As primeiras coisas que devem ser abordadas para começar a desenvolver

Leia mais

Projecto de Programação MEEC - 2010/2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores

Projecto de Programação MEEC - 2010/2011-1ºSemestre. Mestrado Integrado em Engenharia Electrotécnica e de Computadores Mestrado Integrado em Engenharia Electrotécnica e de Computadores Programação 2010/2011 Enunciado do projecto O projecto a desenvolver pelos alunos consistirá numa sistema de monitorização do estado de

Leia mais

PYTHON LISTAS. Introdução à Programação SI2

PYTHON LISTAS. Introdução à Programação SI2 PYTHON LISTAS Introdução à Programação SI2 3 Sequências Sequências! Podem ser indexados por algum valor ordinal posicional Algumas operações são aplicadas a todos os tipos de sequências. Listas li = [1,2,3,

Leia mais

Programação em C++: Introdução

Programação em C++: Introdução Programação em C++: Introdução J. Barbosa J. Tavares Visualização Científica Conceitos básicos de programação Algoritmo Conjunto finito de regras sobre as quais se pode dar execução a um dado processo

Leia mais

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB Instituto Politécnico de Viseu Escola Superior de Tecnologia Departamento: Matemática Métodos Numéricos Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007 Aula prática n o 1 - Introdução

Leia mais

Arquivos binários em Python

Arquivos binários em Python Arquivos binários em Python Vamos começar analisando uma estrutura. print "Arquivo aberto!" Antes de tudo, o modo rb tenta abrir um arquivo como binário para leitura. Reveja a tabela: Parâmetro Ação rb

Leia mais

Introdução a C Tipos de Dados Variáveis Operadores

Introdução a C Tipos de Dados Variáveis Operadores Introdução a C Tipos de Dados Variáveis Operadores INF1005 Programação I Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC 1 introdução a C tópicos ciclo de desenvolvimento sistemas numéricos tipos de

Leia mais

Aula Prática 1: Introdução ao Ambiente de Programação Dev-C++

Aula Prática 1: Introdução ao Ambiente de Programação Dev-C++ Aula Prática 1: Introdução ao Ambiente de Programação Dev-C++ 1. Introdução Em nossa primeira aula prática de programação em linguagem C iremos escrever e testar programas de computador básicos. Mas antes,

Leia mais

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente Capítulo 1 Introdução Um compilador é um que lê um escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num equivalente numa outra linguagem, a linguagem destino Como parte importante neste

Leia mais