Menu
Coddy logo textTech

Podsumowanie — działanie struktur

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 11 z 68.

challenge icon

Wyzwanie

Łatwy

W tym wyzwaniu poćwiczysz implementowanie odbiorników wartościowych i wskaźnikowych, tworząc prosty system zarządzania prostokątami. Utworzysz strukturę Rectangle i zdefiniujesz dwa różne typy metod, które pokażą, kiedy używać każdego z tych typów odbiorników.

Otrzymasz trzy dane wejściowe:

  • Ciąg znaków reprezentujący szerokość prostokąta (np. "5.0")
  • Ciąg znaków reprezentujący wysokość prostokąta (np. "3.0")
  • Ciąg znaków reprezentujący współczynnik skalowania (np. "2.0")

Twoim zadaniem jest:

  1. Zdefiniować strukturę Rectangle z dwoma polami: Width (float64) i Height (float64)
  2. Utworzyć metodę o nazwie area z odbiornikiem wartościowym, która oblicza i zwraca pole prostokąta (szerokość × wysokość)
  3. Utworzyć metodę o nazwie scale z odbiornikiem wskaźnikowym, która mnoży szerokość i wysokość przez podany współczynnik skalowania
  4. Przetworzyć dane wejściowe, aby utworzyć instancję Rectangle
  5. Wyświetlić początkowe pole w formacie: "Initial area: [area]"
  6. Wywołać metodę scale z podanym współczynnikiem skalowania
  7. Wyświetlić przeskalowane pole w formacie: "Scaled area: [area]"

Wartości pola powinny być wyświetlane jako liczby całkowite, gdy są liczbami całkowitymi (np. 15 zamiast 15.0), a w razie potrzeby z miejscami po przecinku (np. 15.5). To wyzwanie pokazuje kluczową zasadę: używaj odbiorników wartościowych w metodach, które tylko odczytują dane (takich jak obliczanie pola), a odbiorników wskaźnikowych w metodach, które modyfikują oryginalną strukturę (takich jak skalowanie wymiarów).

Spróbuj swoich sił

package main

import (
	"fmt"
	"strconv"
)

// TODO: Zdefiniuj tutaj strukturę Rectangle

// TODO: Zaimplementuj tutaj metodę area z odbiornikiem wartościowym

// TODO: Zaimplementuj tutaj metodę scale z odbiornikiem wskaźnikowym

func main() {
	// Wczytaj dane wejściowe
	var widthStr string
	var heightStr string
	var scaleStr string
	fmt.Scanln(&widthStr)
	fmt.Scanln(&heightStr)
	fmt.Scanln(&scaleStr)
	
	// Przekonwertuj dane wejściowe na float64
	width, _ := strconv.ParseFloat(widthStr, 64)
	height, _ := strconv.ParseFloat(heightStr, 64)
	scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
	
	// TODO: Utwórz instancję Rectangle i zaimplementuj rozwiązanie poniżej
	
	// Wypisz początkowe pole powierzchni
	// fmt.Printf("Initial area: %.0f\n", initialArea) // Użyj tego formatu dla danych wyjściowych
	
	// Przeskaluj prostokąt
	
	// Wypisz pole powierzchni po przeskalowaniu
	// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Użyj tego formatu dla danych wyjściowych
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online