שפת C/שימוש בספריות/תרגילים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי


כדאי לדעת:

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

הדפסת הזמן הנוכחי[עריכה]

דרגת קושי: ☆ ☆ ★ ★


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


רמז - קובץ הכותרת המתאים

time.h



פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.




פתרון
#include <stdio.h>
#include <time.h>

int main(){
	const time_t timer = time(NULL);
    printf("Now %s\n", ctime(&timer));
}


השוואה בין שתי מחרוזות[עריכה]

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


רמז - קובץ הכותרת המתאים

string.h



פתרון

נחפש בקובץ הכותרת string.h, ונראה שישנה פונקציה strcmp המקבלת שתי מחרוזות, ומחזירה -1, 0, או 1, בדיוק לפי הסדר הלקסיקוגראפי ביניהן. כל שנותר הוא לתרגם ערכים אלה להדפסה מתאימה:

#include <string.h>
#include <stdio.h>


void print_lex(const char *lhs, const char *rhs)
{
  switch(strcmp(lhs, rhs))
  {
  case -1:
    printf("The string %s goes before %s\n", lhs, rhs);
    break;
  case 0:
    printf("The strings %s and %s are equal\n", lhs, rhs);
    break;
  case 1:
    printf("The string %s goes before %s\n", rhs, lhs);   
    break;
  };
}


הפיכת מחרוזת לשלם[עריכה]

כתוב פונקציה המקבלת מחרוזת, ומחזירה מספר שלם. אם תוכן המחרוזת הוא מספר שלם חיובי, היא מחזירה מספר זה. אחרת היא מחזירה -1.


רמז - קובץ הכותרת המתאים

stdlib.h



פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.




פתרון


כתיבת וקריאת מערך לקובץ ומקובץ[עריכה]

כתוב שתי פונקציות, בעלת ההצהרות הבאות:

int array_to_file(FILE *fp, const void *p, unsigned long num, unsigned long size);
int file_to_array(FILE *fp, void *p, unsigned long num, unsigned long size);

שתי הפונקציות מקבלות מצביע לקובץ (fp), ומצביע (p) למשהו לא ידוע לחלוטין. למעשה, p מצביע למערך בעל num איברים, שגודל כל אחד מהם size. על הפונקציה הראשונה לכתוב את המערך לקובץ, ועל השניה לקרוא את המערך מהקובץ. כל אחת מהפונקציות צריכה להחזיר 0 אם הפעולה הצליחה, ו-1 אם לא.

להלן דוגמה לשימוש:

const int a[5] = {1, 3, 4, 5, 2};

FILE *const fp = fopen("test.txt", "wt");

array_to_file(fp, a, 5, sizeof(int));


רמז - קובץ הכותרת המתאים

stdio.h



פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.




פתרון
fread
fwrite