םיליגרת תרבוח c++ תפשב בשחמה יעדמל אובמkerenk/intro to c++/introtoc++...

40
מבוא למדעי המחשב בשפתC++ - חוברת תרגילים הגשת התרגילים היא ביחידים, יש להגיש במערכת ה- moodle את כל הפרוייקט כקובץZIP . חובה להגיש תרגיל שמתקמפל+ דוגמאות פלט של ההרצה. יש להקפיד על הדברים הבאים: שמות משתנים ברורים שימוש בקבועים והגדרתם מעל ה- main קוד מרווח ומאוורר הפרדת חלקי השאלה השונים ע" י שורת רווח: הגדרת משתנים, קלט, חישוב ולבסוף הפלט. תוכן עניינים1 . אבני הבניין של שפתC ++ ................................ ................................ ................................ ................... 2 2 . ביטויים לוגיים ומשפטי תנאי................................ ................................ ................................ ................. 3 3 . לולאות................................ ................................ ................................ ................................ ................ 5 4 . מערכים ומטריצות................................ ................................ ................................ .............................. 22 5 . פונקציות................................ ................................ ................................ ................................ ............ 21 6 . מחרוזות................................ ................................ ................................ ................................ ............ 22 7 . מצביעים................................ ................................ ................................ ................................ ............ 23 8 . אריתמטיקה של מצב יעים................................ ................................ ................................ ................... 25 9 . רקורסיות................................ ................................ ................................ ................................ ........... 22 11 . מיונים וחיפושים................................ ................................ ................................ ................................ . 32 11 . מבנים................................ ................................ ................................ ................................ ............... 33 12 . הקצאות דינאמיות................................ ................................ ................................ .............................. 33 13 . הקצאות דינאמיות ומבנים................................ ................................ ................................ .................. 31

Upload: others

Post on 10-Sep-2019

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

תרגיליםחוברת - ++Cמבוא למדעי המחשב בשפת

.ZIPכקובץ את כל הפרוייקט moodle -יש להגיש במערכת ה, הגשת התרגילים היא ביחידים

.דוגמאות פלט של ההרצה+ חובה להגיש תרגיל שמתקמפל

:יש להקפיד על הדברים הבאים

שמות משתנים ברורים

שימוש בקבועים והגדרתם מעל ה- main

מרווח ומאווררקוד

חישוב ולבסוף הפלט, קלט, הגדרת משתנים: י שורת רווח"הפרדת חלקי השאלה השונים ע.

תוכן עניינים

C++ ................................................................................................................... 2 שפת של הבניין אבני .1

3 ................................................................................................................. תנאי ומשפטי לוגיים ביטויים .2

5 ................................................................................................................................................ לולאות .3

22 .............................................................................................................................. ומטריצות מערכים .4

21 ............................................................................................................................................ פונקציות .5

22 ............................................................................................................................................ מחרוזות .6

23 ............................................................................................................................................ מצביעים .7

25 ................................................................................................................... יעיםמצב של אריתמטיקה .8

22 ........................................................................................................................................... רקורסיות .9

32 ................................................................................................................................. וחיפושים מיונים .11

33 ............................................................................................................................................... מבנים .11

33 .............................................................................................................................. דינאמיות הקצאות .12

31 .................................................................................................................. ומבנים דינאמיות הקצאות .13

Page 2: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

++Cאבני הבניין של שפת .1

!להשתמש בקבועים הקפידו

. כתבו תוכנית הקולטת מהמשתמש רדיו של מעגל ומדפיסה את היקף ואת שטח המעגל .1

. ח"ש 22בקפיטריה ניתן להזמין טוסט שמחירו .2

.ח נוספים"ש 2ומחיר כל תוספת הינו , ('תירס וכו, זיתים, כגון פטריות" )זולות"ניתן לבקש להוסיף תוספות

ומחיר כל תוספת הינו , ('צהובה וכו-אקסטרה גבינה, נה בולגריתכגון גבי" )יקרות"ניתן לבקש להוסיף תוספות

.ח נוספים"ש 3

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

: דוגמאות

ח"ש 14סט בתוספת זיתים יש לשלם עבור טו - ח"ש 16ת זיתים ופטריות יש לשלם עבור טוסט בתוספ - ח"ש 17בולגרית יש לשלם וגבינה עבור טוסט בתוספת זיתים - ח"ש 21קרות ותוספת זולה יש לשלם תוספות י 2עבור טוסט עם -

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

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

:מספקים את שירות ההובלה של הרהיט בתשלום נוסף" וויםרהיטים ש"בחנות .3

.ג של הרהיט"ח נוסף בעבור כל ק"ש 1עבור כל קומה יש לשלם . ח"ש 5מ הובלה יש לשלם "עבור כל ק

מחיר , כאשר ההוצאה כוללת את מחיר הרהיט, יש להציג ללקוח מהי הוצאותו הסופית בעבור הרכישה

.למוביליםטיפ ממחיר הרהיט % 11 -ההובלה ו

: דוגמא

סכום , מ מהחנות"ק 11במרחק 3עבור לקוח שגר בקומה , ג"ק 81ח ומשקלה "ש 5111עבור ספה שעולה

:הוצאתו הוא

ח"ש 5791= 5111*1.1+ 3*81*1+ 5*11+ 5111

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

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

Page 3: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

ביטויים לוגיים ומשפטי תנאי .2

.ובו פרוייקט לכל אחת מהשאלות הבאות solutionיש לייצר

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

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

.אך יחד עם זאת יש לו הוצאות שוטפות, הוא עובד ומרוויח כסף. פלוני רוצה לקנות טוסטוס .1

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

.כמה חודשים יהיה עליו לעבוד עד אשר יוכל לקנות אותו, כן

, B -ו Aעליכם לקלוט מהמשתמש את מקדמי המשוואה . Ax+B=0כתבו תוכנית הפותרת את המשוואה הבאה .2

.אין פתרון או אינסוף פתרונות, Xערכו של : ולהציג את פתרון המשוואה

:הבאים הקריטריונים י"עפ לחתונה ק'בצ לתת כסף יש כמה המחשבת תוכנית כתוב .3

055 הינו הבסיס סכום קרובים כחברים מוגדרים הכלה או החתן אם ₪

1555 הוא הבסיס משפחה-בני הינם הכלה או החתן אם ₪

205 הינו הבסיס סכום אחר מקרה בכל ₪

בן אתה אם אלא, נוספים ₪ 05 לשים יש, שנים 3 מעל היא הזוג מבני אחד עם ההיכרות אם- שפחהמ

משפחה-בן אתה אם אלא, מהסכום ₪ 05 להוריד יש שעה מעל לחתונה הנסיעה זמן אם

.ק'הצ לגובה ההמלצה את להציג ולבסוף לקלוט שיש הנתונים מהם להחליט עליכם

:הבאות ההגבלות י"עפ ספרים להשאיל יכול מנוי שכל כך, מנויים יש בספריה .4

במקרה, ספר משאיל כאשר מנוי. ספרים 3 עד להשאיל יכול ילד ומנוי, ספרים 0 עד להשאיל יכול מבוגר מנוי

יכול שעדיין הספרים במספר תלות ללא) נוסף ספר לו להשאיל ניתן לא, חודש מעל שמוחזק ספר בבית לו ויש

