המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

Engineering Programming A

מצגות קשורות


מצגת בנושא: "Engineering Programming A"— תמליל מצגת:

1 Engineering Programming A
תרגול 12 קבצים Introduction to C - Fall Amir Menczel

2 קבצים - הקדמה פתיחה וסגירה של קובץ: בתום השימוש יש "לסגור" את הקובץ.
קובץ - אוסף של תווים (במקרה שלנו) ששמור על דיסק כלשהו. ללא קבצים - ברגע שנסגור את התוכנית, כל המידע שהיה לנו בזיכרון נעלם. פתיחה וסגירה של קובץ: לפני שמתחילים להשתמש בקובץ יש "לפתוח" אותו ולהגדיר באיזה אופן נשתמש בו (קריאה, כתיבה מחדש, הוספה וכו'). בתום השימוש יש "לסגור" את הקובץ.

3 קבצים - הקדמה כאשר מבצעים פעולות קריאה או כתיבה על קובץ, המערכת שומרת את המקום בו התבצעה הפעולה האחרונה הפעולה הבאה תמשיך מן המקום שנשמר למשל: כתבנו 20 תווים לקובץ חדש, התו הבא שנכתוב לקובץ יכנס אוטומטית למקום ה-21. ניתן "ללכת אחורה" בקובץ, אך בקורס זה לא נלמד כיצד עושים זאת, לכן אם נרצה לעשות זאת, נסגור את הקובץ ונפתח אותו מחדש לקריאה (ואז נתחיל מתחילתו ונוכל להתקדם עד לאן שנרצה).

4 שאלה 1 כתוב תכנית אשר פותחת קובץ טקסט "1.txt" (הקובץ קיים), ומדפיסה אותו על המסך.

5 שאלה 2 שנה את התוכנית כך שתעתיק את קובץ הטקסט לתוך קובץ חדש

6 שאלה 3 שנה את התוכנית כך שתעתיק לקובץ החדש רק שורות שמכילות
שנה את התוכנית כך שתעתיק לקובץ החדש רק שורות שמכילות יותר מ-5 תווים (זכרו שגם ירידת שורה נובעת מנוכחות התו ‘\n’).

7 שאלה 3

8 שאלה 3 char *fgets(char *str, int len, FILE *stream):
הערות לגבי הפונקציה: char *fgets(char *str, int len, FILE *stream): 1. הפונק' קוראת מהקובץ מחרוזת של תווים באורך len-1 (כלומר ע"מ לקרא N תווים צריך ש- len=N+1). הסיבה: צריך לשמור מקום לתו ‘\0’ . הפונק' מסיימת לקרא תווים מהקובץ כאשר: (א) אחרי שהיא נתקלת בתו ‘\n’ ושמה ב-str (אחריו ולא במקומו כמו בפונק' gets) את התו \0’ . (ב) לאחר שקראה את מס' התווים המבוקש. (ג) לאחר שנתקלה ב-EOF . אם הפונק' הצליחה: היא מחזירה את str, אחרת הפונק' מחזירה NULL (במידה שארתה שגיאה או שהגיעה ל-(EOF . זהירות: הפונק' לא מוודאת שהיא לא דורסת מידע (כאשר היא חורגת מהמקום של str)

9 שאלה 4 כתוב תוכנית אשר מקבלת שני שמות של קבצים ומחזירה 1 אם
כתוב תוכנית אשר מקבלת שני שמות של קבצים ומחזירה 1 אם הקבצים זהים, 0 אם שונים,-1 אם הייתה שגיאה בפתיחת קובץ.

10 שאלה 4

11 שאלה 4 – תוכנית ראשית

12 שאלה 5 כתוב שתי פונקציות:
אחת מקבלת שם קובץ, מצביע למערך של int-ים ואת אורכו, ושומרת את תוכן המערך בקובץ. השנייה מקבלת שם של קובץ, מצביע למערך של int-ים ואת אורכו, וקוראת את תוכן הקובץ לתוך המערך. כל פונק' תחזיר: -1 אם הייתה שגיאה בפתיחת קובץ, אחרת תחזיר 1.

13 שאלה 5 – פו' כותבת

14 שאלה 5 – פו' קוראת

15 שאלה 5 – תוכנית ראשית

16 שאלה 5 – תוכנית ראשית

17 fscanf - format specification Fields
A format specification has the following form: %[*] [width] type If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set. For example: fscanf( ptr, "%20[^#] %*c %9d", name, &id); the function fscanf reads 20 characters, or till letter (‘#') , or till newline from the input stream and stores them in field name, then it reads the next 9 characters and converts them into integer id, then it reads one symbol which is not stored.

18 שאלה ממבחן 2006 כידוע מחלקת הביטחון של האוניברסיטה מעמידה שומרים במספר עמדות באוניברסיטה. בשאלה הזאת נגביל את מספר השומרים ל-9 ומספר העמדות ל-2. עבור כל עמדת שמירה מגדירים קובץ של רשימת השמירה החודשית של העמדה. כל שורה בקובץ כזה מכילה את הפרטים הבאים: קוד שומר – ספרה אחת בין 1 ל-9 שם השומר – 20 תווים מס. ת.ז. – 9 ספרות זמן תחילת השמירה – 6 ספרות (ddhhmm) מספר שעות שמירה – ספרה אחת הזמן מוגדר ע"י 6 ספרות בצורה ddhhmm ובו dd הוא היום בחודש, hh השעה, mm הדקה לדוגמה מגדיר את ה-17 לחודש שעה 23:00. קובצי רשימות השמירה ממוינים לפי זמן תחילת השמירה בסדר עולה..

19 שאלה ממבחן 2006 כתוב פונקציה void schedule(FILE* list1,FILE* list2, int code, char* filename) שמקבלת שני מצבעים לקובצי רשימות השמירה החודשיות של העמדות מס' 1 ו- מס' 2, code קוד של שומר מסוים (בין 1 ל-9) ומחרוזת filename. הפונקציה יוצרת קובץ חדש בשם filename של סידור עבודה חודשי של אותו שומר. הקובץ החדש מכיל בשורה ראשונה: שם השומר – 20 תווים מס. ת.ז. – 9 ספרות בהמשך כל שורה מכילה את הפרטים הבאים: מספר עמדה – ספרה (1 או 2) זמן התחלה – 6 ספרות (לפי המבנה ddhhmm) מספר שעות – ספרה אחת הקובץ ממוין לפי זמן התחלה בסדר עולה. הגבלה: אין לסרוק קובץ יותר מפעם אחת. אין להעתיק קובץ למבנה נתונים אחר (מערך, רשימה משורשרת, קובץ עזר...)

20 פתרון: flag1 = fscanf(list1, "%d%29[^$]%d", &code1, details1, &time1);
void schedule(FILE* list1,FILE* list2, int code, char* filename){ char details1[30], details2[30]; int code1, code2, time1, time2, first=1, flag1, flag2; FILE* fp; if(!(fp=fopen(filename,"w"))){ puts("Error, can't open file"); exit(1); } flag1 = fscanf(list1, "%d%29[^$]%d", &code1, details1, &time1); flag2 = fscanf(list2, "%d%29[^$]%d", &code2, details2, &time2);

21 פתרון flag2 = fscanf(list2, "%d%29[^$]%d", &code2, details2, &time2);
while(flag1==3 || flag2==3){ if((flag1==3)&&(code1!=code)){ flag1 = fscanf(list1, "%d%29[^$]%d",&code1, details1, &time1); continue; } if((flag2==3)&&(code2!=code)){ flag2 = fscanf(list2, "%d%29[^$]%d", &code2, details2, &time2);

22 פתרון if((flag2!=3)|| ( flag1==3 && time1<time2 ) ){ if(first){
fprintf(fp, "%s\n", details1); first=0; } fprintf(fp,"1%d\n", time1); flag1 = fscanf(list1,"%d%29[^$]%d",&code1,details1,&time1); else{ fprintf(fp, "%s\n", details2); fprintf(fp,"2%d\n", time2); flag2 = fscanf(list2,"%d%29[^$]%d",&code2,details2,&time2); fclose(fp);


הורד את "ppt "Engineering Programming A

מצגות קשורות


מודעות Google