En este concepto veremos que los campos de un registro (struct) pueden ser también de tipo registro, es decir anidar un registro dentro de otro registro.
Se tienen las siguientes declaraciones de registros:
type Fecha struct {
dia int
mes int
año int
}
type Producto struct {
codigo int
descripcion string
precio float64
fechavencimiento Fecha
}
En la función main definir una variable de tipo "Producto".
package main
import "fmt"
type Fecha struct {
dia int
mes int
año int
}
type Producto struct {
codigo int
descripcion string
precio float64
fechavencimiento Fecha
}
func cargar(producto *Producto) {
fmt.Print("Ingrese código:")
fmt.Scan(&producto.codigo)
fmt.Print("Descripción:")
fmt.Scan(&producto.descripcion)
fmt.Print("Ingrese el precio:")
fmt.Scan(&producto.precio)
fmt.Println("Ingrese fecha de vencimiento")
fmt.Print("Dia:")
fmt.Scan(&producto.fechavencimiento.dia)
fmt.Print("Mes:")
fmt.Scan(&producto.fechavencimiento.mes)
fmt.Print("Año:")
fmt.Scan(&producto.fechavencimiento.año)
}
func imprimir(producto Producto) {
fmt.Print(producto)
}
func main() {
var producto1 Producto
cargar(&producto1)
imprimir(producto1)
}
El struct Producto tiene 4 campos, el cuarto es fechavencimiento que es de tipo Fecha.
Ahora cuando debemos acceder al campo fecha vencimiento para su carga debemos indicar cada uno de los campos que tiene dicho struct:
fmt.Print("Dia:")
fmt.Scan(&producto.fechavencimiento.dia)
fmt.Print("Mes:")
fmt.Scan(&producto.fechavencimiento.mes)
fmt.Print("Año:")
fmt.Scan(&producto.fechavencimiento.año)
Utilizamos el operador punto para acceder a los campos del registro producto como los subcampos de fechavencimiento.
type Punto struct {
x int
y int
}
type Triangulo struct {
punto1 Punto
punto2 Punto
punto3 Punto
}
Definir en la main un registro de tipo Triangulo.
ejercicio130.go
package main
import "fmt"
type Punto struct {
x int
y int
}
type Triangulo struct {
punto1 Punto
punto2 Punto
punto3 Punto
}
func cargar(triangulo *Triangulo) {
fmt.Print("Ingrese coordenada x primer punto:")
fmt.Scan(&triangulo.punto1.x)
fmt.Print("Ingrese coordenada y primer punto:")
fmt.Scan(&triangulo.punto1.y)
fmt.Print("Ingrese coordenada x segundo punto:")
fmt.Scan(&triangulo.punto2.x)
fmt.Print("Ingrese coordenada y segundo punto:")
fmt.Scan(&triangulo.punto2.y)
fmt.Print("Ingrese coordenada x tercer punto:")
fmt.Scan(&triangulo.punto3.x)
fmt.Print("Ingrese coordenada y tercer punto:")
fmt.Scan(&triangulo.punto3.y)
}
func imprimir(triangulo Triangulo) {
fmt.Println("Los vértices del triángulo están ubicados en:")
fmt.Println("(", triangulo.punto1.x, ",", triangulo.punto1.y, ")")
fmt.Println("(", triangulo.punto2.x, ",", triangulo.punto2.y, ")")
fmt.Println("(", triangulo.punto3.x, ",", triangulo.punto3.y, ")")
}
func main() {
var triangulo1 Triangulo
cargar(&triangulo1)
imprimir(triangulo1)
}