יסודות התכנות בשפת C#‎ · פרק 3 — יסודות התכנות בשפת C#‎⌂📚🏠
פרק 3

יסודות התכנות בשפת C#‎

3.1 מבוא

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

(א) הוראה (Instruction)

(ב) המתכנת (Programmer)

(ג) תוכנה (Program)

(ד) המשתמש (User)

(ה) פלט מחלקת קונסול (Console output)

3.2 התוכנית הראשונה

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {




        }
    }
}
פקודההסבר
using System;פקודה חשובה לקיצור ב-C#‎ בעבודה עם Console
ConsoleApp1שם התוכנית (הפרויקט)
Programשם המחלקה שבתוכה אנו כותבים את התוכנית שלנו
Main() { … }כאן אנו כותבים את פקודות התוכנית שלנו.
הערות:
  1. שם התוכנית הראשית הוא תמיד Main, והיא הפעולה הראשית (Method) שממנה המחשב מתחיל לבצע ולהריץ את התוכנית. מכיוון שעורך C#‎ מונחה עצמים, התכנות חייב להיות בתוך class (עצם), ולכן הפעולה הזאת חייבת להיות בתוך עצם מסוים.
  2. כדי לקצר את התכנות ואת הפקודות אנו משתמשים ב-using System, כדי שלא נכתוב את המילה System לפני כל מילה Console.
  3. כל פקודה חייבת להסתיים בנקודה-פסיק ;

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

Console.Write(”מחרוזת“);

והפקודה:

Console.WriteLine(”מחרוזת“);
דוגמה 3.1 — התוכנית הראשונה.
static void Main(string[] args)
{
    Console.WriteLine("Hello Class 10 .");
}

הרצת התוכנית:

מריצים את התוכנית בלחיצה על Run או על F5. אז התוצאה תופיע על מסך Console, אך היא תיעלם מיד עם סיום פעולת התוכנית ולא נוכל לראות את התוצאות. לכן עדיף ללחוץ על המקש Ctrl יחד עם F5, או להוסיף את הפקודה הבאה כפקודה האחרונה בתוכנית:

Console.ReadLine();

תוצאת ההרצה של התוכנית הראשונה היא:

Microsoft Visual Studio Debug Console
Hello Class 10 .
שאלה 3.1: מהן תוצאות ההרצה של התוכנית הבאה:
פתרון:
static void Main(string[] args)
{
    Console.Write("My name is Hammam.");
    Console.Write("I am from Jatt.");
    Console.Write("My age is: 39.");
}

התוצאה היא:

Microsoft Visual Studio Debug Console
My name is Hammam.I am from Jatt.My age is: 39.
שאלה 3.2: הכנס שינויים בתוכנית הקודמת כדי לקבל את התוצאה הבאה:
Microsoft Visual Studio Debug Console
My name is Hammam.
I am from Jatt.
My age is: 39.

3.3 משתנים

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

לכל משתנה יש:

(a) טיפוס

(b) שם. (מקומו בזיכרון מזוהה לפי השם שאנו נותנים לו).

(c) ערך. (הנתונים או המידע השמורים במשתנה (הערך שבתוך הזיכרון)).

(a) טיפוס:

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

טיפוס המשתנהערכודוגמההערות
boolערך לוגי true או falsex= false;גודלו 8 סיביות (8 bit = 1 byte)
byteמספר שלם מ-0 עד 255inp = 213;גודלו 8 סיביות (8 bit = 1 byte)
charתוch = ‘$’;לתווים מתאימים ערכים עשרוניים לפי טבלת ASCII
doubleערך ממשיnum = 3.67;גודלו 64 סיביות (64 bit = 8 byte)
intערך שלםn = 4;גודלו 32 סיביות
יכול לשמור מספרים שלמים בתחום הבא:
-2,147,483,648 עד 2147483647
stringערך טקסטואלי (משפט)name = “Wattad”;

(b) שם המשתנה:

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

עדיף לתת למשתנים שאנו משתמשים בהם שמות הגיוניים ובעלי משמעות. למשל, אם נרצה לשמור את ציון התלמיד במבחן, עדיף ששם המשתנה יהיה mark, וכן הלאה ...

כללים לבחירת שם המשתנה:

1) שם המשתנה חייב להתחיל באות או בקו תחתון _

2) אסור ששם המשתנה יכלול תווים (%, *, !, # ...) או רווחים. (מותר רק הקו התחתון)

3) אסור שיכיל מילה שמורה של שפת סי שארפ (למשל אסורה המילה int ואסורה המילה if, וכן הלאה..)

(c) ערך המשתנה:

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

הגדרת המשתנה (הכרזה על המשתנה):

עלינו להגדיר את המשתנים לפני שמשתמשים בהם בתכנות, ועדיף שהגדרת המשתנים תהיה בשורות הראשונות בתוך הפעולה Main שבה אנו משתמשים.

הגדרת המשתנה נעשית כך:

< טיפוס המשתנה > שם המשתנה ;
דוגמה 3.2
int n1;

בדוגמה הזאת טיפוס המשתנה הוא int (מספרים שלמים) ושם המשתנה הוא n1.

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

דוגמה 3.3
double t ;

בדוגמה הזאת טיפוס המשתנה הוא double ושם המשתנה t.

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

יש לתת למשתנה ערך התחלתי או ערך שנקלט מן המשתמש, והדבר נעשה באמצעות הפעולה =

אופרטור = : זו פעולת ההשמה של הערכים הנמצאים מימין לסימן אל תוך (ב) המשתנה הנמצא משמאל לסימן.

אם נותנים למשתנה ערך התחלתי, הדבר נקרא "אתחול" ואפשר לעשות זאת כך:

(1) הגדרת המשתנה.

(2) נותנים לו ערך התחלתי.

דוגמה 3.4
int x;
x = 4;

אפשר גם להגדיר את המשתנה ולאתחל אותו יחד.

דוגמה 3.5
int x=-4;

כל משתנה שלא ניתן לו ערך התחלתי, או שלא הוזן לתוכו ערך מן המשתמש, מכיל נתונים חסרי משמעות (זבל).

דוגמה 3.6
int x = 4, y;
כתובתערך שמור012345...712713714715..1020102110221023x4y"זבל"
הערה: אפשר להגדיר יותר ממשתנה אחד בנפרד, או, אם המשתנים מאותו טיפוס, להגדיר אותם בשורה אחת ("במכה אחת").
דוגמה 3.7
int x,y;
או
int x;
int y;
דוגמה 3.8
int n;
double a;
דוגמה 3.9 — נרצה להגדיר שני משתנים שלמים x ו-y ולהציב בהם את המספרים השלמים 4 וכן -5 בהתאמה.

אפשרות פתרון (1):

int x;
int y;
x = 4;
y = -5;

אפשרות פתרון (2):

