קורס תכנות שיעור 11: הסוף.

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
מבני נתונים 1 – מבנה התרגולים
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תכנות תרגול 11 שבוע : מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
רקורסיות נושאי השיעור מהן רקורסיות פתרון רקורסיות : שיטת ההצבה שיטת איטרציות שיטת המסטר 14 יוני יוני יוני 1514 יוני יוני יוני 1514.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
הוראת המדעים האוניברסיטה העברית1 רקורסיה. הוראת המדעים האוניברסיטה העברית2 חלק א: רקורסיה עם מספרים.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
Backpatching 1. תזכורת מתרגול קודם קוד ביניים - שפת הרביעיות שיטות לייצור קוד ביניים –שימוש בתכונת code –כתיבה ישירה ל-buffer של פקודות שיטות לתרגום מבני.
תכנות תרגול 14 שבוע:
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 14 שבוע : רשימות מקושרות ישנו מבנה נתונים אשר מאפשר ישנו מבנה נתונים אשר מאפשר לנו לבצע את הוספת האיברים בצורה נוחה יותר. מבנה זה.
תכנות תרגול 12 שבוע : הקצאת זיכרון דינאמית הזיכרון המקסימאלי ששימש את התוכנית שלנו עד היום היה קבוע מראש. לפני הרצת התוכנית, לאחר שהתוכנית עברה.
מבוא כללי למדעי המחשב רשימות מקושרות
מבוא למדעי המחשב תרגול 6 - מערכים שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
תכנות תרגול 12 שבוע : מבנים מטרת המבנים היא לאפשר למתכנת להגדיר טיפוסי משתנים חדשים אשר מתאימים ספציפית לבעיה שאותה התוכנית פותרת. מטרת המבנים.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
1 מבוא למדעי המחשב רקורסיה. 2 רקורסיה היא שיטה לפתרון בעיות המבוססת על העיקרון העומד ביסוד אינדוקציה מתמטית: אם ידועה הדרך לפתור בעיה עבור המקרים הבסיסיים.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
Dynamic Allocation. Malloc - Reminder void* malloc(unsigned int nBytes); Used to dynamically allocate nBytes in memory Returns a pointer to the allocated.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
Programming Pointers. נדגים היום בעזרת מצביעים העברת משתנים לפונקציה שמשנה אותם  פונקציה שמקבלת מצביעים לסמן תא בזיכרון  פונקציה שמחזירה מצביע מערך.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבני נתונים רשימה מקושרת, מחסנית ותור
Tirgul 12 Trees 1.
Computer Architecture and Assembly Language
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
הקצאות דינאמיות בשילוב מבנים
מיונים וחיפושים קרן כליף.
Exams questions examples
תירגול 14: מבני נתונים דינאמיים
קורס תכנות שיעור 14: הסוף.
הרצאה 06 רשימות מקושרות קרן כליף.
Computer Programming Summer 2017
שאלה 1.
מבוא כללי למדעי המחשב תרגול 4
תרגול 8 תחומי הכרה פונקציות
מבוא כללי למדעי המחשב תרגול 6
שאלות מבחינות קודמות יואב ציבין.
מערכים של מצביעים הקצאה דינאמית
Introduction to Programming in C
תרגול Introduction to C - Fall Amir Menczel.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Computer Architecture and Assembly Language
Presentation transcript:

קורס תכנות שיעור 11: הסוף

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

הצצה לתכנות בפייתון

Python Python is a general-purpose, high-level programming language Conceived in the late 1980’s by Guido van Rossum at CWI in the Netherlands Numerous users in many domains Used as a first programming language in many universities (MIT, TAU CS) the origin of the name is based on the television series Monty Python's Flying Circus 4 4

Hello World! 5 5

Hands On 6 6

Functions Spaces / indentation!! 7 7

Passing Arguments to Functions 8 8

If/Else 9 9

Logical Operators 10 10

Python is Lazy… 11 11

String Type http://docs.python.org/tutorial/introduction.html#strings 12 12

Strings Structure 13 13

Strings Built In Methods http://docs.python.org/release/2.5.2/lib/string-methods.html 14 14

Slicing o l e H 4 3 2 1 -1 -2 -3 -4 -5 15 15

Lists 16 16

Iterating Over Lists for var in list: print(var) value in list 17 17

Lists Built In Methods 18 18

Range, Sum 19 19

ראייה חישובית על קצה המזלג

סיכום הקורס והמבחן

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

