You are on page 1of 102

‫ביטוי בוליאני מורכב תרגול‬

double speed, distance;


int rain;
speed =100, distance=10;

(speed < 80) || (distance <) = _______

(speed !=90) && (distance != 5) = ___T____


‫ביטוי בוליאני מורכב תרגול‬
double speed, distance;
int rain;
speed =100, distance=10;
rain=0;
(speed < 80) && (distance < 12) = ______
(speed > 80) || (distance < 12) = ______
(speed < 80) || (distance < 12) && (rain ==0) = ______
(speed < 80) || (distance < 12) && ! (rain ==0) = ______
(speed < 80) && (distance < __) = _______
(speed !=90) && (distance != 5) = _______
‫קוד תנאי מורכב‬
double speed =100, distance=10;
int rain=0;
if ( (speed < 80) || (distance > 12) && (rain ==0) )
{
viser = 0;
speed = speed +1;
}
else
{
speed = speed-1;
}
‫סיכום שעור‬

‫• ביטוי בוליאני מורכב‬


‫• פעולות לוגיות‬
‫• תנאי מורכבים‬
‫תנאי מקונן‬
‫תנאי בתוך תנאי‬

‫• תלמיד מעל גיל ‪15‬‬


‫• ממוצע מעל ‪85‬‬
‫תנאי מקונן‬
‫מבנה –‬
‫ההוראה‬
‫הוראת בחירה ‪switch‬‬

‫החלפת הוראות ‪ if‬רבות אחת אחרי השניה‬


‫הוראת‬
‫בחירה‬
‫‪switch‬‬
‫הוראת בחירה ‪switch‬‬

‫המילים ‪break, default, case,switch‬‬


‫הן מילים שמורות‬
‫הוראת בחירה ‪switch‬‬
‫• ‪if‬או ?‪switch‬‬
‫• כל משפט ‪switch‬יכול להיות מוחלף בסדרה של משפטי ‪if‬מקוננים )ראה‬
‫חלק קודם במדריך(‪ ,‬אך לא להיפך‪.‬‬
‫• מומלץ להשתמש במשפט ‪switch‬אם ניתן‪ ,‬מאחר והקוד של התוכנית יוצא‬
‫יותר ברור‪.‬‬
‫• לדוגמא‪ ,‬אותה תוכנית אשר הייתה משתמשת במשפטי ‪if‬מקוננים הייתה‬
‫נראית כך‪:‬‬
‫מתי נשתמש בלולאות?‬
‫כשאנו רוצים לחזור על סדרת פעולות מספר‬
‫פעמים ברצף‬
‫מבנה לולאת ‪for‬‬

‫אתחול‬ ‫תנאי בוליאני‬ ‫הוראה לעדכון המשתנים‬


‫בכל סבוב של הלולאה‬

‫) ‪for (int i = 0; i < 10 ; i++‬‬


‫{‬
‫;‪do something as long as i < 10 is true‬‬
‫}‬
for ‫מבנה לולאת‬

static void Main(string[] args)


{
for (int i = 0; i < 6; i++)
{
Console.WriteLine(i);
}
}
‫שימוש במונה‬
‫בתוך לולאה‬
‫• מונה הוא משתנה שתפקידו למנות את מספר הפעמים‬
‫שמתקיים מצב מסוים ‪.‬‬
‫‪ ‬לדוגמא ‪ -‬לכל תלמיד שלו אופניים חשמליות ‪,‬ערכו של‬
‫המונה עולה ב‪1-‬‬

‫• את המונה יש לאתחל ‪ .‬לרב האתחול הוא על ידי השמת‬


‫הערך ‪. 0‬‬
‫‪ ‬שאלה‪ :‬היכן בתכנית נבצע את אתחול המונה?‬
‫מעל ללולאה‪:‬‬
‫;‪int counter = 0‬‬ ‫‪‬הגדרת המונה –למשל ‪int counter‬‬
‫)‪for ( int i = 0; i < n; i++‬‬ ‫‪‬אתחול המונה ‪counter = 0‬‬

‫{‬
‫התנאי שאנחנו בודקים ( ‪if‬‬ ‫בתוך הלולאה‬
‫‪ ‬ערך המונה ‪ counter‬גדל ב ‪1‬‬
‫)מתקיים‬ ‫כאשר התנאי מתקיים‬
‫;‪//counter = counter +1‬‬
‫;‪counter ++‬‬
‫אחרי הלולאה‬
‫}‬ ‫‪‬הצגת ערך המונה כפלט או‬
‫שימוש בו בחישובים נוספים‬
‫;)‪Console.WriteLine(counter‬‬
class Program
{
static void Main(string[] args)
{ :‫מעל ללולאה‬
int BikeOwners = 0; ‫הגדרת המונה‬
for (int i = 1; i <= 20; i++) ‫אתחול המונה‬
{

}
}
class Program
{
static void Main(string[] args)
{
int bikeOwners = 0;
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("Student #" + i + " do you have bike? (y/n)");
String hasbike = (Console.ReadLine());

}
}
}

hasBike ‫מוגדר בתוך‬


?‫הלולאה‬
?‫האם זה יכול להוות בעיה‬
class Program
{
static void Main(string[] args)
{
int bikeOwners = 0;
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("Student #" + i + " do you have bikes?
(y/n)");
String hasBike = (Console.ReadLine());
‫בתוך הלולאה‬
if (hasBike == "y") 1 ‫ ערך המונה גדל ב‬
bikeOwners++; //bikeOwners = bikeOwners ‫מתקיים‬
+ 1; ‫כאשר התנאי‬
}
}
}
class Program
{
static void Main(string[] args)
{
int bikeOwners = 0;
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("Student #" + i + " do you have bikes?
(y/n)");
String hasbike = (Console.ReadLine());
if (hasbike == "y")
bikeOwners++; //bikeOwners = bikeOwners + 1; ‫אחרי הלולאה‬
}
‫הצגת ערך המונה‬
‫כפלט‬
Console.WriteLine(bikeOwners + " students have bikes.");
}
}
class Program
{
static void Main(string[] args)
{
int bikeOwners = 0;
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("Student #" + i + " do you have bikes?
(y/n)");
String hasbike = (Console.ReadLine());
if (hasbike == "y")
bikeOwners++;
}
Console.WriteLine(bikeOwners + " students have bikes.");
}
}
‫צובר בלולאת ‪for‬‬
‫סיכום של נתונים ‪/‬ישנן בעיות בהן יש צורך בצבירה‬
‫חישוב סך כל הציונים לשם חישוב ממוצע ‪‬‬
‫חישוב סכום מחירי מוצרים עד למיצוי תקציב הקניה ‪‬‬

‫צובר – משתנה שתפקידו לצבור )לסכום( ערכים‬


‫היכן נאתחל אותו ולאיזה ערך? ‪‬‬
for ‫צובר בלולאת‬
class BlackFriday
{
static void Main(string[] args)
{
int itemCostSum = 0;
Console.WriteLine("Please enter cost of each 5 items you bought.");
for (int i = 0; i < 5; i++)
{
int itemCost = int.Parse(Console.ReadLine());
itemCostSum += itemCost; // itemCostSum = itemCostSum + itemCost;
}
Console.WriteLine("Total purchases on Black Friday were " +
itemCostSum);
}
}
class Program (‫נרחיב את הבעיה שפתרנו קודם )כאן מימין‬
{ • ‫כעת נחשב כמה בעלי חיים יש לכל‬
static void Main(string[] args) ?‫התלמידים ביחד‬
{ • ‫כמה בעלי חיים יש לכל תלמיד בממוצע‬
int bikeOwners = 0;
?(‫)מדוייק‬
for (int i = 1; i <= 20; i++)
{
Console.WriteLine("Student #" + i + " do you have bikes?
(y/n)");
String hasbike = (Console.ReadLine()); ‫איזה משתנה‬
if (hasbike == "y") ?‫עלינו להוסיף‬
bikeOwners++;
}
Console.WriteLine(bikeOwners + " students have‫לעשות‬bikes.");
‫מה עלינו‬
} ‫על מנת לקבל‬
} ?‫ממוצע מדוייק‬
‫בעיות מינימום ומקסימום‬

‫רוברט פרשינג האיש‬


‫הכי גבוה בעולם נולד‬
‫ב‪ 22-‬בפברואר‬
‫‪1918‬התנשא לגובה‬
‫הבלתי נתפס של ‪2.7‬‬
‫מטרים‪.‬‬
‫מתי נדרש למצוא מינימום או מקסימום‬
‫מבין רשימת ערכים?‬
‫דוגמא מציאת ערך המינימום – ‪ 3‬טלפונים‬

‫קח המחיר של הטלפון‬


‫הראשון ברשימה‬
‫שמור את המחיר בתור‬
‫‪Min‬‬

‫‪Min‬‬
‫מינימום‬ ‫‪Min = 3450‬‬
‫תורן‬
‫מציאת ערך המינימום‬

‫קח את המחיר של הטלפון השני ברשימה‬


‫אם המחיר נמוך מהמינימום התורן ‪Min‬‬
‫שמור את המחיר בתור ‪Min‬‬

‫אם‬
‫תנאי‬ ‫‪Min = 3450‬‬
‫מציאת ערך המינימום‬

‫קח את המחיר של הטלפון השלישי‬


‫ברשימה‬
‫אם המחיר נמוך מהמינימום התורן ‪Min‬‬
‫שמור את המחיר בתור ‪Min‬‬

‫‪Min = 3399‬‬
‫מה נשנה באלגוריתם שלנו כדי למצוא‬
‫את המקסימום?‬

‫התנאי למקסימום‪:‬‬
‫אם המחיר גבוה‬ ‫התנאי למינימום‪:‬‬
‫אם המחיר נמוך‬
‫מהמקסימום התורן ‪Max‬‬
‫מהמינימום התורן ‪Min‬‬
‫שמור את המחיר בתור‬
‫שמור את המחיר בתור ‪Min‬‬
‫‪Max‬‬
‫בכמה פעולות תנאי השתמשנו?‬

‫כאשר רצינו למצוא את‬


‫המינימום או מקסימום‬
‫מבין ‪ 3‬ערכים‬
‫השתמשנו ב ‪ 2‬תנאים‬
‫בכמה פעולות תנאי נשתמש עבור‬
‫‪ n‬ערכים?‬
‫כאשר רוצים למצוא את המינימום‬
‫מבין ‪ n‬ערכים נשתמש ב ‪ n-1‬תנאים‬

‫במקום לכתוב ‪ n-1‬תנאים נשתמש‬


‫בלולאה ‪ for‬שתבצע את התנאי באופן‬
‫חוזר‬
‫שימוש בלולאה לחישוב‬
‫מינימום‬
‫האיבר‬
‫הראשון‬
‫משמש‬
‫לאתחול‬
‫המינימום‬
‫התורן‬
‫שקופית ‪140‬‬

‫הערך הראשון‬ ‫‪AT2‬‬


‫‪Almog Tamir, 19/02/2020‬‬
‫לסכום‪:‬‬

‫‪ .1‬מציאת הערך הקטן ביותר או הגדול ביותר היא פעולה‬


‫נדרשת ופופולארית מאוד‬
‫‪ .2‬באמצעות שימוש במשתנה תורן )מינימום או מקסימום(‬
‫ולולאה ניתן למצוא את הערך הנדרש‪.‬‬
‫‪ .3‬הלולאה תתבצע ‪ n-1‬פעמים החל האיבר השני ) האיבר‬
‫הראשון ישמש לאתחול המשתנה התורן(‬
‫תרגיל כיתה ‪ :‬מכירה פומבית‬
‫כתבו קטע תוכנית שקולטת ‪ 8‬הצעות למכירה פומבית‪ ,‬ומוצאת את ההצעה‬
‫הזוכה!‬
‫לולאת תנאי ‪while‬‬
‫לולאת ‪While‬‬
‫‪ ‬פעמים רבות אנו לא יודעים מראש כמה פעמים הלולאה צריכה להתבצע‪.‬‬
‫‪ ‬דוגמא‪ :‬נרצה שהצב ינוע צעד צעד עד אשר הוא יגיע לחסה‪.‬‬
‫‪ ‬במקרים אלו נשתמש בלולאת ‪ - while -‬כל עוד תנאי מתקיים‪.‬‬
‫‪ ‬האם הצב רחוק מהחסה?‬
‫‪ ‬כן – תנוע צעד אחד‪.‬‬

‫‪ ‬למה ‪ for‬לא מספיק טוב לצב?‬


‫לולאת ‪While‬‬
‫‪ ‬דוגמא‪ :‬קליטת רשימת שמות תלמידים שאורכה אינו ידוע‪) .‬לעומת רשימה‬
‫בעלת אורך ידוע(‬
‫‪ ‬דוגמא‪ :‬קליטת רשימת מחירים באורך לא ידוע‪.‬‬
‫‪ ‬במקרים אלו נשתמש בלולאת ‪ - while -‬כל עוד תנאי מתקיים‪.‬‬
While ‫לולאת‬
While ‫לולאת‬
‫תרגיל‬

‫‪‬כתבו קטע קוד הקולט מהמשתמש מספר שלם‪ .‬אם‬


‫המספר אינו תלת‪-‬ספרתי‪ ,‬המשתמש יתבקש להקליד את‬
‫המספר מחדש‬
?‫ מה עושה הקוד הבא‬

Int count = 0, n = 0;
while (count < 3)
{
Console.WriteLine("enter n");
n = int.Parse(Console.ReadLine());
if (n % 2 == 0)
count ++;

}
‫לולאה אין סופית‬

‫הקוד הבא תקין מבחינה תחבירית אך אינו תקין מבחינה לוגית‪.‬‬


‫ערכו של ‪ n‬נשאר ‪ 0‬ולכן הלולאה לא תסתיים – תנאי הלולאה מתקיים לנצח‪.‬‬
‫למצב זה קוראים‪ :‬לולאה אין סופית‪.‬‬

‫;‪n = 0‬‬
‫)‪while (n <10‬‬
‫‪while ,‬כאשר יוצרים לולאת‬
‫)‪Consle.WriteLine(n‬‬
‫עלינו למנוע מצב של לולאה‬
‫אין סופית‬
‫לולאת זקיף‬
‫זקיף‪ :‬נתון קלט חריג שקליטתו וזיהויו מסמנים את סיום תהליך‬
‫הקלט‬

‫דוגמאות‬

‫סוף סדרת שמות "" ‪" :‬משה" "רבקה" "דויד" "שרה" ""‬
‫סוף סדרת ציונים ‪-1 87 80 100 90 : -1‬‬

‫הזקיף הוא לא חלק מסדרת הנתונים‬


‫לולאת מעבר חוסם‬
‫מעבר חוסם‪ :‬תנאי כניסה וביצוע של הלולאה – ההוראות של‬
‫הלולאה מתבצעות כל עוד המשתנה לא הגיע לערכו של החוסם‬

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

‫‪ ‬אם תנאי הלולאה אינו מתקיים – קוד הלולאה לא יתבצע‪.‬‬


‫‪ ‬נהוג להשתמש בלולאה זו כאשר מספר הפעמים לביצוע קטע קוד אינו ידוע‪.‬‬
‫‪ ‬ניתן להשתמש בלולאה זו גם כאשר מספר הפעמים ידוע מראש – בדיוק כמו לולאת ‪.for‬‬
‫‪ ‬ניתן לכתוב ביטוי מורכב הכולל מספר תנאים ע"י קשרים לוגיים‪.‬‬
‫‪ ‬עלינו להימנע ממצב בו הלולאה אינה מסתיימת – לולאה אין סופית‪.‬‬
‫תרגיל ופתרון‬

‫‪ ‬כתבו קטע קוד הקולט מספרים חיובים עד אשר ייקלט מספר שלילי‪ .‬יש להדפיס את המספרים החיובים שנקלטו‪.‬‬

‫נקלוט מספר‪ .‬אם הוא מקיים את‬


‫))'‪n = int(input('Enter number‬‬ ‫התנאי‪ ,‬נבצע את קוד הלולאה‬
‫‪while (n >= 0):‬‬
‫)‪print (n‬‬
‫))'‪n = int(input('Enter number‬‬ ‫נדפיס את המספר‪1. .‬‬
‫)'‪print ('End loop‬‬ ‫נקלוט מספר חדש‪2. .‬‬
‫נבדוק שוב את תנאי הלולאה‪3. .‬‬
‫נגיע לשורה זו רק לאחר‬
‫שתנאי הלולאה לא התקיים‪.‬‬
‫תרגיל ופתרון‬

‫‪ ‬לפניכם קטע קוד‪ .‬הריצו ובידקו מה הקוד מבצע‪ .‬מה תפקיד ‪ 2‬המשתנים בקוד‪.‬‬

‫‪sum = 0‬‬ ‫הקוד קולט מספרים שלמים עד אשר סכומם גדול מ –‬


‫‪num = 0‬‬ ‫‪.100‬‬
‫‪while sum + num <100:‬‬ ‫פלט‪ :‬סכום המספרים שנקלטו וקיימו את התנאי‪.‬‬
‫‪sum += num‬‬
‫))'‪num = int(input('Enter number‬‬
‫)‪print ('Total: ',sum‬‬

‫‪sum = 0‬‬ ‫– סכום המספרים‪ .‬ערכו הראשוני ‪ 0‬וכל פעם ‪sum‬‬


‫))'‪num = int(input('Enter number‬‬ ‫נוסיף לו את המספר שנרצה‪ .‬נקרא‪ :‬משתנה צובר‪.‬‬
‫‪while sum + num <100:‬‬ ‫– המספר שקלטנו‪ .‬ערכו הראשוני ‪ – 0‬עדיין לא ‪num‬‬
‫‪sum += num‬‬ ‫קלטנו מספר ולכן כדי לבצע את הלולאה נאתחל את‬
‫))'‪num = int(input('Enter number‬‬ ‫ערכו ב‪.0 -‬‬
‫)‪print ('Total: ',sum‬‬ ‫ניתן לבצע זאת גם בדרך נוספת‪ .‬קוד מצורף‪ .‬‬
‫תרגיל ופתרון‬

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

‫‪sum = 0‬‬
‫‪num = 0‬‬ ‫יש לשנות רק את תנאי העצירה של הלולאה‪.‬‬
‫‪while num >= 0:‬‬ ‫תנאי העצירה – קלטנו מספר שלילי‪.‬‬
‫‪sum += num‬‬
‫))'‪num = int(input('Enter number‬‬
‫)‪print ('Total: ',sum‬‬
‫לולאות מקוננות‬
‫לולאות מקוננות‬
‫לולאות מקוננות‬
‫לולאות מקוננות‬
‫תרגול –‬
‫עמוד ‪ 168‬תרגיל ‪ 14‬מספר מושלם‬
‫פעולות סטטיות‬
‫מהי פעולה?‬

‫‪ ‬רצף הוראות המבצעות תת משימה מסוימת‬


‫‪ ‬ניתנת לשימוש חוזר לפי הצורך‬
Console-‫ ו‬Math ‫פעולות‬

:‫ למעשה הנכם משתמשים בפעולות בלי ששמתם לב‬


Console.WriteLine(“Hello”) 
myMax = Math.Max(num1, num2) 
‫כעת בואו נשווה בין שתי תכניות‪:‬‬
‫מה עושה התכנית הבאה?‬
‫שימוש פעולות – למה זה טוב?‬
‫‪ ‬שימוש בקוד קיים )במקום לכתוב מחדש בכל פעם(‬

‫‪ ‬מאפשרת חלוקה לתת משימות הנדרשות )פיתוח במקביל(‬


‫יתרונות בשימוש בפעולות‬

‫‪ ‬התוכנית קריאה יותר ומובנת יותר‬


‫מניעת "קוד ספגטי"‬

‫‪ ‬תהליך תיקון השגיאות קל יותר‪:‬‬


‫‪ ‬ניתן לבדוק כל פעולה בנפרד‬
‫‪ ‬שגיאה שנמצאה בפעולה יש צורך לתקן‬
‫‪ ‬אותה פעם אחת בלבד‬
‫הגדרת פעולה אשר מחזירה ערך‬

‫)שמות הפרמטרים וטיפוסיהם( שם_הפעולה טיפוס_הערך_המוחזר ‪Public static‬‬


‫{‬
‫הצהרה על המשתנים של הפעולה ‪//‬‬
‫הוראות לביצוע ‪//‬‬
‫הערך המוחזר על ידי הפעולה ‪return‬‬
‫}‬
?‫זוכרים את התוכנית שלנו‬
:‫ פעולות‬3 ‫ בתכנית יש לנו‬
GetNumberFromUser 
IsEvenNumber 
PrintNumber 
‫זוכרים את התוכנית שלנו?‬
‫‪ ‬בואו נסתכל על הפעולה ‪:GetNumberFromUser‬‬

‫הפעולה לא מקבלת פרמטרים‬ ‫‪‬‬

‫הפעולה מחזירה את המספר‬ ‫‪‬‬


‫שקלטה מהמשתמש‬
‫זוכרים את התוכנית שלנו?‬
‫‪ ‬בואו נסתכל על הפעולה ‪:IsEvenNumber‬‬

‫הפעולה מקבלת פרמטר אחד מטיפוס ‪int‬‬ ‫‪‬‬

‫הפעולה מחזירה ערך בוליאני‪ .‬אמת אם המספר‬ ‫‪‬‬


‫זוגי‪ ,‬שקר אחרת‪.‬‬
‫תרגול‬

‫מה עושה הפעולה הבאה‪:‬‬ ‫‪‬‬


‫תרגול‬

‫כתבו את התוכנית הבאה‪:‬‬


‫קלטו מספר מהמשתמש בגודל של עד ‪ 1-50‬וקראו לפעולה סטטית‬
‫)פונקציה( שמציירת ריבוע בגודל של המספר הנקלט‪.‬‬
‫משולש‬
‫קו ישר‬
‫תרגול – הגדרה של פעולה‬
‫כתבו הגדרת כותרת פעולה לכל אחד מהחישובים הבאים‪:‬‬

‫חישוב הפרש בין גבהים ‪:‬‬ ‫‪‬‬

‫מספר הפעמים שספרה זוגית מופיעה במספר נתון ‪:‬‬ ‫‪‬‬

‫בדיקה האם מספר ‪ a‬מתחלק במספר ‪: b‬‬ ‫‪‬‬

‫בדיקה האם ‪ 3‬מספרים שלמם שווים‪:‬‬ ‫‪‬‬


‫תרגול‬

‫כתבו פעולה אשר קולטת מספר מהמשתמש ומחזירה אותו‬ ‫‪‬‬

‫כתבו פעולה אשר מקבלת שני מספרים ומחזירה את המקסימלי מביניהם‬ ‫‪‬‬

‫כתבו פעולה אשר מקבלת ‪ 3‬מספרים ומחזירה את הסכום שלהם‬ ‫‪‬‬

‫כתבו פעולה אשר מקבלת מספר ומחזירה אמת‪/‬שקר האם מתחלק בשלוש‬ ‫‪‬‬
‫זימון פעולה‬
‫‪ ‬יש להבדיל בין הגדרת הפעולה לבין זימון הפעולה‬
‫‪ ‬זימון הפעולה )קריאה לפעולה( ייעשה לרוב מהתכנית הראשית‬
‫‪ ‬זימון פעולה דומה לאופן שבו השתמשנו בפעולות ‪:Math‬‬
‫‪ ‬כיצד משתמשים בערך המוחזר מהפעולה‪:‬‬
‫‪ ‬הדפסת הערך‪:‬‬

‫‪ ‬השמה לתוך משתנה‪:‬‬

‫‪ ‬השוואה‪:‬‬
‫הגדרת פעולה לעומת זימון פעולה‬
‫‪ ‬הגדרת פעולה כוללת‪:‬‬
‫‪ ‬כותרת הפעולה – שם‪ ,‬פרמטרים אשר מקבלת‪,‬‬
‫האם מחזירה תוצאה כלשהי‬
‫‪ ‬גוף הפעולה עצמה – סדרת פקודות אשר‬
‫הפעולה אמורה לבצע‬

‫‪ ‬זימון פעולה‪:‬‬
‫‪ ‬לאחר הגדרת הפעולה ניתן לזמן אותה )לקרוא לה(‬
‫‪ ‬הזימון יכול להתבצע מתוך הפעולה הראשית או מתוך כל‬
‫פעולה אחרת‬
‫תרגול – זימון פעולה‬
‫הפעולה‪ public static int Factorial (int n) :‬מחשבת את !‪) n‬עצרת(‪ .‬כתוב‬
‫זימון מתאים לחישובים הבאים‪:‬‬

‫‪!5‬‬ ‫‪‬‬

‫!‪num‬‬ ‫‪‬‬

‫!)‪(n1-n2‬‬ ‫‪‬‬

‫!‪a!+b‬‬ ‫‪‬‬
‫תרגול‬

‫כתבו תכנית אשר קולטת ‪ 3‬מספרים מהמשתמש‪ ,‬מחשבת את סכומם ומדפיסה האם‬ ‫‪‬‬

‫הסכום שלהם מתחלק ב‪ .3-‬השתמשו בפעולות שכתבתם בתרגול הקודם!‬

‫תזכורת‪:‬‬

‫‪ ‬כתבו פעולה אשר קולטת מספר מהמשתמש ומחזירה אותו‬

‫‪ ‬כתבו פעולה אשר מקבלת שני מספרים ומחזירה את המקסימלי מביניהם‬

‫‪ ‬כתבו פעולה אשר מקבלת ‪ 3‬מספרים ומחזירה את הסכום שלהם‬

‫‪ ‬כתבו פעולה אשר מקבלת מספר ומחזירה אמת‪/‬שקר האם מתחלק בשלוש‬
‫ההבדל בין פרמטרים ובין משתנים מקומיים‪:‬‬
‫פרמטרים הם משתנים המוגדרת בכותרת הפעולה‬ ‫‪‬‬

‫הפרמטרים יוקצו עם הזימון לפעולה ויקבלו ערכים‬ ‫‪‬‬

‫מהזימון עצמו‪:‬‬

‫משתנים מקומיים מקבלים ערך בתוך הפעולה‬ ‫‪‬‬

‫למשתנים מקומיים המוגדרים בתוך הפעולה אין "כל קשר" למשתנים בפעולות אחרות‬ ‫‪‬‬

‫ערכו של משתנה המופיע במשפט זימון הפעולה לא משתנה עקב זימון הפעולה‬ ‫‪‬‬

‫בזימון הפעולה מעבירים ערכים לפרמטרים – הערכים יכולים להיות של קבוע‪ ,‬משתנה‬ ‫‪‬‬

‫או ביטוי חשבוני‬


‫הגדרת פעולה אשר אינה מחזירה ערך‬

‫)שמות הפרמטרים וטיפוסיהם( שם_הפעולה ‪Public static void‬‬


‫{‬
‫הצהרה על המשתנים של הפעולה ‪//‬‬
‫הוראות לביצוע ‪//‬‬
‫}‬
?‫זוכרים את התוכנית שלנו‬
:‫ פעולות‬3 ‫ בתכנית יש לנו‬
GetNumberFromUser 
IsEvenNumber 
PrintNumber 
‫זוכרים את התוכנית שלנו?‬
‫‪ ‬בואו נסתכל על הפעולה ‪PrintNumber :‬‬

‫הפעולה מקבלת מספר כפרמטר‬ ‫‪‬‬

‫הפעולה מדפיסה את המספר ולא‬ ‫‪‬‬


‫מחזירה ערך‬
‫תרגול‬

‫כתבו פעולה אשר מקבלת מספר ומדפיסה את כל המספרים הקטנים ממנו אשר מתחלקים‬ ‫‪‬‬

‫ב‪7-‬‬

‫כתבו פעולה אשר מקבלת מספר מ‪ 1-‬עד ‪ 12‬ומדפיסה את החודש שמייצג אותו‬ ‫‪‬‬
‫תרגול נוסף‪:‬‬
‫שאלה ‪:1‬‬ ‫‪‬‬
‫א‪ .‬כתבו פעולה שמקבלת מספר שלם וחיובי‪ ,‬ומחזירה ‪ true‬אם הספרה ‪ 5‬מופיעה במספר‪.‬‬
‫ב‪ .‬כתבו פעולה ראשית שתקלוט מספר טבעי‪ ,‬תזמן עבורו את הפעולה מסעיף א ותדפיס את הערך שהוחזר‬
‫מהפעולה‪.‬‬
‫שאלה ‪:2‬‬ ‫‪‬‬
‫א‪ .‬כתבו פעולה המקבלת זמן בשני פרמטרים המייצגים שעות ודקות ומחזירה את משך הזמן הכולל בדקות‬
‫ב‪ .‬כתבו פעולה המקבלת שני זמנים ‪ -‬כל זמן מיוצג ע"י שני משתנים )שעות ודקות(‪ ,‬ומחזירה את הפרש‬
‫הזמנים בדקות‪) .‬היעזרו בפעולה מסעיף א(‬
‫ג‪ .‬כתבו תכנית המקבלת כקלט את זמן תחילת העבודה של עובד ואת זמן סיום העבודה של עובד בכל אחד מ‪-‬‬
‫‪ 30‬ימי החודש‪ .‬פלט התכנית הוא מספר היום שבו עבד העובד את הזמן הרב ביותר )היעזרו בפעולה מסעיף‬
‫ב' (‬
‫תכנות מונחה עצמים‬
OBJECT ORIENTED PROGRAMMING
‫תוכן עניינים‬

‫‪ ‬מבוא לתכנות מונחה עצמים‬

‫‪ ‬על טיפוסים ועצמים‬

‫‪ ‬עקרונות שימוש ומימוש מחלקות ב‪C# -‬‬

‫‪ ‬תרגילים‬

‫‪ ‬השלמות‬
‫מבנה הזיכרון – הפניות‬ ‫‪o‬‬

‫הפעולות ‪equal , toString, default constructor‬‬ ‫‪o‬‬


‫למה תכנות מונחה עצמים ?‬
‫נניח שרוצים לבנות תכנית שמקבלת פרטים של לקוח )שם פרטי ושם משפחה ( ומציגה אותם על המסך ובנוסף מקבלת‬
‫פרטים על כלי רכב )דגם ויצרן ( ומציגה אותם על המסך ‪.‬‬

‫מה למדנו עד כה ? מגדירים משתנים ופעולות‬


‫תכנות פרוצדורלי‬
‫משתנים‬ ‫פעולות‬

‫הכנסת‬
‫שם פרטי‬
‫פרטי‬
‫לקוח‬
‫לקוח‬
‫שם משפחה‬
‫הדפסת‬
‫יצרן‬
‫פרטי‬
‫כלי רכב‬ ‫מכונית‬
‫דגם‪/‬מודל‬

‫הכנסת‬
‫פרטי‬
‫מכונית‬

‫הדפסת‬
‫פרטי‬
‫לקוח‬
‫תכנות פרוצדורלי ‪ -‬חסרונות‬

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

‫כאשר התכנית נהיית גדולה מאוד ‪ ,‬יותר קשה לאתר באגים ‪ .‬מאוד קשה לשנות או להוסיף דברים‬
‫לפעולות ‪.‬מאוד קשה לתחזק את התכנית )נניח במקרה שהמפתח עוזב ומישהו אחר צריך לתחזק(‬
‫תכנות מונחה עצמים – נבנה ישויות‬
‫‪Customer‬‬ ‫‪Car‬‬

‫‪FirstName‬‬ ‫‪Manufactur‬‬
‫‪er‬‬
‫‪LastName‬‬ ‫‪Model‬‬

‫‪input‬‬ ‫‪input‬‬

‫‪Displa‬‬ ‫‪Displa‬‬
‫‪y‬‬ ‫‪y‬‬

‫אם קיים באג בנוגע ללקוח אנו נדע לאתר בייתר קלות את המקום שמטפל בלקוח ולתקן אותו ‪.‬ניתן אפילו‬
‫להחליף את כל התיאור של לקוח ולכתוב מחדש – הקוד מודולארי ‪) .‬כמו תיקון של חלק במכונית‬
‫‪/‬טלוויזיה ‪/‬מקרר( ‪.‬‬

‫אם קיים צורך ניתן להוסיף ישות חדשה ‪ .‬ישות כזו היא נפרדת ומייצגת את עצמה ולא מפריעה לישויות‬
‫הקיימות ‪ .‬כל רעיון ‪,‬שם עצם ‪,‬תפקיד שקיים בתכנית ניתן לייצוג באמצעות ישות נפרדת‬
‫תכנות מובנה עצמים – סיכום למה‬

‫‪ ‬השאיפה היא לכתוב תכניות המחקות את חשיבת האדם‬

‫קרובות יותר לשיח האנושי ‪ ,‬למציאות האמיתית ולעולם המושגים של הבעיה הנפתרת‪.‬‬ ‫‪‬‬

‫‪ ‬התכנות יותר מובנה )מודולארי( – קל לתחזוק‬


‫‪ ‬קל יותר לפיתוח – ניתן לחלק לתתי משימות ולצוותים שונים ‪,‬לקבצים שונים‬
‫‪ ‬קל להתמצא בפרויקטים מאוד גדולים‬
‫על עצמים וטיפוסים‬
‫איזה טיפוסים ופעולות פגשנו עד כה ?‬

‫‪ ‬טיפוסים פשוטים )‪ (primitive‬כמו ‪int , double , char ,bool‬‬


‫‪ ‬פעולות חיבור ‪ ,‬חיסור יחס בין הערכים ‪ ,‬לסדר אותם ‪,‬עיבוד‬
‫‪ ‬הכרנו גם טיפוס שאינו פשוט כמו ‪string‬‬
‫‪ ‬פעולות שרשור ‪ ,‬החזרת תת מחרוזת ‪ ,‬החלפת תווים ועוד‬
‫‪ ‬עוד טיפוס לא פשוט שהכרנו ‪array :‬‬
‫‪ ‬פעולות לטיפול באוסף של נתונים ‪,‬לגשת ‪,‬לשלוף איבר מהאוסף‬

‫עתה נלמד על טיפוסים נוספים‬


‫עצמים‬
‫‪ ‬העולם בנוי מעצמים )אובייקטים(‪ .‬הם המרכיבים הבסיסיים שלו‪.‬‬

‫‪ ‬לכל עצם יש תכונות המתארות אותו ופעולות שניתן לבצע עליו ‪.‬‬

‫‪ ‬למשל‪ ,‬כשאנו יוצאים מהבית‪ ,‬אנו לוקחים‬


‫עמנו טלפון‪-‬סלולארי‬

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

You might also like