Hemos trabajado bastante con la estructura de datos tipo array (vectores y matrices) definiendo componentes de tipo int, float64, string etc.
Ahora veremos que podemos definir vectores cuyos elementos sean de tipo struct.
Se tiene la siguiente declaración de registro:
type Producto struct {
codigo int
descripcion string
precio float64
}
Definir un vector de 4 elementos de tipo Producto.
Implementar las funciones:
package main
import "fmt"
type Producto struct {
codigo int
descripcion string
precio float64
}
func cargar(productos *[4]Producto) {
for f := 0; f < len(productos); f++ {
fmt.Print("Ingrese el codigo del producto:")
fmt.Scan(&productos[f].codigo)
fmt.Print("Ingrese la descripción:")
fmt.Scan(&productos[f].descripcion)
fmt.Print("Ingrese el precio:")
fmt.Scan(&productos[f].precio)
}
}
func imprimir(productos [4]Producto) {
fmt.Println("Listado completo de productos.")
for f := 0; f < len(productos); f++ {
fmt.Println("Código:", productos[f].codigo)
fmt.Println("Descripción:", productos[f].descripcion)
fmt.Println("Precio:", productos[f].precio)
}
}
func precioMayor(productos [4]Producto) {
pos := 0
for f :=1; f < len(productos); f++ {
if productos[f].precio > productos[pos].precio {
pos = f
}
}
fmt.Println("Producto mas caro:",productos[pos].descripcion)
}
func main() {
var productos [4]Producto
cargar(&productos)
imprimir(productos)
precioMayor(productos)
}
En la función main definimos un vector de cuatro elementos de tipo "Producto", llamamos a las distintas funciones y le pasamos el vector para cargarlo, imprimirlo y ver el producto más caro:
func main() {
var productos [4]Producto
cargar(&productos)
imprimir(productos)
precioMayor(productos)
}
Como la función cargar necesita modificar la variable definida en la main lo que le pasamos es la dirección de la variable, por lo tanto la función cargar recibe un puntero:
func cargar(productos *[4]Producto) {
Cuando accedemos ahora al vector debemos indicar el nombre del vector, el subíndice que queremos acceder y finalmente a que campo del registro de dicha componente:
for f := 0; f < len(productos); f++ {
fmt.Print("Ingrese el codigo del producto:")
fmt.Scan(&productos[f].codigo)
fmt.Print("Ingrese la descripción:")
fmt.Scan(&productos[f].descripcion)
fmt.Print("Ingrese el precio:")
fmt.Scan(&productos[f].precio)
}
Para obtener el nombre del producto con mayor precio procedemos a inicializar la variable pos con el valor cero suponiendo que en dicha posición se encuentra el artículo con mayor precio. Luego en cada vuelta del for verificamos el precio del artículo si supera al que hemos considerado mayor hasta ese momento, en caso afirmativo actualizamos la variable pos:
func precioMayor(productos [4]Producto) {
pos := 0
for f :=1; f < len(productos); f++ {
if productos[f].precio > productos[pos].precio {
pos = f
}
}
fmt.Println("Producto mas caro:",productos[pos].descripcion)
}
type Libro struct{
codigo int
titulo string
autor string
}
Definir un vector de cuatro elementos de tipo Libro.
ejercicio132.go
package main
import "fmt"
type Libro struct{
codigo int
titulo string
autor string
}
func cargar(libros *[4]Libro) {
for f := 0; f < len(libros); f++ {
fmt.Print("Ingrese el código:")
fmt.Scan(&libros[f].codigo)
fmt.Print("Ingrese el título:")
fmt.Scan(&libros[f].titulo)
fmt.Print("Ingrese el autor:")
fmt.Scan(&libros[f].autor)
}
}
func imprimir(libros [4]Libro) {
fmt.Println(libros)
}
func consulta(libros [4]Libro) {
var autor string
var existe bool
existe = false
fmt.Print("Ingrese el nombre del autor a consultar:")
fmt.Scan(&autor)
for f := 0; f < len(libros); f++ {
if autor == libros[f].autor {
fmt.Println("Titulo: ", libros[f].titulo)
existe = true
}
}
if existe == false {
fmt.Println("No hay libros de este autor.")
}
}
func main() {
var libros [4]Libro
cargar(&libros)
imprimir(libros)
consulta(libros)
}