מבוא כללי למדעי המחשב תרגול 3
לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא מהלולאה ברגע שהתנאי לא מתקיים נצא מהלולאה !
דוגמא ללולאה – חישוב עצרת #include #include int main() { int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n); i=1; while (i<=n) { fact *= i; i++;} printf(“The factorial is %d\n", fact); return 0; } הגדרת משתנים קליטת ערכים אתחול מונה הלולאה עצמה הדפסת התוצאה
תרגיל 1 קלוט שני מספרים וחשב את החזקה שלהם באמצעות פעולות כפל בלבד.
פתרון תרגיל 1 פתרון תרגיל 1 #include #include int main() { int a, b, i, power; i = 1; power = 1; printf("Enter 2 numbers\n"); scanf("%d%d", &a, &b); while (i <= b) { power = power * a; i++;} printf("%d power %d is %d\n",a,b, power); return 0; } תנאי הקיום של הלולאה גוף הלולאה כאשר הוא מכיל יותר מהוראה אחת נפתח קטע קוד { }
לולאות for לולאות for for (counter=1 ;counter<=7 ; counter++ ) { loop body } שם המשתנה שבאמצעותו נשלוט בלולאה הערך שבו נאתחל אותו התנאי שכל עוד הוא מתקיים נמשכת הלולאה קידום משתנה הלולאה מה ערכו של המשתנה כאן ?
דוגמא ללולאת for לחישוב עצרת #include #include int main() { int i,n,fact = 1; printf("Enter a number\n"); scanf("%d", &n); for (i=1;i<=n;i++) fact *= i; printf(“the factorial is %d\n", fact); return 0; } לולאת ה - for תנאי סיום הלולאה נקלט מהמשתמש למשתנה n !
תרגיל 2 כתוב תוכנית המקבלת מספר מהמשתמש ומדפיסה ריבוע של כוכביות בגודל המספר שנקלט דוגמא קלט 5: *************************
פתרון תרגיל 2 #include<stdio.h> int main() { intn,i,j; scanf ("%d",&n); for (i = 1; i <= n; i++) { for(j = 1; j <= n; j++) printf("*");printf("\n");}} לולאה כפולה ! פלט ***** שורה חדשה
חצי ריבוע ( משולש ) #include<stdio.h> int main() { intn,i,j; scanf ("%d",&n); for (i = 1; i <= n; i++) { for(j = i; j <= n; j++) printf("*");printf("\n");} return 0; } לולאה כפולה שימו לב מאיפה מתחילה הלולאה השנייה ! פלט ***** **** *** ** *
תרגיל 3 כתוב תוכנית המדפיסה משולשים שווי שוקים בצורה הבאה הקלט הוא מספר שיציין את גודל שוק המשולש, בדוגמא כאן 5. *********
פתרון תרגיל 3 int main() { intn,i,j; scanf ("%d",&n); for (i = 0; i < n; i++) { for(j = 0; j < n – i – 1; j++) printf(" "); for(j = 0; j < 2 * i + 1; j++) printf("*");printf("\n");} return 0; } לולאה חיצונית לולאה פנימית ראשונה לולאה פנימית שנייה n = * 123*** 12***** 1******* *********
תרגיל 4 כתוב תוכנית הקולטת מספר ומדפיסה אם הוא ראשוני או לא.
int main() { intn,k; printf(“Enter a number"); scanf("%d", &n); for(k = 2 ; k*k <= n; k++) { if (n % k == 0) { printf("%d is not prime, divided by %d\n",n,k); printf("%d is not prime, divided by %d\n",n,k); break; break;}} if (k*k>n) printf(“The number %d is prime\n",n); return 0; } בדיקת האם לא ראשוני ויציאה אם אכן כך פתרון תרגיל 4
תרגיל 5 כתוב תוכנית הקולטת מספר ומדפיסה את כל המספרים הראשונים עד אליו.
int main() { intlast,n,k; printf(“Enter a number"); scanf("%d", &last); for(n = 2; n <= last; n++) { for(k = 2 ; k*k <= n; k++) if (n % k == 0) break; if (k*k > n ) printf(“The number %d is prime\n",n); } return 0; } בדיקת הראשוניות פתרון תרגיל 5
תרגיל 6 כתוב תוכנית הקולטת 10 איברים לתוך מערך ומדפיסה תחילה את כל האיברים הזוגיים ואחר כך את כל האיברים האי זוגיים Enter numbers Even: Odd:
#include #include int main() { int i,arr[10]; printf("Enter numbers\n"); for (i=0;i<10;i++) scanf("%d",&arr[i]);printf("Even:\n"); if (arr[i] % 2 == 0) printf("%d ",arr[i]); printf("\nOdd:\n"); for (i=0;i<10;i++) if (arr[i] % 2 != 0) printf("%d ",arr[i]); printf("\n"); return 0; } קלט פלט פתרון תרגיל 6