25
1 שיעור רביעי: לולאותonline.shenkar.ac.il/moodle online.shenkar.ac.il/moodle http:// http:// קורס מבוא למדעי המחשב קורס מבוא למדעי המחשב סמסטר א סמסטר א' ' תשס תשס" ח תזכורת תזכורת: : בקרת זרימה בקרת זרימה משפטי משפטיif if- else else if (num % 2 == 0) if (num % 2 == 0) cout cout << << “ Even number Even number”; else else cout cout << << “ Odd number Odd number”; תנאים אפשריים תנאים אפשריים: : == == ,< ,> , ,< ,> , = ,< ,< = ,> ,> != != . תנאים ומספרים תנאים ומספרים: : 0 משמעו משמעוFalse False , , מספר שונה מ מספר שונה מ- 0 משמעו משמעוTrue True . פעולות לוגיות פעולות לוגיות) ! ) ! NOT NOT ( && , && , ) AND AND ( || , || , ) OR OR .( .( למשל למשל: ((5>4) || (2>3)), ((5>4)&&(3>2)), (!(2>3)) ((5>4) || (2>3)), ((5>4)&&(3>2)), (!(2>3)) . סדר הקדימויות סדר הקדימויות, , פעולות חשבון לפני פעולות חשבון לפני השוואות השוואות. . בחירה בין יותר משני מצבים בחירה בין יותר משני מצבים הרבה הרבהif if- else else- if if- else else מקוננים מקוננים. . switch switch

4 לולאות

Embed Size (px)

DESCRIPTION

C LAN, C LANG

Citation preview

1

לולאות : שיע ור רביע י

online.shenkar.ac.il/moodleonline.shenkar.ac.il/moodlehttp://http://

קורס מבוא למדעי המחשבקורס מבוא למדעי המחשב

חח""תש סתש ס' ' סמסטר אסמסטר א

בקר ת זרימה בקר ת זרימה : : תזכורתתזכורתifif--elseelseמשפטי משפטי ••

if (num % 2 == 0) if (num % 2 == 0) coutcout << << ““Even numberEven number””;;

else else coutcout << << ““Odd numberOdd number””;;

: : תנאים אפשרייםתנאים אפשריים•••• == == ,< ,> , ,< ,> ,== ,< ,<== ,> ,>!=!=..

..TrueTrue משמעו משמעו 00--מספר שונה ממספר שונה מ, , FalseFalse משמעו משמעו 00: : תנאים ומספר יםתנאים ומספר ים••

