Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по 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 с получателем значения (value receiver)

// TODO: Реализуйте здесь метод scale с получателем указателя (pointer receiver)

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) // Используйте этот формат для вывода
}

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