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

שאלה 1

כתבו פונקציה כדלהלן:

void minmax(int n,double *a,double *min,double *max);

הפונקציה minmax מקבלת מספר שלם  ומצביע a לאיבר הראשון במערך בן n איברים ( לפחות ), ומחשבת לתוך תאי הזכרון המוצבעים ע"י min ו-max את המינימום והמקסימום ( בהתאמה ) של n האיברים הראשונים במערך.

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

שאלה 2

א. כתבו שתי פונקציות כדלהלן:
double *pointer_of_max(int n,double *a);
void sort(int n,double *a);

הפונקציה pointer_of_max מקבלת מצביע a לתא ראשון במערך, ומחזירה מצביע לאיבר המקסימלי מבין n האיברים הראשונים במערך ( ניתן להניח כי  ).
הפונקציה sort ממיינת מערך a בן n איברים בסדר עולה, ע"י שימוש בפונקציה pointer_of_max.

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

הערה: המימוש של שתי הפונקציות pointer_of_max ו-sort יעשה ע"י שימוש במצביעים בלבד ( כלומר, ללא שימוש ב- [ ] ).

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

שאלה 3

כתבו פונקציה כדלהלן:
char *my_strstr(char *s,char *t);

הפונקציה my_strstr מחזירה מצביע למופע הראשון של המחרוזת t במחרוזת s. במידה והמחרוזת t לא מופיעה כתת-מחרוזת ב-s, הפונקציה תחזיר NULL.

דוגמאות:

my_strstr(“abcxyz”,”cxy”) תחזיר מצביע לאיבר השלישי.
my_strstr(“abcxyz”,”cxyy”) תחזיר NULL.

על מנת לבדוק את הפונקציה, כתבו פונקצית main הקוראת מחרוזת מהקלט ומדפיסה את תוצאות הרצת הפונקציה my_strstr.

הערה: המימוש של הפונקציה my_strstr יעשה ע"י שימוש במצביעים בלבד ( כלומר, ללא שימוש ב- [ ] ).  כמו כן, במימוש my_strstr אין להשתמש בפונקציות ספריה.

שאלה 4

כתבו פונקציה כדלהלן:

int palindrome(char *s);

הפונקציה palindrome תחזיר 1 אם המחרוזת s היא פולינדרום. אחרת, הפונקציה תחזיר 0.

דוגמאות:

palindrome(“abcxyzyxcba”) תחזיר 1.
palindrome(“abcxyzcxyy”) תחזיר 0.

על מנת לבדוק את הפונקציה, כתבו פונקצית main הקוראת מחרוזת מהקלט ומדפיסה את תוצאות הרצת הפונקציה palindrome.

       

בהצלחה !!!