Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 מבוא למדעי המחשב ארגומנטים לתוכנית בזמן ריצה קבצים הקדם מעבד Preprocessor טיפוסים סדורים Enumerated Types Typedef.

Similar presentations


Presentation on theme: "1 מבוא למדעי המחשב ארגומנטים לתוכנית בזמן ריצה קבצים הקדם מעבד Preprocessor טיפוסים סדורים Enumerated Types Typedef."— Presentation transcript:

1 1 מבוא למדעי המחשב ארגומנטים לתוכנית בזמן ריצה קבצים הקדם מעבד Preprocessor טיפוסים סדורים Enumerated Types Typedef

2 2 ארגומנטים בזמן ריצה Command line arguments  ניתן בשפת C להעביר ארגומנטים לתכנית ← לפונקציה main.  main נקראת (ע"י מערכת ההפעלה) עם שני ארגומנטים: 1. argc – מספר הארגומנטים שהועברו למערכת ההפעלה. 2. argv:  מצביע למערך של מחרוזות המכילות את הארגומנטים, כל ארגומנט במחרוזת נפרדת.  argv[0] מכיל את שם התכנית, לכן, argc≥1.  הארגומנט הראשון הוא argv[1] והאחרון argv[argc-1].

3 3 ארגומנטים בזמן ריצה - דוגמא /* echo1.c */ /* echo command-line arguments to output */ #include int main(int argc, char *argv[]) { int i; for (i=1; i<argc; i++) { printf("%s ", argv[i]); } printf("\n"); return 0; }

4 4 ארגומנטים בזמן ריצה - דוגמא /* echo2.c */ /* echo command-line arguments to output */ #include int main(int argc, char *argv[]) { while (--argc>0) { printf("%s ", *++argv); } printf("\n"); return 0; }

5 5 ארגומנטים בזמן ריצה - הערות  הנתונים מתקבלים (ע"י argv) כמחרוזות.  אם אנו מעוניינים שהתכנית תקבל ערכים מספריים יש לבצע המרה ממחרוזות לטיפוס המספרי המתאים.  המרה כזאת ניתן לבצע בעזרת הפונקציות (הנמצאות בספריה stdlib.h):  int atoi (char *) – מבצעת המרה ממחרוזת למספר שלם (asci to integer).  float atof (char *) – מבצעת המרה ממחרוזת למספר ממשי (asci to float).  long atol (char *) – מבצעת המרה ממחרוזת למספר שלם גדול (asci to long).

6 6 קבצים Files  קובץ הוא סדרה של תווים.  אין גישה אקראית למקום כלשהוא בקובץ, אלא יש לקרוא תו אחר תו ולהגיע לתו שאנו מחפשים (להבדיל ממערך).  עד כה כל התכניות שכתבנו קראו מקובץ הקלט הסטנדרטי (בעזרת הפונקציות scanf() ו- getchar() ) וכתבו לקובץ הפלט הסנדרטי (בעזרת הפונקציות printf() ו- putchar()).  בשפת C ניתן לקרוא מקבצים ולכתוב לקבצים ישירות מהתכנית עצמה.

7 7 קבצים בשפת C  FILE הינו טיפוס נתונים שמחזיק אינפורמציה על קבצים ומוגדר ב-.  יש לעבוד תמיד עם מצביע ל- FILE. FILE *fp; /* FILE הוא מצביע לרשומת fp */  בקובץ מוגדרים שלושה מצביעים לטיפוס FILE והם: 1. stdin – מצביע לקובץ הקלט הסטנדרטי. 2. stdout – מצביע לקובץ הפלט הסטנדרטי. 3. stderr – מצביע לקובץ השגיאות הסטנדרטי.  הקבצים אשר מוצבעים ע"י המצביעים הנ"ל נפתחים ע"י מערכת ההפעלה עם התחלת ביצוע התכנית.  אבל, לעיתים נרצה להשתמש גם בקבצים נוספים...

8 8 קבצים בשפת C מה צריך לדעת?  פתיחת קובץ  כתיבה לקובץ  קריאה מקובץ  סגירת קובץ

9 9 פתיחת קבצים בשפת C פתיחת קובץ – ע"י fopen: FILE *fopen (char *filename, char *mode);  filename – מחרוזת תווים המכילה את שם הקובץ אשר מעוניינים לפתוח.  mode – מחרוזת תווים אשר מציינת את מטרת פתיחת הקובץ:  “r” – פתיחת קובץ לקריאה.  “w” – פתיחת קובץ לכתיבה (מוחק את תוכנו הקיים).  “a” – פתיחת קובץ להוספה בסופו (append).  הפונקציה fopen מחזירה מצביע לקובץ במידה ופתיחתו הצליחה, אחרת מחזירה NULL.  אם קובץ לא קיים, הוא ייווצר, במידת האפשר. FILE *data; data=fopen(“mydata.txt”,”r”);

10 10 סגירת קבצים בשפת C סגירת קובץ – ע"י fclose: int fclose (FILE *pfile); הפונקציה מחזירה 0 במידה והסגירה הצליחה.  בסיום השימוש בקובץ חובה לסגור את הקובץ.  הפקודה exit מבצעת fclose לכל הקבצים הפתוחים, להבדיל מהפקודה return. לכן, כשעובדים עם קבצים כדאי להשתמש בפקודה exit.

11 11 קבצים - קריאה וכתיבה של תווים בודדים  על מנת לקרוא תו מקובץ נשתמש בפונקציה int fgetc (FILE *fp) פונקציה זו פועלת בדיוק כמו הפונקציה getchar(), רק שהקלט הוא מהקובץ שמצביעו fp במקום מקובץ הקלט הסטנדרטי. הפונקציה מחזירה EOF בסוף הקובץ או במקרה של טעות.  על מנת לכתוב תו מקובץ נשתמש בפונקציה int fputc (int c, FILE *fp) פונקציה זו פועלת בדיוק כמו הפונקציה putchar(), רק שהפלט הוא לקובץ שמצביעו fp במקום לקובץ הפלט הסטנדרטי. הפונקציה מחזירה את התו שנכתב או EOF במקרה של טעות.

12 12 קבצים - קריאה וכתיבה  int fscanf (FILE *fp, …) פונקציה זו פועלת בדיוק כמו הפונקציה scanf(), רק שהקלט הוא מהקובץ שמצביעו fp במקום מקובץ הקלט הסטנדרטי.  int fprintff (FILE *fp, …) פונקציה זו פועלת בדיוק כמו הפונקציה printf(), רק שהפלט הוא לקובץ שמצביעו fp במקום לקובץ הפלט הסטנדרטי.

13 קבצים - דוגמא /* mycat.c - append the content of the first file to the second file */ #include int main(int argc, char *argv[]){ FILE *f1, *f2; int c; if (argc != 3){/* not enough argument files */ printf("Incorrect number of arguments\n"); return 1; } if ((f1=fopen(argv[1],"r"))==NULL){ printf("Can't open file %s\n",argv[1]); return 1; } if ((f2=fopen(argv[2],"a"))==NULL){ printf("Can't open file %s\n",argv[2]); return 1; } while ((c=fgetc(f1))!=EOF){ fputc(c,f2); } fclose(f1); fclose(f2); return 0; }

14 14 הקדם מעבד pre processor הקדם מעבד הינו הצעד הראשון של קומפילציה. הוא מספק מספר אפשרויות. למשל:  File inclusion ההנחיה #include “filename” #include גורמת לתוכן הקובץ filename "להישתל" במקום בו היא מופיעה. קובץ מוכל יכול להכיל בעצמו שורות include. כאשר קובץ מוכל משתנה יש לקמפל מחדש את כל הקבצים שטוענים אותו.

15 15 הקדם מעבד pre processor  Macros ההנחיה#define name text גורמת להחלפת כל המופעים של name ב- text. תחום ההחלפה: מנקודת ההגדרה עד סוף הקובץ. text יכול להימשך מעבר לשורה אחת ע"י השימוש בתו "\" בסוף השורה. דוגמאות: #define MAX 100 #define forever for(;;)

16 16 הקדם מעבד pre processor  Macros - המשך ניתן להגדיר macros עם ארגומנטים. למשל: #define MAX(A,B) ((A)>(B) ? (A):(B)) : z=MAX(x,y); : z=(x)>(y) ? (x):(y); : קוד מקורי לאחר פעולת ה - pre processor ההבדלים בין macros לפונקציות :  אין כל התייחסות לסוג הפרמטרים  אין כל קריאה לפונקציה ב - macros

17 17 הקדם מעבד pre processor  Macros - המשך השימוש ב- macros ודרך כתיבתם דורשים זהירות רבה! דוגמאות:  #define MAX(A,B) ((A)>(B) ? (A):(B)) : z=MAX(i++,j++);  #define square(x) x*x : z=square(i+1)

18 18 טיפוסים סדורים Enumerated Types  הגדרת סידרה של קבועים שלאבריה יש משהוא משותף (ע"י הגדרת טיפוס נתונים חדש).  דוגמא: #define Jan 1 #deine Feb 2 : #define Dec12 enum months {Jan=1, Feb=2, …, Dec=12}; enum months {Jan=1, Feb, …, Dec};

19 19 טיפוסים סדורים Enumerated Types  דוגמא: #define TRUE 1 #deine FALSE 0 enum boolean {FALSE,TRUE};

20 20 Typedef  לא מייצר טיפוסי משתנים חדשים.  מאפשר למתכנת לקחת טיפוס נתונים קיים, ולקרוא לו בשם נוסף.  דוגמא: typedef int Length; : Length len, maxlen; Length length[20];  יתרונות:  מקל על המשתמש ועל המתכנת בקריאת קוד התכנית וקישורו למטרתה.  עזרה בתיעוד הקוד.  פורטביליות – ע"י הגדרת טיפוסי נתונים בעזרת typedef, עם שינוי טיפוס הנתונים מספיק לשנות את ה- typedef ולא את כל המופעים בקוד.


Download ppt "1 מבוא למדעי המחשב ארגומנטים לתוכנית בזמן ריצה קבצים הקדם מעבד Preprocessor טיפוסים סדורים Enumerated Types Typedef."

Similar presentations


Ads by Google