Saltar a contenido

7. Ejercicios GO

7.1 Punteros

En el siguiente ejemplo se utiliza un puntero como parámetro de la función modificarValor como sinonimo de la variable num . Esto permite cambiar el valor de num dentro de la función sin devolver nada.
Se utiliza principalmente con struct para evitar copiar grandes cantidades de datos cuando se llama a las funciones (aunque no se modifique la variable del strctu)

package main
import (
    "fmt"
)

// Función que modifica el valor usando un puntero
func modificarValor(ptr *int) {
    *ptr = 100 // Cambiamos el valor al que apunta el puntero
}

func main() {
    num := 42
    fmt.Println("Antes de modificar:", num)

    modificarValor(&num) // Pasamos la dirección de num (puntero)

    fmt.Println("Después de modificar:", num)
}
  1. Ejercicio 1.1 Escribe un programa en Go que permita incrementar el valor de una variable entera utilizando una función con punteros. Debes implementar una función llamada incrementar que reciba como parámetro un puntero a un entero (*int) y aumente su valor en 1.
    El programa debe:

  2. Definir una función incrementar que acepte un puntero a entero (*int).

  3. Modificar el valor de la variable a través del puntero.
  4. Mostrar el valor antes y después de la llamada a la función. Ejemplo de salida:
    Valor antes de incrementar: 10
    Valor después de incrementar: 11
    

7.2 Estruct y punteros

Los punteros se usan más cuando la variable es de tipo struct , array ,map.

Ejercicio 2.1 Escribe un programa en Go que defina una estructura para representar a un producto en una tienda. La estructura debe tener los siguientes campos:

Nombre (string). Precio (float64). EnStock (bool), que indica si el producto está disponible.

Ejercicio: Modificar un struct usando Punteros Enunciado:

Escribe un programa en Go que defina una estructura para representar a un producto en una tienda. La estructura debe tener los siguientes campos:

Nombre (string). Precio (float64). EnStock (bool), que indica si el producto está disponible.

El programa debe:

  1. Definir la estructura Producto.
  2. Crear una función llamada actualizarPrecio que reciba un puntero a un Producto y un nuevo precio. La función debe actualizar el precio del producto.
  3. Crear otra función llamada cambiarDisponibilidad que reciba un puntero a un Producto y cambie el estado del campo EnStock.
  4. Mostrar el producto antes y después de cada modificación. Ejemplo de salida
Producto antes de actualizar:
Nombre: Laptop, Precio: 999.99, EnStock: true

Producto después de actualizar el precio:
Nombre: Laptop, Precio: 799.99, EnStock: true

Producto después de cambiar disponibilidad:
Nombre: Laptop, Precio: 799.99, EnStock: false

Ejercicio 2.2 Crea un programa en Go para gestionar un inventario de productos en una tienda. Cada producto debe representarse con una estructura llamada Producto que contenga los siguientes campos:

  1. Nombre (string).
  2. Precio (float64).
  3. Cantidad (int), que indica la cantidad disponible en inventario.
  4. EnStock (bool), que indica si el producto está disponible.

El programa debe permitir:

  1. Crear una lista de productos.
  2. Implementar una función actualizarCantidad que reciba un puntero a un producto y una cantidad a añadir o restar. Si la cantidad llega a 0, el producto debe marcarse como EnStock = false.
  3. Implementar una función mostrarInventario que recorra el inventario e imprima la información de todos los productos disponibles (EnStock = true).
  4. Utilizar un bucle para actualizar el inventario hasta que el usuario decida salir.

Ejemplo de salida:

Inventario actual:
Nombre: Laptop, Precio: 999.99, Cantidad: 10, EnStock: true
Nombre: Smartphone, Precio: 499.99, Cantidad: 0, EnStock: false
Nombre: Tablet, Precio: 299.99, Cantidad: 5, EnStock: true

Ingrese el nombre del producto a actualizar (o 'salir' para terminar): Laptop
Ingrese la cantidad a añadir/restar (puede ser negativo): -5

Inventario después de la actualización:
Nombre: Laptop, Precio: 999.99, Cantidad: 5, EnStock: true
Nombre: Smartphone, Precio: 499.99, Cantidad: 0, EnStock: false
Nombre: Tablet, Precio: 299.99, Cantidad: 5, EnStock: true

Ingrese el nombre del producto a actualizar (o 'salir' para terminar): Laptop
Ingrese la cantidad a añadir/restar (puede ser negativo): -5

Inventario después de la actualización:
Nombre: Laptop, Precio: 999.99, Cantidad: 0, EnStock: false
Nombre: Smartphone, Precio: 499.99, Cantidad: 0, EnStock: false
Nombre: Tablet, Precio: 299.99, Cantidad: 5, EnStock: true

Ayuda: Para leer de consola: Usamos una variable nombre y le pasamos un puntero a la función Scanln ( obtenermos el puntero con : &nombre)

        var nombre string
        fmt.Print("\nIngrese el nombre del producto a actualizar (o 'salir' para terminar): ")
        fmt.Scanln(&nombre)

7.3 Arrays y Slices

Ejercicio 3.1

Escribe un programa en Go que permita al usuario ingresar las calificaciones de los estudiantes y luego calcule el promedio de las calificaciones utilizando arrays y slices.

El programa debe:

  1. Pedir al usuario que ingrese el número de calificaciones a registrar.
  2. Utilizar un array para almacenar las calificaciones (máximo 100 calificaciones).
  3. Crear un slice a partir del array para contener solo las calificaciones ingresadas.
  4. Calcular y mostrar el promedio de las calificaciones.

Ejemplo de salida:

Ingrese el número de calificaciones: 5
Ingrese la calificación 1: 80
Ingrese la calificación 2: 90
Ingrese la calificación 3: 75
Ingrese la calificación 4: 85
Ingrese la calificación 5: 95

Las calificaciones ingresadas: [80 90 75 85 95]
El promedio de las calificaciones es: 85.00

Pista:
Se usa range en un for como se explica en este tutorial

el operador range en el for devueve dos valores en cada iteración, el primero es el indice en el slice y el segundo el contenido del slice

package main

import "fmt"

var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}

func main() {
    for i, v := range pow {
        fmt.Printf("2**%d = %d\n", i, v)
    }
}