You are on page 1of 53

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

‫פרק ‪4‬‬
‫בקרת זרימה והסתעפויות‬
‫‪Program Flow Control‬‬

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


‫יועץ ומרצה בכיר למדעי המחשב וטכנולוגית מידע‬
‫מומחה למערכות מידע חינוכיות‪ ,‬אקדמיות ומנהליות‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪1‬‬ ‫‪Shayke Bilu PhD‬‬
‫ שימוש במשתנים‬:‫תזכורת‬
2

?‫ מהו משתנה? לשם מה זקוקים לו? מה תפקידו במערכת‬


:‫ הגדרת משתנים‬
int mis = 9;
char c = ‘a’;
float mispar = 845.472585;
double number = 243435.5689822;
:‫ פורמטים של קלט פלט‬
%u, %ld, %p, %s , %d, %f, %lf , %g, %e, %c,
printf(“%g”, average);
scanf(“%lf”, &num);
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫תזכורת‪ :‬שימוש במשתנים‬
‫‪3‬‬

‫‪ ‬פעולות על משתנים‬
‫‪ ‬פעולות השמה (העברת קבוע‪ ,‬ערך של משתנה‪ ,‬תוצאת חישוב‪ ,‬מצד‬
‫ימין לתוך משתנה נמצא בשמאל)‪:‬‬
‫;’‪tav = ‘c‬‬
‫;‪sum = mis * 3‬‬
‫;‪num = mis / 2‬‬
‫‪ ‬פעולות חשבון‪:‬‬

‫‪% ,/ ,* ,- ,+‬‬
‫‪ ‬תשומת‪-‬לב לדיוק וטווח‪ .‬למשל ‪3/4=0‬‬
‫‪ ‬להקפיד לא לחלק באפס (זה גורם לתוכנית לעוף)‪.‬‬

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


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

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


‫אחרי הנקודה‪.‬‬
‫למשל‪ :‬רישום ‪ %.2f‬יגרום לכך שיודפס המספר השלם יחד עם‬ ‫‪‬‬
‫שתי ספרות מימין לנקודה העשרונית‪.‬‬
‫במידת הצורך יתבצע עיגול‪( .‬במידה והספרה השלישית שווה או‬ ‫‪‬‬
‫גדולה מ‪ 5-‬עיגול כלפי מעלה‪ ,‬שווה או קטנה מ‪ 4-‬עיגול כלפי מטה)‬
‫למשל‪:‬‬ ‫‪‬‬
‫;)‪printf(“%.2f”, 123.456‬‬

‫יודפס ‪123.46‬‬

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


‫ דוגמאות‬- ‫עיגול בהדפסת משתנים‬
5

printf(“%.0f”, 123.456789); :‫למשל‬ 


123 ‫יודפס‬
printf(“%.1f”, 123.4178856); :‫למשל‬ 
123.4 ‫יודפס‬
printf(“%.3f”, 123.4178856); :‫למשל‬ 
123.418 ‫יודפס‬
printf(“%.4f”, 123.4178856); :‫למשל‬ 
123.4179 ‫יודפס‬
printf(“%.5f”, 123.4178856); :‫למשל‬ 
123.41789 ‫יודפס‬
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫אפשרות נוספת לקלט‪/‬פלט של תווים‬
‫‪6‬‬

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

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

‫;)‪putchar(character‬‬ ‫אופן השימוש ע"י‪:‬‬


‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫תוכנית לדוגמה‬
7
#include <stdio.h>
void main() ,‫התוכנית מגדירה משתנה תווי‬
{
char tav; .tav ‫קולטת ערך תווי למשתנה‬
printf("Enter char\n"); ‫כאן יש הדגמה של שימוש‬
tav=getchar();
putchar(tav); ‫בפונקציות לשימוש בתווים‬
putchar('\n');
printf("Enter char\n"); ‫ובהמשך דוגמה לשימוש‬
flushall();
.‫בפונקציות קלט ופלט רגילות‬
scanf("%c",&tav);
printf("Char = %c\n",tav);
}
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
8

?‫שאלות‬

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


‫עוד פעולות על משתנים‬
‫‪9‬‬

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


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

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


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

‫פעולת ההשמה המקוצרת‬ ‫פעולת ההשמה הרגילה‬


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-4-Program Flow Control 10 Shayke
ShaykeBilu - 2012
Bilu PhD
‫כתיבה מקוצרת של פעולות‬
‫‪11‬‬

‫;‪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-4-Program Flow Control‬‬ ‫‪11‬‬ ‫‪Shayke‬‬
‫‪Shayke‬‬‫‪Bilu‬‬ ‫‪- 2012‬‬
‫‪Bilu‬‬ ‫‪PhD‬‬
‫כתיבה מקוצרת של פעולות‬
‫‪12‬‬

‫;‪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-4-Program Flow Control‬‬ ‫‪12‬‬ ‫‪Shayke‬‬
‫‪Shayke‬‬‫‪Bilu‬‬ ‫‪- 2012‬‬
‫‪Bilu‬‬ ‫‪PhD‬‬
‫תוכנית לדוגמה של כתיבה מקוצרת‬
13
#include <stdio.h>
void main()
{
int mispar;
printf("Enter mispar\n");
scanf("%d",&mispar);
printf(“1) mispar = %d\n",mispar);
printf(“2) ++mispar = %d\n",++mispar);
printf(“3) mispar ++= %d\n",mispar++);
printf(“4) --mispar = %d\n",--mispar);
printf(“5) mispar-- = %d\n",mispar--);
printf(“6) --mispar =%d\n",--mispar);
}
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫טיפוסי משתנים נוספים‬
‫‪14‬‬

‫‪ ‬טיפוס ה‪unsigned -‬‬


‫‪ ‬משמש למספרים חיוביים בלבד !!!‬
‫‪ ‬מגדיל את הטווח פי ‪ ,2‬כיוון שאין צורך לשמור מקום בזיכרון‬
‫לסימן חיובי או שלילי‪.‬‬
‫‪ ‬ההדפסה נעשית באמצעות הסימון ‪%u‬‬
‫• טיפוס ה‪ const -‬משמש לערך שאינו משתנה במהלך‬
‫התכנית‪ ,‬למשל ‪.p -‬‬
‫‪ o‬ההגדרה חוסכת חזרה על מספרים ומונעת שינוי הערך‬
‫בטעות‪const double pai=3.141592654; :‬‬
‫‪ o‬ההדפסה נעשית באמצעות הסימון הרגיל של המשתנה‪.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪14‬‬ ‫‪Shayke Bilu PhD‬‬
‫טיפוסי משתנים בסיסיים נוספים‬
‫‪15‬‬

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


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

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪15‬‬ ‫‪Shayke Bilu PhD‬‬


16

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

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


‫בקרת זרימה‬
‫‪17‬‬

‫‪ ‬פקודת ‪ if‬לבדיקת יחס בין משתנים‬


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

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


?‫מה לדעתכם עושה התוכנית הבאה‬
18
#include <stdio.h>
void main()
{ ‫ מספרים‬2 ‫קלוט‬
int mis1,mis2, max; ‫שלמים‬
printf(“Enter 2 numbers\n”); ‫מהמשתמש‬

scanf(“%d%d”,&mis1,&mis2);
max = mis1;
‫יתבצע רק אם התנאי מתקיים‬
if (max < mis2)
‫הדפס את המספר הגדול יותר למסך‬
max = mis2;
printf(“The maximum is %d\n”,max);
}
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫מה זאת בקרת זרימה?‬
‫‪19‬‬

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


‫‪ ‬לפעמים נרצה שהפקודות שיבוצעו יקבעו ע"י הקלט (או ע"י‬
‫) ‪if ( condition‬‬ ‫חישובים אחרים בתכנית)‪:‬‬
‫{‬
‫‪...‬‬
‫‪...‬‬ ‫בלוק הפקודות יתבצע רק אם התנאי מתקיים‬
‫}‬
‫‪else‬‬
‫{‬
‫‪...‬‬ ‫בלוק הפקודות יתבצע רק אם התנאי לא מתקיים‬
‫‪...‬‬
‫}‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫בקרת זרימה – נושאים‬
20

