Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter<=7 ; counter++ ) { loop body } שם המשתנה שבאמצעותו נשלוט בלולאה הערך שבו נאתחל.

Similar presentations


Presentation on theme: "תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter<=7 ; counter++ ) { loop body } שם המשתנה שבאמצעותו נשלוט בלולאה הערך שבו נאתחל."— Presentation transcript:

1 תכנות תרגול 5 שבוע : 5.4.06

2 לולאות for לולאות for for (counter=1 ;counter<=7 ; counter++ ) { loop body } שם המשתנה שבאמצעותו נשלוט בלולאה הערך שבו נאתחל אותו התנאי שכל עוד הוא מתקיים נמשכת הלולאה קידום משתנה הלולאה מה ערכו של המשתנה כאן ?

3 שימושים נוספים ללולאות for באמצעות לולאות נוכל לבצע חישובים מתמטים. למשל הדבר הבא : קלוט מספר מהמשתמש וקבע אם הוא ראשוני או לא !

4 #include<stdio.h> void main() { int i,prime,sq; printf("enter a number\n"); scanf("%d", &prime); sq = (int) sqrt(prime); for(i = 2 ; i <= sq; i++) if (prime % i == 0) if (prime % i == 0) { printf("%d not prime divided by %d \n",prime,i); printf("%d not prime divided by %d \n",prime,i); break; break; } if (i > sq ) printf("the number %d is prime\n",prime); } הגדרת משתנים וקליטת המספר מהמשתמש. גבול החיפוש הלולאה למציאת מספר שמחלק ( אם קיים כזה ).

5 תרגיל 1 כתוב תוכנית הקולטת מספר ומדפיסה את כל המספרים הראשונים עד אליו.

6 void main() { int i,j,sq,last; printf("enter a number\n"); scanf("%d", &last); for(i = 2; i <= last; i++) { sq = (int) sqrt(i); for(j = 2 ; j <= sq; j++) if (i % j == 0) break; if (j > sq ) printf("the number %d is prime\n", i); }} בדיקת הראשוניות חזרה על הבדיקה עד לקלט

7 הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת הערכים שהפונקציה מקבלת דוגמא : נממש את הפונקציה f(x) = x^2 double sqr(double x) { return x*x; } הגדרת הפונקציה גוף הפונקציה { Function body return-value }

8 הכרזה על פונקציות return-value-type function-name(parameter1, parameter2, …); הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת סוגי הערכים שהפונקציה מקבלת הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית מאפשרת לנו להשתמש בפונקציה בכל מקום. double sqr(double ); int minimum( int, int, int ); int main() {}

9 פונקציות - דוגמא נוספת נממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים : int minimum( int x, int y, int z ) { int min = x; int min = x; if ( y < min ) if ( y < min ) min = y; min = y; if ( z < min ) if ( z < min ) min = z; min = z; return min; return min;} משתנה מקומי שמוכר רק בתוך הפונקציה

10 שימוש בפונקציות int main() { int a, b, c; int a, b, c; printf( "Enter three integers: " ); printf( "Enter three integers: " ); scanf( "%d%d%d", &a, &b, &c ); scanf( "%d%d%d", &a, &b, &c ); printf( "Min is: %d\n", minimum( a, b, c ) ); printf( "Min is: %d\n", minimum( a, b, c ) ); return 0; return 0;}

11 שימוש בפונקציות int main() { int a, b, c, min; int a, b, c, min; printf( "Enter three integers: " ); printf( "Enter three integers: " ); scanf( "%d%d%d", &a, &b, &c ); scanf( "%d%d%d", &a, &b, &c ); min = minimum( a, b, c ); min = minimum( a, b, c ); printf( "Min is: %d\n", min); printf( "Min is: %d\n", min); return 0; return 0;}

12 העברת הערכים משתמש 4 5 2 a b c45 2 x y z main minimum

13 תרגיל כתוב פונקציה המקבלת מספר שלם ומחזירה 0 אם הוא לא ראשוני ו 1 אם כן. הדרכה : void main() { if (IsPrime(7) == 1) printf(“7 is prime”); } int IsPrime(int p) {} תוכנית שמשתמשת בפונקציה הפונקציה ( השלימו את הגוף ) ?

14 תרגיל - המשך קלוט מספר והדפס את כל המספרים הראשונים עד אליו תוך שימוש בפונקציה שכתבת.

15 תרגיל - פתרון int IsPrime(int num) { int i, sq; int i, sq; sq = (int) sqrt(num); sq = (int) sqrt(num); for(i = 2 ; i <= sq; i++) for(i = 2 ; i <= sq; i++) { if (num % i == 0) if (num % i == 0) return 0; return 0; } return 1; return 1;} הפונקציה לולאה למציאת מחלקים בדיקה למציאת מספר שמחלק את הקלט לפונקציה במידה ונמצא אז להחזיר 0 אם הגענו לכאן אז אף מחלק לא נמצא והמספר ראשוני