int x, y;
x = 4;
y = -5;

אפשרות פתרון (3):

int x = 4, y = -5;

אפשרות פתרון (4):

int x = 4;
int y = -5;
כתובתערך שמור012..412413414415..841842843844845..1023x4y-5

קלט, פלט ומשתנים:

קלט <— תוכנית <— פלט

3.4 פלט

כרגע, פעולת הפלט היא פעולת ההדפסה על מסך Console, כלומר התוכנית מדפיסה מידע על המסך השחור.

פקודת ההדפסה על מסך Console (פלט) היא Write או הפקודה WriteLine, באופן הבא:

א. Console.Write: הדפסה בלי שהסמן יורד שורה.

ב. Console.WriteLine: הדפסה שבה הסמן יורד בסוף פעולת Write לשורה חדשה.

בקיצור:

WriteLine פועלת כמו Write, אך מורידה את הסמן לשורה חדשה בסוף פעולת הפונקציה.

צורות ההדפסה על המסך:

1> Console.Write("המחרוזת");

2> Console.Write("מחרוזת1" + "מחרוזת2");

3> Console.Write("מחרוזת {0} המשך המחרוזת {1} המשך המחרוזת", משתנה שנדפיס את ערכו במקום {0}, משתנה שנדפיס את ערכו במקום {1});

4> Console.Write("מחרוזת1" + שם המשתנה שנדפיס את ערכו + "מחרוזת2" + שם המשתנה שנדפיס את ערכו);

5> Console.Write(שם המשתנה);

3.5 קלט

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

פעולת הקלט היא ReadLine()‎ , והיא פעולה לקליטת נתונים ומידע מן המשתמש דרך מסך Console

Console.ReadLine();

והיא פקודה לקליטת מחרוזת (string) מן המשתמש דרך מסך Console.

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

טיפוס המשתנה.Parse(Console.ReadLine());‎
דוגמה 3.10
double.Parse(Console.ReadLine());

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

1. קליטת מחרוזת:

שם משתנה מטיפוס string = Console.ReadLine();‎

(המשתנה חייב להיות מוגדר מראש לפני שמשתמשים בו)

2. כל טיפוס אחר: (int, double, char,byte….):

שם משתנה מהטיפוס הנדרש = טיפוס משתנה.Parse(Console.ReadLine());‎

כלומר אנו ממירים את המחרוזת שאנו קולטים בפעולה Console.ReadLine()‎ לטיפוס הנתונים המתאים באמצעות הפעולה Parse, שהיא פעולת המרה, ואז שומרים את הנתונים האלה במשתנה שהגדרנו קודם לכן.

דוגמה 3.11 — קליטת מספר שלם מן המשתמש ושמירתו במשתנה בשם x שהוגדר בתחילת התכנות.
x = int.Parse(Console.ReadLine());
פקודההסבר
xשמירה בזיכרון בכתובת x
int.Parseהמרת המחרוזת לטיפוס int
Console.ReadLine()קליטת מחרוזת
הערות:
  1. המשתנה חייב להיות מוגדר מראש לפני השימוש בו.
  2. פעולת השמירה בזיכרון נעשית באמצעות השמה במשתנה בעזרת הפעולה =
  3. אנו קולטים מחרוזת וממירים אותה לנתונים מתאימים באמצעות Parse
  4. עדיף להדפיס למשתמש על המסך משפט בקשה לפני שקולטים ממנו נתונים, כדי שהמשתמש יידע אילו נתונים עליו להזין.
  5. עדיף להדפיס למשתמש על המסך משפט הסבר יחד עם הדפסת התוצאה, כדי שהמשתמש יידע מהי התוצאה הזאת ומה היא מייצגת.
הדגשה: אנו רוצים לבנות תוכנית ברורה למשתמש, ולכן עלינו להדפיס למשתמש על המסך משפטי הסבר ומשפטי בקשה לפני שקולטים ממנו נתונים, כדי שהמשתמש יידע אילו נתונים עליו להזין ומה המשמעות של התוצאות שקיבל.

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

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

3.6 תיעוד

אפשר להוסיף לתוכנית הערות או תגובות (בין הפקודות) בלי להשפיע על התכנות. ההערות האלה מסבירות את דרך הפתרון שלנו או מפרשות חלק מן הפקודות, והמחשב אינו מתייחס אליהן.

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

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

כמו כן, אפשר לבטל שורות תכנות אם מוסיפים אותם לפני השורות האלה.

דוגמה 3.12
static void Main(string[] args)
{
    // This Program by: המאם ותד
    int d = 31; // my birth day.
    int m = 5; // my birth month.
    //d = 300;
    //m = int.Parse(Console.ReadLine());
    Console.WriteLine("Hammam"); // remark - הערה// still...
    Console.WriteLine(d);
    Console.WriteLine("m");
}

תוצאת ההרצה:

Microsoft Visual Studio Debug Console
Hammam
31
m

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

דוגמה 3.13
static void Main(string[] args)
{
    // This Program by: המאם ותד
    int d = 31; // my birth day.
    int m = 5; // my birth month.
    /*d = 300;
    m = int.Parse(Console.ReadLine());*/
    Console.WriteLine("Hammam"); // remark - הערה// still...
    Console.WriteLine(d);
    Console.WriteLine("m");/* אפשר להשתמש בזה גם באותה שורה */
    Console.WriteLine("End");
}

3.7 מחרוזות

המחרוזות שנשמרות במשתנה מטיפוס string הן קבוצה של תווים מן המקלדת המסודרים זה לצד זה, והן קיימות בכל הטקסטים של המחשבים (UNICODE).

הגדרת משתנה מטיפוס string:

string שם משתנה ;

כמובן, זו הכרזה על המשתנה, אך הוא אינו מכיל ערך בעל משמעות (יש בו זבל). לכן כדאי לתת לו ערך התחלתי או לקלוט ערך מן המשתמש ולשמור אותו בו.

string שם משתנה = ”מחרוזת“ ;
דוגמה 3.14
string name = "Hammam";

אפשר גם:

string name;
name = "Hammam";
string שם משתנה ;
שם המשתנה = Console.ReadLine( ) ;‎

נשים לב שקליטת נתונים מטיפוס string נעשית באמצעות Console.ReadLine()‎ ואין צורך להשתמש בפעולה Parse

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

דוגמה 3.15
string name;
Console.Write("Insert your name: "); // משפט בקשה
name = Console.ReadLine();

הדפסת מחרוזות נעשית באמצעות Console.Write( )‎ כפי שלמדנו קודם, וכך גם הדפסת הערך של משתנים מטיפוס string

1> Console.Write("המחרוזת");

2> Console.Write("מחרוזת1" + "מחרוזת2");

3> Console.Write("מחרוזת {0} המשך המחרוזת {1} המשך המחרוזת", משתנה שנדפיס את ערכו במקום {0}, משתנה שנדפיס את ערכו במקום {1});

