You are on page 1of 81

‫קורס יסודות התכנות בשפת ‪C‬‬

‫פרק ‪3‬‬
‫משתנים ‪Variables -‬‬

‫ד"ר שייקה בילו‬


‫יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע‬
‫מומחה למערכות מידע חינוכיות‪ ,‬אקדמיות ומנהליות‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪1‬‬ ‫‪Shayke Bilu PhD‬‬


‫תזכורת – מה למדנו בשבוע שעבר‬
‫‪2‬‬

‫‪ ‬הכרת המחשב‬
‫‪ ‬התקני קלט‪/‬פלט‪ ,‬זיכרון‪ ,‬מעבד‪ ,‬חומרה ותוכנה‪.‬‬
‫‪ ‬מבוא לשפות תכנות‬
‫‪ ‬שפת מכונה‪ ,‬אסמבלי‪ ,‬שפות עיליות‪ ,‬קומפילציה‪.‬‬
‫‪ ‬מבוא לשפת ‪C‬‬
‫‪ ‬יתרונות וחסרונות‪ ,‬מבנה בסיסי של תוכנית‪ ,‬דוגמאות‪.‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫שלבי יצירת התוכנית‬
‫‪3‬‬

‫תוכנית ‪C‬‬ ‫‪ - Editor‬כתיבת התוכנית‬

‫מתרגם פקודות שנכתבו בשפת ‪C‬‬


‫‪Compiler‬‬ ‫ל‪( object code-‬שפת‪-‬מכונה)‬
‫מחבר מספר קבצי ‪object‬‬
‫‪Linker‬‬ ‫לקובץ הרצה‬

