למדנו 4 סוגי לולאות:
while
while (תנאי) {
.
. T
.
}
.
. F
. F
.
for
for (קידום ; תנאי ; אתחול) {
.
. T
.
}
.
. F
. F
.
do while
do {
.
. (T)
.
} while (תנאי) ;
.
. F
.
goto
ABC:
.
.
.
if (תנאי)
goto ABC ;
אז מתי משתמשים בכל דבר?
ברוב המקרים משתמשים ב FOR . בעקרון מתי שיודעים מראש את כמות החזרות שהלולאה צרכה לעשות.
בשאר המקרים משתמשים ב WHILE . בעיקר מתי שכמות החזרות לא ידועה מראש.
כאשר יודעים על חזרה אחת וודאית שהלולאה צריכה לעשות לא משנה מה יהיו הנתונים, כדאי להשתמש ב DO WHILE.
לא נוהגים להשתמש ב GOTO.
דוגמאות לשימוש (מכונן M):
כאן נקבל 10 מספרים ונשיב מה הסכום והממוצע שלהם בשתי דרכים
/* #include <stdio.h> void main() { int i , num , sum = 0; i = 1; while(i <= 10) { printf("%d. Enter number: " , i); scanf("%d",&num); sum += num; i++; } printf("Sum: %d Avg: %.2f\n",sum , sum / 10.0); } ///////////////////////////////////////////////// #include <stdio.h> void main() { int i , num , sum = 0; for(i = 1; i <= 10 ; i++) { printf("%d. Enter number: " , i); scanf("%d",&num); sum += num; } printf("Sum: %d Avg: %.2f\n",sum , sum / 10.0);
כאן נקבל 2 מספרים ונשיב מה סכום חיבור כל המספרים השלמים ביניהם} //////////////////////////////////////////////// #include <stdio.h> void main() { int a , b , i , sum = 0; printf("Enter a & b: "); scanf("%d %d",&a, &b); // for(i=a; i <= b; i++) // sum += i; // for( ; a <= b; a++) // sum += a; // for( ; a <= b; ) // sum += a++; // while( a <= b ) // sum += a++; // for( ; a <= b; sum += a++ ) ; for(i=a, sum=0 ; i <= b; sum += i , i++ ) ; printf("sum: %d\n",sum); }
*/
כאן נעשה שימוש בלולאת DO WHILE#include <stdio.h> void main() { int num; do { printf("Enter number: "); scanf("%d",&num); }while (num < 0); }
מחשבים א'
משפטי בקרה - לולאות.
1) כתוב תוכנית אשר קולטת 10 מספרים שלמים ומדפיסה הסכום
והממוצע שלהם.
2) כתוב תוכנית אשר קולטת מספר שלם וחיובי – n , התוכנית מדפיסה את
את כל המספרים הזוגיים בין 1 עד n.
3) כתוב תוכנית אשר תציג את כל המספרים האי זוגיים מ- 1 עד 100 אשר
לא מתחלקים ב 3 וב- 5 .
4) כתוב תוכנית אשר קולטת שני מספרים שלמים ותמצא את המחלק המשותף
הגדול ביותר למספרים אלו.
לדוגמא: המחלק המשותף עבור 75 ו 100 הוא 25.
מומלץ לעשות שימוש באלגוריתם אוקלידס (על פיו מחסרים את המספר הגדול מהקטן ואז שוב ושוב עד ששני המספרים שווים. אז הם יהיו שווים למכנה המשותף הגדול ביותר שלהם.
5) כתוב תוכנית אשר קולטת מספר שלם n.
אם n שלילי אז התוכנית מדפיסה הודעת שגיאה.
אחרת התוכנית מחשבת ומדפיסה את n! .
6) ידוע שעבור כל מספר שלם X בין 1 ל- 100 אפשר לקבל סדרה סופית
שהאיבר האחרון בה הוא 1 לפי הפירוט הבא:
X1 = X
עבור Xn זוגי Xn + 1 = Xn/2
אחרת = 3*Xn + 1
לדוגמא:
עבור X = 12 נקבל הסדרה:
12 ,6 ,3 ,10 ,5 ,16 ,8 ,4 ,2 ,1
כלומר הסדרה יכולה להתחיל רק במספר שלם בין 1-100 .
אם מספר הוא זוגי אז אחריו יגיע מספר שהוא חצי ממנו (אחרי 12 נקבל 6 ואחר כך 3)
אם מספר הוא אי זוגי, (נקרא לו X להסבר), אז אחרי X יגיע 3X+1 (אחרי 3 נקבל 10 כי 3 כפול 3 + 1 = 10)
כלומר הסדרה יכולה להתחיל רק במספר שלם בין 1-100 .
אם מספר הוא זוגי אז אחריו יגיע מספר שהוא חצי ממנו (אחרי 12 נקבל 6 ואחר כך 3)
אם מספר הוא אי זוגי, (נקרא לו X להסבר), אז אחרי X יגיע 3X+1 (אחרי 3 נקבל 10 כי 3 כפול 3 + 1 = 10)
כתוב תוכנית הקולט מספר בין 1 עד 100 - X ומדפיס את איברי הסדרה
שמתחילה ב- X.
שמתחילה ב- X.
7) כתוב תכנית אשר קולטת 10 מספרים ממשיים ומדפיסה המספר המכסימלי
והמינימלי וההפרש ביניהם.
עבור הקלט: 15 6 32 24 12- 23 89 14 1 8
עבור הקלט: 15 6 32 24 12- 23 89 14 1 8
הפלט יהיה: Max: 89 , Min: -12 , Diff: 101
8) כתוב תכנית אשר קולטת שני מספרים חיוביים: a ו b. היא מחשבת ומדפיסה את הסכום של ריבוע המספרים בין:a ל- b .
לדוגמא:
עבור a=1 ו b=5 הפלט יהיה 55.
כי 1^2 + 2^2 + 3^2 + 4^2 + 5^2 =55
כי 1^2 + 2^2 + 3^2 + 4^2 + 5^2 =55
9) כתוב תכנית אשר קולטת 10 מספרים שלמים, ומוצאת המספר הזוגי
המכסימלי שנקלט. אם לא נקלט אף מספר זוגי אז התוכנית מדפיסה הודעה
מתאימה לדוגמא,
עבור הקלט: 15 6 32 24 12- 23 89 14 1 8
המכסימלי שנקלט. אם לא נקלט אף מספר זוגי אז התוכנית מדפיסה הודעה
מתאימה לדוגמא,
עבור הקלט: 15 6 32 24 12- 23 89 14 1 8
הפלט יהיה: Max odd num is: 32
10) כתוב תכנית אשר קולטת מספר חיובי ושלם n.
התוכנית קולטת עוד n מספרים זוגיים ומדפיסה הממוצע של המספרים
הזוגיים שנקלטו.
דוגמה למשימה 1
השבמחקhttp://pastebin.com/wXG9rmaG