פרק 1 - מבוא לשפת #C, הדפסה ומשתנים


התקנת הסביבה, הדפסה, משתנים, המרות וקלט

בפרק זה נכיר את שפת C#, סביבת הפיתוח Visual Studio, נלמד על משתנים, קלט, פלט והמרות בין סוגים שונים של משתנים.

מינהלות - רישום למצפן ולקמפוס

רישום למצפן. למורים שעדיין לא נרשמו

קלאסרום של תל-אביב (גיא)

קישור לרישום לקמפוס

קישור לקורס יסודות בקמפוס

מצגת החשיפה של ההשתלמות

התקנה ועבודה ב-VS2022

סביבת העבודה (Visual Studio)

התקינו את התוכנה בזמנכם החופשי. אני אוכל לעזור ל-3-4 שרוצים עזרה ומעדיפים להתחיל התקנה במהלך השיעור.

סביבת הפיתוח שלנו תהיה Visual Studio 2022, המשמשת לכתיבת קוד בשפת C#. כנסו לקישור והתקינו את גרסת community

שימו לב: הקישור הוא לגרסת ה-Community. בכל גרסה אחרת תתקעו בבעיית רישוי לאחר מספר שבועות

התקנת ויז’ואל סטודיו 2022 Community

חשוב לסמן את ה-Workload המסומן כאן alt text

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

שלבי יצירת תוכנית חדשה ב-Visual Studio 2022:

  1. פתחו פרויקט חדש מסוג Console App.
  2. יוצג לפניכם קוד התוכנית הבסיסית:
1
2
3
4
5
6
7
8
9
10
namespace ConsoleApp1 
{ 
    class Program 
    { 
        public static void Main(string[] args) 
        { 
            Console.WriteLine("Hello, World!"); 
        } 
    } 
} 

הריצו את התוכנית בלחיצה על מקש F5 או ⏵, וראו שהיא מדפיסה:

Hello, World!

הסבר נוסף: יצירת פרוייקט בויז’ואל סטודיו 2022

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

סביבות Online

בשיעור הראשון, עד להתקנת VS2022 במחשבים שלכם, נעבוד בסביבות Online. האתר המומלץ ל-C# נמצא בקישור הבא: netfiddle.. יש מורים שמעדיפים ללמד רק בסביבות Online.

סביבות אונליין נוספות

תכנית ראשונה

  1. כנסו לאתר netfiddle והריצו את התוכנית הראשונה:
1
2
3
4
5
6
7
8
public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Hello World");
        }
    }
    
  1. 🧪 לחצו פשוט על כפתור ההרצה ▶. ב-netfiddle וב-VS עובד גם הכפתור F5.

  2. 🧪 נסו וגלו כי ניתן לרשום רק נקודה אחרי המילה Console ולהשלים את הכתיבה על ידי בחירה (מופיעה רשימה שלמה של פקודות ותכונות איתן נוכל לעבוד). לא כולן עובדות בסביבות אונליין.

  3. 🧪 נסו להוסיף שורה ולהדפיס את השם שלכם מתחת לכיתוב Hello World.

משתנים והשמה

משתנה הוא תא בזיכרון המכיל ערך הניתן לשינוי.

דוגמאות להגדרת משתנים בשפת C#:

int age = 30; // משתנה המכיל מספר שלם
double average = 85.5; // משתנה המכיל מספר ממשי
string name = "Sara"; // משתנה המכיל מחרוזת

בשונה מפייתון חובה להכריז מראש על הטיפוס של כל משתנה. ולא ניתן לשנות את הטיפוס

הכרזה על משתנה לעומת השמה

ניתן להפריד בין שלב הכרזת המשתנה לבין שלב השמת הערך. לפעמים נכריז עליו ואז ניתן לו ערך בשלב מאוחר יותר.

int age; // age הכרזה על משתנה בשם
age = 30; // השמה של ערך לתוך המשתנה

הכרזה על כמה משתנים בשורה אחת

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

int a = 5, b = 10, c = 0; // int הכרזה והשמה לשלושה משתנים מסוג
double x, y, z; // הכרזה בלבד

