Title: Scheme - Final Exam - Spring 2000
Author: Uri Zwick
Last saved by: gutner

מתוך 
סמסטר א' תשס"ד
 15  בינואר  2004
תרגיל 5 - מבוא למחשבים לסטטיסטיקאים
0365.1800
שי גוטנר

תאריך הגשה: 29 בינואר 2004.

שאלה 1

כתבו פונקציה כדלהלן:
int merge_sort(double a[],int n);

הפונקציה merge_sort ממיינת מערך a בן n איברים בסדר עולה בזמן  ע"י שימוש באלגוריתם merge-sort.

על מנת לבדוק את הפונקציה merge_sort, כתבו תוכנית הקוראת מספר טבעי n ו-n מספרים ממשיים, ומדפיסה אותם בסדר ממויין ( מהקטן לגדול ).

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

שאלה 2

כתבו תוכנית הקוראת מספר טבעי n ושתי סדרות באורך n של מספרים מרוכבים:  ו- ומחשבת את ערך הביטוי .

דוגמה:

קלט:
3
-3 5   -0.5 3.5   0 1
1 2   -1 -3   -1 -1

פלט: 
17.000000-3.000000i

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

שאלה 3

הגדירו טיפוס נתונים בשם student לתחזוקת שם הסטודנט ( שם פרטי + שם משפחה ), תעודת זהות ואוסף ציונים בקורסים המורכב ממספר שלם k המציין את מספר הקורסים ומערך של k ציונים ( 0-100 ) בקורסים. ניתן להניח כי אורך שם פרטי או שם משפחה .

כתבו תוכנית הקולטת מספר טבעי n ורשומות של n סטודנטים ומדפיסה את רשומת הסטודנט בעל ממוצע הציונים הגבוה ביותר.

בתוכנית עליכם לממש את הפונקציות הבאות:

void read_student(student *s);
void free_student(student *s);
double average(student *s);
void copy_student(student *t,student *s);
void write_student(student *s);

הפונקציה read_student מקבלת מצביע לרשומת סטודנט וקוראת מהקלט את פרטי הסטודנט לתוך הרשומה. על הפונקציה לבצע הקצאת זכרון דינמית עבור מערך ציוני הסטודנט.

הפונקציה free_student מקבלת מצביע לרשומת סטודנט, משחררת את הזכרון של מערך ציוני הסטודנט ומשימה במצביע מערך זה NULL.

הפונקציה average מקבלת מצביע לרשומת סטודנט ומחזירה את ממוצע ציוניו.

הפונקציה copy_student מקבלת מצביע לרשומת סטודנט s ומצביע לרשומת סטודנט t, ומשכפלת את המידע ברשומה המוצבעת ע"י s לרשומה המוצבעת ע"י t. על הפונקציה לבצע הקצאת זכרון דינמית עבור ציוני הסטודנט המוצבע ע"י t.

הפונקציה write_student מקבלת מצביע לרשומת סטודנט ומדפיסה את נתוניו.

דוגמה:

קלט:

4
Mar  Zipan     54395418  7  81  82  90  70  76  93  86
Mar  Shmelo  33714937  8  93  89  72  63  95  97  96  100
Seffi  Gaon     39754351  5  44  65  22  100  21
Yosef  Ilui       63549117  6  39  70  81  63  67  71

פלט: 

Mar  Shmelo  33714937  8  93  89  72  63  95  97  96  100

הערות:

1.	ניתן להניח כי הקלט חוקי.
2.	הקפידו לשחרר זכרון אותו הנכם מקצים.
3.	אין צורך להחזיק בזכרון מערך של רשומות סטודנטים.

  

בהצלחה !!!