תכנות בשפת C תרגול 15 תרגול חזרה 2 תרגילים ממבחנים 12.06.2011.

Slides:



Advertisements
Similar presentations
מבוא למדעי המחשב לתעשייה וניהול
Advertisements

תכנות בשפת C תרגול 14 תרגול חזרה תרגילים ממבחנים
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
פונקציונל פונקציה מספר פונקציונל דוגמאות לא פונקציונל פונקציונל.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תכנות תרגול 9 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 6 שבוע : חישוב e זוהי הנוסחא לחישוב e נראה כיצד לתרגם אותה לפונקציה n n.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
11 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 8 - מחרוזות שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא כללי למדעי המחשב תרגול. הבית האדום כתובת : רחוב קוקוריקו 2 הבית הירוק כתובת : רחוב קוקוריקו 4 הבית הצהוב כתובת : רחוב קוקוריקו 1 הבית הורוד כתובת.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מבוא למדעי המחשב תרגול 4 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
הוראת המדעים האוניברסיטה העברית1 רקורסיה. הוראת המדעים האוניברסיטה העברית2 חלק א: רקורסיה עם מספרים.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מבוא לשפת C תרגול 12: עוד רקורסיה
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 6 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 14 שבוע:
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. אג'נדה שאלות מבחינות חזרה על מימוש stream אפשרי 2.
1 - גמישות בבינאריות גמישות בעומק - עץ חיפוש בינארי: ממוצע O(log n) גרוע ביותר (O(n - היינו רוצים לשמור את העץ מאוזן תמיד Data Structures, CS, TAU
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
מבוא למדעי המחשב תרגול 9 – מערכים ומחרוזות, תרגילי חזרה שעת קבלה : יום שני 11:00-12:00 דוא " ל :
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
תכנות תרגול 8 שבוע : מערכים עד היום התוכניות שלנו לא ידעו לשמור כמות גדולה של מידע ללא הגדרת כמות גדולה של משתנים. עד היום התוכניות שלנו לא.
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 12. Outline Streams Infinite streams Stream implementation Questions from exams 2.
1 מבוא למחשב שפת C תרגילי חזרה. 2 תרגיל 1 : מחשבון קלט : תרגיל חשבוני המורכב ממספרים שלמים עם פעולות חשבוניות ביניהם. התרגיל מסתיים ב =. אפשריים רווחים.
Data Structures Hanoch Levi and Uri Zwick March 2011 Lecture 3 Dynamic Sets / Dictionaries Binary Search Trees.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
1 רשימות טיפוס נתונים מסוג רשימה (enumeration) הוא אוסף של שמות שהם הערכים האפשריים עבור טיפוס זה. enum היא מילה שמורה המגדירה טיפוס שכזה. הערכים מוגדרים.
1 מבוא למדעי המחשב הרצאה 5: פונקציות. 2 מבוא לפונקציות חלוקה של אלגוריתם לתת משימות: משימה - פונקציה: דוגמאות מציאת המקסימלי מבין שני איברים האינדקס של.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
הגדרת משתנים יום שלישי 14 יוני 2016 יום שלישי 14 יוני 2016 יום שלישי 14 יוני 2016 יום שלישי 14 יוני 2016 יום שלישי 14 יוני 2016 יום שלישי 14 יוני 2016.
1 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Programming Arrays.
מבוא למדעי המחשב לתעשייה וניהול
Tirgul 12 Trees 1.
הרצאה 10 פונקציות עם מספר משתנה של פרמטרים
מבוא למדעי המחשב סיבוכיות.
מיונים וחיפושים קרן כליף.
רקורסיות קרן כליף.
Exams questions examples
תירגול 14: מבני נתונים דינאמיים
הרצאה 07 עצים קרן כליף.
מבני נתונים עצים קרן כליף.
Engineering Programming A
Computer Programming Summer 2017
שאלה 1.
Computer Programming תירגול 13 חזרה למבחן.
שאלות מבחינות קודמות יואב ציבין.
Introduction to Programming in C
תרגול Introduction to C - Fall Amir Menczel.
מחסנית ותור Stacks and Queues.
תכנות בשפת C תרגול 12 עצים בינאריים
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
מבוא לתכנות ב- Java תרגול 10 - רשימות מקושרות.
Presentation transcript:

תכנות בשפת C תרגול 15 תרגול חזרה 2 תרגילים ממבחנים

fscanf - format specification Fields A format specification has the following form: %[*] [width] type If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set. For example: fscanf( ptr, "%20[^#] %*c %9d", name, &id);  the function fscanf reads 20 characters, or till letter (‘#'), or till newline from the input stream and stores them in field name, then it reads the next 9 characters and converts them into integer id, then it reads one symbol which is not stored. 2

תרגיל 1 - רשימות הפונקציה הבאה מחפשת את האמצע של הרשימה ושם חוצה את הרשימה לשתי רשימות. הפונקציה מחזירה את המצביע לחצי השני של הרשימה. השלם את הקטעים החסרים. Node* middle(Node* source){ Node *fast, *slow, *source2; if (source==NULL || ?? 1 ?? ) return NULL; slow = source; fast = ?? 2 ?? ; while (?? 3 ??) { fast = fast->next; if ( ?? 4 ?? ) { slow = slow->next; fast = fast->next; } source2 = slow->next; slow->next = ?? 5 ?? ; return ?? 6 ?? ; } 3 typedef struct node{ int value; struct node* next; }Node;

פתרון תרגיל 1 רשימות 1: !source->next 2: source->next 3: fast->next 4: fast->next 5: NULL 6: source2 4

תרגיל 2 רקורסיה שאלה מס'4: כתוב פונקציה רקורסיבית void X(int lines) שמדפיסה את האות X באמצעות כוכביות ב-lines שורות (נניח ש-lines תמיד אי-זוגית). לדוגמא עבור X(9) יודפס: * * * * * * הכוכבית הראשונה חייבת להופיע בתחילת השורה הראשונה. אין להגדיר פונקציה נוספת. 5

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

פתרון תרגיל 2 void X(int lines){ int static blank; int I; for (i=0; i<blank; i++) putchar(' '); putchar('*'); if(lines==1){ puts(""); return; } for (i=0; i<lines-2; i++) putchar(' '); puts("*"); blank++; X(lines-2); blank--; for (i=0; i<blank; i++) putchar(' '); putchar('*'); for (i=0; i<lines-2; i++) putchar(' '); puts("*"); } 7

תרגיל 3 רקורסיה נתונה התכנית הבאה : int what1(char *str){ if(*str == '\0')return 0; if(*str >= '0' && *str <='9') return what1(str+1)*10 + *str - '0'; return what1(str+1); } void what2(char **arr, int num){ if(!num) return; printf("%d\n",what1(*arr)); what2(arr+1, num-1); } void main(){ char *a[ ]={"e=mc2", "1=one, 2=two, 3=three", "one, two, three", "(4+5)*5-7=38"}; what2(a, 4); } 8 מה הפלט של התכנית הנ " ל ? הסבר במשפט אחד מה יעודה של הפונקציה what1 ? הסבר במשפט אחד מה יעודה של הפונקציה what2 ?

פתרון תרגיל 3 א. מה הפלט של התכנית הנ"ל ? ב. הסבר במשפט אחד מה יעודה של הפונקציה what1 ? הפונקציה מחזירה מספר מורכב מספרות המחרוזת בסדר הפוך. ג. הסבר במשפט אחד מה יעודה של הפונקציה what2 ? הפונקציה הופכת את המחרוזות של המערך הדו-מימדי למספרים מורכבים מספרות המחרוזות בסדר הפוך ומדפיסה אותם. 9

תרגיל 4 עצים נתונה ההגדרה: typedef struct treeNode treeNode; struct treeNode{ int value; treeNode *left, *right; }; כתוב פונקציה treeNode* freeMin(treeNode* root) שמקבלת שורש של עץ בינארי ממוין (לפי הכלל "שמאל קטן- ימין גדול"). הפונקציה משחררת את הקודקוד המכיל את הערך הקטן ביותר בעץ ומעדכנת את העץ בהתאם. אין להעתיק ערך (value) ממבנה למבנה. 10

תרגיל 4 עצים לדוגמא: 11

פתרון תרגיל 4 treeNode* freeMin(treeNode* root){ treeNode *temp; if(!root) return NULL; if(! root->left){ temp = root ->right; free(root); return temp; } root->left = freeMin(root ->left); return root; } 12

תרגיל 5 מחרוזות כתוב פונקציה void blank(char *sentence) שמקבלת מחרוזת שהיא משפט ומצמצמת רווחים במשפט. 1.אין להשאיר רוח לפני המילה הראשונה 2.אין להשאיר רוח בסוף המשפט 3.אסור שיהיו שני רווחים ברצף במשפט 4.אין ליצור או להשתמש במערך או במחרוזת עזר. דוגמה: הפונקציה תהפוך את המחרוזת " this is an example of sentence. ” ל- "this is an example of sentence.” 13

פתרון תרגיל 5 void blank(char *sentence){ int i=0, j=0, first=0; while(sentence[i]){ if(sentence[i]!=' '){ first=1; sentence[j++]=sentence[i++]; } else if(first){ sentence[j++]=sentence[i++]; first=0; } else i++; } if(sentence[j]==' ') j--; sentence[j]='\0'; } 14

תרגיל 6 רשימות הפונקציה void reduce(item *head) שמקבלת עוגן של רשימה משורשרת של מבנים מטיפוס item ומצמצמת את הרשימה כך שמכל רצף של אותו מספר נשאר רק מבנה אחד עם המספר עצמו ומספר המופעים (occur) של המספר ברצף (שאר המבנים באותו רצף משתחררים). 15 typedef struct item{ int number; //המספר int occur; // מספר המופעים struct item *next; }item;

תרגיל 6 רשימות השלימו בדפי התשובות את הקטעים החסרים. void reduce(item *head){ item* temp; int count = ?? 1 ??; if ?? 2 ?? ; while(?? 3 ??) if( ?? 4 ?? ){ ?? 5 ??; ?? 6 ??; ?? 7 ?? ; count++; } else{ head->occur = count; ?? 8 ?? ; ?? 9 ?? ; } ?? 10 ?? ; } 16

פתרון תרגיל 6 void reduce(item *head){ item* temp; int count = 1; if(!head) return; while(head->next) if(head->number == head->next->number){ temp = head->next; head->next = temp->next; free(temp); count++; } else{ head->occur = count; head = head ->next; count = 1; } head->occur = count; } 17