פעולות לוגיו ת פעולות לוגיו ת ••••) !) !NOTNOT(( && , && ,))ANDAND(( || , || ,))OROR.(.(

..((3<2)!) ,((2<3)&&(4<5)) ,((3<2) || (4<5))((3<2)!) ,((2<3)&&(4<5)) ,((3<2) || (4<5)) ::למשללמשל ••

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

בחירה בין יותר משנ י מצביםבחירה בין יותר משנ י מצבים••. . מקו נניםמקו נניםifif--elseelse--ifif--elseelseהרבה הרבה ••

••switchswitch

2

דוגמא מ השיעו ר שעבר דוגמא מ השיעו ר שעבר #include <#include <iostream.hiostream.h>>

void main()void main()

{{

double exam, exercises, final;double exam, exercises, final;

coutcout << << ““Enter your exam grade and exercises gradeEnter your exam grade and exercises grade\\nn””;;

cincin >> exam >> exercises;>> exam >> exercises;

ifif ((exam >= 60) && (exercises >= 60))((exam >= 60) && (exercises >= 60))

{{

final = 0.final = 0.88 * exam + 0.* exam + 0.22 * exercises;* exercises;

coutcout<<<<““You passed You passed –– your grade is your grade is ””<<final<<<<final<<endlendl;;

}}

elseelse

{{

final = exam;final = exam;

coutcout<<<<““You failed You failed –– your grade is your grade is ””<<final<<<<final<<endlendl;;

}}

}}

תוכנ ית לחיש וב צי ון סופ י

בקורס

תר גום ציון אמר יק איתר גום ציון אמר יק אי: : תזכורת תזכורת-- switch switch

char grade;char grade;

cincin >> grade;>> grade;

switchswitch ((gradegrade))

{{

casecase ‘‘AA’’::

coutcout << << ““90 90 –– 100100\\nn””;;

break;break;

casecase ‘‘BB’’::

coutcout << << ““80 80 –– 8989\\nn””;;

break; break;

case case ‘‘CC’’::

coutcout << << ““70 70 --7979\\nn””;;

break; break;

default:default:

coutcout << << ““FailedFailed\\nn””;;

}}

הוא יכו ל לה יות כל –הביטו י שערכ ו נבדק

) .ת ו או מספר שלם(ביטוי מטיפו ס בדיד

שווה לאחד ל"הב יטו י הנ הבדיק ה היא אם

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

כל הפקודו ת משם והלאה , אם נמצא שוו יו ן

מבוצעות

הפקודה הז ו אומרת לא לב צע את הפקודות

שמופיעות במקר ים הבא ים

זה חלק (מבוצע אם לא נמצאה אף התאמה

) לא חייבים לת ת ברירת מחדל–אופציו נל י

3

תרגום לציון אמריקא י תרגום לציון אמריקא י : : switch switch

intint grade;grade;

cincin >> grade;>> grade;

switchswitch ((grade/10grade/10))

{{

casecase 10:10:

coutcout << << ““AA\\nn””;;

break;break;

casecase 9:9:

coutcout << << ““BB\\nn””;;

break; break;

case case 8:8:

coutcout << << ““CC\\nn””;;

break; break;

default:default:

coutcout << << ““FF\\nn””;;

}}

הוא יכו ל לה יות כל –הביטו י שערכ ו נבדק

) .ת ו או מספר שלם(ביטוי מטיפו ס בדיד

שווה לאחד ל"הב יטו י הנ הבדיק ה היא אם

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

כל הפקודו ת משם והלאה , אם נמצא שוו יו ן

מבוצעות

הפקודה הז ו אומרת לא לב צע את הפקודות

שמופיעות במקר ים הבא ים

זה חלק (מבוצע אם לא נמצאה אף התאמה

) לא חייבים לת ת ברירת מחדל–אופציו נל י

??שאלות על השיעור הקודםשאלות על השיעור הקודם

4

דוגמ א דוגמ א--לולאות לולאות ? ? מה לדע תכם עוש ה התוכני ת ה באהמה לדע תכם עוש ה התוכני ת ה באה••

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i=1;i=1;

while while ( i <= 10)( i <= 10)

{{

coutcout << i << << i << endlendl;;

i=i+1;i=i+1;

}}

}}

דוגמ א דוגמ א--לולאות לולאות

1010 עד עד 11הדפסת המספרים הדפסת המספרים #include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i=1;i=1;

while while ( i <= 10)( i <= 10)

{{

coutcout << i << << i << endlendl;;

i=i+1;i=i+1;

}}

}}

בלוק הפק ודות הב א מתבצע

כל עוד התנ אי מתקי ים

5

נושאי השיעו ר הי ו ם נושאי השיעו ר הי ו ם––לולאות לולאות

מהן לולאותמהן לולאות••

whilewhileלולאת לולאת ••

forforלולאת לולאת ••

dodo--whilewhileלולאת לולאת ••

••breakbreakו ו -- continuecontinue

לולאותלולאות

כמה כמה לחזור על עצמולחזור על עצמו היא קטע בתוכנית שיכול היא קטע בתוכנית שיכול לולאהלולאה••

..מסוייםמסוייםעד שמתקיים תנאי עד שמתקיים תנאי , , פעמיםפעמים

..בקרת זרימהבקרת זרימה זהו סוג נוסף של זהו סוג נוסף של ••

בדוגמאות מציאותיות קורה הרבה שרוצים לחזור על בדוגמאות מציאותיות קורה הרבה שרוצים לחזור על ••

..אותה פעולהאותה פעולה

.. מספר פקודות ליצירת לולאות שנכיר היום מספר פקודות ליצירת לולאות שנכיר היוםCC--יש ביש ב••

6

while while לולאתלולאת

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

whilewhile ((תנאיתנאי)) ;; פקודהפקודה

::אואו••

