300 likes | 392 Views
לולאות. מבנה הלולאה. ?. ?. לולאה ( loop ). Used to repeat the same instruction(s) over and over again. C provides some flexible ways of deciding how many times to loop, or when to exit a loop. for, while, do-while loops. While. while (condition) { statement(s); }.
E N D
לולאות Department of Computer Science-BGU
מבנה הלולאה ? ? Department of Computer Science-BGU
לולאה (loop) • Used to repeat the same instruction(s) over and over again. • C provides some flexible ways of deciding how many times to loop, or when to exit a loop. • for, while, do-while loops. Department of Computer Science-BGU
While while (condition) { statement(s); } The statements are executed as long as condition is true When the condition is no longer true, the loop is exited. Department of Computer Science-BGU
דוגמא-factorial #include <stdio.h> void main() { int i, n, fact = 1; printf("Enter a number\n"); scanf("%d", &n); i=1; while (i<=n) { fact = fact*i; i++; } printf("the factorial is %d\n", fact); } This is a counter Every iteration i is incremented by 1. (Equivalent to i=i+1) Department of Computer Science-BGU
Exercise • Input – • Two integers – A and B • Output – • How many times A contains B • This is the result of the integer division A/B • Note – • Do not use the division operator! Department of Computer Science-BGU
Solution #include <stdio.h> void main() { int a, b, res; printf("Please enter two numbers.\n"); scanf("%d%d", &a, &b); res = 0; while ( (res+1) * b <= a) res = res + 1; printf("%d / %d = %d", a, b, res); } Department of Computer Science-BGU
Additional Exercise • Input – • Two integers – A and B • Output – • Only if A and B are Digits • Otherwise return to input. Department of Computer Science-BGU
Solution #include <stdio.h> void main() { int a, b, flag = 1; while ( flag){ flag = 0; printf("Please enter two numbers.\n"); scanf("%d%d", &a, &b); if(a > 9 || a < 0) flag = 1; else if (b > 9 || b < 0 ) flag = 1; } // executing statements using a and b } Department of Computer Science-BGU
Compact Solution #include <stdio.h> void main() { int a, b, flag = 1; while ( flag){ flag = 0; printf("Please enter two numbers.\n"); scanf("%d%d", &a, &b); if(a > 9 || a < 0 || b > 9 || b < 0 ) flag = 1; } // executing statements using a and b } Department of Computer Science-BGU
לולאהdo - while do { statement(s) } while (expression); • Similar to while loops • Except the condition is evaluated after the loop body • The loop body is always executed at least once, even if the expression is never true (equals zero) Department of Computer Science-BGU
לקלוט נתון לפי הדרישה #include <stdio.h> void main() { int i; printf("Please enter a positive number.\n"); do { scanf("%d", &i); if (i<=0) printf("That's not a positive number! Try again.\n"); } while (i<=0); /* The program continues.... */ } Department of Computer Science-BGU
לולאה for - מבנה /* Program before the for loop */ for( ; ; ) { loop body; } /* Continue the program after for loop */ False initialize condition increment True Department of Computer Science-BGU
דוגמא For loops are controlled by a counter variable. for( c =init_value; c<=fin_value ; c+=increment_value) { loop body; } c is a counter. c is a incremented after every iteration (can also be decreased!) Department of Computer Science-BGU
for vs . while • for is equivalent to while… Any for loop can be converted to while loop and vice versa. • If we want to perform something for a predefined number of times, better use for. • If we just wait for something to happen (not after a certain number or iterations), better use while. Department of Computer Science-BGU
break • When break is encountered, the loop is exited regardless of whether the condition is still true. • The program then continues to run from the first line after the while loop. • If called within a nested loop, breakbreaks out of the inner loop only. Department of Computer Science-BGU
שימושים ב-break void main () { . . loop(expression) { . . break; . . } // continue with the program } void main () { . loop1(expression1) { . loop2(expression2) { . break; . } // end loop2 // continue with loop1 } // end loop1 . . } Department of Computer Science-BGU
לקלוט נתון לפי הדרישה עם break #include <stdio.h> void main() { int i; printf("Please enter a positive number.\n"); do { scanf("%d", &i); if (i >= 0) break; // after break no needed else printf("That's not a positive number! Try again.\n"); } while (1); /* The program continues.... */ } Department of Computer Science-BGU
continue • When continue is encountered, the rest of the loop is ignored. • The program then continues to run from the beginning of the loop. • Rarely used. • Can usually be replaced by an appropriate if-else statement. Department of Computer Science-BGU
שימוש ב- continue void main () { . . loop(expression) { . . continue; . . } // continue with the program } Department of Computer Science-BGU
תרגיל פשוט • כתוב תכנית שמדפיסה את טבלת הכפל • פתרון:#include <stdio.h> void main(){ int i,j;printf("Printing the multiplication table: \n\r"); for (i = 1 ; i <= 4 ; i++) { printf("\n\r"); for (j = 1 ; j <= 5 ; j++) printf ("(%2d , %2d)", i, j); } } Department of Computer Science-BGU
תרגיל Write a program that accepts a number from the user, and checks whether it is prime. Department of Computer Science-BGU
פתרון #include <stdio.h> void main() { int i, num; printf("enter a number\n"); scanf("%d", &num); for(i = 2 ; i < num; i++) if (num % i == 0) /* Then we know it's not a prime */ break; if (i < num) printf("%d is not a prime number!\n", num); else printf("%d is indeed a prime number!\n", num); } Department of Computer Science-BGU
תרגיל נוסף Extend the former program so it accepts a number from the user, and prints out all of the prime numbers up to that number (Hint – gotta use nested loops here...) Department of Computer Science-BGU
פתרון #include <stdio.h> void main() { int i, j, last; printf("enter a number\n"); scanf("%d", &last); for(i = 2; i <= last; i++) { for(j = 2 ; j < i; j++) if (i % j == 0) break; if (j == i) printf("the number %d is prime\n", i); } // end for } Department of Computer Science-BGU
תרגיל נוסף Write a program that prints an upside-down half triangle of *. The height of the pyramid is the input. ***** **** *** ** * Department of Computer Science-BGU
הנה הפתרון #include<stdio.h> void main() { int i, j, size; printf(“Please enter a size:\n”); scanf(“%d”,&size); for (i = 1; i <= size; i++) { for(j = i; j <= size; j++) printf("*"); printf("\n"); } } Department of Computer Science-BGU
שינוי בתרגיל Change the former prime-listing program, so that is displays only the largest prime number which is smaller than or equal to the user’s input. Department of Computer Science-BGU
פתרון 1 #include <stdio.h> void main() { int i, j, last; int found = 0; /* This indicates whether we found the largest prime */ printf("enter a number\n"); scanf("%d", &last); i = last; while (!found) { /* Loop until we find our guy */ for(j = 2 ; j < i; j++) if (i % j == 0) break; if (j == i) /* If this is true then i is prime */ found = 1; else i--; } printf("The largest prime not larger than %d is %d.\n", last, i); } Department of Computer Science-BGU
פתרון 2 – עם break #include <stdio.h> void main() { int i, j, last; printf("enter a number\n"); scanf("%d", &last); for(i=last ; i>1 ; i--) { for(j = 2 ; j < i; j++) if (i % j == 0) break; // break the inner for loop only !! if (j == i) // i is prime. We found our guy break; } printf("The largest prime not larger than %d is %d.\n", last, i); } Department of Computer Science-BGU