(.להשאיל

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

.לקלוט יש נתונים אילו להחליט עליכם

אחד על לפחות עונה האם הוא לבדוק יש ליליפוט במכללת ללימודים מתקבל סטודנט האם להחליט מנת על .5

:הבאים הקריטריונים מן

.152 לפחות בגרות מוצעממ -

Page 4: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

האנגלית חלק על שהציון וגם 140 לפחות הינו הכמותי החלק על שהציון וגם, 055 לפחות וכמטריכפסי וןצי -

.125 לפחות הינו

:הינה השקלול נוסחאת כאשר, 055 לפחות הוא הפסיכומטרי ציון עם הבגרות ממוצע יקלולש -

(פסיכומטרי ציון) (בגרות ציון/) + 0.8 * 1.2

:דוגמאות

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

גוליבר של המשוקלל וציונו מאחר. 599.1666 = 95/1.2 + 0.8*650: המשוקלל ציונו הומ נבדוק, הראשונים

.ללימודים מתקבל אינו הוא 055 -מ קטן

היה המשוקלל וציונו מאחר ללימודים מתקבל גוליבר היה 50 בגרות וציון 005 פסיכומטרי עבור, זאת לעומת

.600.8333 = 97/1.2 + 0.8*650 :055 מעל

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

.ליליפוט במכללת ללימודים

.המציגה הצעת אימון לאדם הרוצה להיכנס לכושר ריצה בו תוכניתכת .6

.השבועות שכבר התאמן מספרועל ,מנוחההמבוסס על דופק ה, ההצעה מתבססת על כושרו של האדם

:נתונים להלן טבלה עם

71דופק מנוחה מעל 71 -ל 61דופק מנוחה בין 61דופק מנוחה עד

מ"ק 3 מ"ק 3 מ"ק 3 2-1שבוע

מ"ק 3 מ"ק 5 מ"ק 5 4-3שבוע

מ"ק 3 מ"ק 8 מ"ק 11 והילך 5שבוע

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

ממוצע , (ציון מתוך מאה) ציון בחינה: מספרים שלמים המיצגים 3אשר מקבלת מהמשתמש כתבו תכנית .2

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

:פי הנוסחה הבאה

(.נכשל) 0הציון הסופי הוא , תרגילי בית כולל 3אם הוגשו עד

ראו בהמשך הסבר )תקף בציון הסופי 25%ממוצע תרגילי הבית יהווה : תרגילי בית 6או 5אם הוגשו

במידה והסטודנט קיבל . לפחות 55במידה והסטודנט עבר את הבחינה בציון "( ציון תקף"מהו

.הציון הסופי יהיה זהה לציון הבחינה, ומטה 53בבחינה ציון של

תרגילי בית 1או 2אם הוגשו:

o ומטה 53בחינה הוא אם ציון ה:

Page 5: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

מגן% 25אז תרגילי הבית מהווים , ומעלה 01אם ממוצע תרגילי הבית הוא.

מגן% 20אז תרגילי הבית מהווים , 01אם ממוצע תרגילי הבית הוא פחות מ.

o מגן% 30תרגילי הבית מהווים : 200ל 55הציון בבחינה נע בין.

גם אם הוא מוריד את , רגילי הבית ישוקלל בכל מקרההכוונה היא שהציון של ת, כאשר כתוב תקף: הערהאם ורק אם הוא מעלה את הכוונה היא שהציון של תרגילי הבית ישוקלל , כאשר כתוב מגן. הממוצע .הממוצע

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

.לעיל

לולאות .3

שימו לב שתפריט אמור לחזור על עצמו עד אשר המשתמש ) :כיל את האפשרויות הבאותכתוב תפריט המ

!(:מבקש לצאת

ניסוח ופתרון בעיות : הרצאה"ימין מהמצגת / י הוספת ספרות משמאל "לעבור על דוגמאות יצירת מספרים ע: טיפ

.moodle -ב 3שנמצאת תחת שבוע " ולאותעם ל

.והצג כמה פעמים הספרה מופיעה במספר, קלוט מהמשתמש מספר וספרה .1

.מופיעה פעמיים 3מאחר והספרה , 2יוצג הערך 3והספרה 123032עבור המספק : דוגמא

של מיקומה. יש לקלוט מהמשתמש מספר ולייצר מספר חדש המכיל רק את הספרות שבמיקומים הזוגיים .2

.5הספרה הימנית ביותר הוא

.130יש לייצר את המספר 12340עבור המספר : דוגמא

יש להציג את מספר הספרות . מספרים בעלי מספר ספרות זהה 2מהמשתמש כתוב תוכנית הקולטת .3

.במיקומים זהים שבעלות ערך זהה

באותם מיקומים בשני נמצאות 0-ו 2, 1כי הספרות 3יוצג 12500 -ו 12340עבור המספרים : דוגמא

.המספרים

אלגוריתם ידי על מחושבת והיא הזהות מספר של, ביותר הימנית, התשיעית הספרה היא הביקורת ספרת .3

Luhn ,מעבדות איש פיתח שאותו IBM הזהות למספרי רק לא ביקורת ספרות לחישוב המשמש, 05-ה בשנות

.הישראלים

שמשמאל הספרות משמונה אחת לכל שניתנת זהה משקל רתמסד מורכבת הביקורת ספרת לחישוב הנוסחה

, 1, 2, (הראשונה לספרה) 1: משמאל הספרות משמונה אחת לכל שניתנת המשקל סדרת. זהות מספר בכל

2 ,1 ,2 ,1 ,2.

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

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

Page 6: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

ההכפלה תוצאת. הזהה המשקל סדרת לפי 2 הוא שלה המשקל, 5 היא הזהות מספר של השישית הספרה

.החיבור לכל 10 את מוסיפים ולא, 0-ו 1 את היתר בין מחברים, הספרות כל של החיבור בפעולת. 10 היא

. מעלה כלפי 15 של הקרובה לכפולה משלימים בהכפלה שנוצרו הספרות כל בחיבור תקבלשמ הסכום את

. הביקורת ספרת הוא ההשלמה לצורך שנדרש ההפרש. 05-ל מעגלים, 45 הוא שהתקבל הסכום אם, למשל

.2 זה במקרה

05502134-5(: פיקטיבי זהות מספר) לדוגמה חישוב

2x1=7 , 8x2=16, 9x1=9, 6x2=12, 2x1=2, 1x2=2, 3x1=3, 4x2=8

0+1+0+5+1+2+2+2+3+5: שהתקבלו הספרות כל את מחברים

.41: שהתקבל הסכום

שהוא, 41-ל 05 בין ההפרש) להשלמה שנדרש ההפרש. 05-ל מעגלים 15 של הקרובה לכפולה להגיע כדי

