מכללת אורט כפר-סבא תכנות מערכות בשפת C תרגיל מס' 8 פתרו את השאלות הבאות .יש לסיים את התרגיל עד יום א' ).(9.11 שאלה 1 בשיעור הכרנו את הפונקציות התקניות strncpyו) strstr-המוגדרות שתיהן ביחידת הספרייה (string.hאך לא כתבנו עבורן מימוש ,אלא רק השתמשנו בהן .בנוסף ,הכרנו את הפונקציה התקנית ) stricmpהמוגדרת אף היא ב ,(string.h-וכתבנו עבורה מימוש "בזבזני" ,המשתמש בהקצאת זיכרון דינאמית עבור מחרוזות-עזר. א .כתבו מימוש ל .strstr-בדקו את המימוש שלכם בעזרת mainשעושה שימוש בפונקציה. בדקו גם מקרי קצה בהם יש לטפל )כדוגמת מקרה שבו אחת או יותר משתי המחרוזות היא מחרוזת ריקה ,וכו'(. ב .כתבו מימוש ל .strncpy-בדקו את המימוש שלכם בעזרת mainשעושה שימוש בפונקציה. בדקו גם מקרי קצה בהם יש לטפל )כדוגמת מקרה שבו המחרוזת המועתקת אורכה קטן מ n-תווים ,וכו'(. ג .כתבו מימוש ל ,stricmp-שאינו עושה שימוש בהקצאת זיכרון דינאמית .בדקו את המימוש שלכם בעזרת mainשעושה שימוש בפונקציה. שאלה 2 בשיעור הכרנו את הפונקציה התקנית .strchrפונקציה תקנית נוספת )המוגדרת גם היא ב- ,(string.hהדומה לה מאוד ,היא הפונקציה ,strrchrשכותרתה: )char *strrchr (const char *s, const char c הפונקציה strrchrמקבלת מחרוזת sותו ,cומחזירה מצביע למופע האחרון של התו cב .s-אם התו cלא מופיע כלל ב ,s-הפונקציה מחזירה .NULLלדוגמא :אם " ,s = "what aboutאז )' strrchr(s,'aיחזיר מצביע לאות הראשונה של המילה .aboutלעומת זאת ,הזימון )'strrchr(s,'d יחזיר .NULLממשו את הפונקציה .strrchr 1 שאלה 3 כתבו תכנית הקולטת מהמשתמש מחרוזת שמכילה מילים )כל מילה מורכבת מאותיות קטנות או גדולות מהאלפבית הלועזי ,ואורכה לפחות אות אחת( ,שביניהן יש רווח בודד .התכנית תציג כפלט את המילה הכי ארוכה במחרוזת. לדוגמא ,עבור הקלט " "End of passion play crumbling awayיוצג הפלט "."crumbling שאלה 4 כתבו פונקציה שכותרתה: )int foobar (const char *s, const char *sub הפונקציה מקבלת שתי מחרוזות s ,ו .sub-אם המחרוזת sמכילה את המחרוזת subוגם את היפוכה של ,subאז הפונקציה תחזיר ,1ואחרת -תחזיר .0שימו לב כי זו אינה פונקציה תקנית! לדוגמא ,עבור הזימון )" foobar("asstheasehtagreen","theיוחזר ,1שכן גם הפרמטר השני " "theוגם היפוכו " ,"ethשתיהן תת-מחרוזות של הפרמטר הראשון .לעומת זאת ,עבור הזימון )" foobar("qwertyupanddown","upaיוחזר ,0שכן אומנם " "upaהיא תת-מחרוזת של הפרמטר הראשון ,אבל היפוכה "apu" -לא מופיעה בפרמטר הראשון כלל. 2 שאלה 5 בשפות התכנות Javaו C#-ניתן לגלות את אורכו של אובייקט מסוג מערך על-ידי שימוש בתכונה .Lengthשפת Cאינה מונחית עצמים ,ומערכים אינם אובייקטים )ולכן – גם אין להם תכונה בשם .(Length א .כיצד ניתן לגלות את גודלו של מערך חד-מימדי )את כמות האיברים בו(? הריצו את התכנית הבאה: >#include <stdio.h )(int main { */מגדירים מערך של חמישה מספרים שלמים */ ;}int arr[5] = {1,2,3,4,5 ;))\n", sizeof(intגודלו של משתנה מטיפוס שלם הוא %dבתים"(printf ;))]\n", sizeof(arr[0כלומר ,גודלו של איבר במערך הוא %dבתים"(printf ;))\n", sizeof(arrגודלו של המערך כולו הוא %dבתים"(printf ;))] ", sizeof(arr)/sizeof(arr[0לכן ,במערך יש %dאיברים"(printf ;return 0 } ב .מעוניינים לנהוג בצורה דומה גם כדי לערוך חישובים לגבי מערך דו-מימדי .השלימו את הביטויים החסרים בתכנית הבאה: >#include <stdio.h )(int main { ;]int matrix[5][3 ;) )(1 \n",גודלו של איבר במטריצה הוא %dבתים"(printf ;) )(2 \n",גודלה של שורה במטריצה הוא %dבתים"(printf ;) )(3 \n",גודלה של המטריצה כולה הוא %dבתים"(printf ;) ;) ;) )(4 )(5 )(6 \n",מספר העמודות במטריצה הוא printf("%d \n",מספר השורות במטריצה הוא printf("%d \n",מספר האיברים במטריצה הוא printf("%d ;return 0 } ג) .רשות( נסו למצוא דרך נוספת לחשב את הביטוי החסר ).(6 3
© Copyright 2025