מבחן בקורס: עקרונות שפות תכנות, מועד: ב תאריך: 10/8/2020 שמות המרצים: מני אדלר, בן אייל, גיל אינציגר, מיכאל אלחדד מיועד לתלמידי: מדעי המחשב

מסמכים קשורים
PPL Moed A

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

PowerPoint Presentation

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

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

תרגול 1

Slide 1

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

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

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

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

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

Microsoft Word B

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

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

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

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

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

PowerPoint Presentation

PowerPoint Presentation

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

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

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

מקביליות

Microsoft PowerPoint - rec3.ppt

PowerPoint Presentation

מצגת של PowerPoint

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

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

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

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

תכנות מונחה עצמים א' – תש"ע

מקביליות

Slide 1

Microsoft Word - c_SimA_MoedB2005.doc

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

Slide 1

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

PowerPoint Presentation

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

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

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

PowerPoint Presentation

Slide 1

Microsoft Word - Ass1Bgu2019b_java docx

פייתון

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

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

Slide 1

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

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

מקביליות

ex1-bash

Microsoft PowerPoint - YL-05.ppt

PowerPoint Presentation

Microsoft PowerPoint - rec1.ppt

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

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

PowerPoint Presentation

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

PowerPoint Presentation

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

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

דוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמט

<4D F736F F D20EEF9E5E5E0E5FA20E3E9F4F8F0F6E9E0ECE9E5FA2E646F63>

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

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

Microsoft Word - pitaron222Java_2007.doc

Microsoft Word - ExamA_Final_Solution.docx

1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_match הפונקציה preg_m

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

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

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

Microsoft Word - c_SimA_MoedA2006.doc

Slide 1

! 1! משוואות מסדר ראשו! (הפרדת משתני*, הומוגנית, לינארית) xyy = 1 x y xy 2 = 2xy 2 מצא את הפתרו' הכללי: x y y = 3 א) y ג) ב) ד) y tan x = y (1 ( x+ y

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

2019 שאלות מומלצות לתרגול מס' דיפרנציאביליות של פונקציה סקלרית )המשך(. כלל השרשרת. S = ( x, y, z) z = x + 3y על המשטח מצאו נקודה בה מישור משיק

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

234114

מבחן בפיתוח מערכות תוכנה בשפת Java ( )

תרגול 3 - מערכים

תרגול מס' 1

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

Homework Dry 3

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

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

Microsoft PowerPoint - lec9.ppt

תרגול 1

Slide 1

PowerPoint Presentation

מבוא לאסמבלי

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

Slide 1

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

Microsoft Word - דוגמאות ב

תמליל:

מבחן בקורס: עקרונות שפות תכנות, 202-1-2051 מועד: ב תאריך: 10/8/2020 שמות המרצים: מני אדלר, בן אייל, גיל אינציגר, מיכאל אלחדד מיועד לתלמידי: מדעי המחשב והנדסת תוכנה, שנה ב', סמסטר ב' משך המבחן: 3:15 שעות חומר עזר: אסור הנחיות כלליות: יש לענות על כל השאלות בגיליון התשובות. מומלץ לא לחרוג מן המקום המוקצה. - אם אינכם יודעים את התשובה, ניתן לכתוב 'לא יודע' ולקבל 20% מהניקוד על הסעיף/השאלה. - 20 נק' 30 נק' 20 נק' 20 נק' 15 נק' 105 נק' שאלה 1: תכנות פונקציונלי שאלה 2: תחביר וסמנטיקה שאלה 3: מערכת טיפוסים שאלה 4: מבני בקרה שאלה 5: תכנות לוגי סה"כ בהצלחה! ------------------------------------------------------------------------------------------------------------------- 1

