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

17
תתתתת תתתתC תתתתת15 תתתתת תתתת2 תתתתתתת תתתתתתת12.06.2011
  • date post

    22-Dec-2015
  • Category

    Documents

  • view

    231
  • download

    9

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

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

Cתכנות בשפת 15תרגול

2 תרגול חזרהתרגילים ממבחנים

12.06.2011

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

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

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

- רשימות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;

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

רשימות1פתרון תרגיל

 

1: !source->next

2: source->next

3: fast->next

4: fast->next

5: NULL

6: source2

4

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

רקורסיה2תרגיל :4'שאלה מס

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

יודפס: * * * * * * * * * * * * * * ** * 

. הכוכבית הראשונה חייבת להופיע בתחילת השורה הראשונה.אין להגדיר פונקציה נוספת

5

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

2פתרון תרגיל :פתרון

, אחר כך לפתור את Xהלוגיקה היא להדפיס את השורה הראשונה של ללא השורה הראשונה והאחרונה ואז להדפיס את השורה Xתת-הבעיה עבור

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

התרשים הבא:

6

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

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

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

רקורסיה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הפונקציה

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

3פתרון תרגיל

א. מה הפלט של התכנית הנ"ל ?23210

837554 ?what1ב. הסבר במשפט אחד מה יעודה של הפונקציה

הפונקציה מחזירה מספר מורכב מספרות המחרוזת בסדר הפוך.  

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

מורכבים מספרות המחרוזות בסדר הפוך ומדפיסה אותם. 

9

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

עצים4תרגיל

נתונה ההגדרה: typedef struct treeNode treeNode;struct treeNode{

int value;treeNode *left, *right;

}; 

שמקבלת שורש treeNode* freeMin(treeNode* root)כתוב פונקציה של עץ בינארי ממוין (לפי הכלל "שמאל קטן- ימין גדול"). הפונקציה

משחררת את הקודקוד המכיל את הערך הקטן ביותר בעץ ומעדכנת את העץ בהתאם.

) ממבנה למבנה.valueאין להעתיק ערך (

10

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

עצים4תרגיל

לדוגמא:•

11

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

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

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

מחרוזות5תרגיל

שמקבלת void blank(char *sentence)כתוב פונקציה מחרוזת שהיא משפט ומצמצמת רווחים במשפט.

אין להשאיר רוח לפני המילה הראשונה1.

אין להשאיר רוח בסוף המשפט2.

אסור שיהיו שני רווחים ברצף במשפט3.

אין ליצור או להשתמש במערך או במחרוזת עזר.4.דוגמה:

 הפונקציה תהפוך את המחרוזת

" this is an example of sentence . ””.this is an example of sentenceל- "

13

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

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

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

רשימות6תרגיל  

שמקבלת עוגן של רשימה משורשרת void reduce(item *head)הפונקציה ומצמצמת את הרשימה כך שמכל רצף של אותו itemשל מבנים מטיפוס

) occurמספר נשאר רק מבנה אחד עם המספר עצמו ומספר המופעים )של המספר ברצף )שאר המבנים באותו רצף משתחררים). 

15

 typedef struct item{int number; //המספר int occur; // מספר המופעיםstruct item *next;}item;

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

רשימות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

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

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