.הביקורת ספרת היא 5 לכן. 5 הוא( החיבור סכום

html-http://www.ynet.co.il/articles/0,7340,L.4483052,00: מקור התיאור

הודעה למשתמש והצג, (ספרות 5או 5כ "סה) זהות הכולל ספרת ביקורת תעודת מספר מהמשתמש קלוט

.ל"הנ האלגוריתם בדיקת י"עפ תקין המספר האם

: ת מהמשתמש מספר ומייצרת מספר חדש כך שכל זוג ספרות יוחלף באופן הבאכתוב תוכנית הקולט .5

ספרת האחדות תהפוך להיות ספרת העשרות וספרת העשרות תהפוך להיות ספרת האחדות -

ספרת המאות תהפוך להיות ספרת האלפים וספרת האלפים תהפוך להיות ספרת המאות -

'וכו -

.לית תשאר במקומההספרה השמא, זוגי-במידה ומספר הספרות אי

:דוגמאות

2325326התוכנית תייצר ותציג את המספר 2233562עבור המספר

2812התוכנית תייצר ותציג את המספר 8221עבור המספר

ומימינן הספרות בסדר , יש לקלוט מהמשתמש מספר ולייצר מספר חדש כך שספרותיו הן כמו המספר המקורי .0

.הפוך

.223322לייצר את המספר יש 223עבור המספר :דוגמא

. -עד אשר יוקלד ביטוי עם הסימן + כתוב תוכנית הקולטת מהמשתמש ביטויים חשבונים הכוללים את הסימן .2

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

.המספרים והספרות שמימין הן תוצאת חיבור המספרים

:מאותדוג

Page 7: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

.ניתן להניח שהמספר הראשון גדול מהמספר השני

ak-a.akamaihd.net/hphotos-f-sphotos-https://fbcdn-: התמונה לקוחה מתוך

prn2/t1/1888550_10152193586557878_1560289186_n.jpg

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

:באופן הבא intהתוכנית תבנה מספר חדש מטיפוס

ר השני במספר החדשספרת האחדות במספר הראשון תעיד כמה פעמים תופיע ספרת האחדות מהמספ - ספרת העשרות במספר הראשון תעיד כמה פעמים תופיע ספרת העשרות מהמספר השני במספר החדש - 'וכו -

.י סדרן במספר המקורי"סדר הספרות במספר החדש יהיה עפ - .ספרות בלבד 5 -ל המספר החדש מוגבל -

:דוגמה

Enter 2 numbers with the same number if digits: 123 456 res = 455666

תופיע 4תופיע פעמיים במספר החדש והספרה 5הספרה , פעמים במספר החדש 3תופיע 6הספרה , כלומר

.פעם אחד בלבד

:דוגמה

Enter 2 numbers with the same number if digits: 2323 6789 res = 677788999

Page 8: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

תופיע 7רה הספ, תופיע פעמיים במספר החדש 8הספרה , פעמים במספר החדש 3תופיע 9הספרה , כלומר

ספרות במספר 9 -תופיע פעם אחת בלבד מאחר ולא יתכן שיהיו יותר מ 6פעמים במספר החדש והספרה 3

.החדש

:דוגמה

Enter 2 numbers with the same number if digits: 333 678 res = 666777888

כך ( מימין לשמאל)בתוכנית זו נחלק את המספר לחלקים .מספר וספרהכתוב תוכנית הקולטת מהמשתמש .9

הוא ישאר באורך , ק האחרון אין מספיק ספרותללחובמידה . שאורכו של כל חלק יהיה כערך הספרה שנקלטה

.הנותר

:למשל

22|33|56: נחלק את המספר לחלקים הבאים 2והספרה 223356עבור המספר

2|233|562: מספר לחלקים הבאיםנחלק את ה 3והספרה 2233562עבור המספר

.שסדר הספרות בכל חלק הפוך תייצר מספר חדש כךהתוכנית

:דוגמה

Enter a number and a digit: 12345678 3 res = 21543876

ולאחר שהופכים את סדר הספרות בכל חלק המספר החדש שמתקבל 12|345|678: חלקי המספר המקורי

21|543|876הוא

:דוגמה

Enter a number and a digit: 123456 2 res = 214365

. תוכנית הקולטת מהמשתמש מספרכתוב .20

והמשולש העליון * ן שמאלי של הריבוע יהיה עם המשולש התחתו: התוכנית תציג למסך ריבוע באופן הבא

.#הימני יהיה עם

:דוגמאות

:יוצג הריבוע הבא 0המספר עבור

Page 9: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

:יוצג הריבוע הבא 0עבור המספר

.כתוב תוכנית הקולטת מהמשתמש מספר ומציירת משולש שווה שוקיים שבסיסו למעלה .22

(:הם רק כדי שיהיה לכם יותר נוח לנתח הקווים)יצוייר המשולש הבא 2עבור המספר : דוגמא

*-*-*-*-*-*-* -*-*-*-*-*-* --*-*-*-*-* ---*-*-*-* ----*-*-* -----*-* ------*

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

.שבסיסו העליון והתחתון הם ברוחב הבסיס שנקלט

:ותדוגמא

:יצויר שעון החול הבא base=3עבור

:יצויר שעון החול הבא base=5עבור

Page 10: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

, אורכו ורוחבו של כל ריבוע יהיה כערך המספר שהוקלד: של ריבועים" שטיח"קלוט מהמשתמש מספר והדפס .13

.וכן בכל שורה ועמודה יהיו ריבועים כערך המספר שהוקלד

:דוגמאות

Page 11: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

קלוט . עץ ברוש מורכב מרצף של משולשים אחד מתחת לשני ולבסוף גזע. ית שתדפיס עץ ברושכתוב תוכנ .14

ובסוף , משולשים 3מתחת לשני -יש לצייר ברצף אחד. שיהווה את בסיס המשולשזוגי -אימהמתשמש מספר

.זוגי שהוקלד מתחת למרכז המשולש האחרון-לצייר את גזע העץ שהוא עמוד בגובה המספר האי

:3עבור הערך , לדוגמא

Page 12: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

התוכנית תדפיס משולש שווה שוקיים . Xהקוראת מהמשתמש מספר וכנית ב כדי להקל את העבודה תתחילו

.Xשבסיסו

(:כדי שיהיה לכם יותר נוח לנתח את הפלט, בדוגמא יש מקפים במקום רווחים)הפלט יראה כך X=0עבור , למשל

ומטריצות מערכים .4

שימו לב שתפריט אמור לחזור על עצמו עד אשר המשתמש ) :רויות הבאותכתוב תפריט המכיל את האפש

!(:מבקש לצאת

הראשון זהים המערךיש להציג העם ערכי . כל אחד 5בגודל מערכים 2כתוב תוכנית הקולטת מספרים לתוך .2

.אבל בסדר הפוך, השני המערךלערכי

: דוגמאות

דעה שהאוספים הפוכיםתוצג ההו 2 2 3 3 5והאוסף 5 3 3 2 2עבור האוסף -

וצג ההודעה שהאוספים אינם הפוכיםת 2 2 3 5 3והאוסף 5 3 3 2 2בור האוסף ע -

גדול המערךהתוכנית תציג האם הערך של כל איבר . 5בגודל מערךכתוב תוכנית הקולטת מספרים לתוך .2

.מהערך שמשמאלו

:דוגמאות

.מהערך שמשמאלותוצג ההודעה שכל ערך גדול 20 22 32 65 81עבור האוסף -

.תוצג ההודעה שלא כל ערך גדול מהערך שמשמאלו 20 22 20 65 81עבור האוסף -

.האיברים הראשונים 2-ערכים ל וקלוט 20בגודל מערךוב תוכנית המגדירה כת .3

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

.מערךהלבסוף יש להציג את ערכי

:דוגמא

:לבסוף יראה כך המערך, 6וכמספר השני את 2אם קלטנו כמספר הראשון את

2,6,8,14,22,36,58,94,152,246

שווה ערכים זוג כל האם תציג התוכנית. שלם ומספר 0 בגודל מערך מהמשתמש הקולטת תוכנית כתוב .3 .שהתקבל למספר

Page 13: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

:דוגמא

האיבר סכום, 0 הוא והשני הראשון האיבר וסכום מאחר" אמת" צגיו 0 והמספר[ 4, 3, 4, 3, 4] המערך עבור .'וכו 0 הוא השלישי עם השני

.בגודל זהה מערכיםכתוב תוכנית הקולטת ערכים לשני .5

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

: כלומר

הראשון במערך 1 -השני שווה לערכו של האיבר ה במערך 2-של האיבר ההאם ערכו

הראשון במערך 2 -השני שווה לערכו של האיבר ה במערך 3-וגם האם ערכו של האיבר ה

הראשון במערךהשני יבדק למול האיבר האחרון במערךערכו של האיבר הראשון . וכן הלאה

:דוגמאות

:trueהבאים יוצג המערכיםעבור שני

5 4 3 2 1

8 6 4 3 9

5 4 3 2 1

6 4 3 9 8

:falseהבאים יוצג המערכיםעבור שני

5 4 3 2 1

8 6 4 3 9

5 4 3 2 1

8 5 4 3 9

כל השאר , אותיות גדולות בדיוק 2במערך זה יש ידוע כי . תווים וקלוט לתוכו נתונים 15הגדר מערך של .0

.עליך להחליף את כל האותיות בטווח זה לאותיות גדולות. (תיניתן להניח שהמשתמש ידידו) קטנות

afgKERTMhהוא ישתנה להיות afgKertMh: עבור המערך: למשל

על הערכים להיות ממוינים מהקטן , וקרא לתוך שניים מהם ערכים מהמשתמש 0בגודל מערכים 3 הגדר .2ערך שמופיע גם במערך הראשון וגם למערך השלישי כל העתק (.ניתן להניח כי המשתמש ידידותי)לגדול

..האיברים שבו מספרלבסוף הדפס את המערך השלישי וכן את . במערך השני

.2הערך ויוצג בנוסף, 3 -ו 2במערך השלישי יהיו הערכים 92,3,2,1,והמערך 2,2,3,3,5עבור המערך : דוגמא

.אם סדר הספרות שלהם הפוך" צמד מראה"צמד מספרים יקרא .1

Page 14: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

: דוגמאות

"צמד מראה"הינם 321 -ו 123 - "מצד מראה"הינם 121 -ו 121 -

".צמד מראה"אם כל זוג ערכים מההתחלה והסוף הינם " מראה מערך"נקרא מערך

:דוגמאות

5-ו 2הערכים במיקומים " צמד מראה"הינם 6-ו 1מאחר והערכים במיקומים " אוסף מראה"האוסף הבא הינו

".צמד מראה"הינם 4-ו 3קומים והערכים במי" צמד מראה"הינם

321 121 54 45 121 123

".צמד מראה"אינם 5-ו 2מאחר והערכים במיקומים " אוסף מראה"האוסף הבא אינו

321 121 54 45 121 123

התוכנית תציג הודעה . וקולטת לתוכו מספרים( 6למשל )זוגי SIZEבגודל מערךכתוב תוכנית המגדירה

".אוסף מראה"הינו המערךמתאימה האם

.שנקלט זוגי המערךניתן להניח כי גודל

.אוספים בגודל זהה וקלוט לתוכם מספרים 2הגדר .8

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

:דוגמא

.עבור שני האוספים הבאים התוכנית תדפיס שהאוספים תואמים

227 61 14

92 43 23

:הסבר

וגם סכום הספרות באיבר הראשון אוסף השני הוא 5סכום הספרות באיבר הראשון באוסף הראשון הוא -5

7וגם סכום הספרות באיבר השני באוסף השני הוא 7סכום הספרות באיבר השני באוסף הראשון הוא -

Page 15: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

השניהספרות באיבר השלישי באוסף וגם סכום 11סכום הספרות באיבר השלישי באוסף הראשון הוא - 11הוא

והדפס את האינדקס של העמודה תוקלוט מהמשתמש . של תווים ואתחל אותה 5X5מטריצה בגודל הגדר .15

שימו )אם התו כלל לא מופיע במטריצה יש לתת הודעה מתאימה . בה התו שהוקלד מופיע הכי הרבה פעמים !(.אין לעבור על המטריצה בהתחלה כדי לבדוק זאת: לב

שאל את המשתמש בכמה שורות ובכמה עמודות מהמטריצה . 15X15פרים בגודל הגדר מטריצה של מס .11

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

.ימלי הנמצא על המסגרת החיצונית של המטריצה ולהציגו למסךלמצוא את הערך המקס

:דוגמאת פלט

.15-5לתוכו ערכים בטווח וקלוטמספרים 4הגדר מערך עם .12 :בהתאם להוראות הבאות, למסך את הפלט הבא הדפס

.יש להדפיס למסך פלט כך שעבור כל ערך במערך תהייה עמודה שבתחתיתה הערך ומעליה כוכביות כערך :יודפס הפלט הבא{ 4 2 0 0}וגמא עבור המערך לד

ולמלא אותה בצורת נחש כפי שראינו ( שיוגדרו כקבועים) NxMבשאלה זו עליכם להגדיר מטריצה בגודל .13

ראו דוגמאות )' ירד ויעלה בעמודה ליד וכו, יתחיל בעמודה הימנית למעלה 1אבל הפעם הערך , במצגת (.פלט

.זוגית-ללי גם לכמות עמודות זוגית וגם איהקוד צריך להיות כ: שימו לב

.אחד והעקרון מאוד דומה לפתרון שראינו בהרצאה ifבפתרון הטוב ביותר יש רק : רמז בקרה

Page 16: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

אין חשיבות לערכים שיש , ים במקומות היוצרים צורת יהלום- 0מטריצה תקרא יהלומית אם יש בה : הגדרה .23

.בשאר המקומות

:דוגמאות

1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1

1 1

. של מספרים בהתאם N*Nומקצה מטריצה ריבועית Nתוכנית הקוראת מהמשתמש מספר כתוב

.1או 1בקש מהמשתמש להכניס לתוך כל איבר את הערך

.הדפס את המטריצה עם הנתונים

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

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

.גדרהאינם רלוונטים לה( העליונה לפינה הימנית התחתונה

:דוגמאות

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

(מספר השורות שווה למספר העמודות)ריבועית של מספרים תוכנית הקולטת מספרים למטריצהכתוב

.והדפס את המטריצה

Page 17: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

."תמקופלת ראשי"התוכנית תציג הודעה האם המטריצה שהתקבלה היא

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

.אינם רלוונטים להגדרה( העליונה לפינה השמאלית התחתונה

:דוגמאות

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

(מספר השורות שווה למספר העמודות)ריבועית של מספרים תוכנית הקולטת מספרים למטריצהכתוב

.והדפס את המטריצה

."משניתמקופלת "התוכנית תציג הודעה האם המטריצה שהתקבלה היא

. '-' -ו'|' ובפרט התווים , מטריצה המורכבת מתוויםבשאלה זו נדון ב .22

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

.התווים הללו מעידים על מיקום התו הבא ברצף. בלבד' -' או/ו'|' רצף התווים מכיל את התווים

ואם התו במסלול הוא , משמע התו הבא במסלול צריך להיות מתחתיו'|' למשל אם בתא במסלול יש את התו

.התו הבא במסלול צריך להיות משמאלו' -'

.'|'התו בשורה התחתונה חייב להיות התו

. וים מהמשתמש והצג את המטריצההגרל את מימדי המטריצה וקלוט לתוכה תו

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

.הודעה מתאימה

: אותדוגמ

.ל"י ההגדרה הנ"מאחר ויש מסלול עפ true יוצג ותהבא ותעבור המטריצ

.'|'ולא ' -'כי התו בשורה התחתונה הוא , סלולמאחר שאין מ false יוצגעבור המטריצה הבאה

Page 18: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

ואז '|', בשורה השלישית יש הימני ביותרכי באיבר , מאחר שאין מסלול false יוצג עבור המטריצה הבאה

.האיבר הבא במסלול היה צריך להיות מתחתיו ולא לידו

כאשר אינם חלק '-' -ו'|' וים כולל התו, יכול להופיע כל תו אחר ’a‘במקום התו , בכל הדוגמאות האלה

.מהמסלול

פונקציות .5

שימו לב שתפריט אמור לחזור על עצמו עד אשר המשתמש ) :כתוב תפריט המכיל את האפשרויות הבאות

!(:מבקש לצאת

במידה וכל הספרות . אחרת false -במידה וכל ספרותיו זהות ו trueכתוב פונקציה המקבלת מספר ומחזירה .1

.הספרות מספרר גם את יש להחזי, זהות

ציירתי פה )יודפס # -ו 3למשל עבור . ומדפיסה למסך מסגרת של מעוין, כתוב פונקציה המקבלת מספר ותו .2

(:במקום רווחים_

((סולמיות 3 -רווחים ו 0, סולמיות 3כלומר )סולמיות 1)########

(סולמיות 3, רווחים 2, סולמיות 3)###__###

(סולמיות 2, רווחים 3, למיותסו 2)##____##

(סולמיות 2, רווחים 6, סולמיות 2)#______#

(סולמיות 2, רווחים 3, סולמיות 2)##____##

(סולמיות 3, רווחים 2, סולמיות 3)###__###

((סולמיות 3 -רווחים ו 0, סולמיות 3כלומר )סולמיות 1)########

(.מספר השורות שווה למספר העמודות, משמע)עית כתוב פונקציה המקבלת מטריצה ריבו .3

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

FALSE אחרת.

.'יש לבדוק אם סכום איברי השורה הראשונה שווה לסכום העמודה הראשונה וכו, כלומר

ל "וכנ 8מאחר וסכום איברי השורה הראשונה הוא , TRUEיר עבור המטריצה הבאה הפונקציה תחז: דוגמא

ל סכום איברי העמודה השניה וסכום "וכנ 16סכום איברי השורה השניה הוא . סכום איברי העמודה הראשונה

:ל סכום איברי העמודה השלישית"וכנ 8איברי השורה השלישית הוא

Page 19: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

5 1 2

3 7 6

1 8 1

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

:דוגמאות

":מראה"המטריצות הבאות הינן מטריצות 2

2 1 5 1 2

6 7 3 7 6

1 8 1 8 1

2 1 5 5 1 2

6 7 3 3 7 6

1 8 1 1 8 1

":מראה"באה אינה מטריצת המטריצה ה

2 1 5 1 2

6 8 3 7 6

1 8 1 8 1

.של מספרים ומימדיהכתוב פונקציה המקבלת מטריצה .אחרת FALSE, "מטריצת מראה"המטריצה היא אם TRUEהפונקציה תחזיר

מטריצה בתוך מטריצה אשר כל ערכיה בטווח-היא תת Xעליונה בגודל -מטריצת אפסים שמאלית :הגדרה .5 .1הם [ X-1[]1-X]ועד האיבר [ 1[]1]

:דוגמאות

Page 20: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4012

כפי שמתואר Xומחזירה את גודלה , המקבלת מטריצה ריבועית max0Rectangleכתבו את הפונקציה

.לעיל

היעילות תהייה , כלומר)ציה הקודמת רציה אין לבדוק תאים שנבדקו באיטרבכל איט: הגבלהO(SIZExSIZE).)

.ולא בהכרח רק על האלכסון, מיקום במטריצה ליכול להופיע בכ 5ינו הערך שא: 1 הבהרה

, כלומר. באיברי המטריצה שאינם חלק ממטריצת האפסים השמאלית עליונה יכול להיות כל ערך: 2הבהרה .ולא ספציפית רק באיבר יחיד במטריצה 1לא ספציפית רק הערך

(דריקס-מיקס-איקס)עיגול -משחק איקס .6

עליכם להשלים את . עיגול-תוכנית המדמה את המשחק איקס המצורף נתונה XO_starter.cppבקובץ

מומלץ מאוד . שימו לב להגדרת הקבועים ולשימוש בהם. את הקוד כך שהתוכנית תעבוד בצורה מושלמת

.לתוך המימושים" לצלול"ורק אז , לקרוא את הקוד המצורף ולהבין את הלוגיקה הכללית

.ו להריץ לראות כיצד התוכנית לבסוף צריכה לעבודשתוכל EXEב קובץ "מצ

XO starter.cpp

:הגדרת המשחק

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

:המשחק

ציור לוח המשחק במצבו הנוכחי למסך .א יש לוודא כי הקלט תקין. ר לבקש שורה ועמודה בגבולות הלוחכלומ: בקשת מהלך עבור משתמש .ב

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

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

Page 21: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

:עם סיום המשחק יש להציג את אחת מתוצאות המשחק -

השחקן הראשון(X )ניצח

השחקן השני(O )ניצח

(.ואף שחקן לא מנצח, הלוח מלא)תיקו עד אשר כך , לאחר הצגת תוצאת המשחק יש לשאול את המשתמש האם ברצונו לשחק שוב -

.המשתמש יבחר לסיים :דוגמאת פלט באיטרציה מסוימת

מחרוזות .6

את מספר השורות במטריצה ומחרוזת , (מטריצה של תווים)כתוב פונקציה המקבלת מערך של מחרוזות .2

.הפונקציה תחזיר כמה שורות במטריצה זהות למחרוזת שהתקבלה .נוספת

:דוגמא :השורות במטריצה

Hi Good Good morning Hi This is nice!

.Hiוהמחרוזת היא

.מופיעה פעמיים במטריצה Hiמשום שהמחרוזת 2 הפונקציה תחזיר

מספרוכן את (text1, text2, text3)( של תווים מטריצות)מערכים של מחרוזות 3 פונקציה המקבלתכתוב .2

יש טקסט ובמטריצה המטריצות הראשונות 2 -ב(. המטריצות בעלות מימדים זהים)השורות במטריצות

.השלישית זבל

:באופן הבא text3-הפונקציה תשים מחרוזות ב

נעתיק את , קטן מאורך שורה אפשרית text2 -וב text1 -במידה והאורך הכולל של השורה המתאימה ב

text3 -אחרת נשים ב. text2 -כ נשרשר את השורה המתאימה מ"ואח text3 -ל text1 -השורה המתאימה מ

.קהשורה רי

Page 22: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

, הפעל את הפונקציה. המטריצות הראשונות 2מטריצות שכאלו וקרא נותנים לתוך 3המגדיר mainכתוב

.ולבסוף הדפס את המטריצה השלישית

:דוגמא לפלט לתוכנית

מספר שלם , השורות המטריצה מספר, (מטריצה של תווים)כתוב פונקציה המקבלת מערך של מחרוזות .3

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

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

אם השורה הראשונה קצרה , כלומר) המתאים במערך הבוליאני האם השורה קצרה מהמספר שהתקבל או לא

