Menu
Coddy logo textTech

מקטעים אחרים

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

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

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

let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // כך נקבל את [2, 3, 4]
let full_slice: &[i32] = &numbers;  // זה מפנה למערך כולו

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

let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // זה נותן לנו [10, 20]
challenge icon

אתגר

קל

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

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

דרישות:

  • יש לקרוא את הקלט הראשון (מספרים המופרדים בפסיקים) ולהסיר רווחים לבנים
  • יש לפצל את הקלט לפי פסיקים ולנתח כל מספר כ-i32
  • יש ליצור וקטור מהמספרים האלה
  • יש לקרוא את הקלט השני (שני מספרים המופרדים ברווח) ולהסיר רווחים לבנים
  • יש לפצל את הקלט השני לפי רווח כדי לקבל את אינדקס ההתחלה ואת אינדקס הסיום
  • יש לנתח את שני האינדקסים כ-usize
  • יש ליצור פרוסה מהווקטור באמצעות תחביר הטווח &vec[start..end]
  • יש לקרוא את הקלט השלישי (האינדקס שאליו יש לגשת) ולהסיר רווחים לבנים
  • יש לנתח את האינדקס כ-usize
  • יש לגשת לאיבר באינדקס שצוין מתוך הפרוסה
  • יש להדפיס את האיבר שאליו ניגשו

קלט:

  • שורה ראשונה: מספרים המופרדים בפסיקים (לדוגמה, 10,20,30,40,50)
  • שורה שנייה: שני מספרים המופרדים ברווח (לדוגמה, 1 4)
  • שורה שלישית: מספר אינדקס (לדוגמה, 2)

פלט:

  • האיבר באינדקס שצוין מתוך הפרוסה

נסו בעצמכם

use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // קרא את הקלט הראשון (מספרים מופרדים בפסיקים)
    let first_input = lines.next().unwrap().unwrap();
    
    // קרא את הקלט השני (אינדקסי ההתחלה והסיום)
    let second_input = lines.next().unwrap().unwrap();
    
    // קרא את הקלט השלישי (האינדקס שאליו יש לגשת)
    let third_input = lines.next().unwrap().unwrap();
    
    // TODO: כתוב את הקוד שלך למטה
    // נתח את המספרים המופרדים בפסיקים וצור וקטור
    // נתח את אינדקסי ההתחלה והסיום
    // צור פרוסה מהווקטור
    // גש לאיבר באינדקס שצוין מתוך הפרוסה
    
    // הדפס את התוצאה
    // println!("{}", result);
}
quiz iconבחנו את עצמכם

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

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

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