4> Console.Write("מחרוזת1" + שם המשתנה שנדפיס את ערכו + "מחרוזת2" + שם המשתנה שנדפיס את ערכו);

5> Console.Write(שם המשתנה);
שאלה 3.3: כתוב תוכנית שקולטת מן המשתמש את שמו הפרטי, לאחר מכן קולטת ממנו את שם המשפחה, ומדפיסה על המסך את השם עם המשפחה.
פתרון:
static void Main(string[] args)
{
    string first_name, last_name;
    Console.WriteLine("Please enter your first name: ");
    first_name = Console.ReadLine();
    Console.WriteLine("Please enter your last name: ");
    last_name = Console.ReadLine();
    Console.WriteLine("{0} {1}", first_name, last_name);
}

תוצאת ההרצה של התוכנית עבור הקלטים הבאים (השם הפרטי: המאם, ושם המשפחה: חמד) היא:

Microsoft Visual Studio Debug Console
Please enter your first name:
Hammam
Please enter your last name:
Hamad
Hammam Hamad
תזכורת: כדי להריץ את התוכנית לוחצים על Run או על F5, אך מסך Console ייעלם מיד עם סיום פעולת התוכנית ולא נוכל לראות את התוצאות. לכן עדיף ללחוץ על המקש Ctrl יחד עם F5, או להוסיף את הפקודה הבאה כפקודה האחרונה בתוכנית: Console.ReadLine();

תווים מיוחדים להדפסה בתוך מחרוזת באמצעות הקו הנטוי backslash:

התוההסבר
\nהורדת הסמן לשורה חדשה
\ttab אופקי, כלומר הסמן מתקדם כמה משבצות קדימה
\vtab אנכי, כלומר הסמן יורד כמה משבצות למטה
\"הדפסת מירכאות (כי המחשב עלול לחשוב שזה סוף המחרוזת)
\'הדפסת גרש
\\הדפסת הקו הנטוי (backslash) (אם נרצה להדפיס אותו, כי הוא עלול להתפרש כתו מיוחד)
\0התו null (אינו מדפיס את הספרה 0)
\rהחזרת הסמן לתחילת השורה
\aהשמעת צליל (פעמון)
\bbackspace (רווח אחורה, כלומר מחק)
דוגמה 3.16
static void Main(string[] args)
{
    string name="Hammam";
    string town = "Jatt";
    Console.Write("My name is {0}.\nI live in {1}.\n",name,town);
    Console.Write("My father saied: \"Hello\"");
    Console.WriteLine("\nnoting to fear\\nothing to fear!");
}

תוצאות ההרצה של התוכנית:

Microsoft Visual Studio Debug Console
My name is Hammam.
I live in Jatt.
My father saied: "Hello"
noting to fear\nothing to fear!

שרשור במשתנים מטיפוס מחרוזת:

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

string+string ➔ string

string+משתנה ➔ string

משתנה+string ➔ string

דוגמה 3.17
static void Main(string[] args)
{
  string str1 = "Hammam";
  string str2 = "Wattad";
  string str3 = " ";
  int age = 39;
  string s1, s2, s3, s4,s5;
  s1 = str1 + str2;              // "Hammam"+"Wattad" => "HammamWattad"
  s2 = str1 + str3 + str2;       //"Hammam"+" "+"Wattad"=>"Hammam Wattad"
  s3 = "my age is" + age;        //"my age is39
  s4 = "my age is " + age;       //"my age is 39"
  s5 = "my age is" + str3 + age; //"my age is 39"
  Console.WriteLine("s1={0}",s1);
  Console.WriteLine("s2="+s2);
  Console.WriteLine("s3=" + s3);
  Console.WriteLine("s4={0}",s4);
  Console.WriteLine("s5=" + s5);
  Console.WriteLine(str1+" "+str2+"\nMy age is "+age); //Hammam Wattad
                                                       //My age is 39
}
הערה: אם נרשום בתחילת הפעולה Console.Write( )‎ את הסימן @ לפני תחילת כתיבת המחרוזת, לא יתייחסו לקו הנטוי (backslash) כאל תו מיוחד. דוגמה:
בשורה הראשונה יש Errors.
static void Main(string[] args)
{
    Console.Write("C:\users\windows:");//שגיאה כי הוא מבין \כתו מיוחד
    Console.Write(@"C:\users\windows:"); // מחרוזת תקינה
    Console.Write("C:\new\timer:"); // \הוא תו מיוחד
    Console.WriteLine(@"C:\new\timer:");
}

3.8 מספרים שלמים

הנתונים והמידע מטיפוס int הם מספרים שלמים (בלי שברים או נקודה עשרונית) בתחום: -2,147,483,648 עד 2,147,483,647 . כדי לשמור מספרים אלה בזיכרון נדרשים 4 byte, כלומר 32 bit, והם 32 סיביות שבהן המספר נשמר בבסיס הבינארי (בסיס הספירה של המחשב).

הגדרת משתנה מטיפוס int:

int שם משתנה ;

כמובן, זו הכרזה על המשתנה, אך הוא אינו מכיל ערך בעל משמעות. (יש בו זבל) לכן כדאי לתת לו ערך התחלתי או לקלוט ערך מן המשתמש ולשמור אותו בו.

int שם משתנה = מספר שלם ;
דוגמה 3.18
int x = 6;

int birth_year;
birth_year = 1984;
int שם משתנה ;
שם המשתנה = int.Parse(Console.ReadLine( )) ;‎

נשים לב שקליטת נתונים מן המשתמש היא מטיפוס string, והיא נעשית באמצעות Console.ReadLine()‎. לכן אנו משתמשים בפעולה Parse כדי להמיר את הנתונים ממחרוזת למספרים שלמים שאפשר לעבוד איתם בחישובים ובמתמטיקה (הכפופים לכללי החשבון).

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

דוגמה 3.19
int mark;
Console.Write("Insert your mark: "); // משפט בקשה
mark = int.Parse(Console.ReadLine());

הדפסת ערכי המשתנים נעשית באמצעות Console.Write( )‎ כפי שלמדנו קודם, וזאת כך:

Console.Write("מחרוזת {0} המשך המחרוזת {1} המשך המחרוזת", משתנה שנדפיס את ערכו במקום {0}, משתנה שנדפיס את ערכו במקום {1});

Console.Write("מחרוזת1" + שם המשתנה שנדפיס את ערכו + "מחרוזת2" + שם המשתנה שנדפיס את ערכו);

