Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים.

Similar presentations


Presentation on theme: "מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים."— Presentation transcript:

1 מבוא למדעי המחשב תרגול מספר 4

2 בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים

3 בפעם הקודמת... אופרטורים העלה והורדה (++, --) מה ההבדל במיקום? מצד ימין ומצד שמאל? דוגמא: int x=1,y=1; int z = x++ - --y; קיצורי דרך בכתיבה sizeof

4 בפעם הקודמת... המרת טיפוסים מכוונת אוטומטית הערך המומר נשמר בזיכרון רק במהלך חישוב הביטוי מה התוצאה של הביטוי הבא : (int)(4/5)+(double)(3/(float)(2.0)) היכן התבצעה המרה מכוונת והיכן אוטומטית?

5 בפעם הקודמת... הגדרת טיפוס חדש typedef - יצירת טיפוס חדש מטיפוס קיים (נתינת שם חדש לטיפוס קיים), לדוגמא - typedef long int lint; lint ID = 34814242; enum - יצירת קבוצה של אלמנטים enum Colors {White, Black, Purple=6, Brown=-4} col; col = Brown;

6 והרי התחזית... ביטויים משפטי תנאי if, if-else אופרטור :? switch

7 ביטויים בשפת C, לכל ביטוי יש ערך 0 נחשב false, כל ערך שאינו 0 נחשב true סוגי ביטויים: (רשימה חלקית) ביטויים אריתמטיים ביטויי השמה ביטויי יחס ושוויון ביטויים לוגיים

8 ביטויים אריתמטיים מורכבים מאופרטורים אריתמטיים: +, -, *, /, % דוגמאות: 2+3, x%4, y*(z-3) ערך הביטוי הוא תוצאת הפעולה

9 ביטויי השמה מורכבים מאופרטורי השמה: =, =+, =-, =*, =/, =%, ++, -- דוגמאות: x=3, y=x=8, z*=2, c=getchar(), i++, --j ערך הביטוי הוא ערך המשתנה שבאגף שמאל: אם האופרטור הוא ++ או -- שמופיע אחרי המשתנה (למשל: i++ או i--) אז ערך הביטוי הוא הערך של המשתנה לפני ההשמה בכל שאר המקרים, ערך הביטוי הוא הערך של המשתנה לאחר ההשמה

10 ביטויי יחס ושוויון מורכבים מאופרטורי יחס ושוויון: ==, =!, >,, =< דוגמאות: 3>2, 4==5, x!=2, y<=z ערך הביטוי הוא 1 אם השוויון (או אי השוויון) מתקיים, ו-0 אם הוא לא מתקיים למשל, ערך הביטוי 3>2 הוא תמיד 1. ערך הביטוי x==2 הוא 1 אם הערך של x שווה ל-2, ו-0 אחרת מהו ערך הביטוי 3<x<5? תשובה: תמיד 1! ביטוי שערכו 1 אם x גדול מ-3 וקטן מ-5: (x>3) && (x<5)

11 ביטויים לוגיים מורכבים מאופרטורים לוגיים: &&, ||, ! && פירושו and, || פירושו or, ! פירושו not טבלאות אמת: and && 0לא 0 000 01 or || 0לא 0 001 11 not ! 01 לא 00

12 ביטויים לוגיים דוגמאות: (x>3)||(y!=2), 3&&-2, 5||0, !(x&&(y||7)), !!5, ((c=getchar())!=EOF)&&(c>’0’) Short circuit evaluation: (a > b) || (func(c) > 4) אם a גדול מ-b, ערך הביטוי הוא בכל מקרה 1, ולכן ערכו של הביטוי (func(c) > 4) כלל לא יחושב, כלומר הפונקציה func כלל לא תיקרא! דוגמה נוספת: (x != 0) && (y == z/x)

13 משפט התנאי if התחביר של משפט תנאי if (exp) Command; exp הוא ביטוי הפקודה תתבצע אם ורק אם ערכו של exp שונה מ-0 תחביר מתוחכם יותר: if (exp) Command1; else Command2; אם ערכו של exp שונה מ-0, Command1 תתבצע. אחרת (ערכו של exp הוא 0), Command2 תתבצע.

14 משפט התנאי if בד"כ משתמשים ב-if עם ביטויי שוויון והשמה או עם ביטויים לוגיים, אך לא בהכרח ניתן, למשל, לכתוב if (1) או if (a+b) שימו לב: האופרטור = הוא אופרטור השמה, האופרטור == הוא אופרטור שוויון טעות נפוצה: לכתוב if (x = 3)... כשבעצם מתכוונים ל- if (x == 3)... מה המשמעות של if (x = 3)?

