שפת 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