תוכן עניינים 13-3 מבחן בתכנות ב- Cא, סמסטר קיץ, מועד ב', מבחן בתכנות ב- Cא, סמסטר קיץ, מועד א', מבחן בתכנות ב- Cא, סמסטר קיץ, מו

מסמכים קשורים
שאלהIgal : מערכים דו מימדיים רקורסיה:

שאלהIgal : מערכים דו מימדיים רקורסיה:

שאלהIgal : מערכים דו מימדיים רקורסיה:

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

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

Microsoft Word B

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

Microsoft Word - c_SimA_MoedB2005.doc

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

Slide 1

הגשה תוך שבוע בשעת התרגול

סדנת תכנות ב C/C++

PowerPoint Presentation

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

מבוא לתכנות ב- JAVA תרגול 7

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

ex1-bash

Slide 1

הגשה תוך שבוע בשעת התרגול

PRESENTATION NAME

Slide 1

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

תרגול 1

Slide 1

PowerPoint Presentation

Tutorial 11

Slide 1

תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

מהוא לתכנות ב- JAVA מעבדה 3

PowerPoint Presentation

Slide 1

שקופית 1

Slide 1

Microsoft Word - review-sol-Prog123.doc

PowerPoint Presentation

Programming

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

מבוא לתכנות ב- JAVA תרגול 11

Microsoft PowerPoint - rec1.ppt

Microsoft Word - c_SimA_MoedA2006.doc

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

PowerPoint Presentation

בס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנ

תרגול 3 - מערכים

Microsoft Word - Ass1Bgu2019b_java docx

Slide 1

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

תוכן העניינים

234114

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

תוכן העניינים

דוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמט

1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_match הפונקציה preg_m

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

Slide 1

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

Slide 1

PowerPoint Presentation

Microsoft Word - דוגמאות ב

Slide 1

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

Microsoft Word - pitaron222Java_2007.doc

תרגיל בית מספר 1#

Microsoft PowerPoint - rec3.ppt

פייתון

Slide 1

Slide 1

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

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

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

אוניברסיטת בן-גוריון המחלקה למדעי המחשב בוחן במבנים בדידים וקומבינטוריקה פרופ' מתיא כ"ץ, ד"ר עופר נימן, ד"ר סטוארט סמית, ד"ר נתן רובין, גב'

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

תרגיל בית מספר 1#

PowerPoint Presentation

שעור 6

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

úåëðä 1 - çæøä

שאלה 2. תכנות ב - CShell

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

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

Microsoft PowerPoint - lec2.ppt

אוניברסיטת תל אביב - בית הספר למדעי המחשב מבוא מורחב למדעי המחשב, אביב 2019 תרגיל בית מספר - 2 להגשה עד 02/04/2019 בשעה 23:55 קיראו בעיון את הנחיות הע

PowerPoint Presentation

Slide 1

מתכונת עיצוב 3013

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

מס' ת"ז מס' מחברת מבחן בקורס מבוא מורחב למדעי המחשב CS1001.py ביה"ס למדעי המחשב, אונ' תל אביב סמסטר א' , מועד ב, 23/3/2018 מרצים: דניאל דויטש,

תמליל:

תוכן עניינים 13-3 מבחן בתכנות ב- Cא, סמסטר קיץ, מועד ב', 2016 26-14 מבחן בתכנות ב- Cא, סמסטר קיץ, מועד א', 2016 38-27 מבחן בתכנות ב- Cא, סמסטר קיץ, מועד א', 2016 49-39 מבחן בתכנות ב- Cא, סמסטר א', מועד א', 2016 59-50 מבחן בתכנות ב- Cא, סמסטר א', מועד ב', 2016 73-60 מבחן בתכנות ב- Cא, סמסטר א', מועד א', 2016 באדיבות רכזות בנק הבחינות והסיכומים www.bgu4u.co.il

202.1.9011 תכנות ב- Cא חוברת מבחנים זו מובאת אליכם באדיבות מדור אקדמיה של האגודה הסטודנטיאלית בעיות אקדמיות? מועד ג'? וועדת משמעת? מילואים? חוברת מבחנים? הפסקת לימודים? סיכומים? מדור אקדמיה פה בשבילך שירותי המדור: סיוע אקדמי ליווי וייצוג בבתי דין משמעתיים מאגר בחינות משנים קודמות מאגר סיכומים של סטודנטים ספריית השאלה במחירים סטודנטיאליים קורסי הכנה תמיכה במשרתי מילואים 2020 www.bgu4u.co.il בית הסטודנט, קומה 1, חדר 161 באדיבות רכזות בנק הבחינות והסיכומים www.bgu4u.co.il