לבסוף הפונקציה . ( falseאחרת , true יהיה 5-במקום ה ערכו של המערך הבוליאני, מהמספר שהתקבל

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

הפעל את . שישלח כמספר המבוקש לפונקציה 0-25והגרל מספר בין , קלוט נתונים לתוך המטריצה main -ב

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

הפונקציה . ואת מספר השורות במטריצה (מטריצה של תווים)כתוב פונקציה המקבלת מערך של מחרוזות .4

.בכל שורה המחרוזת ארוכה מהמחרוזת שבשורה שלפניה true תחזיר

הפונקציה . ואת מספר השורות במטריצה (מטריצה של תווים)כתוב פונקציה המקבלת מערך של מחרוזות .0

.האם המחרוזות מסודרות לקסיקוגרפית true ירתחז

מחרוזת במחרוזת -הפונקציה תבדוק האם המחרוזת השניה היא תת. מחרוזות 2כתוב פונקציה המקבלת .0

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

.-1תחזיר

:דוגמאות

מופיעה ברצף במחרוזת cdeמאחר והמחרוזת 2יוחזר cdeוהמחרוזת abcdef עבור המחרוזת -

.2הראשונה החל מאינדקס

אינו מופיע ברצף cdtמאחר ורצף האותיות 1-יוחזר cdtוהמחרוזת abcdefעבור המחרוזת -

.במחרוזת הראשונה

ים בסדר זהה הפונקציה תבדוק האם אותיות המחרוזת השניה מופיע. מחרוזות 2כתוב פונקציה המקבלת .0

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

:דוגמאות

Page 23: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

מופיעים במחרוזת e-ו b ,dמאחר והתווים trueיוחזר bdeוהמחרוזת abcdef עבור המחרוזת -

(.אך לא ברצף)הראשונה בסדר זה

אכן מופיעים במחרוזת c -ו b ,dר והתווים מאח false יוחזר bdcוהמחרוזת abcdefעבור המחרוזת -

.אך לא בסדר זה, הראשונה

יש להזיז את איבר המערך כך שבשורה השניה תהיה המחרוזת . כתוב תוכנית המגדירה מערך של מחרוזות .1

.השורה האחרונה תועתק במקום המחרוזת הראשונה. 'בשורה השלישית המחרוזת השניה וכו, הראשונה

.יס את המערך המעודכןלבסוף התוכנית תדפ

"!!להמציא את הגלגל מחדש"ולא , במידת הצורך יש להשתמש בפונקציות שלמדנו: שימו לב

:דוגמא לפלט לתוכנית

מצביעים .7

יש לצין , אם לא. בכל סעיף יש קטע קוד ועליכם לקבוע האם הקוד מתקמפל או לא. סעיפים 3בשאלה זו .2

.מודפס/ ת התשובה יש להגיש בכתב ברורא. יש לכתוב מה הפלט –ואם כן , מדוע

מומלץ מאוד לצייר את תמונת . 2000 -ובפונקציה מ 2000מתחילים בכתובת main -יש להניח שהכתובת ב

.הזכרון כפי שאני עושה במצגת

!אין להריץ תרגילים אלו על מחשב

a)

