Podsumowanie — działanie struktur
Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 11 z 68.
Wyzwanie
ŁatwyW 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:
- Zdefiniować strukturę
Rectanglez dwoma polami:Width(float64) iHeight(float64) - Utworzyć metodę o nazwie
areaz odbiornikiem wartościowym, która oblicza i zwraca pole prostokąta (szerokość × wysokość) - Utworzyć metodę o nazwie
scalez odbiornikiem wskaźnikowym, która mnoży szerokość i wysokość przez podany współczynnik skalowania - Przetworzyć dane wejściowe, aby utworzyć instancję
Rectangle - Wyświetlić początkowe pole w formacie:
"Initial area: [area]" - Wywołać metodę
scalez podanym współczynnikiem skalowania - 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
1Zaawansowane sterowanie przepływem
Instrukcja switch z `fallthrough`Przerywanie zagnieżdżonych pętliKontynuowanie określonej pętliInstrukcja `goto`Podsumowanie — zaawansowane sterowanie pętlami4Projekt: Prosta lista zadań
Konfiguracja projektuDodawanie zadania2Struktury i metody
Definiowanie metod dla strukturOdbiorniki przez wartośćOdbiorniki przez wskaźnikWybór odbiornikówMetody a funkcjePodsumowanie — działanie struktur5Mapy w szczegółach
Mapy strukturWskaźniki jako wartości mapSprawdzanie, czy mapy są nilPorównywanie mapPodsumowanie — licznik częstości słów3Interfejsy (podstawy)
Czym jest interfejs?Definiowanie interfejsuImplementowanie interfejsuUżywanie typów interfejsowychPusty interfejsAsercje typuPrzełącznik typówPodsumowanie – kształty i zachowaniaPoćwicz samodzielnie: Kompilator Go online