מבוא למדעי המחשב
This presentation is the property of its rightful owner.
Sponsored Links
1 / 20

מבוא למדעי המחשב PowerPoint PPT Presentation


  • 54 Views
  • Uploaded on
  • Presentation posted in: General

מבוא למדעי המחשב. ארגומנטים לתוכנית בזמן ריצה קבצים הקדם מעבד Preprocessor טיפוסים סדורים Enumerated Types Typedef. ארגומנטים בזמן ריצה Command line arguments. ניתן בשפת C להעביר ארגומנטים לתכנית ← לפונקציה main . main נקראת (ע"י מערכת ההפעלה) עם שני ארגומנטים:

Download Presentation

מבוא למדעי המחשב

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


5439194

מבוא למדעי המחשב

ארגומנטים לתוכנית בזמן ריצה

קבצים

הקדם מעבד Preprocessor

טיפוסים סדורים Enumerated Types

Typedef


Command line arguments

ארגומנטים בזמן ריצהCommand line arguments

  • ניתן בשפת C להעביר ארגומנטים לתכנית ← לפונקציה main.

  • main נקראת (ע"י מערכת ההפעלה) עם שני ארגומנטים:

    • argc – מספר הארגומנטים שהועברו למערכת ההפעלה.

    • argv:

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

    • argv[0] מכיל את שם התכנית, לכן, argc≥1.

    • הארגומנט הראשון הוא argv[1] והאחרון argv[argc-1] .


5439194

ארגומנטים בזמן ריצה - דוגמא

/* echo1.c */

/* echo command-line arguments to output */

#include <stdio.h>

int main(int argc, char *argv[])

{

int i;

for (i=1; i<argc; i++) {

printf("%s ", argv[i]);

}

printf("\n");

return 0;

}


5439194

ארגומנטים בזמן ריצה - דוגמא

/* echo2.c */

/* echo command-line arguments to output */

#include <stdio.h>

int main(int argc, char *argv[])

{

while (--argc>0) {

printf("%s ", *++argv);

}

printf("\n");

return 0;

}


5439194

ארגומנטים בזמן ריצה - הערות

  • הנתונים מתקבלים (ע"י argv) כמחרוזות.

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

  • המרה כזאת ניתן לבצע בעזרת הפונקציות (הנמצאות בספריה stdlib.h):

  • int atoi (char *) – מבצעת המרה ממחרוזת למספר שלם (asci to integer).

  • float atof (char *) – מבצעת המרה ממחרוזת למספר ממשי (asci to float).

  • long atol (char *) – מבצעת המרה ממחרוזת למספר שלם גדול (asci to long).


Files

קבצים Files

  • קובץ הוא סדרה של תווים.

  • אין גישה אקראית למקום כלשהוא בקובץ, אלא יש לקרוא תו אחר תו ולהגיע לתו שאנו מחפשים (להבדיל ממערך).

  • עד כה כל התכניות שכתבנו קראו מקובץ הקלט הסטנדרטי (בעזרת הפונקציות scanf() ו- getchar() ) וכתבו לקובץ הפלט הסנדרטי (בעזרת הפונקציות printf() ו- putchar()).

  • בשפת C ניתן לקרוא מקבצים ולכתוב לקבצים ישירות מהתכנית עצמה.


5439194

קבצים בשפת C

  • FILE הינו טיפוס נתונים שמחזיק אינפורמציה על קבצים ומוגדר ב- <stdio.h> .

  • יש לעבוד תמיד עם מצביע ל- FILE.

    FILE *fp; /* FILE הוא מצביע לרשומת fp */

  • בקובץ <stdio.h> מוגדרים שלושה מצביעים לטיפוס FILE והם:

    • stdin – מצביע לקובץ הקלט הסטנדרטי.

    • stdout – מצביע לקובץ הפלט הסטנדרטי.

    • stderr – מצביע לקובץ השגיאות הסטנדרטי.

  • הקבצים אשר מוצבעים ע"י המצביעים הנ"ל נפתחים ע"י מערכת ההפעלה עם התחלת ביצוע התכנית.

  • אבל, לעיתים נרצה להשתמש גם בקבצים נוספים...


5439194

קבצים בשפת C

מה צריך לדעת?

  • פתיחת קובץ

  • כתיבה לקובץ

  • קריאה מקובץ

  • סגירת קובץ


5439194

פתיחת קבצים בשפת C

פתיחת קובץ – ע"י fopen:

FILE *fopen (char *filename, char *mode);

  • filename – מחרוזת תווים המכילה את שם הקובץ אשר מעוניינים לפתוח.

  • mode – מחרוזת תווים אשר מציינת את מטרת פתיחת הקובץ:

    • “r” – פתיחת קובץ לקריאה.

    • “w” – פתיחת קובץ לכתיבה (מוחק את תוכנו הקיים).

    • “a” – פתיחת קובץ להוספה בסופו (append).

  • הפונקציה fopen מחזירה מצביע לקובץ במידה ופתיחתו הצליחה, אחרת מחזירה NULL.

  • אם קובץ לא קיים, הוא ייווצר, במידת האפשר.

    FILE *data;

    data=fopen(“mydata.txt”,”r”);


5439194

סגירת קבצים בשפת C

סגירת קובץ – ע"י fclose:

int fclose (FILE *pfile);

הפונקציה מחזירה 0 במידה והסגירה הצליחה.

  • בסיום השימוש בקובץ חובה לסגור את הקובץ.

  • הפקודה exit מבצעת fclose לכל הקבצים הפתוחים, להבדיל מהפקודה return. לכן, כשעובדים עם קבצים כדאי להשתמש בפקודה exit.


5439194

קבצים - קריאה וכתיבה של תווים בודדים

  • על מנת לקרואתו מקובץ נשתמש בפונקציה

    int fgetc (FILE *fp)

    פונקציה זו פועלת בדיוק כמו הפונקציה getchar() , רק שהקלט הוא מהקובץ שמצביעו fp במקום מקובץ הקלט הסטנדרטי.

    הפונקציה מחזירה EOF בסוף הקובץ או במקרה של טעות.

  • על מנת לכתובתו מקובץ נשתמש בפונקציה

    int fputc (int c, FILE *fp)

    פונקציה זו פועלת בדיוק כמו הפונקציה putchar() , רק שהפלט הוא לקובץ שמצביעו fp במקום לקובץ הפלט הסטנדרטי.

    הפונקציה מחזירה את התו שנכתב או EOF במקרה של טעות.


5439194

קבצים - קריאה וכתיבה

  • int fscanf (FILE *fp, …)

    פונקציה זו פועלת בדיוק כמו הפונקציה scanf() , רק שהקלט הוא מהקובץ שמצביעו fp במקום מקובץ הקלט הסטנדרטי.

  • int fprintff (FILE *fp, …)

    פונקציה זו פועלת בדיוק כמו הפונקציה printf() , רק שהפלט הוא לקובץ שמצביעו fp במקום לקובץ הפלט הסטנדרטי.


5439194

קבצים - דוגמא

/* mycat.c - append the content of the first file to the second file */

#include <stdio.h>

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;

}


Pre processor

הקדם מעבד pre processor

הקדם מעבד הינו הצעד הראשון של קומפילציה. הוא מספק מספר אפשרויות.

למשל:

  • File inclusion

    ההנחיה

    #include “filename”

    #include <filename>

    גורמת לתוכן הקובץ filename "להישתל" במקום בו היא מופיעה. קובץ מוכל יכול להכיל בעצמו שורות include.

    כאשר קובץ מוכל משתנה יש לקמפל מחדש את כל הקבצים שטוענים אותו.


Pre processor1

הקדם מעבד pre processor

  • Macros

    ההנחיה#define name text

    גורמת להחלפת כל המופעים של name ב- text.

    תחום ההחלפה: מנקודת ההגדרה עד סוף הקובץ.

    text יכול להימשך מעבר לשורה אחת ע"י השימוש בתו "\" בסוף השורה.

    דוגמאות:

    #define MAX 100

    #define forever for(;;)


Pre processor2

קוד מקורי

לאחר פעולת ה- pre processor

:

z=MAX(x,y);

:

:

z=(x)>(y) ? (x):(y);

:

הקדם מעבד pre processor

  • Macros - המשך

    ניתן להגדיר macros עם ארגומנטים.

    למשל:

    #define MAX(A,B) ((A)>(B) ? (A):(B))

  • ההבדלים בין macros לפונקציות:

  • אין כל התייחסות לסוג הפרמטרים

  • אין כל קריאה לפונקציה ב- macros


Pre processor3

הקדם מעבד 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)


Enumerated types

טיפוסים סדורים Enumerated Types

  • הגדרת סידרה של קבועים שלאבריה יש משהוא משותף (ע"י הגדרת טיפוס נתונים חדש).

  • דוגמא:

    #define Jan 1

    #deine Feb 2

    :

    #define Dec12

    enum months {Jan=1, Feb=2, …, Dec=12};

    enum months {Jan=1, Feb, …, Dec};


Enumerated types1

טיפוסים סדורים Enumerated Types

  • דוגמא:

    #define TRUE 1

    #deine FALSE 0

    enum boolean {FALSE,TRUE};


Typedef

Typedef

  • לא מייצר טיפוסי משתנים חדשים.

  • מאפשר למתכנת לקחת טיפוס נתונים קיים, ולקרוא לו בשם נוסף.

  • דוגמא:

    typedef int Length;

    :

    Length len, maxlen;

    Length length[20];

  • יתרונות:

    • מקל על המשתמש ועל המתכנת בקריאת קוד התכנית וקישורו למטרתה.

    • עזרה בתיעוד הקוד.

    • פורטביליות – ע"י הגדרת טיפוסי נתונים בעזרת typedef, עם שינוי טיפוס הנתונים מספיק לשנות את ה- typedef ולא את כל המופעים בקוד.


  • Login