מס' ת"ז מס' מחברת מבחן בקורס מבוא מורחב למדעי המחשב CS1001.py ביה"ס למדעי המחשב, אונ' תל אביב סמסטר א' , מועד ב, 23/3/2018 מרצים: דניאל דויטש,

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

מבחן בקורס מבוא מורחב למדעי המחשב, CS1001.py ביה"ס למדעי המחשב, אונ' תל אביב סמסטר א' 2019, מועד א', 27/01/2019 מרצים: פרופ' דניאל דויטש, ד"ר אמיר רוב

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

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

מבוא למדעי המחשב - חובלים

תרגיל בית מספר 1#

מבוא לתכנות ב- JAVA תרגול 7

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

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

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

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

מבוא למדעי המחשב - חובלים

Microsoft Word B

מהוא לתכנות ב- JAVA מעבדה 3

הגשה תוך שבוע בשעת התרגול

Slide 1

אוניברסיטת תל אביב - בית הספר למדעי המחשב מבוא מורחב למדעי המחשב, אביב 2019 תרגיל בית מספר - 2 להגשה עד 02/04/2019 בשעה 23:55 קיראו בעיון את הנחיות הע

Microsoft Word - c_SimA_MoedB2005.doc

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word - ExamA_Final_Solution.docx

מבוא לתכנות ב- JAVA תרגול 11

תרגול 1

PRESENTATION NAME

שאלהIgal : מערכים דו מימדיים רקורסיה:

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

ex1-bash

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

מבוא למדעי המחשב

תרגיל בית מספר 1#

