Menu
Coddy logo textTech

Resumen - Comportamiento de estructuras

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 11 de 68.

challenge icon

Desafío

Fácil

En este desafío, practicarás la implementación de receptores de valor y de puntero creando un sistema simple de gestión de rectángulos. Crearás una estructura Rectangle y definirás dos tipos diferentes de métodos que demuestran cuándo usar cada tipo de receptor.

Recibirás tres entradas:

  • Una cadena que representa el ancho del rectángulo (por ejemplo, "5.0")
  • Una cadena que representa la altura del rectángulo (por ejemplo, "3.0")
  • Una cadena que representa un factor de escala (por ejemplo, "2.0")

Tu tarea es:

  1. Definir una estructura Rectangle con dos campos: Width (float64) y Height (float64)
  2. Crear un método llamado area con un receptor de valor que calcule y devuelva el área del rectángulo (ancho × altura)
  3. Crear un método llamado scale con un receptor de puntero que multiplique tanto el ancho como la altura por el factor de escala dado
  4. Analizar las entradas para crear una instancia de Rectangle
  5. Imprimir el área inicial usando el formato: "Initial area: [area]"
  6. Llamar al método scale con el factor de escala
  7. Imprimir el área escalada usando el formato: "Scaled area: [area]"

Los valores del área deben mostrarse como números enteros cuando lo sean (por ejemplo, 15 en lugar de 15.0), pero con decimales cuando sea necesario (por ejemplo, 15.5). Este desafío demuestra el principio clave: usar receptores de valor para métodos que solo leen datos (como calcular el área) y receptores de puntero para métodos que modifican la estructura original (como escalar las dimensiones).

Pruébalo tú mismo

package main

import (
	"fmt"
	"strconv"
)

// TODO: Define tu estructura Rectangle aquí

// TODO: Implementa el método area con receptor de valor aquí

// TODO: Implementa el método scale con receptor de puntero aquí

func main() {
	// Leer entrada
	var widthStr string
	var heightStr string
	var scaleStr string
	fmt.Scanln(&widthStr)
	fmt.Scanln(&heightStr)
	fmt.Scanln(&scaleStr)
	
	// Convertir entradas a float64
	width, _ := strconv.ParseFloat(widthStr, 64)
	height, _ := strconv.ParseFloat(heightStr, 64)
	scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
	
	// TODO: Crea una instancia de Rectangle e implementa la solución a continuación
	
	// Imprimir área inicial
	// fmt.Printf("Initial area: %.0f\n", initialArea) // Usa este formato para la salida
	
	// Escalar el rectángulo
	
	// Imprimir área escalada
	// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Usa este formato para la salida
}

Todas las lecciones de Lógica y Flujo