Menu
CoddyTech

Повторение: поведение структур

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 11 из 68.

challenge icon

Задание

Легко

В этом задании ты потренируешься реализовывать получатели-значения и получатели-указатели, создав простую систему управления прямоугольниками. Ты создашь структуру Rectangle и определишь два разных типа методов, которые покажут, когда использовать каждый тип получателя.

Тебе будут переданы три входных значения:

  • Строка, представляющая ширину прямоугольника (например, "5.0")
  • Строка, представляющая высоту прямоугольника (например, "3.0")
  • Строка, представляющая коэффициент масштабирования (например, "2.0")

Твоя задача:

  1. Определить структуру Rectangle с двумя полями: Width (float64) и Height (float64)
  2. Создать метод с именем area с получателем-значением, который вычисляет и возвращает площадь прямоугольника (ширина × высота)
  3. Создать метод с именем scale с получателем-указателем, который умножает ширину и высоту на заданный коэффициент масштабирования
  4. Разобрать входные данные, чтобы создать экземпляр Rectangle
  5. Вывести начальную площадь в формате: "Initial area: [area]"
  6. Вызвать метод scale с коэффициентом масштабирования
  7. Вывести площадь после масштабирования в формате: "Scaled area: [area]"

Значения площади должны отображаться целыми числами, если они целые (например, 15, а не 15.0), но с десятичными знаками, если это необходимо (например, 15.5). Это задание демонстрирует основной принцип: используй получатели-значения для методов, которые только читают данные (например, при вычислении площади), и получатели-указатели для методов, которые изменяют исходную структуру (например, при масштабировании размеров).

Попробуйте сами

package main

import (
	"fmt"
	"strconv"
)

// TODO: Определите здесь структуру Rectangle

// TODO: Реализуйте здесь метод area с получателем по значению

// TODO: Реализуйте здесь метод scale с получателем-указателем

func main() {
	// Считайте входные данные
	var widthStr string
	var heightStr string
	var scaleStr string
	fmt.Scanln(&widthStr)
	fmt.Scanln(&heightStr)
	fmt.Scanln(&scaleStr)
	
	// Преобразуйте входные данные в float64
	width, _ := strconv.ParseFloat(widthStr, 64)
	height, _ := strconv.ParseFloat(heightStr, 64)
	scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
	
	// TODO: Создайте экземпляр Rectangle и реализуйте решение ниже
	
	// Выведите начальную площадь
	// fmt.Printf("Initial area: %.0f\n", initialArea) // Используйте этот формат для вывода
	
	// Масштабируйте прямоугольник
	
	// Выведите площадь после масштабирования
	// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Используйте этот формат для вывода
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go