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

Preview:

DESCRIPTION

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

Citation preview

1

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

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

Preprocessorהקדם מעבד

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

Typedef

2

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

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

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

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

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

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

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;

}

5

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

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

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

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

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

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

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

6

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

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

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

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

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

7

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

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

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

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

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

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

8

Cקבצים בשפת

מה צריך לדעת?

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

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

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

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

int fclose )FILE *pfile(;

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

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

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

11

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

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

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

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

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

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

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

12

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

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

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

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

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

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

}

14

pre processorהקדם מעבד

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

למשל:

File inclusionההנחיה

#include “filename”#include >filename<

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

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

15

pre processorהקדם מעבד

Macrosdefine name text#ההנחיה

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

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

דוגמאות:

#define MAX 100

#define forever for);;(

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

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

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

19

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

:דוגמא

#define TRUE 1#deine FALSE 0

enum boolean {FALSE,TRUE};

20

Typedef

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

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

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

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

Recommended