Menu
Coddy logo textTech

בודק מספרים פשוט

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

challenge icon

אתגר

קל

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

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

  • מחרוזת המכילה מספרים לאימות, מופרדים בפסיקים (למשל, "45,150,25,200,75")
  • מחרוזת המכילה את טווח האימות בפורמט "min:max" (למשל, "1:100")

עליכם:

  1. להגדיר ממשק Validator עם מתודה יחידה: Validate() error
  2. ליצור טיפוס שגיאה מותאם אישית בשם struct ValidationError עם שני שדות: Value (int) ו-Message (string)
  3. לממש עבור ValidationError את המתודה Error() string, שמחזירה את ההודעה בפורמט: "Validation failed: [message] (value: [value])"
  4. ליצור struct בשם NumberValidator עם שלושה שדות: Number (int), Min (int) ו-Max (int)
  5. לממש עבור NumberValidator את המתודה Validate() error, כך ש:
    • היא תחזיר nil אם המספר נמצא בטווח התקין (כולל הגבולות)
    • היא תחזיר ValidationError עם ההודעה "number below minimum range" אם המספר קטן מהמינימום
    • היא תחזיר ValidationError עם ההודעה "number above maximum range" אם המספר גדול מהמקסימום
  6. לנתח את הקלט הראשון באמצעות פיצול לפי פסיקים, כדי לקבל מחרוזות של מספרים נפרדים
  7. לנתח את הקלט השני באמצעות פיצול לפי נקודתיים, כדי לחלץ את ערכי המינימום והמקסימום
  8. להמיר את כל ערכי המחרוזת למספרים שלמים באמצעות החבילה strconv
  9. להציג את כותרת האימות: "=== NUMBER VALIDATION SYSTEM ==="
  10. להציג את פרמטרי האימות: "Validating numbers in range [min] to [max]"
  11. עבור כל מספר:
    • ליצור מופע של NumberValidator עם ערכי המספר והטווח
    • לקרוא למתודה Validate() של המאמת
    • אם האימות מצליח (השגיאה היא nil), להציג: "✓ [number] is valid"
    • אם האימות נכשל (השגיאה אינה nil), להציג: "✗ [error_message]"
  12. להציג סיכום אימות:
    • "=== VALIDATION SUMMARY ==="
    • "Total numbers checked: [total_count]"
    • "Valid numbers: [valid_count]"
    • "Invalid numbers: [invalid_count]"
  13. להציג את הודעת הסיום: "Number validation completed successfully"

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

נסו בעצמכם

package main

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

func main() {
	// קראו את הקלט
	var numbersInput string
	var rangeInput string
	fmt.Scanln(&numbersInput)
	fmt.Scanln(&rangeInput)
	
	// נתחו את הקלטים
	numberStrings := strings.Split(numbersInput, ",")
	rangeParts := strings.Split(rangeInput, ":")
	
	// המירו את ערכי הטווח למספרים שלמים
	min, _ := strconv.Atoi(rangeParts[0])
	max, _ := strconv.Atoi(rangeParts[1])
	
	// TODO: כתבו את הקוד שלכם למטה
	// 1. הגדירו את הממשק Validator
	// 2. צרו את המבנה ValidationError וממשו את המתודה Error()
	// 3. צרו את המבנה NumberValidator וממשו את המתודה Validate()
	// 4. עבדו כל מספר ובדקו את תקינותו
	// 5. הציגו את התוצאות ואת הסיכום
	
	// הציגו את כותרת בדיקת התקינות
	fmt.Println("=== NUMBER VALIDATION SYSTEM ===")
	fmt.Printf("Validating numbers in range %d to %d\n", min, max)
	
	// עבדו כאן כל מספר
	
	// הציגו את סיכום בדיקת התקינות
	fmt.Println("=== VALIDATION SUMMARY ===")
	// הוסף כאן את פלט הסיכום
	
	fmt.Println("Number validation completed successfully")
}

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

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