סיכום — התנהגות המבנים
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-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מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין