תירגול 4: קלט/פלט (הרחבה) ומשתנים בוליאניים

43
בבבב בבבבב בבבבב בבבבבב4 בבבבבבב בבבבבבבבב)בבבבב( : בבב/בבב בבבבבב- ' בבבב בבבבב בבבבב ב4 1

Upload: derron

Post on 08-Feb-2016

59 views

Category:

Documents


0 download

DESCRIPTION

תירגול 4: קלט/פלט (הרחבה) ומשתנים בוליאניים. קלט/פלט (הרחבה). התקני הקלט והפלט הסטנדרטיים. לכל תוכנה מוגדרים מראש התקן קלט והתקן פלט סטנדרטיים. הקלט הסטנדרטי ( stdin ) מגיע כברירת מחדל מהמקלדת. הפלט הסטנדרטי ( stdout ) נשלח כברירת מחדל למסך. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4

מבוא למדעי המחשב( 4תירגול ( / בוליאניים: ומשתנים הרחבה פלט קלט

1

Page 2: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

2

קלט/פלט )הרחבה(

4מבוא למדעי המחשב מ' - תירגול

Page 3: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

התקני הקלט והפלט הסטנדרטיים

פלט • והתקן קלט התקן מראש מוגדרים תוכנה לכלסטנדרטיים.

הסטנדרטי • ( מגיע כברירת מחדל stdin)הקלטמהמקלדת.

( נשלח כברירת מחדל stdoutהפלט הסטנדרטי )•למסך.

redirectionכשמריצים את התוכנית באמצעות •)כלומר עם הפניה מקובץ או לקובץ, כפי שראינו בתרגול הראשון(, אנו בעצם משנים באופן זמני

את ההתקנים הסטנדרטיים עבור אותה הרצה.

4מבוא למדעי המחשב מ' - תירגול 3

יודעת התוכנית הרצתה איננה בזמן . הסטנדרטיים ההתקנים מקושרים לאן

. ההפעלה מערכת של תפקידה זהו

Page 4: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

redirectionתזכורת -

Page 5: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

(Input Buffer)חוצץ הקלט

בעזרת • קלט קליטת עובדת כיצד להבין היא כעת מטרתנוscanf : , חדש. מושג להכיר עלינו כך הקלט לצורך .חוצץ

• " מערכת י ע המתוחזק זיכרון אזור הוא הקלט חוצץאשר. עד המשתמש קלט את לשמור הוא תפקידו ההפעלה

) ( " מסתיימת שהתוכנית עד או התוכנית י ע נקרא הוא

• ) רק ) לקלט תחכה למשתמש תפנה ההפעלה מערכת . ריק החוצץ ריק כאשר תמיד החוצץ התוכנית .בתחילת

Page 6: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 6

Input Buffer

מן הקלט אל התוכנית

הפעלה מערכת

משתמש

תוכניתscanf(“%d”,&num1);...scanf(“%d”,&num2);

10Input Buffer

10

- , ל פונה ההפעלה מערכת ריק הקלט וחוצץ stdinהיות ) קלט) לקבלת המקלדת הזה במקרה

מקיש שהמשתמש לחוצץ, ENTERברגע נכנסים התווים

- ה) !(ENTERכולל

, לפי הנתונים את ממנו קוראים בחוצץ נתונים יש כאשרככל הסדר

, המבוקש לטיפוס מתאימים הם עוד כל שניתן

! אולם ריק אינו מדלגת על רווחים scanfהחוצץלבנים (רווח,

טאב, וכו'), פרט למקרים שנקלטים תווים או s (a6 או %cמחרוזות (%

Input Buffer

a6

המבוקש לטיפוס מתאים אינו בתור הבא הנתון כאשר

נשאר ) והנתון כשהיה נשאר המשתנה של התוכן נכשלת הקריאהבחוצץ(

Page 7: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 7

Input Buffer

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

הפעלה מערכת

משתמש

תוכניתscanf(“%d”,&num1);...scanf(“%d”,&num2);

10 9

Input Buffer

10 9

Page 8: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 8

דוגמה

? הבאה התוכנית התנהגות מה

int main)( { int a=-1,b=-1,c=-1,d=-1; scanf)“%d%d”, &a, &b(; scanf)“%d%d”, &c, &d(; return 0;}

קלט:10 20 30 40

ערך משתנהa

b

c

d

10

20

30

40

Page 9: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 9

דוגמה

? הבאה התוכנית התנהגות מה

קלט:5 9 80 140 70

ערך משתנהa

b

c

d

int main)( { int a=-1,b=-1,c=-1,d=-1; scanf)“%d%d”, &a, &b(; scanf)“%d%d”, &c, &d(; return 0;}

5

9

80

140

Page 10: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 10

דוגמה

? הבאה התוכנית התנהגות מה

קלט:4 3 2 a1

ערך משתנה

a

b

c

d

int main)( { int a=-1,b=-1,c=-1,d=-1; scanf)“%d%d”, &a, &b(; scanf)“%d%d”, &c, &d(; return 0;}

4

3

2

1-

Page 11: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 11

דוגמה

? הבאה התוכנית התנהגות מה

קלט:p 3 2 a

ערך משתנה

a

b

c

d

int main)( { int a=-1,d=-1; char b=‘b’,c=‘c’; scanf)“%d%c”, &a, &b(; scanf)“%c%d”, &c, &d(; return 0;}

1-

‘b’

‘p’

3

Page 12: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 12

דוגמה

: הבאה הפשוטה בתכנית נתבונןint main)( { char ch1, ch2; printf)“Enter your first char: “(; scanf)“%c”,&ch1(; printf)“Enter your second char: “(; scanf)“%c”,&ch2(; printf)“Your first char was: %c\n”, ch1(; printf)“Your second char was: %c”, ch2(; return 0;}

Page 13: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

(Redirection)איך מתבצעת קריאה מקובץ

אם • משתנים הדברים היו היה מגיע מקובץ stdinכיצד( ולא מהמקלדת?redirection)באמצעות

הראשונה היינו ממלאים את החוצץ scanfבפקודת ה-•בתוכן הקובץ ככל שניתן )גודל החוצץ מוגבל(. משם, הדברים מתנהלים בצורה דומה למה שראינו

עבור המקרה שהמשתמש מקליד מס' נתונים בבת אחת.עם הבדל אחד משמעותי... מהו?•כאשר הקלט מגיע מהמקלדת, אם החוצץ מתרוקן ניתן •

לפנות למשתמש בבקשה להכניס קלט נוסף. כאשר הקלט מגיע מקובץ, לעומת זאת, יכול להיות שנגיע לסוף

הקובץ לפני שהסתיימה הדרישה לקלט.

Page 14: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

EOFהקבוע

הנקרא, • מיוחד קבוע ישנו המסמן EOF (End Of File)לכןאת סוף הקלט. סימן זה מוחזר באופן

אוטומטי למערכת ההפעלה כשהקובץ נגמר.מרגע שמערכת ההפעלה מזהה שהגענו לסוף •

הקובץ, בכל בקשת קלט של התוכנית תוכן . EOFהמשתנים אינו משתנה ומוחזר

כאשר הקלט מגיע מהמקלדת, ניתן להכניס • מלאכותי בקלט באמצעות לחיצה EOFסימן

שימו במאכ(. Ctrl+D במקלדת )Ctrl+Zעל במסך בשורה חדשה Ctrl+Zלב! יש ללחוץ על

.EOFעל מנת שיקלט

Page 15: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

scanfערך החזרה של

• ' שבגללן סיבות מס נכשלת: scanfראינולמשל אם היא מצפה לקרוא מספר

לפני EOFוקוראת תו, או כשמתקבל שהיא קוראת את כל הדגלים.

איך נגלה אם קריאת הקלט נכשלה •ומה היתה הסיבה לכך?

scanfע"י בדיקת ערך ההחזרה של •

Page 16: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

scanfערך החזרה של

של • ההחזרה הוא מספר שלם המייצג את scanfערך הצליחה "לאכול". scanfמספר הדגלים )%( ש-

אם הקריאה של דגל כלשהו נכשלה, לא יהיה •ניסיון להמשיך ולקרוא את שאר הדגלים.

יהיה scanfאם הגיע סוף הקלט, ערך החזרה של •EOF-קבוע המוגדר ב( DEFINE בקובץ stdio.h

(.-1וערכו :scanfדוגמאות לשימוש בערך ההחזרה של •

int res = scanf)"%d", &x(; שמירת הערך

if )scanf)"%d", &x(==1( 1השוואת הערך לקבוע

Page 17: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

- דוגמאותscanfערך החזרה של

•? התוכנית בסיום המשתנים ערכי יהיו מה

int i, res;

char c;

res = scanf)"%d%c", &i, &c(;

> 3415abcd

i=3415 c='a' res=2

> 3415 abcd

i=3415 c=' ' res=2

scanfבשני המקרים הללו , כי היא הצליחה 2מחזירה

דגלי הבקרה.2לאכול את

Page 18: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

- דוגמאותscanfערך החזרה של

> 3415abcd

x=3415 y=??? res=1

scanf כי היא 1 תחזיר ,הצליחה לאכול רק את הדגל

הראשון.

> abcd

x=??? y=??? res=0

scanf כי היא לא 0 תחזיר ,הצליחה לאכול אף דגל.

int x, y, res;

res = scanf)"%d%d", &x, &y(;

Page 19: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

בדיקת קלט

•- ב משתמשים אתם בתרגילי scanfכאשר . לעשות, ניתן עבדה שהיא לוודא עליכם הבית

: שלה ההחזרה ערך בדיקת באמצעות זאתלקלוט – אמורה הייתה היא אם :2למשל מספרים

if)scanf)"%d%d",&d,&n(!=2({

printf)“Error”(;

...

}

Page 20: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

putchar ו-getcharהפונקציות

קלט • על מעבר עבור במיוחד שימושיות פונקציות שתיהן- תו -getcharתו בקובץ ) putcharו מוגדרות שתיהן

stdio.h.)

את: תאור קוראת הפונקציה- מ הבא stdinהתו

ומחזירה אותו. אם אין יותר תווים לקרוא,

היא מחזירה את הערך EOF

: אין.פרמטרים

ASCII: קוד ערך החזרהשל התו שנקרא מהקלט

.EOFאו

int getchar)void(;

בודד : תאור תו כותבת הפונקציה, ומחזירה stdoutל-

אותו. במקרה של כישלון, הפונקציה מחזירה במקום

.EOFהתו את הערך התו שיש -c: פרמטרים

(ASCIIלכתוב )קוד התו שנכתב, : ערך החזרה

במקרה תקלה EOFאו )נדיר מאוד(.

int putchar)int c(;

Page 21: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

תרגיל סיכום: שיכפול קלט

(1תרגיל מקובץ: ) או ממקלדת קלט המקבלת תכנית כתבולפלט אותו ומוציאה

מה: חשבו טובה כזו תכנית למה תוהים אתם אם הערהעם התוכנית את תפעילו כאשר התוצאה redirectionתהיה

אחר קובץ לתוך מקובץ

Page 22: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

תרגיל סיכום: פתרון

int main)( { int ch = getchar)(; while )ch != EOF( { printf)“%c”,ch(; ch = getchar)(; } return 0;}

בערך לשימוש לב נשיםשל getcharהחזרה

- ה מופיע whileמבנה הזהאנחנו בהן בתוכניות

כל את לקרוא רוציםהקלט

Page 23: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

גלו את הטעות

int ch = getchar)(;while )ch != EOF( { … ch= getchar)(;}

char ch;int res = scanf)%c,&ch(;while )res != EOF( { … res = scanf)%c,&ch(;}

char ch = getchar)(;while )ch != EOF( { … ch= getchar)(;}

char ch;scanf)%c,&ch(;while )ch != EOF( { … scanf)%c,&ch(;}

Page 24: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

24

משתנים בוליאניים

4מבוא למדעי המחשב מ' - תירגול

Page 25: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 25

ערכי אמת

• : אמת ערכי שני בין -trueמבחינים falseו •: אמת ערך להתאים ניתן שלם מספר לכל אמת 0הערך ערך בעל falseהוא אמת ערך בעל הוא אחר ערך trueכל

Page 26: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 26

ערכי אמת - דוגמה

Page 27: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 27

boolהטיפוס

אמת Cב-• ערכי לייצוג ייעודי טיפוס קייםהספריה • את לכלול יש בו להשתמש כדי

stdbool.h:boolמוגדר בה הטיפוס •0 שמוגדר כ-falseהקבוע •1 שמוגדר כ-trueהקבוע • ולהיפך bool ל-intההמרה מ-•

מתבצעת לפי ערכי האמת

Page 28: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 28

- דוגמהboolהטיפוס

משתני • בין להשוות מומלץ .boolלערכי intלא? פה קורה היה מה

#include <stdbool.h>...int n;scanf("%d", &n);bool notZero = n;if (notZero) { printf("n is non-zero!");}

if (n != true) { printf("n is zero");}

Page 29: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 29

אופרטורי השוואה

המחזירים • בינאריים בהתאם 1או 0אופרטורים: ההשוואה לנכונות

Page 30: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 30

אופרטורים לוגיים

שלהם • לפרמטרים המתייחסים אופרטוריםומחזירים אמת לפירוט 1או 0כערכי בהתאם

בטבלה:

Page 31: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 31

דוגמאות

הביטוי תוצאה

!5

!!5

5 && 0

5 && 'A'

5 || (-5)

5 || 0

0

0

1

1

1

1

Page 32: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 32

דוגמאות בקוד

if (0 <= n && n <= 10) { printf("n is between 0 and 10");

}

if (n < 0 || n > 10) { printf("n smaller than 0 or larger than 10");}

if (n % 7 == 0) { printf("n is divisible by 7");}

Page 33: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 33

תרגיל מהעבר

שלם: 2תרגיל מספר כקלט המקבלת תכנית כתבובטווחזאת. 1-10 תדפיס התכנית ראשוני הוא המספר אם

. - זוגי אי או זוגי הינו המספר האם התכנית תדפיס ואחרתבין בטווח אינו המספר הודעת 1-10אם להדפיס יש

שגיאה.עם • פתרנו הקודמת עם. switchבפעם נפתור איך

? בוליאניים ואופרטורים השוואה אופרטורי

Page 34: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 34

- פתרון2תרגיל

int num;scanf)“%d”,&num(;if )num < 1 || num > 10({

printf)“Error!\n”(;}else if )num==2 || num==3 || num==5 || num==7({

printf)“Number is prime\n”(;}else if )num % 2 == 0({

printf)“Number is even\n”(;}else printf)“Number is odd\n”(;

Page 35: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 35

Lazy Evaluationמנגנון

מה • שיודעים ברגע נעצר לוגי ביטוי של החישוב. ערכו יהיה

•- ו || לאופרטורים מתייחס זה &&מנגנוןA && B

- ברור לא מתקייםAאם ולכן 0שהתוצאה היא החישוב יעצור.

A || B מתקיים - ברור Aאם

ולכן 1שהתוצאה היא החישוב יעצור.

Page 36: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 36

דוגמאות

השני 1מוחזר, speed>90אם • התנאי את לבדוק בליבדיקות • כמה לשלב מאפשרת המקוצרת הלוגיקה תכונת

, של בתוצאה תלויה אחת בדיקה כאשר גם זמנית בו: קודמת בדיקה

, אם הזו ימין x=0בדוגמה בצד החלוקה את נבצע לא

int speed = 100;(speed > 90) || (speed < 55);

if ((x != 0) && (1/x > 12))

Page 37: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 37

3תרגיל

•? הבאה התוכנית תדפיס מה#include <stdio.h>#include <stdbool.h> int main)( {

int i=10;bool stop=false;while)!stop && )i-- >= 0(({

stop=!)i%5(;printf)"%d\n",i(;

}printf)"%d\n",i(;return 0;

}

Page 38: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 38

)מתוך ש.ב(4תרגיל

אי ספרות של זוגי אי מספר מכיל הוא אם בריבוע זוגי אי הוא מספרזוגיות.

המספר: , 12345לדוגמה מכיל שהוא כיוון בריבוע זוגי אי 3הוא( - זוגיות אי (1,3,5ספרותהמספר , 1234לעומתו מכיל שהוא כיוון בריבוע זוגי אי לא 2הואזוגיות ) אי (. 1,3ספרות

) ממש. ) הקטן חיובי מספר מהמשתמש הקולטת תוכנית לכתוב יש אבריבוע. זוגי אי הוא המספר אם -ממיליון

•: להדפיס ישThe number is double odd: v

•: להדפיס, יש אחרתThe number is double odd: x

Page 39: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 39

- פתרון4תרגיל int val, oddCounter = 0;scanf)"%d", &val(;while )val > 0({ int digit = val % 10; if )digit % 2( { oddCounter++; } val /= 10;}printf)“The number is double odd: %c”,

)oddCounter % 2( ? ‘v’ : ‘x’(;

Page 40: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 40

)המשך(4תרגיל

, הפעם. רק התכנית אותה את שוב לכתוב יש בתנאי ) במשפטי שימוש , ?:( if, else, switchללא

בוליאניים: במשתנים השתמשו רמז

Page 41: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 41

- פתרון4תרגיל int val, oddCounter = 0;scanf)"%d", &val(;while )val > 0({ int digit = val % 10; if (digit % 2) { oddCounter++; } val /= 10;}printf)“The number is double odd: %c”,

(oddCounter % 2) ? ‘v’ : ‘x’(;

Page 42: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 42

- פתרון4תרגיל int val, oddCounter = 0;scanf)"%d", &val(;while )val > 0({ int digit = val % 10; bool isDigitOdd = digit % 2; oddCounter += isDigitOdd;

val /= 10;}printf)“The number is double odd: %c”,

(oddCounter % 2) ? ‘v’ : ‘x’(;

Page 43: תירגול 4:  קלט/פלט  (הרחבה) ומשתנים בוליאניים

מבוא למדעי המחשב מ' - תירגול 4 43

- פתרון4תרגיל int val, oddCounter = 0;scanf)"%d", &val(;while )val > 0({ int digit = val % 10; bool isDigitOdd = digit % 2; oddCounter += isDigitOdd;

val /= 10;}bool isCounterOdd = oddCounter % 2; printf)“The number is double odd: %c”,

'x'+isCounterOdd*('v'-'x')(;