#include <iostream>

using namespace std;

void foo(int& x)

{

x = x%2 + 10;

}

int* goo(int& y)

{

y = y/100 + y%10;

Page 24: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

return &y;

}

void main()

{

int temp = 1234;

int* p = goo(temp);

cout << temp << endl;

foo(*p);

cout << temp << endl;

}

b)

#include <iostream>

using namespace std;

int f1(int& x, int* y)

{

x*= *y;

*y += x;

return *y / x;

}

void main()

{

int num1=4, num2=5;

int res = f1(num1, &num2);

cout << "num1=" << num1 << " num2=" << num2

<< " res=" << res << endl;

}

c)

#include <iostream>

using namespace std;

void func(int** ptr)

{

**ptr = 99;

}

void main()

{

int x = 30;

int* pX = &x;

func(&pX);

cout << *pX << endl;

{

d)

#include <iostream>

using namespace std;

void myFunc(int** x, int* y, int z)

{

Page 25: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

y = &z;

x = &y;

}

void main()

{

int x=3, *y, **z;

myFunc(x, y, z);

cout << "x=" << x << "*y=" << *y << " **z=" << **z << endl;

}

(.אין להריץ על המחשב) 1שאלה 41' עמ, מחוברת התרגילים .2

היא char* sשימו לב שכאשר כתוב שהפונקציה מקבלת ( . ב+א) 3שאלה 43' עמ, מחוברת התרגילים .3

(.[]char str -שקול ל)מקבלת את כתובת תחילת המערך

באיבר הראשון , כלומר. יה תשים בכל איבר את ריבוע האינדקסהפונקצ. כתוב פונקציה המקבלת מערך וגודלו .4

.'וכו 4את הערך 2באיבר , 1את הערך 1באיבר , 5את הערך

.אלא רק עם פוינטר מטייל][ אין להשתמש בגוף הפונקציה עם : הגבלה

0. void fibArray(int A[] , int n);

ניתן ) י'פיבונאצ סדרת של יבריםבא A המערך של האיברים את למלא מתבקש הינך ,זו בפונקציה מספר הוא שלהם שהאינדקס תאים שרק כזה באופן ,(י בויקיפדיה'לקרוא על סדרת פיבונאצ

