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 por valor e por 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 (por exemplo, "5.0")
  • Uma string representando a altura do retângulo (por exemplo, "3.0")
  • Uma string representando um fator de escala (por exemplo, "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 por valor que calcula e retorna a área do retângulo (largura × altura)
  3. Criar um método chamado scale com um receptor por ponteiro que multiplica a largura e 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 escalada usando o formato: "Scaled area: [area]"

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

FORMATO DE SAÍDA OBRIGATÓRIO:

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

Pratique por conta própria: Compilador de Go online