Menu
Coddy logo textTech

Recapitulação - Comportamento de Structs

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 11 de 68.

challenge icon

Desafio

Fácil

Neste desafio, você praticará a implementação de receptores de valor e de ponteiro criando um sistema simples de gerenciamento de retângulos. Você criará uma struct Rectangle e definirá dois tipos diferentes de métodos que demonstram quando usar cada tipo de receptor.

Você receberá três entradas:

  • Uma string representando a largura do retângulo (ex: "5.0")
  • Uma string representando a altura do retângulo (ex: "3.0")
  • Uma string representando um fator de escala (ex: "2.0")

Sua tarefa é:

  1. Definir uma struct Rectangle com dois campos: Width (float64) e Height (float64)
  2. Criar um método chamado area com um receptor de valor que calcula e retorna a área do retângulo (largura × altura)
  3. Criar um método chamado scale com um receptor de ponteiro que multiplica tanto a largura quanto a altura pelo fator de escala fornecido
  4. Analisar as entradas para criar uma instância de Rectangle
  5. Imprimir a área inicial usando o formato: "Initial area: [area]"
  6. Chamar o método scale com o fator de escala
  7. Imprimir a área escalonada usando o formato: "Scaled area: [area]"

Os valores da área devem ser exibidos como números inteiros quando forem inteiros (ex: 15 em vez de 15.0), mas com casas decimais quando necessário (ex: 15.5). Este desafio demonstra o princípio fundamental: use receptores de valor para métodos que apenas leem dados (como calcular a área) e receptores de ponteiro para métodos que modificam a struct original (como redimensionar as dimensões).

Experimente você mesmo

package main

import (
	"fmt"
	"strconv"
)

// TODO: Defina sua struct Rectangle aqui

// TODO: Implemente o método area com receptor de valor aqui

// TODO: Implemente o método scale com receptor de ponteiro aqui

func main() {
	// Ler entrada
	var widthStr string
	var heightStr string
	var scaleStr string
	fmt.Scanln(&widthStr)
	fmt.Scanln(&heightStr)
	fmt.Scanln(&scaleStr)
	
	// Converter entradas para float64
	width, _ := strconv.ParseFloat(widthStr, 64)
	height, _ := strconv.ParseFloat(heightStr, 64)
	scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
	
	// TODO: Criar instância de Rectangle e implementar a solução abaixo
	
	// Imprimir área inicial
	// fmt.Printf("Initial area: %.0f\n", initialArea) // Use este formato para a saída
	
	// Escalar o retângulo
	
	// Imprimir área escalada
	// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Use este formato para a saída
}

Todas as lições de Lógica & Fluxo