Menu
Coddy logo textTech

סיכום – בניית כלי עזר

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

challenge icon

אתגר

קל

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

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

  • מחרוזת המכילה מפרטים של פונקציות בתבנית "function1:description1,function2:description2" (לדוגמה, "Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase")
  • מחרוזת המכילה מחרוזות בדיקה המופרדות באמצעות קווים אנכיים בתבנית "string1|string2|string3" (לדוגמה, "hello|Go Programming|WORLD")

עליכם:

  1. ליצור חבילת stringutil באמצעות ההכרזה package stringutil
  2. לנתח את הקלט הראשון באמצעות פיצול לפי פסיקים כדי לקבל מפרט נפרד לכל פונקציה
  3. עבור כל מפרט של פונקציה, לפצל לפי נקודתיים כדי לקבל את שם הפונקציה ואת התיאור
  4. לממש את הפונקציות המיוצאות הבאות בחבילת stringutil שלכם:
    • Reverse(s string) string - מחזירה את המחרוזת כאשר התווים בה מסודרים בסדר הפוך
    • ToUpper(s string) string - מחזירה את המחרוזת לאחר המרתה לאותיות גדולות
    • ToLower(s string) string - מחזירה את המחרוזת לאחר המרתה לאותיות קטנות
    • Length(s string) int - מחזירה את אורך המחרוזת
  5. לייבא את חבילת stringutil בתוכנית הראשית שלכם
  6. להציג את כותרת החבילה: "=== STRINGUTIL PACKAGE DEMONSTRATION ==="
  7. להציג את הפונקציות הזמינות:
    • "Available functions in stringutil package:"
    • עבור כל פונקציה מהקלט הראשון: "- [function_name]: [description]"
  8. לנתח את הקלט השני באמצעות פיצול לפי קווים אנכיים כדי לקבל מחרוזות בדיקה נפרדות
  9. להציג את כותרת הבדיקות: "Testing stringutil functions:"
  10. להדגים את כל הפונקציות עבור כל מחרוזת בדיקה:
    • "Testing with: \"[test_string]\""
    • " stringutil.Reverse: \"[reversed_result]\""
    • " stringutil.ToUpper: \"[uppercase_result]\""
    • " stringutil.ToLower: \"[lowercase_result]\""
    • " stringutil.Length: [length_result]"
  11. לחשב ולהציג נתונים סטטיסטיים:
    • "=== STATISTICS ==="
    • "Total test strings processed: [number_of_test_strings]"
    • "Functions available in package: [number_of_functions_from_first_input]"
    • "Total function calls made: [total_function_calls]"
  12. להציג את המחרוזות הארוכה והקצרה ביותר:
    • "Longest string: \"[longest_string]\" (length: [length])"
    • "Shortest string: \"[shortest_string]\" (length: [length])"
  13. להציג את הודעת הסיום: "Package demonstration completed successfully"

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

נסו בעצמכם

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

// TODO: צור כאן את הפונקציות של חבילת stringutil
// מכיוון שאי אפשר להשתמש בקבצים נפרדים, הגדר את הפונקציות ישירות
// בדרך כלל הן היו נמצאות בקובץ חבילה נפרד

// func Reverse(s string) string {
//     // המר ל-runes, הפוך את הסדר והמר בחזרה ל-string
// }

// func ToUpper(s string) string {
//     // השתמש ב-strings.ToUpper
// }

// func ToLower(s string) string {
//     // השתמש ב-strings.ToLower
// }

// func Length(s string) int {
//     // החזר את len(s)
// }

func main() {
	// קרא את הקלט באמצעות bufio.Scanner כדי לטפל כראוי ברווחים
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	functionSpecs := scanner.Text()
	
	scanner.Scan()
	testStrings := scanner.Text()
	
	// נתחו את מפרטי הפונקציות
	funcList := strings.Split(functionSpecs, ",")
	
	// נתחו את מחרוזות הבדיקה
	testList := strings.Split(testStrings, "|")
	
	// TODO: כתבו את הקוד שלכם למטה
	// 1. הציגו את כותרת החבילה
	// 2. הציגו את הפונקציות הזמינות מתוך funcList (בדקו את אורכי המערכים)
	// 3. בדקו את כל הפונקציות עם כל מחרוזת בדיקה
	// 4. חשבו והציגו נתונים סטטיסטיים
	// 5. מצאו והציגו את המחרוזות הארוכה והקצרה ביותר (בדקו אם יש איברים ב-testList)
	// 6. הציגו הודעת סיום
	
	// זכרו להשתמש בפונקציות של החבילה stringutil, למשל:
	// Reverse(testString)
	// ToUpper(testString)
	// ToLower(testString)
	// Length(testString)
}

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

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