אזהרה: כיוון ההשמה הוא מימין לשמאל. שימו לב: כשאנו כותבים ;x = 5, זה אומר “שים בתוך x את הערך 5” — כלומר הערך נמצא מימין, והמשתנה שאליו משייכים נמצא משמאל. זהו כיוון הפוך מההרגל בעברית, ולכן זו טעות נפוצה בקרב תלמידים במיוחד במקרים בהם ההשמה היא בין משתנים, כלומר: ;a = b

טיפוסי משתנים איתם נעבוד

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

טיפוס הסבר
int מספרים שלמים (ללא נקודה עשרונית)
double מספרים ממשיים (כוללים נקודה עשרונית)
char תו יחיד (למשל 'A', '%', '9')
string מחרוזת טקסט (רצף תווים)
bool ערך בוליאני: אמת או שקר (true או false)

שמות משתנים תמיד יתחילו באות קטנה. כל מילה חדשה, באות גדולה. למשל string firstName. בדומה להרבה שפות השפה היא case sensitive (כלומר יש התייחסות לאותיות קטנות וגדולות guy שונה מ- guY).

הדפסה וקלט מהמשתמש

נשתמש בפקודות Console לכתיבה ולקבלת קלט:

Console.Write("Enter your name: "); // פלט ובו בקשת קלט מהמשתמש
string name = Console.ReadLine(); // name קלט מהמשתמש והשמה לתוך המשתנה

Console.WriteLine("Hello, " + name); // פלט כולל מעבר שורה

אם המשתמש יכתוב “Dan”, הפלט יהיה:

Enter your name: Dan
Hello, Dan

פלט עברי בדרך כלל לא נתמך ב-Console לכן מומלץ לעבוד באנגלית.

המרת קלט מטקסט למספר

פקודת ()Console.ReadLine מחזירה תמיד מחרוזת. כדי להמיר מחרוזת למספר, נשתמש ב- ()int.Parse או ()double.Parse:

1
2
3
4
5
6
7
8
Console.Write("Enter your age: "); 
// `int` דוגמא לקלט והמרה שלו לתוך משתנה מטיפוס שלם
int age = int.Parse(Console.ReadLine()); 

// הסוגריים מאפשרים לבצע חישוב לפני ההדפסה
Console.WriteLine("Next year you will be " + (age + 1)); 
// ללא סוגריים נקבל שרשור מחרוזות
Console.WriteLine("Next year you will NOT be: " + age + 1); 

🧪 העתיקו את הקוד לסביבת העבודה. הריצו וצפו בהבדל בין שתי ההדפסות

חלוקה בשלמים

חלוקת שלם בשלם תתפרש תמיד כפעולת חלוקה בשלמים.

מספר_שלם / מספר_שלם, למשל:

\[10 / 3 = 3\]

כאשר המחלק או המחולק מטיפוס ממשי, טיפוס הערך המוחזר (התוצאה) הוא ממשי.

\[13 / 5 = 2\\ 13.0 / 5 = 2.6\\ 13 / 5.0 = 2.6\]

🧪 נסו גם אתם את הפקודה ;Console.WriteLine("Result is:" + 13/5) ואחר כך גם 13.0

חישובים והמרות (casting)

לעיתים נדרש להמיר משתנה מסוג אחד לאחר. נשתמש ב-casting:

1
2
3
4
5
6
int a = 5;
int b = 2;
double result = (double)a / b; // 2.5
double result2 = a / b; // 2
Console.WriteLine(result);
Console.WriteLine(result2); 

אופרטורים אריתמטיים

אופרטור סוג האופרטור תיאור דוגמה בקוד
+ אריתמטי חיבור int c = a + b;
- אריתמטי חיסור int d = a - b;
* אריתמטי כפל int e = a * b;
/ אריתמטי חילוק double f = a / (double)b;
% אריתמטי שארית חלוקה int r = a % b;

הרחבות - אופרטורים מיוחדים, בקשת קלט במהלך בחינה, שגיאות

אופרטורים מיוחדים