Console.Write(שם המשתנה);
דוגמה 3.20
static void Main(string[] args)
{
    int positive, negative , id=398201;
    Console.Write("Insert a positive number: "); // משפט בקשה
    positive = int.Parse(Console.ReadLine());

    Console.Write("Insert a negative number: "); // משפט בקשה
    negative = int.Parse(Console.ReadLine());

    Console.WriteLine("Positive number is:{0} and negative number is:{1}",positive,negative);
    Console.WriteLine("Positive number is:" + positive + " and negative number is:" + negative);
    Console.Write("Your id number is: ");
    Console.WriteLine(id);
}

תוצאת ההרצה של התוכנית היא:

Microsoft Visual Studio Debug Console
Insert a positive number: 5
Insert a negative number: -2
Positive number is:5 and negative number is:-2
Positive number is:5 and negative number is:-2
Your id number is: 398201
תזכורת: כדי להריץ את התוכנית לוחצים על Run או על F5, אך מסך Console ייעלם מיד עם סיום פעולת התוכנית ולא נוכל לראות את התוצאות. לכן עדיף ללחוץ על המקש Ctrl יחד עם F5, או להוסיף את הפקודה הבאה כפקודה האחרונה בתוכנית: Console.ReadLine();

3.9 מספרים ממשיים

הנתונים והמידע מטיפוס double הם מספרים ממשיים (הכוללים גם מספרים שלמים), ודיוק התצוגה של הספרות העשרוניות מגיע עד 15 ספרות אחרי הנקודה העשרונית. כדי לשמור מספרים אלה בזיכרון נדרשים 8 byte, כלומר 64 bit, והם 64 סיביות שבהן המספר נשמר בבסיס הבינארי (בסיס הספירה של המחשב).

הגדרת משתנה מטיפוס double:

double שם משתנה ;

כמובן, זו הכרזה על המשתנה, אך הוא אינו מכיל ערך בעל משמעות (יש בו זבל). לכן כדאי לתת לו ערך התחלתי או לקלוט ערך מן המשתמש ולשמור אותו בו.

double שם משתנה = מספר ;
דוגמה 3.21
double a, b = -5, c = 2.5;
a = -14.678;
double שם משתנה ;
שם המשתנה = double.Parse(Console.ReadLine( )) ;‎

נשים לב שקליטת נתונים מן המשתמש היא מטיפוס string, והיא נעשית באמצעות Console.ReadLine()‎. לכן אנו משתמשים בפעולה Parse כדי להמיר את הנתונים ממחרוזת למספרים ממשיים double שאפשר לעבוד איתם בחישובים ובמתמטיקה (הכפופים לכללי החשבון).

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

דוגמה 3.22
double tall;
Console.Write("Insert your tall in [m] units: "); // משפט בקשה
tall = double.Parse(Console.ReadLine());

הדפסת ערכי המשתנים נעשית באמצעות Console.Write( )‎ כפי שלמדנו קודם, וזאת כך:

Console.Write("מחרוזת {0} המשך המחרוזת {1} המשך המחרוזת", משתנה שנדפיס את ערכו במקום {0}, משתנה שנדפיס את ערכו במקום {1});

Console.Write("מחרוזת1" + שם המשתנה שנדפיס את ערכו + "מחרוזת2" + שם המשתנה שנדפיס את ערכו);

Console.Write(שם המשתנה);
שאלה 3.4: כתוב תוכנית שקולטת מן המשתמש מספר ממשי (double) ומדפיסה לו את המספר הזה על המסך עם המשפט הבא:
You inserted the number:
המספר שקלטנו
פתרון:
static void Main(string[] args)
{
    double num;
    Console.Write("Please insert a number: ");
    num = double.Parse(Console.ReadLine());
    Console.WriteLine("You inserted the number: ");
    Console.WriteLine(num);
}

תוצאת ההרצה של התוכנית עבור הקלט 5 :

Microsoft Visual Studio Debug Console
Please insert a number: 5
You inserted the number:
5
תזכורת: כדי להריץ את התוכנית לוחצים על Run או על F5, אך מסך Console ייעלם מיד עם סיום פעולת התוכנית ולא נוכל לראות את התוצאות. לכן עדיף ללחוץ על המקש Ctrl יחד עם F5, או להוסיף את הפקודה הבאה כפקודה האחרונה בתוכנית: Console.ReadLine();

הדפסת מספר מוגדר של ספרות אחרי הנקודה העשרונית (דיוק תצוגת המספר על המסך):

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

דוגמה 3.23 — הדפסת ערך double עם שברים עשרוניים.
static void Main(string[] args)
{
    double a,b=10,c=3;
    double d,e;

    a = Math.Sqrt(2); //a פעולה ששמה את השורש של המספר 2 במשתנה
    d = b / c;
    e = c / b;
    Console.WriteLine("a={0},b={1},c={2},d={3},e={4}",a,b,c,d,e);
    Console.WriteLine("This code written by: Hammam Wattad.");
}

בהרצת התוכנית נקבל:

Microsoft Visual Studio Debug Console
a=1.4142135623730951,b=10,c=3,d=3.3333333333333335,e=0.3
This code written by: Hammam Wattad.

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

בתוך הסוגריים המסולסלים שמציבים את ערך המשתנה בתוך מחרוזת, נכתוב את הסימון הבא

מספר הספרות העשרוניות:F

למשל: {0:F1} המשתנה יוצג בדיוק של ספרה אחת בלבד אחרי הנקודה העשרונית.

{0:F2} המשתנה יוצג בדיוק של שתי ספרות אחרי הנקודה העשרונית. וכן הלאה...

דוגמה 3.24 — נחיל זאת על הדוגמה הקודמת:
static void Main(string[] args)
{
    double a,b=10,c=3;
    double d,e;

    a = Math.Sqrt(2); //a פעולה ששמה את השורש של המספר 2 במשתנה
    d = b / c;
    e = 3.0 / 10;
    Console.WriteLine("a={0:F3},b={1},c={2:F1},d={3:F0},e={4:F2}",a,b,c,d,e);
    Console.WriteLine("This code written by: Hammam Wattad.");
}

תוצאת ההרצה היא:

Microsoft Visual Studio Debug Console
a=1.414,b=10,c=3.0,d=3,e=0.30
This code written by: Hammam Wattad.

3.10 בית

בית בזיכרון הוא מקום שיש בו 8 סיביות (8 bit). לכן כל משתנה שמוגדר מטיפוס בית (byte) יכול להכיל מספרים שלמים בתחום (0 עד 255).

המספר הקטן ביותר:

70605040302010000 Dec0 Hex0 Bin

המספר הגדול ביותר:

7161514131211101255 DecFF Hex11111111 Bin

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

byte שם משתנה ;

למשל, נרצה להגדיר משתנה בשם num מהטיפוס byte:

byte num;

קליטת מספר מן המשתמש לתוך משתנה מטיפוס בית נעשית באמצעות הפקודה הבאה:

שם המשתנה = byte.Parse(Console.ReadLine());‎

המספר חייב להיות שלם וחיובי בתחום 0 עד 255.