. הסדרה של הערך את יקבלו ,בסדרה .שינוי ללא ישארו ,י'פיבונאצ בסדרת איבר אינו שלהם שהאינדקס ,במערך האיברים שאר

:לאחר הקריאה לפונקציה הוא יראה כך, -1תחלה היו שאיבריו בה 25עבור מערך בגודל , לדוגמא

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

ולתוך ,במערך אחר תא על פעם כל יצביע בעצמו שהוא מצביע כלומר ,מטייל מצביע י"ע לבצע יש .המתאים הערך יוצב זה תא

שהאינדקס התאים על רק ישירות יקפוץ אלא ,התאים כל על יעבור לא יעהמצב :נקודות 0בונוס .י'פיבונאצ בסדרת איבר הוא שלהם

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

.בדיקה ללא במערך בסדרה הראשונים האיברים

אריתמטיקה של מצביעים .8

תהייה כך שבאיבר הראשון, Aהגדר מערך של כתובות . כל אחד 0באורך רכים של מספריםמע 3הגדר .2

.'באיבר השני כתובת המערך השני וכו, כתובת המערך הראשון שהגדרת

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

Page 26: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

2.

הפונקציה תמלא את כל . ה ומספרגודל קפיצ, גודלו, כתוב פונקציה המקבלת מערך של מספרים שלמים .א

.האיברים שהאינדקס שלהם הוא מחלק שלם של גודל הקפיצה במספר שהתקבל

באיברים 2הפונקציה תשים את הערך , 2והמספר 3קפיצה בגודל , 15עבור מערך בגודל , דוגמא

(.גודל הקפיצה שהתקבל, 3 -האינדקסים המתחלקים ב) 5-ו 0, 3, 5שהאינדקס שלהם הוא

.מעבר על איברי המערך יהיה באמצעות פוינטר מטייל בלבד: לההגב

:mainכתוב .ב

. של מספרים 15x15הגדר מטריצה בגודל .1

יש למלא את הערכים בכל עמודה במטריצה עם האינדקס של ', באמצעות הפונקציה מסעיף א .2

:כלומר. העמודה

5ערכי כל האיברים בעמודה הראשונה יהיה

1השניה יהיה ערכי כל האיברים בעמודה

וכד'

הדפס את ערכי המטריצה .3

:פלט התוכנית יהיה

3.

הפונקציה תמלא את כל איברי המערך . גודלו ומספר, כתוב פונקציה המקבלת מערך של מספרים שלמים .א

.במספר שהתקבל

] -אין בשום מקרה להשתמש ב(. טיול על כתובות המערך, כלומר)יש להשתמש בפוינטר מטייל : הגבלה

.]

:הבא main –תוב את כ .ב

. של מספרים 15x15הגדר מטריצה בגודל .1

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

:כלומר. יש למלא את המשולש העליון הימני במטריצה עם מספר השורה .3

1בשורה הראשונה כל הערכים יהיו

2הערכים יהיו החל מהאיבר השני כל , בשורה השניה

וכד'

הדפס את ערכי המטריצה .4

:פלט התוכנית יהיה

Page 27: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

4.

? מה עושה הפונקציה הבאה

.rows < 10ניתן להניח כי .אלא לבצע הרצה יבשה ולתאר בקצרה מה התוצר הסופי, אין להריץ פונקציה זו

void f(int M[][01], int rows)

{

int count[100] = {0}, i, *ptr = (int*)M;

for ( i = 0; i < rows*10; i++ )

count[ptr[i]]++;

for ( i = 0; i < 100; i++ )

while ( count[i]-- )

*ptr++ = i;

}

רקורסיות .9

. פונקציות 4להלן .1

עבור כל פונקציה יש לצרף עץ המתאר הרצה יבשה של הקוד עבור הערכים שמצויינים בהערה בשורת

.(ולא איךהפונקציה מבצעת מהלציין )וכן לתאר במשפט בודד מה הפונקציה עושה , חתימת הפונקציה

.אלא לפתור ולהגישה על נייר, אין להריץ שאלה זו: שימו לב

int foo(int x) // run with x=529 { if (x < 10) return x; return foo(x/10) + x%10; } int goo(int x[], int s) // run with x={12, 91, 28}, s=3 { if (s == 1) return x[s-1];

Page 28: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

return goo(x, s-1) + x[0]; } void moo(int n) // run with n=4 { if (n == 0) return; moo(n-1); for (int i=0 ; i < n ; i++) cout << "*"; cout << endl; } int koo(int x) // run with x=529 { if (x < 10) return 1; return 1 + koo(x/10); }

שימו לב שתפריט אמור לחזור על עצמו עד אשר המשתמש ) :כתוב תפריט המכיל את האפשרויות הבאות

!(:מבקש לצאת

.הספרות הזוגיות מספרכתוב פונקציה רקורסיבית המקבלת מספר ומחזירה את .2

.אחרת false, אם כל ספרותיו זוגיות trueהמקבלת מספר ומחזירה רקורסיבית כתוב פונקציה .3

.הערכים הזוגיים מספרהמקבלת מערך של מספרים וגודלו ומחזירה את רקורסיביתכתוב פונקציה .4

, אם כל הערכים בו זוגיים trueהמקבלת מערך של מספרים וגודלו ומחזירה רקורסיביתכתוב פונקציה .0

false אחרת.

false, גדולותאותיות הם אם כל התווים בו trueרוזת ומחזירה מחכתוב פונקציה רקורסיבית המקבלת .6

.אחרת

. שונה זוגיות בעל הינו( צמודות או) שכנות ספרות זוג כל בו כמספר" מתחלף מספר" נגדיר .2

אחרת ,"מתחלף מספר" הוא אם trueותחזיר n כתוב פונקציה רקורסיבית המקבלת מספר שלם חיובי

. falseתחזיר

:דוגמאות

.כי ליד כל ספרה זוגית יש ספרה אי זוגית trueיוחזר 103405 ור המספר עב

.כי ליד כל ספרה זוגית יש ספרה אי זוגית trueיוחזר 1034055 עבור המספר

.זוגיות-צמודות ושתיהן אי 0 -ו 3כי הספרות falseיוחזר 103055 עבור המספר

Page 29: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

אם קיים לפחות זוג אחד של ספרות trueתחזיר כתוב פונקציה רקורסיבית המקבלת מספר חיובי שלם ו .5

.falseאחרת הפונקציה תחזיר , מתחלפות כפי שהוגדר בשאלה הקודמת

הפונקציה תחזיר את שארית . b -ו aרקורסיבית המקבלת שני מספרים חיוביים שלמים כתוב פונקציה .8

.חיסור בלבדבאמצעות שימוש בפעולות חיבור ו( a%bכלומר את תוצאת ) b -ב aהחלוקה של

switch_letters: void switch_letters(char *beg, char *end)כתבו את הפונקציה הרקורסיבית .15 .end, ומצביע לתו האחרון במחרוזת, beg, מקבלת מצביע לתו הראשון במחרוזתפונקציה ה

.הפונקציה תהפוך המחרוזת מהסוף להתחלה :דוגמא

.endבתור 'e'וכתובת התו begבתור ' a'ציה כתובת התו יועברו לפונק" abcde: "עבור המחרוזת

."edcba"המחרוזת המקורית תהפוך להיות , בסיום הפונקציה

אם סכום ספרות המספר trueהפונקציה תחזיר . מספרים שלמים 2כתוב פונקציה רקורסיבית המקבלת .22

.falseאחרת הפונקציה תחזיר , הראשון שווה לערך המספר השני

:דוגמאות

trueיוחזר 6 -ו 123המספרים עבור -

falseיוחזר 6 -ו 124המספרים עבור -

trueיוחזר 15 -ו 4362עבור המספרים -

הפונקציה תחזיר את מספר התווים הזהים הנמצאים . מחרוזות 2כתוב פונקציה רקורסיבית המקבלת .22

.לותהפונקציה אינה מבדילה בין אותיות קטנות לגדו. בשתי המחרוזות במיקום זהה

:דוגמה

התו , Aהוא 0 -מאחר שבשתי המחרוזות התו במקום ה, 3יוחזר ASdRle -ו aBdReעבור המחרוזות

.Rהוא 3-והתו במקום ה, Dהוא 2-במקום ה

.אורכי המחרוזות אינם שוויםוייתכן : לב מושי

בו רק אותיות אם כל התווים trueכתוב פונקציה רקורסיבית המקבלת מערך של תווים ואורכו ומחזירה .23

.אחרת false, גדולות או רק אותות קטנות

.falseיוחזר AkJLועבור , trueיוחזר bacd -ו ABCDעבור : למשל

ומחזירה מספר חדש המייצג את המספר שהתקבל 15כתוב פונקציה רקורסיבית המקבלת מספר בבסיס .23

.2בבסיס

5או 2שיכול להיות )וסף המייצג בסיס ומספר נ 15כתוב פונקציה רקורסיבית המקבלת מספר בבסיס .25