16 תרגיל - פתרון void main() { int num, last; printf("enter a number\n"); scanf("%d", &last); for(num = 2; num <= last; num++) if (IsPrime(num) == 1) printf("%d is prime\n", num); } התוכנית הראשית לולאה להדפסת כל הראשונים עד למספר שנקלט בדיקת ראשוניות

17 חישוב ערכים באמצעות לולאות נתון הסכום הבא :  i = 1 n (-1) i+1 4 2i -1 נכתוב פונקציה שמחשבת אותו

18 תרגיל כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של החישוב. הדרכה : זוהי הכרזת הפונקציה : double calc_something(double eps) {} (-1) i+1 4 2i -1 < eps הפונקציה תרוץ עד שיתקיים

19 חישוב הסכום double calc_something(int n) { int i,key=1; double result = 0; for (i=1; i<=n ;i++) { result = result + key*(4.00/(2*i-1)); result = result + key*(4.00/(2*i-1)); key *= -1; key *= -1;} return result; } הפונקציה החישוב עצמו

20 תרגיל - פתרון double calc_something(double eps) { int i=1,key=1; double result = 0,expr; do{ expr = 4.00/(2*i-1); result = result + key*expr; i++; key *= -1; }while (expr > eps); return result; } הפונקציה הדיוק

21 דוגמא כתבו את הפונקציות הבאות : int IsAlpha(char ch) int IsDigit(char ch) מקבלת תו ומחזירה אחד אם הוא אות ואפס אם לא מקבלת תו ומחזירה אחד אם הוא סיפרה ואפס אם לא כתוב תוכנית שמקבלת רצף של תווים ומדפיסה כמה אותיות היו ברצף וכמה ספרות היו ברצף.

22 הפונקציות int IsAlpha(char ch) { return (('a'<=ch && ch<='z')||('A'<=ch && ch<='Z')); } int IsDigit(char ch) { return ('0' <= ch && ch <= '9'); } אות קטנהאות גדולה סיפרה

23 void main() { int digit = 0, alpha = 0; char ch; scanf("%c", &ch); while( ch != '\n') { if (IsAlpha(ch) == 1) alpha++; else if (IsDigit(ch) == 1) digit++; scanf("%c", &ch); } printf("Alpha %d Digit %d\n", alpha, digit); } ספירת אותיות ספירת ספרות התוכנית

24 תרגיל כתבו את תוכנית הבאה : קלטו רצף של תווים והדפיסו אותו כך שכל אות קטנה הופכת לגדולה וכל אות גדולה לקטנה. אם התו הוא לא אות הוא יודפס ללא שינוי. קלט : abCdE12 פלט : ABcDe12

25 הפונקציות int IsBigAlpha(char ch) { return ('A'<=ch && ch<='Z'); } int IsSmallAlpha(char ch) { return ('a'<=ch && ch<='z'); }

26 void main() { char ch; scanf("%c", &ch); while( ch != '\n') { if (IsBigAlpha(ch) == 1) ch = ch + 32; else if (IsSmallAlpha(ch) == 1) ch = ch - 32; printf("%c",ch); scanf("%c", &ch); } printf("\n" ); return 0; }התוכנית

27 חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה. 1 + 1 n n

28 #include double CalcE(int last); int main() { int last; printf("Enter number of iterations\n"); scanf("%d", &last); printf("%lf\n", CalcE(last)); } double CalcE(int last) { int i; double e = 1, mul = 1 + 1 / (double)last; for(i = 1; i <= last; i++) e *= mul; return e; } קביעת n הביטוי : העלאה בחזקה :

29 חישוב e x כתוב פונקציה המקבלת את n ואת x ומחשבת את e x באמצעות הנוסחה 1 + x n n

30 הפונקציה double CalcE(int last,int power) { int i; double e = 1; double mul = 1 + power / (double)last; for(i = 1; i <= last; i++) e *= mul; return e; }

31 תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה -n של הסדרה הוא קירוב לשורש של a. הקירוב משתפר ככל ש -n גדל. כתוב פונקציה המקבלת מספר ומחשבת את השורש שלו לפי סדרה זו. תנאי העצירה של החישוב יהיה כאשר : root n == root n-1

32 פתרון double MySqrt(int num) { double root, root_n = 1.0; do { root = root_n; root_n = (root + num / root) / 2; }while(root_n != root); return root; }


Download ppt "תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter<=7 ; counter++ ) { loop body } שם המשתנה שבאמצעותו נשלוט בלולאה הערך שבו נאתחל."

Similar presentations


Ads by Google