20
1 בבבב בבבבב בבבבב בבבב בבבבב בבבבב בבבבבבבבב בבבבבבב בבבב בבבב בבבבב בבבב בבבבPreprocessor בבבבבבב בבבבבבEnumerated Types Typedef

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

  • Upload
    storm

  • View
    32

  • Download
    4

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: מבוא למדעי המחשב

1

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

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

Preprocessorהקדם מעבד

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

Typedef

Page 2: מבוא למדעי המחשב

2

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

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

main:נקראת )ע"י מערכת ההפעלה( עם שני ארגומנטים .1argc.מספר הארגומנטים שהועברו למערכת ההפעלה –

.2argv: כל הארגומנטים, את המכילות מחרוזות של למערך מצביע

ארגומנט במחרוזת נפרדת.argv[0] ,מכיל את שם התכנית, לכן argc≥1. הארגומנט הראשון הואargv[1] והאחרון argv[argc-1] .

Page 3: מבוא למדעי המחשב

3

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

/* 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;}

Page 4: מבוא למדעי המחשב

4

ארגומנטים בזמן ריצה - דוגמא/* 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;

}

Page 5: מבוא למדעי המחשב

5

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

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

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

(:stdlib.hבספריה int atoi )char *( מבצעת המרה ממחרוזת למספר שלם –

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

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

(.asci to longשלם גדול )

Page 6: מבוא למדעי המחשב

6

Filesקבצים .קובץ הוא סדרה של תווים אין גישה אקראית למקום כלשהוא בקובץ, אלא יש לקרוא

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

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

(.)(putcharו- בשפתC ישירות לקבצים ולכתוב מקבצים לקרוא ניתן

מהתכנית עצמה.

Page 7: מבוא למדעי המחשב

7

Cקבצים בשפת FILE -ב ומוגדר קבצים על אינפורמציה שמחזיק נתונים טיפוס הינו

<stdio.h >. -יש לעבוד תמיד עם מצביע לFILE.

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

< בקובץstdio.h מוגדרים שלושה מצביעים לטיפוס >FILE:והם stdin.מצביע לקובץ הקלט הסטנדרטי – stdout.מצביע לקובץ הפלט הסטנדרטי – stderr.מצביע לקובץ השגיאות הסטנדרטי –

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

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

Page 8: מבוא למדעי המחשב

8

Cקבצים בשפת

מה צריך לדעת?

פתיחת קובץכתיבה לקובץקריאה מקובץסגירת קובץ

Page 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”(;

Page 10: מבוא למדעי המחשב

10

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

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

int fclose )FILE *pfile(;

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

.בסיום השימוש בקובץ חובה לסגור את הקובץ הפקודהexit מבצעת fclose להבדיל הפתוחים, הקבצים לכל

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

Page 11: מבוא למדעי המחשב

11

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

מקובץ נשתמש בפונקציהתו לקרואעל מנת int fgetc )FILE *fp(

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

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

מקובץ נשתמש בפונקציהתו לכתובעל מנת int fputc )int c, FILE *fp(

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

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

Page 12: מבוא למדעי המחשב

12

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

int fscanf )FILE *fp, …( , רק שהקלט הוא מהקובץ )( scanfפונקציה זו פועלת בדיוק כמו הפונקציה

במקום מקובץ הקלט הסטנדרטי. fpשמצביעו

int fprintff )FILE *fp, …( כמו הפונקציה בדיוק פועלת זו לקובץ )( printfפונקציה הוא , רק שהפלט

במקום לקובץ הפלט הסטנדרטי. fpשמצביעו

Page 13: מבוא למדעי המחשב

קבצים - דוגמא/* 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;

}

Page 14: מבוא למדעי המחשב

14

pre processorהקדם מעבד

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

למשל:

File inclusionההנחיה

#include “filename”#include >filename<

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

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

Page 15: מבוא למדעי המחשב

15

pre processorהקדם מעבד

Macrosdefine name text#ההנחיה

. text ב- nameגורמת להחלפת כל המופעים של תחום ההחלפה: מנקודת ההגדרה עד סוף הקובץ.

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

דוגמאות:

#define MAX 100

#define forever for);;(

Page 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

Page 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(

Page 18: מבוא למדעי המחשב

18

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

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

:דוגמא#define Jan 1#deine Feb 2:#define Dec 12

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

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

Page 19: מבוא למדעי המחשב

19

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

:דוגמא

#define TRUE 1#deine FALSE 0

enum boolean {FALSE,TRUE};

Page 20: מבוא למדעי המחשב

20

Typedef

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

typedef int Length;:Length len, maxlen;Length length[20];

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

ולא את כל המופעים בקוד.typedefהנתונים מספיק לשנות את ה-