אופרטור תפקיד דוגמא לשימוש מקוצר פעולת השמה מקבילה
++ קידום ערך המשתנה ב-1 mone++ mone = mone + 1;
-- הקטנת ערך המשתנה ב-1 mone-- mone = mone - 1;
+= הגדלת ערך המשתנה בגודל המתואר באגף הימני price += 5; price = price + 5;
-= הקטנת ערך המשתנה בגודל המתואר באגף הימני price -= 9; price = price - 9;
*= הכפלת ערך המשתנה בגודל המתואר באגף הימני price *= 1.17; price = price * 1.17;
/= חילוק ערך המשתנה בגודל המתואר באגף הימני sum /= 5; sum = sum / 5;

קיימות שיטות שונות לקריאת קלט מהמשתמש, ותכנית הלימודים אינה מתייחסת אליהן באופן ספציפי. בבחינות הבגרות, בכל מקום שיהיה צורך בביצוע פעולת קלט, הצורך ימומש ויתועד כדלקמן: קריאה לפעולת קלט שקוראת ומדפיסה ערך מסוג int x = ...// int או, בקצרה קלוט מספר שלם // = int n בחינות נערכות בכתב יד עם חומר פתוח מודפס.

אזהרה: אם תקלידו קלט שאינו מספרי לפונקציית int.Parse, התוכנית תקרוס!

איננו מלמדים פונקציות המרה בטוחות כגון int.TryParse, ואיננו מלמדים לכידת שגיאות try catch

על ההבדלים בין C# ל- JAVA:

קישור לעמוד ההבדלים בקמפוס

הרחבה לגבי שמות משתנים

❌ תווים אסורים בשמות משתנים

תווים אסורים בשמות משתנים

! @ # $ % ^ & * ( ) - + = ~ ` [ ] { } \ | ; : ' " , . < > / ?
  • רווחים אסורים
  • ספרות (0-9) לא יכולות להופיע כתו ראשון.

✅ שמות משתנים חוקיים ב-C#

int myVar;
int _index; // משמש לסוגים מיוחדים לפי קונבנציה
int count2;
int ümlaut; // די גרוע
int @int;  // @ שם שהוא מילה שמורה, באמצעות מעקף @ ממש ממש רע

כלומר, הקוד שלהלן חוקי, אבל ממש ממש אסור לכתוב ככה:

int דירבלק = 7;
Console.WriteLine(דירבלק);

❌ שמות משתנים לא חוקיים ב-C#

int 1stValue;   // Starts with a digit ❌
int my-var;     // Hyphens are not allowed ❌
int class;      // "class" is a reserved keyword ❌
int full name;  // Space not allowed ❌
int %value;     // Special character ❌

טיפוסי משתנים נוספים שלא נלמד

יש בשפת C# עוד סוגים רבים של משתנים, אך הם אינם חלק מהתוכנית הלימודית שלנו:

  • short, byte, sbyte
  • float, decimal
  • long, ulong
  • BigInteger
  • nullable types: int?, double?, bool? ...
  • ועוד רבים נוספים…

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


