Transcript
Page 1: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

לולאות

19/04/23 00:22

1

Department of Computer Science-BGU

Page 2: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

מבנה הלולאה

?

?

19/04/23 00:22

2

Department of Computer Science-BGU

Page 3: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.

19/04/23 00:22

3

Department of Computer Science-BGU

Page 4: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.

19/04/23 00:22

4

Department of Computer Science-BGU

Page 5: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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)

19/04/23 00:22

5

Department of Computer Science-BGU

Page 6: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 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/BNote –

Do not use the division operator!

19/04/23 00:22

6

Department of Computer Science-BGU

Page 7: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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);}

19/04/23 00:22

7

Department of Computer Science-BGU

Page 8: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.

19/04/23 00:22

8

Department of Computer Science-BGU

Page 9: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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}

19/04/23 00:22

9

Department of Computer Science-BGU

Page 10: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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

}19/04/23 00:22

10

Department of Computer Science-BGU

Page 11: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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)

19/04/23 00:22

11

Department of Computer Science-BGU

Page 12: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.... */}

19/04/23 00:22

12

Department of Computer Science-BGU

Page 13: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

- מבנה forלולאה

/* Program before the for loop */

for( ; ; ) {

loop body;} /* Continue the program after for loop */

initiali ze

condition increment

True

False

19/04/23 00:22

13

Department of Computer Science-BGU

Page 14: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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!)

19/04/23 00:22

14

Department of Computer Science-BGU

Page 15: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.

19/04/23 00:22

15

Department of Computer Science-BGU

Page 16: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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, break breaks out of the inner loop only.

19/04/23 00:22

16

Department of Computer Science-BGU

Page 17: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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

.

.}

19/04/23 00:22

17

Department of Computer Science-BGU

Page 18: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.... */}

19/04/23 00:22

18

Department of Computer Science-BGU

Page 19: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.

19/04/23 00:22

19

Department of Computer Science-BGU

Page 20: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

continueשימוש ב-

void main () {..

loop(expression) {..

continue;..

}

// continue with the program}

19/04/23 00:22

20

Department of Computer Science-BGU

Page 21: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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);       }

}19/04/23 00:22Department of Computer Science-BGU

Page 22: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

תרגיל

Write a program that accepts a number from the user,

and checks whether it is prime.

19/04/23 00:22

22

Department of Computer Science-BGU

Page 23: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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);

elseprintf("%d is indeed a prime number!\n", num);

}

19/04/23 00:22

23

Department of Computer Science-BGU

Page 24: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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...)

19/04/23 00:22

24

Department of Computer Science-BGU

Page 25: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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

}19/04/23 00:22

25

Department of Computer Science-BGU

Page 26: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

תרגיל נוסף

Write a program that prints an upside-down half triangle of.*

The height of the pyramid is the input.

***************

19/04/23 00:22

26

Department of Computer Science-BGU

Page 27: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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");}

}

19/04/23 00:22

27

Department of Computer Science-BGU

Page 28: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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.

19/04/23 00:22

28

Department of Computer Science-BGU

Page 29: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 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);

}19/04/23 00:22

29

Department of Computer Science-BGU

Page 30: לולאות 02 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 1502 יולי 15 02 יולי 15 02 יולי 15 1 Department of Computer Science-BGU

break – עם 2פתרון

#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);

}19/04/23 00:22

30

Department of Computer Science-BGU