רשימת נושאי הקורס משתנים וסוגיהם, קלט/פלט ופעולות חשבון אלגוריתמי חיפוש ומיון סימולציה ייצוג ועיבוד תמונה תיקון טעויות הצצה לתכנות בפייתון משתנים וסוגיהם, קלט/פלט ופעולות חשבון משפטי if ו- switch ופעולות השוואה לולאות while, for, do-while פונקציות מערכים, מערכים דו-ממדיים מחרוזות רקורסיה מצביעים מבנים הקצאת זיכרון דינאמית רשימות מקושרות

הבחינה הבחינה תערך ביום שני, 5.7.12, בשעה 9:00 משך הבחינה שלוש שעות (כלומר עד 12:00) אין הארכות! הבחינה בכתב (אין קומפיילר) ניתן להביא דף עזר בגודל A4 כתוב בכתב יד משני צידי הדף. על כל תלמיד להכין לעצמו\ה את דף העזר, אין להביא צילום.

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

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

עצות כלליות למבחן עצמו קראו בעיון את השאלות. הבנה של השאלה היא קריטית! אם תהיה אי-בהירות כלשהי לגבי ניסוח אפשר לשאול את המרצה או את המתרגלים (שיעברו בין חדרי המבחן) חלקו את הזמן: שאלות ב-3 שעות = בערך שעה לשאלה סעיפים בשאלה בדר"כ קשורים אחד לשני. ברב הפעמים עליכם להשתמש בפתרונות לסעיפים מוקדמים ע"מ לפתור סעיפים מאוחרים באותה שאלה. מותר (ורצוי) להשתמש בפתרון לסעיף בסעיפים הבאים אפילו אם לא פתרתם אותו. התמודדות עם לחץ \ חרדת בחינות.

דוגמאות לשאלות ממבחן

4 3 9 שאלה 5 ממועד א' תשס"ד שאלה 5 (25 נקודות) סעיף א' (5 נקודות): הגדירו מבנה (structure) אשר ישמש לייצוג רשימה מקושרת אשר תכיל מספרים שלמים (כמו בציור). 4 3 9

שאלה 5 ממועד א' תשס"ד struct item { int data; struct item *next; }; סעיף א' (5 נקודות): הגדירו מבנה (structure) אשר ישמש לייצוג רשימה מקושרת אשר תכיל מספרים שלמים (כמו בציור). פתרון: struct item { int data; struct item *next; };

שאלה 5 ממועד א' תשס"ד typedef struct item_t { int data; סעיף א' (5 נקודות): הגדירו מבנה (structure) אשר ישמש לייצוג רשימה מקושרת אשר תכיל מספרים שלמים (כמו בציור). פתרון עם כתיב מקוצר: typedef struct item_t { int data; struct item_t *next; } item;

שאלה 5 ממועד א' תשס"ד סעיף ב' (10 נקודות): כתבו פונקציה המקבלת מצביע לראש הרשימה ומחזירה את סכום המספרים ברשימה.

שאלה 5 ממועד א' תשס"ד סעיף ב' (10 נקודות): פתרון: כתבו פונקציה המקבלת מצביע לראש הרשימה ומחזירה את סכום המספרים ברשימה. פתרון: int sum_list(item *list) { int sum=0; while (list != NULL) sum=sum+list->data; list=list->next; } return sum; מתקדמים על איברי הרשימה וסוכמים את הערכים שנמצאים בהם

שאלה 5 ממועד א' תשס"ד סעיף ב' (10 נקודות): כתבו פונקציה המקבלת מצביע לראש הרשימה ומחזירה את סכום המספרים ברשימה. איך ניתן היה לפתור את סעיף זה בצורה רקורסיבית? (לא היה בשאלה המקורית – אבל היה יכול להיות...)

סכום רשימה – פתרון רקורסיבי תנאי עצירה: אם הרשימה ריקה נחזיר 0. קידום: נחשב (רקורסיבית) את סכום הרשימה שמתחילה מהאיבר השני (אורכה קטן ב-1 מהרשימה המקורית) נוסיף לסכום שקיבלנו את ערך האיבר הראשון ונחזיר את התוצאה. 4 3 9

סכום רשימה – פתרון רקורסיבי int sum_list(item *list) { int sum; if (list == NULL) return 0; sum = sum_list(list->next); sum += list->data; return sum; } תנאי עצירה פתרון בעיה "קטנה" פתרון הבעיה "הגדולה"

סכום רשימה – פתרון רקורסיבי int sum_list(item *list) { if (list == NULL) return 0; return list->data + sum_list(list->next); } או בקיצור...

שאלה 5 ממועד א' תשס"ד סעיף ג' (10 נקודות) : כתבו פונקציה אשר תקבל מצביע לראש הרשימה, תשכפל את הרשימה ותחזיר מצביע לתחילת הרשימה המשוכפלת.

