Повторение: поведение структур
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 11 из 68.
Задание
ЛегкоВ этом задании ты потренируешься реализовывать получатели-значения и получатели-указатели, создав простую систему управления прямоугольниками. Ты создашь структуру Rectangle и определишь два разных типа методов, которые покажут, когда использовать каждый тип получателя.
Тебе будут переданы три входных значения:
- Строка, представляющая ширину прямоугольника (например,
"5.0") - Строка, представляющая высоту прямоугольника (например,
"3.0") - Строка, представляющая коэффициент масштабирования (например,
"2.0")
Твоя задача:
- Определить структуру
Rectangleс двумя полями:Width(float64) иHeight(float64) - Создать метод с именем
areaс получателем-значением, который вычисляет и возвращает площадь прямоугольника (ширина × высота) - Создать метод с именем
scaleс получателем-указателем, который умножает ширину и высоту на заданный коэффициент масштабирования - Разобрать входные данные, чтобы создать экземпляр
Rectangle - Вывести начальную площадь в формате:
"Initial area: [area]" - Вызвать метод
scaleс коэффициентом масштабирования - Вывести площадь после масштабирования в формате:
"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) // Используйте этот формат для вывода
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go