הטכניון מכון טכנולוגי לישראל אלגוריתמים 1 )443432( סמסטר חורף הפקולטה למדעי המחשב תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגור

PowerPoint Presentation

סדנת תכנות ב C/C++

Microsoft Word - c_SimA_MoedA2006.doc

PowerPoint Presentation

מבוא למדעי המחשב

234114

מבוא למדעי המחשב

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

Slide 1

מבוא לאנליזה נומרית na191 Assignment 2 solution - Finding Roots of Nonlinear Equations y cos(x) שאלה 1 היכן נחתכים הגרפים של? y x 3 1 ושל ממש פתרונות

מבוא למדעי המחשב

תכנון אלגוריתמים עבודת בית 4: תכנון אלגוריתמים תאריך הגשה: 02: , בצהריים,תא מספר 66 בקומת כניסה של בניין 003 מתרגל אחראי: אורי 0

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מבוא למדעי המחשב

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

Slide 1

תוכן העניינים

מועד: א בחינה סופית במתמטיקה דיסקרטית משך הבחינה: 2 1 שעות מרצה: פרופ' תאופיק מנסור תאריך: סמסטר: א תשע"ח m 2 הוראות לנבחן: )1( הבחינה מו

Tutorial 11

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

מקביליות

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

הגשה תוך שבוע בשעת התרגול

פייתון

שאלהIgal : מערכים דו מימדיים רקורסיה:

Microsoft Word - Ass1Bgu2019b_java docx

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

Slide 1

ב ה. ד. ג. ב. ב. אוניברסיטת תל אביב - בית הספר למדעי המחשב מבוא מורחב למדעי המחשב, חורף :22 תרגיל בית מספר 6 - להגשה עד 66 בינואר 3162 בשעה קיר

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

מבוא למדעי המחשב

תיק משימטיקה מגרף הנגזרת לגרף הפונקציה להנגשה פרטנית נא לפנות: כל הזכויות שמורות

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

מקביליות

תוכן העניינים

תכנון אלגוריתמים, אביב 1021, תרגול מס' 4 תכנון דינאמי תכנון דינאמי בתרגול זה נדון בבעיית הכפלת סדרת מטריצות (16.1.(CLR ראשית נראה דוגמא: דוגמא: תהינה

Python 2.7 in Hebrew

מבוא למדעי המחשב

Programming

תרגיל 9 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד 1. תהי L השפה בעלת סימן פונקצייה דו מקומי G, סימן פונקציה חד מקומי T, סימן יחס תלת מקומי.c, d וקבועים L

שיעור 1

PowerPoint Presentation

Untitled

תרגיל בית מספר 1#

מצגת של PowerPoint

הגנה - שקפי תרגול

מתכונת עיצוב 3013

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

Microsoft PowerPoint - rec3.ppt

Slide 1

תורת הקומפילציה

Algorithms Tirgul 1

PowerPoint Presentation

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

מטלת מנחה (ממ"ן) 11 הקורס: חשבון אינפיניטסימלי II חומר הלימוד למטלה: יחידות 2,1 4 מספר השאלות: 7 משקל המטלה: נקודות סמסטר: ב 2007 מו

Slide 1

מקביליות

<4D F736F F D20EEF9E5E5E0E5FA20E3E9F4F8F0F6E9E0ECE9E5FA2E646F63>

Microsoft Word - lec

תאריך הבחינה 30

תרגול 1

שעור 6

מבוא למדעי המחשב

אנליזה מתקדמת

<4D F736F F D20F4F2E5ECE5FA20EEE5EEF6E0E5FA20312E646F63>

תמליל:

מבחן בקורס מבוא מורחב למדעי המחשב CS1001.py ביה"ס למדעי המחשב, אונ' תל אביב סמסטר א' 2017-18, מועד ב, 23/3/2018 מרצים: דניאל דויטש, אמיר רובינשטיין מתרגלים: מיכל קליינבורט, אמיר גלעד משך הבחינה: 3 שעות. חומר עזר מותר: 2 דפי עזר )דו צדדיים( בגודל A4 כל אחד. במבחן 12 עמודים מודפסים בידקו שכולם בידיכם. בנוסף, בסוף הבחינה ישנו דף נוסף, ריק, לשימוש ב"מקרה חירום" בלבד. יש לכתוב את כל התשובות בטופס הבחינה. המחברת תשמש כטיוטה בלבד ולא תיבדק. יש לענות על כל השאלות. בכל השאלות, אלא אם נכתב במפורש אחרת: אם עליכם לכתוב פונקציה, אין צורך לבדוק את תקינות הקלט שלה. - מותר להסתמך על סעיפים קודמים, גם אם לא עניתם עליהם. - ניתן לצטט טענות שנטענו בהרצאה או בשיעורי התרגול. במקרה זה יש לכתוב "בהרצאה/תרגול ראינו כי...". - אנו ממליצים לא "להיתקע" על אף שאלה, אלא להמשיך לשאלות אחרות ולחזור לשאלה אח"כ. בכל סעיף ניתן לכתוב "איני יודע/ת" ולא לכתוב שום טקסט נוסף. במקרה זה יינתן 20% מציון הסעיף )מעוגל כלפי מטה(. ישלכתוב את כל התשובות במקום המוקצב ובכתב קריא. תשובות ובהן חריגות משמעותיות מהמקום המוקצב, או תשובות הכתובות בכתב קטן מדי, לא ייקראו ולא יקבלו ניקוד, או שיקבלו ניקוד חלקי בלבד.תשובות שדורשות מאמצים רבים להבנתן גם כן עלולות לגרור הורדת ציון. טבלת ציונים:)לשימוש הבודקים( שאלה ערך ניקוד בהצלחה! 20 20 15 20 25 100 1 2 3 4 5 סה"כ

שאלה )20 1 נק'( בשאלה זו נעסוק בבעיה הבאה: בהינתן רשימת מספרים שלמים גדולים ממש מ- 0 טבעיים L ומספר שלם k גדול ממש מ-, 0 האם קיימת תת קבוצה )לא בהכרח מוכלת ממש( של איברי L שסכום המספרים בה הוא k בדיוק? א. השלימו את הקוד הרקורסיבי הבא שפותר את הבעיה, כלומר הפונקציה שתשלימו תקבל כקלט רשימה L ומספר k, ותחזיר True אם קיימת תת קבוצה כאמור, אחרת תחזיר.False למשל עבור הרשימה [1,4,8,9]=L וk=18, התשובה תהיה true כי תת הקבוצה {8,9,1} מקיימת שסכום איבריה הוא 18. הנחיה: אין להשתמש ב- slicing בסעיף זה. def subsetsum(l, k): return s_rec(l,0,k): def s_rec(l, i, k): if : if : return True else: return False else: return ב. מהי סיבוכיות זמן הריצה של הקוד שכתבתם במקרה הגרוע, במונחי n )אורך הרשימה L(? הניחו כי פעולות אריתמטיות רצות בזמן קבוע. הסבר: O( ) 2

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

ד. )i( תנו דוגמא לקלט L,k עבורו אתם צופים כי גרסת הקוד עם ממאויזציה )סעיף ג( תהיה עדיפה מגרסת הקוד ללא ממואיזציה )סעיף א(. הסבירו תשובתכם. )ii( תנו דוגמא לקלט L,k עבורו אתם צופים כי גרסת הקוד עם ממאויזציה )סעיף ג( לא תהיה עדיפה מגרסת הקוד ללא ממואיזציה )סעיף א(. הסבירו תשובתכם. 4

שאלה )20 2 נק'( בשאלה זו נעסוק בבעיית העלאה בחזקה מודולרית. א. עליכם לממש אלגוריתם יעיל לבעיה זו, על ידי השלמת הקוד הבא. אין חובה להשתמש בכל השורות. הנחיה מחייבת: אין להשתמש בחישוב מודולו שתיים )%2) בפתרון שלכם. def modpower(a,b,c): """ computes a**b mod c using iterated squaring assumes b is nonnegative integer """ result = 1 # a**0 while b>0: if b%3 == 0: if b%3 == 1: if b%3 == 2: return result ב. נסמן ב- n a, n b, n c את מספר הביטים בהתאמה של.a, b, c מהו מספר האיטרציות הדרוש במקרה הגרוע לקוד שכתבתם, כפונקציה של n, a, n b, n c כולם או חלקם? O( ) הסבירו בקצרה: 5