.הפונקציה מחזירה מספר חדש המייצג את המספר שהתקבל בבסיס שהתקבל(. בלבד

trueקציה תחזיר נהפו. 2-8בין ספרה וכן, וגודלו כתוב פונקציה רקורסיבית המקבלת מערך של מספרים .26

.falseאחרת תחזיר , ועד הספרה 2 -אם יש רצף של מספרים במערך מ

:דוגמאות

Page 30: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4012

trueיוחזר 4והספרה 0גודלו 3,1,2,3,4,6,3עבור המערך -

trueיוחזר 4והספרה 0גודלו 3,1,2,1,2,3,4עבור המערך -

trueיוחזר 4והספרה 0גודלו 1,2,3,4,1,5,1עבור המערך -

falseיוחזר 4והספרה 0גודלו 3,1,2,1,2,3,5עבור המערך -

falseיוחזר 4והספרה 0גודלו 3,1,2,3,5,6,3עבור המערך -

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

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

:דוגמא

6הפונקציה תחזיר oוהתו 3שאורכו ,"yoyo" } {"gogo", "momo"עבור מערך המחרוזות -

.מים בכל המחרוזותפע 6משום שתו זה מופיע

42 , 11 , 24 , 7 , 13 , 4 , 6 , 3 , 2 , 1 (: משמאל לימין)נתונה הסדרה .21

3, 2, 1: הם בסדרה הראשונים האיברים נתון כי תמיד שלושת -

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

שני שבין המוחלט ההפרש הוא, 0-ה מהמקום החל, דרהבס זוגי-אי במקום הנמצא איבר כל -

האיברים

. שלפניו הזוגיים במקומות

והערך י-n-ה המקום יהיה לפעולה הקלט) זו בסדרה י-n-ה האיבר לחישוב רקורסיבית כתוב פונקציה

(. זה במקום האיבר של ערכו יהיה שיוחזר

י'היזכרו בפתרון של סדרת פיבונאצ: רמז

לא ניתן )זמנית -י טיפוס שני שלבים בו"י טיפוס של שלב בודד או ע"ניתן לטפס על שלביו ע, בהינתן סולם .15

(.שלבים או יותר 3לדלג על

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

.לטיפוס עליו

:דוגמה

:אחת מהאפשרויות הבאות ניתן לטפס עליו בכל, שלבים 4עבור סולם עם

- 1 1 1 1

- 1 1 2

- 1 2 1

Page 31: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

- 2 1 1

- 2 2

.אפשרויות שונות לטפס על שלבי הסולם 0כי יש 0ולכן הפונקציה תחזיר את הערך

כתבו פונקציה המקבלת מספר שלם ומציירת שנתות של סרגל כך שהמספר שהתקבל הוא מספר .25

.השנתות במרכז הסרגל

:n=3עבור דוגמא

: n=4דוגמא עבור

מיונים וחיפושים .11

:1שאלה .1

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

2 ≤ i ≤ R-1 הערך האחרון בשורהi-1 קטן או שווה לערך הראשון בשורהi.

בה נמצא מחזירה את מספר השורה xהמטריצה וערך מסויים ברצוננו לממש פונקציה אשר בהנתן

.נמצא במטריצה Xניתן להניח כי בוודאות . הערך בתוך המטריצה

:יש להשלים את הקוד להלן במלבנים הלבנים כך שתתקבל הפונקציה המבוקשת

const int R = 10;

const int C = 20;

int SearchRow(int M[][C], int x)

{

Page 32: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

int min = 0, max = R-1, mid;

while ( min <= max ) {

mid = (min + max)/2;

if ( x >= M[mid][0] && x <= M[mid][C-1] )

return mid;

if ( x < M[mid][0] )

max = mid - 1;

else

min = mid + 1;

}

return -1;

}

כך שבסיום האיטרציה הראשונה הערך הגדול ביותר יהיה Bubble-Sortראינו בכיתה מימוש למיון .2

.'בסוף האיטרציה השניה הערך השני בגודלו נמצא באיבר לפני הסוף וכו, במיקום האחרון במערך

כתבו את הפונקציה מחדש כך שבסיום האיטרציה הראשונה הערך הקטן ביותר יהיה באיבר הראשון .'שני יהיה במיקום השני וכובסוף האיטרציה השני האיבר הקטן ה, במערך

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

.מהקטן לגדול

:דוגמה :עבור המטריצה

Page 33: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

:יש לעדכנה להיות

זת הפונקציה תמיין את אותיות המחרו .פונקציה המקבלת מחרוזת הכוללת אותיות קטנות וגדולות כתבו .4 אך לא תבדיל בין אותיות גדולות לקטנות, מהאות הקטנה לגדולה

:דוגמאות

aBzהפונקציה תמיין אותה להיות zBaעבור המחרוזת -

aACzZהפונקציה תמיין אותה להיות zZaACעבור המחרוזת -

לא משנה מי תופיע קודם, כאשר יש אות גדולה וקטנה זהה: הנחה

תקבל את , שעמודותיה ממוינות מהערך הקטן לגדול, של מספריםכתוב פונקציה המקבלת מטריצה .5

ודה בה את השורה והעמבפרמטרי פלט הפונקציה תחזיר .מספר השורות במטריצה וערך לחיפוש .-1במידה ואינו קיים הפונקציה תשים בפרמטרי הפלט את הערך . נמצא הערך

: 0המטריצה הבאה והערך עבור , למשל

הפונקציה יכלה להחזיר גם את שורה . 0כי במיקום זה קיים הערך 1ועמודה 2רה הפונקציה תחזיר שו

.2ועמודה 2

יש למיין את ערכי המטריצה תוך שימוש באלגוריתם . כתוב פונקציה המקבלת מטריצה של מספרים .6

Bubble Sort שנלמד בכיתה כך שהערך הנמוך ביותר יהיה בפינה השמאלית העליונה והערכים יסודרו

.ערך עולה לפי שורותיהםב

כלומר אין להשתמש במערך ) יש להשתמש במיון ולא רק לשים ערכים חדשים במטריצה: שימו לב (.עזר

:דוגמה לאיך המטריצה צריכה להיראות לאחר המיון

Page 34: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

מבנים .11

:ניהול אנשי קשר .1

ומספר שלם , עבור הקידומת 4מחרוזת באורך ששדותיו הם phone_number_tהגדירו את המבנה .א

.המספר עבור

.phone_number_t ופלט למבנה כתבו פונקציות קלט .ב

מערך של , (25מחרוזת בגודל )אשר שדותיו הם שם איש הקשר contact_info_tכתבו את המבנה .ג

וכתובת ( 3מקסימום )מספר מספרי הטלפון השמורים בפרטי הקשר , phone_tמשתנים מסוג 3

(.35ל מחרוזת בגוד)האימייל של הקשר

.יש להקפיד על מודולוריות .contact_info_tכתבו פונקציות קלט ופלט למבנה .ד

קראו לתוכם נתונים והדפיסו את . contact_info_tמשתנים מטיפוס 3מערך של main -הגדירו ב .ה

.יש להשתמש בפונקציות שהוגדרו בסעיף הקודם. הנתונים

. 1שאלה 02עמוד , של מדעי המחשב מחוברת התרגילים .2

ולא ב, יש להשתמש במיון בועות כפי שנלמד בכיתה' בסעיף ג- merge sort כמבוקש בשאלה .

ניתן להתעלם מדרישת היעילות' בסעיף ד.

.הפונקציה אינה חייבת להיות רקורסיבית. 2שאלה 02עמוד , של מדעי המחשב מחוברת התרגילים .3

הקצאות דינאמיות .12

שימו לב שתפריט אמור לחזור על עצמו עד אשר המשתמש ) :הבאותכתוב תפריט המכיל את האפשרויות

