תכנות תרגול 4 שבוע : 20.11.05. לולאות for לולאות for for (counter=1...
Post on 21-Dec-2015
219 views
TRANSCRIPT
44 תכנות תרגולתכנות תרגול
::שבועשבוע
2020..1111.05.05
forfor לולאות לולאות
for for (counter=1 ;counter<=7 ; counter+(counter=1 ;counter<=7 ; counter++ )+ )
{{
loop bodyloop body
}}
שם המשתנה שבאמצעותו נשלוט בלולאה
הערך שבו נאתחל אותו
התנאי שכל עוד הוא מתקיים נמשכת הלולאה
קידום משתנה הלולאה
אןמה ערכו של המשתנה כ ?
forforשימושים נוספים ללולאות שימושים נוספים ללולאות
באמצעות לולאות נוכל לבצע חישובים מתמטים.באמצעות לולאות נוכל לבצע חישובים מתמטים.
למשל הדבר הבא: קלוט מספר מהמשתמש למשל הדבר הבא: קלוט מספר מהמשתמש
וקבע אם הוא ראשוני או לא!וקבע אם הוא ראשוני או לא!
#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);
}}
הגדרת משתנים וקליטת .המספר מהמשתמש
גבול החיפוש
הלולאה למציאת מספר שמחלק .(אם קיים כזה)
11תרגיל תרגיל
כתוב תוכנית הקולטת מספר ומדפיסה את כל כתוב תוכנית הקולטת מספר ומדפיסה את כל המספרים המספרים
הראשונים עד אליו. הראשונים עד אליו.
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); }}
}}
בדיקת הראשוניות
חזרה עלהבדיקה עד
לקלט
הגדרת פונקציותהגדרת פונקציות
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
}
פונקציות- דוגמא נוספתפונקציות- דוגמא נוספת ::נממש את הפונקציה שמוצאת את המינימום בין שלושה מספריםנממש את הפונקציה שמוצאת את המינימום בין שלושה מספרים
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;
}}
משתנה מקומי שמוכר רקבתוך הפונקציה
x
y
z
שימוש בפונקציותשימוש בפונקציות
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;
}}
שימוש בפונקציותשימוש בפונקציות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;
}}
העברת הערכיםהעברת הערכים
משתמש
44
55
22
a
b
c
44
55
22
x
y
z
mainminimum
הכרזה על פונקציותהכרזה על פונקציות
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()
{{
}}
22תרגיל תרגיל אם הוא אם הוא 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)
{{
}}
תוכנית שמשתמשת בפונקציה
הפונקציה )השלימו את הגוף(?
- המשך- המשך22תרגיל תרגיל
קלוט מספר והדפס את כל המספרים הראשונים עד אליו קלוט מספר והדפס את כל המספרים הראשונים עד אליו תוך שימוש בפונקציה שכתבת. תוך שימוש בפונקציה שכתבת.
- פתרון- פתרון22תרגיל תרגיל
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במידה ונמצא אז להחזיר
אם הגענו לכאן אז אף מחלק לא נמצא והמספר ראשוני
- פתרון- פתרון22תרגיל תרגיל
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);
}}
התוכנית הראשית
לולאה להדפסת כל הראשונים עד למספר שנקלט
בדיקת ראשוניות
חישוב ערכים באמצעות לולאות חישוב ערכים באמצעות לולאות
:נתון הסכום הבא
i = 1
n
(-1)i+14
2i -1
נכתוב פונקציה שמחשבת אותו
חישוב הסכוםחישוב הסכום
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;
}}
הפונקציה
החישוב עצמו
33תרגיל תרגיל
כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של כתוב פונקציה המקבלת כקלט את הדיוק המבוקש של
החישוב.החישוב.
הדרכה:הדרכה:
זוהי הכרזת הפונקציה:זוהי הכרזת הפונקציה:double calc_something(double eps)double calc_something(double eps){{}}
(-1)i+14
2i -1< eps הפונקציה תרוץ עד שיתקיים
- פתרון- פתרון33תרגיל תרגיל 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;
}}
הפונקציה
הדיוק
Switch Switch וו CaseCase
ififדומה לקינון משפטי דומה לקינון משפטי •
מאפשר בחירה של אפשרויות רמות על בסיס מספר שלםמאפשר בחירה של אפשרויות רמות על בסיס מספר שלם•
• switch (switch (expressionexpression) {) { case case const-exprconst-expr: :
statementsstatements case case const-exprconst-expr: :
statementsstatements …… default:default:
statementsstatements}}
The switch statementThe switch statement
הביטוי חייב להיות שלםהביטוי חייב להיות שלם•
הביטוי מוערך ומחפשים הביטוי מוערך ומחפשים switchswitchבעת ביצוע בעת ביצוע •casecase שמתאים לערך הביטוי. אם נמצא כזה שמתאים לערך הביטוי. אם נמצא כזה
--defaultdefaultקופצים אליו אם אין כזה קופצים לקופצים אליו אם אין כזה קופצים ל
תרגום ציוןתרגום ציון
switch (grade/10) { switch (grade/10) { case 10: case 10: case 9: case 9:
printf ("A\n"); printf ("A\n"); break; break;
case 8: case 8: printf ("B\n"); printf ("B\n"); break; break;
case 7: case 7: printf ("C\n"); printf ("C\n"); break; break;
case 6: case 6: printf ("D\n"); printf ("D\n"); break; break;
default: default: printf ("F\n"); printf ("F\n");
} }
BreakBreak
מוצא איפה להתחיל לפעול מוצא איפה להתחיל לפעול switchswitchכאשר ה כאשר ה • הוא "קופץ" לשם ומבצע את הכתוב. הוא "קופץ" לשם ומבצע את הכתוב.
הוא ממשיך לעשות כך עד שהוא פוגש במילה הוא ממשיך לעשות כך עד שהוא פוגש במילה •breakbreak.לראשונה. לראשונה
הוא קופץ להמשך הוא קופץ להמשך breakbreakברגע שפגש ב ברגע שפגש ב •- - switchswitchהתוכנית לאחר ההתוכנית לאחר ה
Switch Switch וו CaseCase
ififדומה לקינון משפטי דומה לקינון משפטי •
מאפשר בחירה של אפשרויות רמות על בסיס מספר שלםמאפשר בחירה של אפשרויות רמות על בסיס מספר שלם•
• switch (switch (expressionexpression) {) { case case const-exprconst-expr: :
statementsstatements case case const-exprconst-expr: :
statementsstatements …… default:default:
statementsstatements}}
The switch statementThe switch statement
• expressionexpression must have an integral value must have an integral value
• when the switch statement is executed: when the switch statement is executed: – the expression is evaluated the expression is evaluated – if a case matches the value of the if a case matches the value of the
expression, the program jumps to the first expression, the program jumps to the first statement after that case label statement after that case label
– otherwise, the default case is selectedotherwise, the default case is selected– the default is optionalthe default is optional
תרגום ציוןתרגום ציון
switch (grade/10) { switch (grade/10) { case 10: case 10: case 9: case 9:
printf ("A\n"); printf ("A\n"); break; break;
case 8: case 8: printf ("B\n"); printf ("B\n"); break; break;
case 7: case 7: printf ("C\n"); printf ("C\n"); break; break;
case 6: case 6: printf ("D\n"); printf ("D\n"); break; break;
default: default: printf ("F\n"); printf ("F\n");
} }
BreakBreak
מזהה איפה להתחיל לפעול מזהה איפה להתחיל לפעול switchswitchכאשר ה כאשר ה • הוא "קופץ" לשם ומבצע את הכתוב. הוא "קופץ" לשם ומבצע את הכתוב.
הוא ממשיך לעשות כך עד שהוא פוגש במילה הוא ממשיך לעשות כך עד שהוא פוגש במילה •breakbreak.לראשונה. לראשונה
הוא קופץ להמשך הוא קופץ להמשך breakbreakברגע שפגש ב ברגע שפגש ב •- - switchswitchהתוכנית לאחר ההתוכנית לאחר ה
תרגילתרגיל
אם אם 100100 ל ל 11כתוב תוכנית המקבלת מספר בין כתוב תוכנית המקבלת מספר בין •קיים מטבע שמתאים למספר היא מדפיסה את קיים מטבע שמתאים למספר היא מדפיסה את
שמו אם לא היא מדפיסה שאין מטבע כזה. שמו אם לא היא מדפיסה שאין מטבע כזה. בדוק את תקינות הקלט!בדוק את תקינות הקלט!