1 / 30

לולאות

לולאות. מבנה הלולאה. ?. ?. לולאה ( 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); }.

Download Presentation

לולאות

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. לולאות Department of Computer Science-BGU

  2. מבנה הלולאה ? ? Department of Computer Science-BGU

  3. לולאה (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

  4. 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

  5. דוגמא-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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. לולאה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

  12. לקלוט נתון לפי הדרישה #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

  13. לולאה 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

  14. דוגמא 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

  15. 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

  16. 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

  17. שימושים ב-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

  18. לקלוט נתון לפי הדרישה עם 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

  19. 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

  20. שימוש ב- continue void main () { . . loop(expression) { . . continue; . . } // continue with the program } Department of Computer Science-BGU

  21. תרגיל פשוט • כתוב תכנית שמדפיסה את טבלת הכפל • פתרון:#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

  22. תרגיל Write a program that accepts a number from the user, and checks whether it is prime. Department of Computer Science-BGU

  23. פתרון #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

  24. תרגיל נוסף 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

  25. פתרון #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

  26. תרגיל נוסף Write a program that prints an upside-down half triangle of *. The height of the pyramid is the input. ***** **** *** ** * Department of Computer Science-BGU

  27. הנה הפתרון #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

  28. שינוי בתרגיל 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

  29. פתרון 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

  30. פתרון 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

More Related