הקוד הסופי
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 19 מתוך 66.
אתגר
קלתקבלו ארבעה קלטים המייצגים תהליך עבודה מלא לניהול רשימת משימות: ראשית, רשימה של משימות התחלתיות המופרדות בפסיקים; שנית, משימה חדשה להוספה; שלישית, מספר המשימה להצגה (אינדקס מבוסס 1); ורביעית, מספר המשימה להסרה (אינדקס מבוסס 1). צרו מנהל רשימת משימות מלא שמבצע את כל הפעולות האלה ומציג את המצב הסופי.
דרישות:
- קראו את הקלט הראשון, שמכיל תיאורי משימות המופרדים בפסיקים (לדוגמה,
Buy groceries,Call dentist,Finish homework) - פצלו את המחרוזת לפי פסיקים וצרו וקטור שניתן לשינוי עם המשימות ההתחלתיות האלה
- קראו את הקלט השני והוסיפו את המשימה החדשה הזאת לווקטור באמצעות
.push() - קראו את הקלט השלישי והמירו אותו למספר שלם (מספר המשימה להצגה, מבוסס 1)
- קראו את הקלט הרביעי והמירו אותו למספר שלם (מספר המשימה להסרה, מבוסס 1)
- הסירו את המשימה שצוינה על ידי המרת האינדקס המבוסס על 1 לאינדקס המבוסס על 0 ושימוש ב-
.remove() - הדפיסו
Total tasks: Xכאשר X הוא המספר הסופי של המשימות - הדפיסו
Viewing task: Yכאשר Y הוא מספר המשימה שהתבקשתם להציג - עברו על רשימת המשימות הסופית והדפיסו כל משימה עם המספר שלה (מבוסס 1)
- עבור המשימה שתואמת למספר ההצגה (לאחר התאמות בעקבות ההסרה), הדפיסו:
[X] [task description] (selected) - עבור כל שאר המשימות, הדפיסו:
[X] [task description]
קלט:
- שורה ראשונה: תיאורי משימות המופרדים בפסיקים (לדוגמה,
Buy groceries,Call dentist,Finish homework) - שורה שנייה: משימה חדשה להוספה (לדוגמה,
Study for exam) - שורה שלישית: מספר שלם המייצג את מספר המשימה להצגה (אינדקס מבוסס 1)
- שורה רביעית: מספר שלם המייצג את מספר המשימה להסרה (אינדקס מבוסס 1)
פלט:
- שורה ראשונה:
Total tasks: Xכאשר X הוא המספר הסופי של המשימות - שורה שנייה:
Viewing task: Yכאשר Y הוא מספר המשימה שהתבקשתם להציג - השורות הבאות: כל משימה עם המספר שלה בתבנית
[X] [task description] - יש להוסיף
(selected)למשימה שנבחרה (התואמת למספר ההצגה)
נסו בעצמכם
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// קרא את המשימות הראשוניות המופרדות בפסיקים
let initial_tasks = lines.next().unwrap().unwrap();
// קרא את המשימה החדשה שיש להוסיף
let new_task = lines.next().unwrap().unwrap();
// קרא את מספר המשימה להצגה (המספור מתחיל ב-1)
let view_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// קרא את מספר המשימה להסרה (המספור מתחיל ב-1)
let remove_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// TODO: כתוב את הקוד שלך למטה
// 1. פצל את initial_tasks לפי פסיקים וצור וקטור שניתן לשינוי
// 2. הוסף את new_task לווקטור
// 3. הסר את המשימה שמספרה remove_number (המר לאינדקס שמתחיל ב-0)
// 4. הדפס את מספר המשימות הכולל ואת המידע על המשימה המוצגת
// 5. עבור על הרשימה הסופית והדפס כל משימה
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מיליםתרגלו בעצמכם: קומפיילר Rust אונליין