Menu
Coddy logo textTech

הוספת משימה

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

challenge icon

אתגר

קל

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

הערה חשובה: מכיוון ששמות משימות עשויים להכיל רווחים (כמו "Buy groceries"), יהיה עליך להשתמש ב-bufio.Scanner כדי לקרוא שורות קלט שלמות. הפונקציה fmt.Scanln מפסיקה לקרוא ברווח הראשון, דבר שיפגע בשמות של משימות שמכילים רווחים. השתמש ב-bufio.NewScanner(os.Stdin) וקרא ל-scanner.Scan() ולאחר מכן ל-scanner.Text() כדי לקרוא שורות שלמות.

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

  • מחרוזת שמייצגת את מספר המשימות הקיימות (לדוגמה, "2")
  • מחרוזת שמכילה שמות משימות מופרדים בפסיקים (לדוגמה, "Buy groceries,Call dentist,Finish project")

המשימה שלך היא:

  1. להגדיר את אותו מבנה Task מהאתגר הקודם, עם השדות Name (מחרוזת) ו-Completed (בוליאני)
  2. ליצור פונקציה בשם addTask שמקבלת פרוסה של מבני Task ושם משימה (מחרוזת) כפרמטרים
  3. הפונקציה addTask צריכה להחזיר פרוסה חדשה עם המשימה שנוספה (יש להגדיר את Completed של המשימה החדשה ל-false)
  4. להשתמש ב-bufio.Scanner כדי לקרוא כראוי את שורות הקלט ולתמוך בשמות משימות עם רווחים
  5. ליצור פרוסת משימות התחלתית בהתאם למספר המשימות הקיימות שמצוין בקלט הראשון:
    • אם המספר הוא "0", להתחיל בפרוסה ריקה
    • אם המספר גדול מ-"0", ליצור את אותו מספר של משימות מציינות מקום עם שמות כמו "Existing Task 1", "Existing Task 2" וכן הלאה, כשכולן מסומנות כלא הושלמו
  6. לנתח את שמות המשימות המופרדים בפסיקים מתוך הקלט השני
  7. להשתמש בפונקציה addTask שלך כדי להוסיף כל משימה חדשה לפרוסה
  8. להדפיס כל משימה בפרוסה הסופית בפורמט: "Task: [name], Completed: [true/false]"
  9. להדפיס את המספר הכולל של המשימות בפורמט: "Total tasks: [count]"

לדוגמה, אם יש לך משימה קיימת אחת וברצונך להוסיף "Buy groceries,Call dentist", הפלט שלך צריך להציג תחילה את המשימה הקיימת, אחריה את שתי המשימות החדשות ולבסוף את המספר הכולל. האתגר הזה מתרגל מניפולציה של פרוסות באמצעות הפונקציה append, ומדגים כיצד לבנות פונקציונליות שמרחיבה את מבני הנתונים שלך.

נסו בעצמכם

package main

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

type Task struct {
	Name      string
	Completed bool
}

// TODO: צרו כאן את הפונקציה addTask

func main() {
	// צרו scanner לקריאת שורות קלט
	scanner := bufio.NewScanner(os.Stdin)
	
	// קראו את מספר המשימות הקיימות
	scanner.Scan()
	existingTasksStr := scanner.Text()
	
	// קראו את שמות המשימות
	scanner.Scan()
	taskNamesStr := scanner.Text()
	
	// TODO: השלימו את המימוש
	// 1. המירו את existingTasksStr למספר שלם
	// 2. צרו slice התחלתי עם המשימות הקיימות
	// 3. נתחו את taskNamesStr והוסיפו משימות חדשות
	// 4. הדפיסו את כל המשימות ואת המספר הכולל שלהן
}

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

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