שאלה )15 3 נק'( from random import * הנה תזכורת לאלגוריתם ניוטון-רפסון שראינו בכיתה, למציאת שורש של פונקציה ממשית. def diff_param(f, h=0.001): return (lambda x: (f(x+h)-f(x))/h) def NR(func, deriv=none, epsilon=10**(-8), n=100, x0=none): if deriv is None: deriv = diff_param(func) if x0 is None: x0 = uniform(-100.0,100.0) x = x0; y = func(x) for i in range(n): if abs(y) < epsilon: print ("x=", x, "f(x)=", y, "convergence in", i, "iterations") return x elif abs(deriv(x)) < 10**(-25): #arbitrary small value print ("zero derivative, x0=", x0, " i=", i, " xi=", x) return None else: print("x=", x, "f(x)=", y) x = x - func(x)/deriv(x) y = func(x) print("no convergence, x0=",x0," i=",i, " xi=", x) return None א. נתונה פונקציה ליניארית lambda x:a*x+b עבור a,b קבועים כלשהם, 0 a. מה מהבאים יקרה עבור הרצת הפקודה (b? NR(lambda x : a*x + הקיפו בעיגול את התשובה הנכונה והסבירו. תתבצע איטרציה בודדת ובאיטרציה הבאה אחריהיה יוחזר ערך בשורה return x יתבצע מספר לא ידוע של איטרציות )בין 1 ל- n(, ולאחריהן יוחזר ערך בשורה return x תתבצע איטרציה בודדת וובאיטרציה הבאה אחריה יודפס derivative..." "zero יתבצע מספר לא ידוע של איטרציות )בין 1 ל- n(, ולאחריהן יודפס derivative..." "zero תתבצע איטרציה בודדת ובאיטרציה הבאה אחריה יודפס convergence " "no יתבצע מספר לא ידוע של איטרציות )בין 1 ל- n(, ולאחריהן יודפס convergence " "no )1 )2 )3 )4 )5 )6 הסבר: 6