הדפסת הערך של משתנה בשם num מטיפוס בית נעשית באמצעות Console.Write כמקובל. למשל:

Console.WriteLine("the value of num is: {0}",num);

או באמצעות פעולת חיבור הטקסטים + (שרשור):

Console.WriteLine("the value of num is: "+num);
דוגמה 3.25
static void Main(string[] args)
{
    byte n1 = 0, n2 = 100, mark;
    Console.Write("insert your final bagrot physics mark: "); // משפט בקשה
    mark = byte.Parse(Console.ReadLine());

    Console.WriteLine("Minimum mark:{0} ,maximum mark:"+n2,n1);
    Console.WriteLine("You got: {0}",mark);
}

תוצאת ההרצה של התוכנית:

Microsoft Visual Studio Debug Console
insert your final bagrot physics mark: 97
Minimum mark:0 ,maximum mark:100
You got: 97

3.11 פעולות חשבון וטבלת מעקב

3.11.1 פעולות החשבון ב-C#‎

#הפעולההסברדוגמה
1+חיבור מספרים או ערכי משתנים או שרשורx=2+9; ערכו של המשתנה x יהיה 11
2-חיסור מספרים או חיסור ערכי משתניםx=2-5; ערכו של המשתנה x יהיה -3
3*כפל מספרים או כפל ערכי משתניםx=9*4; ערכו של המשתנה x יהיה 36
4/החילוק בין מספרים או ערכי משתניםx=7/2; ערכו של המשתנה x יהיה 3
5%השארית של חילוק המספר הראשון במספר השניx=8%3; ערכו של המשתנה x יהיה 2
6++קידום ב-1: הוסף 1 למספר או הוסף 1 לערך המשתנהx=4; ערכו של המשתנה x יהיה 4
x++; ערכו של x מתקדם והופך ל-5
7- -הפחתה ב-1: החסר 1 מן המספר או החסר 1 מערך המשתנהx=4; ערכו של המשתנה x יהיה 4
x--; ערכו של x יורד והופך ל-3

אסטרטגיה לפתרון בעיות בתכנות:

1) עלינו להבין נכון את השאלה ואת הנדרש מאיתנו.

2) עלינו לקבוע באילו משתנים נשתמש.

3) עלינו לדעת את החישובים שמובילים לפתרון או את האלגוריתם.

שאלה 3.5: כתוב תוכנית שקולטת אורך ורוחב של מלבן ומדפיסה על המסך את השטח ואת ההיקף של המלבן. הוסף משפטי בקשה ומשפטי הסבר.
פתרון:

משתנים:

משתני קלט:

  • width מטיפוס double, והוא משתנה לקליטה ולשמירה של רוחב המלבן.
  • length מטיפוס double, והוא משתנה לקליטה ולשמירה של אורך המלבן.

משתני פלט:

  • area מטיפוס double, והוא משתנה שבו נשמור את שטח המלבן.
  • perimeter מטיפוס double, והוא משתנה שבו נשמור את היקף המלבן.

דרך החישוב:

area= width*length ;
perimeter = 2 * (width + length) ;

הפתרון:

בעורך מתחילה התוכנית הזאת בשורה 7, ומספרי השורות בטבלת המעקב שלהלן הם מספרי העורך.
static void Main(string[] args)
{
    double width, length, area, perimeter;

    Console.WriteLine("Please insert width:");
    width = double.Parse(Console.ReadLine());
    Console.WriteLine("Please insert length:");
    length = double.Parse(Console.ReadLine());

    perimeter = 2 * (width + length);
    Console.WriteLine("the perimeter is : {0}", perimeter);
    area = (width * length);

    Console.WriteLine("the area is:{0}", area);
}

3.11.2 טבלת מעקב

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

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

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

בסיום הביצוע של כל פקודה (הנמצאת בשורה) רושמים בשורה זו, בכל עמודה, מה ערכי המשתנים ומה הודפס על המסך, וזאת בסיום ביצוע הפקודה, וכן הלאה

טבלת המעקב נבנית כאשר נתונים לנו הקלטים האפשריים. (לכל אפשרות של קלטים אפשר לבנות טבלת מעקב)

דוגמה 3.26 — נרשום טבלת מעקב לשאלה הקודמת (חישוב שטח והיקף של מלבן) עבור הקלטים הבאים: רוחב: 3 סנטימטר. אורך: 4 סנטימטר.
#widthlengthperimeterareaפלט
9----
11----Please insert width:
123---
133---Please insert length:
1434--
163414-
173414-the perimeter is : 14
18341412
20341412the area is:12

3.12 חילוק שלמים, המרה ושארית

3.12.1 חילוק מספרים שלמים והמרה casting

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

פעולות החשבון שמתבצעות בין מספרים שלמים (int) תוצאתן int, ומכאן שחילוק מספרים שלמים הוא בהכרח מספר שלם בשפת סי שארפ.

דוגמה:

9 / 2 = 4intintint

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

דוגמה 3.27
9 / 2 = 4
9.0 / 2 = 4.5
9 / 2.0 = 4.5

באותו אופן, אם משתמשים במשתנים, חילוק של משתנים מטיפוס int ייתן בהכרח מספר שלם (int), גם אם נשמור אותו בתוך משתנה מטיפוס double.

דוגמה 3.28
static void Main(string[] args)
{
    int a = 7;
    int b = 2;
    double result;
    result = a/ b;
    Console.WriteLine("result = {0}",result);
    Console.WriteLine("Written By:Hammam");
}
Microsoft Visual Studio Debug Console
result = 3
Written By:Hammam

לכן עלינו להמיר ( casting ) את הטיפוס של אחד הנתונים כך שיהיה מספר ממשי double, כי כולם מטיפוס מספר שלם int, וכך נבטיח שהתוצאה תהיה מטיפוס מספרים ממשיים double. אך יש לשים לב שאיננו יכולים לשמור אותה במשתנים מטיפוס int (Error), כי אי אפשר לשמור מספר ממשי double במשתנה מטיפוס שלם int. לכן עלינו לשמור אותה במשתנה מטיפוס ממשי double.

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