if - else ‫ משפטי‬
)false-‫ שקר‬,true-‫ תנאים אפשריים (אמת‬
! ‫ שלילה‬, && and-‫ וגם‬,|| or-‫ שילוב של תנאים (או‬
)‫קינון תנאים‬
switch – case ‫ משפטי‬
break -‫ פקודת ה‬
default -‫ פקודת ה‬
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫פקודת ‪if‬‬
‫‪21‬‬

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


‫אם התנאי מתקיים מבצעים אחרת לא ניגשים ל‪else -‬‬
‫‪ ‬המבנה‪:‬‬
‫; פקודה )תנאי( ‪if‬‬
‫למשל‪:‬‬
‫)‪if (mis % 2 == 0‬‬
‫;)”!!! ‪printf (“mis is even‬‬
‫‪else‬‬
‫;)”!!! ‪printf (“mis is odd‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫איזה תנאים אפשר לבטא‬
22

:‫ פעולות השוואה רגילות‬


‫< גדול‬
‫> קטן‬
‫=< גדול או שווה‬
‫=> קטן או שווה‬
= = :‫ שוויון‬
if (mis1 == mis2) printf(“the same numbers\n”);
!= :‫ שוני‬
if (mis1 != mis2) printf(“not the same numbers\n”);

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


‫משפט ‪ - if‬המשך‬
‫‪23‬‬

‫‪ ‬אפשר גם להתנות ביצוע של קבוצת פקודות‪:‬‬

‫)תנאי( ‪if‬‬
‫{‬
‫בלוק פקודות‬
‫‪...‬‬
‫‪...‬‬
‫}‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
if-else ‫משפט‬
24

‫ ניתן לרשום פקודה אחת או מספר פקודות‬if ‫ אחרי משפט‬


:else ‫ במקרה שהתנאי לא מתקיים חובה להוסיף‬,‫שתתבצענה‬
if (‫)תנאי‬
‫;פקודה‬
else
‫;פקודה‬
:‫למשל‬
if (number % 2 == 0)
printf(“%d is even number !!!”,number);
else
printf(“%d is odd number !!!”,number);
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫משפט ‪if-else‬‬
‫‪25‬‬

‫‪ ‬עבור קבוצה של פקודות‪ ,‬יותר מאחת‪ ,‬חובה שנשתמש‬


‫תמיד בסוגריים מסולסלים‪.‬‬
‫‪else‬‬
‫{‬
‫‪......‬‬
‫‪......‬‬ ‫בלוק פקודות‬
‫‪......‬‬
‫}‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫תנאים מורכבים – קינון תנאים‬
26

.‫ לפעמים נדרשים תנאים מורכבים‬


.0 -‫ ציון צריך להיות גדול או שווה ל‬
.100 -‫ ציון צריך להיות קטן או שווה ל‬
!!! ‫ בכל מצב אחר הציון אינו תקין‬

if(grade >= 0)
if(grade <= 100)
printf(“Grade %d is in range\n”, grade);

SCE-Chapter-4-Program
Sami Shamoon College ofFlow
Engineering
Control 26 Shayke
ShaykeBilu - 2012
Bilu PhD
27

?‫שאלות‬

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


‫תנאים לוגיים ‪ -‬טבלאות אמת‬
‫‪28‬‬

‫בהרבה מקרים יש צורך להשתמש בפעולות לוגיות‪ ,‬שיכולות לשלב‬


‫כמה תנאים יחד תוך כדי שרשור הבדיקה של פקודת ה‪.if -‬‬
‫נלמד את ‪ 3‬הפעולות הלוגיות הבסיסיות‪NOT ,OR ,AND :‬‬
‫‪NOT‬‬ ‫‪OR‬‬ ‫‪AND‬‬
‫‪Bit 1‬‬ ‫)!(‬ ‫‪Bit 1 Bit 2‬‬ ‫)‪|| (or‬‬ ‫‪Bit 1‬‬ ‫‪Bit 2‬‬ ‫)‪&&(and‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬

‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬


‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫שילוב תנאים ‪ -‬פעולות לוגיות בסיסיות‬
‫‪29‬‬

‫‪( AND - && ‬וגם) – דורש ששני התנאים ‪ ,‬מצד ימין לסימן‬
‫ומצד שמאל לסימן יתקיימו ויהיו אמת ‪.true‬‬
‫‪ ‬רק במצב כזה כל התנאי הלוגי יתקיים‪.‬‬
‫‪ ‬כאשר התנאי הראשון לא מתקיים לא נבדק התנאי השני‪.‬‬
‫))‪if ((grade >= 0) && (grade <= 100‬‬

‫)‪if (grade >= 0‬‬


‫)‪if (grade <= 100‬‬
‫;)”‪printf(“Grade is good‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫שילוב תנאים – הפעולה הלוגית ‪OR‬‬
‫‪30‬‬

‫‪( OR -|| ‬או) ‪ -‬דורש שלפחות אחד התנאים יתקיים או זה‬


‫שמימין לסימן או זה שמשמאל לסימן‪.‬‬
‫‪ ‬במידה והתנאי הראשון מתקיים לא נבדק התנאי השני‪.‬‬
‫‪ ‬במידה והתנאי הראשון לא מתקיים נבדק התנאי השני‪.‬‬
‫))‪if ((mis>5) || (mis<-5‬‬

‫)‪if (grade >5‬‬


‫;)”‪printf(“Grade > 5‬‬
‫)‪if (grade <-5‬‬
‫;)”‪printf(“Grade < -5‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫שילוב תנאים – הפעולה הלוגית ‪NOT‬‬
‫‪31‬‬

‫! ‪( NOT -‬שלילה) ‪ -‬דורש שהתנאי לא יתקיים‪.‬‬ ‫•‬


‫התנאי אליו צמוד הסימן ! מצד שמאל לא יתקיים‪ ,‬כלומר התנאי‬ ‫•‬
‫שיתקיים בפועל יהיה הפוך מזה הרשום משמאל לסימן !‪.‬‬

‫)‪if (mis>5‬‬ ‫))‪if (!(mis<=5‬‬


‫המשמעות של הדוגמה היא שהצבת הסימן לפני הסוגריים הפכה‬ ‫•‬
‫את הסימן שבתוך הסוגריים => לסימן < שמשמעותו בדיוק‬
‫הפוכה‪.‬‬
‫סדר הקדימות של התנאים הלוגיים הוא‪ ,‬מימין לשמאל‪:‬‬
‫‪ NOT( OR ,AND ,NOT‬יבוצע ראשון)‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫תנאים כמספרים‬
‫‪32‬‬

‫‪ ‬תנאי מתורגם ע"י המחשב לערך מספרי‪:‬‬


‫(שקר==‪)0‬‬ ‫‪ ‬לא נכון (‪  )false‬ערכו שווה ל‪.0 -‬‬
‫(אמת== ‪)!0‬‬ ‫‪ ‬נכון (‪  )true‬ערכו שונה מ‪.0 -‬‬
‫(‪ )3<4‬מתורגם לערך ‪.0‬‬
‫‪ ‬במקום תנאי ניתן לרשום ביטוי שיש לו ערך מספרי‪:‬‬
‫‪ ‬ערך ‪ - 0‬התנאי לא מתקיים (‪.)false‬‬
‫‪ ‬כל ערך אחר ‪ -‬התנאי מתקיים (‪.)true‬‬
‫‪ ‬למשל‪ ,‬המשמעות של )‪ if(0‬היא שהפקודה לא תבוצע‪.‬‬
‫‪ ‬המשמעות של )‪ if(1‬היא שהפקודה תבוצע‪.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫ דוגמא‬- ‫פעולות לוגיות‬
33
#include <stdio.h>
void main() ‫תוכנית לחישוב ציון סופי בקורס‬
{
double exam, exercises, final;
printf(“Enter your exam grade and exercise grade”);
scanf(“%lf %lf”, &exam, &exercises);
if ((exam >= 60) && (exercises >= 60))
{
final = 0.8 * exam + 0.2 * exercises;
printf(“You passed your grade is %g \n”, final);
}
else ‫כלל דווקא נרצה לבדוק את תקינות הקלט ולפעול‬-‫ בדרך‬.‫מניחים כאן שהקלט תקין‬
{ .)‫אחרת אם הקלט לא תקין (למשל לתת הודעה למשתמש ולסיים‬
final = exam;
printf(“You failed your grade is %g \n”, final);
}
} SCE-Chapter-4-Program Flow Control
Shayke Bilu PhD
‫תנאים ‪ -‬המשך‬
‫‪34‬‬

‫בדיוק כמו )‪if (mis!=0‬‬ ‫‪ ‬מה המשמעות של )‪? if (mis‬‬

‫מה המשמעות של )‪? if (mis=5‬‬


‫• כשרושמים פקודת השמה‪ ,‬מתקבל ערך ששווה לערך‬
‫ששמנו במשתנה‪.‬‬
‫• לכן ערכו של (‪ )mis=5‬הוא ‪ ,5‬שהוא שונה מ‪ 0 -‬ולכן‬
‫התנאי מתקיים !‬
‫שימו לב לא לרשום = (השמה מימין לשמאל)‬
‫במקום == (שוויון בין ימין לשמאל)‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫פעולות לוגיות על מספרים – דוגמא‬
35
?‫מה יודפס אחרי קטע התוכנית הבא‬
num1 = 0;
num2 = 1;
num3 = 1;
if (num1 && num2 || num3)
printf(“True\n”);
else
printf(“False\n”);

num1 && num2 0 && 1 0 :AND -‫ קודם מבוצע ה‬.1


0||1 0||1 1 :OR -‫ אחרי זה מבוצע ה‬.2
:‫אם סדר הפעולות היה משתנה ע"י סוגריים‬
(num1 && (num2 || num3)) (0 && (1 || 1)) 0
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫פעולות לוגיות – עוד על סדר הביצוע‬
‫‪36‬‬

‫‪ ‬סדר הפעולות‪:‬‬
‫‪ ‬ל‪ )not( ! -‬יש את הקדימות הגבוהה ביותר‪.‬‬
‫‪ ‬אחרי כן הפעולות אריתמטיות (‪.)% ,/ ,* ,- ,+‬‬
‫‪ ‬אחריהן פעולות ההשוואה (==‪ > ,‬וכו')‪.‬‬
‫‪ ‬ולבסוף‪ ,‬פעולות לוגיות && ו‪.|| -‬‬
‫דוגמאות לתנאים‪:‬‬
‫‪9>8‬‬ ‫‪1‬‬ ‫)‪(5+4>8‬‬ ‫‪‬‬

‫‪0 >= 0 || 1‬‬ ‫‪1 || 1‬‬ ‫‪1‬‬ ‫‪(!1 >= 0||1) ‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫סיכום‪-‬ביניים‬
‫‪37‬‬

‫מהי בקרת זרימה‬ ‫•‬


‫משפטי ‪if-else‬‬ ‫•‬
‫בדיקת תנאים לוגיים‬ ‫•‬
‫ביצוע פעולות לוגיות‬ ‫•‬

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


‫בחירה בין יותר משני מצבים‬
‫‪38‬‬

‫‪ ‬כשיש בחירה בין מצבים רבים אפשר לרשום‪:‬‬


‫)תנאי( ‪if‬‬
‫פקודה‬
‫‪else‬‬
‫(תנאי) ‪if‬‬
‫פקודה‬
‫‪else‬‬
‫(תנאי) ‪if‬‬
‫פקודה‬
‫‪else‬‬
‫פקודה‬
‫‪ ‬כל פקודה יכולה להיות חלק מבלוק של פקודות – בתוספת‬
‫סוגריים מסולסלים התוחמים את התחלת וסוף הבלוק‪.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫בחירה בין יותר משני מצבים‬
‫‪39‬‬

‫‪ ‬ה‪– else-‬ים מתייחסים ל‪-if -‬ים לפי סדר קירבה (מה‪ else-‬אחורה)‪.‬‬
‫‪ ‬למשל‪:‬‬
‫)תנאי( ‪if‬‬
‫פקודה‬
‫‪else‬‬
‫(תנאי) ‪if‬‬
‫(תנאי) ‪if‬‬
‫פקודה‬
‫בתכנות מובנה יש לדאוג לארגון נוח‬
‫‪else‬‬
‫פקודה‬
‫וקריא יותר של הקריאות‪.‬‬
‫‪else‬‬ ‫במקרה זה נקפיד כי פקודת ה‪else -‬‬
‫פקודה‬ ‫תופיע תמיד מתחת ל‪ if -‬התואם‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫ דוגמא‬- ‫בחירה בין יותר משני מצבים‬
40

if((grade>=90)&&(grade<=100)) ‫תרגום ציון‬


printf(“A\n”);
else ‫מספרי לציון‬
if((grade>=80)&&(grade<90)) ‫אמריקאי‬
printf(“B\n”);
else
if((grade>=70)&&(grade<80))
printf(“C\n”);
else
if((grade>=60)&&(grade<70))
printf(“D\n”);
else
if((grade>=50)&&(grade<60))
printf(“You failed!!!\n”);
else
printf(“grade is wrong!!!\n”);
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
‫בחירה בין יותר משני מצבים ‪switch -‬‬
‫‪41‬‬

‫‪ ‬ה‪ switch -‬משמש כבורר בין בחירות ידועות מראש‪.‬‬


‫‪ ‬אם במהלך בדיקת תנאים נעשית השוואה לערכים‬
‫קבועים‪ ,‬ה‪ switch -‬היא פקודה נוחה יותר מה‪if -‬‬
‫‪ ‬קודם נדגים שימוש בפקודת ‪ ,switch‬הכוללת בתוכה‬
‫את ה‪ case -‬וסגירתו ע"י ‪break‬‬
‫‪ ‬בהמשך נתאר ונדגים שימוש בפקודה על חלקיה השונים‬
‫תוך כדי קליטת ערך למשתנה בורר ושימוש בו הן‬
‫כמספר שלם והן כבורר תווי‪.‬‬

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


‫מבנה כללי של ‪switch‬‬
‫‪42‬‬

‫)ביטוי בדיד( ‪switch‬‬ ‫ביטוי בדיד זהו ביטוי שהתוצאה שלו‬


‫{‬ ‫תהיה תמיד אך ורק מס' שלם או תו‬
‫פקודה או פקודות ‪:‬קבוע‪case 1‬‬
‫(אופציונלי) ;‪break‬‬
‫פקודה או פקודות ‪:‬קבוע‪case 2‬‬
‫(אופציונלי) ;‪break‬‬
‫‪…..‬‬
‫(אופציונלי) ‪default:‬‬
‫פקודה או פקודות‬
‫}‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫ דוגמא‬- switch
43
printf(“Enter grade\n”); ?‫מה עושה קטע התוכנית הזה‬
scanf(“%c”, &grade);
switch (grade) ‫מתרגם ציון אמריקאי לטווח מספרים‬
{
case ‘A’: case ‘a’: printf(“90…100\n”);
break;
case ‘B’: case ‘b’: printf(“80…89\n”);
break;
case ‘C’: case ‘c’: printf(“70…79\n”);
break;
case ‘D’: case ‘d’: printf(“60…69\n”);
break;
case ‘F’: case ‘f’: printf(“Failed !!!\n”);
break;
default: printf(“grade is wrong!!!\n”);
}
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
switch ‫מבנה כללי של‬
44

‫ כשנרצה לעשות אותו דבר בכמה‬break ‫לא נכתוב פקודת‬


:‫ לדוגמא‬.‫מקרים‬
switch (tav) ‫השורה תבוצע אם התו הוא סיפרה זוגית‬
{
case ‘0’: case ‘2’: case ‘4’: case ‘6’: case ‘8’:
printf(“Tav = %c It’s an even digit\n”,tav);
break;
case ‘1’: case ‘3’: case ‘5’: ‫השורה תבוצע אם התו הוא‬
case ‘7’: case ‘9’: ‫זוגית‬-‫סיפרה אי‬
printf(“Tav = %c It’s an odd digit\n” ,tav);
break;
default: ‫בכל מקרה אחר‬
printf(“Tav = %c It’s not a digit\n” ,tav);
}
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
switch -‫תוכנית עם שימוש ב‬
45

#include <stdio.h>
void main()
{
int number;
printf("Enter a number between 4..10:");
scanf("%d",&number);
switch(number)
{
case 10:
case 9 : printf("High!!!");
break;
SCE-Chapter-4-Program Flow Control Shayke Bilu PhD
switch -‫תוכנית עם שימוש ב‬
46

case 8 :
case 7: printf("Medium!!!");
break;
case 6:
case 5:
case 4: printf("Low!!!");
break;
default: printf("Incorrect number!!!");
}
}

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


‫נקודה לתשומת לב‬
‫‪47‬‬

‫‪ ‬מילים שמורות הן מילים בשפת ‪.C‬‬


‫‪ ‬כגון‪.if, else, switch … :‬‬
‫‪ ‬או לחילופין‪break, default, case, :‬‬
‫‪ ‬אסור להשתמש בהן כשמות משתנים או פונקציות‪.‬‬

‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬


‫סיכום‬
48

if - else ‫ משפטי‬
)‫ שקר‬,‫ תנאים אפשריים (אמת‬
)‫ קינון תנאים‬,‫ וגם‬,‫ שילוב של תנאים (או‬
switch – case ‫ משפטי‬
break -‫ פקודת ה‬
default -‫ פקודת ה‬

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


49

?‫שאלות‬

SCE-Chapter-4-Program Flow Control Shayke Bilu PhD


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

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


‫בודקת אותם ומציגה את הגדול משלושתם‪ ,‬את הקטן‬
‫משלושתם ואת האמצעי‪.‬‬
‫‪ .2‬כתוב תוכנית הקולטת מהמשתמש מספר שלם ומחזירה את‬
‫הערך המוחלט שלו‪ ,‬בודקת האם הוא זוגי‪ ,‬אם כן מעלה אותו‬
‫בריבוע אחרת מחסירה ממנו ‪.3‬‬
‫‪ .3‬כתוב תוכנית הקולטת מהמשתמש תו ומבצעת את המשימות‬
‫הבאות‪ :‬אם התו הוא אות קטנה מדפיסה את האות הגדולה‬
‫המקבילה לו‪ ,‬אם התו הוא אות גדולה מדפיסה את האות הקטנה‬
‫המקבילה לו אחרת מדפיסה הודעה למשתמש‪.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫תרגילי כיתה‬
‫‪51‬‬

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


‫מתחלק ב‪ ,7 -‬ב‪ 5-‬וב‪ 12 -‬ללא שארית‪ .‬במידה וכן מציגה הודעה‬
‫מתאימה במידה ולא הודעה אחרת‪.‬‬
‫‪ .5‬כתוב תוכנית הקולטת מהמשתמש תו ומבצעת את המשימות‬
‫הבאות‪ :‬אם התו הוא ספרה התוכנית תדפיס את כתובת התא בטבלת‬
‫האסקי של הספרה‪ .‬במידה ולא נקלטה ספרה תוצג הודעה מתאימה‪.‬‬
‫‪ .6‬כתוב תוכנית הקולטת מהמשתמש מחיר פריט‪ ,‬כמות נמכרת‬
‫ומחשבת ומדפיסה מהו הסכום לתשלום כולל מע"מ‪ .‬אם הסכום‬
‫לתשלום הוא גדול מ‪ 1000 -‬ניתן לשלם בארבעה צ'קים‪ ,‬אם בין‬
‫‪ 500‬ל‪ 999 -‬בשלושה צ'קים‪ ,‬אם בין ‪ 200‬ל‪ 499 -‬בשני צ'קים‬
‫אחרת בצ'ק אחד‪.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫תרגילי כיתה‬
‫‪52‬‬

‫‪ .7‬כתוב תוכנית הקולטת מהמשתמש מספר שלם בין שלוש ספרות‪,‬‬


‫מפרקת אותו לספרותיו ובודקת ומדפיסה את הספרה הקטנה‬
‫ביותר‪ ,‬את הספרה הגדולה ביותר‪ .‬במידה והספרות זהות מציגה‬
‫הודעה‪.‬‬
‫‪ .8‬כתוב תוכנית הקולטת ציון של בחינה‪ .‬התוכנית תבדוק האם‬
‫הציון תקין (בין ‪ 0‬ל‪ )100 -‬והאם הציון עובר (מעל ‪ )55‬ומציגה‬
‫הודעה מתאימה לגבי כל בדיקה‪.‬‬
‫‪ .9‬כתוב תוכנית הקולטת מספר בודקת האם חיובי וזוגי‪ ,‬במידה וכן‬
‫מחלקת אותו לשלוש‪ ,‬בודקת שוב האם הוא זוגי‪ ,‬אם כן מחלקת‬
‫אותו לשניים ובודקת האם הוא אי זוגי‪ ,‬במידה וכן מציגה הודעה‬
‫מתאימה‪.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬
‫תרגילי כיתה‬
‫‪53‬‬

‫‪ .10‬כתוב תוכנית המתרגמת ספרה הנקלטת לצופן מורס בעזרת טבלה‪:‬‬


‫ספרה‬ ‫ערך מורס‬
‫‪0‬‬ ‫‪-----‬‬
‫‪1‬‬ ‫‪.----‬‬
‫‪2‬‬ ‫‪..---‬‬
‫‪3‬‬ ‫‪...--‬‬
‫‪4‬‬ ‫‪....-‬‬
‫‪5‬‬ ‫‪.....‬‬
‫‪6‬‬ ‫‪-....‬‬
‫‪7‬‬ ‫‪--...‬‬
‫‪8‬‬ ‫‪---..‬‬
‫‪9‬‬ ‫‪----.‬‬
‫‪SCE-Chapter-4-Program Flow Control‬‬ ‫‪Shayke Bilu PhD‬‬

You might also like