תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter
Post on 21-Dec-2015
227 views
TRANSCRIPT
![Page 1: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/1.jpg)
55 תכנות תרגולתכנות תרגול
::שבועשבוע
55..44.0.066
![Page 2: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/2.jpg)
forfor לולאות לולאות
for for (counter=1 ;counter<=7 ; counter+(counter=1 ;counter<=7 ; counter++ )+ )
{{
loop bodyloop body
}}
שם המשתנה שבאמצעותו נשלוט בלולאה
הערך שבו נאתחל אותו
התנאי שכל עוד הוא מתקיים נמשכת הלולאה
קידום משתנה הלולאה
אןמה ערכו של המשתנה כ ?
![Page 3: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/3.jpg)
forforשימושים נוספים ללולאות שימושים נוספים ללולאות
באמצעות לולאות נוכל לבצע חישובים מתמטים.באמצעות לולאות נוכל לבצע חישובים מתמטים.
למשל הדבר הבא: קלוט מספר מהמשתמש למשל הדבר הבא: קלוט מספר מהמשתמש
וקבע אם הוא ראשוני או לא!וקבע אם הוא ראשוני או לא!
![Page 4: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/4.jpg)
#include<stdio.h>#include<stdio.h>void main()void main(){{
int i,prime,sq;int i,prime,sq;printf("enter a number\n");printf("enter a number\n");scanf("%d", &prime);scanf("%d", &prime);sq = (int) sqrt(prime);sq = (int) sqrt(prime);for(i = 2 ; i <= sq; i++)for(i = 2 ; i <= sq; i++) if (prime % i == 0)if (prime % i == 0) {{ printf("%d not prime divided by %d \printf("%d not prime divided by %d \n",prime,i);n",prime,i); breakbreak;; }}if (i > sq ) printf("the number %d is prime\if (i > sq ) printf("the number %d is prime\n",prime); n",prime);
}}
הגדרת משתנים וקליטת .המספר מהמשתמש
גבול החיפוש
הלולאה למציאת מספר שמחלק .(אם קיים כזה)
![Page 5: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/5.jpg)
11תרגיל תרגיל
כתוב תוכנית הקולטת מספר ומדפיסה את כל כתוב תוכנית הקולטת מספר ומדפיסה את כל המספרים המספרים
הראשונים עד אליו. הראשונים עד אליו.
![Page 6: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/6.jpg)
void main()void main(){{
int i,j,sq,last;int i,j,sq,last;printf("enter a number\n");printf("enter a number\n");scanf("%d", &last);scanf("%d", &last);for(i = 2; i <=for(i = 2; i <= lastlast; i++); i++){{
sq = (int) sqrt(i);sq = (int) sqrt(i);for(j = 2 ; j <= sq; j++)for(j = 2 ; j <= sq; j++)
if (i % j == 0)if (i % j == 0)break;break;
if (j > sq ) if (j > sq ) printf("the number %d is prime\n", printf("the number %d is prime\n",
i); i); }}
}}
בדיקת הראשוניות
חזרה עלהבדיקה עד
לקלט
![Page 7: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/7.jpg)
הגדרת פונקציותהגדרת פונקציות
return-value-typereturn-value-type function-name( function-name(parameter1parameter1, , parameter2parameter2, …), …)
הגדרת סוג הערכים שהפונקציהמחזירה
שם הפונקציה רשימת הערכים שהפונקציהמקבלת
f(x) = x^2f(x) = x^2נממש את הפונקציה נממש את הפונקציה דוגמא:דוגמא:
doubledouble sqr( sqr(double x)double x)
{{
return x*x;return x*x;
}}
הגדרת הפונקציה
גוף הפונקציה
{Function body return-value
}
![Page 8: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/8.jpg)
הכרזה על פונקציותהכרזה על פונקציות
return-value-typereturn-value-type function-name( function-name(parameter1parameter1, , parameter2parameter2, …), …);;
הגדרת סוג הערכים שהפונקציהמחזירה
שם הפונקציה הערכים שהפונקציה סוגי רשימת מקבלת
הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית הכרזה על פונקציה בצורה כזו מעל לקטע הקוד הראשי של התוכנית
מאפשרת לנו להשתמש בפונקציה בכל מקום. מאפשרת לנו להשתמש בפונקציה בכל מקום.
doubledouble sqr( sqr(double );double );
intint minimum( minimum( intint, , intint, , intint ); );
int main()int main()
{{
}}
![Page 9: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/9.jpg)
פונקציות- דוגמא נוספתפונקציות- דוגמא נוספת ::נממש את הפונקציה שמוצאת את המינימום בין שלושה מספריםנממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים
intint minimum( minimum( intint x, x, intint y, y, intint z ) z )
{{
int int minmin = x; = 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;
}}
משתנה מקומי שמוכר רקבתוך הפונקציה
![Page 10: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/10.jpg)
שימוש בפונקציותשימוש בפונקציות
int main()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", printf( "Min is: %d\n", minimumminimum( ( a, b, ca, b, c ) ); ) );
return 0;return 0;
}}
![Page 11: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/11.jpg)
שימוש בפונקציותשימוש בפונקציותint main()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 = min = minimumminimum( ( a, b, ca, b, c ); );
printf( "Min is: %d\n", min);printf( "Min is: %d\n", min);
return 0;return 0;
}}
![Page 12: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/12.jpg)
העברת הערכיםהעברת הערכים
משתמש
44
55
22
a
b
c
44
55
22
x
y
z
mainminimum
![Page 13: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/13.jpg)
תרגילתרגיל אם הוא אם הוא 00כתוב פונקציה המקבלת מספר שלם ומחזירה כתוב פונקציה המקבלת מספר שלם ומחזירה
אם כן. הדרכה: אם כן. הדרכה:11לא ראשוני ולא ראשוני ו
void main()void main()
{{
if (IsPrime(if (IsPrime(77) == 1)) == 1)
printf(“printf(“77 is prime”); is prime”);
}}
int IsPrime(int p)int IsPrime(int p)
{{
}}
תוכנית שמשתמשת בפונקציה
הפונקציה )השלימו את הגוף(?
![Page 14: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/14.jpg)
תרגיל - המשךתרגיל - המשך
קלוט מספר והדפס את כל המספרים הראשונים עד אליו קלוט מספר והדפס את כל המספרים הראשונים עד אליו תוך שימוש בפונקציה שכתבת. תוך שימוש בפונקציה שכתבת.
![Page 15: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/15.jpg)
תרגיל - פתרוןתרגיל - פתרון
int IsPrime(int num)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במידה ונמצא אז להחזיר
אם הגענו לכאן אז אף מחלק לא נמצא והמספר ראשוני
![Page 16: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/16.jpg)
תרגיל - פתרוןתרגיל - פתרון
void main()void main(){{
int num, last;int num, last;printf("enter a number\n");printf("enter a number\n");scanf("%d", &last);scanf("%d", &last);for(num = 2; num <= last; num++)for(num = 2; num <= last; num++)
if (IsPrime(num) == 1)if (IsPrime(num) == 1)printf("%d is prime\n", num); printf("%d is prime\n", num);
}}
התוכנית הראשית
לולאה להדפסת כל הראשונים עד למספר שנקלט
בדיקת ראשוניות
![Page 17: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/17.jpg)
חישוב ערכים באמצעות לולאות חישוב ערכים באמצעות לולאות
:נתון הסכום הבא
i = 1
n
(-1)i+14
2i -1
נכתוב פונקציה שמחשבת אותו
![Page 18: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/18.jpg)
תרגילתרגיל
כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של
החישוב.החישוב.
הדרכה:הדרכה:
זוהי הכרזת הפונקציה:זוהי הכרזת הפונקציה:double calc_something(double eps)double calc_something(double eps){{}}
(-1)i+14
2i -1< eps הפונקציה תרוץ עד שיתקיים
![Page 19: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/19.jpg)
חישוב הסכוםחישוב הסכום
double calc_something(int n)double calc_something(int n){{
int i,key=1;int i,key=1;double result = 0;double result = 0;for (i=1; i<=n ;i++)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;return result;
}}
הפונקציה
החישוב עצמו
![Page 20: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/20.jpg)
תרגיל - פתרוןתרגיל - פתרוןdouble calc_something(double eps)double calc_something(double eps){{
int i=1,key=1;int i=1,key=1;double result = 0,expr;double result = 0,expr;dodo{{
expr = 4.00/(2*i-1);expr = 4.00/(2*i-1);result = result + key*expr;result = result + key*expr;i++;i++;key *= -1;key *= -1;
}while (expr > eps);}while (expr > eps);return result;return result;
}}
הפונקציה
הדיוק
![Page 21: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/21.jpg)
דוגמאדוגמא
כתבו את הפונקציות הבאות:
int IsAlpha(char ch)
int IsDigit(char ch)
מקבלת תו ומחזירה אחד אם הוא אות ואפס אם לא
מקבלת תו ומחזירה אחד אם הוא סיפרה ואפס אם לא
כתוב תוכנית שמקבלת רצף של תווים ומדפיסה כמה אותיות היו ברצף וכמה
ספרות היו ברצף.
![Page 22: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/22.jpg)
הפונקציותהפונקציות
int IsAlpha(char ch){ return (('a'<=ch && ch<='z')||('A'<=ch && ch<='Z'));}
int IsDigit(char ch){ return ('0' <= ch && ch <= '9');}
אות קטנה אות גדולה
סיפרה
![Page 23: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/23.jpg)
void main(){
int digit = 0, alpha = 0;char ch;scanf("%c", &ch);while( ch != '\n'){
if (IsAlpha(ch) == 1)alpha++;
elseif (IsDigit(ch) == 1)
digit++;scanf("%c", &ch);
}printf("Alpha %d Digit %d\n", alpha, digit);
}
ספירת אותיות
ספירת ספרות
התוכניתהתוכנית
![Page 24: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/24.jpg)
תרגילתרגיל
כתבו את תוכנית הבאה:
קלטו רצף של תווים והדפיסו אותו כך שכל אות קטנה הופכת לגדולה וכל אות גדולה
לקטנה. אם התו הוא לא אות הוא יודפס ללא abCdE12קלט: שינוי. ABcDe12פלט:
![Page 25: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/25.jpg)
הפונקציותהפונקציות
int IsBigAlpha(char ch){ return ('A'<=ch && ch<='Z');}
int IsSmallAlpha(char ch){ return ('a'<=ch && ch<='z');}
![Page 26: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/26.jpg)
void main(){
char ch;scanf("%c", &ch);while( ch != '\n'){
if (IsBigAlpha(ch) == 1)ch = ch + 32;
elseif (IsSmallAlpha(ch) == 1)
ch = ch - 32;printf("%c",ch);scanf("%c", &ch);
}printf("\n");return 0;
}
התוכניתהתוכנית
![Page 27: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/27.jpg)
ee חישוב חישוב
נראה כיצד לתרגם eזוהי הנוסחא לחישוב אותה לפונקציה.
1 + 1n
n
![Page 28: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/28.jpg)
#include <stdio.h>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 קביעת
הביטוי:
העלאה בחזקה:
![Page 29: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/29.jpg)
eexxחישוב חישוב
x ואת nכתוב פונקציה המקבלת את באמצעות הנוסחה exומחשבת את
1 + xn
n
![Page 30: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/30.jpg)
הפונקציההפונקציה
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;
}
![Page 31: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/31.jpg)
תרגילתרגיל
שורש של מספר מחושב לפי הסדרה הבאה:
root0 = 1rootn = rootn-1 + a / rootn-1
2
של הסדרה הוא קירוב nכאשר האיבר ה- גדל.n. הקירוב משתפר ככל ש-aלשורש של
כתוב פונקציה המקבלת מספר ומחשבת את השורש שלו לפי סדרה זו.
:תנאי העצירה של החישוב יהיה כאשרrootn == rootn-1
![Page 32: תכנות תרגול 5 שבוע : 5.4.06. לולאות for לולאות for for (counter=1 ;counter](https://reader036.vdocument.in/reader036/viewer/2022062308/56649d585503460f94a37bf2/html5/thumbnails/32.jpg)
פתרוןפתרון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;
}