שאלה 5 ממועד א' תשס"ד סעיף ג' (10 נקודות) : כתבו פונקציה אשר תקבל מצביע לראש הרשימה, תשכפל את הרשימה ותחזיר מצביע לתחילת הרשימה המשוכפלת. שלבי הפתרון: נתקדם על הרשימה המקורית עד שנגיע ל- NULL. בכל פעם נשכפל את האיבר הנוכחי, ונוסיף אותו בסוף הרשימה החדשה משתנים שנצטרך: מצביע לאיבר החדש (new_item) מצביע לראש הרשימה החדשה (new_head) מצביע לאיבר האחרון שהוספנו לרשימה החדשה (new_last).

item *duplicate(item *head) פתרון סעיף ג' (10 נקודות): שיכפול רשימה item *duplicate(item *head) { item *new_item, *new_last=NULL, *new_head=NULL; while (head != NULL) { new_item=(item *) malloc(sizeof(item)); if (new_item== NULL) printf(“memory allocation error\n”); exit(1); } new_item->data=head->data; new_item->next=NULL; if (new_head == NULL) new_head=new_item; else new_last->next=new_item; new_last=new_item; head=head->next; return new_head; מתקדמים על הרשימה המקורית שכפול האיבר הנוכחי אם אין עדיין איברים ברשימה החדשה, אז זה ראש הרשימה אחרת האחרון יצביע עליו האיבר שהוספנו הוא עכשיו האחרון מחזירים את ראש הרשימה החדשה

שאלה 1 ממועד א' תשס"ח סעיף א' (7 נקודות):  כתבו פונקציה בעלת המפרט (prototype) הבא:  void arr_copy(int a[], int b[], int n) הפונקציה מקבלת שני מערכים המכילים מספרים שלמים, ומספר שלם אי-שלילי n (הניחו שזה אכן מה שהיא מקבלת). על הפונקציה להעתיק את n הערכים הראשונים במערך a ל-n המקומות הראשונים במערך b. הניחו ששני המערכים הם בגודל n לפחות.  

שאלה 1 ממועד א' תשס"ח סעיף א' (7 נקודות):   void arr_copy(int a[], int b[], int n){ int i; for (i = 0; i < n; i++){ b[i] = a[i]; {

שאלה 1 ממועד א' תשס"ח סעיף ב' (15 נקודות):  כתבו פונקציה בעלת המפרט (prototype) הבא:  void merge( int a[], int size_a, int b[], int size_b, int *dest ); הפונקציה מקבלת שני מערכים של מספרים שלמים שממויינים בסדר לא-יורד (כלומר מקטן לגדול). כמו-כן, היא מקבלת את גדלי המערכים, ומערך נוסף dest. על הפונקציה להעתיק בצורה ממויינת את הערכים משני המערכים, a ו- b, לתוך המערך dest. כלומר, בסיום הפונקציה המערך dest צריך להכיל את כל size_a + size_b הערכים הללו, והוא צריך להיות ממויין בסדר לא-יורד (מקטן לגדול). הניחו כי יש במערך dest מספיק מקום עבור כל הערכים המועתקים.

שאלה 1 ממועד א' תשס"ח void merge( int a[], int size_a, int b[], int size_b, int *dest ){ int ia = 0, ib = 0, id = 0; while (ia < size_a && ib < size_b){ if (a[ia] > b[ib]){ dest[id] = b[ib]; ib++; { else{ dest[id] = a[ia]; ia++; id++; …… } נשמור אינדקס נפרד לכל מערך כל עוד לא הגענו לסוף אחד המערכים נשווה בין שני התאים ונעתיק את הערך הקטן יותר נותר לנו להעתיק את התאים שנשארו אחרי השלב הקודם...

שאלה 1 ממועד א' תשס"ח void merge( int a[], int size_a, int b[], int size_b, int *dest ){ ... while (ia < size_a){ dest[id] = a[ia]; ia++; id++; } while (ib < size_b){ dest[id] = b[ib]; ib++; נותר לנו להעתיק את התאים שנשארו אחרי השלב הקודם...

שאלה 1 ממועד א' תשס"ח סעיף ג' (12 נקודות):   לפניכם הפונקציה הרקורסיבית merge_sort, שממיינת את המערך a, שגודלו size. הפונקציה משתמשת בפונקציות מסעיפים א' ו- ב'. עליכם להשלים את הקטעים החסרים בפונקציה, בתוך המסגרות (כל מסגרת היא שורת קוד). הערה: הניחו שהקצאת הזיכרון הצליחה.

תנאי עצירה return; רקורסיה! right, size - size/2 (int*) size*sizeof(int) right, size - size/2, temp size free(temp);