לולאות קרן כליף.

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול
Advertisements

מערכים ומטריצות קרן כליף.
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
מבוא כללי למדעי המחשב תרגול 1. כתיבת התוכנה כתיבת התוכנית עצמה נעשית ע " י כתיבת קובץ טקסט רגיל אשר תוכנו מקיים את כללי שפת C כתיבת התוכנית עצמה נעשית.
מבוא למדעי המחשב תרגול 2 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
תכנות תרגול 2 שבוע : צור קשר מתרגל – שי גוטנר, ביה " ס למדעי המחשב. מתרגל – שי גוטנר, ביה " ס למדעי המחשב. דואר אלקטרוני : דואר.
תכנות תרגול 3 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מבוא כללי למדעי המחשב שיעור רביעי: לולאות
מבוא למדעי המחשב תרגול מספר.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
סיביות קרן כליף. © Keren Kalif 2 ביחידה זו נלמד:  מוטיבציה  אופרטורים לעבודה עם סיביות:  &  |  ^  ~  >> 
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
IF-ELSE כתוב תוכנית הקולטת שלושה מספרים ומדפיסה אותם בסדר עולה(ממיינת אותם)  קלט:7,2,4 ,פלט:2,4,7 .
Formal Specifications for Complex Systems (236368) Tutorial #1
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
הרצאה 3: משפטים, תנאים ולולאות
מבוא למדעי המחשב סיבוכיות.
הקצאות דינאמיות בשילוב מבנים
לולאות קרן כליף.
אבני היסוד של תוכנית ב- JAVA
ניתוח זמן ריצה (על קצה המזלג)
שפת Visual Basic מבוסס על Visual Basic. NET 2008 מרצה : קנדוב פנחס
מצביעים קרן כליף.
SQL בסיסי – הגדרה אינדוקטיבית
תירגול 14: מבני נתונים דינאמיים
ניתוח זמן ריצה (על קצה המזלג)
היכרות עם שפת התכנות JAVA
הרצאה 3: משפטים, תנאים ולולאות
ניתוח זמן ריצה (על קצה המזלג)
מערכים ומטריצות קרן כליף.
פעולות אריתמטיות משפטי תנאי
ניתוח זמן ריצה (על קצה המזלג)
מבוא כללי למדעי המחשב תרגול 4
מבוא כללי למדעי המחשב שיעור 2
סוגי משתנים קרן כליף.
תזכורת על מה דיברנו שיעור שעבר? בנינו אתר אינטרנט עם כותרות
מחרוזות קרן כליף.
תרגול Introduction to C - Fall Amir Menczel.
תוכנה 1 תרגול 13 – סיכום.
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

לולאות קרן כליף

ביחידה זו נלמד: לולאות while: דוגמאות חישוב ממוצע חישוב סכום ספרותיו של מספר תרגילי תחביר ללולאות while לולאת do-while תרגילי תחביר ללולאות do-while לולאת do-while: דוגמאות כתיבת תפריט ציור לוח הכפל הפקודה continue הפקודה break הוספת ספרה מימין למספר הוספת ספרה משמאל למספר לולאת for: דוגמאות הדפסת כוכביות הדפסת מספרים ברצף הדפסת רק המספרים האי-זוגיים הדפסת מספרים בסדר יורד חישוב עצרת לולאת for עם יותר מאינדקס אחד חישוב חזקה לולאות מקוננות: דוגמאות הדפסת ריבוע הדפסת מלבן הדפסת משולש מוצמד לשמאל הדפסת משולש מוצמד לימין תרגילי תחביר ללולאות for 2 © Keren Kalif

לולאות - מוטיבציה יהיו קטעי קוד שנרצה להריץ מספר פעמים, למשל הדפסת תו מסויים למסך 10 פעמים ע"י לולאה נוכל לחסוך בשורות קוד לולאה – קטע קוד שנריץ יותר מפעם אחת ע"י לולאה נוכל לעשות את התוכנית גמישה, כך שתריץ מספר כוכביות המשתנה מהרצה להרצה public static void main(String[] args) { System.out.print(“*”); … } 3 © Keren Kalif

