Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Experimentando con clases interface ,struct en go
- Antonio Villanueva
- */
- package main
- import (
- "fmt"
- "math"
- )
- // Un interface para diferentes geometrias circulo , rectangulo
- type geometria interface {
- area() float64
- perimetro() float64
- }
- type rectangulo struct { //Rectangulo
- ancho, alto float64
- }
- // Funciones Rectangulo
- func (rect rectangulo) area() float64 { //Area
- return rect.ancho * rect.alto
- }
- func (rect rectangulo) perimetro() float64 { //Perimetro
- return 2*rect.ancho + 2*rect.alto
- }
- type circulo struct { //Circulo
- radio float64
- }
- // Funciones Circulo ...
- func (circ circulo) area() float64 { //Area
- return math.Pi * circ.radio * circ.radio
- }
- func (circ circulo) perimetro() float64 { //Perimetro circunferencia
- return 2 * math.Pi * circ.radio
- }
- type trapecio struct { //Triangulo
- base1 float64
- base2 float64
- altura float64
- }
- func (trap trapecio) area() float64 {
- return ((trap.base1 + trap.base2) / 2) * trap.altura
- }
- func (trap trapecio) perimetro() float64 {
- //Pitagoras c²=a² +b²
- //calculo base a del triangulo derecho p.e
- a := (trap.base1 - trap.base2) / 2
- b := trap.altura
- //b es la altura , c es un lado
- c := math.Sqrt(a*a + b*b)
- //El perimetro es base1+base2+2c
- return trap.base1 + trap.base2 + 2*c
- }
- // Imprime las medidas dependiendo del objeto utiliza el interface geometria
- func medidas(geo geometria) {
- fmt.Printf("tipo de objeto == %T", geo)
- fmt.Println(geo)
- fmt.Printf("Area %v ", geo.area())
- fmt.Printf("Perimetro %v \n\n", geo.perimetro())
- }
- func main() {
- rect := rectangulo{ancho: 7, alto: 3}
- circ := circulo{radio: 9}
- trap := trapecio{base1: 15, base2: 12, altura: 6}
- medidas(rect)
- medidas(circ)
- medidas(trap)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement