C++/תנאים: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Atavory (שיחה | תרומות)
Ybungalobill (שיחה | תרומות)
שורה 1:
{{C++}}
 
התוכניות שכתבנו עד כה פעלו באופן זהה כל פעם כשהרצנו אותן. אומנם לפעמים נרצה לגרום למחשב לבצע פעולות שונות בהתאם לקלט או מצב התוכנית עצמה. כדי לעשות זאת עלינו לגרום למחשב לבדוק איזשהו תנאי ובהתאם לתוצאה שהוא יקבל (האם התנאי אמיתי או שקרי) לבצע שורות קוד '''שונות'''. ב-C++‎ ישנם שני משפטי התנאיהקבלת החלטה (if ו-switch) ואופרטור תנאיההתניה אחד. נסביר את פעולתם בפרק זה.
 
== משפט if ==
שורה 16:
int a;
cin >> a;
 
if(a < 0)
cout << "The number you've entered is negative.\n";
שורה 26 ⟵ 27:
double a;
cin >> a;
 
if(a < 0)
{
שורה 31 ⟵ 33:
a = 0;
}
 
cout << "sqrt(" << a << ") = " << sqrt(a) << endl;
</source>
שורה 44 ⟵ 47:
// code 2
</source>
קרי: "אם ... אז ... אחרת ...". משפט זה יבדוק את התנאי ואם הוא נכון יבצע את קטע קוד הראשון (בדומה ל-if רגיל), אבל אם התנאי הוא לא נכון יתבצע קטע קוד השני, שזהזה שאחרי המילה השמורה else. נשתמש במשפט זה כשנרצה שרק אחד מהקטעים יתבצע. לדוגמה, נשנה את הדוגמה עם השורש הריבועי:
<source lang="cpp">
double a;
cin >> a;
 
if(a < 0)
cout << "Can't calculate the square root of negative number.\n";
שורה 56 ⟵ 60:
 
=== משפט else if ===
 
בתקן שפת C++&lrm; עצמה לא מוגדר משפט מהסוג הזה (לעומת שפות אחרות כמו Visual Basic לדוגמה). למרות זאת עדיין ניתן להרכיב מבנה כזה:
<source lang="cpp">
if(expression)
// code 1
else if(expression)
// code 2
else
// code 3
</source>
מבנה כזה הוא שני משפטי "אם ... אז ... אחרת ..." המקוננים אחד בתוך השני, כלומר משפט ה-if השני משחק תפקיד של פקודה שבאה בתוך בלוק ה-else של המשפט הראשון. נתבונן בדוגמה הבאה:
<source lang="cpp">
int a;
cin >> a;
 
if(a > 0)
cout << a << " is positive.\n";
else
{
if(a < 0)
cout << a << " is negative.\n";
else
cout << "It's zero.\n";
}
</source>
כיוון שמשפט תנאי if הוא פקודה אחת בפני המהדר, נוכל להוריד את צמד הסוגריים המסולסלים. כמו כן שפת C++&lrm; מתעלמת מרווחים &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; וירידות
 
שורה, לכן נוכל להעלות את ה-if לשורה של ה-else. זכרו שכיוון שאלה הן שתי מילות שמורות נפרדות, כפי שהוסבר כאן, יש להפריד אותן עם רווח, אין לכתוב elseif ביחד.
<source lang="cpp">
int a;
cin >> a;
 
if(a > 0)
cout << a << " is positive.\n";
else if(a < 0)
cout << a << " is negative.\n";
else
cout << "It's zero.\n";
</source>
בדוגמה הזאת התוכנית תדפיס רק הודעה אחת משלושת ההודעות האפשריות, בהתאם האם המספר חיובי, שלילי או אפס.
 
ניתן לקונן עוד משפטי if רבים בתוך חלק ה-else ככל שנרצה. התוכנית תבדוק את התנאים לפי הסדר עד שתגיע לתנאי אמיתי או לסוף המבנה - ה-else האחרון. כמו כן אנחנו לא חייבים להוסיף את חלק ה-else בסוף השרשרת הזו, במקרה כזה אם אף אחד מהתנאי לא מתקיים אז התוכנית תמשיך בביצוע שאר הפקודות שאחריו.
 
== משפט switch ==