Código Python:
Ver original
class Hoja def initialize() @figuras = [] end def AreaTotal() tot = 0 @figuras.each{|fig| tot = tot + fig.area} return tot end def agregar(fig) @figuras.push(fig) end def to_s() return "Hoja: " + @figuras.to_s end def inspect() return self.to_s end def exportar(nombre) begin archivo = File.open(nombre,'w') @figuras.each{|fig| archivo.puts fig} rescue puts "No se a podido crear el archivo" end archivo.close end def importar(nombre) h = Hoja.new begin archivo = File.open(nombre,'r') while linea = archivo.gets linea = linea.split(' ') caso = case linea[0] when "Circulo" then Circulo.creacion(linea) when "Cuadrado" then Cuadrado.creacion(linea) when "Rectangulo" then Rectangulo.creacion(linea) end h.agregar(caso) end rescue puts "No se a podido abrir el archivo" end archivo.close return h end end class Punto def initialize(x1 = 0,y1 = 0) @x = x1 @y = y1 end def px() return @x end def py() return @y end def rect(p) rec = Rectangulo.new(p) rec.origen(self) return rec end def to_s() return @x.to_s + "," + @y.to_s end def inspect() return self.to_s end end class Figura def initialize() @origen = Punto.new() end def mover(p) @origen = Punto.new(@origen.px() + p.px(),@origen.py() + p.py()) end def origen(p) @origen = Punto.new(p.px(),p.py()) end def to_s() c = @origen.to_s muestra = self.nombre + c + "," + self.caracteristica return muestra end def inspect() return self.to_s end end class Circulo < Figura def initialize(r = 1) super() @radio = r end def area() return 3.14159*@radio end def nombre() return "Circulo " end def caracteristica() return @radio.to_s end def self.creacion(linea) begin linea = linea[1].split(',') circulo = self.new(linea[2].to_i) circulo.origen(Punto.new(linea[0].to_i,linea[1].to_i)) return circulo rescue => err puts err.message end end end class Cuadrado < Figura def initialize(l = 1) super() @lado = l end def area() return @lado*@lado end def nombre() return "Cuadrado " end def caracteristica() return @lado.to_s end def self.creacion(linea) begin linea = linea[1].split(',') cuadrado = self.new(linea[2].to_i) cuadrado.origen(Punto.new(linea[0].to_i,linea[1].to_i)) return cuadrado rescue => err puts err.message end end end class Rectangulo < Figura def initialize(p = Punto.new) super() @base = p.px @altura = p.py end def area() return @base*@altura end def nombre() return "Rectangulo " end def caracteristica() return @base.to_s + "," + @altura.to_s end def self.creacion(linea) begin linea = linea[1].split(',') rectangulo = self.new(Punto.new(linea[2].to_i,linea[3].to_i)) rectangulo.origen(Punto.new(linea[0].to_i,linea[1].to_i)) return rectangulo rescue => err puts err.message end end end
Aclarando un poco mas el tema pongo un ejemplo
Circulo 10,10,5 (Esto lo tendria que tomar)
Cuadrado 5,5,zz (Esto ya no)
Rectangulo 10,10,10 (Esto si)