!(:מבקש לצאת

פונקציה המקבלת מחרוזת ומחזירה מחרוזת חדשה המכילה את האות הראשונה מכל מילה במחרוזת כתוב .2

.וכל אות יכולה להופיע במחרוזת החדשה מקסימום פעם אחת בלבד, שהתקבלה

:דוגמאות

Page 35: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

HWתוחזר המחרוזת Hello Worldעבור המחרוזת -

GmSתוחזר המחרוזת Moshe Good morning Sunshineעבור המחרוזת -

nosתוחזר המחרוזת num of studentעבור המחרוזת -

כתוב פונקציה המקבלת מחרוזת ומחזירה מערך של מספרים שמספר איבריו הוא כמספר המשפטים .2

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

.NULLאם במחרוזת אין משפטים יוחזר

:שימו לב

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

((לא כולל)ועד הנקודה או סימן הקריאה רווח

:דוגמאות

:עבור המחרוזת - "Hi! This is a lovely day. Please join me for breakfast."

[.2, 21, 28: ]עם הערכים הבאים 3יוחזר מערך באורך

:עבור המחרוזת - "Hi! This is a lovely day. Please join me for breakfast"

המשפט האחרון , מאחר אין נקודה בסוף המחרוזת[ )2, 21: ]עם הערכים הבאים 2ך באורך יוחזר מער

(.אינו נספר

:עבור המחרוזת - " Hi ! This is a lovely day. Please join me for breakfast."

' !'י מאחר והרווח לפנ, 3המשפט הראשון באורך [ )3, 21, 28: ]עם הערכים הבאים 3יוחזר מערך באורך

(.נספר באורך המשפט

.1-ופרמטר הפלט יעודכן ל NULLיוחזר ""עבור המחרוזת -

.1-ופרמטר הפלט יעודכן ל NULLיוחזר "ab"עבור המחרוזת -

לכן בתרגיל זה נבחר לייצג מספר .מוגבלים בטווח הערכים אותם הם יכולים להכיל int -ו longהטיפוסים .3

. תהייה ספרה אחת כך שבכל איבר במערך, בתוך מערך

:דוגמא

: באופן הבא יכול להיות מיוצג במערך 1234המספר

4 3 2 1

Page 36: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

(:אין משמעות לאפסים מובילים במספר) הבא או למשל במערך

4 3 2 1 1

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

המספרים 2מערך חדש שייצג את המספר שהוא סכום ערכי ותחזירייצר הפונקציה ת. גדלי המערך

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

:1דוגמא

עבור המערך

4 3 2 1

והמערך

7 9

:יש לייצר ולהחזיר את המערך, בהתאמה 97 -ו 1234המייצגים את המספרים

1 3 3 1

(1234+97=1331)

:2דוגמא

עבור המערך

9 9 9 9

והמערך

7 9

:יש לייצר ולהחזיר את המערך, בהתאמה 97 -ו 9999המייצגים את המספרים

6 9 1 1 1

:או למשל את המערך

Page 37: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

6 9 1 1 1 1

(9999+97=10096)

.בתוצאה יש ספרה אחת יותר מאשר במספר הארוך יותר 2בדוגמא , לתשומת ליבכם

.ום שלב להמיר את איברי המספר ממערך לטיפוס אחראין בש :ההגבל

לכן בתרגיל זה נבחר לייצג מספר .מוגבלים בטווח המספרים אותם הם יכולים להכיל int -ו longהטיפוסים .3

. כך שבכל איבר במערך תהייה ספרה אחת בלבד, בתוך מערך

:דוגמא

: יכול להיות מיוצג במערך 1234המספר

4 3 2 1

(:אין משמעות לאפסים מובילים במספר)ערך או למשל במ

4 3 2 1 1

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

המספרים 2ערכי מכפלתמערך חדש שייצג את המספר שהוא ותחזיר הפונקציה תייצר . שני גדלי המערך

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

(.תזכורת לכפל ארוך בסוף השאלה ורא)פי האלגוריתם של חישוב כפל ארוך -להתבצע על

:1דוגמא

עבור המערך

4 3 2 1

והמערך

7 9

:יש לייצר ולהחזיר את המערך, בהתאמה 97 -ו 1234המייצגים את המספרים

8 9 6 9 1 1

(1234*97=119,698)

.אין בשום שלב להמיר את איברי המספר ממערך לטיפוס אחר :ההגבל

Page 38: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

.הפתרון צריך להיות כללי כך שיתאים לכל אורך של מספרים :שימו לב

: ניתן למצוא בקישור תזכורת לכפל ארוך

http://he.wikibooks.org/wiki/%D7%97%D7%A9%D7%91%D7%95%D7%9F/%D7%9B%D7%A4%D7%9C

הקצאות דינאמיות ומבנים .13

עבור *person_t -מצביעים ל 2 -ו. ז.שם פרטי ות: המכילה נתונים של אדם person_tהגדר את המבנה ( א .2

.(ם קיימיםאם אינ NULLערכם יהיה ) אם קיימים, האבא והאמא : המכילה את הנתונים הבאים family_tהגדר את המבנה ( ב

שם משפחה מטיפוס מצביע לאבאperson_t*

מצביע לאמא מטיפוסperson_t*

הילדים במשפחה מספר מערך של מבנים ל- Person שגודלו כמספר הילדים

-מצביעים לאבא ולאמא יאותחלו בה.. ז.שתקלוט רק את שמו הפרטי ות person_t -ל כתבו פונקצית קלט( ג

NULL.

ואם יש , ואם יש אבא אז רק את שמו, ז.שם ות: המציגה את כל נתוניו person_t -כתבו פונקצית פלט ל( ד

.אמא אז רק את שמה

שתקבל כפרמטרים מצביעים לאבא ולאמא ותצביע אליהם family_tכתבו פונקציות קלט למבנה ( ה

ותקרא לתוכם , תקצה מערך עבור הילדים, את שם המשפחה ומספר הילדיםהפונקציה תקלו . מהמבנההאבא והאמא של ילדים אלו צריכים להיות האבא והאמא של : שימו לב. 'נתונים באמצעות הפונקציה מסעיף ג

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

.'לתוכו נתונים באמצעות הפונקציה מסעיף ג person_t פוס משתנים מטי main 2 -הגדירו ב( ז

יש להעביר . 'וקראו לתוכו נתונים באמצעות הפונקציה מסעיף ה family_tמשתנה מטיפוס main -הגדירו ב( ח

.'לפונקציה את המשתנים שהוגדרו בסעיף ז

.את נתוני המשפחה main -הדפיסו ב( ט

.שחררו את כל הזכרון שהוקצה( י

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

struct Picture {

Page 39: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4011

int height; int width; char* data; };

. dataשל תווים שנשמרים במערך widthוברוחב heightי מלבן בגובה "תוצג ע Pictureתמונה המתבססת על

:התמונה תראה כך[^,^,^,^,^,*,^,^,^,*,*,*,^,*,*,*,*,*,*,*]=data -ו height=4, width=5למשל אם

*****

**^**

*^^^*

^^^^^

. נפרדת כך שכל סעיף יהיה פונקציה, האפשרויות בהמשך המפעילה אתכתבו תוכנית

ו אחר כך הוא מזין את תווי התמונה ת. המשתמש מקליד את גובה ואת רוחב התמונה :יצירת התמונה .1

יש .PICTUREכלומר את האובייקט מסוג , הפונקציה תחזיר את התמונה שנוצרה. תו שורה שורה

.להדפיס את התמונה לאחר שלב זה

:נגדיר עבור רצף תווים זהים מבנה הבא. דחיסת תמונה .2

struct Sequence { char c; int times; };

במבנה הזה נשמור את התו ואת אורך הרצף. כמו כן נגדיר עבור תמונה דחוסה את המבנה:

struct CompressedPic

{

int height;

int width;

Sequence* data;

} ;

:כתבו פונקציה

CompressedPic compressThePicture(Picture p);

Page 40: םיליגרת תרבוח C++ תפשב בשחמה יעדמל אובמkerenk/Intro To C++/IntroToC++ - homework questions.pdf · םיליגרת תרבוח - C++ תפשב בשחמה

/4012

( והתו ואורכ)דוחסת אותה כך שבמקום רצף תווים יישמר מידע על הרצף , Pictureהפונקציה מקבלת תמונה

. אותו היא מחזירה CompressedPicושומרת את התמונה הדחוסה במבנה

. פתיחת תמונה דחוסה .3Picture unCompressThePicture(CompressedPic p);

בצורה ההפוכה לפונקציה אותה ומפענחת, CompressedPic מכווצת הפונקציה מקבלת תמונה

compressThePicture. לאחר שלב זהיש להדפיס את התמונה.