(double) 9 / 2 = 4.59.0 / 2 = 4.59 / (double)2 = 4.59 / 2.0 = 4.5
דוגמה 3.29
static void Main(string[] args)
{
    Console.WriteLine("Example By:Hammam");
    int a = 7;
    int b = 2;
    int result1;
    double result2;
    // result1 = (double) a / b;  Error ---> שגיאת תכנות
    result2 = (double)a / b;  // we can write: result2 = a/(double) b;
    Console.WriteLine("result = {0}",result2);
}
Microsoft Visual Studio Debug Console
Example By:Hammam
result = 3.5
שאלה 3.6: כתוב תוכנית שקולטת מן המשתמש שני מספרים שלמים, ומדפיסה על המסך את תוצאת החילוק של המספר הראשון בשני. דוגמה: אם קלטנו את המספר 9 ואת המספר 2, התשובה צריכה להיות בצורה הבאה: 9/2=4.5 כלומר נדפיס על המסך את פעולת החילוק בין המספרים הנתונים ואת תוצאתה.
פתרון:
static void Main(string[] args)
{
    int num1,num2;
    double res;
    Console.Write("Insert the first number: ");
    num1 = int.Parse(Console.ReadLine());

    Console.Write("Insert the second number: ");
    num2 = int.Parse(Console.ReadLine());

    res = (double) num1 / num2;
    Console.WriteLine("{0}/{1} = {2}",num1,num2,res);
    Console.WriteLine("Written By: Hammam.");
}
Microsoft Visual Studio Debug Console
Insert the first number: 12
Insert the second number: 8
12/8 = 1.5
Written By: Hammam.

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

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

דוגמה 3.30
360123 / 100 = 3601
 -67 / 100 = 0
-100/100 = -1
 104 / 100 = 1
-8731/100=-87
912/10 = 91
3401/10 =340
-3560/10 =-356
 7/10 = 0

3.12.2 שארית

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

הפעולה % נקראת פעולת השארית (מודולו), והיא נותנת לנו את השארית של חילוק המספר השלם הראשון במספר השלם השני.

דוגמה 3.31
7 % 4 = 3
74 = 134
השארית היא 3
12 %10= 2
1210 = 1210
השארית היא 2
3 % 5 = 3
35 = 0 + 35
השארית היא 3
20 % 4 = 0
204 = 5 + 04
השארית היא 0

כללים:

שאלה 3.7: כתוב תוכנית שקולטת מספר שלם ומדפיסה על המסך את השארית של חילוק המספר הזה בשבע.
static void Main(string[] args)
{
    int num, res;
    Console.WriteLine("Insert a number: ");
    num = int.Parse(Console.ReadLine());
    res = num % 7;
    Console.WriteLine("{0} % 7 is {1}",num,res);
    Console.WriteLine("Written by Hammam");
}
Microsoft Visual Studio Debug Console
Insert a number:
23
23 % 7 is 2
Written by Hammam
כלל: כל מספר מודולו 10 נותן תוצאה שהיא ספרת האחדות.
דוגמה 3.32
4 % 10 = 4415723 % 10 = 3320 % 10 = 0154 % 10 = 4
כלל: אם a קטן מ-b אז: a % b = a דוגמה: 6 % 8 = 6
שאלה 3.8: לעבד אל-לטיף יש תחביב של איסוף צדפי ים, והוא אוסף אותם בארגז בסדר מיוחד. לעבד אל-לטיף יש שקיות, שבכל אחת מהן נכנסים חמישה עשר צדפים, והוא שם כל 15 צדפים בשקית וסוגר אותה.
כשעבד אל-לטיף מקבל צדף, הוא שם אותו עם הצדפים הפזורים בארגז עד שמספרם מגיע ל-15, ואז הוא שם אותם בשקית, סוגר אותה ומשאיר את השקית בארגז. אם יש שארית (הם עדיין לא הגיעו ל-15 כדי לשים אותם בשקית), הוא משאיר אותם פזורים בארגז עד שהמספר יושלם.
כתוב תוכנית שקולטת מעבד אל-לטיף את המספר הכולל של הצדפים שיש לו בארגז, והתוכנית צריכה להדפיס לו כמה שקיות צריכות להיות מלאות וסגורות בתוך הארגז וכמה צדפים נשארים בארגז בלי שקית.
למשל, אם לעבד אל-לטיף יש 50 צדפים, התוכנית מדפיסה שיש בארגז 3 שקיות ו-5 צדפים בלי שקית.
15 צדפיםבשקית15 צדפיםבשקית15 צדפיםבשקית5 צדפים בארגזבלי שקית
פתרון:
מספרי הפקודות בטבלת המעקב שלהלן הם 1–8, כלומר שורות התוכנית מ-int seashells… עד הפקודה האחרונה.
static void Main(string[] args)
{
    int seashells, remainders, bags;
    Console.Write("Insert number of seashells: ");
    seashells = int.Parse(Console.ReadLine());
    bags = seashells / 15;
    remainders = seashells % 15;
    Console.WriteLine("Number of bags:{0}", bags);
    Console.WriteLine("Number of seashells without bags:{0}",remainders);
    Console.WriteLine("Written By Hammam!");
}

תוצאת ההרצה של התוכנית עם הקלט: 50

Microsoft Visual Studio Debug Console
Insert number of seashells: 50
Number of bags:3
Number of seashells without bags:5
Written By Hammam!

טבלת המעקב:

מספר הפקודהseashellsbagsremainderהמסך
1
2Insert number of seashells: 50
350
4503
55035
65035Number of bags: 3
75035Number of seashells without bags: 5
85035Written By Hammam!
שאלה 3.9: כתוב תוכנית שקולטת מספר שלם בן שלוש ספרות, והתוכנית צריכה להדפיס על המסך את הדברים הבאים:
  • סכום ספרות המספר.
  • מספר חדש המורכב מספרות המספר המקורי בסדר הפוך.
  • ריבוע המספר החדש (ריבוע המספר המורכב מספרות המספר המקורי בסדר הפוך).
למשל, אם קלטנו את המספר 279, התוכנית צריכה להדפיס על המסך שסכום ספרות המספר הוא (18), שהמספר החדש (ההפוך) הוא (972), ושריבוע המספר ההפוך הוא: (944784)
static void Main(string[] args)
{
    int num, ones, tens, hundreds, sum, rev_num, square;
    Console.WriteLine("Insert a number:");
    num = int.Parse(Console.ReadLine());
    ones = num % 10;
    num = num / 10;
    tens = num % 10;
    num = num / 10;
    hundreds = num % 10; // hundreds = num;
    sum = ones + tens + hundreds;
    rev_num = ones * 100 + tens * 10 + hundreds;
    square = rev_num * rev_num; // Math.Pow(rev_num,2)
    Console.WriteLine("Sum of the digits: {0}",sum);
    Console.WriteLine("Reverse number: {0}",rev_num);
    Console.WriteLine("Square of reverse number:{0}",square);
}

הרצת התוכנית עבור הקלט 496 נותנת לנו את התוצאה הבאה:

Microsoft Visual Studio Debug Console
Insert a number:
496
Sum of the digits: 19
Reverse number: 694
Square of reverse number:481636

3.13 פעולות מקוצרות

(1) קידום ב-1i++;⟵i=i+1;
(2) חיסור 1i--;⟵i=i-1;

++ ו -- חלים רק על המספר 1 (כלומר מותר להוסיף 1 ומותר להחסיר 1, אך מעבר לכך לא)

כלומר אסור i++++; ואסור i----;