לולאת for – הדפסת 3 כוכביות למסך * * * public static void main(String[] args) { int i; for ( ; ; ) { System.out.print(“*“); } System.out.println(); int: i 3 int: i 2 int: i 1 int: i int: i ??? כל סיבוב של הלולאה נקרא איטרציה i=0 i < 3 i++ בכל סיבוב של הלולאה נקדם את i באחד כדי שהלולאה תסתיים לאחר 3 סיבובים. בלי הקידום הלולאה הייתה אינסופית והתוכנית לעולם לא הייתה מסתיימת.. לולאה שאמורה להתבצע מספר ידוע של פעמים תכיל את המרכיבים הבאים: אתחול בדיקת תנאי קידום התפקיד של i לשמור את מספר הכוכביות שכבר צוירו ולכן יאותחל ב- 0 4 © Keren Kalif

לולאת for – הגדרת האינדקס בתוך הלולאה public static void main(String[] args) { int i; for { System.out.print(“*“); } System.out.println(); (int i=0 ; i < 3 ; i++) (i=0 ; i < 3 ; i++) 5 © Keren Kalif

לולאת for – הדפסת 3 כוכביות למסך * * * public static void main(String[] args) { for ( ; ; ) { System.out.print(“*“); } System.out.println(); int: i int: i 1 int: i 2 int: i 3 int i=3 i > 0 i-- הפעם תפקידו של i הוא לשמור את מספר הכוכביות שנותרו להדפיס ולכן מאותחל ב- 3 בקידום נקפיד לאמר שמקדמים את הלולאה צעד אחד לקראת סופה, ולא בהכרח שמקדמים (מגדילים) את המשתנה i 6 © Keren Kalif

לולאת for – הדפסת X כוכביות למסך public static void main(String[] args) { int numOfAstrix = (int)(Math.random()*20); System.out.printf("Printing %d astrixes:\n", numOfAstrix); for ( ; ; ) { System.out.print(“*“); } System.out.println(); int i=0 i < numOfAstrix i++ 7 © Keren Kalif

לולאת for – הדפסת כל המספרים public static void main(String[] args) { int number = (int)(Math.random()*10); System.out.println("All numbers from 1 to “ + number + “:”); for ( ; ; ) { System.out.print(i + “ “); } System.out.println(); int: number 3 int: i 2 int: number 3 int: i 4 int: number 3 int: i ??? int: number 3 int: i int: number 3 int: i 1 int: number ??? int: i int i=1 i <= number i++ 1 2 3 8 © Keren Kalif

גם פה אין ; משום לא מתבצעת פקודה (כמו ב- if) מבנה כללי של לולאת for משפט מהצורה: for (<init counter> ; <expression> ; <change counter>) { statement; … } גם פה אין ; משום לא מתבצעת פקודה (כמו ב- if) נשים לב, גם פה, שהקוד בין {} מוכנס טאב פנימה! 9 © Keren Kalif

לולאת for – הדפסת כל המספרים האי -הזוגיים public static void main(String[] args) { int number = (int)(Math.random()*10); System.out.println("All odd numbers from 1 to “ + number); for ( ; ; ) { System.out.print(i + “ “); } System.out.println(); int: number 5 int: i 1 int: number 5 int: i 3 int: number 5 int: i 7 int: number 5 int: i int: number 5 int: i ??? int: number ??? int: i int i=1 i <= number i+=2 1 3 5 10 © Keren Kalif

לולאת for – הדפסת כל המספרים בסדר יורד public static void main(String[] args) { int number = (int)(Math.random()*10); System.out.printf("All numbers from %d to 1:\n", number); for ( ; ; ) { System.out.print(i + “ “); } System.out.println(); int: number 3 int: i int: number 3 int: i int: number ??? int: i int: number 3 int: i ??? int: number 3 int: i 1 int: number 3 int: i 2 int i=number i >= 1 i-- 3 2 1 11 © Keren Kalif

לולאת for– חישוב עצרת public static void main(String[] args) { int factorial=1, num; num = (int)(Math.random()*7); System.out.println(“The randomized number is “ + num); for ( ; ; ) { factorial *= i; } System.out.printf(“%d! = %d\n”, num, factorial); int: num 4 int: factorial 1 int: i 2 int: num 4 int: factorial 1 int: i int: num 4 int: factorial 2 int: i 3 int: num 4 int: factorial 6 int: i 3 int: num 4 int: factorial 2 int: i int: num 4 int: factorial 24 int: i int: num ??? int: factorial 1 int: i int: num 4 int: factorial 1 int: i ??? int: num 4 int: factorial 24 int: i 5 int: num 4 int: factorial 6 int: i int i=1 i <= num i++ 12 © Keren Kalif

לולאת for – הדפסת חזקות של 2 public static void main(String[] args) { int number = (int)(Math.random()*100); System.out.printf("All 2 powers till %d:\n", number); for ( ; ; ) { System.out.print( i + “ “); } System.out.println(); int: number ??? int: i int: number 10 int: i 2 int: number 10 int: i 1 int: number 10 int: i 4 int: number 10 int: i 16 int: number 10 int: i 8 int: number 10 int: i ??? 1 2 4 8 int i=1 i <= number i *= 2 13 © Keren Kalif

לולאת for – הדפסת חזקות של 2 (2 אינדקסים) public static void main(String[] args) { int number = (int)(Math.random()*100); System.out.printf("All 2 powers till %d:\n", number); for ( ; ; ) { System.out.printf("2^%d = %d\n", j, i); } System.out.println(); int i=1, j=0 i <= number i *= 2, j++ int: number 10 int: i ??? int: j int: number 10 int: i 1 int: j int: number 10 int: i 2 int: j 1 int: number 10 int: i 4 int: j 2 int: number ??? int: i int: j int: number 10 int: i 16 int: j 4 int: number 10 int: i 8 int: j 3 2^0 = 1 2^1 = 2 ניתן לשלב בלולאה כמה איתחולים וכמה קידומים, מופרדים ע"י פסיק 2^2 = 4 2^3 = 8 14 © Keren Kalif

שימוש יעיל ללולאת for https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-ash2/t1/482216_430631353687511_1969402087_n.jpg 15 © Keren Kalif

לולאת for ללא רכיב מסויים int i=0; for ( ; i < 5 ; i++) System.out.print(“*”); for (i=0 ; i < 5 ; ) { i++; } for (i=0 ; ; i++) לולאה ללא איתחול לולאה ללא קידום גם כאשר בלולאה אין רכיב מסויים יש לכתוב את ה- ; בין חלקי הלולאה השונים לולאה ללא תנאי. לא תסתיים לעולם!! 16 © Keren Kalif

לולאות מקוננות– הדפסת ריבוע public static void main(String[] args) { final int SIZE = 3; for ( ; ; ) { for ( ; ; ) { System.out.print("*"); } System.out.println(); יכולנו גם לאתחל i=1 ואז לרוץ עם התנאי i <= SIZE, וכנ"ל עם j הסוגריים המסולסלים בלולאה הפנימית אינם חובה מאחר ובגוף הלולאה הפנימית יש פקודה אחת בלבד int: i int: j 3 int: i 1 int: j 3 int: i int: j 2 int: i int: j 1 int: i int: j int: i 1 int: j int: i 1 int: j 3 int: i 2 int: j 1 int: i 2 int: j int: i 2 int: j int: i 2 int: j 3 int: i 1 int: j 2 int: i int: j ??? int: i 1 int: j int: i 3 int: j int: i 2 int: j 3 int: i ??? int: j int i=0 i < SIZE i++ * * * * * * int j=0 j < SIZE j++ * * * 17 © Keren Kalif

לולאות מקוננות – הדפסת מלבן public static void main(String[] args) { Scanner s = new Scanner(System.in); int rows, cols; System.out.print("Please enter number of rows and columns: "); rows = s.nextInt(); cols = s.nextInt(); for (int i=0 ; i < rows ; i++) { for (int j=0 ; j < cols ; j++) System.out.print("*"); System.out.println(); } 18 © Keren Kalif

לולאות מקוננות – הדפסת משולש # כוכביות בשורה # שורה 1 2 3 4 5 * public static void main(String[] args) { Scanner s = new Scanner(System.in); int base; System.out.print("Please enter the base of the triangle: "); base = s.nextInt(); for ( ; ; ) { for ( ; ; ) System.out.print("*"); System.out.println(); } * * * * * int: i 1 int: j 2 int: base 3 int: i 2 int: j int: base 3 int: i 1 int: j int: base 3 int: i 3 int: j int: base int: i 3 int: j 4 int: base int: i 2 int: j 3 int: base int: i 2 int: j int: base 3 int: i 2 int: j 1 int: base 3 int: i 3 int: j 2 int: base int: i ??? int: j int: base 3 int: i ??? int: j int: base int: i 4 int: j int: base 3 int: i 3 int: j 1 int: base int: i 1 int: j ??? int: base 3 int: i 3 int: j int: base int i=1 i <= base i++ int j=1 j <= i j++ האם יכולנו להתחיל את אחד האינדקסים מ- 0? 19 © Keren Kalif

לולאות מקוננות – הדפסת משולש מיושר לימין public static void main(String[] args) { Scanner s = new Scanner(System.in); int base; System.out.print("Please enter the base of the triangle: "); base = s.nextInt(); for (int i=1 ; i <= base ; i++) { for (int j=1 ; j <= ??? ; j++) System.out.print(" "); for (int j=1 ; j <= i ; j++) System.out.print("*"); System.out.println(); } # כוכביות בשורה # רווחים # שורה 1 3 2 4 base-i מהטבלה ברור כי מספר הרווחים בכל שורה הוא מספר הכוכביות המקסימלי (base) פחות מספר הכוכביות בשורה (i) 20 © Keren Kalif

לולאות מקוננות – הדפסת משולש מיושר לימין – אפשר גם כך.. public static void main(String[] args) { Scanner s = new Scanner(System.in); int base; System.out.print("Please enter the base of the triangle: “); base = s.nextInt(); for (int i=1 ; i <= base ; i++ ) { for (int j=1 ; j <=??? ; j++) System.out.print(“ “); for (int j=1 ; j <= i ; j++) System.out.print(“*”); System.out.println(); } # כוכביות בשורה # רווחים # שורה 1 3 2 4 , k=base-1 , k-- k מהטבלה ניתן לראות כי מספר הרווחים קטנים ב-1 בכל שורה, והערך הראשוני הוא base-1 21 © Keren Kalif

סיכום לולאות for בכל הדוגמאות שראינו עד כה מספר איטרציות הלולאה היה ידוע עם תחילתה ישנם מקרים בהם מספר איטרציות הלולאה אינו ידוע ותלוי בקלט המשתמש, למשל: כאשר רוצים לקלוט ערכים עד שיוקלד ערך ספציפי כאשר רוצים לעבור על כל ספרותיו של מספר ולמשל לספור אותן, לסכום אותן, לבדוק כמה ספרות זוגיות וכו' עבור לולאות שמספר האיטרציות שלהן אינו ידוע עם תחילתן, נשתמש בלולאת while 22 © Keren Kalif

לולאות for – תרגילי תחביר לתרגול עצמי כתוב תוכנית הקולטת מספר n ומדפיסה עבור כל מספר את ערכו ואת ערכו הריבועי כתוב תוכנית הקולטת מהמשתמש 10 מספרים שלמים והצג כמה מספרים שהוקלדו אי-זוגיים כתוב תוכנית הקולטת מספר n ומדפיסה רק את המספרים שהם כפולה של 3 בטווח 0-n כתוב תוכנית הקולטת מספר n ומדפיסה רק את המספרים שהם כפולה של 3 בטווח 0-n (כלומר מהערך הגדול לקטן) כתוב תוכנית הקולטת מספר n ומדמה את המשחק "7 בום!": התוכנית תדפיס את כל המספרים מ- 1 ועד n, אבל כל פעם כאשר יש מספר שהוא כפולה של 7 תוצג המילה “boom!” במקום המספר  כתוב תוכנית הקולטת מספר n. עבור כל המספרים מ- 1 ועד n הצג רק את המספרים שהם כפולה של 3 וסכום ספרותיהם קטן מ- 5. למשל עבור המספר 22 יוצגו המספרים: 3, 12, ו- 21 23 © Keren Kalif

לולאת while – חישוב ממוצע עד הכנסת 1- public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, counter=0, sum=0; System.out.println(“Please enter numbers, -1 to stop: “); num = s.nextInt(); while (num != -1) { sum += num; counter++; } System.out.printf(“Average of the %d numbers is %f\n”, counter, (float)sum/counter); int: num 3 1000 int: counter 1 1004 int: sum 9 1008 int: num -1 1000 int: counter 2 1004 int: sum 9 1008 int: num 3 1000 int: counter 1 1004 int: sum 6 1008 int: num 3 1000 int: counter 2 1004 int: sum 9 1008 int: num 6 1000 int: counter 1004 int: sum 1008 int: num 6 1000 int: counter 1 1004 int: sum 1008 int: num ??? 1000 int: counter 1004 int: sum 1008 int: num 6 1000 int: counter 1004 int: sum 1008 בדוגמא זו מספר האיטרציות אינו ידוע בשום שלב! 24 © Keren Kalif

גם פה אין ; משום לא מתבצעת פקודה (כמו ב- if) לולאת while גם פה אין ; משום לא מתבצעת פקודה (כמו ב- if) משפט מהצורה: while (<expression>) { statement; … } כל עוד הביטוי נותן ערך true, יבוצעו הפקודות שבגוף הלולאה נשים לב, גם פה, שהקוד בין {} מוכנס טאב פנימה! 25 © Keren Kalif

לולאת while – חישוב סכום ספרותיו של מספר public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, sum=0; System.out.print("Please enter a number: "); num = s.nextInt(); while (num != 0) { sum += num%10; num /= 10; } System.out.println("Sum is “ + sum); int: num 5 int: sum 10 int: num int: sum 15 int: num 54 int: sum 10 int: num 5 int: sum 15 int: num 546 int: sum 6 int: num 54 int: sum 6 int: num 546 int: sum int: num ??? int: sum גם בדוגמא זו לא יכולנו לצפות את מספר האיטרציות מראש 26 © Keren Kalif

לולאה אינסופית לולאה זו לא תסתיים לעולם מאחר והתנאי שלה תמיד מתקיים: public static void main(String[] args) { while (true) { System.out.print(“*”); } 27 © Keren Kalif

לולאה שלא תתבצע גוף לולאה זו לא יבוצע אפילו פעם אחת! מדוע? public static void main(String[] args) { int i = 10; while (i < 5) { System.out.print(“*”); i++; } 28 © Keren Kalif

לולאות while – תרגילי תחביר לתרגול עצמי כתוב תוכנית הקולטת מהמשתמש מספרים שלמים עד אשר הוקלדו בדיוק 5 מספרים זוגיים כתוב תוכנית הקולטת מהמשתמש מספר. כל עוד המספר אינו תלת- ספרתי התוכנית תבקש מהמשתמש להקליד את המספר מחדש. כתוב תוכנית הקולטת מהמשתמש מספרים עד אשר מוקלד מספר דו-ספרתי שספרותיו זהות כתוב תוכנית הקולטת מהמשתמש מספרים עד אשר מוקלד מספר תלת-ספרתי שהוא כפולה של 7. למשל המספר 378. קלוט מהמשתמש מספר והצג האם כל ספרותיו זהות 29 © Keren Kalif

וכאשר נרצה שהפעולה תתבצע לפחות פעם אחת.. public static void main(String[] args) { Scanner s = new Scanner(System.in); int number; System.out.print("Enter a positive number, negative to exit: "); number = s.nextInt(); while (number >= 0) { } System.out.println("Thank you!"); X =5; X X X X X X X X X X כדי להמנע משכפול הפקודה, ניתן ערך dummy למשתנה על מנת שהלולאה תתבצע לפחות בפעם הראשונה 30 © Keren Kalif

באמצעות שימוש בלולאה זו אין צורך להשתמש בערך dummy באתחול או לשכפל קוד לולאת do-while public static void main(String[] args) { Scanner s = new Scanner(System.in); int number; do { System.out.print(“Enter a positive number, negative to exit: "); number = s.nextInt(); } while (number >= 0); System.out.println("Thank you!"); } באמצעות שימוש בלולאה זו אין צורך להשתמש בערך dummy באתחול או לשכפל קוד 31 © Keren Kalif

לולאת do-while משפט מהצורה: do { statement; … } while (<expression>); הפקודות בגוף הלולאה יבוצעו כל עוד התנאי מתקיים. גוף הלולאה יבוצע לפחות פעם אחת. 32 © Keren Kalif

לולאות do-while – תרגילי תחביר לתרגול עצמי כתוב תוכנית הקולטת מהמשתמש מספר עד אשר מוקלד מספר תלת-ספרתי כתוב תוכנית הקולטת מהמשתמש מספרים עד אשר מוקלד מספר תלת-ספרתי שהוא כפולה של 7 למשל המספר 378 כתוב תוכנית הקולטת מהמשתמש מספרים עד אשר מוקלד מספר דו-ספרתי שספרותיו זהות 33 © Keren Kalif

לולאת do-while | שימוש בתפריט תפריט מורכב מ- 3 חלקים: הצגת האפשרויות switch לביצוע האפשרות הנבחרת לולאה על-מנת לחזור על התפריט עד אשר המשתמש מבקש לצאת 34 © Keren Kalif

מימוש תפריט נשים לב כי ה- break מוציא אותנו ממשפט הבקרה הפנימי ביותר, כלומר בדוגמא זו מה- switch ולא מהלולאה! 35 © Keren Kalif

תרגיל: לוח הכפל קלוט מהמשתמש מספר בין 5-10 (יש לבדוק שהקלט תקין!) הדפס את לוח הכפל עבור מספר זה 36 © Keren Kalif

פתרון 37 © Keren Kalif

תרגום מלולאת while ללולאת for int i; for ( ; ; ) System.out.print(“*”); i=0 i < 5 i++ ב- 2 הלולאות יש את 3 הרכיבים הבאים: איתחול בדיקת תנאי קידום int i=0; while { System.out.print(“*”); i++; } (i < 5) 38 © Keren Kalif

שימוש בסוגי הלולאות השונים כאשר צריך לכתוב קטע קוד שחוזר על עצמו, ניתן לבחור בכל אחת מהלולאות שראינו יהיו מקרים בהם נעדיף לולאה מסויימת: אם מספר האיטרציות ידוע עם תחילת הלולאה, נעדיף לולאת for שכן האיתחול והקידום מובנים בתוכה אם מספר האיטרציות אינו ידוע עם תחילת הלולאה, נעדיף לולאה while, שכן אין צורך ב- counter שיש לקדמו לקראת סיום אם נרצה שהלולאה תבוצע לפחות פעם אחת, יש לשקול שימוש בלולאת do-while יש להקפיד על שימוש בלולאה המתאימה בקוד אותו אתם כותבים! 39 © Keren Kalif

הדפסת כל המספרים מ-0 עד 4 פרט ל- 3: הפקודה continue פקודה הגורמת לגוף הלולאה להפסיק ולהמשיך מיד לאיטרציה הבאה public static void main(String[] args) { for ( ; ; ) { if (i == 3) continue; System.out.print(i + " "); } System.out.println(); int i=0 i < 5 i++ הדפסת כל המספרים מ-0 עד 4 פרט ל- 3: i=4 i=5 i=3 i=1 i=2 i=0 הרצה: 40 © Keren Kalif

הפקודה continue - אפשר גם בלעדיה.. public static void main(String[] args) { for ( ; ; ) { if (i != 3) System.out.print(i + " "); } System.out.println(); הדפסת כל המספרים מ-0 עד 4 פרט ל- 3: int i=0 i < 5 i++ 41 © Keren Kalif

הפקודה :break מפסיקה את הלולאה מיד public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, sum=0; char answer; while (true) } System.out.print("Add another number? "); answer = s.next().charAt(0); if (answer == 'N' || answer == 'n') break; System.out.print("Enter the number --> "); num = s.nextInt(); sum += num; { System.out.printf("Total sum is %d\n", sum); } int: num 8 int: sum 4 char: answer y int: num 8 int: sum 12 char: answer n int: num 4 int: sum char: answer y int: num 8 int: sum 12 char: answer y int: num 4 int: sum char: answer y int: num ??? int: sum char: answer int: num 4 int: sum char: answer y int: num ??? int: sum char: answer int: num ??? int: sum char: answer y 42 © Keren Kalif

הפקודה break – בלעדיה אפשר גם כך.. public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, sum=0; boolean fContinue=true; char answer; while (fContinue) { // fContinue == true System.out.print("Add another number? "); answer = s.next().charAt(0); if (answer == 'N' || answer == 'n') fContinue = false; else } System.out.print("Enter the number --> "); num = s.nextInt(); sum += num; { System.out.println("Total sum is “ + sum); int: num 8 int: sum 4 char: answer y boolean: fContinue true int: num 8 int: sum 12 char: answer y boolean: fContinue true int: num 8 int: sum 12 char: answer n boolean: fContinue true int: num 8 int: sum 12 char: answer n boolean: fContinue false int: num 4 int: sum char: answer y boolean: fContinue true int: num 4 int: sum char: answer y boolean: fContinue true int: num ??? int: sum char: answer boolean: fContinue int: num 4 int: sum char: answer y boolean: fContinue true int: num ??? int: sum char: answer boolean: fContinue true int: num ??? int: sum char: answer y boolean: fContinue true 43 © Keren Kalif

הפקודה break – בלעדיה אפשר גם כך.. public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, sum=0; boolean fStop=false; char answer; while (!fStop) { // fStop == false System.out.print("Add another number? "); answer = s.next().charAt(0); if (answer == 'N' || answer == 'n') fStop = true; else } System.out.print("Enter the number --> "); num = s.nextInt(); sum += num; { System.out.println("Total sum is “ + sum); int: num 8 int: sum 12 char: answer y boolean: fStop false int: num 8 int: sum 4 char: answer y boolean: fStop false int: num 8 int: sum 12 char: answer n boolean: fStop false int: num 8 int: sum 12 char: answer n boolean: fStop true int: num 4 int: sum char: answer y boolean: fStop false int: num 4 int: sum char: answer y boolean: fStop false int: num ??? int: sum char: answer boolean: fStop int: num 4 int: sum char: answer y boolean: fStop false int: num ??? int: sum char: answer boolean: fStop false int: num ??? int: sum char: answer y boolean: fStop false 44 © Keren Kalif

דוגמה לשימוש ב- break https://plus.google.com/+ProgrammingCom/posts/Srj66bAM4qf 45 © Keren Kalif

הוספת ספרה מימין למספר כאשר רוצים להוסיף ספרה מימין למספר, כלומר להכניס ספרת אחדות חדשה, יש לבצע את הפעולות הבאות: הכפל את המספר פי 10 (כדי לייצר מקום לספרת האחדות החדשה) הוסף את הספרה החדשה דוגמא: עבור המספר 65 נרצה להוסיף את הספרה 3 מימין, כלומר כדי לייצר את מספר 653: 65*10 = 650 650 + 3 = 653 46 © Keren Kalif

דוגמה: יצירת המספר ההופכי למשל, עבור 123 יש לייצר את המספר 321 במקרה זה צריך לבודד את כל אחת מהספרות ולהוסיפן מימין למספר שאותו מייצרים ולכן נשתמש בפעולות הבאות: "תן ספרה ימנית" (מודולו ב- 10) "קצץ ספרה ימנית" (חילוק ב- 10) ניתן להשתמש גם בפעולות חשבון בסיסיות (כפל, חיבור וכד') 47 © Keren Kalif

תרגיל: יצירת המספר ההופכי הגדר newNum = 0 קלוט מספר לתוך num כל עוד num > 0: הכפל את הערך של newNum פי 10 תן ספרה ימנית מ- num והוסף אותה ל- newNum קצץ ספרה ימנית מ- num הצג את newNum הרצה יבשה: נשים לב שהמספר המקורי num נהרס, ואם נרצה לעשות בו שימוש בסוף לא נוכל newNum = 30 newNum = 32 newNum = 0 newNum = 3 newNum = 320 newNum = 321 num = 0 num = 123 num = 12 num = 1 48 © Keren Kalif

תרגום לשפת JAVA הגדר newNum = 0 קלוט מספר לתוך num כל עוד num > 0: public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, newNum=0; System.out.print("Enter a number: "); num = s.nextInt(); while (num > 0) { newNum *= 10; newNum += num%10; num /= 10; } System.out.println("Rev num is " + newNum); { תרגום לשפת JAVA הגדר newNum = 0 קלוט מספר לתוך num כל עוד num > 0: הכפל את הערך של newNum פי 10 תן ספרה ימנית מ- num והוסף אותה ל- newNum קצץ ספרה ימנית מ- num הצג את newNum 49 © Keren Kalif

שמירה על הערך המקורי public static void main(String[] args) { Scanner s = new Scanner(System.in); int num, newNum=0; System.out.print("Enter a number? "); num = s.nextInt(); temp = num; while ( num > 0 ) { newNum *= 10; newNum += num%10; num /= 10; } System.out.println("Rev of " + num + " is " + newNum); { , temp; temp > 0 temp%10; temp /= 10; ערכו של num פה הוא 0.. 50 © Keren Kalif

הוספת ספרות משמאל למספר כאשר מוסיפים ספרה משמאלו של מספר יש לקחת בחשבון איזה מיקום היא תופסת: אחדות / עשרות / מאות וכד' דוגמא: אם רוצים למספר 47 להוסיף את הספרה 3 משמאלו, למעשה יש להוסיף את הערך 300 47 + 300 = 347 אם נרצה להוסיף ספרה נוספת משמאל, היא כבר תהייה במיקום של האלפים 51 © Keren Kalif

הוספת ספרות משמאל למספר - דוגמא נייצר את המספר 724 תוך כדי קבלת ספרותיו מהאחדות למאות: 4 2 7 בהתחלה המספר שבונים יהיה 0 נוסיף למספר את הערך 4 4 = 4*1 נוסיף למספר את הערך 20 20 = 2*10 נוסיף למספר את הערך 700 700 = 7*100 המספר המתקבל הוא 724 הרצה יבשה: המספר: 24 המספר: 724 המספר: 4 המספר: 0 ניתן לזהות את החוקיות שהוספת ספרה משמאל היא למעשה כפולה כלשהי של 10, שגדלה פי 10 בכל סיבוב 52 © Keren Kalif

שימוש באלגוריתם קלוט ספרות של מספר כאשר הספרה הראשונה הינה ספרת האחדות, השניה עשרות וכו' עד אשר מוקלד הערך 1-. ייצר משתנה מטיפוס int שיכיל את המספר שספרותיו הוקלדו הגדר newNum = 0 הגדר digit הגדר את המשתנה location=1 קלוט ספרה לתוך digit כל עוד digit != -1: הכפל את הספרה ב- location והוסף את המכפלה ל- newNum הכפל את location פי 10 הצג את newNum הרצה יבשה: newNum = 38 newNum = 638 newNum = 8 newNum = 0 digit = 6 digit = -1 digit = 3 digit = ? digit = 8 location = 1000 location = 10 location = 100 location = 1 53 © Keren Kalif

תרגום לשפת JAVA שיכפול! שיכפול! הגדר newNum = 0 הגדר digit public static void main(String[] args) { Scanner s = new Scanner(System.in); int digit, newNum=0, location=1; System.out.print("Enter a digit: "); digit = s.nextInt(); while (digit != -1) { newNum += digit*location; location *= 10; } System.out.println("The num is " + newNum); { תרגום לשפת JAVA שיכפול! שיכפול! הגדר newNum = 0 הגדר digit הגדר את המשתנה location=1 קלוט ספרה לתוך digit כל עוד digit != -1: הכפל את הספרה ב- location והוסף את המכפלה ל- newNum הכפל את location פי 10 הצג את newNum 54 © Keren Kalif

גרסה משופרת public static void main(String[] args) { Scanner s = new Scanner(System.in); int digit, newNum=0, location=1; boolean fContinue = true; do { System.out.print("Enter a digit: "); digit = s.nextInt() if (digit == -1) fContinue = false; else { newNum += digit*location; location *= 10; } } while (fContinue); System.out.println("The num is " + newNum); { 55 © Keren Kalif

וחידה לסיום! https://i.chzbgr.com/maxW500/6963756032/hB34A1132/ 56 © Keren Kalif

הכנה לקראת שיעורי הבית מהיום והלאה http://rlv.zcache.ca/programmers_do_it_all_night_greeting_card-r603fa91b18e1473192a9e0b8c5e2cd8d_xvuak_8byvr_324.jpg 57 © Keren Kalif

ביחידה זו למדנו: לולאות while: דוגמאות חישוב ממוצע חישוב סכום ספרותיו של מספר תרגילי תחביר ללולאות while לולאת do-while תרגילי תחביר ללולאות do-while לולאת do-while: דוגמאות כתיבת תפריט ציור לוח הכפל הפקודה continue הפקודה break הוספת ספרה מימין למספר הוספת ספרה משמאל למספר לולאת for: דוגמאות הדפסת כוכביות הדפסת מספרים ברצף הדפסת רק המספרים האי-זוגיים הדפסת מספרים בסדר יורד חישוב עצרת לולאת for עם יותר מאינדקס אחד חישוב חזקה לולאות מקוננות: דוגמאות הדפסת ריבוע הדפסת מלבן הדפסת משולש מוצמד לשמאל הדפסת משולש מוצמד לימין תרגילי תחביר ללולאות for 58 © Keren Kalif

תרגיל 1: יצירת מספר המכיל רק את הספרות הזוגיות יש לקלוט מספר ולייצר מספר המכיל רק את הספרות שערכן זוגי דוגמא: עבור המספר 123467 יווצר המספר 246 הכלים העומדים לרשותינו הן הפעולות: "תן/קצץ ספרה ימנית" פעולות חשבון בדיקה האם ערך הוא זוגי במקרה זה עלינו להוסיף ספרות משמאלו של המספר המיוצר

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

ובכתיבה פורמאלית הגדר location=1, newNum=0 קלוט ערך לתוך X הגדר temp=X הרצה יבשה: הגדר location=1, newNum=0 קלוט ערך לתוך X הגדר temp=X כל עוד temp > 0: תן ספרה ימנית של temp, ואם זוגית בצע: הכפל את הספרה פי location והוסף אותה ל- newNum הכפל location פי 10 קצץ ספרה ימנית מ- temp הצג את newNum newNum = 8 newNum = 28 newNum = 0 location = 100 location = 10 location = 1 X = 258 temp = 0 temp = 2 temp = 258 temp = 25

תרגיל 2: מיזוג ספרות של שני מספרים זהים באורכם יש לקלוט 2 מספרים הזהים במספר הספרות שלהם, ולייצר מספר חדש כך שהספרות בו הם מיזוג הספרות של שני המספרים: ספרה ראשונה (משמאל) מהמספר הראשון וספרה שניה מהמספר השני ספרה שלישית מהמספר הראשון וספרה רביעית מהמספר השני וכו' דוגמא: עבור המספרים 37 ו- 81 יש לייצר את המספר 3871 אסטרטגיית הפעולה: מאחר וניתן לבודד ספרות מימין לשמאל, בניית המספר החדש תתבסס על הוספת ספרות משמאל, כאשר מתחילים דווקא מהמספר השני

תרשים זרימה

ובכתיבה פורמאלית קלוט מספר ל- num1 קלוט מספר ל- num2 הגדר newNum=0 הרצה יבשה: קלוט מספר ל- num1 קלוט מספר ל- num2 הגדר newNum=0 הגדר location=1 כל עוד num2 > 0: בודד ספרה ימנית מ- num2, הכפל אותה ב- location והוסף ל- newNum הכפל את location פי 10 בודד ספרה ימנית מ- num1, הכפל אותה ב- location והוסף ל- newNum קצץ ספרה ימנית מ- num2 קצץ ספרה ימנית מ- num1 הצג את newNum newNum = 1 newNum = 3871 newNum = 871 newNum = 71 newNum = 0 location = 1000 location = 10000 location = 100 location = 10 location = 1 num1 = 37 num1 = 3 num1 = 0 num2 = 8 num2 = 81 num2 = 0

תרגיל 3: מציאת הספרה הגדולה ביותר קלוט מהמשתמש מספר והצג את הספרה הגדולה ביותר דוגמאות: עבור 1234 יוצג 4 עבור 8997 יוצג 9 עבור 1212 יוצג 2 אסטרטגיית הפעולה: נאתחל את המקסימום עם ערך הספרה הראשונה (הימנית) ונבודד כל פעם ספרה אחרת. אם הספרה הנוכחית גדולה מהספרה המקסימלית שראינו עד כה, נעדכן אותה.

בכתיבה פורמאלית קלוט מהמשתמש מספר לתוך num הגדר את maxDigit=0 כל עוד נותרו ב- num ספרות (num>0): תן ספרה ימנית מ- num ואחסן אותה בתוך currentDigit אם currentDigit > maxDigit: עדכן: maxDigit = currentDigit קצץ ספרה ימנית מ- num הצג את maxDigit הרצה יבשה: num = 3 num = 0 num = 38 num = 387 maxDigit = 8 maxDigit = 0 maxDigit = 7 currentDigit= 8 currentDigit = 7 currentDigit= 3

תרגיל 4: המרה ממספר בינארי לעשרוני כתבו תכנית הקולטת מספר המייצג מספר בינארי (בסיס 2) התוכנית תייצר מספר חדש (int) שיהיה המספר שהתקבל אבל בבסיס עשרוני (10) דוגמא: עבור הקלט 101 הפלט יהיה 5 (כי 1*22 + 0*21 + 1*20 = 5) 67 © Keren Kalif

תרגיל 5: המרה ממספר עשרוני לבינארי כתבו תכנית הקולטת מספר המייצג מספר עשרוני (בסיס 10) התוכנית תייצר מספר חדש (int) שיהיה המספר שהתקבל אבל בבסיס בינארי (2) דוגמא: עבור הקלט 5 התוכנית תייצר ותדפיס את המספר 101 68 © Keren Kalif

תרגיל 6: ציור משולש הפוך מוצמד לימין כתוב תוכנית המקבלת מהמשתמש רוחב בסיס של משולש ומדפיסה משולש המוצמד לימין שבסיסו בחלק העליון. דוגמא: עבור num=4 יוצג המשולש הבא:   **** *** ** * 69 © Keren Kalif

תרגיל 7:ציור כתר כתבו תכנית הקולטת מספר טבעי, N, ומדפיסה מבנה כוכביות עפ"י הדוגמה הבאה: עבור N=5 יודפס המבנה הבא:   * * כוכבית אחת בכל חלק ** ** שתי כוכביות בכל חלק *** *** שלוש כוכביות בכל חלק **** **** ארבע כוכביות בכל חלק ********** חמש כוכביות בכל חלק   המבנה מורכב מחלק ימני וחלק שמאלי המכילים משולש כוכביות ומיושרים לצד ימין או שמאל בהתאם, כאשר רק בשורה האחרונה אין רווח בין שני החלקים. כתבו תכנית הקולטת מספר טבעי, N, ומדפיסה מבנה כוכביות עפ"י הדוגמה הבאה: עבור N=5 יודפס המבנה הבא:   * * כוכבית אחת בכל חלק ** ** שתי כוכביות בכל חלק *** *** שלוש כוכביות בכל חלק **** **** ארבע כוכביות בכל חלק ********** חמש כוכביות בכל חלק   המבנה מורכב מחלק ימני וחלק שמאלי המכילים משולש כוכביות ומיושרים לצד ימין או שמאל בהתאם, כאשר רק בשורה האחרונה אין רווח בין שני החלקים. 70 © Keren Kalif

תרגיל 8: משחק הניחושים הגרל מספר סודי בין 1-100 על המשתמש לנחש את המספר התוכנית תיתן הודעה האם המספר גדול או קטן מהמספר הסודי לבסוף יש להציג למשתמש הודעה תוך כמה נסיונות ניחש את המספר 71 © Keren Kalif

תרגיל 9: ציור שטיח קלוט מספר N וצייר N ריבועים בכל שורה ועמודה, כך שגודלו של כל ריבוע יהיה NxN 72 © Keren Kalif