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 תרגיל כתוב תוכנית הקולטת מספר שלם ומחשבת את סכום ספרותיו

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

11 ביטויי יחס ושוויון מורכבים מאופרטורי יחס ושוויון: ==, =!, >,, =< דוגמאות: 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)

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

13 ביטויים לוגיים דוגמאות: (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)

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

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

16 דוגמא לשימוש במשפט 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; }

17 משפטי 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; }

18 משפטי 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;

19 משפטי 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");

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

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

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

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

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

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

26 תרגיל מסכם כתוב תוכנית המקבלת מהמשתמש מספר המסמל חודש, ומדפיסה כמה ימים יש באותו חודש השתמש ב enum switch

27 דוגמא מסכמת #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; }

28 המשך הדוגמא 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 */ }

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

30 שאלות חזרה כתבו תוכנית המדפיסה את טבלת ה ASCII כך שבכל שורה יודפסו בדיוק 7 תווים בפורמט הבא : Ascii #65=a, Ascii #66=b,...

31 שאלות חזרה כתבו תוכנית המקבלת סדרה של מספרים המסתיימת ב 0 ומודיעה האם הסדרה הנ"ל היא סדרה יורדת ממש

32 שאלות חזרה כתוב תוכנית הפותרת משוואה ריבועית, הקלט לתוכנית הוא A,B,C כאשר המשוואה היא מהצורה יש להדפיס את שני הפתרונות


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

Similar presentations


Ads by Google