whilewhile (( תנאיתנאי((

{{

פקודות פקודות

}}

בסיום בסיום . . ותות//פקודות מבוצעתפקודות מבוצעת//הפקודההפקודה, , אם התנאי מתקייםאם התנאי מתקיים••, , ואם הוא מתקיים מבצעים שובואם הוא מתקיים מבצעים שוב, , הביצוע התנאי נבדק שובהביצוע התנאי נבדק שוב

..עד שהתנאי לא מתקייםעד שהתנאי לא מתקייםוחוזר על זה וחוזר על זה

דוגמ א דוגמ א--לולאות לולאות

1010 עד עד 11הדפסת המספרים הדפסת המספרים #include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i=1;i=1;

while while ( i <= 10)( i <= 10)

{{

coutcout << i << << i << endlendl;;

i++;i++;

}}

}}

בלוק הפק ודות הב א מתבצע

כל עוד התנ אי מתקי ים

7

בדיקת ראש וניותבדיקת ראש וניות: : דוגמא נוספתדוגמא נוספת

num מחפשים מחלק של

i==num כאשר

הלו לאה בטוח

תסתיים

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint num, i=2;num, i=2;

cincin >> num;>> num;

while while ( num % i( num % i != 0) != 0)

i=i+1;i=i+1;if (i != num)if (i != num)

coutcout << num << " is divided by " << i;<< num << " is divided by " << i;

else else

coutcout << num << " is prime<< num << " is prime\\n";n";

}}

בדיקת ראשוניות בדיקת ראשוניות : : דוגמאדוגמא#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint num, i=2;num, i=2;

cincin >> num;>> num;

while while ( num % i( num % i != 0) != 0)

i=i+1;i=i+1;if (i != num)if (i != num)

coutcout << num << " is divided by " << i;<< num << " is divided by " << i;

else else

coutcout << num << " is prime<< num << " is prime\\n";n";

}}

num מחפשים מחלק של

אם מצאנו מחלק

, שאינ ו המספר עצמו

זה לא ראשו ני

i==num כאשר

הלו לאה בטוח

תסתיים

8

בדיקת ראשוניות בדיקת ראשוניות : : דוגמאדוגמא#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint num, i=2;num, i=2;

cincin >> num;>> num;

while while ( num % i( num % i != 0) != 0)

i=i+1;i=i+1;if (i != num)if (i != num)

coutcout << num << " is divided by " << i;<< num << " is divided by " << i;

else else

coutcout << num << " is prime<< num << " is prime\\n";n";

}}

num מחפשים מחלק של

אז הוא ראש וני , אם לא מצאנו

אם מצאנו מחלק

, שאינ ו המספר עצמו

זה לא ראשו ני

i==num כאשר

הלו לאה בטוח

תסתיים

לולאתלולאת while while סיום ה ביצוע סיום ה ביצוע -- של לולאת של לולאת ) ) או הפקודהאו הפקודה((כלל בבלוק הפקודות כלל בבלוק הפקודות --בדרךבדרך••

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

::דוגמאות ללולאה אינסופיתדוגמאות ללולאה אינסופית•••• while (5>4)while (5>4)

coutcout << "*";<< "*";

•• intint i=1;i=1;

while(i>0)while(i>0)

{{

coutcout << " << " ::--) ) ";";

} }

9

לולאתלולאת while while נקודה לתשו מת לב נקודה לתשו מת לב --

לא מת קיים כבר לא מת קיים כבר whilewhile --אם התנאי של לולא ת ה אם התנאי של לולא ת ה ••

אף פעם אף פעם אז פקודות הלולאה לא יבוצ ע ו אז פקודות הלולאה לא יבוצ ע ו ,,בה תחלהבה תחלה

"). "). א יטרציהא יטרציה""לא ת בוצע א ף לא ת בוצע א ף ( (

".".איטרציהאיטרציה""כל ביצוע ש ל פקודות ה לול אה מכונ ה כל ביצוע ש ל פקודות ה לול אה מכונ ה ••

דוגמאדוגמא: : בדיקת ראשוניות בדיקת ראשוניות #include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint num, i=2;num, i=2;

cincin >> num;>> num;

while while ( num % i( num % i != 0) != 0)

i=i+1;i=i+1;if (i != num)if (i != num)

coutcout << num << " is divided by " << i;<< num << " is divided by " << i;

else else

coutcout << num << " is prime<< num << " is prime\\n";n";

}}

num מחפשים מחלק של

אז הוא ראש וני , אם לא מצאנו

אם מצאנו מחלק

, שאינ ו המספר עצמו

זה לא ראשו ני

