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

17
תתתתת תתתתC תתתתת15 תתתתת תתתת2 תתתתתתת תתתתתתת12.06.2011

Upload: beauregard-daniel

Post on 30-Dec-2015

85 views

Category:

Documents


1 download

DESCRIPTION

תכנות בשפת C תרגול 15 תרגול חזרה 2 תרגילים ממבחנים 12.06.2011. fscanf - format specification Fields. A format specification has the following form: % [ * ] [ width ] type - PowerPoint PPT Presentation

TRANSCRIPT

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