שאלה 1: תכנות פונקציונלי [20 נקודות] בסעיפים הבאים (א., ו-ב.) אין להגדיר פונקציות עזר ואין להשתמש בפונקציות שלא ניתנו בשאלה. אל תשכחו לכתוב את הטיפוס והחתימה של כל הפונקציות. א. כתבו בשפת Scheme את הפונקציה drop-while המקבלת פרדיקט ורשימה, ומחזירה את אותה הרשימה ללא הרישא שעונה על הפרדיקט. ניתן להשתמש בפונקציה הפרימיטיבית not וכן פונקציות הרשימות empty?,.car, cdr דוגמאות: > (drop-while even? '(0 2 4 5 6 7 8)) '(5 6 7 8) > (drop-while even? (1 2 3 4 5)) (1 2 3 4 5) ;; Signature: ;; Type: (define drop-while 2

ב. כתבו בשפת TypeScript את הפונקציה uncurry המקבלת: - פונקציה f של ארגומנט אחד המחזירה פונקציה של ארגומנט אחד הפונקציה uncurry מחזירה פונקציה של שני ארגומנטים שמחזירה אותה תוצאה כמו f. אין להשתמש במוטציה או לולאות. דוגמאות: const curriedadd = (x: number) => (y: number) => x + y; curriedadd(1)(3); // => 4 const add = uncurry(curriedadd); add(1, 3); // => 4 const curriedjoin = (x: string) => (y: string) => `${x ${y`; curriedjoin( Hello )( World ); // => Hello World const join = uncurry(curriedjoin); join( Hello, World ); // => Hello World const uncurry = => 3

שאלה 2: תחביר וסמנטיקה [30 נקודות] לשפה L4 נוספה צורה מיוחדת form) (special חדשה לשם הגדרת מחלקות. מבנה ה class כולל את רשימת השדות של המחלקה, ואת המתודות שלה (במבנה של - bindings זוגות של שם המתודה והגדרת הפרוצדורה שלה). המחלקה,Pair לדוגמא, מוגדרת כך: (define den 2) (define Pair (class (a b) ( (first (lambda () a)) (second (lambda () b)) (f (lambda () (/ (+ a b) den))) ) ) ) כדי לייצר מופע של class נתון, יש 'להפעיל' אותו עם פרמטרים עבור השדות (כמו פעולת הבנאי). פעולה זו מחזירה פונקציה המקבלת symbol המציין את המתודה להפעלה ומבצעת מתודה זו. (define p34 (Pair 3 4)) (p34 first) 3 (p34 second) 4 (p34 f) 3.5 המימוש של הצורה החדשה (כפי שניתן בפיתרון של מועד א - אין צורך להכיר אותו מראש, אנו מציינים זאת רק לשם נוחות): תחביר export interface ClassExp { tag: "ClassExp", args: VarDecl[], bindings: Binding[]; 4

export const makeclassexp = (args: VarDecl[], bindings: Binding[]): ClassExp => {tag: "ClassExp", args: args, bindings: bindings; export const isclassexp = (x: any): x is ClassExp => x.tag === ClassExp ; סמנטיקה export type Value = SExpValue Closure Class ; export interface Class { tag: "Class"; args: VarDecl[]; bindings: Binding[]; env: Env; export const makeclass = (args: VarDecl[], bindings: Binding[], Env env): Class => {tag: "Class", args: args, bindings: bindings, env : Env; export const isclass = (x: any): x is Class => x.tag === Class ; const applicativeeval = (exp: CExp, env: Env): Result<Value> =>... isclassexp (exp)? evalclass (exp, env) : isappexp (exp)? safe2((op: Value, args: Value[]) => apply (op, args)) (applicativeeval(exp.rator, env), mapresult((rand: CExp) => applicativeeval(rand, env), exp.rands)) :... const evalclass = (exp: ClassExp, env: Env): Result<Class> => makeok(makeclass(exp.args, exp.bindings, env)); const apply = (op: Value, args: Value[]): Result<Value> => isprimop(op)? applyprimitive(op, args) : isclosure(op)? applyclosure(op, args) : isclass(op)? applyclass(op, args) : makefailure(`bad procedure ${JSON.stringify(proc)`); const applyclass = (cls: Class, args: Value[]): Result<Closure> => { 5

const cases : LitExp[] = map((b: Binding) => makelitexp(b.var.var), cls.bindings); const actions : CExp[] = map((b: Binding) => b.val, cls.bindings); const params : VarDecl[] = [makevardecl( msg )]; const body : CExp[] = [makecondexp(makevarref('msg'),cases, actions]; const extenv : Env = makeextenv(map((v: VarDecl) => v.var, cls.args), args, cls.env))) return makeok(makeclosure(params,body, extenv)); ] לא חשוב או נדרש לשאלה, אך הפונקציה makecondexp מקבלת,VarRef רשימת 'מקרים' עבורו,(CExps) ורשימת 'פעולות',(CExps) פעולה עבור כל אחד מהמקרים, ומחזירה מבנה של CondExp בהתאם. לדוגמא: makecondexp(makevarref('x'), [makelitexp('i'), makelitexp('j')], [makenumexp(1), makenumexp(2)]); AST of the expression: (cond ((eq? x 'i) 1) ((eq? x 'j) 2)) [ שני הסעיפים הבאים מתייחסים לנקודת המוצא של הקוד הנ"ל. הם אינם תלויים זה בזה, וניתן לענות על כל אחד מהם בנפרד. א. הוחלט להוסיף את הצורה החדשה class גם לשפה L3, ובפרט לאינטרפרטר שלה כפי שמומש בכיתה במודל ההחלפה/הצבה model) (substitution ב.applicative order א. 1 - - - עדכנו את הממשק Class עבור מודל ההצבה. עדכנו את הפרוצדורה evalclass עבור מודל ההצבה. השלימו את המתודה applyclass עבור מודל ההצבה: export interface Class { tag: "Class"; 6

const evalclass = => _ const applyclass = (cls: Class, args: Value[]): Result<Closure> => { const cases : LitExp[] = map((b: Binding) => makelitexp(b.var.var), cls.bindings); const actions : CExp[] = map((b: Binding) => b.val, cls.bindings); const params : VarDecl[] = [makevardecl( msg )]; const body : CExp[] = renameexps( [makecondexp(makevarref('msg'),cases, actions] ) ; const litargs = map(valuetolitexp, ); return makeok( makeclosure( )); [10 נקודות] א. 2 היכן מאוחסנים השדות של המחלקה עם הערכים שלהם במודל הסביבות (המימוש למעלה של L4) והיכן הם מאוחסנים במודל ההצבה (המימוש שלכם ב א. 1 עבור L3) [5 נקודות] ב. נדרש לממש את הצורה המיוחדת class גם עבור normal order בשפה L4 (כמו שראיתם בתרגיל - 3 במודל הסביבות) עדכנו את הקוד של L4normalApplyProc, applyclass, NonEmptyEnv, makeenv, applyenv בהתאם: ב. 1 const L4normalApplyProc = (op: Value, args: CExp[], env: Env): Result<Value> => { if (isprimop(op)) { const argvals: Result<Value[]> = mapresult((arg) => L4normalEval(arg, env), args); return bind(argvals, (args: Value[]) => applyprimitive(op, args)); else if (isclosure(op)) { const vars = map((p) => p.var, op.params); return L4normalEvalSeq(op.body, makeextenv(vars, args, op.env)); else if ( isclass(op) ) applyclass( ) else { 7

; return makefailure(`bad proc applied ${proc`); const applyclass = ( ): Result<Closure> => { const cases : LitExp[] = map((b: Binding) => makelitexp(b.var.var), cls.bindings); const actions : CExp[] = map((b: Binding) => b.val, cls.bindings); const params : VarDecl[] = [makevardecl( msg )]; const body : CExp[] = [makecondexp(makevarref('msg'),cases, actions]; const extenv : Env = makeextenv(map((v: VarDecl) => v.var, cls.args), args, cls.env))) return makeok(makeclosure(params,body, extenv)); export interface NonEmptyEnv { tag: "Env"; var: string; val: ; nextenv: Env; export const makeenv = ( ): NonEmptyEnv => ({tag: "Env", var: v, val: val, nextenv: env); export const applyenv = (env: Env, v: string): Result<Value> => isemptyenv(env)? makefailure("var not found " + v) : env.var === v? makeok() : applyenv(env.nextenv, v); (define norm 2) (define Math (class (x y) ( (add (lamda () (+ x y)) (square (lambda () (* x x))) (normalize (lambda () (/ y norm))) ))) [9 נקודות] ב. 2 נתונה המחלקה Math 8

הדגימו את שלושת התופעות הבאות ע"י קוד המגדיר מופע של Math ומבצע עליו את אחת המתודות: מקרה בו החישוב ב applicative order יעיל יותר מהחישוב ב :normal order (define m1 ) (m1 ) מקרה בו החישוב ב normal order מסתיים בהצלחה, בעוד החישוב ב applicative order גורר שגיאת זמן ריצה: (define m2 ) (m2 ) מקרה בו החישוב ב normal order מסתיים בהצלחה, בעוד החישוב ב applicative order אינו מסתיים: - - - (define m3 ) (m3 ) [6 נקודות] 9

שאלה 3: מערכת טיפוסים [20 נקודות] 3.א typing statements [10 נקודות] טענה לגבי טיפוסים statement) (typing היא נוסחה שמחברת בין סביבת טיפוסים לקביעת טיפוס של ביטוי בשפה, שנכתבה: Tenv - e:t למשל: {x:number - (+ 3 x):number לכל אחד מה- statements typing הבאים - תענו true או false אם הטענה נכונה או לא - אם לא, תסבירו למה {f:[t1->t2] - (f 7): T2 {f:[t->t] - (f x):t {f:[t1->t2], g:[t2->t3], x:t1 - (g (f x)):t3 {g:[empty -> T], x: T - (g x):t {x:[t->t] - (lambda (x) (x x)):[t->t] 3.ב type inference [10 נקודות] כתבו את רשימת משתני טיפוס ורשימת המשוואות הנגזרות כאשר מבצעים את האלגוריתם של הסקת טיפוסים על הביטוים הבאים (אין צורך לפתור את המשוואות): 10

((lambda (f x) (f x)) + 4) דוגמא עבור הביטוי: Expression Variable ============================= ======== ((lambda (f x) (f x)) + 4) T0 (lambda (f x) (f x)) T1 (f x) T2 f Tf x Tx + T+ 4 Tnum4 Construct type equations: Expression Equation ============================= ========================== ((lambda (f x) (f x)) + 4) T1 = [T+ * Tnum4 -> T0] (lambda (f x) (f x)) T1 = [Tf * Tx -> T2] (f x) Tf = [Tx -> T2] + T+ = [Number -> Number] 4 Tnum4 = Number תורכם: 3.ב. 1 (lambda (n) : boolean (if (= n 0) #f (even? (- n 1)))) Expression Variable ============================= ======== 11

Expression Equation ============================= ========================== 12

שאלה 4: מבני בקרה [20 נקודות] 4.א. [6 נקודות] כתבו שלוש סיבות מדוע שימוש ב- Promises עדיף על callbacks בתכנות אסינכרוני. התייחסו בתשובתכם למושגים הקשורים לעקרונות שפות תכנות. רק "פשוט יותר" או "קל יותר" אינן תשובות מספקות. 4.ב. 4.ב. 1 [4 נקודות] כתבו פונקציה שמתנהגת כמו הרכבה של map ו- filter בשם map-filter לפי ההגדרה הבאה: ;; Signature: map-filter(f pred? lst) ;; Purpose: collect the values (f x) for x in l such that (pred x) is true. ;; Type: ;; Example: (map-filter square even? (1 2 3 4)) (4 16) (define map-filter (lambda (f pred? lst) 4.ב. 2 [4 נקודות] כתבו גרסה איטרטיבית recursive) (tail של אותה פונקציה שמשתמשת ב- accumulator : ;; Signature: map-filter-iter(f pred? lst) ;; Purpose: collect the values (f x) for x in l such that (pred x) is true in an iterative manner ;; Example: (map-filter-iter square even? (1 2 3 4)) (4 16) (define map-filter-iter (lambda (f pred? lst) (letrec ((iter (lambda (lst acc) 13

4.ב. 3 [6 נקודות] כתבו גרסת CPS של :map-filter ;; Signature: map-filter$(f$ pred?$ lst cont) ;; Purpose: CPS version of map-filter ;; Type: [[T1 * [T2 -> T3] -> T3] * ;; [T1 * [Boolean -> T3] -> T3] * ;; List(T1) * ;; [List(T2) -> T3] -> T3] ;; Example: (map-filter$ square$ even?$ '(1 2 3 4) id) '(4 16) (define map-filter$ (lambda (f$ pred?$ lst cont) 14

שאלה 5: תכנות לוגי [15 נקודות] א. כתבו פרוצדורה sum_to/2 שמגדירה יחס בין מספר טבעי n בייצוג Church לבין סכום המספרים מ- 0 עד n בייצוג.Church לדוגמה:?- sum_to(s(s(s(0))), Sum). Sum = s(s(s(s(s(s(0)))))). nat(0). nat(s(x)) :- nat(x). % Signature: plus(x, Y, Z)/3 % Purpose: Z = X + Y plus(0, X, X) :- nat(x). plus(s(x), Y, s(z)) :- plus(x, Y, Z). ניתן להשתמש בפרוצדורה plus המוגדרת כך: ב. כתבו את ה- unifier most general של כל אחד מהזוגות הבאים. אם אין, כתבו "אין" והסבירו למה. 1. [X [Y Z]] = [1, 2, 3, 4]. 2. f(g(x, Y), f(z)) = f(g(f(z), U), f(g(x))). 3. [1 [[X, X Y] Z]] = [1, [2, T], 4]. 4. f(g(x), Y, p(z)) = f(g([1]), [X W], p(z)). בהצלחה! 15