מותר גם להשתמש ב-++i; וב---i;, כלומר לשים את הסימן + + או הסימן - - לפני שם המשתנה, וכאן ההבדל יהיה בערך של הביטוי כולו, וזה יובהר בדוגמה הבאה:

int a,b,i = 3, j = 3;
a = i++;
b = ++j;
Console.WriteLine("i={0}",i);
Console.WriteLine("j={0}",j);
Console.WriteLine("a={0}",a);
Console.WriteLine("b={0}",b);
Microsoft Visual Studio Debug Console
i=4
j=4
a=3
b=4

כפי שנראה מן הדוגמה, כאשר שמים את סימן הקידום מימין למשתנה (כמו ++i), ערך הביטוי יהיה ערך המשתנה לפני פעולת הקידום ב-1 (כמובן שהמשתנה יתקדם ב-1 בכל מקרה).

ואילו כאשר שמים את סימן הקידום משמאל למשתנה (כמו i++ ), ערך הביטוי יהיה ערך המשתנה אחרי פעולת הקידום ב-1 (כמובן שהמשתנה יתקדם ב-1 בכל מקרה).

(3) יש גם פעולות חשבון שבהן מתבצעת פעולת החשבון עם ערך המשתנה (הערך הנוכחי), ואחרי ביצוע הפעולה ערך המשתנה מתעדכן ומשתנה לערך חדש. והן:

הפעולהדוגמההסבר
+=sum += a;sum = sum + a;
-=sum -= b;sum = sum - b;
*=fact *= a;fact = fact * a;
/=fact /= b;fact = fact / b;
%=a %= b;a = a % b;
דוגמה 3.33
res *= 5;זו אותה פקודהres = res * 5;

3.14 המחלקה Math

לביצוע פעולות חשבון מסוג מיוחד יש מחלקה שמוגדרת בתוך System (היא נכללת בתוכנית שלנו כאשר כותבים using System) .

דוגמה:

שם המחלקה שבה נשתמש לחישובים האלה הוא Math, והיא מכילה פעולות חשבון רבות.

דרך השימוש בה:

Math.שם הפעולה ( המשתנים שעליהם הפעולה פועלת )
פקודההסבר
Mathשם המחלקה
.נקודה לבחירת פעולה מתוך הפעולות הרבות הזמינות
Math.שם הפעולה ( … )יש לה ערך, כלומר תוצאה, ולכן שומרים את תוצאתה בזיכרון (במשתנה) או מדפיסים את התוצאה הזאת
הפעולההסברדוגמה — הפעולהדוגמה — התוצאה
Sqrt(n)פעולת השורש הריבועיMath.Sqrt(30.25)5.5
Abs(n)פעולת הערך המוחלטMath.Abs(-2.7)2.7
Pow(n1,n2)פעולת החזקה n1n2Math.Pow(2,3)8.0
Max(n1,n2)פעולת הגדול מבין שני מספריםMath.Max(2,8)8
Min(n1,n2)פעולת הקטן מבין שני מספריםMath.Min(3,5)3
Round(n)פעולת עיגול למספר שלםMath.Round(7.8)8
הערות:
  • הפעולות Sqrt/Pow פועלות על מספרים ממשיים (double) ומחזירות תוצאה מטיפוס ממשי double.
  • הפעולות Abs/Max/Min, אם הן פועלות על מספרים שלמים (int), יחזירו תוצאה מטיפוס שלם int, אך אם הן פועלות על מספרים ממשיים (double), יחזירו תוצאה מטיפוס ממשי double.
  • הפעולה Round פועלת על מספרים ממשיים (double) ומחזירה תוצאה מטיפוס ממשי (double).
שאלה 3.10: כתוב תוכנית שקולטת מן המשתמש שני מספרים ממשיים ומדפיסה על המסך את הגדול מביניהם.
פתרון:
static void Main(string[] args)
{
    double a,b;
    Console.Write("Insert a number: ");
    a = double.Parse(Console.ReadLine());
    Console.Write("Insert another number: ");
    b = double.Parse(Console.ReadLine());
    Console.WriteLine("The maximum is: {0}",Math.Max(a,b));
    Console.WriteLine("Written By Hammam!");
}

תוצאת ההרצה של התוכנית עבור הקלטים -3 וכן -1.9 היא:

Microsoft Visual Studio Debug Console
Insert a number: -3
Insert another number: -1.9
The maximum is: -1.9
Written By Hammam!

3.15 תווים

3.15.1 עבודה עם תווים

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

הגדרת משתנה מטיפוס char:

char שם משתנה ;
דוגמה 3.34
char x ;

אתחול המשתנה:

1. שימוש בגרש ' '   דוגמה:

char tav = '$';

2. שימוש בקוד המספרי של התו (לפי טבלת ASCII)

הסוגר (char) הוא casting (המרה).
char tav = (char) 36;

אי אפשר לשמור מספר שלם (int) בתוך משתנה מטיפוס char, ולכן יש להמיר את המספר לטיפוס תו (char) באמצעות casting כפי שלמדנו קודם.

קליטת ערך למשתנה מטיפוס char:

המשתנה ch הוגדר קודם לכן.
ch = char.Parse(Console.ReadLine());

נקלט תו אחד בלבד.

הדפסת נתונים מטיפוס תו (char):

Console.WriteLine(x); // x מוגדר כטיפוס char

מודפס הערך של x, והוא התו השמור בתוך x .

Console.WriteLine((char)36);

מודפס התו המתאים למספר 36, והוא $ . (לפי טבלת המספרים של התווים, הנקראת ASCII)

בהדפסה אפשר להשתמש ב-{0} וב-{1} כפי שלמדנו עם שאר טיפוסי הנתונים.

שאלה 3.11: כתוב תוכנית שקולטת מן המשתמש תו ומדפיסה אותו על המסך.
static void Main(string[] args)
{
  char rmz;
  Console.Write("Insert a character: ");
  rmz = char.Parse(Console.ReadLine());
  Console.WriteLine("Your char is: {0}",rmz);
}

נריץ את התוכנית ונזין לה את הקלט הבא: E ונקבל :

Microsoft Visual Studio Debug Console
Insert a character: E
Your char is: E

המשתמש יכול להזין תו אחד ואז ללחוץ על Enter . דוגמה: * ואז Enter, או כפי שהזנו את התו E ואז Enter, אך אם המשתמש יזין יותר מתו אחד לפני שילחץ על Enter, תהיה לנו שגיאת תכנות (Error), כי המחשב אינו יכול להמיר מחרוזת (שיש בה יותר מתו אחד) לטיפוס char

מכאן אנו מסיקים שהפעולה char.Parse(Console.ReadLine()); קולטת תו אחד בלבד ואז Enter .

