Presentation is loading. Please wait.

Presentation is loading. Please wait.

תכנות בשפת C תרגול 14 תרגול חזרה תרגילים ממבחנים 04.06.2011.

Similar presentations


Presentation on theme: "תכנות בשפת C תרגול 14 תרגול חזרה תרגילים ממבחנים 04.06.2011."— Presentation transcript:

1 תכנות בשפת C תרגול 14 תרגול חזרה תרגילים ממבחנים 04.06.2011

2 מטרת התרגול חזרה באמצעות תרגילים ממבחנים 2 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel

3 תרגיל 1 ( מבחן – 15 נק') 3 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel נתונה התכנית הבאה : #include int what(int n){ int i, sum=0; if(!n) return 1; for (i=0; i<n; i++) sum += what(i); return sum; } void main(){ printf("%d\n",what(4)); printf("%d\n",what(10)); } א. (10 נקודות) מה הפלט של התכנית הנ"ל? ב. (5 נקודות) מה הנוסחה של הערך המוחזר של what(n) ?

4 תרגיל 1 (פתרון) 4 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel א. 8, 512. ב.

5 תרגיל 2 (מבחן – 20 נק') 5 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel יש רק בן אחד ! עץ בינארי נקרא מלא, אם הוא ריק או שלכל צומת שלו יש אפס או שני בנים בלבד. דוגמה לעץ בינארי מלא : דוגמה לעץ בינארי לא מלא :

6 6 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel #define FALSE 0 #define TRUE 1 typedef struct { int key ; double val; … } Data; typedef struct TreeNode { struct TreeNode *right ; struct TreeNode *left ; Data TreeNode_info; } TreeNode; כתבו פונקציה רקורסיבית isFull המקבלת כארגומנט מצביע לשורש העץ ומחזירה TRUE אם העץ מלא ו - FALSE אחרת. הפונקציה סורקת את העץ פעם אחת בלבד ואינה משתמשת באף פונקצית עזר. תרגיל 2 (מבחן – 20 נק')

7 7 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel int isFull (TreeNode * root) { if (!root) return TRUE; if ((root->left && !(root->right))|| (root->right && !(root->left))) return FALSE; return(isFull(root->left)&& isFull(root->right)); } תרגיל 2 (פתרון)

8 8 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 3 (מבחן – 18 נק') void strcombine(char *s1, char *s2, char *s3) { char *temp; while (*s1 ) { for (temp=s2; ?? 1 ?? && ?? 2 ?? ; temp++); if(*temp==’\0’){ ?? 3 ?? = ?? 4 ??; ?? 5 ??; } ?? 6 ??; } ?? 7 ??; } נתונה הפונקציה strcombine(…) שמקבלת כארגומנטים שלוש מחרוזות s1,s2 ו - s3. הפונקציה מכניסה למחרוזת s3 תווים מהמחרוזת s1 שאינם מופיעים במחרוזת s2.

9 9 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 3 (פתרון) ?? 1 ??= *temp ?? 2 ?? = *temp != *s1 ?? 3 ?? = *s3 ?? 4 ?? = *s1 ?? 5 ?? = s3++ ?? 6 ?? = s1++ ?? 7 ?? = *s3 = ‘\0’ ?? 8 ?? = strcombine(one, two, three) ?? 9 ?? = strcombine(two, one, three + strlen(three)) א. השלם את הקטעים החסרים ( מסומנים ב -??) בפונקציה הנ " ל.

10 10 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 3 (פתרון) ב. השלם את הקטעים החסרים בפונקציה main() הבאה שמכניסה למחרוזת three את כל התווים שמופיעים רק באחת מהמחרוזות one או two באמצעות פונקצית strcombine. void main(){ char one[]="abflx", two[]="baowexr", three[30]; ?? 8 ??; ?? 9 ??; puts(three); } בסוף ביצוע התכנית הנ " ל המחרוזת three מכילה את המילה “flower” ?? 8 ?? = strcombine(one, two, three) ?? 9 ?? = strcombine(two, one, three + strlen(three))

11 11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 4 (מבחן – 20 נק') typedef struct node{ int value; node *next; } node; 221112 11 22 head NULL יש לכתוב פונקציה countDifItems(node *list) int המקבלת כארגומנט מצביע לרשימה מקושרת ומחזירה את מספר הערכים השונים (value) שברשימה. לדוגמה, עבור הרשימה באה : countDifItems(head) שווה 3.

12 12 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 4 (פתרון) int countDifItems(node *list) { node *temp; int found, count = 0; while(list){ temp = list->next; found = 0; while(temp && !found){ if(temp->value == list->value) found = 1; temp = temp->next; } if(!found) count++; list = list->next; } return count; }

13 13 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 5 ( מבחן – 20 נק') כתוב פונקצית char *sentence(char ** words) המקבלת כארגומנט מערך words של מחרוזות ( כל איבר במערך words הוא מצביע למחרוזת ). כל מחרוזת מכילה מילה אחת. המילה האחרונה מסתיימת בנקודה ( התו '.'). ניתן להניח שבמערך לפחות מילה אחת. הפונקציה בונה ומחזירה מחרוזת חדשה שהיא המשפט המורכב מכל המילים של המערך words לפי הסדר במערך.

14 14 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 5 ( מבחן – 20 נק') picture is worth a thousand words.. A words דוגמא : המשפט שמחזירה פונקצית sentence(words) הוא : “A picture is worth a thousand words." הערה : בין מילה למילה במשפט רווח אחד בלבד.

15 15 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel תרגיל 5 ( פתרון) char *sentence(char ** words){ char *newstring, *save; int length, lines; for(lines = length=0; ; lines++){ length = length + strlen(*(words + lines) ) + 1; if(*(*(words + lines) + strlen(*(words + lines)) - 1) == '.') break; } newstring = (char *)malloc(length * sizeof(char)); newstring[0] = '\0'; for( save = (words) ; (words) <= save + lines ; (words) ++){ strcat(newstring, *(words)); if(*(words) < save + lines) strcat(newstring, " "); else newstring[length - 1] = '\0'; } return newstring; }


Download ppt "תכנות בשפת C תרגול 14 תרגול חזרה תרגילים ממבחנים 04.06.2011."

Similar presentations


Ads by Google