import math class Circulo: def __init__ (self,x): if x

12
Problem a 1. Escribirun program a para calcularelperím etro de una circunferenciasiguiendo eldiálogo: radio?__ perímetro=nº Solución 1. Con program a ad-hoc import math r=input(“radio?”) print “perímetro=”, 2*math.pi*r

description

import math class Circulo: def __init__ (self,x): if x

Transcript of import math class Circulo: def __init__ (self,x): if x

Page 1: import math class Circulo:   def  __init__ (self,x):      if x

Problema 1. Escribir un programa para calcular el perímetro de una circunferencia siguiendo el diálogo:

radio?__ perímetro=nº Solución 1. Con programa ad-hoc import math r=input(“radio?”) print “perímetro=”, 2*math.pi*r

Page 2: import math class Circulo:   def  __init__ (self,x):      if x

Solución 2. Con clase para circunferencias import math class Circunferencia: def __init__(self,x): #metodo constructor if x<=0: exit("radio<=0") self.r=x #componente para radio def perimetro(self): return 2*math.pi*self.r #obtener valor del radio r=input(“radio?”) #crear objeto de clase Circunfrencia c=Circunferencia(r) #aplicar método para calcular perimetro print “perímetro=”,c.perimetro()

Page 3: import math class Circulo:   def  __init__ (self,x):      if x

Problema 2. Calcular el área y el perímetro de un círculo Solución 1. Modificar clase Circunferencia agregando método área (los círculos, y no las circunferencias, tienen superficie) Solución 2. Usar (y escribir) nueva clase Circulo que:

extienda la clase Circunferencia con método área herede las otras componentes (datos y métodos)

#clase extendida o derivada class Circulo(Circunferencia): def area(self): return math.pi*self.r**2

Page 4: import math class Circulo:   def  __init__ (self,x):      if x

#programa: area y perímetro de círculo print "Calcular área y perímetro de círculo" #crear objeto de clase Circulo #usando constructor de clase Circunferencia c=Circulo(input("radio?")) #uso de método area de clase Circulo print "área=",c.area() #uso de método heredado de clase Circunferencia print "perímetro=",c.perimetro()

Page 5: import math class Circulo:   def  __init__ (self,x):      if x

Problema 3. Calcular área y perímetro de un círculo o un cuadrado circulo o cuadrado? __ radio?__ o lado?__ area=nº perimetro=nº Programa: #obtener tipo de figura r=raw_input("circulo o cuadrado?").lower() #crear objeto de clase Circulo o Clase Cuadrado if r==”circulo”: c=Circulo(input("radio?")) elif r=”cuadrado”: c=Cuadrado(input("lado?")) else: exit("debe ser circulo o cuadrado") #mostrar area y perimetro de circulo o cuadrado print "area=",c.area() print "perimetro=",c.perimetro()

Page 6: import math class Circulo:   def  __init__ (self,x):      if x

import mathclass Circulo: def __init__(self,x): if x<=0: exit("radio<=0”) self.r=x def perimetro(self): return 2*math.pi*self.r def area(self): return math.pi*self.r**2

class Cuadrado: def __init__(self,x): if x<=0: exit(“lado<=0”) self.a=x def perimetro(self): return 4*self.a def area(self): return self.a**2

Nota. Constructores son similares

Page 7: import math class Circulo:   def  __init__ (self,x):      if x

Solución 2. Con Herencia

import mathclass Figura: def __init__(self,x): #constructor único if x<=0: exit(“nº<=0") self.x=x #significado de x depende de figura

class Circulo(Figura): def area(self): return math.pi*self.x**2 def perimetro(self): return 2*math.pi*self.x

class Cuadrado(Figura): def area(self): return self.x**2 def perimetro(self): return 4*self.x

Page 8: import math class Circulo:   def  __init__ (self,x):      if x

class Rectangulo(Figura):

def __init__(self,x,y): #constructor Figura.__init__(self,x) #ctor clase Figura self.y=y #ancho if y<=0: exit(“nº<=0")

def area(self): return self.x*self.y

def perimetro(self): return 2*(self.x+self.y)

Uso?r=Rectangulo(nº,nº)

Otras figuras?

Page 9: import math class Circulo:   def  __init__ (self,x):      if x

class Triangulo(Figura):

def __init__(self,x,y,z):

if x<=0 or y<=0 or z<=0 \ #continua…

or x+y<=z or x+z<=y or y+z<=x:

exit("no forman triangulo")

self.x=x; self.y=y; self.z=z

def perimetro(self):

return self.x+self.y+self.z

def area(self):

s=(self.x+self.y+self.z)/2;

return math.sqrt(s*(s-self.x)*(s-self.y)*(s-self.z))

Uso? t=Triangulo(nº,nº,nº)

Page 10: import math class Circulo:   def  __init__ (self,x):      if x

r=raw_input(“circulo,cuadrado,rectangulo o ” + \ “triangulo?").lower()if r=="circulo": f=Circulo(input("radio?"))elif r=="cuadrado": f=Cuadrado(input("lado?"))elif r=="rectangulo": f=Rectangulo(input("largo?"),\ input("ancho?"))elif r=="triangulo": f=Triangulo(input("lado1?"),\ input("lado2?"),\ input("lado3?"))else: exit("figura incorrecta")print "area=",f.area()print "perimetro=",f.perimetro()

Page 11: import math class Circulo:   def  __init__ (self,x):      if x

Herencia “transitiva” (“sucesiva”)class A: def __init__(self,x): self.a=x def f(self): return self.aclass B(A): #hereda de A def __init__(self,x,y): A.__init__(self,x) self.b=y def g(self): return self.bclass C(B): #hereda de B def __init__(self,x,y,z): B.__init__(self,x,y) self.c=z def h(self): return self.cUso? >>>c=C(1,2,3)>>>c.f()+c.g()+c.h()6

A

B

C

Page 12: import math class Circulo:   def  __init__ (self,x):      if x

Herencia “múltiple”class A: def __init__(self,x): self.a=x #una variable def f(self): return self.aclass B: def __init__(self,x): self.b=x #una variable def g(self): return self.bclass C(A,B): #C hereda de clases A y B def __init__(self,x,y,z): A.__init__(self,x) B.__init__(self,y) self.c=z #tres variables pq a y b se heredan def h(self): return self.cUso? >>>c=C(1,2,3)>>>c.f()+c.g()+c.h()6

A B

C