Menu
Coddy logo textTech

משך זמן

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 62 מתוך 68.

כשעובדים עם זמן ב-Go, לעיתים קרובות צריך לייצג פרקי זמן — כמו "5 דקות" או "שעתיים". Go מספקת את הטיפוס time.Duration במיוחד למטרה זו.

time.Duration מייצג פרק זמן בין שני רגעים. Go כוללת כמה קבועים מוגדרים מראש שהופכים את יצירת משכי הזמן לפשוטה וקריאה:

tenMinutes := 10 * time.Minute
twoHours := 2 * time.Hour
thirtySeconds := 30 * time.Second

קבועי משך הזמן הנפוצים ביותר הם time.Nanosecond, time.Microsecond, time.Millisecond, time.Second, time.Minute ו־time.Hour. אפשר להכפיל את הקבועים האלה במספרים שלמים כדי ליצור את משך הזמן המדויק שנחוץ לך.

ערכי משך חיוניים לחישובי זמן, לתזמון פעולות ולשליטה בתזמון בתוכניות שלך. הם משתלבים בצורה חלקה עם פונקציות זמן אחרות ומספקים דרך ברורה וקריאה לביטוי פרקי זמן בקוד שלך.

challenge icon

אתגר

קל

צרו טיימר לאימון שמשתמש ב־time.Duration כדי לעקוב אחר מרווחי זמן שונים של תרגילים ומנוחות. האתגר הזה יבחן את היכולת שלכם ליצור ערכי משך באמצעות הקבועים המוגדרים מראש של Go ולבצע איתם חישובים.

תקבלו שתי קלטים:

  • מחרוזת שמכילה הגדרות של תרגילים בפורמט "exercise1:duration_value:duration_unit,exercise2:duration_value:duration_unit" (למשל, "Push-ups:30:Second,Plank:2:Minute,Squats:45:Second")
  • מחרוזת שמכילה מידע על זמן המנוחה בפורמט "rest_duration_value:rest_duration_unit" (למשל, "15:Second")

עליכם לבצע את הפעולות הבאות:

  1. נתחו את הקלט הראשון באמצעות פיצול לפי פסיקים, כדי לקבל רשומות נפרדות של תרגילים
  2. עבור כל רשומת תרגיל, פצלו לפי נקודתיים כדי לחלץ את שם התרגיל, ערך המשך (כמחרוזת) ויחידת המשך
  3. נתחו את הקלט השני באמצעות פיצול לפי נקודתיים, כדי לקבל את ערך משך המנוחה ואת היחידה
  4. המירו את ערכי המשך ממחרוזות למספרים שלמים וצרו אובייקטים מסוג time.Duration באמצעות הקבועים המתאימים:
    • עבור "Second": הכפילו ב־time.Second
    • עבור "Minute": הכפילו ב־time.Minute
    • עבור "Hour": הכפילו ב־time.Hour
  5. הציגו את כותרת היישום: "=== WORKOUT SESSION TIMER ==="
  6. הציגו את הגדרת האימון: "Setting up workout session..."
  7. עבור כל תרגיל, הציגו: "Exercise: [exercise_name] - Duration: [duration_object]"
  8. הציגו את זמן המנוחה: "Rest period between exercises: [rest_duration_object]"
  9. חשבו והציגו פירוט של האימון:
    • "=== SESSION BREAKDOWN ==="
    • עבור כל תרגיל: "[exercise_name]: [duration_in_seconds] seconds"
    • "Rest periods: [rest_duration_in_seconds] seconds each"
  10. חשבו את משך האימון הכולל (סכום משכי כל התרגילים וזמני המנוחה שבין התרגילים):
    • "=== TIMING CALCULATIONS ==="
    • "Total exercise time: [total_exercise_duration_object]"
    • "Total rest time: [total_rest_duration_object]" (זמני המנוחה בין התרגילים, כלומר אחד פחות ממספר התרגילים)
    • "Complete session duration: [total_session_duration_object]"
  11. הציגו את הסטטיסטיקה של האימון:
    • "=== SESSION STATISTICS ==="
    • "Number of exercises: [number_of_exercises]"
    • "Longest exercise: [longest_exercise_name] ([longest_duration_object])"
    • "Shortest exercise: [shortest_exercise_name] ([shortest_duration_object])"
    • "Average exercise duration: [average_duration_in_seconds] seconds"
  12. הציגו המרות של יחידות זמן:
    • "=== TIME CONVERSIONS ==="
    • "Session duration in minutes: [total_minutes]" (המירו את משך האימון הכולל לדקות)
    • "Session duration in hours: [total_hours]" (המירו את משך האימון הכולל לשעות והציגו כמספר עשרוני)
  13. הציגו את הודעת הסיום: "Workout session timer configured successfully"

השתמשו בחבילה time לעבודה עם משכי זמן, בחבילה strings לפיצול מחרוזות הקלט, בחבילה strconv להמרת מספרים במחרוזות למספרים שלמים, ובחבילה fmt לעיצוב הפלט. זכרו שאפשר לחבר ערכים מסוג time.Duration ולהמיר אותם ליחידות שונות באמצעות מתודות כמו Seconds(), Minutes() ו־Hours(). האתגר הזה מדגים איך ליצור ולתפעל ערכי משך עבור יישומי תזמון.

נסו בעצמכם

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// קראו את הקלט
	var exerciseInput string
	var restInput string
	fmt.Scanln(&exerciseInput)
	fmt.Scanln(&restInput)
	
	// נתחו את התרגילים מתוך הקלט
	exerciseEntries := strings.Split(exerciseInput, ",")
	
	// נתחו את משך המנוחה מתוך הקלט
	restParts := strings.Split(restInput, ":")
	
	// TODO: כתבו את הקוד שלכם למטה
	// 1. נתחו כל רשומת תרגיל כדי לחלץ את השם, ערך משך הזמן והיחידה
	// 2. המירו את ערכי משך הזמן למספרים שלמים וצרו אובייקטים מסוג time.Duration
	// 3. נתחו את משך המנוחה וצרו אובייקט מסוג time.Duration
	// 4. הציגו את פרטי אימון הכושר ואת החישובים
	// 5. חשבו נתונים סטטיסטיים של אימון הכושר והמרות זמן
	
	// זכרו להציג את כל המידע הנדרש כפי שמפורט באתגר
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Go אונליין