ש)ו ב. מטה הסייבר של צפון קוריאה החליט לחבל בפונקציה,NR ולשנות אותה כך שערך הנגזרת בכל שלב יהיה מספר אקראי כלשהו בין 0 ל- 1. לשם כך, משתמשים בפונקציה random מהספריה,random שלא מקבלת שום פרמטר ומחזירה מספר בין 0 ל- 1 בכל פעם שקוראים לה. deriv = diff_param(func) השינוי בפונקציה מתבטא בהחלפת השורה ורה זו בלבד, שאר הקוד ללא שום שינוי(. שבפונקציה NR מה מהבאים הוא הצורה הנכונה לכתוב זאת, כך ש- NR עדיין תרוץ )כלומר ריצתה תסתיים, בין אם בהחזרת שורש או?)None הקיפו בעיגול. deriv = random )1 deriv = random() )2 deriv = lambda x: random )3 deriv = lambda x: random() )4 ג. נתונות הפונקציות הבאות: >>> f1 = lambda x: x**2-1 >>> f2 = lambda x: f1(x) if abs(x)!=1 else 999 >>> diff_f2 = lambda x: 2*x מריצים: >>> NR(f2, diff_f2) מה מהבאים התרחיש הסביר ביותר, כלומר מה יתרחש עבור רוב הבחירות של ניחוש התחלתי? הסבירו. והריצה תסתיים יודפס derivative..." "zero 1( והריצה תסתיים יודפס convergence " "no 2( הריצה תסתיים עם החזרת שורש שקרוב ל- 1 או 1- עד כדי.epsilon=10**(-8) 3( הריצה תסתיים עם החזרת שורש שאינו בהכרח קרוב ל- 1 או 1- עד כדי.epsilon=10**(-8) 4( הסבר: 7

שאלה )20 4 נק'( להלן קוד של פונקציה אשר מקבלת מספר טבעי כלשהו n כקלט. 1. def what(n): 2. a = [True] * n 3. a[0] = a[1] = False 4. for (i, val) in enumerate(a): 5. if val == True: 6. for j in range(2*i, n, i): 7. a[j] = False 8. print("i=", i, a) 9. return a תזכורת: לולאת for עם enumerate עוברת על כל הזוגות element) (index, כאשר index הוא האינדקס של האיבר element באוסף כלשהו. למשל: >>> lst = ["a", "b", "c"] >>> for (i, e) in enumerate(lst): print(i,e) 0 a 1 b 2 c א. מה יודפס בשורה 8 של הפונקציה עבור הפקודה what(8) כאשר 1=i? i = 1 [,,,,,,, ] ב. מה יהיה הערך המוחזר של?what(8) [,,,,,,, ] ג. נסמן את הרשימה המוחזרת מ- what(100) ב-.lst מה יהיה הערך בתא?lst[89] סמנו את התשובה והסבירו בקצרה. True.a False.b הסבר: ד. מהי הסיבוכיות של הפונקציה what כתלות ב- n? סמנו את הביטוי ההדוק ביותר מבין החסמים הבאים )סמנו תשובה אחת בלבד( O(log(n)).a O(n log(n)).b O(n 2 ).c O(n log 2 n).d 8

ה. ראו את הגרסה הבאה של,what ששמה.what2 ההבדל היחיד הוא בשורה 6, במקום i*2 מופיע :i*i 1. def what2(n): 2. a = [True] * n 3. a[0] = a[1] = False 4. for (i, val) in enumerate(a): 5. if val == True: 6. for j in range(i*i, n, i): 7. a[j] = False 8. print("i=", i, a) 9. return a נסמן את הרשימה המוחזרת מ- what2(100) ב-.lst מה יהיה הערך בתא?lst[89] סמנו את התשובה והסבירו בקצרה. True.a False.b הסבר: 9

שאלה )25 5 נק'( בקורס דנו במבנה הנתונים רשימה מקושרת list( )linked אשר מורכב מצמתים )nodes( שמשורשרים אחד לשני. באופן יותר מדויק, האובייקט Linked_list מכיל מצביע לצומת הראשון שלו מטיפוס Node וכל אובייקט מטיפוס.)None נוסף, שהוא הצומת הבא ברשימה )או Node ומצביע לאובייקט )value( מכיל ערך כלשהו Node בסוף השאלה מופיע הקוד של המחלקות Linked_list ו- Node שראיתן בכיתה. הקוד מכיל רק את מתודות האיתחול ואת הפונקציות add_at_start ו- reverse שראינו בתרגול. א. השלימו את הקוד של המתודה reverse_rec(self) ששייכת למחלקה. Linked_list אין חובה להשתמש בכל השורות. מתודה זו הופכת את הכיוון של רשימה מקושרת, בדיוק כמו המתודה reverse מהתרגול )תמונת הזיכרון לאחר הפעלת reverse_rec תהיה זהה לזו שהיתה מתקבלת לאחר הפעלת.)reverse על המתודה לפעול בסיבוכיות זמן O(n) כאשר n הוא מספר הצמתים ברשימה. def reverse_rec(self): def reverse_node(curr, prev): if : return tmp = curr.next return self.next = reverse_node(, ) 10

ב. נניח שהשדה value של כל צומת ברשימה המקושרת מכיל תו יחיד )למשל a (. התבוננו במתודה הבאה: def what(self): a = '' b = '' lp = self rp = self loc = self.len for i in range(self.len//2+1): if a!= b: return False lp = lp.next a = lp.value rp = self for j in range(loc): rp = rp.next b = rp.value loc -= 1 return True :True תחזיר what באורך 2 לכל הפחות, כך שהמתודה s כתבו מחרוזת I. >>> s = >>> l = Linked_list(s) >>> l.what() True הסבר: :False תחזיר what באורך 2 לכל הפחות, כך שהמתודה s כתבו מחרוזת.II >>> s = >>> l = Linked_list(s) >>> l.what() False הסבר: 11

ג. מהי הסיבוכיות של הפונקציה what כתלות באורך הרשימה,self אותו נסמן ב- n? תנו תשובה הדוקה ככל שתוכלו במונחי ()O, והסבירו. תשובה: לנוחיותכם, קוד למחלקות Node ו- :Linked_list class Node(): def init (self, val): self.value = val self.next = None class Linked_list(): def init (self, seq=none): self.next = None self.len = 0 if seq!= None: for x in seq[::-1]: self.add_at_start(x) def add_at_start(self, val): ''' add node with value val at the list head ''' p = self tmp = p.next p.next = Node(val) p.next.next = tmp self.len += 1 def reverse(self): prev = None curr = self.next while curr!=none: tmp = curr.next curr.next = prev prev = curr curr = tmp self.next = prev 12

דף למקרה חירום 13