אם המספר זוגי אז

לא ניכ נס כל ל

ללו לאה

10

? ? מה עו שה התוכנית הבאה מה עו שה התוכנית הבאה : : דוגמאדוגמא

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i=1, result=1;i=1, result=1;

while while (i<=10)(i<=10)

{{

result=result*2;result=result*2;

i++;i++;

}}

coutcout << "The result is " << result << << "The result is " << result << endlendl; ;

}}

1010 בחזקת בחזקת 22חיש וב חיש וב : : דוגמאדוגמא

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i=i=11, result=1;, result=1;

while while (i<=10)(i<=10)

{{

result=result*result=result*22;;

i++;i++;

}}

coutcout << "The result is " << result << << "The result is " << result << endlendl; ;

}}

פעמים 10הלו לאה תתבצ ע

11

whilewhile לולאת לולאת

מבנה הלולאה•

דוגמאות•

לולאה אינסופית•

?שאלות •

for for דרך נוספ ת ליצור לולאה דרך נוספ ת ליצור לולאה : : לולאתלולאת

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i;i;

for for ( i = 1; i<=10; i++)( i = 1; i<=10; i++)

coutcout << i << << i << endlendl;;

}}

10 עד 1הדפסת המספרים

12

לולאתלולאת for for מבנה מבנה --

for (for ( איתחולאיתחולפקודת פקודת ; ; תנאי ביצועתנאי ביצוע; ; פקודת עדכוןפקודת עדכון((

{{

פקודות פקודות

}}

for for (( i = 1i = 1;; i<=10i<=10 ;; i++i++)) coutcout << i << << i << endlendl;; : : בדוגמ אבדוגמ א

..פעם אחתפעם אחת האיתחולהאיתחולקודם מבוצעת פקודת קודם מבוצעת פקודת ••

.. אם הוא מתקיים אז נכנסים ללולאה אם הוא מתקיים אז נכנסים ללולאה–– אז נבדק תנאי הביצועאז נבדק תנאי הביצוע••

ואז שוב ואז שוב , , מבוצעת פקודת העדכוןמבוצעת פקודת העדכון, , בסיום פקודות הלולאהבסיום פקודות הלולאה••

וחוזר וחוזר , , ונכנסים ללולאה אם הוא מתקיים ונכנסים ללולאה אם הוא מתקייםנבדק תנאי הביצוענבדק תנאי הביצוע

..עד שהתנאי לא מתקייםעד שהתנאי לא מתקייםעל זה על זה

לולאתלולאת for for הדגמת סדר הביצוע הדגמת סדר הביצוע --

forfor ( ( i = 1i = 1; i<=10 ; i++) ; i<=10 ; i++) coutcout << i << << i << endlendl;;

forfor ( i = 1; ( i = 1; i<=10i<=10 ; i++) ; i++) coutcout << i << << i << endlendl;;

forfor ( i = 1; i<=10 ; i++) ( i = 1; i<=10 ; i++) coutcout << i << << i << endlendl;; 11

forfor ( i = 1; i<=10 ; ( i = 1; i<=10 ; i++i++) ) coutcout << i << << i << endlendl;;

forfor ( i = 1; ( i = 1; i<=10i<=10 ; i++) ; i++) coutcout << i << << i << endlendl;;

forfor ( i = 1; i<=10 ; i++) ( i = 1; i<=10 ; i++) coutcout << i << << i << endlendl; 2; 2

forfor ( i = 1; i<=10 ; ( i = 1; i<=10 ; i++i++) ) coutcout << i << << i << endlendl;;

forfor ( i = 1; ( i = 1; i<=10i<=10 ; i++) ; i++) coutcout << i << << i << endlendl;;

forfor ( i = 1; i<=10 ; i++) ( i = 1; i<=10 ; i++) coutcout << i << << i << endlendl;; 33

forfor ( i = 1; i<=10 ; ( i = 1; i<=10 ; i++i++) ) coutcout << i << << i << endlendl;;

…………

13

::הדוגמא הקוד מתהדוגמא הקוד מת

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i;i;

for for ( i = 1; i<=10; i++)( i = 1; i<=10; i++)

coutcout << i << << i << endlendl;;

}}

10 עד 1הדפסת המספרים

דוגמא נוספת דוגמא נוספת

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i,result=1;i,result=1;

forfor(i=1; i<=20; i++)(i=1; i<=20; i++)

result=result*2;result=result*2;

coutcout << "The result is " << result << << "The result is " << result << endlendl; ;

}}

