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) }