שאלות ותשובות רלוונטיות משיעור 1
  1. מה משמעות כל השורות public Class program { public static void Main()}? אנחנו נשאיר אותן ונדרוש מתלמידים להשאיר אותן בלי להסביר את המשמעות לאורך די הרבה שיעורים (עד שנלמד פעולות). חשוב לשמור על המבנה הזה כדי שהתכנית תעבוד. בין היתר, על כל סוגריים מסולסלים שנפתחו יהיו סוגריים מסולסלים שיסגרו. התבנית הזו מוכנה עבורנו בכל תכנית חדשה שניצור (גם בסביבות אונליין וגם ב-VS2022)

  2. למה ב-VS2022 כתוב internal class Program ולא public class Program? אנחנו לא נתעמק בהבדל ובמשמעות של access modifiers בקורס יסודות. אין מניעה להשאיר את זה ככה, ואפשר גם לרשום את המילה public במקום המילה internal. בבחינות להנחות את התלמידים לרשום public.

  3. למה יש ב- netfiddle using System ובמחשבים מסויימים בכיתה ובבית הספר עוד הרבה שורות אחרות של using ? אלו דברים שהתוכנית צריכה כדי לרוץ. לא את כולם. יש הבדלי גרסאות בין סביבות אונליין וסביבות מקומיות, הבדלי גרסאות בין מחשבים שונים במעבדה, ובין בתי ספר. בהתקנות חדשות של VS2022 תרוץ גרסת net9 שבה לא מופיעים כרגע using. (אלו קריאות לספריות שכן/לא צריך בהתאם לגרסה). תזרמו עם מה שיש אצלכם במחשב.

  4. הדגשתי בשיעור שיהיו מקרים שבהם נפתחה תכנית חדשה שבה חסר המבנה public Class program { public static void Main()}. זה יקרה כאשר לא סומנה התיבה do not use top level statements, ואין מה לנסות להוסיף/לתקן ידנית (זה לא יעבוד). תיצרו מחדש תכנית. ברגע שלמורה יש מספיק ידע, אפשר גם לעבוד עם תכניות שאין בהם את המסגרת הזו של public Class program { public static void Main()} אבל בסופו של דבר זה יפגע במידה מסויימת בהמשך הלמידה, כשמגיעים לפעולות (פונקציות) ובמיוחד למחלקות. אתם מקבלים פשטות וקריאות אבל פוגעים קצת בעתיד. בנוסף המצגות בקמפוס וכמעט כל מצגת אחרת שתעבדו איתה או חומר חיצוני יכילו את המבנה המקובל. בבחינות כל תכנית ראשית תתחיל תמיד ב public static Void Main()

  5. ראינו שב-netfiddle חשוב ליצור משתמש ולשמור תכניות - אונליין באתר שלהם. ב-vs2022 התכניות נוצרות על המחשב עצמו. אם אתם עובדים על מחשב הכיתה תאבדו חומרים - חשוב להעתיק אותם למסמך. זה יכול להיות למשל מסמך בקלאסרום. או כל מסמך שיתופי שילווה אתכם. זה יכול להיות גם דיסק און קי. לא נלמד טכניקות מתקדמות יותר של עבודה עם github. לפחות לא בחודש הקרוב. חשוב להשאיר את התכניות של VS2022 במקום האחיד שבו התוכנה בוחרת לשים אותם. נראה כיצד לשנות את מקום השמירה כדי שהחומר ישמר לנו בענן (בשיעור אחר). מסמך שיתופי google docs תמיד ינצח כל סידור אחר שתנסו ליצור בתיקיות במחשב (או טכניקות נוספות שנלמד), מפני שאתם והתלמידים תדביקו לתוכו את הפתרונות בצמוד לשאלות. את זה לא תוכלו לעשות בתוך הקוד (לא ריאלי לחשוב שתספיקו להוסיף עותק של השאלה כולה מעל לקוד. זה מאד מסורבל בגלל האופן שבו עברית ואנגלית משתלבים בהערות).

  6. לפחות במחשב אחד במעבדה מורה נתקלה במצב שהתכנית נסגרת לאחר שסיימה לרוץ (ולא ניתן לראות את הפלט). הפתרון אם זה קורה במחשב שלכם, הוא להוסיף כפקודה אחרונה, Console.ReadLine(); וזה יגרום לתכנית להמתין. התופעה הזו באה ונעלמה לאורך השנים בגלים. היו גרסאות בהן היה צריך את זה, וגרסאות (כמו למשל כיום, יוני 2025 net9 בהן אין את הבעיה). הרצה עם Ctrl+F5 גם עוקפת את הבעיה אבל זה לא פתרון טוב (נלמד בעתיד על ההבדל בין F5 ל- Ctrl+F5)

  7. מורה אחת נתקלה בשגיאה שבה התכנית לא הסכימה לרוץ עם הודעת שגיאה Error writing file זה קורה כאשר נשאר חלון Console שלא נסגר. גם זו מחלה תלויית גרסה.

תרגול

⬅ עברו לתרגול 1.1 - משתנים קלט והשמה

סרטונים

סרטוני פרק 1