15 דוגמא לשימוש במשפט if-else #include int main(void) { int HW_grade, int Exam_grade; double Final_grade; printf(“Enter average HW grade : ”); scanf(“%d”,&HW_grade); printf(“Enter exam grade : ”); scanf(“%d”,&Exam_grade); if (Exam_grade >= 55) Final_grade = 0.9 * Exam_grade + 0.1 * HW_grade; else Final_grade = Exam_grade; return 0; }

16 משפטי if-else ביצוע "בלוק פקודות" (יותר מפקודה אחת) אם תנאי מסוים מתקיים if (x == 0) { x += 4; y = z + x; } else y = x * y; if (y < 5) { printf(“Hi”); x = 1; y = 4; z = 6; } if (x >= 60) { x += 4; y = z + x; } else { y = x * y; z = 60; }

17 משפטי if-else קינון משפטי :if לאיזה if שייך ה-else? תשובה: ל-if השני! כל else משויך למשפט הif- הקרוב ביותר אליו שאינו "סגור" ע"י else אחר if (x > 7) if (y > x) z = 4; else z = 9; if (x > 7) if (y > x) z = 4;

18 משפטי if-else כלומר, יותר נכון היה לכתוב את הדוגמא הקודמת כך: דוגמא נוספת: if (x > 7) if (y > x) z = 4; else z = 9; if ((c = getchar()) != EOF) if ((c>='a' && c ='A' && c<='Z')) printf("A letter\n"); else printf("Not a letter"\n); else printf("End Of File, bye! \n");

19 משפטי if-else ואם אנחנו רוצים משפט if מקונן, עם else שמתייחס ל-if הראשון, ובלי else שמתייחס ל- if השני? נשתמש בסוגריים מסולסלים: if (x > 7) { if (y > x) z = 4; } else z = 9;

20 אופרטור ?: שימו לב, זהו אופרטור ולא משפט! התחביר : exp1 ? exp2 : exp3 אם exp1 שונה מ-0 (כלומר true) אזי ערכו של כל הביטוי הוא exp2, אחרת - exp3 דוגמאות - max_XY = (x > y) ? x : y; (a==0) ? printf("Hello") : printf("Bye”);

21 משפט התנאי switch נניח שאנחנו רוצים לממש מחשבון, ויש לנו משתנה מטיפוס char, ששמו op, והוא מכיל תו שמתאר את הפעולה שצריך לבצע if (op == '+') statements... else if (op == '-') statements... else if (op == '*') statements... else if (op == '/') statements... else statements...

22 משפט התנאי switch שיטה נוחה יותר (במקום סדרת משפטי if) switch (op) { case '+': statements… break; case '-': statements… break; case '*': statements... break; case '/': statements… break; default: statements… }

23 switch משפט התנאי תחביר משפט switch: switch (exp) { case const_1: statements… break; case const_2: statements… break; … case const_k: statements… break; default: statements… }

24 משפט התנאי switch הערות: exp חייב להיות ביטוי מטיפוס שלם const_1,...,const_k הם קבועים מטיפוס שלם, שונים האחד מהשני, מספרם אינו מוגבל התוכנית מוצאת את הקבוע הראשון שערכו שווה לזה של exp, ומבצעת את הפקודות של ה-case שלו פקודת ה-break בסוף כל case אינה הכרחית. אם היא לא מופיעה, התוכנית תמשיך ל-case הבא. אם היא מופיעה, היא תגרום לתוכנית לצאת מה-switch ה-deafult אינו הכרחי. אם הוא מופיע ו-exp לא שווה לאף אחד מהביטויים שלפניו, התוכנית תבצע את הפקודות שלו

25 דוגמא מסכמת #include #define LEAF_YEAR 1 enum month {Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; typedef enum month month; int main(void) { month m; printf ("Enter a number of a month\n"); if (scanf("%d",&m) < 1) { printf("Input Error\n"); return 1; }

26 המשך הדוגמא switch (m) { case Jan: case Mar: case May: case Jul: case Aug: case Oct: case Dec: days = 31; break; case Apr: case Jun: case Sep: case Nov: days = 30; break; case Feb: days = (LEAF_YEAR) ? 29 : 28; break; default: days = -1; /* error */ }

27 המשך הדוגמא if (days == -1) printf("This is not a month!\n"); else printf("There are %d days in this month.\n”,days); return 0; }


Download ppt "מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים."

Similar presentations


Ads by Google