‫)‪ (exe‬קובץ הרצה‬ ‫השלבים האלה מתבצעים יחד על‪-‬‬


‫ידי תוכנה אותה נפעיל בתרגול‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪3‬‬ ‫‪Shayke Bilu PhD‬‬


C ‫תוכנית ראשונה בשפת‬
4

#include <stdio.h>
void main()
{
printf(“Hello Dear C Students\n”);
}
:‫התוכנית מדפיסה על המסך את המשפט‬
Hello Dear C Students

SCE-Chapter-3-Variables 4 Shayke Bilu PhD


‫ מספר השניות ביממה‬:‫תוכנית שניה‬
5

#include <stdio.h> ‫את השורות האלה כבר הכרנו‬


void main()
{ :‫שורת הגדרת המשתנים של התוכנית‬
int seconds, hours, minutes;
hours = 24; :‫השמת ערכים בתוך המשתנים‬
minutes = 60; :‫תרגיל החישוב‬
seconds = hours * minutes * 60 ;
printf(“Seconds a day: %d\n”, seconds);
}
SCE-Chapter-3-Variables 5 Shayke Bilu PhD
‫תזכורת – נקודה לתשומת‪-‬לב‬
‫‪6‬‬

‫‪ \n ‬הוא תו מיוחד שמסמן ירידת‪-‬שורה‪:‬‬


‫;)”‪ printf(“\n‬פשוט יורד שורה (לא מדפיס ‪.)\n‬‬
‫‪ ‬כדי להדפיס ‪ \n‬צריך לכתוב ;)”‪.printf(“\\n‬‬
‫‪ ‬באופן כללי כדי להדפיס \ צריך לכתוב‪:‬‬
‫;)”\\“(‪printf‬‬
‫‪ ‬כדי להדפיס " צריך לכתוב ;)””\“(‪printf‬‬
‫‪ ‬כדי להדפיס את הסימן ‪ %‬על המסך נכתוב‪:‬‬
‫;)”‪printf(“%%‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
7

?‫שאלות על השעור שעבר‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫נושאי הפרק שימוש במשתנים‬
‫‪8‬‬

‫‪ ‬מה זה משתנה?‬
‫‪ ‬סוגי משתנים בשפת ‪.C‬‬
‫‪ ‬הגדרת טיפוסי משתנים ומשתנים שונים‪.‬‬
‫‪ ‬השמת ערכים למשתנה לפי הטיפוס שלו‪.‬‬
‫‪ ‬פעולות שניתן לבצע על משתנים‪.‬‬
‫‪ ‬קליטת ערכים מהמשתמש לתוך משתנים‪.‬‬
‫‪ ‬הדפסה של ערכי משתנים למסך‪.‬‬
‫‪ ‬השמת תוצאת חישוב לתוך משתנה‪.‬‬
‫‪ ‬הדפסת משתנים בעלי טיפוסים שונים‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫שימוש במשתנים בתכנות‬
‫‪9‬‬

‫‪ ‬כמעט בכל תכנית מחשב שנכתוב‪ ,‬נרצה לבצע חישובים‬


‫ולעבד נתונים‪ ,‬לאילו נתונים הכוונה?‬
‫‪ ‬קלט מהמשתמש‬
‫‪ ‬חישובים משלבים שונים של התכנית‬
‫‪ ‬המחשב צריך להמשיך לזכור את הנתונים כדי שנוכל‬
‫להשתמש בהם בהמשך עבודת התוכנית‪.‬‬
‫‪ ‬לשם כך יש להגדיר עבור נתונים כאלה מקום בזיכרון‪,‬‬
‫ולתת להם שם בעל משמעות‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫מה זה משתנה?‬
‫‪10‬‬

‫‪ ‬מקום בזיכרון שמוגדר‪:‬‬


‫‪ ‬כשייך לתכנית שלי‪.‬‬
‫‪ ‬מראש לאחר שקיבל שם חד‪-‬חד ערכי‪.‬‬
‫‪ ‬שכך שניתן לאחסן בו ערכים מטיפוס מסוים‪,‬‬
‫(אותיות‪/‬שלמים‪/‬ממשיים)‬
‫‪ ‬שניתן לקרוא ממנו את הערך שמאוחסן בו‪.‬‬
‫‪ ‬כדי להשתמש במשתנה‪:‬‬
‫‪ ‬חייבים להגדיר את הטיפוס שלו על ידי כך שנציין את שמו ואת‬
‫סוג‪/‬אופי הערכים שהוא יאחסן בתוכו‪.‬‬
‫‪ ‬משתנים הם האמצעי לשמירה וטיפול בנתונים בתוכנית‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫ ביצוע תרגיל מתמטי‬:‫תוכנית שלישית‬
11

#include <stdio.h>
void main()
{
int mis1, mis2, result;
mis1 = 256;
mis2 = 605;
result = mis1 + mis2;
printf(“Result mis1+mis2: %d\n”, result);
}
SCE-Chapter-3-Variables 11 Shayke Bilu PhD
‫הגדרת משתנים‪ :‬טיפוסים בסיסיים‬
‫‪12‬‬

‫‪ - int ‬מספר שלם (‪)integer‬‬


‫‪ ‬הטווח האפשרי הוא בין ‪ -231‬לבין ‪231‬‬
‫‪ - float ‬מספר ממשי‬
‫‪ ‬הטווח הוא בערך ‪( ± 1038‬תלוי בסוג המעבד)‬
‫‪ ‬השבר הכי קטן שניתן לייצג הוא בערך ‪±10 -38‬‬
‫‪ ‬דיוק של עד ‪ 6‬ספרות מימין לנקודה העשרונית‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫הגדרת משתנים‪ :‬טיפוסים בסיסיים‬
‫‪13‬‬

‫‪ - double ‬מספר ממשי גדול (מקום כפול בזיכרון)‬


‫‪ ‬הטווח הוא בערך ‪( ±10 308‬תלוי במעבד)‬
‫‪ ‬השבר הכי קטן שניתן לייצג הוא בערך ‪10 -308‬‬
‫‪ ‬דיוק של עד ‪ 15‬ספרות‪.‬‬
‫‪ - char ‬תו בודד (למשל ’‪ '$' , ‘a‬או '?')‪.‬‬
‫‪ ‬יתכנו הבדלים בטווחים בין סוגי מחשבים וקומפיילרים‬
‫‪ ‬בהמשך נלמד כיצד לקלוט נתונים לכל סוג משתנה וכיצד‬
‫ניתן להדפיס את תוכן המשתנים בהתאם לטיפוס שלהם‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫למה זה טוב שיש טיפוסי משתנים?‬
‫‪14‬‬

‫‪ ‬חסכון במקום‬
‫‪ ‬טיפוסי נתונים מסוימים דורשים פחות מקום בזיכרון מאחרים‪,‬‬
‫ככל שטיפוס מכין מספר בעל דיוק נמוך יותר או תו הגודל‬
‫הנשמר עבורו בזיכרון קטן יותר‪.‬‬
‫‪ ‬מהירות‬
‫‪ ‬המחשב יטפל אחרת בטיפוסי משתנים שונים‪.‬‬
‫‪ ‬ידיעת הטיפוס מאפשרת ביצוע פעולות מהיר יותר‪.‬‬
‫‪ ‬העברת נתונים‪ ,‬ערכים‪ ,‬תוכן בין משתנים בעלי אותו טיפוס היא‬
‫מהירה ומדויקת ללא צורך בהמרות‪.‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫למה זה טוב שיש טיפוסי משתנים?‬
‫‪15‬‬

‫‪ ‬איתור שגיאות‪:‬‬
‫‪ ‬בזמן הכתיבה ובזמן הקומפילציה שימוש במשתנים מקל על‬
‫הבדיקה של התוכנית והתאמתה לפתרון הנדרש‬
‫‪ ‬כל הנתונים מיוצגים בזיכרון כרצף של אפסים ואחדות אשר ביחד‬
‫מייצגים מספר‪ ,‬תו או סימן אחר במחשב‬
‫‪ ‬אין ציון של טיפוס או מקום ההתחלה של משתנה במחשב‪,‬‬
‫ההגדרה נועדה רק לצורך התוכנית‬
‫‪ ‬הקומפיילר דואג שהתוכנית תתייחס למשתנים בהתאם לטיפוס‬
‫שהוגדר עבורם‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫דוגמאות להגדרות משתנים‬
16

char tav; - ‫משתנה תווי‬

int mis; - ‫משתנה מספרי שלם‬


- ‫משתנה מספרי ממשי‬
float the_max_percent;
- ‫משתנה מספרי ממשי‬
double average;

SCE-Chapter-3-Variables Shayke Bilu PhD


‫דוגמאות לאתחול משתנים‬
17

char tav = ‘p’;

int mis = 25;

float the_max_percent = 25.236985;

double average = 12.256987456312571;

SCE-Chapter-3-Variables Shayke Bilu PhD


‫הגדרת משתנים‪ :‬שמות מותרים‬
‫‪18‬‬

‫‪ ‬שם משתנה יכול לכלול‪:‬‬


‫‪ ‬אותיות אנגליות (‪)a,b,c‬‬
‫‪ ‬ספרות (‪)0,1,2,3‬‬
‫‪ ‬קו תחתון ( _ )‬
‫‪ ‬אסור שהתו הראשון בשם המשתנה יהיה סיפרה !!!‬
‫‪ ‬יש הבדל בין אות גדולה לאות קטנה (‪.)case-sensitive‬‬
‫‪ arnon, Arnon‬ו‪ arNon -‬הם שמות שונים!‬ ‫‪‬‬
‫‪Counter, new_sum, total1‬‬ ‫‪ ‬שם חוקי‪:‬‬
‫‪ ‬לא חוקי‪percent% , 2counter, @new-sum :‬‬
‫‪ ‬הערה‪ :‬חובה לתת למשתנים שמות בעלי משמעות !!!‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
19

?‫שאלות‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫סיכום ביניים ‪ -‬הגדרת משתנים‬
‫‪20‬‬

‫‪ ‬משמעות‬

‫‪ ‬טיפוסים‬

‫‪ ‬שמות‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫פלט של ערכי משתנים‬
‫‪21‬‬

‫‪ ‬ראינו שפקודת ה‪ printf -‬מאפשרת הדפסה של ערכי‬


‫משתנים למסך למשל‪:‬‬
‫;)‪printf(“The sum is: %d\n”,sum‬‬
‫‪ %d ‬מציין שכאן יודפס התוכן של המשתנה‬
‫‪ ‬האות ‪ d‬מציינת כי על המסך יודפס מספר שלם (‪.)int‬‬
‫‪ ‬לכל סוג משתנה יש סימון הדפסה אחר המתאים עבורו‬
‫‪ ‬שם המשתנה שיודפס מופיע לאחר הגרשיים‪ ,‬מופרד‬
‫בפסיק (‪ ),‬אחרי סימן הגרשיים (") המציינים סוף הדפסה‪.‬‬
‫‪ ‬לאחר המשתנה נרד שורה באמצעות פקודת ה‪.\n -‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫פורמטים נפוצים של הדפסת פלט‬
‫‪22‬‬

‫‪ - %d - int ‬הדפסת משתנה בעל ערך שלם בבסיס ‪10‬‬


‫‪ - %c - char ‬הדפסת משתנה תווי לפי טבלת האסקי‬
‫‪ - %f - float ‬הדפסת משתנה עם נקודה עשרונית צפה‬
‫‪ - %lf - double ‬הדפסת משתנה עם נקודה עשרונית‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫פורמטים נפוצים של הדפסת פלט‬
‫‪23‬‬

‫‪ – %e ‬הדפסת מקוצרת של התוצאה‪2.154e+001 :‬‬


‫‪ - %g ‬נבחרת הצגת ההדפסה הברורה ביותר‪ ,‬על פי‬
‫החלטת המחשב ובהתאם לערך המשתנה ולטיפוס בו הוא‬
‫הוגדר מלכתחילה‬
‫‪ – %p - %d - pointer ‬הדפסת כתובת‬
‫‪ - %ld - long int ‬הדפסת משתנה שלם ארוך‬
‫‪ – %u - unsigned int ‬הדפסת משתנה ללא סימן‬
‫שלילי –‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫ כפל של שני מספרים ממשיים‬:‫דוגמא‬
24

#include <stdio.h>
void main()
{
float mis1,mis2,tozaa;
mis1 = 2.25;
mis2 = 2;
tozaa = mis1*mis2;
printf("The product is %.1f\n",tozaa);
}
The product is 4.5 :‫הפלט‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫הדפסת כמה משתנים באותה פקודה‬
25

#include <stdio.h>
void main()
{
float mis1,mis2,tozaa;
mis1 = 2.25;
mis2 = 2;
tozaa = mis1*mis2;
printf(“%.2f*%.2f=%.1f\n“,mis1,mis2,tozaa);
}
2.25 * 2.00 = 4.5 :‫הפלט‬
SCE-Chapter-3-Variables Shayke Bilu PhD
‫מותרות פעולות בפקודת ההדפסה‬
26

#include <stdio.h>
void main()
{
float mis1,mis2;
mis1 =2.25;
mis2 =2;
printf(“%.2f*%.2f=%.1f\n”,mis1,mis2,mis1*mis2);
}
2.25 * 2.00 =4.5 :‫הפלט‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫אפשר גם להדפיס כך מספרים‬
27

#include <stdio.h>
void main()
{
printf(" The product is %.1lf\n",2.25*2);
}

The product is 4.5 :‫הפלט‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫הטיפוס ‪char‬‬
‫‪28‬‬

‫‪ ‬גם תווים נשמרים בזיכרון המחשב כמספרים‪ ,‬איך?‬


‫‪ ‬יש לקומפיילר טבלה של ‪ 256‬תווים ‪" -‬טבלת ‪"ASCII‬‬
‫‪ ‬המחשב שומר בזיכרון את המספר הסידורי של כל תו בטבלה‬
‫‪ ‬כל תו נשמר בתא ("בית") בודד‬
‫‪ ‬למשל (ולא צריך לזכור את זה!!)‬
‫‪ ‬האותיות ’‪ 'A’ - ’Z‬נמצאות בטבלה לפי הסדר במקומות ‪65-90‬‬
‫‪ ‬האותיות ’‪ 'a’ - ’z‬לפי הסדר במקומות ‪97-122‬‬
‫‪ ‬הספרות '‪ '0' – '9‬לפי הסדר במקומות ‪48-57‬‬
‫‪ ‬לדוגמא‪:‬‬
‫;’‪char tav = ‘A‬‬ ‫הפקודה ‪:‬‬
‫;‪char tav=65‬‬ ‫מתורגמת ע"י הקומפיילר ל‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫טבלת ‪ASCII‬‬
‫‪29‬‬

‫• ‪ ASCII‬ראשי תיבות של‪:‬‬


‫‪American Standard Code for Information Interchange‬‬
‫• קוד זה מיועד עבור ייצוגם של תווים‪ ,‬הכוללים ספרות‪ ,‬אותיות‪,‬‬
‫סימני פיסוק ועוד בזכרון המחשב ובקבצי המחשב‪ .‬הקוד משמש‬
‫להצגת אותיות האלפבית הלטיני‪ ,‬הפשוט‪.‬‬
‫• הקוד מציג קידוד של ‪ 8‬סיביות הכוללות תווים והוא מכיל ‪256‬‬
‫סימנים כאשר ‪ 128‬הראשונים כוללים ‪ 32‬תווי בקרה‪ ,‬כמו ירידת‬
‫שורה וכדומה‪ 52 ,‬אותיות‪ 10 ,‬ספרות וסימנים מיוחדים כגון סימני‬
‫פיסוק וסימני רווח‪.‬‬
‫• הקוד הבסיסי אינו כולל אותיות עבריות‪ .‬הקוד המורחב מ‪ 128 -‬ועד‬
‫‪ 255‬כולל שפות נוספות ‪ ,‬תווים נוספים‪ ,‬סימנים קבועים ועוד‪..‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
ASCII ‫טבלת‬
30

SCE-Chapter-3-Variables Shayke Bilu PhD


‫תוכנית להדפסת טבלת אסקי‬
31

#include<stdio.h>
void main()
{
char ch;
printf("Enter a character: ");
scanf("%c",&ch); /*Takes a character from user */
printf("ASCII value of %c = %d\n",ch,ch);
}

SCE-Chapter-3-Variables Shayke Bilu PhD


‫ דוגמא‬- ‫תווים מיוצגים כמספרים‬
32

#include<stdio.h>
void main()
{
char tav = ‘A’; char tav=65; ‫זה כמו‬
printf(“Tav as a character is: %c\n", tav);
printf(“Tav as an integer is: %d\n",tav);
}
Tav as a character is: A

Tav as an integer is: 65

SCE-Chapter-3-Variables Shayke Bilu PhD


‫עוד על הטיפוס ‪char‬‬
‫‪33‬‬

‫‪ ‬כיוון שהתווים נשמרים כמספרים‪ ,‬אפשר גם לעשות‬


‫עליהם פעולות חשבון‪ ,‬לדוגמא‪:‬‬
‫‪ ‘a’+1‬זה ’‪ ‘b‬כאילו חישבנו ‪98=97+1‬‬
‫‪ ‘8’-3‬זה '‪ '5‬כאילו חישבנו ‪53=56-3‬‬
‫‪ ‘$’+1‬זה '‪ '%‬כאילו חישבנו ‪37=36+1‬‬
‫‪ ‘@’+6‬זה '‪ 'F‬כאילו חישבנו ‪70=64+6‬‬
‫‪ ‘(’+1‬זה כאילו חישבנו ‪41=40+1‬‬
‫‪ ‘/’+3‬זה '‪ '2‬כאילו חישבנו ‪50=47+3‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫קלט‪/‬פלט של משתנים‬
‫‪34‬‬

‫‪ ‬פורמטים של פלט ‪/‬קלט של משתנים‬

‫‪ ‬תווים כמספרים‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫קלט של ערכי משתנים‬
‫‪35‬‬

‫‪ ‬בד"כ נרצה שהתכנית תעבוד על קלט שמכניס המשתמש‬


‫‪( scanf ‬שב‪ )stdio.h -‬קולטת ערך מהמשתמש לתוך משתנה‬
‫‪ ‬לדוגמא ‪ -‬קלט של מספר שלם למשתנה ושל מספר ממשי למשתנה‬
‫‪scanf(“%d %lf”, &student_num, &average); ‬‬

‫‪ ‬המחשב ממתין לקלט‪ ,‬ומכניס אותו למשתנים‬


‫‪ ‬אחרי הקשת הקלט על המשתמש להקיש ‪Enter‬‬
‫‪ ‬סימוני הקלט זהים לסימוני ההדפסה ב‪ , printf -‬למעט זה שב‪-‬‬
‫‪ double‬צריך לכתוב‪%lf :‬‬
‫שימו לב לסימן & שחייב‬
‫להופיע לפני שם‬
‫המשתנה!!!‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫ סכום של מספרים מהקלט‬:‫דוגמא‬
36

#include <stdio.h>
void main()
{
int mis1, mis2, sum=0;
printf(“Enter an integer\n”);
scanf(“%d”, &mis1);
printf(“Enter an integer\n”);
scanf(“%d”, &mis2);
sum = mis1 + mis2;
printf(“Answer: %d + %d = %d\n”, mis1,mis2,
sum);
}
SCE-Chapter-3-Variables Shayke Bilu PhD
‫ריצת התוכנית‬
‫‪37‬‬

‫‪Enter an integer‬‬
‫‪5‬‬
‫‪Enter an integer‬‬
‫‪7‬‬
‫‪Answer: 5 + 7 = 12‬‬

‫אחרי הקלדת הערך של כל קלט מקישים ‪Enter‬‬


‫הקלדה על ה‪ Enter -‬מאשרת קליטת הערך מהמקלדת‬
‫למשתנה‪ ,‬תוך כדי תצוגה שלו על המסך‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫ תמונת הזיכרון‬- ‫חישוב סכום‬
38

mis1 mis2 sum

‫תמונת הזיכרון לאחר הפקודה‬


int mis1, mis2, sum;

mis1 mis2 sum

‫תמונת הזיכרון לאחר‬


scanf(“%d”, &mis1);
SCE-Chapter-3-Variables Shayke Bilu PhD
‫ תמונת הזיכרון‬- ‫חישוב סכום‬
39

mis1 mis2 sum


5 7

‫תמונת הזיכרון לאחר‬


scanf(“%d”, &mis2);

mis1 mis2 sum


5 7 12
‫תמונת הזיכרון לאחר‬
sum = mis1 + mis2;
SCE-Chapter-3-Variables Shayke Bilu PhD
40

?‫שאלות‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫עיגול בהדפסת משתנים‬
‫‪41‬‬

‫‪ ‬כשמדפיסים מספר ממשי ניתן לציין את מספר הספרות‬


‫שיודפסו אחרי הנקודה‪.‬‬
‫‪ ‬למשל‪ :‬הפקודה ‪ %.4f‬בתוך קטע ההדפסה‪ ,‬התחום‬
‫בגרשיים‪ ,‬תדפיס את המספר השלם עם ארבע ספרות‬
‫מימין לנקודה העשרונית‪.‬‬
‫‪ ‬במידת הצורך יתבצע עיגול‪.‬‬
‫‪ ‬למשל‪:‬‬
‫;)‪printf(“%.2f”, 123.456789‬‬
‫‪123.46‬‬ ‫יודפס על המסך‪:‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫דוגמאות לעיגול בהדפסת משתנים‬
‫‪42‬‬

‫;)‪printf(“%.3f”, 123.456789‬‬
‫‪123.457‬‬ ‫יודפס על המסך‪:‬‬
‫;)‪printf(“%.1f”, 123.456789‬‬
‫‪123.5‬‬ ‫יודפס על המסך‪:‬‬
‫;)‪printf(“%.0f”, 123.456789‬‬
‫‪123‬‬ ‫יודפס על המסך‪:‬‬
‫;)‪printf(“%.4f”, 123.456789‬‬
‫‪123.4568‬‬ ‫יודפס על המסך‪:‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫מדוע צריך & ב‪scanf -‬‬
‫‪43‬‬

‫‪ ‬הסימון & משמעותו הכתובת של המשתנה בזיכרון‪.‬‬


‫‪ ‬כלומר‪ ,‬המקום שאליו הקלט צריך להיכנס‬

‫;)‪scanf(“%d %lf”, student_num, average‬‬

‫טעות!!!‬ ‫‪student_num‬‬ ‫‪average‬‬


‫יכניס את הערך הנקלט‬
‫מהמסך לכתובות שגויות‬
‫‪address: 1760‬‬ ‫‪address: 7510‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫למה בעצם צריך & ב‪scanf -‬‬
‫‪44‬‬

‫‪ ‬הסימון & משמעותו הכתובת של המשתנה בזיכרון‬


‫‪ ‬כלומר‪ ,‬המקום שאליו הקלט צריך להיכנס‬

‫;)‪scanf(“%d %lf”, &student_num, &average‬‬

‫‪student_num‬‬ ‫‪average‬‬
‫תקין!‬
‫יכתוב את הנתונים שיקלטו‬ ‫‪17‬‬ ‫‪85‬‬
‫ישירות בכתובות ‪ 1760‬ו‪7510-‬‬
‫‪address: 1760‬‬ ‫‪address: 7510‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫נקודות נוספות לגבי ‪scanf‬‬
‫‪45‬‬

‫‪ ‬ביצוע קלט מספרים‪:‬‬


‫‪ ‬המחשב מצפה ל‪ white space-‬שיפריד בין המספרים‪.‬‬
‫‪ ‬רווח‪ ,‬טאב‪ ,‬שורה חדשה‪...‬‬
‫‪ scanf ‬ידלג על ה‪ white space-‬בקריאת המספרים‪.‬‬
‫מספרים מופרדים ע"י‬
‫;)‪scanf(“%d %d”,&mis1,&mis2‬‬ ‫‪12 34‬‬
‫‪white space‬‬

‫;)‪scanf(“%d+%d”,&mis1,&mis2‬‬ ‫מספרים מופרדים ע"י‬ ‫‪12+34‬‬


‫סימן ‪+‬‬

‫;)‪scanf(“%d,%d”,&mis1,&mis2‬‬ ‫מספרים מופרדים ע"י‬


‫‪12,34‬‬
‫סימן ‪,‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫נקודות נוספות לגבי ‪scanf‬‬
‫‪46‬‬

‫‪ ‬כשקולטים תווים‪:‬‬
‫‪ ‬רווחים נחשבים לחלק מהקלט‪.‬‬

‫;)‪scanf(“%c%c”,&tav1,&tav2‬‬ ‫תווים המופיעים ברצף‬ ‫‪ab‬‬

‫‪ a b‬תווים מופרדים ע"י רווח ;)‪scanf(“%c %c”,&tav1,&tav2‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫אפשרות נוספת לקלט‪/‬פלט של תווים‬
‫‪47‬‬

‫• הפונקציה )(‪:getchar‬‬
‫• קולטת תו מהמשתמש‪.‬‬
‫;)‪scanf(“%c”, &character‬‬ ‫• שקול ל‪:‬‬
‫;)(‪character = getchar‬‬ ‫• השימוש ע"י‪:‬‬

‫• הפונקציה )(‪:putchar‬‬
‫• מדפיסה תו למסך‪.‬‬
‫;)‪printf(“%c”, character‬‬ ‫• שקול ל‪:‬‬
‫;)‪putchar(character‬‬ ‫• השימוש ע"י‪:‬‬

‫• ‪( white spaces‬טאב‪ ,‬רווח‪ ,‬ירידת שורה) הם יחשבו‬


‫כתווים רגילים עבור הפונקציות הללו ויש לשים לב לכך!!!‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫נקודות נוספות לגבי ‪scanf‬‬
‫‪48‬‬

‫‪ ‬אם הקלדנו יותר ערכים ממה שהפונקציה ציפתה‬


‫התווים הבאים ישמשו כקלט ל‪ scanf -‬הבא‪.‬‬
‫;)‪scanf(“%d”, &mis1‬‬ ‫‪12 34‬‬
‫;)‪scanf(“%d”, &mis2‬‬

‫‪ ‬אם הקלדנו ‪ Enter‬בין שתי פקודות קלט של תווים‬


‫התו השני שיקרא הוא תו ירידת‪-‬השורה ('‪.)'\n‬‬
‫;)‪scanf(“%c”, &tav1‬‬ ‫‪a‬‬
‫;)‪scanf(“%c”, &tav2‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫נקודות נוספות לגבי ‪scanf‬‬
‫‪49‬‬

‫‪ ‬עכשיו ‪ tav1‬מכיל ’‪ ‘a‬ו‪ tav2 -‬מכיל ’‪( ‘\n‬לא נוכל‬


‫להכניס תו נוסף)‪.‬‬
‫‪ ‬כדי לפתור את הבעיה יש לרשום את הפקודה‪:‬‬
‫;)(‪ flushall‬לפני כל פקודת הקלט של תו‪.‬‬
‫‪ ‬פקודה מנקה את חוצץ הזיכרון של המסך וכך לא ייקלט‬
‫בטעות נתון שלא הייתה כוונה לקלוט אותו מלכתחילה‪.‬‬
‫‪ ‬ניתן לחילופין ומומלץ מאד להתחיל להשתמש בפקודה‬
‫;)(‪ getchar‬לקליטת תווים או )(‪ putchar‬לפלט‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫נקודות נוספות לגבי ‪scanf‬‬
‫‪50‬‬

‫‪ ‬אם רוצים לקלוט מספר תווים ברצף‪:‬‬


‫‪ ‬אפשר לכתוב את כולם בשורה אחת ובסוף להקליד ‪.Enter‬‬
‫;)‪scanf(“%c”, &tav1‬‬ ‫‪ab‬‬
‫;)‪scanf(“%c”, &tav2‬‬
‫‪ ‬או לגרום ל‪ scanf-‬לדלג על סימני ה‪ \n-‬המפרידים בין‬
‫התווים‪.‬‬
‫;)‪scanf(“%c”, &tav1‬‬ ‫‪a‬‬
‫;)‪scanf(“\n%c”, &tav2‬‬ ‫‪b‬‬
‫‪ ‬עכשיו ‪ tav1‬מכיל ’‪ ‘a‬ו‪ tav2 -‬מכיל ’‪.‘b‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫תוכנית לדוגמא – קלט תווים‬
51

#include<stdio.h>
void main()
{
char tav = 'A',tav1,tav2;
printf("Tav as a character is: %c\n", tav);
printf("Tav as an integer is: %d\n",tav);
printf("enter two chars:\n");
scanf("%c %c",&tav1,&tav2);
printf("%c %c\n",tav1,tav2);

SCE-Chapter-3-Variables Shayke Bilu PhD


‫תוכנית לדוגמא – קלט תווים‬
52

printf("enter two chars:\n");


tav1=getchar();
tav2=getchar();
putchar(tav1);
putchar(tav2);
printf("enter two chars:\n");
scanf("%c",&tav1);
scanf("%c",&tav2);
printf("%c %c\n",tav1,tav2);
SCE-Chapter-3-Variables Shayke Bilu PhD
‫תוכנית לדוגמא – קלט תווים‬
53

printf("enter two chars:\n");


scanf("%c",&tav1);
flushall();
scanf("%c",&tav2);
printf("%c %c\n",tav1,tav2);
printf("enter two chars:\n");
scanf("%c",&tav1);
scanf("\n%c",&tav2);
printf("%c %c\n",tav1,tav2);
}

SCE-Chapter-3-Variables Shayke Bilu PhD


‫עוד על שימוש במשתנים‬
‫‪54‬‬

‫‪ ‬רישום מקוצר של פעולות חשבון‬


‫‪ ‬עוד קצת על טיפוסי משתנים‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫כתיבה מקוצרת של פעולות חישוב בסיסיות‬
55

add += 2; add = add + 2;

num -= 3; num = num - 3;

sum *= 4; sum = sum * 4;

mis /= 5; mis = mis / 5;

mod %= 5; mod = mod % 5;

SCE-Chapter-3-Variables 55 Shayke
ShaykeBilu - 2012
Bilu PhD
‫כתיבה מקוצרת של פעולות ‪++‬‬
‫‪56‬‬

‫;‪mis++‬‬ ‫;‪mis = mis + 1‬‬

‫‪ ‬קודם מבוצעת הפעולה ואח"כ קידום ערך המשתנה ב‪:1-‬‬


‫‪ mis2‬שווה ל‪.5 -‬‬ ‫;‪mis1 = 5‬‬
‫‪ mis1‬שווה ל‪.6 -‬‬ ‫;‪mis2 = mis1++‬‬

‫;‪++mis‬‬ ‫;‪mis = mis + 1‬‬

‫‪ ‬קודם קידום ערך המשתנה ב‪ 1-‬ואח"כ מבוצעת הפעולה‪:‬‬


‫‪ mis2‬שווה ל‪.6 -‬‬ ‫;‪mis1 = 5‬‬
‫‪ mis1‬שווה ל‪.6 -‬‬ ‫;‪mis2 = ++mis1‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪56‬‬ ‫‪Shayke Bilu PhD‬‬
‫כתיבה מקוצרת של פעולות ‪--‬‬
‫‪57‬‬

‫;‪mis1--‬‬ ‫;‪mis1 = mis1 - 1‬‬

‫‪ ‬קודם נבצע את הפעולה ואח"כ נוריד את ערך המשתנה ב‪:1-‬‬


‫‪ mis2‬שווה ל‪.5 -‬‬ ‫;‪mis1 = 5‬‬
‫‪ mis1‬שווה ל‪.4 -‬‬ ‫;‪mis2 = mis1--‬‬

‫;‪--mis1‬‬ ‫;‪mis1 = mis1 - 1‬‬

‫‪ ‬קודם נוריד את ערך המשתנה ב‪ 1-‬ואח"כ נבצע את הפעולה‪:‬‬


‫‪ mis2‬שווה ל‪.4 -‬‬ ‫;‪mis1 = 5‬‬
‫‪ mis1‬שווה ל‪.4 -‬‬ ‫;‪mis2 = --mis1‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪57‬‬ ‫‪Shayke Bilu PhD‬‬
‫כתיבה מקוצרת של פעולות – או ‪++‬‬
‫‪58‬‬

‫‪ ‬סיכום כתיבה מקוצרת של פעולות בשפת ‪:C‬‬


‫‪ o‬כאשר הסמן ‪ - -‬או ‪ + +‬נמצא לפני המשתנה קודם נעשה שינוי‬
‫בערכו של המשתנה‪.‬‬
‫‪ o‬הסמן ‪ - -‬מוריד את ערכו של המשתנה ב‪ 1 -‬והסמן ‪ + +‬מעלה‬
‫את ערכו של המשתנה ב‪.1 -‬‬
‫‪ o‬כאשר הסמן ‪ - -‬או ‪ + +‬נמצא אחרי המשתנה קודם נעשה‬
‫שימוש בערכו המקורי של המשתנה‪ ,‬כלומר במיידי ורק אח"כ‬
‫נעשה שינוי בערכו‪.‬‬
‫‪ o‬הסמן ‪ - -‬מוריד את ערכו של המשתנה ב‪ 1 -‬והסמן ‪ + +‬מעלה‬
‫את ערכו של המשתנה ב‪ 1 -‬אחרי ביצוע הפעולות עם המשתנה‪,‬‬
‫כלומר לקראת הפעולה הבאה‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪58‬‬ ‫‪Shayke Bilu PhD‬‬
‫ייצוג ערכי משתנים במחשב‬
‫‪59‬‬

‫‪ ‬המחשב מכיר רק מספרים ומבין רק את שפת ה‪.0,1-‬‬


‫‪ ‬ערכם של משתנים מיוצג כמספר שהמחשב מבין והוא בינארי בלבד‬
‫כלומר כל מספר מיוצג בבסיס ‪ 2‬ע"י רצף של אפסים ואחדים‪.‬‬
‫‪ ‬הספרה הימנית ביותר מייצגת אחדות (‪)100‬‬
‫‪ ‬הספרה הבאה מייצגת עשרות (‪)101‬‬
‫‪ ‬הספרה הבאה מאות (‪)102‬‬
‫‪56023‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪0‬‬ ‫‪2‬‬ ‫‪3‬‬
‫בבסיס ‪10‬‬
‫‪5*104 6*103 0*102 2*101 3*100‬‬
‫הערה‪ :‬שימו לב למיקום ‪ 0‬עד ‪ ,4‬כל מיקום מהווה סמן לערכו של המספר‬
‫הנמצא בו‪ :‬אחדות‪ ,‬עשרות‪ ,‬מאות‪ ,‬אלפים‪ ,‬עשרות אלפים‪....‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪59‬‬ ‫‪Shayke Bilu PhD‬‬
‫ייצוג מספר בעזרת בסיס‬
‫‪60‬‬

‫‪ ‬בבסיס ‪2‬‬
‫‪ ‬יש רק שתי ספרות ‪ 0‬ו‪ 1-‬המייצגות את כל המספרים הקיימים‪.‬‬
‫‪ ‬כל ספרה מייצגת חזקה של ‪.2‬‬

‫‪25‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬
‫בבסיס ‪2‬‬
‫‪1*24 1*23 0*22 0*21 1*20‬‬

‫‪ ‬סימן (חיובי ‪ ,+‬שלילי ‪)-‬‬


‫‪ ‬נקבע ע"י הביט הראשון‬
‫‪ ‬מספר ממשי (בעל שבר עשרוני)‬
‫‪ ‬מיוצג ע"י שני מספרים שלמים‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪60‬‬ ‫‪Shayke Bilu PhD‬‬
‫ייצוג בינארי במחשב‬
61

:‫יחידות מידה מבוססות סיביות‬


Kilo K 210 = 1,024b
Mega M 220 = 1,048,576kb
Giga G 230 = 1,073,741,824kb
Tera T 240 = 1,099,511,627,776kb
Peta P 250 = 1,125,899,906,842,624kb
Exa E 260 = 1,152,921,504,606,846,976kb
Zetta Z 270 = 1,180,591,620,717,411,303,424kb
Yotta Y 280 = 1,208,925,819,614,629,174,706,176kb

SCE-Chapter-3-Variables 61 Shayke Bilu PhD


‫משתנים ללא סימן ‪unsigned -‬‬
‫‪62‬‬

‫‪ ‬מוסיפים בהגדרה ‪unsigned‬‬


‫‪ ‬משמש למספרים חיוביים בלבד !!!‬
‫‪ ‬לא מאפשרים קיום מספר שלילי‪.‬‬
‫‪ ‬מגדיל את הטווח פי ‪ ,2‬כלומר כמות הספרות גדלה‪.‬‬

‫‪unsigned int i=399999999; ‬‬

‫‪ ‬ההדפסה נעשית באמצעות הסימון ‪%u‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪62‬‬ ‫‪Shayke Bilu PhD‬‬


‫משתנים שהם קבועים ‪const -‬‬
‫‪63‬‬

‫‪ ‬משמשים לערך שאינו משתנה במהלך התכנית ונשאר‬


‫קבוע עד סיומה‪.‬‬
‫‪p‬‬ ‫‪ ‬למשל ‪-‬‬
‫‪ ‬חוסך חזרה על מספרים‪ ,‬הקלדות חוזרות‬
‫‪ ‬מונע שינוי הערך בטעות‬
‫‪ ‬מוסיפים ‪ const‬בהגדרה‪:‬‬
‫;‪const double pai=3.141592654‬‬
‫הערך של ‪ pai‬ישאר קבוע בכל מהלך התוכנית‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪63‬‬ ‫‪Shayke Bilu PhD‬‬
‫טיפוסים בסיסיים נוספים‬
‫‪64‬‬

‫‪ - long ‬מספר שלם‪ ,‬בדרך כלל תופס ‪ 8‬בתים של מידע‬


‫‪ - short ‬מספר שלם בדרך כלל תופס ‪ 2‬בתים של מידע‬
‫‪ ‬בדרך‪-‬כלל בין ‪ -215‬לבין ‪2-15‬‬
‫‪ ‬מאפשר לחסוך זיכרון כשעובדים עם מספרים קטנים‪.‬‬
‫‪ - long double ‬מספר ממשי עם דיוק וטווח גדולים‬
‫יותר‪ ,‬תלוי במעבד המחשב ובקומפיילר‪.‬‬
‫‪ ‬השימוש בטיפוסים אלה פחות נפוץ‪.‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪64‬‬ ‫‪Shayke Bilu PhD‬‬


‫פעולות נפוצות על משתנים‬
‫‪65‬‬

‫‪ o‬נקראות גם "אופרטורים אריתמטיים"‬


‫‪ o‬סוגריים ( ) תוחמים פעולות‪ ,‬מהווים סמן לסדר פעולות‬
‫= מבצעים השמת ערך מצד ימין ל‪ = -‬לצד שמאל‬ ‫‪ o‬השמה‬
‫סדר הפעולות‬ ‫‪+‬‬ ‫חיבור‬ ‫‪o‬‬
‫הוא כמו שמוגדר‬ ‫–‬ ‫‪ o‬חיסור‬
‫במתמטיקה‬ ‫*‬ ‫‪ o‬כפל‬
‫‪/‬‬ ‫‪ o‬חילוק‬
‫‪ %‬מחזירים את תוצאת השארית האמיתית לא השבר‬ ‫‪ o‬מודולו‬
‫העשרוני !!!‬
‫‪ o‬השארית בחלוקה של מספרים שלמים‬
‫‪10%6=4‬‬ ‫‪8%3 = 2‬‬ ‫‪ o‬למשל‪7%2 =1 :‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫ תרגום מפרנהייט לצלזיוס‬:‫דוגמא‬
66

#include <stdio.h>
void main()
{
float cels, fahr; ‫הגדרת המשתנים‬
printf("Please enter temperature in Fahrenheit :\n");
scanf("%f",&fahr); ‫קליטת ערך למשתנה‬
cels = 5*(fahr-32)/9;
‫חישוב התוצאה‬
printf("This is equal to %.2f degrees Celsius\n", cels);
} ‫הדפסת התוצאה‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫פעולות – נקודות לתשומת‪-‬לב‬
‫‪67‬‬

‫‪ ‬בחלוקת מספרים שלמים תתקבל המנה ללא השארית‪:‬‬


‫‪7/2=3‬‬
‫‪ ‬בפעולה על משתנים מסוגים שונים‪ ,‬המחשב ימיר את כולם‬
‫לסוג שיש לו טווח‪/‬דיוק יותר גדול‪:‬‬
‫‪7/2.0=3.5‬‬
‫‪ ‬אם נכניס למשתנה ערך גדול מהטווח המקסימלי שלו‪ ,‬נקבל‬
‫תוצאה שגויה (‪)overflow‬‬
‫‪ ‬יש לדאוג כי טיפוס המשתנה המקבל את התוצאה יהיה מסוגל‬
‫להכיל אותה מבחינה מתמטית ובעיקר מבחינת יכולת הדיוק‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫המרת טיפוס ‪Casting -‬‬
‫‪68‬‬

‫אם רוצים שהמחשב יתייחס למשתנה באופן חד‪-‬פעמי‬


‫כבעל טיפוס מדויק יותר‪ ,‬אז ניתן לציין זאת במפורש‬

‫;‪int num1=1, num2=2‬‬


‫‪printf(“%d / %d = %.2f”, num1, num2,‬‬
‫;)‪((float) num1 ) / num2‬‬
‫והפלט יהיה‪:‬‬
‫‪1 / 2 = 0.50‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫המרת טיפוס – ללא ‪Casting‬‬
‫‪69‬‬

‫אפשרות נוספת לביצוע חילוק במספרים ממשיים ולא‬


‫בשלמים היא הכפלה ב‪ 1.0 -‬בהתחלה‪:‬‬
‫;‪int num1=1, num2=2‬‬
‫‪printf(“%d / %d = %.2lf”,‬‬
‫;)‪num1,num2, 1.0 * num1 / num2‬‬
‫ושוב הפלט יהיה‪:‬‬
‫‪1.0 * 1 / 2 = 0.50‬‬

‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬


‫סיכום‬
‫‪70‬‬

‫• הגדרת משתנים‬
‫• טיפוסי משתנים בסיסיים‬
‫• שימוש במשתנים‬
‫• פלט וקלט של משתנים‬
‫• ביצוע פעולות על משתנים‬
‫• הגדלה הקטנה של משתנים‬
‫• המרת טיפוסי נתונים בשיטות שונות‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
71

?‫שאלות‬

SCE-Chapter-3-Variables Shayke Bilu PhD


72

enum ‫טיפוס סקלרי‬

Shayke Bilu PhD SCE-Chapter-10-Structs


‫שימוש ב‪ enum-‬ב‪C-‬‬
‫‪73‬‬

‫‪ enum ‬מאפשר הגדרת סוג נתונים חדש וסופי אשר מוכל‬


‫בערכים ידועים מראש שהם בדרך כלל קבועים כמו ימים‪,‬‬
‫חודשים ועוד‪..‬‬
‫‪ enum ‬הוא אוסף של מספרים שלמים בלבד המיוצגים ע"י‬
‫מזהים שמיים המהווים קבועים סימבולים שלא ניתנים לשינוי‪.‬‬
‫‪ ‬הערכים ב‪ enum-‬מתחילים ב‪( 0-‬אם לא צוין אחרת) ומוגדלים‬
‫ב‪ 1-‬עבור כל קבוע חדש בדומה למערך‪.‬‬
‫‪ ‬ניתן להשתמש ב‪ typedef-‬כדי ליצור קיצור לשם ה‪enum-‬‬
‫‪ ‬השמה לטיפוס ‪ enum‬ניתנת רק ע"י משתני ‪ enum‬מאותו‬
‫סוג (או בעזרת המרה)‬
‫‪SCE-Chapter-10-Structs‬‬ ‫‪Shayke Bilu PhD‬‬
enum-‫דוגמאות להגדרה ושימוש ב‬
74

enum days {SUN, MON, TUE, WED, THU, FRI, SAT};


enum days{SUN=1, MON, TUE, WED, THU, FRI,SAT};
typedef enum months{JAN=1, FEB, MAR..…} Months;
enum days aDay = SUN;
enum days bDay = MON;
if(aDay == bDay(…
Months aMonth=3; // using typedef
if((aMonth=JAN)&& (aMonth<=DEC))
aMonth++ …
SCE-Chapter-10-Structs Shayke Bilu PhD
enum-‫תרגיל לדוגמא עם שימוש ב‬
75

#include <stdio.h> days enum-‫הגדרת ה‬


typedef enum days
}
Sunday=1, Monday, Tuesday,
Wednesday, Thursday, Friday,
Saturday
} Days;
SCE-Chapter-10-Structs Shayke Bilu PhD
enum-‫תרגיל לדוגמא עם שימוש ב‬
76

int main() ‫ והדפסת‬i ‫ קליטת ערך למשתנה‬,‫התוכנית הראשית‬


{ i-‫סטטוס המתאים ליום שנקלט ב‬
Days TheDay; int i = 0;
printf("Please enter day of the week (1 to 7)\n");
scanf("%d",&i);
TheDay = Days(i);
if(TheDay == Friday || TheDay == Saturday)
printf("Hurray it is the weekend\n");
else
printf("I am still at work\n");
return 0;
}
SCE-Chapter-10-Structs Shayke Bilu PhD
77

?‫שאלות‬

SCE-Chapter-3-Variables Shayke Bilu PhD


‫תרגילי כיתה‬
‫‪78‬‬

‫‪ .1‬כתוב תוכנית הקולטת מספר שלם ומבצעת את הפעולות הבאות‪:‬‬


‫כופלת אותו ב‪ ,5 -‬מחסירה ממנו ‪ ,3‬מוסיפה את הריבוע של המספר‬
‫המקורי ומדפיסה את התוצאה‪.‬‬
‫‪ .2‬כתוב תוכנית הקולטת שני מספרים ממשיים ומבצעת את המשימות‬
‫הבאות‪ :‬מחשבת ומדפיסה את תוצאת החיבור שלהם‪ ,‬את תוצאת‬
‫החיסור של השני מהראשון‪ ,‬את תוצאת הכפל והחילוק של הראשון‬
‫בשני ואת פעולת המודלו של הראשון בשני‪.‬‬
‫‪ .3‬כתוב תוכנית הקולטת שלושה מספרים בני שלש ספרות‪ ,‬מחלצת‬
‫מהראשון את ספרת האחדות‪ ,‬מהשני את ספרת העשרות ומהשלישי‬
‫את ספרת המאות‪ .‬מחברת את שלוש הספרות שחולצו ומדפיסה את‬
‫התוצאה‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫תרגילי כיתה‬
‫‪79‬‬

‫‪ .4‬כתוב תוכנית הקולטת מספר בן חמש ספרות ומפרקת אותו‬


‫לספרותיו ומדפיסה כל ספרה בנפרד‪ .‬מחברת את כל ספרות‬
‫המספר ומדפיסה את התוצאה הסופית‪.‬‬
‫‪ .5‬במושב בגליל מגדל משה כבשים‪ .‬ידוע כי ‪ 50%‬מהכבשים בדיר‬
‫נותנות ‪ 2.5‬חלב ליממה‪ 30% ,‬אחוז נותנות ‪ 1‬ליטר חלב ליממה‬
‫ו‪ 20%-‬נותנות ‪ 0.5‬ליטר חלב ליממה‪.‬‬
‫כתוב תוכנית הקולטת כמה כבשים יש למשה בדיר‪ ,‬מחשבת כמה‬
‫ליטר חלב מייצר המשק של משה במשך יממה‪.‬‬
‫הערה‪ :‬על מנת לייצר ‪ 1‬ק"ג גבינת קממבר יש צורך ב‪8 -‬‬
‫ליטר חלב כבשים‪ ,‬יש לחשב כמה ק"ג גבינת קממבר ניתן ליצר‬
‫מכמות החלב היומית של משק משה‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫תרגילי כיתה‬
‫‪80‬‬

‫‪ .6‬ידוע כי בפיצוצייה נמכרו אתמול ‪ 30‬קרטיבים‪ 25 ,‬בקבוקי מים‬


‫מינרלים‪ 5 ,‬בקבוקי וודקה ו‪ 30-‬בירות‪ .‬מחיר קרטיב הוא ‪,₪ 5‬‬
‫מחיר בקבוק מים פי שניים ממחיר קרטיב‪ ,‬מחיר בירה פי שלוש‬
‫ממחיר מים ומחיר וודקה פי חמש ממחיר בירה‪ .‬כתוב תוכנית‬
‫בשפת ‪ C‬המחשבת את הפדיון של הפיצוצייה אתמול בערב לאור‬
‫הנתונים הנ"ל‪.‬‬
‫‪ .7‬בפיצה השכונתית מכרו אתמול ‪ 120‬פיצות אישיות‪ ,‬חצי מכמות‬
‫האישיות פיצות משפחתיות ורבע מכמות האישיות פיצות‬
‫ענקיות‪ .‬מחיר פיצה אישית ‪ ,₪ 30‬פיצה משפחתית ‪ ₪ 60‬ופיצה‬
‫ענקית ‪ .₪ 90‬כתובת תוכנית בשפת ‪ C‬המחשבת את הפדיון של‬
‫הפיצרייה אתמול‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬
‫תרגילי כיתה‬
‫‪81‬‬

‫‪ .8‬לחיליק ממושב ביצרון יש עדר בופאלו עם ‪ 220‬חולבות‪ .‬כל‬


‫בופאלו מניבה בממוצע ‪ 35‬ליטר חלב ליום‪ .‬כדי לקבל גבינת‬
‫מוצרלה יש להוסיף לחלב את חיידקי המוצרלה ואז מקבלים‬
‫מכל ‪ 50‬ליטר חלב ‪ 5‬ק"ג מוצרלה‪ .‬כתוב תוכנית בשפת ‪C‬‬
‫המחשבת כמה ק"ג מוצרלה יכול לייצר חיליק בממוצע ליום‪.‬‬
‫‪ .9‬במפעל אינטל שבקרית גת מייצרים כל ‪ 24‬שעות ‪ 3500‬מעבדי‬
‫‪ 2500 ,i3‬מעבדי ‪ i5‬ו‪ 1500 -‬מעבדי ‪ .i7‬ידוע כי ‪15%‬‬
‫מהמעבדים נפסלים במהלך בדיקות האיכות‪ .‬כתובת תוכנית‬
‫המחשבת כמה מעבדים תקינים ניתן לנפק מהמפעל כל יום‪.‬‬
‫‪ .10‬כיוון שהמפעל המייצר את המעבדים עובד ‪ 364‬ימים בשנה‬
‫הוסף את החישוב כמה מעבדים תקינים מיוצרים בשנה‪.‬‬
‫‪SCE-Chapter-3-Variables‬‬ ‫‪Shayke Bilu PhD‬‬

You might also like