Download presentation
Presentation is loading. Please wait.
1
www.cs.tau.ac.il/courses/cs4math/09b מבוא כללי למדעי המחשב שיעור שני: שימוש במשתנים
2
תזכורת - נושאי השבוע הראשון הכרת המחשב הכרת המחשב התקני קלט/פלט, זיכרון, מעבד, חומרה ותוכנה. התקני קלט/פלט, זיכרון, מעבד, חומרה ותוכנה. מבוא לשפות תכנות מבוא לשפות תכנות שפת מכונה, אסמבלי, שפות עיליות, קומפילציה. שפת מכונה, אסמבלי, שפות עיליות, קומפילציה. מבוא לשפת C מבוא לשפת C יתרונות וחסרונות, מבנה בסיסי של תוכנית, דוגמאות. יתרונות וחסרונות, מבנה בסיסי של תוכנית, דוגמאות.
3
תזכורת: תוכנית ראשונה בשפת C #include int main() { printf(“Hello World\n”); return 0; } מאפשר שימוש בפעולות קלט/פלט מתוך stdio.h שורה קבועה, שמשמעותה העברת הערך 0 למערכת ההפעלה (מסמן סיום תקין) מדפיס Hello World ועובר לשורה הבאה שורה קבועה שבה מתחיל ביצוע התוכנית
4
תזכורת: דוגמא לחישוב מספר השניות ביממה #include int main() { int seconds, hours, minutes; hours = 24; minutes = 60; seconds = hours * minutes * 60 ; printf(“Number of seconds is %d\n”, seconds); return 0; } הגדרת משתנים בזיכרון השמת ערכים בתוכם חישוב מכפלה הדפסת התוצאה Number of seconds is 86400
5
תוכנית שנייה - זיכרון minuteshours 24 תמונת הזיכרון לאחר ; seconds = hours * minutes * 60 6086400 seconds
6
נושאי השיעור היום מה זה משתנה מה זה משתנה הגדרת משתנים והשמת ערכים לתוכם הגדרת משתנים והשמת ערכים לתוכם סוגי משתנים בשפת C סוגי משתנים בשפת C קריאה והדפסה של ערכי משתנים (קלט/פלט) קריאה והדפסה של ערכי משתנים (קלט/פלט) פעולות שניתן לבצע על משתנים פעולות שניתן לבצע על משתנים
7
שימוש במשתנים בתכנות בתוכניות מחשב רבות נירצה לבצע חישובים ולעבד נתונים. בתוכניות מחשב רבות נירצה לבצע חישובים ולעבד נתונים. ברוב המקרים הנתונים האלה מתקבלים כקלט מהמשתמש או מחושבים בתחילת התוכנית, והמחשב צריך להמשיך לזכור אותם בהמשך התוכנית. ברוב המקרים הנתונים האלה מתקבלים כקלט מהמשתמש או מחושבים בתחילת התוכנית, והמחשב צריך להמשיך לזכור אותם בהמשך התוכנית. לצורך זה צריך להגדיר לנתונים כאלה מקום בזיכרון, ולתת להם שם, כך שנוכל להתייחס אליהם בהמשך. לצורך זה צריך להגדיר לנתונים כאלה מקום בזיכרון, ולתת להם שם, כך שנוכל להתייחס אליהם בהמשך. נצטרך גם לציין את סוג הנתון שנשמור (למשל מס' שלם/מס' ממשי/אות) כי לכל סוג דרוש שטח זיכרון שונה. נצטרך גם לציין את סוג הנתון שנשמור (למשל מס' שלם/מס' ממשי/אות) כי לכל סוג דרוש שטח זיכרון שונה.
8
מה זה משתנה? מקום בזיכרון שקיבל שם, ואפשר לאחסן בו ערכים מסוג מסויים (אותיות/שלמים/ממשיים) ולקרוא ממנו את הערך שמאוחסן בו. מקום בזיכרון שקיבל שם, ואפשר לאחסן בו ערכים מסוג מסויים (אותיות/שלמים/ממשיים) ולקרוא ממנו את הערך שמאוחסן בו. כדי להשתמש במשתנה, קודם נגדיר אותו, כלומר נציין את שמו ואת סוג הערכים שהוא יאחסן. כדי להשתמש במשתנה, קודם נגדיר אותו, כלומר נציין את שמו ואת סוג הערכים שהוא יאחסן. - משתנים הם האמצעי לטיפול בנתונים בתוכנית.
9
הגדרת משתנים הגדרת משתנה כוללת את טיפוס המשתנה ואת שמו. (אפשר גם לציין מאפיינים נוספים שנכיר בהמשך). הגדרת משתנה כוללת את טיפוס המשתנה ואת שמו. (אפשר גם לציין מאפיינים נוספים שנכיר בהמשך). הגדרות המשתנים מופיעות מייד אחרי פתיחת סוגריים מסולסלים }, ולפני שאר הפקודות (יכולות להופיע הגדרות של הרבה משתנים). הגדרות המשתנים מופיעות מייד אחרי פתיחת סוגריים מסולסלים }, ולפני שאר הפקודות (יכולות להופיע הגדרות של הרבה משתנים). כשמגדירים משתנה הערך שנמצא בו אינו מוגדר עדיין, וצריך לשים בו ערך כדי להשתמש בו. כשמגדירים משתנה הערך שנמצא בו אינו מוגדר עדיין, וצריך לשים בו ערך כדי להשתמש בו. אפשר לבצע השמת ערך התחלתי כבר בשורת ההגדרה (ניראה דוגמא). אפשר לבצע השמת ערך התחלתי כבר בשורת ההגדרה (ניראה דוגמא).
10
בדוגמא מהשבוע שעבר: #include int main() { int seconds, hours, minutes; hours = 24; minutes = 60; seconds = hours * minutes * 60 ; printf(“Number of seconds is %d\n”, seconds); return 0; } הגדרת שמות המשתנים וסוגם השמת ערכים במשתנים ופעולות עליהם
11
תוכנית חישוב השניות ביממה - זיכרון secondsminuteshours תמונת הזיכרון לאחר הגדרת המשתנים עם ערך התחלתי 2460
12
הגדרת משתנים: טיפוסים בסיסיים int – מספר שלם (הטווח האפשרי הוא בין 2 31 - לבין 2 31 ). int – מספר שלם (הטווח האפשרי הוא בין 2 31 - לבין 2 31 ). float – מספר ממשי (הטווח הוא בערך עד 10 38 ±, השבר הכי קטן שניתן לייצג הוא בערך 38- 10±). דיוק של 6 ספרות. float – מספר ממשי (הטווח הוא בערך עד 10 38 ±, השבר הכי קטן שניתן לייצג הוא בערך 38- 10±). דיוק של 6 ספרות. double - מספר ממשי (משתמש במקום כפול בזיכרון). הטווח הוא בערך עד 308 10±. השבר הכי קטן שניתן לייצג הוא בערך 308- 10. דיוק של 15 ספרות. double - מספר ממשי (משתמש במקום כפול בזיכרון). הטווח הוא בערך עד 308 10±. השבר הכי קטן שניתן לייצג הוא בערך 308- 10. דיוק של 15 ספרות. char – תו בודד (כל סימן שיש במחשב, למשל ‘a’ או '?'). char – תו בודד (כל סימן שיש במחשב, למשל ‘a’ או '?'). - יתכנו הבדלים בטווחים בין סוגי מחשבים וקומפיילרים.
13
דוגמאות להגדרות משתנים char c; int i; float the_max_percent; double average; הגדרה עם השמת ערך התחלתי: char c=‘A’; int sum=0; התו ‘A' מוכנס למשתנה בשם c ‘A’ c
14
הגדרת משתנים: שמות מותרים שם משתנה יכול לכלול אותיות אנגליות, ספרות, וקו תחתון. שם משתנה יכול לכלול אותיות אנגליות, ספרות, וקו תחתון. התו הראשון בשם לא יכול להיות סיפרה. התו הראשון בשם לא יכול להיות סיפרה. יש הבדל בין אות גדולה לאות קטנה (case-sensitive). כלומר a ו- A הם שמות שונים. יש הבדל בין אות גדולה לאות קטנה (case-sensitive). כלומר a ו- A הם שמות שונים. Counter, new_sum, total1. Counter, new_sum, total1. percent%, 2counter, new-sum. percent%, 2counter, new-sum. הערה: כדאי מאוד לתת למשתנים שמות בעלי משמעות. הערה: כדאי מאוד לתת למשתנים שמות בעלי משמעות. מותר: אסור:
15
למה זה טוב שיש טיפוסי משתנים? טיפוסים מסוימים דורשים פחות מקום בזיכרון מאחרים, ולכן חבל לבזבז מקום. המחשב יטפל אחרת בטיפוסי משתנים שונים. למשל ידיעת הטיפוס מאפשרת ביצוע פעולות מהיר יותר (לדוגמא כפל שלמים מבוצע מהר יותר מכפל ממשיים). עוזר לנו ולקומפיילר לאתר שגיאות בתוכנית. - נציין שהכל מיוצג בזיכרון כרצף של אפסים ואחדות, ללא ציון הטיפוס או מקום ההתחלה של המשתנה. - הקומפיילר דואג שהתוכנית תתייחס לאפסים ולאחדות האלה בהתאם למשתנה שהוגדר.
16
פלט (הדפסה) של ערכי משתנים הכרנו את הפונקציה printf שמאפשרת הדפסה של ערך המשתנה למסך. למשל: הכרנו את הפונקציה printf שמאפשרת הדפסה של ערך המשתנה למסך. למשל: ; printf(“The sum is %d”, sum) ; printf(“The sum is %d”, sum) הצירוף %d מציין שכאן יודפס תוכן של משתנה, ומתאים לסוג המשתנה שאותו מדפיסים (%d מתאים ל-int). הצירוף %d מציין שכאן יודפס תוכן של משתנה, ומתאים לסוג המשתנה שאותו מדפיסים (%d מתאים ל-int). ה- %d עצמו לא מודפס. ה- %d עצמו לא מודפס. שם המשתנה שיודפס כאן מופיע לאחר הגרשיים, מופרד בפסיק. שם המשתנה שיודפס כאן מופיע לאחר הגרשיים, מופרד בפסיק. לכל סוג משתנה יש סימון הדפסה אחר, כמפורט בשקף הבא. לכל סוג משתנה יש סימון הדפסה אחר, כמפורט בשקף הבא.
17
פורמטי הדפסה נפוצים %d – int (בבסיס 10 כרגיל) %d – int (בבסיס 10 כרגיל) char - %c char - %c float, double - %f (הצגה עם נקודה עשרונית 21.54) float, double - %f (הצגה עם נקודה עשרונית 21.54) %e (הצגה עם מעריך e+0012.154) %e (הצגה עם מעריך e+0012.154) %g (נבחרת ההצגה היותר ברורה) %g (נבחרת ההצגה היותר ברורה) כדי להדפיס את הסימן %, נכתוב printf(“%”); כדי להדפיס את הסימן %, נכתוב printf(“%”);
18
דוגמא: כפל של שני מספרים ממשיים #include #include int main() { double a,b,c; a = 2.51; b = 2; c = a*b; printf("The product is %g\n", c); return 0; } הפלט: 5.02 The product is
19
הדפסת כמה משתנים באותה פקודה #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; } הפלט: 5.022.51 * 2 =
20
מותרות פעולות בפקודת ההדפסה #include #include int main() { double a,b; a = 2.51; b = 2; printf(“%g * %g = %g\n", a,b,a*b); return 0; } הפלט: 5.022.51 * 2 =
21
#include #include int main() { printf("The product is %g\n",2.51*2); return 0; } הפלט: 5.02 The product is אפשר גם להדפיס כך מספרים
22
עיגול בהדפסת ממשיים כשמדפיסים ערך ממשי ניתן לציין את מספר הספרות שיודפסו אחרי הנקודה. למשל: %.4f. כשמדפיסים ערך ממשי ניתן לציין את מספר הספרות שיודפסו אחרי הנקודה. למשל: %.4f. במידת הצורך יתבצע עיגול. למשל: במידת הצורך יתבצע עיגול. למשל: printf(“%.2f”, 123.456); 123.46 printf(“%.2f”, 123.456); 123.46
23
(תו)char פירוט על הטיפוס (תו)char פירוט על הטיפוס אמרנו שהמחשב עובד רק עם מספרים, אבל הטיפוס char מאפשר לשמור בזיכרון אותיות, סימנים, וכו'. גם תווים מיוצגים במחשב כמספרים. אמרנו שהמחשב עובד רק עם מספרים, אבל הטיפוס char מאפשר לשמור בזיכרון אותיות, סימנים, וכו'. גם תווים מיוצגים במחשב כמספרים. יש לקומפיילר טבלה של 256 תווים אפשריים (שנקראת "טבלת ASCII"). כדי לייצג תו, הקומפיילר משתמש במספר הסידורי של התו הזה בטבלה. יש לקומפיילר טבלה של 256 תווים אפשריים (שנקראת "טבלת ASCII"). כדי לייצג תו, הקומפיילר משתמש במספר הסידורי של התו הזה בטבלה. למשל האותיות 'A’ - ’Z’ נמצאות בטבלה לפי הסדר במקומות 65-90, האותיות 'a’ - ’z’ לפי הסדר במקומות 97-122, והספרות '9' – '0' לפי הסדר במקומות 48-57 בטבלה. למשל האותיות 'A’ - ’Z’ נמצאות בטבלה לפי הסדר במקומות 65-90, האותיות 'a’ - ’z’ לפי הסדר במקומות 97-122, והספרות '9' – '0' לפי הסדר במקומות 48-57 בטבלה. למשל char c=‘A’; מתורגם ע"י הקומפיילר ל- char c=65; למשל char c=‘A’; מתורגם ע"י הקומפיילר ל- char c=65; כל הסימנים שיש במחשב, כולל רווח, ירידת-שורה, וכו' נמצאים בטבלה. (התו רווח מסומן על-ידי ' ' התו ירידת-שורה '\n' ). כל הסימנים שיש במחשב, כולל רווח, ירידת-שורה, וכו' נמצאים בטבלה. (התו רווח מסומן על-ידי ' ' התו ירידת-שורה '\n' ).
24
char פירוט על הטיפוס char פירוט על הטיפוס כיוון שתווים מתורגמים למספרים, אפשר גם לעשות עליהם פעולות חשבון. כיוון שתווים מתורגמים למספרים, אפשר גם לעשות עליהם פעולות חשבון. למשל ‘a’+1 זה ‘b’. למשל ‘a’+1 זה ‘b’. ‘8’+1 זה '9'. ‘8’+1 זה '9'.
25
תווים מיוצגים כמספרים - דוגמא #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; פורמט ההדפסה קובע אם להדפיס כתו או כמספר
26
קלט של ערכי משתנים בד"כ נרצה שהתוכנית תעבוד על קלט שמכניס המשתמש. בד"כ נרצה שהתוכנית תעבוד על קלט שמכניס המשתמש. בדומה לפונקציה printf, קיימת הפונקציה scanf שקולטת ערך מהמשתמש לתוך משתנה. למשל קלט של שלם וממשי (בהנחה שהמשתנים האלה כבר הוגדרו כ- int ו- float): בדומה לפונקציה printf, קיימת הפונקציה scanf שקולטת ערך מהמשתמש לתוך משתנה. למשל קלט של שלם וממשי (בהנחה שהמשתנים האלה כבר הוגדרו כ- int ו- float): scanf(“%d %f”, &student_num, &average); המחשב ממתין לקלט, ומכניס אותו למשתנים שרשומים. המחשב ממתין לקלט, ומכניס אותו למשתנים שרשומים. אחרי הקשת הקלט על המשתמש להקיש Enter. אחרי הקשת הקלט על המשתמש להקיש Enter. סימוני הקלט זהים לסימוני ההדפסה ב- printf, למעט זה שב- double צריך לכתוב: %lf סימוני הקלט זהים לסימוני ההדפסה ב- printf, למעט זה שב- double צריך לכתוב: %lf
27
דוגמא: סכום של מספרים מהקלט # include int main() { int a, b, sum; printf(“Enter an integer\n”); scanf(“%d”, &a); printf(“Enter an integer\n”); scanf(“%d”, &b); sum = a + b; printf(“Answer: %d\n”, sum); return 0; } Enter an integer 5 7 Answer: 12 absum 5712
28
פעולות נפוצות על משתנים נקראות גם "אופרטורים אריתמטיים" נקראות גם "אופרטורים אריתמטיים" סוגריים () סוגריים () השמה = השמה = חיבור + חיבור + חיסור – חיסור – כפל * כפל * חילוק / חילוק / מודולו (שארית) % מודולו (שארית) % מודולו זה השארית בחלוקה של מספרים שלמים. מודולו זה השארית בחלוקה של מספרים שלמים. למשל: 1= 7%2 2 = 8%3. למשל: 1= 7%2 2 = 8%3. סדר הפעולות הוא כמו שמוגדר במתמטיקה. סדר הפעולות הוא כמו שמוגדר במתמטיקה.
29
#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 %g degrees celsius\n", cels); return 0; } דוגמא: תרגום מפרנהייט לצלזיוס קליטת ערך למשתנה חישוב והדפסת התוצאה הגדרת המשתנים
30
פעולות – נקודות לתשומת-לב בחלוקת מספרים שלמים תתקבל המנה ללא השארית: בחלוקת מספרים שלמים תתקבל המנה ללא השארית: 3=7/2 3=7/2 אם פעולה נעשית על משתנים מסוגים שונים, המחשב ימיר את כולם לסוג שיש לו טווח/דיוק יותר גדול מביניהם. למשל: 3.5=7/2.0 אם פעולה נעשית על משתנים מסוגים שונים, המחשב ימיר את כולם לסוג שיש לו טווח/דיוק יותר גדול מביניהם. למשל: 3.5=7/2.0 אם נכניס למשתנה ערך גדול מהטווח המקסימלי שלו, נקבל תוצאה שגויה (overflow). לכן כשעובדים עם מספרים גדולים במיוחד יש להשתמש ב- double. אם נכניס למשתנה ערך גדול מהטווח המקסימלי שלו, נקבל תוצאה שגויה (overflow). לכן כשעובדים עם מספרים גדולים במיוחד יש להשתמש ב- double.
31
פעולות – נקודות לתשומת-לב אם רוצים שהמחשב יתייחס למשתנה באופן חד-פעמי כאילו הוא מטיפוס מדויק יותר, אז ניתן לציין זאת במפורש. זה נקרא casting. אם רוצים שהמחשב יתייחס למשתנה באופן חד-פעמי כאילו הוא מטיפוס מדויק יותר, אז ניתן לציין זאת במפורש. זה נקרא casting. למשל: למשל: int i=1, j=2; printf(“%g”, ((double) i ) / j); והפלט יהיה: 0.5
32
פעולות – נקודות לתשומת-לב אפשרות נוספת לביצוע חילוק במספרים ממשיים ולא בשלמים היא הכפלה ב- 1.0 בהתחלה (כי אמרנו שהפעולה מתבצעת בהתאם לסוג הכי מדויק של ערך שמשתתף בה): אפשרות נוספת לביצוע חילוק במספרים ממשיים ולא בשלמים היא הכפלה ב- 1.0 בהתחלה (כי אמרנו שהפעולה מתבצעת בהתאם לסוג הכי מדויק של ערך שמשתתף בה): int i=1, j=2; printf(“%g”, 1.0 * i / j); ושוב הפלט יהיה: 0.5 (אופציה נוספת היא כמובן להעביר את הערך של i או של j למשתנה מסוג double לפני החלוקה, ופשוט לחלק משתנה מסוג double).
33
סיכום ראינו: הגדרת משתנים טיפוסי משתנים בסיסיים פלט וקלט של משתנים ביצוע פעולות על משתנים
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.