# מערך שיעור: קלט/פלט בסיסי📋 מערך מרצה

משך: 1.5 שעות אקדמיות (68 דקות).

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

בסוף השיעור הסטודנטים צריכים: להשתמש ב-`Console.ReadLine` לקבלת קלט, להסביר למה נדרשת המרה מפורשת, ולהעדיף `TryParse` על פני `Parse` בקוד שמטפל בקלט משתמש.

דגש קריטי: תמיד להדגים תרחיש קלט שגוי (`"abc"` במקום מספר) בזמן ההרצה — זו הנקודה שהופכת את הצורך ב-`TryParse` למוחשי, לא תיאורטי.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הראו `Console.ReadLine()` בפעולה — משהו "קורה" רק אחרי הקלדה+Enter |
| הבעיה: string לא int | 10 דקות | נסו לחבר תוצאת ReadLine למספר — שגיאת קומפילציה |
| הרעיון: המרה מפורשת | 10 דקות | `int.Parse` — הדגימו על קלט תקין |
| הבעיה: קלט שגוי מקריס | 10 דקות | הזינו `"abc"` ל-`int.Parse` בשידור חי — התוכנית קורסת |
| הרעיון: TryParse | 15 דקות | פתרון: `TryParse` + `out` — בלי קריסה |
| תרגול מודרך | 15 דקות | תרגיל 1+2 מדף השיעור |
| שאלות + סיכום | 3 דקות | חיזרו על "כל קלט ממשתמש = TryParse כברירת מחדל" |

---

## דגשים להעברת השיעור

- הקריסה החיה על `int.Parse("abc")` היא הרגע הכי משכנע בשיעור — אל תדלגו עליה, גם אם זה "מיותר" מבחינתכם.
- `out` יילמד בפירוט בשיעור נפרד — כאן מספיק להראות אותו כ"תחביר שצריך כדי לקבל תשובה בטוחה מ-TryParse", בלי להסביר לעומק את מנגנון ה-reference שמאחוריו.
- Interpolated strings (`$"..."`) שווה להראות בהשוואה לחיבור עם `+` — ההבדל בקריאות בולט מיד.

---

## מושגים

**`Console.ReadLine()`** — קריאת שורת טקסט מהמשתמש; מחזירה `string`.
**`int.Parse`** — המרת `string` ל-`int`; זורקת חריגה על קלט לא תקין.
**`int.TryParse`** — המרה בטוחה; מחזירה `bool` הצלחה/כישלון.
**Interpolated String** — מחרוזת עם `$` שמטמיעה ביטויי C# בתוכה עם `{}`.

---

## תרגיל חשיבה

**שאלת פתיחה:** "אם אתם בונים אפליקציית קופה שמקבלת מהקופאי סכום כסף בהקלדה — מה קורה אם הוא ילחץ בטעות על אות במקום מספר? מה אתם רוצים שיקרה?"

**מהלך:** תנו לסטודנטים לחשוב על 2-3 תרחישי כישלון אפשריים (הקלדה שגויה, שדה ריק, רווחים מיותרים). הובילו לתובנה: קלט ממשתמש הוא **תמיד** בלתי-אמין, ולכן הטיפול בו חייב להיות מוגן מראש, לא "אחרי שזה קרס בפעם הראשונה".

**מה המרצה מראה בסוף:** הריצו קוד עם `int.Parse` על קלט שגוי — קריסה עם `FormatException` לא ידידותי. מיד אחר כך, אותו תרחיש בדיוק עם `TryParse` — הודעת שגיאה מנוסחת יפה, והתוכנית ממשיכה לרוץ כרגיל.
