MAB225 – Computação II – Lista 1 (24/03/2011)

MAB 225 - Computação II - Fabio Mascarenhas

Lista de Exercícios 2 (14/04/2011)

Para cada uma das classes abaixo lembre de definir um método __init__ apropriado!

  1. Crie uma classe que modele uma bola:
    import math
    
    class Bola:
        def __init__(self, cor, raio):
            self.cor = cor
            self.raio = raio
        def trocaCor(self, cor):
            self.cor = cor
        def mostraCor(self):
            print "Minha cor e %s" % self.cor
        def area(self):
            return 4 * math.pi * self.raio * self.raio
        def volume(self):
            return (4 * math.pi * (self.raio ** 3)) / 3
    
    bola = Bola("azul", 2)
    bola.mostraCor()
    bola.trocaCor("verde")
    bola.mostraCor()
    print "Area: %f Volume: %f" % (bola.area(), bola.volume())
    
  2. Crie uma classe que modele um quadrado:
    class Quadrado:
        def __init__(self, lado):
            self.lado = lado
        def trocaLado(self, lado):
            self.lado = lado
        def mostraLado(self):
            print "Meu lado e %s" % self.lado
        def perimetro(self):
            return 4 * self.lado
        def area(self):
            return self.lado * self.lado
    
    quad = Quadrado(2)
    quad.mostraLado()
    quad.trocaLado(3)
    quad.mostraLado()
    print "Perimetro: %i Area: %i" % (quad.perimetro(), quad.area())
    
  3. Crie uma classe que modele um retangulo:
    class Retangulo:
        def __init__(self, ladoA, ladoB):
            self.ladoA = ladoA
            self.ladoB = ladoB
        def trocaLados(self, ladoA, ladoB):
            self.ladoA = ladoA
            self.ladoB = ladoB
        def retornaLados(self):
            return (self.ladoA, self.ladoB)
        def perimetro(self):
            return 2 * self.ladoA + 2 * self.ladoB
        def area(self):
            return self.ladoA * self.ladoB
    
    ret = Retangulo(2,3)
    print "Lados: %i, %i" % ret.retornaLados()
    ret.trocaLados(3,4)
    print "Lados: %i, %i" % ret.retornaLados()
    print "Perimetro: %i Area: %i" % (ret.perimetro(), ret.area())
    
  4. Crie um programa que utilize a classe Retangulo. Ele deve pedir ao usuário (com input) que informe as medidas de um local. Depois deve pedir a medida do piso que ele quer usar. O programa então deve calcular quantas unidades do piso o local vai precisar.
    compl = input("Informe o comprimento do local: ")
    largl = input("Informe a largura do local: ")
    local = Retangulo(compl, largl)
    compp = input("Informe o comprimento do piso: ")
    largp = input("Informe a largura do piso: ")
    piso = Retangulo(compp, largp)
    npisos = local.area() * 1.0 / piso.area()
    print "Voce vai precisar de %f pisos" % npisos
    
  5. Crie uma classe para modelar uma conta corrente. A classe deve possuir os atributos numero, correntista e saldo. Os métodos são alterarNome, deposito, saque e transferencia; No construtor (__init__), saldo é opcional, com valor default zero e os outros atributos são obrigatórios.
    class Conta:
        def __init__(self, numero, nome, saldo = 0):
            self.numero = numero
            self.correntista = nome
            self.saldo = saldo
        def alterarNome(self, nome):
            self.correntista = nome
        def deposito(self, valor):
            self.saldo = self.saldo + valor
        def saque(self, valor):
            self.saldo = self.saldo - valor
        def transferencia(self, outra, valor):
            self.saque(valor)
            outra.deposito(valor)
    
    c1 = Conta(123, "Fulano")
    c2 = Conta(456, "Beltrano")
    c1.deposito(50)
    c1.saque(10)
    c1.deposito(100)
    c1.transferencia(c2, 50)
    c2.saque(30)
    print "Saldo c1: %i, Saldo c2: %i" % (c1.saldo, c2.saldo)
    c1.alterarNome("Fulano de Tal")
    print c1.correntista
    
  6. Faça um programa completo que:
    class Ponto:
        def __init__(self, x, y):
            self.x = x
            self.y = y
        def __repr__(self):
            return "Ponto(%s, %s)" % (repr(self.x), repr(self.y))
    
    class Retangulo:
        def __init__(self, canto1, canto2):
            self.canto1 = canto1
            self.canto2 = canto2
        def centro(self):
            x_centro = (self.canto1.x + self.canto2.x) / 2.0
            y_centro = (self.canto1.y + self.canto2.y) / 2.0
            return Ponto(x_centro, y_centro)
    
    x1 = input("Entre a coordenada x do canto inferior esquerdo: ")
    y1 = input("Entre a coordenada y do canto inferior esquerdo: ")
    canto1 = Ponto(x1, y1)
    x2 = input("Entre a coordenada x do canto superior direito: ")
    y2 = input("Entre a coordenada y do canto superior direito: ")
    canto2 = Ponto(x2, y2)
    ret = Retangulo(canto1, canto2)
    print "Ponto central e %s" % repr(ret.centro())
    
  7. Crie uma classe que modele uma bomba de combustível com dois atributos, capacidade e preco, para a quantidade de combustível na bomba em litros e o preço por litro do combustível, e os seguintes métodos:
    class Bomba:
        def __init__(self, capacidade, preco):
            self.capacidade = capacidade
            self.preco = preco
        def abastecerPorValor(self, valor):
            litros = valor / self.preco
            self.capacidade = self.capacidade - litros
            return litros
        def abastecerPorLitro(self, litros):
            valor = litros * self.preco
            self.capacidade = self.capacidade - litros
            return valor
        def alterarPreco(self, preco):
            self.preco = preco
        def encherBomba(self, litros):
            self.capacidade = self.capacidade + litros
    
    bomba = Bomba(2000, 2.87)
    print "Abasteceu %f litros" % bomba.abastecerPorValor(100)
    print "Abasteceu %f reais" % bomba.abastecerPorLitro(100)
    bomba.alterarPreco(2.55)
    print "Abasteceu %f reais" % bomba.abastecerPorLitro(100)
    bomba.encherBomba(100)
    print "Capacidade: %f litros" % bomba.capacidade
    
  8. Crie uma classe para modelar um número complexo. Defina os métodos especiais aritméticos para ela (__add__, __sub__, __mul__, __div__), e um método para retornar o conjugado e o módulo do número complexo.
    import math
    
    class Complexo:
        def __init__(self, re, im):
            self.re = re
            self.im = im
        def __repr__(self):
            return "Complexo(%s, %s)" % (repr(self.re), repr(self.im))
        def __add__(self, outro):
            return Complexo(self.re + outro.re, self.im + outro.im)
        def __sub__(self, outro):
            return Complexo(self.re - outro.re, self.im - outro.im)
        def __mul__(self, outro):
            if isinstance(outro, Complexo):
                re = self.re * outro.re - self.im * outro.im
                im = self.im * outro.re + self.re * outro.im
                return Complexo(re, im)
            else:
                return Complexo(self.re * outro, self.im * outro)
        def norma(self):
            return self.re ** 2 + self.im ** 2
        def __div__(self, outro):
            re = (self.re * outro.re + self.im * outro.im) * 1.0 / outro.norma()
            im = (self.im * outro.re - self.re * outro.im) * 1.0 / outro.norma()
            return Complexo(re, im)
        def conjugado(self):
            return Complexo(self.re, -self.im)
        def modulo(self):
            return math.sqrt(self.norma())
    
    c1 = Complexo(2, 3)
    c2 = Complexo(4, 7)
    print "c1: %s, c2: %s" % (repr(c1), repr(c2))
    print "Soma: %s" % repr(c1 + c2)
    print "Sub: %s" % repr(c1 - c2)
    print "Mul: %s" % repr(c1 * c2)
    print "Mul escalar: %s" % repr(c1 * 3)
    print "Div: %s" % repr(c1 / c2)
    print "Conjugado c1: %s" % repr(c1.conjugado())
    print "Modulo c1: %s" % repr(c1.modulo())