שאלה )12 1 נקודות( בשאלה הזאת הניחו כי גודל int וגודל כל מצביע במערכת הוא 4 בייט. בכל סעיף ענה מה יודפס על המסך אחרי ביצוע הפונקציה. )כל סעיף 2 נקודות( void ex1(){ char* a = "abcdefghijklmnopq"; printf("%c", a[a[strlen(a)]]); void ex2(){ char* a = "2016"; printf("%c", a[a[0] - a[2] + a[1]]); void ex3(){ char* a = "abcdefghijklmnopq"; printf("%c", (a + 3)[1]); struct cab{ int c; char a[20]; int b; ; void ex4(){ struct cab a = { 1, "abcdefghijklmnopq", 2; printf("%c", (a.a + 3)[1]); a b q 0 שגיאה או ערך זבל. אף תשובה לא נכונה. 2 0 1 6 שגיאה או ערך זבל. אף תשובה לא נכונה. b d e k q אף תשובה לא נכונה. b d e i 0 אף תשובה לא נכונה..1.2.3.4.5.6.1.2.3.4.5.6.1.2.3.4.5.6.1.2.3.4.5.6 2

2 #include <stdio.h> int nextfree(int** arr, int size, int *pi, int *pj){ static int i, j; if(i==size){ i=j=0; return 0; if(!arr[i][j]){ *pi = i; *pj = j; return 1; if(j==size){ j=0; i++; else j++; return nextfree(arr, size, pi, pj); שאלה ( 2 18 נקודות( נתונה התכנית הבאה: int freecell(int **arr, int size, int i, int j){ if(i==-1 i==size j==-1 j==size arr[i][j]) return 0; return 1; void print(int **arr, int size){ int i, j; for (i=0; i<size; i++){ for(j=0; j<size; j++) printf("%3d", arr[i][j]); putchar('\n'); putchar('\n'); void zero(int **arr, int size){ int i, j; for(i=0; i<size; i++) for(j=0; j<size; j++) arr[i][j]=0; 3

3 void what(int **arr, int size, int i, int j){ int static count; arr[i][j]= ++count; if(freecell(arr, size, i-1, j)) what(arr, size, i-1,j); else if(freecell(arr, size, i, j+1)) what(arr, size, i, j+1); else if (freecell(arr, size, i+1, j)) what(arr, size, i+1, j); else if(freecell(arr, size, i, j-1)) what(arr, size, i, j-1); else if(nextfree(arr, size, &i, &j)) what(arr, size, i, j); else count = 0; void main(){ int *arr[5], i, a[5][5]={0; for (i=0; i<5; i++) arr[i]=a[i]; what(arr, 5, 0, 0); print(arr, 5); // 1 zero(arr, 5); what(arr, 5, 4, 4); print(arr, 5); // 2 zero(arr, 5); what(arr, 5, 2, 2); print(arr, 5); // 3 פלט פלט פלט סעיף א'. )12 נקודות( מה הפלט של התכנית הנ"ל? סעיף ב'. )6 נקודות( עבור המערך arr בגודל sizexsize והמצביעים pj ו- pi הסבר בקצרה מה יעודה של הקריאה pj) nextfree(arr, size, pi, )לפרט מה תפקידם של pi ו- pj ומה בדיוק הערך המוחזר( 4

4 שאלה ( 3 22 נקודות( typedef struct node{ int val; struct node* next; Node; כדי לממש רשימה מקושרת נתונה ההגדרה הבאה: רשימה מקושרת ממוינת על פי ראש היא רשימה שבה עבור כל זוג ערכים ברשימה, המופע הראשון של ערך מסוים נמצא לפני המופע הראשון של ערך גדול ממנו. לדוגמא: lst1 היא רשימה ממוינת על פי ראש. סומנו בכוכבית המופעים הראשונים של הערכים שברשימה. lst1 2 3 4 3 2 5 4 7 * * * * * lst2 אינה רשימה ממוינת על פי ראש. בכוכבית המופעים הראשונים של הערכים שברשימה. שימו לב כי המופע הראשון של 4 הינו אחרי המופע הראשון של 5. lst2 2 3 5 3 2 4 4 7 * * * 1 כתבו פונקציה head) int issortedbyhead(node* הרשימה ממוינת על פי ראש ו- 0 אחרת. אשר מקבלת רשימה מקושרת ומחזירה אם אין לשנות את הרשימה שהתקבלה אין להגדיר מבנה נתונים אחר מלבד הרשימה הנתונה. 5

5 שאלה )25 4 נקודות( סעיף א'. )10 נקודות( כתבו פונקציה root) void mirror(struct item* המקבלת מצביע לשורש עץ בינארי או עץ טרינארי ומעדכנת אותו להיות עץ הראי שלו. אין להשתמש בפונקצית עזר. כתבו ופרטו את ההגדרה של struct item שיכולה להתאים גם לעץ בינאיר וגם לעץ טרינארי. סעיף ב'. )12 נקודות( הגדרה: עץ A זהה לעץ B אם ורק אם הם זהים במבנה שלהם וגם הערך הנמצא בקודקוד a בעץ A זהה לערך הנמצא בקודקוד המקביל לו בעץ B וזאת לכל קודקודי העצים. כתבו פונקציה root2) int ismirror(struct item* root1, struct item* המקבלת שני עצים, עץ 1 ועץ 2, ובודקת האם עץ הראי של עץ 1 זהה לעץ 2 המקורי. ניתן - אך לא חובה - להשתמש בפונקציות שכתבתם בסעיף הקודם אף אם לא כתבתם אותה, אין להשתמש בפונקצית עזר נוספת. שימו לב כי לא מקבלים עץ חיפוש אלא עץ רגיל - כלומר בהינתן ערך של קודקוד, ערכו של בנו הימיני יכול להיות גדול ממנו קטן ממנו או שווה לו. וכך גם לגבי שאר בניו. סעיף ג'. )3 נקודות( כתבו הגדרה של מבנה struct itemplus בו הייתם משתמשים לו סעיף א' היה על עץ בו לכל קודקוד יש מספר בנים הנקבע בזמן הקומפילציה ואת הרעיון הכללי של כיצד הייתם הופכים אותו לעץ הראי שלו. 6

6 שאלה ( 5 25 נקודות( לרשת "WiSki" יש בתי מלון במספר אתרי סקי באירופה, הרשת מציעה חופשת לשבוע בשיטת "הכול כלול". לקראת סוף העונה, החליטו מנהלי הרשת להציע את החדרים שלא הוזמנו בהנחה של 50%. עבור כל בית מלון ברשת, שמור קובץ במבנה הבא: - 25 תווים. בשורה הראשונה: שם בית המלון לאחר מכן, כל שורה בקובץ מכילה את הנתונים הבאים: 6 ספרות - תאריך במבנה yymmdd ספרה אחת - מספר אנשים בחדר 5 ספרות. - מחיר לשבוע בשקלים השורות ממוינות לפי תאריך, אחר כך לפי מספר אנשים בחדר ואחר כך לפי מחיר. בקובץ לדוגמא ניתן לראות כי יש חדרים פנויים בתאריך 17/2/2016 עבור 4 2, ו- 6 אנשים בחדר, ובתאריך 24/2/2016 יש חדרים פנויים עבור 3 1, ו -5 אנשים, וכך הלאה... ההזמנות לחדרים לכל בתי המלון מרוכזות בקובץ אחד. כל שורה בקובץ ההזמנות היא במבנה הבא: 25 תווים - שם בית המלון 15 תווים - שם הלקוח - 9 תווים תעודת זהות )yymmdd - 6 תווים )במבנה תאריך מספר אנשים בחדר - ספרה אחת. קובץ ההזמנות ממוין לפי תאריך ולאחר מכן, לפי מספר אנשים בחדר. חברת "Wiski" מעוניינת לקבל דיווח על ההזמנות שאושרו )כלומר: יש עבורן חדר פנוי התואם לדרישות(, ועל ההזמנות שלא אושרו. הדיווח יישמר בקבצים במהנה הבא: מבנה קובץ ההזמנות שאושרו : - 15 תווים. שם הלקוח - 9 תווים ת.ז. לקוח - 25 תווים. שם בית המלון - 6 תווים. תאריך 5 ספרות. - מחיר מבנה קובץ ההזמנות שנדחו : - 15 תווים. שם הלקוח - 9 תווים. ת.ז. לקוח - 25 תווים. שם בית המלון - 6 תווים. תאריך כתבו פונקציה denied) int hotel(file* arr[], int size, FILE* orders, char* accept, char* המקבלת כפרמטרים מערך של מצביעים לקבצים של המלונות ואת גודלו, מצביע לקובץ ההזמנות, שם קובץ ההזמנות שהתקבלו ושם קובץ ההזמנות שנדחו. הפונקציה תחזיר את מספר הבקשות שהתקבלו )בכל מקרה של שגיאה הפונקציה תחזיר הערך 1-(. שימו לב! בכל אחד מהקבצים, אין תווים בין נתון לנתון. אין לעבור על קובץ יותר מפעם אחת. אין להעתיק קובץ למבנה נתונים אחר )מערך, רשימה משורשרת, עץ,קובץ אחר...(. Val Thorens "L'altitude" 160217212000 160217416500 160217417000 160217619000 160224110000 160224314500 160224314500 160224316700 160224517100 160302415300 : 7

7 רשימת פונקציות קלט/פלט: INPUT/OUTPUT FUNCTIONS PROTOTYPES Open/Close a file FILE *fopen( char *filename, char *mode ); int fclose(file *stream); Repositions the file pointer to the beginning of a file void rewind( FILE *stream ); Get/put a character int fgetc( FILE *stream ); int fputc( int c, FILE *stream ); Get/put a string char *fgets( char *string, int n, FILE *stream ); int fputs( const char *string, FILE *stream ); Formatted Input/Output int fscanf( FILE *stream, const char *format [, argument ]... ); int sscanf( const char *string, const char *format [, argument ]... ); int fprintf( FILE *stream, const char *format [, argument ]...); int sprintf( char *string, const char *format [, argument ]...); Remove a file int remove(const char* filename); Rename a file int rename(const char* oldname, const char*newname); ב ה צ ל ח ה! 8

8

9

10

11

12

13

14

אוניברסיטת בן גוריון בנגב מספרנבחן : תאריךהמבחן:כ"באדרא'תשע"ו 2.03.16 שמותהמורים:ציוןסיקסיק מבחןב: תכנות ב- C א' מס'הקורס : 202-1-9011 מיועדלתלמידי : הנדסה שנה תשע"ו סמ' א' מועד ב' משךהבחינה : 3 שעות חומרעזר : דףפוליואחדלאמודפס ולאמצולם. איןלהשתמשבמחשבון. במבחן זה 5 שאלות רשמו תשובותיכם בדפי התשובות בלבד מחברת הטיוטה לא תימסר לבדיקה בסיום המבחן נאסוףרק את דפי התשובות מותר להגדיר פונקציות עזר בכל השאלות,אלא אם נאמראחרת. כתבו קוד קריא והקפידו על אינדנטציה והערות (בעברית). ב ה צ ל ח ה! 1

2 שאלה (18 1 נקודות) הפונקציה *sml) int,בודקתאם containmirror(char*big, char המחרוזת sml מוכלת במחרוזת big כאשרהתווים הראשוניםשלה מופיעים באותוהסדר, ושאר התוויםבסדר הפוך. הפונקציה מחזירה את המיקוםשל תחילת המחרוזת המוכלת ב- big,אם המחזורת אינה מוכלת, הפונקציה מחזירה 1-. למשל הקריאהשבתכנית הראשיתהבאה מחזירה 6. שימולב, כי לאידועכמה תוויםהם באותוהסדר וכמהבסדר הפוך.. השלימו בדף התשובות את הקטעים המסומנים ב-?? n?? int containmirror(char *big, char *sml) { int lenb, lens, indexb, indexs, start, num_equal; lenb = strlen(big); lens = strlen(sml); for(indexb=0;?? 1?? ; indexb++) { num_equal = 0; start = indexb; indexs = 0; while (big[indexb]==sml[indexs]) { num_equal++; if (?? 2?? ) return?? 3?? ; indexb++; indexs++; indexs =?? 4?? ; while (?? 5?? ){ num_equal++;?? 6?? ;?? 7?? ;?? 8?? ; indexb = indexb - num_equal;?? 9?? ; void main(){ char s[ ]= "abcde", b[ ]= "jkotababedcm"; printf("%d\n", containmirror(b, s)) ; 2

3 #include <stdio.h> void what2(int* arr, int from, int to){ int temp, f, t; f = from; t = to; temp = arr[from]; (18 נקודות) שאלה 2 נתונה התכנית הבאה: while (from < to){ while ((arr[to] >= temp) && (from < to)) to--; if (from!= to){ arr[from] = arr[to]; from++; while ((arr[from] <= temp) && (from < to)) from++; if (from!= to){ arr[to] = arr[from]; to--; arr[from]=temp; printf("temp= %d\n",temp); if ( f < from-1) what2(arr, f, from-1); if ( t > from+1) what2(arr, from+1, t); void what1(int* array, int size){ what2(array, 0, size - 1); void main(){ int i, numbers[]={9,10,3,4,8,2,16,12,7,1,14,20,2,5,10; what1(numbers, 15); for (i = 0; i < 15; i++) printf("%d ", numbers[i]); סעיף א'. (12 נקודות) מה הפלטשל התכנית הנ"ל? סעיף ב'. (2 נקודות) הסבירובקצרהמה תפקידושל המשתנה temp בפונקציה? what2 סעיףג'. (2 נקודות) הסבירו במשפטאחדמה יעודהשל הפונקציה? what1 סעיף ד'. (2 נקודות) האלגוריתם של הפונקציה what2 מזכיר פונקציה שלמדנו.מהי? 3

4 שאלה ) 3 22 נקודות) כדילממש רשימה מקושרת נתונהההגדרה הבאה: typedef struct node{ int val; struct node* next; Node; כתבו פונקציה del) void skipdel(node* head, int skip, int אשר מקבלת כפרמטרים.del ומספרשלם skip מצביע לעוגן רשימה מקושרת,מספר שלם head הפונקציה משנה אתהרשימה עלידי שמירת skip איברים ברשימה ומחיקת del האיברים הבאים וחוזרת חלילה על הפעולות. לדוגמא עבור 2 = del,2= skip והרשימה הבאה: 8<-7<-6<-5<-4<-3<-2<-1 תישמר הרשימה הבאה: 6<-5<-2<-1. דוגמא נוספת: עבור =1 skip del =3, והרשימההבאה: 1->2->3->4->5->6->7 תישמר הרשימה הבאה: 5<-1. שימולבשטפלתםבמקרי קצה ושהפונקציה תעבוד עבורכל שילוב של פרמטרים. ניתן להניח כי.skip>0,del>0 אין להגדיר מבנה נתונים אחר מלבד הרשימה הנתונה. אין ליצור מבנים חדשים. שאלה 4 (20 נקודות) כדילממש עץ בינארי נתונהההגדרה הבאה: typedef struct node{ int val; struct node *left, *right; Node; כתבו פונקציה num2) int connected(struct Node* root, int num1, int המקבלת שורששלעץ בינארי ושני ערכים שלמים num1 ו- num2. הפונקציה תחזיר 1 אםקייםבעץ תת-עץ שהשורש שלו מכילאתהערך num1 ואחד הצאצאים מכיל את הערךnum2 אחרת הפונקציה תחזיר 0. אין לשנות אתהעץ שהתקבל. אין להגדיר מבנה נתונים אחר מלבדהעץ הנתון. אין להשתמש בפונקציתעזר. מותרלהגדיר משתנה סטטי. 4

5 שאלה (25 5 נקודות) רשת בתיהמרקחת "קפ-סי-לה"מבצעת ספירת מלאי של התרופותבכל רבעון, במהלך ספירת המלאי מוציאיםאת כל התרופות שפג תוקפן מהמלאי.מנהלי הרשת מעונייניםלדעת את כמות התרופות שנמכרו ואת כמות התרופותשפג תוקפן מהמלאי. נתוניכל התרופות הנמכרות ברשת שמורים בקובץ, כל שורה בקובץ מכליה את הנתונים הבאים: שם התרופה 25 תווים. שם היצרן 20 תווים. לכלאחת מהתרופות שבמאגר, עבורכל רבעון, קיים קובץ ששמו מורכב משם התרופה,שנה וחודש במבנההבא:.txt חודששנה שם התרופה לדוגמא: acamol1601.txt (שם התרופה acamol,שנה 2016,חודשינואר ). הקובץ מכיל את נתוני התרופהבמאגר ממוינים לפי תאריך תוקף, כאשר עבורכל תאריך כזה שומרים אתהכמות שנרכשה והכמותשנמכרה. כל שורה בקובץ התרופה מכילה את הנתונים הבאים: תאריך תוקף במבנה - yymmdd 6 ספרות. הכמות שנרכשה (עבור התאריך הנ"ל) - 4 ספרות. - 4 ספרות. (כמות המכירה) הכמות שנמכרה כתבו פונקציה date) int capc_la(file *medicine, char *sales, int המקבלת כפרמטרים מצביע לקובץ התרופות,שם קובץ המכירות,ותאריך (שלם של 4 ספרות במבנה.(yymm הפונקציה עבור כלאחת מהתרופותבמאגר תיצור קובץ חדש ששמו מורכבמשם התרופה ומהתאריך date.הקובץיכיל רק את התרופות שנשארו במלאי (שלא פג תוקפן) עבור תרופות שנשארו במלאי צריך להחסיר את הכמותשנמכרה מהכמות שנרכשה ובכמות שנמכרה יוצבהערך 0. בנוסף עבורכל תרופה במאגר,תירשם שורה בקובץ ששמו במחרוזת sales במבנה הבא: - 25 תווים שם התרופה הכמות שנמכרה - 6 ספרות הכמות שיצאה מהמלאי - 6 ספרות (תרופותשפג תוקפן) לדוגמא: עבור התרופה,acamol והתאריך 1604 (אפריל 2016),נוצר קובץ חדש המכיל רקאת התרופותשלא פג תוקפן כאשר הכמות במלאי מתעדכנת בהתאם והכמות של המכירה היא 0. השורהבקובץ המכירות acamol1601.txt acamol1604.txt 160112, 250, 100 160130, 300, 214 160215,1050, 700 160316, 450, 180 160414, 300, 114 160501, 900, 100 160518, 250, 0 160610, 300, 0 160730, 560, 0 160414, 186, 0 160501, 800, 0 160518, 250, 0 160610, 300, 0 160730, 560, 0 : acamol, 1408, 942 : : סה"כ הכמות שיצאה מהמלאי סה"כ כמות המכירות שימו לב! הפונקציה תחזיר 1 ובכל מקרה שלשגיאה היא תחזיר 0. רבעונים מתחילים בחודשים 10. 07,04,01, בכלאחד מהקבצים,מופיע פסיק בין נתון לנתון. אין לעבור על קובץ יותרמפעםאחת. אין להעתיק קובץ למבנה נתוניםאחר (מערך, רשימה משורשרת,עץ,קובץאחר...). 5

6 רשימת פונקציות קלט/פלט: INPUT/OUTPUT FUNCTIONS PROTOTYPES Open/Close a file FILE *fopen( char *filename, char *mode ); int fclose(file *stream); Repositions the file pointer to the beginning of a file void rewind( FILE *stream ); Get/put a character int fgetc( FILE *stream ); int fputc( int c, FILE *stream ); Get/put a string char *fgets( char *string, int n, FILE *stream ); int fputs( const char *string, FILE *stream ); Formatted Input/Output int fscanf( FILE *stream, const char *format [, argument ]... ); int sscanf( const char *string, const char *format [, argument ]... ); int fprintf( FILE *stream, const char *format [, argument ]...); int sprintf( char *string, const char *format [, argument ]...); Remove a file int remove(const char* filename); Rename a file int rename(const char* oldname, const char*newname); ב ה צ ל ח ה! 6

7 int containmirror(char *big, char *sml) { int lenb, lens, indexb, indexs, start, num_equal; lenb = strlen(big); lens = strlen(sml); for(indexb=0; indexb<lenb ; indexb++) { num_equal = 0; start = indexb; indexs = 0; שאלה )18 1 נקודות( while (big[indexb]==sml[indexs]) { num_equal++; if ( num_equal==lens ) // או indexs == lens-1 return start ; indexb++; indexs++; indexs = lens-1 ; while ( big[indexb]==sml[indexs] ){ num_equal++; if ( num_equal==lens ) return start ; indexb++ ; indexs-- ; return -1 ; indexb = indexb - num_equal; temp= 9 temp= 5 temp= 1 temp= 2 temp= 3 temp= 8 temp= 12 temp= 10 temp= 16 1 2 2 3 4 5 7 8 9 10 10 12 14 16 20 ( 18 נקודות( שאלה 2 סעיף א'. )12 נקודות( סעיף ב'. )2 נקודות( בפונקציה what2 כל האיברים שקטנים מ- temp יהיו בשמאלו והגדולים בימינו (pivot) סעיף ג'. )2 נקודות( הפונקציה what1 ממיינת את size האיברים של המערך array בסדר עולה. סעיף ד'. )2 נקודות( האלגוריתם של הפונקציה what2 מזכיר quick-sort שלמדנו בכיתה. 1

8 שאלה ( 3 22 נקודות( typedef struct node{ int val; struct node* next; Node; void skipdel1(node* head, int skip, int del){ Node *last; int i; while (head){ for (i = 0; i < skip && head; i++){ last = head; head = head->next; for (i = 0; i < del && head; i++){ last->next = head->next; free(head); head = last->next; void skipdel2(node* head, int skip, int del) { Node *last; int i; while (head) { for (i = 0; i < skip-1 && head; i++) { head = head->next; if (!head) break; last = head; head = head->next; for (i = 0; i < del && head; i++) { last->next = head->next; free(head); head = last->next; 2

9 שאלה )20 4 נקודות( typedef struct node{ int val; struct node *left, *right; Node; int connected(node* root, int num1, int num2){ int static flag; int res; if(!root) return 0; if(flag==1 && root->val == num2) return 1; if(flag=0 && root->val == num1){ flag = 1; res = connected(root->left, num1, num2) connected(root->right, num1, num2); flag = 0; return res; return connected(root->left, num1, num2) connected(root->right, num1, num2); 3

10 שאלה ( 5 25 נקודות( #include <stdio.h> #include <string.h> int capc_la(file *medicine, char *sales, int date){ FILE *prevmed, *newmed, *report; char medicinename[26],filename[34]; int prevdate, datem, day, buy, sell, sumsell, sumexpir; prevdate= date%10 == 1? date-91 : date-3; // 1601-91 = 1510, 1604-3=1601 if (!(report = fopen(sales, "w"))) return 0; while (fscanf(medicine, "%[^,]%*22c", medicinename)!=eof) { sprintf(filename, "%s%04d.txt", medicinename, prevdate); if (!(prevmed = fopen(filename, "r"))) return 0; sprintf(filename, "%s%04d.txt", medicinename, date); if (!(newmed = fopen(filename, "w"))) return 0; sumsell = sumexpir = 0; while(fscanf(prevmed, "%4d%d%*c%d%*c%d%*c", &datem, &day, &buy, &sell)!=eof){ sumsell += sell; if(datem<date) sumexpir += buy - sell; else fprintf(newmed, "%04d%02d,%4d, 0\n", datem, day, buy - sell); fprintf(report, "%-25s,%6d,%6d\n",medicineName, sumsell, sumexpir); if (fclose(prevmed) == EOF fclose(newmed) == EOF) return 0; if (fclose(report) == EOF ) return 0; return 1; 4

אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: ב' אדר א' תשע"ו 11.02.16 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ו 3 שעות משך הבחינה : דף פוליו אחד לא מודפס חומר עזר : ולא מצולם. אין להשתמש במחשבון. במבחן זה 5 שאלות רשמו תשובותיכם בדפי התשובות בלבד מחברת הטיוטה לא תימסר לבדיקה בסיום המבחן נאסוף רק את דפי התשובות מותר להגדיר פונקציות עזר בכל השאלות, אלא אם נאמר אחרת. כתבו קוד קריא והקפידו על אינדנטציה והערות )בעברית(. ב ה צ ל ח ה! 1

2 שאלה )12 1 נקודות( בשאלה הזאת הניחו כי גודל int וגודל כל מצביע במערכת הוא 4 בייט. בכל סעיף ענה מה יודפס על המסך אחרי ביצוע הפונקציה. )כל סעיף 2 נקודות( void ex1(){ char* a = "abcdefghijklmnopq"; printf("%c", a[a[strlen(a)]]); void ex2(){ char* a = "2016"; printf("%c", a[a[0] - a[2] + a[1]]); void ex3(){ char* a = "abcdefghijklmnopq"; printf("%c", (a + 3)[1]); struct cab{ int c; char a[20]; int b; ; void ex4(){ struct cab a = { 1, "abcdefghijklmnopq", 2; printf("%c", (a.a + 3)[1]); a b q 0 שגיאה או ערך זבל. אף תשובה לא נכונה. 2 0 1 6 שגיאה או ערך זבל. אף תשובה לא נכונה. b d e k q אף תשובה לא נכונה. b d e i 0 אף תשובה לא נכונה..1.2.3.4.5.6.1.2.3.4.5.6.1.2.3.4.5.6.1.2.3.4.5.6 2

3 #include <stdio.h> int nextfree(int** arr, int size, int *pi, int *pj){ static int i, j; if(i==size){ i=j=0; return 0; if(!arr[i][j]){ *pi = i; *pj = j; return 1; if(j==size){ j=0; i++; else j++; return nextfree(arr, size, pi, pj); שאלה ( 2 18 נקודות( נתונה התכנית הבאה: int freecell(int **arr, int size, int i, int j){ if(i==-1 i==size j==-1 j==size arr[i][j]) return 0; return 1; void print(int **arr, int size){ int i, j; for (i=0; i<size; i++){ for(j=0; j<size; j++) printf("%3d", arr[i][j]); putchar('\n'); putchar('\n'); void zero(int **arr, int size){ int i, j; for(i=0; i<size; i++) for(j=0; j<size; j++) arr[i][j]=0; 3

4 void what(int **arr, int size, int i, int j){ int static count; arr[i][j]= ++count; if(freecell(arr, size, i-1, j)) what(arr, size, i-1,j); else if(freecell(arr, size, i, j+1)) what(arr, size, i, j+1); else if (freecell(arr, size, i+1, j)) what(arr, size, i+1, j); else if(freecell(arr, size, i, j-1)) what(arr, size, i, j-1); else if(nextfree(arr, size, &i, &j)) what(arr, size, i, j); else count = 0; void main(){ int *arr[5], i, a[5][5]={0; for (i=0; i<5; i++) arr[i]=a[i]; what(arr, 5, 0, 0); print(arr, 5); // 1 zero(arr, 5); what(arr, 5, 4, 4); print(arr, 5); // 2 zero(arr, 5); what(arr, 5, 2, 2); print(arr, 5); // 3 פלט פלט פלט סעיף א'. )12 נקודות( מה הפלט של התכנית הנ"ל? סעיף ב'. )6 נקודות( עבור המערך arr בגודל sizexsize והמצביעים pj ו- pi הסבר בקצרה מה יעודה של הקריאה pj) nextfree(arr, size, pi, )לפרט מה תפקידם של pi ו- pj ומה בדיוק הערך המוחזר( 4

5 שאלה ( 3 22 נקודות( typedef struct node{ int val; struct node* next; Node; כדי לממש רשימה מקושרת נתונה ההגדרה הבאה: רשימה מקושרת ממוינת על פי ראש היא רשימה שבה עבור כל זוג ערכים ברשימה, המופע הראשון של ערך מסוים נמצא לפני המופע הראשון של ערך גדול ממנו. לדוגמא: lst1 היא רשימה ממוינת על פי ראש. סומנו בכוכבית המופעים הראשונים של הערכים שברשימה. lst1 2 3 4 3 2 5 4 7 * * * * * lst2 אינה רשימה ממוינת על פי ראש. בכוכבית המופעים הראשונים של הערכים שברשימה. שימו לב כי המופע הראשון של 4 הינו אחרי המופע הראשון של 5. lst2 2 3 5 3 2 4 4 7 * * * 1 כתבו פונקציה head) int issortedbyhead(node* הרשימה ממוינת על פי ראש ו- 0 אחרת. אשר מקבלת רשימה מקושרת ומחזירה אם אין לשנות את הרשימה שהתקבלה אין להגדיר מבנה נתונים אחר מלבד הרשימה הנתונה. 5

6 שאלה )25 4 נקודות( סעיף א'. )10 נקודות( כתבו פונקציה root) void mirror(struct item* המקבלת מצביע לשורש עץ בינארי או עץ טרינארי ומעדכנת אותו להיות עץ הראי שלו. אין להשתמש בפונקצית עזר. כתבו ופרטו את ההגדרה של struct item שיכולה להתאים גם לעץ בינאיר וגם לעץ טרינארי. סעיף ב'. )12 נקודות( הגדרה: עץ A זהה לעץ B אם ורק אם הם זהים במבנה שלהם וגם הערך הנמצא בקודקוד a בעץ A זהה לערך הנמצא בקודקוד המקביל לו בעץ B וזאת לכל קודקודי העצים. כתבו פונקציה root2) int ismirror(struct item* root1, struct item* המקבלת שני עצים, עץ 1 ועץ 2, ובודקת האם עץ הראי של עץ 1 זהה לעץ 2 המקורי. ניתן - אך לא חובה - להשתמש בפונקציות שכתבתם בסעיף הקודם אף אם לא כתבתם אותה, אין להשתמש בפונקצית עזר נוספת. שימו לב כי לא מקבלים עץ חיפוש אלא עץ רגיל - כלומר בהינתן ערך של קודקוד, ערכו של בנו הימיני יכול להיות גדול ממנו קטן ממנו או שווה לו. וכך גם לגבי שאר בניו. סעיף ג'. )3 נקודות( כתבו הגדרה של מבנה struct itemplus בו הייתם משתמשים לו סעיף א' היה על עץ בו לכל קודקוד יש מספר בנים הנקבע בזמן הקומפילציה ואת הרעיון הכללי של כיצד הייתם הופכים אותו לעץ הראי שלו. 6

7 שאלה ( 5 25 נקודות( לרשת "WiSki" יש בתי מלון במספר אתרי סקי באירופה, הרשת מציעה חופשת לשבוע בשיטת "הכול כלול". לקראת סוף העונה, החליטו מנהלי הרשת להציע את החדרים שלא הוזמנו בהנחה של 50%. עבור כל בית מלון ברשת, שמור קובץ במבנה הבא: - 25 תווים. בשורה הראשונה: שם בית המלון לאחר מכן, כל שורה בקובץ מכילה את הנתונים הבאים: 6 ספרות - תאריך במבנה yymmdd ספרה אחת - מספר אנשים בחדר 5 ספרות. - מחיר לשבוע בשקלים השורות ממוינות לפי תאריך, אחר כך לפי מספר אנשים בחדר ואחר כך לפי מחיר. בקובץ לדוגמא ניתן לראות כי יש חדרים פנויים בתאריך 17/2/2016 עבור 4 2, ו- 6 אנשים בחדר, ובתאריך 24/2/2016 יש חדרים פנויים עבור 3 1, ו -5 אנשים, וכך הלאה... ההזמנות לחדרים לכל בתי המלון מרוכזות בקובץ אחד. כל שורה בקובץ ההזמנות היא במבנה הבא: 25 תווים - שם בית המלון 15 תווים - שם הלקוח - 9 תווים תעודת זהות )yymmdd - 6 תווים )במבנה תאריך מספר אנשים בחדר - ספרה אחת. קובץ ההזמנות ממוין לפי תאריך ולאחר מכן, לפי מספר אנשים בחדר. חברת "Wiski" מעוניינת לקבל דיווח על ההזמנות שאושרו )כלומר: יש עבורן חדר פנוי התואם לדרישות(, ועל ההזמנות שלא אושרו. הדיווח יישמר בקבצים במהנה הבא: מבנה קובץ ההזמנות שאושרו : - 15 תווים. שם הלקוח - 9 תווים ת.ז. לקוח - 25 תווים. שם בית המלון - 6 תווים. תאריך 5 ספרות. - מחיר מבנה קובץ ההזמנות שנדחו : - 15 תווים. שם הלקוח - 9 תווים. ת.ז. לקוח - 25 תווים. שם בית המלון - 6 תווים. תאריך כתבו פונקציה denied) int hotel(file* arr[], int size, FILE* orders, char* accept, char* המקבלת כפרמטרים מערך של מצביעים לקבצים של המלונות ואת גודלו, מצביע לקובץ ההזמנות, שם קובץ ההזמנות שהתקבלו ושם קובץ ההזמנות שנדחו. הפונקציה תחזיר את מספר הבקשות שהתקבלו )בכל מקרה של שגיאה הפונקציה תחזיר הערך 1-(. שימו לב! בכל אחד מהקבצים, אין תווים בין נתון לנתון. אין לעבור על קובץ יותר מפעם אחת. אין להעתיק קובץ למבנה נתונים אחר )מערך, רשימה משורשרת, עץ,קובץ אחר...(. Val Thorens "L'altitude" 160217212000 160217416500 160217417000 160217619000 160224110000 160224314500 160224314500 160224316700 160224517100 160302415300 : 7

8 רשימת פונקציות קלט/פלט: INPUT/OUTPUT FUNCTIONS PROTOTYPES Open/Close a file FILE *fopen( char *filename, char *mode ); int fclose(file *stream); Repositions the file pointer to the beginning of a file void rewind( FILE *stream ); Get/put a character int fgetc( FILE *stream ); int fputc( int c, FILE *stream ); Get/put a string char *fgets( char *string, int n, FILE *stream ); int fputs( const char *string, FILE *stream ); Formatted Input/Output int fscanf( FILE *stream, const char *format [, argument ]... ); int sscanf( const char *string, const char *format [, argument ]... ); int fprintf( FILE *stream, const char *format [, argument ]...); int sprintf( char *string, const char *format [, argument ]...); Remove a file int remove(const char* filename); Rename a file int rename(const char* oldname, const char*newname); ב ה צ ל ח ה! 8

9 ex1 = 1 ex2 = 5 ex3 = 3 ex4 = 3 שאלה )12 1 נקודות( 1 2 3 4 5 22 21 14 13 6 23 20 15 12 7 24 19 16 11 8 25 18 17 10 9 25 16 15 6 5 24 17 14 7 4 23 18 13 8 3 22 19 12 9 2 21 20 11 10 1 14 15 3 4 5 25 16 2 13 6 24 17 1 12 7 23 18 19 11 8 22 21 20 10 9 שאלה )18 2 נקודות( סעיף א'. )12 נקודות( פלט 1: פלט 2: פלט 3: סעיף ב'. )6 נקודות( עבור המערך arr בגודל sizexsize והמצביעים pj ו- pi הקריאה pj) nextfree(arr, size, pi, - סורקת את המערך כל שורה משמאל לימין ומחפשת את האיבר הראשון ששווה אפס, - ודרך המצביעים pi ו- pj מחזירה את האינדקסים של האיבר. - אם המערך מלא ערכים שונים מאפס הפונקציה מחזירה אפס אחרת 1. int issortedbyhead(node* head){ Node *p,*q; שאלה ( 3 22 נקודות( for(p = head; p; p = p->next) for(q = head; q!= p; q = q->next){ if (q->val == p->val) break; if (q->val > p->val) return 0; return 1; 1

10 struct item{ struct item *left, *right, *center; int istrinary; int value; ; שאלה )25 4 נקודות( סעיף א'. )10 נקודות( void mirror(struct item * root){ struct item * temp; if (!root) return; temp = root->left; root->left = root->right; root->right = temp; mirror(root->left); mirror(root->right); if(root->istrinary) mirror(root->center); סעיף ב'. )12 נקודות( פתרון עם פונקצית int ismirror1(struct item* root1, struct item* root2){ // mirror static int level = 0; int curr; if(level==0) mirror(root1); if(!root1 &&!root2) return 1; if(!root1!root2 (root1->value!=root2->value)) return 0; level++; if(ismirror1(root1->left,root2->left) && ismirror1(root1->right,root2->right) && (root1->istrinary && root2->istrinary)?ismirror1(root1->center,root2->center):1) curr=1; else curr=0; level--; if(level==0) mirror(root1); return curr; פתרון בלי פונקצית int ismirror2(struct item * root1, struct item * root2){ // mirror if(!root1 &&!root2) return 1; if(!root1!root2 (root1->value!=root2->value)) return 0; return (ismirror2(root1->right,root2->left) && ismirror2(root1->left,root2->right) && ismirror2(root1->center,root2->center)); #define N 100 struct itemplus{ struct itemplus* sons[n]; int value; ; 2 סעיף ג'. )3 נקודות( האלגוריתם להפוך לעץ ראי: אם העץ ריק סיימנו, אחרת מחליפים את הערך של sons[0] עם הערך של,sons[N-1] של sons[1] עם.sons על כל האיברים של המערך mirror ומפעילים את הפונקציה...sons[N-2]

11 שאלה )25 5 נקודות( typedef struct{ char name[26]; int date, people, price, flag; FILE* fp; hotels; int hotel(file* arr[], int size, FILE* orders, char* accept, char* denied){ FILE *acc, *den; hotels *arrh; char nameh[26], details[25]; int date, people, i, res=0; if(!(arrh = (hotels*)malloc(sizeof(hotels)*size))) return -1; if(!(acc = fopen(accept,"w"))) return -1; if(!(den = fopen(denied,"w"))) return -1; for(i=0; i<size; i++) arrh[i].flag = fscanf(arr[i], "%[^\n]%*c%6d%1d%5d%*c", arrh[i].name, &arrh[i].date, &arrh[i].people, &arrh[i].price); while(fscanf(orders, "%25[^\n]%24[^\n]%6d%d%*c", nameh, details, &date, &people)==5){ for(i=0; strcmp(nameh, arrh[i].name); i++); while(arrh[i].flag!=eof && (arrh[i].date < date arrh[i].date==date && arrh[i].people<people)) arrh[i].flag = fscanf(arr[i], "%6d%1d%5d%*c", &arrh[i].date, &arrh[i].people, &arrh[i].price); if(arrh[i].flag!=eof && arrh[i].date==date && arrh[i].people==people){ fprintf(acc, "%s%s%06d%05d\n", details, nameh, date, arrh[i].price/2); res++; arrh[i].flag = fscanf(arr[i], "%6d%1d%5d%*c", &arrh[i].date, &arrh[i].people, &arrh[i].price); else fprintf(den, "%s%s%06d\n", details, nameh, date); free(arrh); if(fclose(acc)==eof fclose(den)==eof) return -1; return res; 3

אוניברסיטת בן גוריון בנגב מספרנבחן : תאריךהמבחן:כ"ואלול תשע"ו 29.09.16 שמותהמורים:ציוןסיקסיק תכנות ב- C א' מבחןב: 202-1-9011 מס'הקורס : מיועדלתלמידי : הנדסה מועד א' סמ'קיץ שנה תשע"ו 3 שעות משךהבחינה : חומרעזר : דףפוליואחדלאמודפס איןלהשתמשבמחשבון. ולאמצולם. במבחן זה 5 שאלות רשמו תשובותיכם בדפי התשובות בלבד מחברת הטיוטה לא תימסר לבדיקה בסיום המבחן נאסוףרק את דפי התשובות מותר להגדיר פונקציות עזר בכל השאלות,אלא אם נאמראחרת. כתבו קוד קריא והקפידו על אינדנטציה והערות (בעברית). ב ה צ ל ח ה! 1

2 שאלה (16 1 נקודות) הפונקציה printstrings מדפיסה את כל המחרוזות str באורך n המקיימות את התנאים הבאים: א. המחרוזות מכילות אך ורק את התווים a,b ו- c. ב. המחרוזות לא מכילות שני a- ים רצופים. ג. המחרוזות לא מכילות שלושה c םי- רצופים. הפונקציה מחזירה מספר שלם המייצג את מספר המחרוזות באורך n העונות על התנאים הנ"ל. לדוגמא: עבור 3=n הפונקציה תדפיס את הפלט הבא: aba,abb,abc,aca,acb,acc,bab,bac,bba,bbb,bbc,bca,bcb,bcc,cab, cac,cba,cbb,cbc,cca,ccb, ערך החזרה של הפונקציה 21. #include<stdio.h> #define N 3 השלימו בדף התשובות את הקטעים המסומנים ב-?? n??. int printstrings(int i, int n, char* str, int a, int c){ int count=0; if (?? 1?? ) { printf("%s,", str);?? 2?? ; if (?? 3?? ) a=0; else{ str[i] = 'a'; count +=?? 4?? ;?? 5?? ; count += printstrings(i+1, n, str, a, c); if (c==2)?? 6?? ; else{ str[i] = 'c'; count +=?? 7?? ;?? 8??; void main(){ char str[n+1]; str[n] = '\0'; printf("%d\n",printstrings(0,n,str,0,0)); 2

3 שאלה 2 (18 נקודות) סעיף א'. (15 נקודות) #include <stdio.h> #include <stdlib.h> נתונה התכנית הבאה: typedef struct node { int value; struct node *zero, *plus; node; void what(int *arr, node* num, int size) { if (!size) { printf("%d\n", num -> value); return; num -> zero = (node*)malloc(sizeof(node)); num -> zero -> value = num -> value; what(arr + 1, num -> zero, size - 1); num -> plus = (node*)malloc(sizeof(node)); num -> plus -> value = num -> value + *arr; what(arr + 1, num -> plus, size - 1); void main() { int a[] = { 1, 2, 3, 4 ; node root; root.value = 0; what(a, &root, 4); בהנחה שהפונקציה malloc עובדת ללא תקלה, מה הפלט של התכנית הנ"ל? סעיף ב'. (3 נקודות) ציירו את העץ המתקבל לאחר ביצוע הקוד הנ"ל. 3

4 שאלה 3 ) 22 נקודות) כתבו פונקציה length) void subsentence(char *sent, int המקבלת מחרוזת sent ו- length מספר שלם חיובי, הפונקציה מדפיסה את כל תתי-מחרוזות באורך length המופיעות במחרוזת sent ללא רווחים. אם אותה תת-מחרוזת מופיעה יותר מפעם אחת יודפס המופע הראשון בלבד. שימו לב תת-מחרוזת יכולה לכלול אותיות של מספר מילים רצופות. חובה להגדיר לפחות פונקצית עזר אחת. לדוגמא עבור המחרוזת sentence" "this is a והאורך 2 יודפס: שימו לב תתי המחרוזות "is" ו-" en " מופיעות פעם אחת בלבד. th hi is si sa as se en nt te nc ce 4

5 שאלה ) 4 22 נקודות) typedef struct item item; struct item{ char name[25]; long id; int grade; item *next; ; כדי לממש רשימה משורשרת נתונה ההגדרה הבאה: כתבו פונקציה list) item** distribution(item* שמקבלת list מצביע לרשימה משורשרת של מבנים שמכילים פרטי סטודנטים (שם, ת.ז., ציון). הפונקציה בונה ומחזירה מערך בן 10 איברים של מצבעים לרשימות משורשרות של התפלגות הסטודנטים לפי ציון. הרשימות האלה בניות מהמבנים של הרשימה.list אם המערך המוחזר הוא arr אזי: arr[0] מצביע על הרשימה המשורשרת של הסטודנטים שקיבלו ציון בין 0 ל- 9. arr[1] מצביע על הרשימה המשורשרת של הסטודנטים שקיבלו ציון בין 10 ל- 19.... arr[9] מצביע על הרשימה המשורשרת של הסטודנטים שקיבלו ציון בין 90 ל- 100 שימו לב: אין בשאלה הזאת ליצור מבנים חדשים. אין להעתיק את הרשימה המקורית למבנה נתונים אחר פרט למבנה שהוגדר בשאלה. סדר האיברים ברשימות החדשות אינו חשוב. 5

6 שאלה ) 5 24 נקודות) חברה "א.ב.ג. סע" כל חודש מקבלת מכל תחנות הדלק ש אתן עובדת קובץ פירוט תדלוקים הרכבים שלה. כל תחנת דלק שולחת כל חודש קובץ שבו כל שורה מכילה: 2 ספרה (בין 01 ל- 31) יום בחודש 5 תווים (בפורמט (hh:mm שעה 7 ספרות מספר רכב ספרה סוג דלק 3 ספרות כמות בליטרים 6 תוים (בפורמט (xxx.xx סכום בשקלים בכל יום יתכנו מספר מתדלוקים של אותו רכב באותה תחנת דלק או בתחנות שונות. הקובץ ממוין לפי יום בחודש בסדר עולה ומיון משנה לפי מספר רכב בסדר עולה. כתבו פונקציה filename) int gasoline(file** arr, int size, char* שמקבלת arr מערך מצביעים של הקבצים שהתקבלו החודש מתחנות הדלק, size גודל המערך, ומחרוזת filename שהיא השם של הקובץ החדש שהפונקציה יוצרת. הקובץ מכיל ריכוז הנתונים של כל תחנות הדלק כל שורה בקובץ מכילה: 2 ספרה (בין 01 ל- 31) יום בחודש 7 ספרות מספר רכב ספרה סוג דלק 3 ספרות סה"כ ליטרים 8 תוים (בפורמט (xxxxx.yy סה"כ עלות בשקלים ספרה מספר תדלוקים הקובץ ממוין לפי יום בחודש בסדר עולה ומיון משנה לפי מספר רכב בסדר עולה. עבור כל רכב שתדלק באותו יום מופיעה שורה אחת בלבד. הפונקציה תחזיר 1 עבור מהלך תקין ו- 0 בכל מקרה של תקלה (בקריאה או כתיבה לקובץ). שימו לב! בכל אחד מהקבצים, אין תווים בין נתון לנתון. אין לעבור על קובץ יותר מפעם אחת. אין להעתיק קובץ למבנה נתונים אחר (מערך, רשימה משורשרת, עץ,קובץ אחר...). 6

7 רשימת פונקציות קלט/פלט: INPUT/OUTPUT FUNCTIONS PROTOTYPES Open/Close a file FILE *fopen( char *filename, char *mode ); int fclose(file *stream); Repositions the file pointer to the beginning of a file void rewind( FILE *stream ); Get/put a character int fgetc( FILE *stream ); int fputc( int c, FILE *stream ); Get/put a string char *fgets( char *string, int n, FILE *stream ); int fputs( const char *string, FILE *stream ); Formatted Input/Output int fscanf( FILE *stream, const char *format [, argument ]... ); int sscanf( const char *string, const char *format [, argument ]... ); int fprintf( FILE *stream, const char *format [, argument ]...); int sprintf( char *string, const char *format [, argument ]...); Remove a file int remove(const char* filename); Rename a file int rename(const char* oldname, const char*newname); ב ה צ ל ח ה! 7

8 int printstrings(int i, int n, char* str, int a, int c) { int count = 0; if (i == n) { // str[i]=='\0' printf("%s\n", str); return 1; או if(a) if (a == 1) // a = 0; else { str[i] = 'a'; count += printstrings(i+1, n, str, 1, 0); או c) // printstrings(i+1, n, str, a+1, str[i] = 'b'; count += printstrings(i + 1, n, str, a, c); שאלה )16 1 נקודות( if (c == 2) count += (str[i-1]=='c'&& str[i-2]=='c')? 0 : printstrings(i, n, str, a, str[i-1]=='c'); //,str, 0... else { str[i] = 'c'; count += printstrings(i + 1, n, str, a, c + 1); או c+1) // printstrings(i+1, n, str, 0, return count; 1

9 0 4 3 7 2 6 5 9 1 5 4 8 3 7 6 10 שאלה )18 2 נקודות( סעיף א'. )15 נקודות( סעיף ב'. )3 נקודות( 2

10 שאלה ( 3 22 נקודות( int found(char **arr, int size, char *str){ int i; for (i=0; i<size; i++) if(!strcmp(arr[i], str)) return 1; return 0; void subsentence(char *sent, int length){ char** arr, *noblank, *temp; int i, j, len, size=0; noblank = (char *)malloc(strlen(sent)+1); for(i=0; *sent; sent++) if(*sent!=' ') noblank[i++] = *sent; noblank[i]='\0'; len = (int)strlen(noblank); arr = (char **)malloc(len*sizeof(char*)); temp = (char*)malloc(length+1); for (i=0; i<=len-length; i++){ for(j=0; j<length; j++) temp[j]=noblank[i+j]; temp[j]='\0'; if(!found(arr, size, temp)){ arr[size++] = temp; temp = (char*)malloc(length+1); for(i=0; i<size; i++){ puts(arr[i]); free(arr[i]); free(temp); free(arr); free(noblank); 3

11 typedef struct item item; struct item{ char name[25]; long id; int grade; item *next; ; שאלה )22 4 נקודות( item** distribution(item* list){ item **arr, *head; int i, index; arr = (item**)malloc(sizeof(item*)); if ( arr == NULL){ puts("error in memory allocation"); exit(1); for(i=0; i<10; i++) arr[i]=null; while( list ){ head = list; list = list -> next; index = head->grade/10 - head->grade/100; head->next = arr[index]; arr[index] = head; return arr; 4

12 typedef struct { int eof, day, car, litres, count; double price; line; int gasoline(file **arr, int size, char *filename){ FILE *fp; line * station = (line *)malloc(sizeof(line)*size); int i, day, mincar, litres, count; double price; if(!(fp=fopen(filename,"w"))) return 0; שאלה )24 5 נקודות( for(i=0;i<size;i++) station[i].eof = fscanf(arr[i],"%2d%*5c%8d%3d%6lf%*c", &station[i].day, &station[i].car, &station[i].litres, &station[i].price); for(day=1; day<=31; day++){ for(i=0, mincar=99999999; i<size; i++) if(station[i].eof!=eof && day==station[i].day) if(station[i].car < mincar) mincar = station[i].car; if(mincar == 99999999) continue; price = litres = count = 0; for(i=0; i<size; i++) while (station[i].eof!=eof && day==station[i].day && station[i].car==mincar){ litres += station[i].litres; price += station[i].price; count++; station[i].eof=fscanf(arr[i],"%2d%*5c%8d%3d%6lf%* c", &station[i].day, &station[i].car, station[i].litres, &station[i].price); fprintf(fp,"%02d%08d%03d%8.2f%d\n", day, mincar, litres, price, count); day--; free(station); if(fclose(fp)==eof) return 0; return 1; 5

2 nstrprintstrings ca,b a c n : n=3 aba,abb,abc,aca,acb,acc,bab,bac,bba,bbb,bbc,bca,bcb,bcc,cab, cac,cba,cbb,cbc,cca,ccb, n

3

4 lengthsentvoid subsentence(char *sent, int length) length sent "en""is"

item** distribution(item* list) list list arr arr[0] arr[1] arr[9] 5 ןוירוג-ןב,םיטנדוטסה תדוגא םימוכיסה רגאמ

arrint gasoline(file** arr, int size, char* filename) filenamesize 6 ןוירוג-ןב,םיטנדוטסה תדוגא םימוכיסה רגאמ

7 INPUT/OUTPUT FUNCTIONS PROTOTYPES Open/Close a file FILE *fopen( char *filename, char *mode ); int fclose(file *stream); Repositions the file pointer to the beginning of a file void rewind( FILE *stream ); Get/put a character int fgetc( FILE *stream ); int fputc( int c, FILE *stream ); Get/put a string char *fgets( char *string, int n, FILE *stream ); int fputs( const char *string, FILE *stream ); Formatted Input/Output int fscanf( FILE *stream, const char *format [, argument ]... ); int sscanf( const char *string, const char *format [, argument ]... ); int fprintf( FILE *stream, const char *format [, argument ]...); int sprintf( char *string, const char *format [, argument ]...); Remove a file int remove(const char* filename); Rename a file int rename(const char* oldname, const char*newname);

8

9

10

11

12

13

אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ח תשרי תשע"ז 30.10.16 שמות המורים: ציון סיקסיק א' תכנות ב- C מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' קיץ שנה תשע"ו 3 שעות משך הבחינה : דף פוליו אחד לא מודפס חומר עזר : ולא מצולם. אין להשתמש במחשבון. במבחן זה 5 שאלות רשמו תשובותיכם בדפי התשובות בלבד מחברת הטיוטה לא תימסר לבדיקה בסיום המבחן נאסוף רק את דפי התשובות מותר להגדיר פונקציות עזר בכל השאלות, אלא אם נאמר אחרת. כתבו קוד קריא והקפידו על אינדנטציה והערות (בעברית). ב ה צ ל ח ה! 1

2 שאלה (18 1 נקודות) הפונקציה str2) int star(char* str1, char* מקבלת כארגומנטים str1 מחרוזת של אותיות ו- str2 מחרוזת של אותיות וכוכביות. הפונקציה בודקת אם ניתן להחליף ב- str2 כל כוכבית בצירוף אותיות כלשהו (שיכול להיות בגודל אפס) ולקבל בדיוק את המחרוזת.str1 אם כן הפונקציה מחזירה את מספר הצירופים האפשריים אחרת מחזירה אפס. ידוע שאין כוכבית בסוף המחרוזת.str2 לדוגמה עבור הפונקציה הראשית הבאה: void main(){ printf("%d ", star("bcabcc", "b*c")); printf("%d ", star("abcabcc", "b*c")); printf("%d ", star("bbcabcc", "*b*c")); printf("%d ", star("bcbc", "*b*c")); 1 0 3 נקבל את הפלט (משאל לימין): 2 השלימו בדף התשובות את הקטעים החסרים המסומנים ב-?? N?? int star(char* str1, char* str2){ if(!*str1 &&!*str2) return?? 1?? ; if(!*str1!*str2) return?? 2?? ; if(*str1 == *str2) return star(?? 3??,?? 4?? ); if(*str2 == '*') return star(?? 5??,?? 6?? ) + star(?? 7??,?? 8?? ); return?? 9?? ; 2

3 שאלה (19 2 נקודות) סעיף א'. (16 נקודות) #include <stdio.h> #include <stdlib.h> #include <string.h> נתונה התכנית הבאה: typedef struct node { char letter; struct node* left; struct node* right; Node; void print(node* root) { if (!root) return; putchar(root->letter); print(root->left); print(root->right); Node* what(char *str, int start, int length){ Node* temp; int end = start + length / 2; if (length == 0) return NULL; temp = (Node*)malloc(sizeof(Node)); temp->letter = str[end]; temp->left = what(str, start, end-start); temp->right = what(str, end + 1, start + length-1-end); return temp; void main() { char st[] = "this*is*a*string"; print(what(st, 0, (int)strlen(st))); בהנחה שהפונקציה malloc עובדת ללא תקלה, מה הפלט של התכנית הנ"ל? סעיף ב'. (3 נקודות) איך לשנות את הפונקציה print כך שהקריאה לפונקציה שב- main תדפיס את המחרוזת המקורית (במקרה שלנו example".("this is an אגודת הסטודנטים, בן גוריון 3

4 שאלה (22 3 נקודות) כיתבו פונקציה *p_size) char** wordsfromsentence (char *sent, char limit, int המקבלת מחרוזת,sent תו limit ומצביע.p_size הפונקציה מדפיסה ומחזירה מערך בגודל מדויק של כל המילים (בגודל מדויק) המופיעות במחרוזת.sent ההפרדה בין המילים במחרוזת sent היא מאמצעות התו limit או רצף תווים כזה. אם אותה מילה מופיעה יותר מפעם אחת יודפס וישמר במערך המופע הראשון בלבד. דרך המצביע p_size הפונקציה "מחזירה" את מספר המילים שהודפסו (שהוא גם גודל המערך המוחזר). חובה להגדיר לפחות פונקציית עזר אחת. יודפס ויוחזר this is a sentence and another word לדוגמא: עבור המחרוזת " this.is..a.sentence.and.this.is.another.word" והתו '.' מערך של המילים: דרך המצביע p_size הפונקציה "מחזריה" את הערך 7. שימו לב שהמילים "this" ו-" is " מופיעות פעם אחת בלבד. 4

5 שאלה ) 4 22 נקודות) typedef struct item* Item; struct item{ int num; Item next; ; כדי לממש רשימה משורשרת נתונה ההגדרה הבאה: כיתבו פונקציה רקורסיבית sum) int sublistsum(item list, int שמקבלת list מצביע לרשימה משורשרת ומספר שלם.sum הפונקציה מדפיסה את אורכי כל תתי הרשימות שסכום איבריהן הוא sum ומחזירה את מספר תתי הרשימות. לדוגמה עבור sum=7 והרשימה הבאה: list 3 7 1 4 2 1 NULL הפונקציה תדפיס את האורכים 3 1, ו- 3 ותחזיר את הערך 3 עבור תתי הרשימות: Head 7 NULL Head 1 4 2 NULL Head 4 2 1 NULL שימו לב: אין ליצור מבנים חדשים או לשנות את הרשימה. אין להשתמש ביותר מלולאה אחת. אין להגדיר פונקצית עזר. פונקציה לא רקורסיבית תאפשר לקבל לכל היותר חצי הנקודות. אגודת הסטודנטים, בן גוריון 5

6 שאלה (22 5 נקודות) בסניפי קופת חולים "סי-בריא" קובעים תורים למרפאות חוץ של המרכז הרפואי "בן-גוריון". לקופת חולים 10 סניפים ממוספרים מ- 0 עד 9. למרכז הרפואי 7 מרפאות חוץ ממוספרות מ- 0 עד 6. כל חודש נשלחים למרכז הרפואי 10 הקבצים של 10 הסניפים עבור התורים של אותו חודש. כל שורה בקבצים מכילה: 2 ספרות יום בחודש 4 ספרות (לדוגמה 1145 עבור שעה 11:45) שעת התור 20 תווים שם החולה 9 ספרות ת.ז. ספרה אחת בין 0 ל- 6 מספר המרפאה 20 תווים שם רושם התור הקבצים ממוינים בסדר כרונולוגי (לפי יום ושעה בסדר עולה) ומיון משנה לפי מספר מרפאה. מהקבצים האלה בונים 7 קבצים של התורים של אותו חודש עבור 7 המרפאות. כל שורה בקובץ כזה מכילה את הפרטים הבאים: 2 ספרות יום בחודש 4 ספרות שעת התור 20 תווים שם החולה 9 ספרות ת.ז. ספרה אחת בין 0 ל- 9 מספר סניף ק"ח הקבצים ממוינים בסדר כרונולוגי (לפי יום ושעה בסדר עולה). אם בטעות משני סניפים נקבע תור לשני חולים באותה שעה באותה מרפאה אזי רושמים את הפרטים של שני התורים בקובץ שגויים. כל שורה בקובץ השגויים מכילה את הפרטים הבאים: 2 ספרות יום בחודש 4 ספרות שעת התור 20 תווים שם החולה 9 ספרות ת.ז. ספרה אחת בין 0 ל- 6 מספר המרפאה ספרה אחת בין 0 ל- 9 מספר סניף ק"ח 20 תווים שם רושם התור הקובץ ממוין בסדר כרונולוגי. כיתבו פונקציה error) int health(file* dispensary[10], FILE* clinic[7], char* שמקבלת dispensary מערך של 10 מצביעים של קבצי הסניפים ו- clinic מערך של 7 מצביעים לקבצי תורים של המרפאות חוץ ו- error מחרוזת שמכילה שם קובץ השגויים. הפונקציה תחזיר 1 עבור מהלך תקין ו- 0 בכל מקרה של תקלה (בקריאה או כתיבה לקובץ). שימו לב! בכל אחד מהקבצים, אין תווים בין נתון לנתון. אין לעבור על קובץ יותר מפעם אחת. אין להעתיק קובץ למבנה נתונים אחר (מערך, רשימה משורשרת, עץ, קובץ אחר...). 6

7 רשימת פונקציות קלט/פלט: INPUT/OUTPUT FUNCTIONS PROTOTYPES Open/Close a file FILE *fopen( char *filename, char *mode ); int fclose(file *stream); Repositions the file pointer to the beginning of a file void rewind( FILE *stream ); Get/put a character int fgetc( FILE *stream ); int fputc( int c, FILE *stream ); Get/put a string char *fgets( char *string, int n, FILE *stream ); int fputs( const char *string, FILE *stream ); Formatted Input/Output int fscanf( FILE *stream, const char *format [, argument ]... ); int sscanf( const char *string, const char *format [, argument ]... ); int fprintf( FILE *stream, const char *format [, argument ]...); int sprintf( char *string, const char *format [, argument ]...); Remove a file int remove(const char* filename); Rename a file int rename(const char* oldname, const char*newname); ב ה צ ל ח ה! אגודת הסטודנטים, בן גוריון 7

8 int star(char* str1, char* str2){ if(!*str2 &&!*str1) שאלה (18 1 נקודות) return 1 ; if(!*str1!*str2) return 0 ; if(*str1 == *str2 ) return star( str1+1, str2+1 ); if(*str2 == '*') return star( str1, str2+1 ) + what( str1+1, str2 ); return 0 ; שאלה (19 2 נקודות) סעיף א. (16 נקודות) סעיף ב. (3 נקודות) כדי שהקריאה לפונקציה שב- mainתדפיס את המחרוזת המקורית יש הקריאות הרקורסיביות.(inorder) a*ihtssi*rs*tnig להזיז את הפקודה putchar בין שתי

9 #include <stdio.h> #include <stdlib.h> #include <string.h> int found(char **arr, int size, char *str){ int i; for (i=0; i<size; i++) if(!strcmp(arr[i], str)) return 1; return 0; char* startword(char *sent, char limit){ while(*sent && *sent==limit) sent++; return sent; char* endword(char *sent, char limit){ while(*sent && *sent!=limit) sent++; return sent; char** wordsfromsentence (char *sent, char limit, int *p_size) { char **arr, *start, *end, *temp, **result=null; int i, size=0; arr = (char **)malloc(sizeof(char*)*((int)strlen(sent)+1)/2); sent = startword(sent, limit); while(*sent){ start = startword(sent, limit); end = endword(start, limit); temp = (char*)malloc(end-start+1); for (i=0; start!=end; i++) temp[i]=*start++; temp[i]='\0'; if(!found(arr, size, temp)) arr[size++] = temp; sent = end; result = (char **)malloc(sizeof(char*)*size); for(i=0; i<size; i++){ puts(arr[i]); result[i]=arr[i]; free(arr); *p_size = size; return result; (22 נקודות) שאלה 3 אגודת הסטודנטים, בן גוריון

10 שאלה ) 4 22 נקודות) typedef struct item* Item; struct item{ int num; Item next; ; int sublistsum(item list, int sum){ Item temp; int total, count; if(list==null) return 0; for(temp=list,count=total=0; temp && total<sum; temp=temp->next){ count++; total += temp->num; if(total==sum) printf("d\n", count); return (total==sum) + sublistsum(list->next, sum);

11 int health(file* dispensary[10], FILE* clinic[7], char* error){ int time[10], tmin, clinicnum[10], flag[10], disp, ok, i; char details[10][30], write[10][21]; FILE* ferror; שאלה (22 5 נקודות) if(!(ferror=fopen(error,"w"))) return 0; for(i=0; i<10; i++) flag[i]=fscanf(dispensary[i],"%6d%29[^\n]%1d%20[^\n]%*c", time+i,details[i],clinicnum+i,write[i]); while(1){ tmin=320000; for(i=0; i<10; i++) if(flag[i]==4) if(time[i] < tmin (time[i]==tmin && clinicnum[i]<clinicnum[disp])){ tmin = time[i]; disp = i; ok = 1; else if(time[i]==tmin && clinicnum[i]==clinicnum[disp]) ok = 0; if(tmin==320000)break; if(ok){ fprintf(clinic[clinicnum[disp]],"%06d%s%d\n", tmin,details[disp],disp); flag[disp]=fscanf(dispensary[disp],"%6d%29[^\n]%1d%20[^\n]%*c", time+disp,details[disp],clinicnum+disp,write[disp]); else for(i=disp; i<10; i++) if(time[i]==tmin && clinicnum[i]==clinicnum[disp]){ fprintf(ferror,"%06d%s%d\n", tmin,details[i],clinicnum[i],i,write[i]); flag[i]=fscanf(dispensary[i],"%6d%29[^\n]%1d%20[^\n]%*c",time+i,details[i],clinicnum+i,write[i]); if(fclose(ferror)==eof) return 0; return 1; אגודת הסטודנטים, בן גוריון

באדיבות רכזות בנק הבחינות והסיכומים www.bgu4u.co.il