מה עושה הת וכ נית הב אה?

14

דוגמא נוספת דוגמא נוספת

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i,result=1;i,result=1;

forfor(i=1; i<=20; i++)(i=1; i<=20; i++)

result=result*2;result=result*2;

coutcout << "2^20 = " << result << << "2^20 = " << result << endlendl; ;

}}

פעמים 20הלו לאה תתבצ ע

20 בחזקת 2התוכ נית מחשבת את

? ? מ ה עושה התוכנ ית הבא המ ה עושה התוכנ ית הבא ה: : עוד דוגמא עוד דוגמא

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i,result=1;i,result=1;

forfor(i=2; i<11; i++)(i=2; i<11; i++)

result=result*i;result=result*i;

coutcout << "The result is " << result << << "The result is " << result << endlendl; ;

}}

15

עצרת עצרת1010חיש וב חיש וב : : דוגמאדוגמא

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i,result=1;i,result=1;

forfor(i=(i=22; i<11; i++); i<11; i++)

result=result*i;result=result*i;

coutcout << "10! = " << result << << "10! = " << result << endlendl; ;

}}

פעמים 9הלו לאה תתבצע

whilewhile ידי ידי -- על על forfor ביצוע ביצוע

::forfor -- במקום ב במקום בwhilewhile--תמיד אפשר להשתמש בתמיד אפשר להשתמש ב