אם נרצה לקלוט כמה תווים רצופים שהמשתמש מזין בלי ללחוץ ביניהם על Enter, עלינו להימנע משימוש ב-Console.ReadLine ( )‎ כי היא קוראת את כל התווים כמחרוזת אחת. לכן עלינו להשתמש בפקודה הבאה:

Console.Read();

זו פקודה שקולטת תו אחד בלבד ולא שורה, אך עלינו להמיר את מה שנקלט ל-char, כי הפעולה הזאת קולטת את התו כמספר שלם ( int ) של תו אחד. כלומר הפקודה היא:

tav1 = (char)Console.Read();
tav2 = (char)Console.Read();
tav3 = (char)Console.Read();

זו הדרך לקלוט כמה תווים יחד בלי ללחוץ ביניהם על Enter.

3.15.2 טבלת הקודים ASCII

זו טבלה שיש בה קוד (מספר שלם) לכל תו מן המקלדת, והיא מורכבת מ-128 תווים שונים, שמספריהם (הקודים שלהם) הם מ-0 עד 127, מסודרים ברצף לוגי מסודר. כלומר הספרות 0 – 9 רציפות ברצף לוגי, וכן האותיות הקטנות מסודרות זו מיד אחרי זו, וכן האותיות הגדולות.

דוגמאות למספרים של כמה תווים:

התוהקודהתוהקודהתוהקוד
048a97A65
149b98B66
250c99C67
351d100D68
⋮⋮⋮⋮⋮⋮
957z122Z90

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

הטבלה המלאה נמצאת בנספחים. (נספח 2 בסוף הספר)

3.15.3 פעולות חשבון בתווים (char)

אפשר לחבר, לחסר ולכפול את המספרים (הקודים) של התווים, שהם מטיפוס int (הקוד של התו הוא int, כלומר מספר שלם). כדאי לדעת שביטוי שיש בו מספר שלם (int) ותו (char) הוא מטיפוס int (התוצאה היא int), ואז יש לשים לב שעלינו לבצע המרה (casting) ל-char .

שאלה 3.12: כתוב תוכנית שמבקשת מן המשתמש תו ומדפיסה על המסך את התו שאחריו.
static void Main(string[] args)
{
 char tav,next_tav;
 Console.Write("Insert a character:");
 tav = char.Parse(Console.ReadLine());
 //next_tav = tav + 1 ; שגיאה כי הוא ינסה לשמור מספר שלם
 next_tav = (char)(tav + 1);
 Console.WriteLine("your char:{0} \nnext char:{1}",tav,next_tav);
}

נריץ את התוכנית עבור הקלט: G

Microsoft Visual Studio Debug Console
Insert a character:G
your char:G
next char:H

פעולות החשבון בין תווים מתבצעות באמצעות הקוד שלהם (המספר השלם שלהם), וכך גם ההשוואה ביניהם (ההשוואה !=,==,>=,<=,<,> ) למשל:

'a' + 'b'

כאן מחברים את הקוד של התו ’a‘ עם הקוד של התו ’b‘, והתשובה תהיה מספר שלם, כלומר מטיפוס int

דוגמאות לעבודה עם תווים (char) ועם המספרים שלהם לפי טבלת ASCII:

פקודההסבר
Console.WriteLine('a');מדפיס a על המסך (כי זה ערך מטיפוס char)
Console.WriteLine(a);Error ! כי a הוא משתנה שאינו מוגדר: המחשב חושב ש-a הוא משתנה, ולכן הוא חייב להיות מוגדר ובעל ערך כדי שלא תהיה Error. אם הוא מוגדר, המחשב ידפיס את הערך השמור בתוך המשתנה a
Console.WriteLine('a'+'b');ידפיס 195, שהוא: 98 + 97
כאשר 98 הוא הקוד של ’b‘
וכאשר 97 הוא הקוד של ’a‘
Console.WriteLine('a'+ 0);מדפיס 97, והוא הקוד של ’a‘
Console.WriteLine(97);ידפיס 97
Console.WriteLine((char)97);ידפיס a
Console.WriteLine('a'+'0');ידפיס 145, שהוא סכום הקוד של ’a‘ (97) עם הקוד של ’0‘ (48)
Console.WriteLine('a'+'b'+"c");ידפיס 195c, כי החיבור בין תווים מביא לחיבור מספרים שלמים של המספרים שלהם (הקוד), ואילו הפלוס שלפני המחרוזת הוא שרשור.
Console.WriteLine((char)('a'+3)+"c");ידפיס dc, כי הוא מחבר את הקוד של a (97) עם המספר 3, כלומר מקבלים 100, ואז ממירים אותו לתו, והוא d, ואז הפלוס הוא שרשור.
שאלה 3.13: (שאלה המשלבת תנאים – לחזור אליה אחרי סיום פרק 4)
כתוב תוכנית שקולטת מן המשתמש תו ומדפיסה על המסך אם התו הזה מייצג אחת מאותיות השפה האנגלית. (הערה: על התוכנית להדפיס משפט הסבר שהתו הוא אות, אם הקלט הוא אחת מאותיות השפה האנגלית, בלי קשר לשאלה אם האות קטנה small letter או גדולה capital letter)
פתרון:
static void Main(string[] args)
{
  char ch;
  Console.Write("insert a character: ");
  ch = char.Parse(Console.ReadLine());
  if ((ch >= 'a' && ch <= 'z') || (ch>='A' && ch<='Z'))
      Console.WriteLine("It is a letter");
  else
      Console.WriteLine("It isn`t a letter");
}

כמה תוצאות אחרי הרצת התוכנית:

Microsoft Visual Studio Debug Console
insert a character: t
It is a letter
Microsoft Visual Studio Debug Console
insert a character: D
It is a letter
Microsoft Visual Studio Debug Console
insert a character: #
It isn`t a letter
שאלה 3.14: (שאלה המשלבת תנאים – לחזור אליה אחרי סיום פרק 4)
כתוב תוכנית שקולטת מן המשתמש אות אנגלית, ואם האות הזאת קטנה היא ממירה אותה לאות גדולה, ואם היא אות גדולה היא ממירה אותה לאות קטנה. על התוכנית להדפיס משפט הסבר שיש בו האות שקלטנו והאות אחרי ההמרה.
שאלה 3.15: כתוב תוכנית שקולטת שלוש ספרות כתווים (char), ועל התוכנית להדפיס על המסך את סכום שלוש הספרות האלה. דוגמה:
אם המשתמש הזין: ’7‘ ו-’2‘ ו-’1‘ התוכנית מדפיסה 10
המאם ותד (أ. همام وتد) — כל זכויות הספר שמורות למחבר. הספר נכתב בערבית, ותרגם אותו לעברית פהד גאנם. המהדורה העברית מתפרסמת באישור המחבר, עם תיקונים שאישר. ליצירת קשר עם המחבר: hammam4112@gmail.com