1 / 30

# ?????? - PowerPoint PPT Presentation

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

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about ' ??????' - yolanda-hensley

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### לולאות

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

• 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

#include <stdio.h>

void main() {

int a, b, res;

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

• Input –

• Two integers – A and B

• Output –

• Only if A and B are Digits

Department of Computer Science-BGU

#include <stdio.h>

void main() {

int a, b, flag = 1;

while ( flag){

flag = 0;

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

#include <stdio.h>

void main() {

int a, b, flag = 1;

while ( flag){

flag = 0;

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;

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

• 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

#include <stdio.h>

void main() {

int i;

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

• 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;

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

#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