for (for ( איתחולאיתחולפקודת פקודת ; ; תנאי ביצועתנאי ביצוע; ; פקודת עדכוןפקודת עדכון((

{{

פקודות פקודות

}}

::שקול לשקול ל

איתחולאיתחולפקודת פקודת

while(while( תנאי ביצועתנאי ביצוע((

{{

פקודותפקודות

פקודת עדכוןפקודת עדכון

}}

16

for, whilefor, while בעזרת בעזרת 1010!!חישוב חישוב : : דוגמא דוגמא

whilewhile

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i=i=22, result=1;, result=1;

while(while(i<11i<11))

{{

result=result*i;result=result*i;

i++;i++;

}}

coutcout<<"10! = "<<result; <<"10! = "<<result;

}}

forfor

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i,result=1;i,result=1;

for(for(i=i=22; ; i<11i<11; ; i++i++))

result=result*i;result=result*i;

coutcout << "10! = << "10! = " << result; " << result;

}}

לולאתלולאת for for המשך המשך --

כשמספ ר הפעמים כשמספ ר הפעמים forfor --כלל נעדיף שימוש ב כלל נעדיף שימוש ב --בדרךבדרך••

ו לא מחכים ו לא מחכים ( (ידוע מראשידוע מראששנרצה לבצ ע א ת ה לולאה שנרצה לבצ ע א ת ה לולאה

"). "). מש הו יקרהמש הו יקרה""--ש ש

לא מת קיים לא מת קיים אם התנאי אם התנאי , , forforנשים לב שגם בלול את נשים לב שגם בלול את ••

..איטרצי האיטרצי הא ף א ף אז ל א תבוצ ע אז ל א תבוצ ע ,,כבר בה תחלהכבר בה תחלה

17

for for עוד על לולאתעוד על לולאת

אבל אבל , , 11 --הדגמנו תמיד פקודות עדכון של ה גדלה בהדגמנו תמיד פקודות עדכון של ה גדלה ב••::11--למ של ה ק טנה ב למ של ה ק טנה ב . . כל שהיכל שהיהפקודה יכולה להיות הפקודה יכולה להיות

•• for(i=100; i>0; ifor(i=100; i>0; i----))

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

וכמ ה פקודות וכמ ה פקודות איתחולאיתחולכמה פ קודות כמה פ קודות אפשר לבצ ע אפשר לבצ ע ••: : למשל למשל..עידכוןעידכון

•• for(i=0, j=0; i+j<100; i++,j++)for(i=0, j=0; i+j<100; i++,j++)

לולאות מקוננו תלולאות מקוננו ת

נ כון לגבי נ כון לגבי ( (לולאה בתוך לולאהלולאה בתוך לולאה CC --אפשר לבצ ע ב אפשר לבצ ע ב ••

: : ל משלל משל). ). כל סוגי הלולאות כל סוגי הלולאות

forfor(i=(i=11; i<=20; i++); i<=20; i++)

{{

forfor(j=(j=11; j<=20; j++) ; j<=20; j++) coutcout << << ““**””;;

coutcout << << endlendl;;

} }

". ". לולאות מ קוננותלולאות מ קוננות""זה נקרא זה נקרא ••

20X20 מדפיס ריבוע ש ל

כוכב יות

18

? ? מה עוש ה התו כנית הבאה מה עוש ה התו כנית הבאה

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i,j;i,j;

forfor(i=(i=11; i<=10; i++); i<=10; i++)

{{

forfor(j=(j=11; j<=10; j++); j<=10; j++)

coutcout << i*j;<< i*j;

coutcout << << endlendl;;

}}

} }

הדפסת לוח הכפל

לולאות לולאות

for לולאת •

דוגמאות•

לולאות מקוננות•

?שאלות •

19

dodo--while while לולאתלולאת

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

. . אחת אחתאיטרציהאיטרציהלפחות לפחות

::למשללמשל••

intint i=1;i=1;

do {do {

coutcout << i << << i << endlendl;;

i++; i++;

} while (i<=10);} while (i<=10);

1010 עד עד 11--מדפיס את המספרים ממדפיס את המספרים מ

dodo--while while לולאתלולאת

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

. . אחת אחתאיטרציהאיטרציהלפחות לפחות

::למשללמשל••

intint i=1;i=1;

do {do {

coutcout << i << << i << endlendl;;

i++; i++;

} while (i<=10);} while (i<=10);

1010 עד עד 11--מדפיס את המספרים ממדפיס את המספרים מ

intint i=1;i=1;

while while ( i <= 10)( i <= 10)

{{

coutcout << i << << i << endlendl;;

i++;i++;

}}

20

dodo--while while לולאתלולאת

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

. . אחת אחתאיטרציהאיטרציהלפחות לפחות

::למשללמשל••

intint i=11;i=11;

do {do {

coutcout << i << << i << endlendl;;

i++; i++;

} while (i<=10);} while (i<=10);

1111 מדפיס מדפיס לא מדפיס כלום לא מדפיס כלום

intint i=11;i=11;

while while ( i <= 10)( i <= 10)

{{

coutcout << i << << i << endlendl;;

i++;i++;

}}

dodo--while while לולאתלולאתשימוש י למשל כ שרוצ ים לק לוט מספר מהמשתמש עד שמוכנ ס ערך שימוש י למשל כ שרוצ ים לק לוט מספר מהמשתמש עד שמוכנ ס ערך ••

: : לדוגמאלדוגמא. . חוקיחוקי

#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint grade;grade;

dodo

{{

coutcout << << ““Enter your grade (0Enter your grade (0--100) 100) \\nn””;;

cincin >> grade;>> grade;

} } while ((grade < 0) || (grade > 100));while ((grade < 0) || (grade > 100));

coutcout << << ““You entered a legal grade nowYou entered a legal grade now\\nn””;;

}}

21

dodo--while while לולאתלולאת

אפשר לבצע פעם אחת מחוץ ללולאה ואז לעשות לולאת אפשר לבצע פעם אחת מחוץ ללולאה ואז לעשות לולאת ••

whilewhile , , אבל אבלdodo--whilewhileחוסך כתיבה פעמיים חוסך כתיבה פעמיים ..

coutcout << << ““Enter your grade (0Enter your grade (0--100) 100) \\nn””;;

cincin >> grade;>> grade;

while ((grade < 0) || (grade > 100));while ((grade < 0) || (grade > 100));

{{

coutcout << << ““Enter your grade (0Enter your grade (0--100) 100) \\nn””;;

cincin >> grade;>> grade;

} }

מה לא טוב פה?

dodo--while while לולאתלולאת

אפשר לבצע פעם אחת מחוץ ללולאה ואז לעשות לולאת אפשר לבצע פעם אחת מחוץ ללולאה ואז לעשות לולאת ••

whilewhile , , אבל אבלdodo--whilewhileחוסך כתיבה פעמיים חוסך כתיבה פעמיים ..

coutcout << << ““Enter your grade (0Enter your grade (0--100) 100) \\nn””;;

cincin >> grade;>> grade;

while ((grade < 0) || (grade > 100))while ((grade < 0) || (grade > 100))

{{

coutcout << << ““Enter your grade (0Enter your grade (0--100) 100) \\nn””;;

cincin >> grade;>> grade;

} }

גירסה מתו קנת

22

הפקודה הפקודה break break בלולאות בלולאות

לפני לפני , , לצאת מלולאה באמצעלצאת מלולאה באמצע נירצהנירצהיתכנו מקרים שבהם יתכנו מקרים שבהם ••

.. ובלי קשר לקיום תנאי הלולאה ובלי קשר לקיום תנאי הלולאההאיטרציההאיטרציהסיום סיום

בלולאה מפסיקה את ביצועה בלולאה מפסיקה את ביצועה breakbreakהופעת הפקודה הופעת הפקודה ••

..ועוברים לפקודה שבאה אחרי הלולאהועוברים לפקודה שבאה אחרי הלולאה, , הלולאההלולאה

-- ציוני תעודת ציוני תעודת1010התוכנית שבשקף הבא קולטת התוכנית שבשקף הבא קולטת , , למשללמשל••

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

..לא מתקבלת התעודה ואין טעם בהמשך החישובלא מתקבלת התעודה ואין טעם בהמשך החישוב

חיש וב ממוצע גמר חיש וב ממוצע גמר : : דוגמאדוגמא#include <#include <iostream.hiostream.h>>

void main()void main()

{{

intint i, grade;i, grade;

double average=0;double average=0;

for (i=1; i<=10; i++)for (i=1; i<=10; i++)

{{

cincin >> grade;>> grade;

if (grade < 60)if (grade < 60)

{{

average=0;average=0;

coutcout << "Failed<< "Failed\\n";n";

break;break;

}}

elseelse

average=average+grade/10.;average=average+grade/10.;

}}

if (averageif (average !=0) !=0) coutcout<<<<““The average is The average is ””<<average<<<<average<<endlendl; ;

}}

) ומנ יחים כא ן שהקלט נכ ון(קולטים א ותם

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

הודעה מתא ימה ומפס יקים

לקלוט צי ונ ים

מדפיסים את

הממוצע אם לא

מדובר בכי שלו ן

ציונים 10רוצים לחשב ממוצע של

מעדכנים את הממוצע–אחרת

23

break break הפקוד ההפקוד ה

היא ת וציא מ הלו לאה היא ת וציא מ הלו לאה , , מופיעה בתוך ל ו לאה מקו ננת מופיעה בתוך ל ו לאה מקו ננתbreakbreakאם אם ••: : הפנימית ב יותרהפנימית ב יותר

forfor……

{{

forfor……

{{

forfor……

{{

……..

breakbreak;;

……

}}

……

}}

}}

continue continue הפקודה הפקודה

הא י טרציההא י טרציה בלולא ה מפסיקה את בלולא ה מפסיקה את continuecontinueהופעת הפקוד ה הופעת הפקוד ה •• –– forforבמקרה של במקרה של ( (הבא ההבא ה האיטרצי ההאיטרצי הועו ברת לתחילת ועו ברת לתחילת , , הנו כחיתהנו כחית

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

•• continuecontinueיכול ה לשמש ל משל כשבוד קים תקי נות ק ל ט יכול ה לשמש ל משל כשבוד קים תקי נות ק ל ט ::

while(i<10)while(i<10)

{{

cincin >> grade;>> grade;

if ((grade<0) || (grade>100))if ((grade<0) || (grade>100))

{{

coutcout << << ““Illegal grade Illegal grade –– try againtry again\\nn””;;

continue;continue;

}}

…………..

}}

24

נקודה לתשומ ת לבנקודה לתשומ ת לב

,, הן מילים שמורות הן מילים שמורותwhile, for, do, continuewhile, for, do, continue גם גם

..ולא ניתן להש תמ ש בהן כ שמו ת של מ ש תניםולא ניתן להש תמ ש בהן כ שמו ת של מ ש תנים

סיכוםסיכום

:דיברנו היום על

מהן לולאות•

while, for, do-while לולאות •

לולאות מקוננות•

• break, continue

25

??שאלות נו ספות שאלות נו ספות

שיעור רבי ע י שיעור רבי ע י––מבוא למדעי המחשב מבוא למדעי המחשב