Www.cs.tau.ac.il/courses/cs4math/09b מבוא כללי למדעי המחשב שיעור שלישי: בקרת זרימה.

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
כתיבת עבודת גמר מבנה העבודה  מבחינה צורנית - יש להקפיד על אחידות בכתיבה  כותרות אחידות  רווחים זהים, פונט בגודל אחיד (12, רווח וחצי)  הצגת.
מבוא למדעי המחשב תרגול 2 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב שיעור שני: שימוש במשתנים.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
1 מבוא למדעי המחשב תרגול מספר 2. 2 בשיעור הקודם... הגדרות שפת מחשב, שפה עילית, קומפיילר, תוכנית בשפת C, קובץ הרצה קובץ (טקסט) המכיל תוכנית בשפת C (hello.c)
מבוא כללי למדעי המחשב שיעור 4 מרצה: שי גוטנר. חזרה - משתנים מסוג char משתנים אלו מיצגים תווים. משתנים אלו מיצגים תווים. לכל תו יש קוד מספרי שמייצג אותו.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב תרגול מספר 3.
1 מבוא למדעי המחשב מושגי יסוד. 2 אלפבית תווים המותרים בשימוש בתכניות C: אותיות לטיניות קטנות : a,b,c, …,z אותיות לטיניות גדולות : A,B, C, …,Z ספרות :
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
1 מבוא למדעי המחשב ביטויים. 2 ביטויים expressions ביטויים (expressions) הינם יצורים תחביריים בעלי טיפוס וערך. הגדרה אינדוקטיבית של ביטויים : קבועים הם.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
שיעור שישי: מערכים ופונקציות
חלון הפקודות מיועד לבצע פעולה אחת בכל פעם. כיצד אפשר לבצע רשימת פקודות או אפליקציות מורכבות ?
מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מבוא למדעי המחשב מחרוזות, מצביעים וכתובות
מבני בקרה מבוא לתכנות למנע " ס - שבוע מספר 3 - מאיר קומר - סמסטר ב ' - תשס " ו הסתעפות “ אם השמאל ואימנה ואם הימין ואשמאילה ”
מנפה שגיאות - DEBUGGER מבוא למדעי המחשב (234114) רועי מלמד
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
תכנות תרגול 2 שבוע : צור קשר מתרגל – שי גוטנר, ביה " ס למדעי המחשב. מתרגל – שי גוטנר, ביה " ס למדעי המחשב. דואר אלקטרוני : דואר.
תכנות תרגול 3 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מבוא כללי למדעי המחשב שיעור רביעי: לולאות
מבוא למדעי המחשב תרגול מספר.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
יחס סדר חלקי.
תכנות תרגול 4 שבוע : לולאות for לולאות for for (counter=1 ;counter
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
תחשיב היחסים (הפרדיקטים)
תרגול 5: ביטויים לוגיים ומשפטי תנאי (חזרה והרחבה)
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מבוא לשפת C תרגול 4: ביטויים לוגיים ומשפטי תנאי מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב"
1 מבוא למדעי המחשב מושגי יסוד. 2 אלפבית תווים המותרים בשימוש בתכניות C: אותיות לטיניות קטנות : a,b,c, …,z אותיות לטיניות גדולות : A,B, C, …,Z ספרות :
תרגול 2: ייצוג מספרים - המשך
מבוא למדעי המחשב שפת c
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
מבוא למדעי המחשב תרגול מספר 4. בפעם הקודמת... מזהים טיפוסים טווח ייצוג קבועים.
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עוברים לג ' אווה.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב סיבוכיות.
אבני היסוד של תוכנית ב- JAVA
SQL בסיסי – הגדרה אינדוקטיבית
מבוא כללי למדעי המחשב פונקציות
מבוא כללי למדעי המחשב שיעור 2
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

מבוא כללי למדעי המחשב שיעור שלישי: בקרת זרימה

תזכורת: שימוש במשתנים מהו משתנה מהו משתנה הגדרת משתנים הגדרת משתנים טיפוס ושם, int, float, double, char. char c=‘a’; int i;. טיפוס ושם, int, float, double, char. char c=‘a’; int i;. קלט/פלט של משתנים קלט/פלט של משתנים printf,scanf. פורמטים: %d,%f, %g, %e, %c, %lf (for scanf). printf,scanf. פורמטים: %d,%f, %g, %e, %c, %lf (for scanf). printf(“%g”, average); scanf(“%d”, &hours); printf(“%g”, average); scanf(“%d”, &hours); פעולות על משתנים פעולות על משתנים השמה: c = a; b=5;. השמה: c = a; b=5;. פעולות חשבון: +, -, *, /, %. פעולות חשבון: +, -, *, /, %. תשומת-לב לדיוק וטווח. למשל 0=3/4. תשומת-לב לדיוק וטווח. למשל 0=3/4. להקפיד לא לחלק באפס (זה גורם לתוכנית לעוף). להקפיד לא לחלק באפס (זה גורם לתוכנית לעוף).

תזכורת: דוגמא להדפסת משתנים #include #include int main() { double a,b,c; a = 2.51; b = 2; c = a*b; printf(“%g * %g = %g\n", a,b,c); return 0; } הפלט: * 2 =

#include #include int main() { double cels, fahr; printf("Please enter a fahrenheit temperature:\n"); scanf("%lf",&fahr); cels = 5*(fahr-32)/9; printf("This is equal to %f degrees celsius\n", cels); return 0; } תזכורת: תוכנית לתרגום מפרנהייט לצלזיוס הגדרת המשתנים קליטת ערך למשתנה הדפסת התוצאה

charתזכורת: פירוט על הטיפוס charתזכורת: פירוט על הטיפוס גם char (תו) נשמר בזיכרון המחשב כמספר. גם char (תו) נשמר בזיכרון המחשב כמספר. יש לקומפיילר טבלה של 256 תווים אפשריים (טבלת ASCII). כדי לשמור תו, הוא שומר בזיכרון את המספר הסידורי של התו הזה בטבלה. יש לקומפיילר טבלה של 256 תווים אפשריים (טבלת ASCII). כדי לשמור תו, הוא שומר בזיכרון את המספר הסידורי של התו הזה בטבלה. כל תו נשמר בתא ("בית") בודד. כל תו נשמר בתא ("בית") בודד. למשל האותיות 'A’-’Z’ נמצאות לפי הסדר במקומות 65-90, למשל האותיות 'A’-’Z’ נמצאות לפי הסדר במקומות 65-90, האותיות 'a’-’z’ לפי הסדר במקומות , והספרות '0'-'9' לפי הסדר במקומות בטבלה. גם רווח ו- ‘\n’ הם תווים (במקומות 32 ו-10 בטבלה). האותיות 'a’-’z’ לפי הסדר במקומות , והספרות '0'-'9' לפי הסדר במקומות בטבלה. גם רווח ו- ‘\n’ הם תווים (במקומות 32 ו-10 בטבלה). char c=‘A’; מתורגם ע"י הקומפיילר ל- char c=65; char c=‘A’; מתורגם ע"י הקומפיילר ל- char c=65;

תזכורת: תווים מיוצגים כמספרים - דוגמא #include<stdio.h> int main() { char i = ‘A'; printf(“i as a character is: %c\n", i); printf("i as an integer is: %d\n", i); printf("The character after %c is: %c\n", i, i+1); return 0; } i as a character is: A i as an integer is: 65 The character after A is: B זה כמו char i=65; פורמט ההדפסה קובע אם להדפיס כתו או כמספר

שאלות נוספות על השיעור הקודם?

עוד על משתנים כמה נקודות לגבי scanf כמה נקודות לגבי scanf רישום מקוצר של פעולות חשבון רישום מקוצר של פעולות חשבון עוד על יצוג משתנים במחשב עוד על יצוג משתנים במחשב עוד על טיפוסי משתנים עוד על טיפוסי משתנים

scanf כמה נקודות נוספות לגבי מה שמופיע בין המרכאות ב - scanf הוא מה ש - scanf מצפה לקרוא. מה שמופיע בין המרכאות ב - scanf הוא מה ש - scanf מצפה לקרוא. אפשר למשל לרשום scanf(“%d,%d”); ואז המחשב יצפה לשני מספרים מופרדים ע"י פסיק. אפשר למשל לרשום scanf(“%d,%d”); ואז המחשב יצפה לשני מספרים מופרדים ע"י פסיק. כשקולטים מספרים, המחשב מצפה לרווח או ירידת שורה ביניהם ויודע לדלג על רווחים וירידות שורה ולקרוא את המספר הבא. כשקולטים תו, אם נקליד רווח התו שיקלט הוא תו הרווח. כשקולטים מספרים, המחשב מצפה לרווח או ירידת שורה ביניהם ויודע לדלג על רווחים וירידות שורה ולקרוא את המספר הבא. כשקולטים תו, אם נקליד רווח התו שיקלט הוא תו הרווח.

דוגמאות לקלט תקין scanf(“%d,%d”, &i,&j); 12, 34 scanf(“%d,%d”, &i,&j); 12, 34 scanf(“%d%d”, &i,&j); scanf(“%d%d”, &i,&j); scanf(“%c%c”, &tav1, &tav2); ab scanf(“%c%c”, &tav1, &tav2); ab

scanf עוד תכונה של אם מקלידים יותר קלט ממה שהפונקציה ציפתה לו, אז המשך הקלט יקרא ע"י פקודת ה- scanf הבאה. אם מקלידים יותר קלט ממה שהפונקציה ציפתה לו, אז המשך הקלט יקרא ע"י פקודת ה- scanf הבאה. scanf(“%d”, &i); scanf(“%d”, &i); scanf(“%d”, &j); scanf(“%d”, &j); לכן אם נקיש Enter בין שתי פקודות קלט של תווים, התו השני שיקרא הוא תו ירידת-השורה ('\n'). לכן אם נקיש Enter בין שתי פקודות קלט של תווים, התו השני שיקרא הוא תו ירידת-השורה ('\n'). scanf(“%c”, &tav1); a scanf(“%c”, &tav1); a scanf(“%c”, &tav2); scanf(“%c”, &tav2); עכשיו tav1 מכיל ‘a’ ו- tav2 מכיל ‘\n’ (לא נוכל להכניס תו נוסף). עכשיו tav1 מכיל ‘a’ ו- tav2 מכיל ‘\n’ (לא נוכל להכניס תו נוסף).

scanf עוד תכונה של אז אם רוצים לקלוט כמה תווים רצופים, אפשר לכתוב את הכל בשורה אחת ורק אחריה להקיש Enter: אז אם רוצים לקלוט כמה תווים רצופים, אפשר לכתוב את הכל בשורה אחת ורק אחריה להקיש Enter: scanf(“%c”, &tav1); ab scanf(“%c”, &tav1); ab scanf(“%c”, &tav2); scanf(“%c”, &tav2); או לחליפין לגרום ל-scanf לדלג על ירידת-השורה: או לחליפין לגרום ל-scanf לדלג על ירידת-השורה: scanf(“%c”, &tav1); a scanf(“%c”, &tav1); a scanf(“\n%c”, &tav2); b scanf(“\n%c”, &tav2); b עכשיו tav1 מכיל ‘a’ ו- tav2 מכיל ‘b’. עכשיו tav1 מכיל ‘a’ ו- tav2 מכיל ‘b’.

אפשרות נוספת לקלט/פלט של תווים יש שתי פונקציות נוספות לקלט/פלט של תווים שכדאי להכיר: getchar, putchar. יש שתי פונקציות נוספות לקלט/פלט של תווים שכדאי להכיר: getchar, putchar. עבור משתנה char c, השימוש בהן שקול לשימוש ב- printf ו-scanf. עבור משתנה char c, השימוש בהן שקול לשימוש ב- printf ו-scanf. putchar(c); שקול ל- printf(“%c”,c);. putchar(c); שקול ל- printf(“%c”,c);. c=getchar(); שקול ל- scanf(“%c”,&c);. c=getchar(); שקול ל- scanf(“%c”,&c);.

כתיבה מקוצרת של פעולות חשבון אם משנים ערך של משתנה ע"י פעולה על הערך הקודם שהיה בו אז אפשר לכתוב את זה בקיצור: אם משנים ערך של משתנה ע"י פעולה על הערך הקודם שהיה בו אז אפשר לכתוב את זה בקיצור: במקום: במקום:a=a+5; אפשר לכתוב: אפשר לכתוב: a+=5; a+=5; כך גם לגבי *, -, /, % לדוגמא: כך גם לגבי *, -, /, % לדוגמא: i*=2; b-=10; c%=5; d/=3;

כתיבה מקוצרת של פעולות הגדלת הערך של משתנה ב-1: במקום לרשום i=i+1; או i+=1; אפשר לרשום עוד יותר בקיצור: במקום לרשום i=i+1; או i+=1; אפשר לרשום עוד יותר בקיצור:i++;או:++i; ההבדל בין שתי האפשרויות: ההבדל בין שתי האפשרויות: בפעולה j=i++; קודם מתבצעת ההשמה ורק אחריה ההגדלה ב-1. אם לפני הפעולה i הכיל 5 אז בסופה i יכיל 6 ו- j יכיל 5.בפעולה j=i++; קודם מתבצעת ההשמה ורק אחריה ההגדלה ב-1. אם לפני הפעולה i הכיל 5 אז בסופה i יכיל 6 ו- j יכיל 5. בפעולה j=++i; קודם מתבצעת ההגדלה ב-1 ורק אחריה ההשמה. אם לפני הפעולה i הכיל 5 אז בסופה i ו- j יכילו 6.בפעולה j=++i; קודם מתבצעת ההגדלה ב-1 ורק אחריה ההשמה. אם לפני הפעולה i הכיל 5 אז בסופה i ו- j יכילו 6.

כתיבה מקוצרת של פעולות הקטנת ערך משתנה ב-1 יכולה להיעשות באופן דומה, על-ידי: הקטנת ערך משתנה ב-1 יכולה להיעשות באופן דומה, על-ידי:i--;או:--i;

קצת על יצוג ערכי משתנים במחשב ??? ???

קצת על יצוג מספרים במחשב מספרים מיוצגים במחשב ביצוג בינארי ("בסיס 2"), כלומר רק ע"י אפסים ואחדות (יש זרם/אין זרם). מספרים מיוצגים במחשב ביצוג בינארי ("בסיס 2"), כלומר רק ע"י אפסים ואחדות (יש זרם/אין זרם). היצוג הרגיל של מספרים הוא בבסיס 10 (ספרות 0-9). היצוג הרגיל של מספרים הוא בבסיס 10 (ספרות 0-9). במספר בסיס 10, הספרה הימנית ביותר מייצגת אחדות, הסיפרה הבאה מייצגת עשרות, הספרה הבאה מאות, וכן הלאה. למשל: במספר בסיס 10, הספרה הימנית ביותר מייצגת אחדות, הסיפרה הבאה מייצגת עשרות, הספרה הבאה מאות, וכן הלאה. למשל: בבסיס 2 יש רק שתי ספרות: 0 ו-1. הספרה הכי ימנית מייצגת אחדות, הספרה הבאה מייצגת כפולות של 2, הספרה הבאה כפולות של 4, וכן הלאה. למשל: בבסיס 2 יש רק שתי ספרות: 0 ו-1. הספרה הכי ימנית מייצגת אחדות, הספרה הבאה מייצגת כפולות של 2, הספרה הבאה כפולות של 4, וכן הלאה. למשל:

יצוג בינארי - דוגמאות המספר 0 בבסיס 2 הוא 0 בבסיס 10. המספר 0 בבסיס 2 הוא 0 בבסיס 10. המספר 1 בבסיס 2 הוא 1 בבסיס 10. המספר 1 בבסיס 2 הוא 1 בבסיס 10. המספר 10 בבסיס 2 הוא 2 בבסיס 10: המספר 10 בבסיס 2 הוא 2 בבסיס 10: 0*1+1*2=2 המספר 11 בבסיס 2 הוא 3 בבסיס 10: המספר 11 בבסיס 2 הוא 3 בבסיס 10: 1*1+1*2=3 המספר 111 בבסיס 2 הוא 7 בבסיס 10: המספר 111 בבסיס 2 הוא 7 בבסיס 10: 1*1+1*2+1*4=7

יצוג מספרים במחשב – יצוג בינארי ספרה בינארית בודדת (0 או 1) נקראת גם "ביט". ספרה בינארית בודדת (0 או 1) נקראת גם "ביט". שמיניית ביטים נקראת גם "בייט" או "בית". שמיניית ביטים נקראת גם "בייט" או "בית". בבית אחד אפשר לייצג ערכים בין 0 ל בבית אחד אפשר לייצג ערכים בין 0 ל משתנה מסוג char תופס בית אחד בזיכרון. משתנה מסוג char תופס בית אחד בזיכרון. int ו- float משתמשים ברוב הקומפיילרים והמחשבים ב-4 בתים. int ו- float משתמשים ברוב הקומפיילרים והמחשבים ב-4 בתים. double משתמש ברוב הקומפיילרים והמחשבים ב-8 בתים. double משתמש ברוב הקומפיילרים והמחשבים ב-8 בתים.

עוד על יצוג בינארי הסימן של מספר (שלילי/חיובי) נקבע ע"י הביט הראשון במקום שהוקצה לו בזיכרון (1 – שלילי, 0 - חיובי). הסימן של מספר (שלילי/חיובי) נקבע ע"י הביט הראשון במקום שהוקצה לו בזיכרון (1 – שלילי, 0 - חיובי). עבור שלמים זה באמצעות שיטת "משלים ל-2", שלא נפרט לגביה.עבור שלמים זה באמצעות שיטת "משלים ל-2", שלא נפרט לגביה. מספר ממשי מיוצג למעשה ע"י שני מספרים שלמים: מספר אחד מורכב מהספרות הראשונות שלו שאינן אפס, והמספר השני הוא המיקום שלהן אחרי/לפני הנקודה. מספר ממשי מיוצג למעשה ע"י שני מספרים שלמים: מספר אחד מורכב מהספרות הראשונות שלו שאינן אפס, והמספר השני הוא המיקום שלהן אחרי/לפני הנקודה. כששומרים בזיכרון תו, למעשה נשמר מספר בין 0 ל-255 שמייצג אותו. כששומרים בזיכרון תו, למעשה נשמר מספר בין 0 ל-255 שמייצג אותו.

משתנים ללא סימן אם משתנה שלם ישמש בודאות למספרים חיוביים בלבד, ניתן לרשום לפני ההגדרה שלו unsigned. אם משתנה שלם ישמש בודאות למספרים חיוביים בלבד, ניתן לרשום לפני ההגדרה שלו unsigned. זה מגדיל את הטווח האפשרי שלו פי 2. זה מגדיל את הטווח האפשרי שלו פי 2. unsigned int i= ; unsigned int i= ; ההדפסה נעשית עם %u. כשעובדים עם משתנה ללא סימן יש להקפיד כמובן להכניס לתוכו רק ערכים חיוביים. כשעובדים עם משתנה ללא סימן יש להקפיד כמובן להכניס לתוכו רק ערכים חיוביים.

כמה טיפוסים בסיסיים נוספים long – מספר שלם, בחלק מהקומפיילרים והמחשבים הטווח שלו גדול יותר מ- int. long – מספר שלם, בחלק מהקומפיילרים והמחשבים הטווח שלו גדול יותר מ- int. short – מספר שלם. ברוב הקומפיילרים והמחשבים הטווח שלו קטן יותר מ-int, בדרך-כלל בין לבין מאפשר לחסוך זיכרון כשעובדים עם מספרים קטנים. short – מספר שלם. ברוב הקומפיילרים והמחשבים הטווח שלו קטן יותר מ-int, בדרך-כלל בין לבין מאפשר לחסוך זיכרון כשעובדים עם מספרים קטנים. long double – מספר ממשי עם דיוק וטווח גדולים יותר (בתלות במחשב ובקומפיילר). long double – מספר ממשי עם דיוק וטווח גדולים יותר (בתלות במחשב ובקומפיילר). השימוש בטיפוסים אלה פחות נפוץ. השימוש בטיפוסים אלה פחות נפוץ.

משתנים קבועים לפעמים נירצה לשים במשתנה ערך קבוע (למשל פאי) שלא ישתנה במהלך התוכנית. לפעמים נירצה לשים במשתנה ערך קבוע (למשל פאי) שלא ישתנה במהלך התוכנית. נירצה לעשות זאת פשוט כדי להקל על הכתיבה: במקום לרשום כל פעם את הערך המספרי נוכל לרשום את שם המשתנה. נירצה לעשות זאת פשוט כדי להקל על הכתיבה: במקום לרשום כל פעם את הערך המספרי נוכל לרשום את שם המשתנה. במקרה כזה כדאי לציין שהערך לא יכול להשתנות ע"י המילה const. למשל: במקרה כזה כדאי לציין שהערך לא יכול להשתנות ע"י המילה const. למשל: const double pi= ; זה מונע מאיתנו לשנות את הערך בטעות (בתוכנית מורכבת עשויים להיות הרבה קבועים מוזרים). זה מונע מאיתנו לשנות את הערך בטעות (בתוכנית מורכבת עשויים להיות הרבה קבועים מוזרים).

בקרת זרימה

מה זאת בקרת זרימה? באופן רגיל התוכנית מתבצעת שורה-אחרי-שורה לפי הסדר ("זרימה רגילה"). באופן רגיל התוכנית מתבצעת שורה-אחרי-שורה לפי הסדר ("זרימה רגילה"). במקרים רבים, נירצה שהפקודות שיבוצעו יקבעו לפי הקלט שהתוכנית קיבלה (וחישובים שהיא ביצעה), בשונה מהביצוע הסדרתי הרגיל. במקרים רבים, נירצה שהפקודות שיבוצעו יקבעו לפי הקלט שהתוכנית קיבלה (וחישובים שהיא ביצעה), בשונה מהביצוע הסדרתי הרגיל. למשל, נירצה לטפל בצורה שונה בקלט שגוי. למשל, נירצה לטפל בצורה שונה בקלט שגוי. לשם כך יש פקודות שמאפשרות לקבוע מה יבוצע בהתאם לתנאים שנבחר. לשם כך יש פקודות שמאפשרות לקבוע מה יבוצע בהתאם לתנאים שנבחר.

בקרת זרימה – נושאים משפטי if-else. משפטי if-else. תנאים אפשריים. תנאים אפשריים. שילוב של תנאים. שילוב של תנאים. משפטי switch. משפטי switch.

if משפט מאפשר לבצע פקודה (או קבוצה של פקודות) בתלות בקיום של תנאי מסויים. מאפשר לבצע פקודה (או קבוצה של פקודות) בתלות בקיום של תנאי מסויים. המבנה: המבנה: if ( תנאי ) פקודה ; למשל: למשל: if (i % 2 == 0) printf (“i is even”); printf (“i is even”);

בקרת זרימה - דוגמא הדפסת המספר המקסימלי מבין שני מספרים שנקלטים #include #include int main() { int a, b, max; scanf(“%d%d”, &a, &b); max = a; if (max < b) max = b; printf(“The maximum is %d\n”, max); return 0; } max < bהפקודה הבאה מתבצעת רק אם

איזה תנאים אפשר לבטא == בודק שיוויון (הסימן = כבר משמש להשמה) יש פעולות השוואה רגילות:, =. =! בודק שוני (ההיפך משיוויון). למשל: if (a!=b) printf(“You entered the wrong number\n”); printf(“You entered the wrong number\n”);

- המשךif משפט - המשךif משפט אפשר גם להתנות ביצוע של קבוצת פקודות, על- ידי כתיבתן בתוך סוגריים מסולסלים ("בלוק"): אפשר גם להתנות ביצוע של קבוצת פקודות, על- ידי כתיבתן בתוך סוגריים מסולסלים ("בלוק"): if ((תנאי {פקודות}

if-else משפט אחרי משפט if ניתן לציין גם פקודה (או קבוצת פקודות) שתתבצע במקרה שהתנאי לא מתקיים. המבנה: אחרי משפט if ניתן לציין גם פקודה (או קבוצת פקודות) שתתבצע במקרה שהתנאי לא מתקיים. המבנה: if (תנאי) פקודה ; else פקודה; else פקודה; if (i % 2 == 0) printf (“i is even”); למשל: else printf(“i is odd”);

if-else משפט שוב, עבור קבוצה של פקודות, נשתמש בסוגריים מסולסלים. שוב, עבור קבוצה של פקודות, נשתמש בסוגריים מסולסלים.else{פקודות}

דוגמא: בדיקה אם מספר הוא זוגי # include int main() { int num; printf(“Enter an integer for checking parity\n”); scanf(“%d”, &num); if (num %2 == 0) printf(“This number is even\n”); else printf(“This number is odd\n”); return 0; }

תנאים אפשריים: שילוב של תנאים לפעמים נירצה לבדוק תנאי מורכב יותר, למשל ציון צריך להיות לפחות 0 וגם לכל היותר 100. לפעמים נירצה לבדוק תנאי מורכב יותר, למשל ציון צריך להיות לפחות 0 וגם לכל היותר 100. כדי לבדוק אם הערך שנמצא במשתנה grade הוא ציון חוקי אפשר לרשום שני if-ים "מקוננים": כדי לבדוק אם הערך שנמצא במשתנה grade הוא ציון חוקי אפשר לרשום שני if-ים "מקוננים": if (grade >= 0) if (grade <= 100) if (grade <= 100) printf(“The grade is in the right range\n”);

שילוב תנאים - פעולות לוגיות בהרבה מקרים נוח להשתמש בפעולות לוגיות, שיכולות לשלב שני תנאים. יש 3 פעולות לוגיות: AND, OR, NOT. בהרבה מקרים נוח להשתמש בפעולות לוגיות, שיכולות לשלב שני תנאים. יש 3 פעולות לוגיות: AND, OR, NOT. && - AND (וגם) – דורש ששני התנאים יתקיימו. && - AND (וגם) – דורש ששני התנאים יתקיימו. למשל אפשר לרשום: if ((grade >= 0) && (grade = 0) && (grade <= 100))במקום: if (grade >= 0) if (grade >= 0) if (grade <= 100) if (grade <= 100)

פעולות לוגיות - דוגמא #include #include int main() int main() { double exam, exercises, final; printf(“Enter your exam grade and exercises grade”); scanf(“%lf %lf”, &exam, &exercises); if ((exam >= 60) && (exercises >= 60)) { final = 0.9 * exam * exercises; final = 0.9 * exam * exercises; printf(“You passed – your grade is %g \n”, final); printf(“You passed – your grade is %g \n”, final);}else{ final = exam; final = exam; printf(“You failed – your grade is %g \n”, final); printf(“You failed – your grade is %g \n”, final);} return 0; } מניחים כאן שהקלט תקין. בדרך-כלל דווקא נירצה לבדוק את תקינות הקלט ולפעול אחרת אם הקלט לא תקין (למשל לתת הודעה למשתמש ולסיים). תוכנית לחישוב ציון סופי בקורס

שילוב תנאים - פעולות לוגיות נוספות || - OR (או) - דורש שלפחות אחד התנאים יתקיים. || - OR (או) - דורש שלפחות אחד התנאים יתקיים. למשל, התנאי הבא יתקיים תמיד: if ((a>0) || (a 0) || (a<=0)) ! - NOT (שלילה) - דורש שהתנאי לא יתקיים. ! - NOT (שלילה) - דורש שהתנאי לא יתקיים. למשל, התנאי הבא יתקיים תמיד: if (! (a != a)) סדר הקדימות הוא: NOT, AND, OR (NOT יבוצע ראשון). סדר הקדימות הוא: NOT, AND, OR (NOT יבוצע ראשון).

תנאים כמספרים למעשה כשרושמים תנאי המחשב מתרגם אותו לערך מספרי, בהתאם לנכונותו. לא נכון: 0. נכון: מספר שונה מ- 0. למעשה כשרושמים תנאי המחשב מתרגם אותו לערך מספרי, בהתאם לנכונותו. לא נכון: 0. נכון: מספר שונה מ- 0. למשל (4<3) מתורגם לערך 0. למשל (4<3) מתורגם לערך 0. במקום לרשום תנאי אפשר לרשום ביטוי שיש לו ערך מספרי. במקום לרשום תנאי אפשר לרשום ביטוי שיש לו ערך מספרי. אם הערך הוא 0 אז זה נחשב שהתנאי לא מתקיים (false), וכל ערך אחר נחשב לתנאי שמתקיים (true). אם הערך הוא 0 אז זה נחשב שהתנאי לא מתקיים (false), וכל ערך אחר נחשב לתנאי שמתקיים (true). למשל, המשמעות של if(0) היא שהפקודה לא תבוצע. המשמעות של if(1) היא שהפקודה תבוצע. למשל, המשמעות של if(0) היא שהפקודה לא תבוצע. המשמעות של if(1) היא שהפקודה תבוצע.

תנאים - המשך מה המשמעות של if (a) ? מה המשמעות של if (a) ? if (a!=0) בדיוק כמו כשרושמים פקודת השמה, מתקבל ערך ששווה לערך כשרושמים פקודת השמה, מתקבל ערך ששווה לערך ששמנו במשתנה. לכן הערך של (a=5) הוא 5. ששמנו במשתנה. לכן הערך של (a=5) הוא 5. לכן צריך להיזהר ולא לרשום = במקום == לכן צריך להיזהר ולא לרשום = במקום == אז מבחינת המחשב רשמנו תנאי שתמיד מתקיים מה המשמעות של if (a=5) ? מה המשמעות של if (a=5) ?

פעולות לוגיות – עוד על סדר הביצוע הפעולות האריתמטיות (+, -, *, /, %) מבוצעות תמיד לפני פעולות ההשוואה (==, > וכו') שמבוצעות לפני הפעולות הלוגיות && ו- ||. הפעולות האריתמטיות (+, -, *, /, %) מבוצעות תמיד לפני פעולות ההשוואה (==, > וכו') שמבוצעות לפני הפעולות הלוגיות && ו- ||. ל- ! (NOT) יש את הקדימות הגבוהה ביותר (עוד לפני פעולות אריתמטיות). ל- ! (NOT) יש את הקדימות הגבוהה ביותר (עוד לפני פעולות אריתמטיות). דוגמאות שתוצאתן היא "נכון": דוגמאות שתוצאתן היא "נכון": (5+4>8) (5+4>8) (!1 >= 0||1) (!1 >= 0||1) 0 >= 0 || 11 || 11 (כאמור, המחשב מתייחס למספר 1 כאל "תנאי נכון" ולמספר 0 כאל "תנאי לא נכון", וכך אפשר לבצע פעולות לוגיות גם על מספרים במקום על תנאים)

בחירה בין יותר משני מצבים כשיש בחירה בין מצבים רבים אפשר לרשום: כשיש בחירה בין מצבים רבים אפשר לרשום: if (תנאי) פקודה else if (תנאי) פקודה פקודה else if (תנאי) else if (תנאי) פקודה פקודה else else פקודה פקודה (ובמקום פקודה יכול להיות כמובן בלוק של פקודות)

בחירה בין יותר משני מצבים ה-else –ים מתייחסים ל- if-ים לפי סדר קירבה (מה- elseאחורה). למשל: ה-else –ים מתייחסים ל- if-ים לפי סדר קירבה (מה- elseאחורה). למשל: if (תנאי) פקודה else if (תנאי) if (תנאי) if (תנאי) פקודה פקודה else else פקודה פקודה else else פקודה פקודה הריווח עוזר לקריאות

בחירה בין יותר משני מצבים - דוגמא if (grade >= 90) printf(“A\n”);else if (grade >= 80) printf(“B\n”);else if (grade >= 70) printf(“C\n”);elseprintf(“Failed\n”); תרגום לציון אמריקאי

SWITCH בחירה בין יותר משני מצבים - אם התנאים הם השוואה לערכים קבועים מסויימים, אפשר להשתמש בפקודה נוחה יותר, במקום הרבה if-else-ים. אם התנאים הם השוואה לערכים קבועים מסויימים, אפשר להשתמש בפקודה נוחה יותר, במקום הרבה if-else-ים. בשקף הבא נדגים שימוש בפקודת switch, ולאחר מכן נתאר את חלקיה השונים. בשקף הבא נדגים שימוש בפקודת switch, ולאחר מכן נתאר את חלקיה השונים.

- דוגמאswitch - דוגמאswitch char grade; scanf(“%c”, &grade); switch (grade) { case ‘A’: printf(“90 – 100\n”); break; case ‘B’: printf(“80 – 89\n”); break; case ‘C’: printf(“70 -79\n”); break;default:printf(“Failed\n”);} מה עושה קטע התוכנית הזה? מתרגם ציון אמריקאי לטווח מספרים

- דוגמא: תרגום ציון אמריקאיswitch - דוגמא: תרגום ציון אמריקאיswitch char grade; scanf(“%c”, &grade); switch (grade) { case ‘A’: printf(“90 – 100\n”); break; case ‘B’: printf(“80 – 89\n”); break; case ‘C’: printf(“70 -79\n”); break;default:printf(“Failed\n”);} הביטוי שערכו נבדק – הוא יכול להיות כל ביטוי מטיפוס בדיד (תו או מספר שלם).

- דוגמא: תרגום ציון אמריקאיswitch - דוגמא: תרגום ציון אמריקאיswitch char grade; scanf(“%c”, &grade); switch (grade) { case ‘A’: printf(“90 – 100\n”); break; case ‘B’: printf(“80 – 89\n”); break; case ‘C’: printf(“70 -79\n”); break;default:printf(“Failed\n”);} הביטוי שערכו נבדק – הוא יכול להיות כל ביטוי מטיפוס בדיד (תו או מספר שלם). הבדיקה היא אם הביטוי הנ"ל שווה לאחד מהקבועים הרשומים (לפי הסדר)

- דוגמא: תרגום ציון אמריקאיswitch - דוגמא: תרגום ציון אמריקאיswitch char grade; scanf(“%c”, &grade); switch (grade) { case ‘A’: printf(“90 – 100\n”); break; case ‘B’: printf(“80 – 89\n”); break; case ‘C’: printf(“70 -79\n”); break;default:printf(“Failed\n”);} הביטוי שערכו נבדק – הוא יכול להיות כל ביטוי מטיפוס בדיד (תו או מספר שלם). הבדיקה היא אם הביטוי הנ"ל שווה לאחד מהקבועים הרשומים (לפי הסדר) אם נמצא שוויון, כל הפקודות משם והלאה מבוצעות (אפשריים גם בלוקים של פקודות)

- דוגמא: תרגום ציון אמריקאיswitch - דוגמא: תרגום ציון אמריקאיswitch char grade; scanf(“%c”, &grade); switch (grade) { case ‘A’: printf(“90 – 100\n”); break; case ‘B’: printf(“80 – 89\n”); break; case ‘C’: printf(“70 -79\n”); break;default:printf(“Failed\n”);} הביטוי שערכו נבדק – הוא יכול להיות כל ביטוי מטיפוס בדיד (תו או מספר שלם). הבדיקה היא אם הביטוי הנ"ל שווה לאחד מהקבועים הרשומים (לפי הסדר) אם נמצא שוויון, כל הפקודות משם והלאה מבוצעות (אפשריים גם בלוקים של פקודות) הפקודה הזו אומרת לא לבצע את הפקודות שמופיעות במקרים הבאים

- דוגמא: תרגום ציון אמריקאיswitch - דוגמא: תרגום ציון אמריקאיswitch char grade; scanf(“%c”, &grade); switch (grade) { case ‘A’: printf(“90 – 100\n”); break; case ‘B’: printf(“80 – 89\n”); break; case ‘C’: printf(“70 -79\n”); break;default:printf(“Failed\n”);} הביטוי שערכו נבדק – הוא יכול להיות כל ביטוי מטיפוס בדיד (תו או מספר שלם). הבדיקה היא אם הביטוי הנ"ל שווה לאחד מהקבועים הרשומים (לפי הסדר) אם נמצא שוויון, כל הפקודות משם והלאה מבוצעות (אפשריים גם בלוקים של פקודות) הפקודה הזו אומרת לא לבצע את הפקודות שמופיעות במקרים הבאים מבוצע אם לא נמצאה אף התאמה (זה חלק אופציונלי – לא חייבים לתת ברירת מחדל)

switch מבנה כללי של switch (ביטוי בדיד) { case קבוע1: פקודה או פקודות פקודה או פקודות break; (אופציונלי) case קבוע2 : פקודה או פקודות break; (אופציונלי) ….. default: (אופציונלי) פקודה או פקודות } בדיד – תוצאתו היא מס' שלם או תו

switch מבנה כללי של לא נשתמש ב- break כשנירצה לעשות אותו דבר בכמה מקרים. לדוגמא: לא נשתמש ב- break כשנירצה לעשות אותו דבר בכמה מקרים. לדוגמא: switch (tav) { case ‘0’: case ‘1’: case ‘2’: case ‘3’: case ‘4’: case ‘5’: case ‘6’: case ‘7’: case ‘8’: case ‘9’: printf(“It’s a digit\n”); printf(“It’s a digit\n”); break; break;default: printf(“It’s not a digit\n”); printf(“It’s not a digit\n”);} השורה תבוצע אם התו הוא סיפרה בכל מיקרה אחר

נקודה לתשומת לב כיוון ש- if, else, switch, case, default, ו- break הן פקודות C, לא ניתן להשתמש בהן כשמות של משתנים. כיוון ש- if, else, switch, case, default, ו- break הן פקודות C, לא ניתן להשתמש בהן כשמות של משתנים. מילים כאלה נקראות מילים שמורות, ונפגוש עוד כאלה בעתיד (שמות של פקודות שנילמד לא יוכלו לשמש כשמות של משתנים). מילים כאלה נקראות מילים שמורות, ונפגוש עוד כאלה בעתיד (שמות של פקודות שנילמד לא יוכלו לשמש כשמות של משתנים).

סיכום דיברנו היום על: מהי בקרת זרימה משפטי if-else תנאים לוגיים פעולות לוגיות פקודת switch