PowerPoint Presentation
|
|
- אורן גרין
- לפני5 שנים
- צפיות:
תמליל
1 חלוקה למודולים Abstract data types טיפוסי נתונים מופשטים ADT של מבני נתונים בחירת מבני נתונים
2 תכנות מודולארי מודולים ב- C דוגמה: מודול תאריך 2
3 אורך החיים של קוד יכול להיות עשרות שנים, לאורך תקופה זו יש לתחזק את הקוד תיקון באגים הכנסת תכונות חדשות התאמה להתקנים חדשים הכנסת שינויים לתוכנה קיימת עלולה ליצור באגים חדשים ככל שהתוכנה מסובכת יותר, הסיכוי לטעויות גדל הפתרון: תכנות מודולארי חלוקת התוכנה למודולים לפי תפקידם מאפשר שימוש חוזר במודולים עבור תוכנות אחרות מסתיר פרטי מימוש ומקטין את התלויות בקוד 3
4 מודול תוכנה מחולק לשני חלקים: הממשק והמימוש ממשק :(interface) מגדיר את הפעולות שניתן לעשות בעזרת המודול חלק זה חשוף למשתמש במודול מימוש :(implementation) מספק את המימוש לפעולות שניתן לבצע דרך ממשק המודול חלק זה אינו חשוף למשתמש למשל, עבור מכונית הגה הוא חלק מהממשק ואילו המנוע הוא חלק מהמימוש 4
5 h c כדי לכתוב מודולים ב- C ניצור לכל מודל קובץ וקובץ )למשל קודי שגיאה( קובץ ה- h יכיל את ממשק המודול: הכרזות על הפונקציות הגדרות טיפוסים הכרזות על קבועים שיש בהם עניין למשתמש קובץ ה- c יכיל את מימוש המודול: מימושי פונקציות הממשק ופונקציות פנימיות נוספות הגדרות טיפוסים לשימוש פנימי הכרזות על קבועים שאין בהם עניין למשתמש נראה כעת כיצד יוצרים מודול מטיפוס הנתונים עבור תאריך מתרגול 3 5
6 #ifndef DATE_H_ #define DATE_H_ #include <stdbool.h> #include <stdio.h> הגנה נגד include כפול, מה קורה בלעדיה? #define MIN_DAY 1 #define MAX_DAY 31 #define MONTH_NUM 12 #define DAYS_IN_YEAR 365 #define MONTH_STR_LEN 4 /** * A module for a date datatype */ typedef struct date_t { int day; char month[month_str_len]; int year; Date; 6
7 /** Possible error codes */ typedef enum { DATE_SUCCESS, DATE_NULL_ARG, DATE_FAIL, DATE_INVALID DateResult; /** writes the date to the stream fd */ DateResult dateprint(date date, FILE* fd); /** Reads a date from the stream fd */ DateResult dateread(date* date, FILE* fd); כדי לאפשר למשתמש שימוש נוח במודול עלינו לספק לו קודי שגיאה מפורטים, לכן נגדיר טיפוס מיוחד למטרה זו ונשתמש בו /** Returns true if both dates are identical */ bool dateequals(date date1, Date date2); /** Returns the number of days between the dates */ int datedifference(date date1, Date date2); /** Checks if the date has valid values */ bool dateisvalid(date date); #endif /* DATE_H_ */ יש לספק תיעוד מפורט יותר של ערכי החזרה והשגיאה. תיעוד זה אינו מסופק כאן מפאת חוסר המקום בשקף 7
8 #include "date.h" #include <string.h> אין צורך להכריז מחדש על הפונקציות, פשוט כוללים את הממשק בקובץ #define INVALID_MONTH 0 static const char* const months[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ; static int monthtoint(char* month) { for (int i = 0; i < MAX_MONTH; i++) { if (strcmp(month, months[i]) == 0) { return i+1; return INVALID_MONTH; פונקציות עזר פנימיות אינן מעניינות את המשתמש ולכן יש להכריז עליהן כסטטיות static int datetodays(date date) { int month = monthtoint(date.month); return date.day + month*(max_day - MIN_DAY + 1) + DAYS_IN_YEAR * date.year; 8
9 DateResult dateprint(date date, FILE* fd) { if (!fd) { return DATE_NULL_ARG; fprintf(fd, "%d %s %d\n", date.day, date.month, date.year); return DATE_SUCCESS; DateResult dateread(date* date, FILE* fd) { if (!date!fd) { return DATE_NULL_ARG; if (fscanf(fd, "%d %3s %d", &(date->day), date->month, &(date->year))!= 3) { return DATE_FAIL; return dateisvalid(*date)? DATE_SUCCESS : DATE_INVALID; 9
10 bool dateisvalid(date date) { if (date.month[month_str_len-1]!= \0 ) return false; return date.day >= MIN_DAY && date.day <= MAX_DAY && monthtoint(date.month)!= INVALID_MONTH; bool dateequals(date date1, Date date2) { return date1.day == date2.day && strcmp(date1.month,date2.month) == 0 && date1.year == date2.year; int datedifference(date date1, Date date2) { int days1 = datetodays(date1); int days2 = datetodays(date2); return days1 - days2; 10
11 #include "date.h" int main() { Date date1 = { 21, "NOV", 1970 ; Date date2; DateResult result = dateread(&date2, stdin); if (result == DATE_FAIL) { fprintf(stderr,"bad date format\n"); return 0; else if (result == DATE_INVALID) { fprintf(stderr,"invalid date\n"); return 0; dateprint(date1, stdout); dateprint(date2, stdout); if (!dateequals(date1,date2)) { int diff = datedifference(date1,date2); int absolutediff = diff < 0? -diff : diff; printf("the dates are %d days apart\n", absolutediff ); return 0; כעת ניתן להשתמש במודול התאריך בתכניות שונות וגם לעדכן את מודול התאריך בקלות 11
12 נהוג לחלק את הקוד למודולים כדי לאפשר שימוש חוזר ותחזוקה נוחה מודול מוגדר משני חלקים - ממשק ומימוש הממשק מכיל רק את מה שהמשתמש במודול זקוק לו ב- C מגדירים את ממשק המודול בקובץ h ואת המימוש בקובץ c יש להגן על קבצי h מפני include כפול פונקציות פנימיות של המודול יש להגדיר כ- static 12
13 הסתרה ADT עבור תאריך 13
14 int main() { Date date1 = { 21, "NOV", 1970 ; Date date2; printf("enter a day number:"); scanf("%d", &date2.day); //... more code... return 0; משתמש במודול התאריך שלנו כתב את הקוד הבא: מה הבעיה? מה גורם לה? 14
15 הבעיה בטיפוסי הנתונים שלנו - המימוש חשוף המשתמש עלול לשכפל קוד במקום להשתמש בקוד קיים שינויים עתידיים במודול "ישברו" את הקוד של המשתמש בו הפתרון: נסתיר את המימוש של טיפוס הנתונים מהמשתמש כך שקוד אשר אינו משתמש בממשק לא יתקמפל חשוב לציין - המשתמש יכול להיות כותב המודול בעצמו 15
16 כדי להסתיר את המימוש מהמשתמש ב- C נשתמש בשיטה הבאה: בקובץ ה- h נכריז על טיפוס מצביע למבנה typedef struct datatype_t* Datetype; בקובץ ה- c נממש את המבנה struct datatype_t { // fields... ; משתמשים במודול לא יוכלו לבצע dereference למצביע משתמשים במודול חייבים להשתמש בו רק דרך הממשק המוגדר 16
17 #ifndef DATE_H_ #define DATE_H_ #include <stdbool.h> #include <stdio.h> /** * A module for a date */ typedef struct date_t* Date; רק טיפוס המצביע חשוף, עם הגדרה זו לא ניתן לבצע ל- Date dereference typedef enum { DATE_SUCCESS, DATE_NULL_ARG, DATE_FAIL, DATE_INVALID DateResult; 17
18 /** Allocates a new date */ Date datecreate(int day, int month, int year); /** Allocates a new date which is a copy of the argument */ Date datecopy(date date); /** Frees an existing date object */ void datedestroy(date date); DateResult dateprint(date date, FILE* fd); DateResult dateread(date date, FILE* fd); bool dateequals(date date1, Date date2); int datedifference(date date1, Date date2); bool dateisvalid(date date); #endif /* DATE_H_ */ מאחר והמשתמש לא יכול ליצור עצמים מטיפוס התאריך עלינו לספק לו ממשק לביצוע פעולות אלו 18
19 #include "date.h" #include <stdlib.h> #include <string.h> #define INVALID_MONTH 0 #define MIN_DAY 1 #define MAX_DAY 31 #define MONTH_NUM 12 #define DAYS_IN_YEAR 365 #define MONTH_STR_LEN 4 המבנה מוגדר בקובץ ה- C ולכן גישה לשדותיו אפשרית רק מיחידת הקומפילציה הזו struct date_t { int day; char month[month_str_len]; int year; ; static const char* const months[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ; 19
20 static int monthtoint(char* month) { assert(month[month_str_len-1] == \0 ); for (int i = 0; i < MONTH_NUM; i++) { if (strcmp(month, months[i]) == 0) { return i+1; return INVALID_MONTH; static bool isdayvalid(int day) { return day >= MIN_DAY && day <= MAX_DAY; static bool ismonthnumbervalid(int month) { return month >= 1 && month <= MONTH_NUM; static int datetodays(date date) { int month = monthtoint(date->month); return date->day + month*(max_day - MIN_DAY + 1) + DAYS_IN_YEAR * date->year; 20
21 Date datecreate(int day, int month, int year) { if (!isdayvalid(day)!ismonthnumbervalid(month)) { return NULL; Date date = malloc(sizeof(*date)); if (!date) { return NULL; date->day = day; strcpy(date->month, months[month-1]); date->year = year; return date; 21
22 Date datecopy(date date) { if (!date) { return NULL; return datecreate(date->day, monthtoint(date->month), date->year); void datedestroy(date date) { free(date); למה בכלל לטרוח? bool dateisvalid(date date) { assert(date!= NULL); return isdayvalid(date->day) && monthtoint(date->month)!= INVALID_MONTH; 22
23 DateResult dateprint(date date, FILE* fd) { if(!date!fd) { return DATE_NULL_ARG; fprintf(fd, "%d %s %d\n", date->day, date->month, date->year); return DATE_SUCCESS; DateResult dateread(date date, FILE* fd) { if(!date!fd) { return DATE_NULL_ARG; if(fscanf(fd,"%d %3s %d",&(date->day),date->month,&(date->year))!= 3) { return DATE_FAIL; return dateisvalid(date)? DATE_SUCCESS : DATE_INVALID; 23
24 bool dateequals(date date1, Date date2) { assert(dateisvalid(date1) && dateisvalid(date2)); return date1->day == date2->day && strcmp(date1->month,date2->month) == 0 && date1->year == date2->year; int datedifference(date date1, Date date2) { assert(dateisvalid(date1) && dateisvalid(date2)); int days1 = datetodays(date1); int days2 = datetodays(date2); return days1 - days2; 24
25 #include <stdlib.h> #include "date.h" int main() { Date date1 = datecreate(21, 11, 1970); Date date2 = datecreate(1,1,0); DateResult result = dateread(date2, stdin); if (result!= DATE_SUCCESS) { fprintf(stderr,"bad input\n"); return 0; if (!dateequals(date1,date2)) { int diff = datedifference(date1,date2); printf("the dates are %d days apart\n", abs(diff)); datedestroy(date1); datedestroy(date2); return 0; צריך לבדוק הצלחה של datecreate() מה הבעיה? לא לשכוח לשחרר! ההקצאות הן דינאמיות! 25
26 טיפוסי נתונים מופשטים נבדלים מטיפוסי נתונים רגילים בניתוק המימוש מהממשק כדי להסתיר את המימוש של struct את הגדרת המבנה נשים בקובץ C ב- C נשתמש במצביעים למבנה 26
27 תחביר דוגמאות קוד גנרי 27
28 מה משותף לשתי הפונקציות הבאות? bool isbigger(int a, int b); bool isbiggerabs(int a, int b); ביצוע קריאה לפונקציות בעלות אותה חתימה נעשה באותה צורה בקוד מכונה השמת המשתנים במקום מוגדר )בד"כ על המחסנית( 1. קפיצה לכתובת תחילת הפונקציה בזיכרון 2. כתיבת ערך החזרה למקום מוסכם 3. קפיצה לכתובת ממנה נקראה הפונקציה 4. שלבים 3 1, ו- 4 זהים לכל שתי פונקציות בעלות אותה חתימה לכן ניתן לקרוא לפונקציות שונות בעזרת קוד דומה 28
29 ניתן להכריז על מצביע לפונקציה בעלת חתימה מסוימת: <return type> (*<name>)(<parameters>) = <initial value>; למשל הכרזה על מצביע עבור פונקציה המקבלת משתנה יחיד מטיפוס int ומחזירה int המאותחל ל- NULL תיראה כך: int (*ptr)(int) = NULL; מה קורה בלי הסוגריים? ניתן לאחסן במצביע לפונקציה את כתובתה של פונקציה בעלת חתימה זהה לזו שהוגדרה במצביע int square(int n);... ptr = square; // &square also works ניתן לקרוא לפונקציה דרך המצביע: printf("%d", ptr(5)); // (*ptr)(5) also works לא נהוג להשתמש ב-& ו-* עבור מצביעים לפונקציות 29
30 ברשותנו שתי הפונקציות הבאות: bool isbigger(int a, int b) { return a > b; bool isbiggerabs(int a, int b) { int abs_a = a > 0? a : -a; int abs_b = b > 0? b : -b; return abs_a > abs_b; נכתוב את הפונקציה max המקבלת מצביע לפונקציה ומחזירה את האיבר הגדול מביניהם בהתאם לקריטריון שמועבר לה int max(int a, int b, bool (*compare)(int,int)) { return compare(a,b)? a : b; מה יהיו תוצאות כל אחת מההרצות הבאות של?max max(-7, 5, isbigger); max(-7, 5, isbiggerabs); 30
31 int main() { bool (*function)(int, int); if (getchar() == '1') { function = isbigger; else { function = isbiggerabs; int a = -5, b = 3; bool c = function(a, b); בעזרת מצביעים לפונקציות ניתן ליצור קוד שבכל הרצה שלו יתנהג אחרת: if (c) { printf("%d",a); else { printf("%d",b); return 0; 31
32 כתבו פונקציה למיון מערך של מספרים שלמים המאפשרת מיון לפי קריטריון משתנה typedef bool (*CmpFunction)(int, int); void sort(int* array, int n, CmpFunction compare) { assert(array!= NULL && compare!= NULL); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (compare(array[i], array[j])) { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; כדי להימנע מהתחביר הלא נוח של מצביעים לפונקציות ניתן להשתמש ב- typedef 32
33 int main(){ int arr[] = { 1, -3, 9, -10, -5 ; sort(arr, 5, isbigger); // sort(arr, 5, isbiggerabs); // return 0; דוגמה לשימוש: 33
34 קוד גנרי הוא קוד המסוגל לעבוד על עצמים מטיפוסים שונים ב- C ניתן לכתוב קוד גנרי בעזרת: מצביעים ל- void כדי לייצג עצמים כלליים מצביעים לפוקציות כדי לייצג את הפעולות על העצמים בשיטה זו נוכל לממש אלגוריתמים פעם אחת בלבד ולמנוע שכפול קוד 34
35 כתבו פונקציה למיון מערך של עצמים כלשהם המאפשרת מיון לפי קריטריון משתנה typedef bool (*CmpFunction)(void*, void*); void sort(void** array, int n, CmpFunction compare) { assert(array!= NULL && compare!= NULL); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (compare(array[i], array[j])) { void* tmp = array[i]; array[i] = array[j]; array[j] = tmp; 35
36 כדי למיין באמצעות הפונקציה החדשה עלינו ליצור פונקציות השוואה מתאימות: bool intisbigger(void* a, void* b) { assert(a && b); return ( *(int*) a ) > ( *(int*) b ); bool dateisbigger (void* date1, void* date2) { assert(date1 && date2); int difference = datedifference(date1,date2); return difference > 0; למה לא חייבים המרה מפורשת? 36
37 int main() { void* dates[3]; dates[0] = datecreate(20, 5, 2010); dates[1] = datecreate(1, 1, 2000); dates[2] = datecreate(2, 2, 2001); int* numbers[3]; numbers[0] = malloc(sizeof(int)); *numbers[0] = 17; numbers[1] = malloc(sizeof(int)); *numbers[1] = 1; numbers[2] = malloc(sizeof(int)); *numbers[2] = 7; 37 sort(dates, 3, dateisbigger); sort((void**)numbers, 3, intisbigger); for (int i = 0; i < 3; i++) { dateprint(dates[i], stdout); printf("\n"); for (int i = 0; i < 3; i++) { printf("%d\n",*numbers[i]); return 0; למה דרושה המרה מפורשת? מה חסר? 1 JAN FEB MAY
38 ניתן להגדיר ב- C מצביעים אשר שומרים כתובת של פונקציה ניתן להריץ את הפונקציה שכתובתה שמורה במצביע נשתמש במצביעים לפונקציות כדי להעביר "הוראות" לחלקי קוד אחרים בעזרת מצביעים לפונקציות ניתן לכתוב קוד גנרי ולחסוך שכפול קוד 38
39 פתרון בעיה ישירות מבני נתונים מחסנית פתרון הבעיה בעזרת מחסנית 39
40 נרצה לקלוט 100 מספרים אי שליליים מהקלט ולהדפיס אותם בסדר הפוך בזמן הכנסת הקלט המשתמש יכול להתחרט ולבטל את הכנסת המספר האחרון לצורך כך הוא צריך להכניס 1- פעולת הביטול דומה לפעולת undo בעורכי טקסטים המשתמש undo לבצע יכול כמה פעמים ולבטל כמה מספרים נפתור תחילה את הבעיה הזו ישירות 40
41 #include <stdio.h> #include <assert.h> #define MAX_SIZE 100 #define UNDO_LAST_COMMAND -1 int main() { int input, size = 0, numbers[max_size]; while (size < MAX_SIZE && scanf("%d", &input) == 1) { if (input!= UNDO_LAST_COMMAND) { assert(size >= 0 && size < MAX_SIZE); numbers[size++] = input; else if (size > 0) { size--; printf("undo\n"); else { printf("cannot undo\n"); while (size > 0) { printf("%d\n", numbers[--size]); assert(size >= 0 && size < MAX_SIZE); return 0; 41
42 לא ניתן לעשות שימוש חוזר בקוד עבור בעיות דומות קל להכניס באגים?--size או size--?++size או size++?size או >= 0 size > 0?size או < 0 size < 1 הפתרון אינו מתעד את עצמו מוסיפים רק לסוף המערך מורידים מספרים רק מסוף המערך ההדפסה מתבצעת רק בסדר הפוך עבור בעיה גדולה יותר, כבר לא ניתן לשמור על הקוד פשוט כמו במקרה זה 42
43 מבני נתונים הם טיפוסי נתונים מיוחדים שמטרתם לשמור אוסף של משתנים ולאפשר עליהם פעולות מסוימות Array Get(i) Set(i) Linked List Head() Next(node) InsertAfter(node) RemoveAfter(node) דוגמאות: מערך - הממשק של מערך כולל קריאת איברים לפי אינדקס והשמה לאיברים לפי אינדקס רשימה מקושרת - הממשק של רשימה מקושרת כולל קבלת האיבר הראשון, קבלת האיבר שבא אחרי איבר נתון, והכנסה/הוצאה של איבר אחרי איבר נתון נוח לכתוב מבני נתונים נוספים כטיפוס נתונים ולהשתמש בהם עבור בעיות מתאימות 43
44 )מבלי מבנה הנתונים מחסנית מוגדר לפי הממשק הבא: - push הוסף איבר בראש המחסנית - pop הוצא את האיבר האחרון שהוכנס למחסנית להחזיר את ערכו( - top החזר את ערכו של האיבר האחרון שהוכנס למחסנית )מבלי להוציאו( מחסנית מאפשרת גישה רק לאיבר האחרון שהוכנס ורק אותו ניתן להוציא ברגע נתון Out) (LIFO - Last In First 44
45 #ifndef _STACK_H #define _STACK_H /** ADT of Stack of integers */ typedef struct stack_t* Stack; /** possible return values */ typedef enum { STACK_SUCCESS, STACK_BAD_ARGUMENT, STACK_EMPTY, STACK_FULL StackResult; /** creates a Stack with maximal capacity of 'maxsize'. if fails, returns NULL */ Stack stackcreate(int maxsize); /** releases the memory allocated for the stack */ void stackdestroy(stack stack); ערכי שגיאות מוסכמים כדי לאפשר למשתמש להתמודד עם שגיאות איפה המבנה עצמו? מדוע? לא לשכוח הגנה נגד include כפול 45
46 /** insert a number to the top of the stack. Error Codes: STACK_BAD_ARGUMENT if stack is NULL STACK_FULL if the stack is full. */ StackResult stackpush(stack stack, int number); /** removes the element at the top of the stack. Error codes: STACK_BAD_ARGUMENT if stack is NULL STACK_EMPTY if the stack is empty */ StackResult stackpop(stack stack); /** returns in 'number' the last element that was pushed. Error codes: STACK_BAD_ARGUMENT if stack or number are NULL STACK_EMPTY if the stack is empty */ StackResult stacktop(stack stack, int* number); 46
47 /** returns a flag indicating whether the stack is full (meaning elements cannot be pushed) stack must not be NULL */ bool stackisfull(stack stack); /** returns a flag indicating whether the stack is empty (meaning elements cannot be popped) stack must not be NULL */ bool stackisempty(stack stack); /** returns the number of elements in the stack. stack must not be NULL */ int stacksize(stack stack); #endif 47
48 #include <stdio.h> #include <assert.h> #include <stdlib.h> #include "stack.h" #define MAX_INPUT_SIZE 100 #define UNDO_LAST_COMMAND -1 int main() { Stack stack = stackcreate(max_input_size); if (stack == NULL) { fprintf(stderr, "failed to create stack\n"); return -1; int input; while (!stackisfull (stack) && scanf("%d", &input) == 1) { if (input!= UNDO_LAST_COMMAND) { StackResult result = stackpush(stack, input); assert(result == STACK_SUCCESS); continue; StackResult result = stackpop(stack); if (result == STACK_EMPTY) { printf("cannot undo\n"); else { assert(result == STACK_SUCCESS); printf("undo\n"); 48
49 while (!stackisempty (stack)) { int number; StackResult result = stacktop(stack, &number); StackResult result2 = stackpop(stack); assert (result == STACK_SUCCESS && result2 == STACK_SUCCESS); printf("%d\n", number); stackdestroy(stack); return 0; 49
50 נבחר לממש את המחסנית בעזרת מערך נשמור שלושה שדות במבנה 5 nextindex מערך בו יישמרו המספרים גודל המחסנית המקסימלי אינדקס המקום הפנוי הבא במערך 2 זהו גם מספר האיברים במבנה 17 איזו דרך נוספת קיימת למימוש מחסנית? 3 50
51 #include <stdlib.h> #include <assert.h> #include "stack.h" /** The Stack is implemented as an array of integers. * With nextindex as an index to the next available position and * the maximal size is stored in maxsize. */ struct stack_t { int* array; int nextindex; int maxsize; ; 51
52 Stack stackcreate(int maxsize) { if (maxsize <= 0) { return NULL; Stack stack = malloc(sizeof(*stack)); if (stack == NULL) { return NULL; stack->array = malloc(sizeof(int)*maxsize); if (stack->array == NULL) { free(stack); return NULL; stack->nextindex = 0; stack->maxsize = maxsize; return stack; שימו לב, בשלב זה כבר יש הקצאה שהצליחה 52
53 StackResult stackpush(stack stack, int number) { if (stack == NULL) { return STACK_BAD_ARGUMENT; if (stack->nextindex >= stack->maxsize) { return STACK_FULL; assert(stack->nextindex >= 0 && stack->nextindex < stack->maxsize); stack->array[stack->nextindex++] = number; return STACK_SUCCESS; StackResult stackpop(stack stack) { if (stack == NULL) { return STACK_BAD_ARGUMENT; if (stack->nextindex < 1) { return STACK_EMPTY; stack->nextindex--; return STACK_SUCCESS; 53
54 StackResult stacktop(stack stack, int* number) { if (stack == NULL number == NULL) { return STACK_BAD_ARGUMENT; if (stack->nextindex < 1) { return STACK_EMPTY; assert(stack->nextindex > 0 && stack->nextindex <= stack- >maxsize); *number = stack->array[stack->nextindex - 1]; return STACK_SUCCESS; void stackdestroy(stack stack) { if (stack!= NULL) { free(stack->array); free(stack); 54
55 int stacksize(stack stack) { assert(stack); return stack->nextindex; כיצד ניתן היה לכתוב פונקציות אלו בצורה שונה כך שיחזירו ערכי שגיאה? מה היתרונות והחסרונות של כל שיטה? bool stackisempty(stack stack) { assert(stack); return stacksize(stack) == 0; bool stackisfull(stack stack) { assert(stack); return stacksize(stack) == stack->maxsize; 55
56 ניתן להגדיר מבני נתונים כ- ADT ע"י פתרון הבעיה עם מבנה המחסנית מתקבל פתרון עם סיכוי קטן יותר לבאגים הפתרון עם המחסנית מתעד את עצמו שימוש במבני נתונים מונע שכפול קוד שימוש במבני נתונים מבטיח את אופן העבודה עם הנתונים שימוש במבני הנתונים מקל על המתכנת בכתיבת קוד 56
57 בחירת מבני נתונים מבני הנתונים הנלמדים בקורס 57
58 בקורס זה אנו לומדים את מבני הנתונים הבסיסיים הבאים )כולם נלמדים כ- ADT (: - List רשימה: שומרת אוסף איברים עם סדר ביניהם ומאפשרת הכנסת אותו איבר מספר פעמים - Set קבוצה: מאפשרת הכנסת איבר פעם אחת בלבד ואינה שומרת סדר בין איברי הקבוצה - Stack מחסנית: מאפשרת הכנסה, גישה והוצאה רק מסופה. שומרת על סדר ומאפשרת כפילויות - Graph גרף: שומר קבוצת צמתים וקבוצת קשתות המחברות ביניהם מתאים לבעיות הדורשות אבסטרקציה של רשתות כגון רשת כבישים, רשת מחשבים וכו'
59 לכל בעיה חשוב להתאים את מבנה הנתונים המתאים ביותר התאמת מבנה הנתונים נעשית לפי שני שיקולים עיקריים: איכות הקוד - בחירה טובה יוצרת קוד קצר יותר, פשוט יותר, מונעת שכפול קוד ומקשה על הכנסת באגים למשל בחירת set במקום list מונעת הכנסת איבר פעמיים, חוסכת התעסקות בסדר הרשימה ובדיקות לפני הכנסת איבר בשנית סיבוכיות כל מבנה נתונים מספק אוסף אחר של פעולות בסיסיות, ובחירה במבנה שפעולותיו מתאימות יותר לבעיה יכולה לשפר מאוד את יעילות התוכנית. סוגיה זו תלמד יותר לעומק בקורס מבני נתונים. למשל חיפוש בינארי ניתן לבצע רק במערך ממוין, ולא ברשימה מקושרת ממוינת בבחירת המבנה כדאי להתחשב בדברים הבאים: האם מותרות כפילויות של איברים? האם חשוב לדעת את סדר האיברים? האם יש מבנה נתונים ששימוש בו מקל באופן מובהק על התכנות? 59
60 מבני הנתונים הנלמדים בקורס הם Stack,Set,List ו- Graph יש לבחור מבנה נתונים מתאים לבעיה כדי להקל על העבודה 60
PowerPoint Presentation
מצביעים הקצאת זיכרון דינאמית מבנים - Structures טיפוסי נתונים - types Data העברת פרמטרים ל- main טענות נכונות שימוש בסיסי אריתמטיקת מצביעים void* מצביע למצביע 2 כתובת ערך הבית int התופס 4 בתים 7 0 0 0
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 6: כתובות ומצביעים 1 תוכנייה מצביעים מצביעים ומערכים, אריתמטיקה של מצביעים 2 3 מצביעים תזכורת- כתובות זיכרון הזיכרון כתובת התא #1000 #1004 #1008 ערך השמור בתא תא 10-4 לא מאותחל
קרא עודסדנת תכנות ב C/C++
פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבוא למחשבים ושפת C קוד הקורס: 2-7028510 תאריך בחינה: 15.2.2017 משך הבחינה: שעתיים שם המרצה: ד"ר אופיר פלא חומר עזר: פתוח שימוש במחשבון: לא הוראות כלליות:
קרא עודSlide 1
מבוא לשפת C תירגול 3: טיפוסים והמרות 1 מה היה שבוע שעבר? משתנים קלט/פלט scanf( ו- printf ( Redirection The Input Buffer 2 תוכנייה טיפוסי משתנים קלט/פלט מעוצב המרה בין טיפוסים קבועים 3 חישוב ממוצע בין שני
קרא עודMicrosoft Word B
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: 1. ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב את
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג,.6.013 משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם 8 עמודי שאלון )כולל עמוד זה(. עליכם לכתוב את התשובות על
קרא עודSlide 1
מבוא למדעי המחשב תירגול 4: משתנים בוליאניים ופונקציות מבוא למדעי המחשב מ' - תירגול 4 1 משתנים בוליאניים מבוא למדעי המחשב מ' - תירגול 4 2 ערכי אמת מבחינים בין שני ערכי אמת: true ו- false לכל מספר שלם ניתן
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג מנ' אב תשע"ז 15.08.17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' ב' שנה תשע"ז 3 שעות
קרא עודמבוא למדעי המחשב - חובלים
החוג למדעי המחשב אוניברסיטת חיפה מבוא למדעי המחשב סמסטר א' תשע"ג בחינת סיום, מועד ב', 20.02.2013 מרצה: ריטה אוסדצ'י מתרגלת: נעמה טוויטו מדריך מעבדה: מחמוד שריף משך המבחן: שעתיים חומר עזר: ספר של Kernighan
קרא עודמספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה
עמוד 1 מתוך 11 תשע"א מועד ב סמסטר א' 14.2.2011 תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי המחשב יש לענות על כל 5 השאלות. בכל השאלות במבחן יש לכתוב פונקציות יעילות
קרא עודMicrosoft Word - c_SimA_MoedB2005.doc
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד ב', סמסטר א' תשס"ה,.2.2005 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. ודאו כי בטופס שבידיכם עמודים. יש לכתוב
קרא עודפתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.
פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9. הדפסה ראשונה: מתבצעת לולאה שרצה מאפס עד אורך המחרוזת.
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ח תשרי תשע"ז 30.10.16 שמות המורים: ציון סיקסיק א' תכנות ב- C מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' קיץ שנה תשע"ו 3 שעות משך
קרא עודPowerPoint Presentation
תכנות מתקדם בשפת Java אוניברסיטת תל אביב 1 תוכנה 1 תרגול 3: עבודה עם מחרוזות )Strings( מתודות )Methods( 1 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 2 מחרוזות )STRINGS( 3 מחרוזות String s = Hello ; מחרוזות
קרא עודמספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי
מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בינסקי הנחיות: יש לענות על כל השאלות. יש לענות על כל
קרא עודמבוא למדעי המחשב - חובלים
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב סמסטר ב' תשע"ב בחינת סיום, מועד ב',.02..9.7 מרצה: אורן וימן מתרגלים: נעמה טוויטו ועדו ניסנבוים מדריכי מעבדה: מחמוד שריף ומיקה עמית משך המבחן: שעתיים חומר
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג חשון תשע"ח 12/11/17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד קיץ סמ' שנה תשע"ז 3 שעות משך
קרא עודSlide 1
מבוא לשפת C תירגול 8: פונקציות שבוע שעבר... מערכים מיזוג מערכים ממויינים מערכים דו-ממדיים מבוא לשפת סי - תירגול 8 2 תוכנייה פונקציות ברמת התקשורת הבין-אישית חלוקה לתתי בעיות בדומה למפתח של ספר קריאות גבוהה
קרא עודPowerPoint Presentation
רשימות מקושרות עבודה קבצים דוגמה מבנים המצביעים לעצמם רשימות מקושרות 2 נסתכל על המבנה הבא: typedef struct node { int data; struct node* next; *Node; איך נראים המבנים בזיכרון לאחר ביצוע הקוד הבא: Node node1
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 12 מחסנית )Stack( memoization ראינו בהרצאה מחסנית Infix/Postfix Notations בתרגול היום מחסנית בדיקת איזון סוגריים בביטוי אריתמטי מימוש תור באמצעות מחסנית memoization דוגמאות
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב המחלקה Object תוכן עניינים Object הורשה והמחלקה ערך שם טיפוס DynamicIntArray da data size incrementsize DynamicArray תזכורת - Object[] data; int size; int incrementsize; DynamicArray זה
קרא עודמבוא לתכנות ב- JAVA תרגול 11
מבוא לתכנות ב- JAVA תרגול 11 רשימה מקושרת אוסף סדור של איברים מאותו טיפוס. קודקוד ברשימה )Node( מכיל את המידע + הצבעה לקודקוד הבא ברשימה data next first רשימה :)List( מיוצגת ע"י מצביע לאיבר הראשון ברשימה
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ
אוניברסיטת בן גוריון בנגב תאריך המבחן: 12.02.17 שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ד 3 שעות משך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודMicrosoft PowerPoint - lec2.ppt
מרחב הש מות (namespace) אוהד ברזילי אוניברסיטת תל אביב מה בתו כנית? לקוח וס פק במערכת תוכנה ממשקים הכרת מרחב השמות מניעת תלות פוטנציאלית בין רכיבים במערכת ע"י עיצוב חלופי של מבנה הממשקים 2 א ונ י ב רס
קרא עודSlide 1
מבוא למדעי המחשב תירגול 7: פונקציות 1 מה היה שבוע שעבר? לולאות מערכים מערכים דו-ממדיים 2 תוכנייה )call by value( פונקציות העברת פרמטרים ע"י ערך תחום הגדרה של משתנה מחסנית הקריאות 3 פונקציות 4 הגדרה של
קרא עודPowerPoint Presentation
תוכנה 1 3 תרגול מס' מתודות ותיכון לפי חוזים חוזה בין ספק ללקוח חוזה בין ספק ללקוח מגדיר עבור כל שרות: תנאי ללקוח - "תנאי קדם" precondition - - תנאי לספק "תנאי אחר".postcondition לקוח ספק 2 תנאי קדם )preconditions(
קרא עודתכנות מונחה עצמים א' – תש"ע
1 תכנות מונחה עצמים והנדסת תוכנה תשע"ו 2 בנאי העתקה בניית העתק של אובייקט קיים. בניית העתק בעת העברת אובייקט לפונקציה. בניית העתק בעת החזרת אובייקט מפונקציה. ניתן להגדיר בנאי העתקה. אם לא מגדירים, אז הקומפיילר
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java אלכסיי זגלסקי ויעל אמסטרדמר 1 בירוקרטיה אלכסיי זגלסקי שעת קבלה: שני 13:00-14:00, בתיאום מראש משרד: בניין הנדסת תוכנה, חדר 209 יעל אמסטרדמר שעת קבלה: חמישי 15:00-16:00,
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב שימוש במחסנית - מחשבון תוכן עניינים prefix כתיבת ביטויים ב-,infix ו- postfix postfix prefix,infix ביטויים ב- כתיבת ו- infix נוסח כתיבה ב- (operator אנו רגילים לכתוב ביטויים חשבוניים כדוגמת
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב תכנות מונחה אובייקטים תוכן עניינים טיפוסי נתונים מורכבים המחלקה String תזכורת לשימוש שעשינו במחלקה String str = new String( Hello ); s.o.p(str.tostring()); s.o.p(str.charat(4)); s.o.p(str.equals(
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב מחרוזות, חתימה של פונקציה ומעטפות תוכן עניינים טיפוסים מורכבים טיפוסים מורכבים ערך שם טיפוס 12 m int undef. x boolean true y boolean arr int[] כאלה שעשויים להכיל יותר מערך פרימיטיבי אחד
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 5 מחרוזות, חתימות ורקורסיה מחרוזות רצף של תווים רקורסיה קריאה של מתודה לעצמה באופן ישיר או עקיף ראינו בהרצאה מחרוזות: תווים, חתימות: העמסה- String,הצהרה, overloading אתחול רקורסיה:
קרא עודSlide 1
בעיית התוכנית הגדולה C תוכנית גדולה המבצעת פעולות רבות, יכולה להפוך לקשה מאוד לניהול אם נשתמש רק בכלים שלמדנו עד כה: 1. קשה לכתוב ולנפות את התוכנית,. קשה להבין אותה, 3. קשה לתחזק ולתקן אותה, 4. קשה להוסיף
קרא עודSlide 1
מבוא לשפת C תירגול 10: מצביעים, מערכים ומחרוזות שבוע שעבר... מצביעים Call by reference 2 תוכנייה קשר מצביע-מערך )אריתמטיקה של מצביעים( העברת מערכים לפונקציה מחרוזות דוגמה 3 קשר מצביע-מערך 4 תזכורת: תמונת
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד א', סמסטר א' תשס"ה, 6..5 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודSlide 1
1 אובייקטים היום בתרגול: 2.)objects מחלקות )classes( ואובייקטים )מופעים, )fields( שדות המחלקה שיטות הכמסה )methods של מחלקה. ( class מחלקה - עד עכשיו השתמשנו בעיקר בטיפוסים מובנים ופונקציות המבצעות חישובים
קרא עודMicrosoft PowerPoint - rec1.ppt
תכנות מונחה עצמים בשפת ++C תר גול מ ספר 1 אוהד ב ר זילי אוניברסיטת תל א ביב חדש חדיש ומחודש תוספות של + +C לשפ ת C 1 #include Hello World using namespace std; int main() cout
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 2: מבוא לתיכנות ב- C 1 תוכנייה משתנים קלט/פלט משפטי תנאי מבוא למדעי המחשב מ' - תירגול 3 2 משתנים 3 משתנים- תמונת הזיכרון הזיכרון כתובת התא #1000 10-4 לא מאותחל 67 לכל תא בזיכרון
קרא עודMicrosoft PowerPoint - rec3.ppt
תכנו ת מונח ה עצ מים משתני מחלקה, עצמים מוכלים ועצמים מוצבעים א וה ד ברז יל י א ונ יברס י ט ת תל אביב משתנ י מח ל קה Static Members משתני מחלקה members) (static משתנים סטטיים מוגדרי ם בתוך מח לקה ואולם
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד
אוניברסיטת בן גוריון בנגב תאריך המבחן: 29.01.19 שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות 202.1.9031 מס' הקורס : מיועד לתלמידי : הנדסת תעשיה וניהול שנה תשע"ט א' סמ' א' מועד 3 שעות משך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו
אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', 31.1.2017 מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבוני, דולב שרון הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה
קרא עודמבוא לתכנות ב- JAVA תרגול 7
מבוא לתכנות ב- JAVA תרגול 8 תזכורת - מבנה של פונקציה רקורסיבית.2 פונקציה רקורסיבית מורכבת משני חלקים עיקריים 1. תנאי עצירה: מקרה/מקרים פשוטים בהם התוצאה לא מצריכה קריאה רקורסיבית לחישוב צעד רקורסיבי: קריאה
קרא עודProgramming
קורס תכנות שיעור עשירי: מיונים, חיפושים, קצת ניתוח זמני ריצה, קצת תיקון טעויות ועוד על רשימות 1 רשימה מקושרת רשימה היא אוסף סדור של פעולות רשימה לעומת מערך ערכים 3 5 7 9 typedef struct node { int data;
קרא עודMicrosoft Word - דוגמאות ב
הפקולטה למדעי המחשב פרופ' חיים גוטסמן, מר רן רובינשטיין עומר סטרולוביץ, כרמי גרושקו, אלכסנדר ליבוב, מיכאל בלטקסה, ראידה נעאמנה, שי מרקנטי, גיא שקד הטכניון - מכון טכנולוגי לישראל 3.10.2011 מבוא לתכנות מערכות
קרא עודמבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו
מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן
קרא עודPRESENTATION NAME
נכתב ע"י כרמי גרושקו. כל הזכויות שמורות 2010 הטכניון, מכון טכנולוגי לישראל הקצאה דינמית )malloc( מערכים דו-מימדיים סיבוכיות: ניתוח כזכור, כדי לאחסן מידע עלינו לבקש זכרון ממערכת ההפעלה. 2 עד עכשיו: הגדרנו
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב הממשקים Iterable,Set ו- Iterator תוכן עניינים מבנה נתונים מבנה נתונים מבנה נתונים הוא container של עצמים שמוגדרות עליו מספר פעולות למשל קבוצה של עצמים (אוסף ללא חזרות) עם הפעולות: הוספת
קרא עודSlide 1
מבוא למחשב בשפת C : מערכים חד ודו-ממדיים מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י איתן אביאור.
קרא עודמהוא לתכנות ב- JAVA מעבדה 3
מבוא לתכנות ב- JAVA מעבדה 3 נושאי התרגול לולאות ניפוי שגיאות לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100
קרא עודמבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב
מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180
קרא עודשקופית 1
Computer Programming Summer 2017 תרגול 5 מערכים חד-מימדיים )תזכורת( לדוגמא: מערך בשם Arr בגודל 8 שאיבריו מטיפוס int 3 7 5 6 8 1 23 16 0 1 2 3 4 5 6 7 ב - arr[0] ב יושב ערך שהוא המספר השלם 3 arr[1] - יושב
קרא עודמצגת של PowerPoint
מבוא כללי לתכנות ולמדעי המחשב תרגול מס' 1 דין שמואל dshmuel110@gmail.com 1 1. מנהלות מרצה: אמיר רובינשטיין, amirr@tau.ac.il שעות קבלה: לשאלות קצרות - מייד לאחר השיעור. ניתן לתאם במייל שעות אחרות. מתרגל:
קרא עודMicrosoft PowerPoint - lec10.ppt
תכנו ת מ ונחה ע צמ י ם בשפת ++C אוהד ברזילי אוניברסיטת תל אביב ירו ש ה מרו בה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java 1 מנהלות אתר הקורס: http://courses.cs.tau.ac.il/software1/1516b/ מתרגלים: ברית יונגמן )שעת קבלה: שלישי ב- 8:00 בתיאום מראש( לנה דנקין )שעת קבלה: שלישי ב- 17:00,
קרא עודמקביליות
תכונות שמורה Invariant Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 בדיקות מודל Checking( )Model מערכת דרישות מידול פירמול בדיקות מודל )Model Checking( מודל של המערכת תכונות פורמליות סימולציה
קרא עודיוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן
יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן מתרגלים: הנחיות: השאלות. כל על לענות עליכם משקל. שוות
קרא עודבס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנ
בס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנהל את מאגר הנתונים של החנות, לבצע אליו שינוים ושאילתות
קרא עודמבוא לאסמבלי
1 ברק גונן תוכנית שבנויה מחלקי קוד נפרדים המשולבים זה בזה מאפיינים: נקודת כניסה אחת נקודת יציאה אחת מבצעים פעולה מוגדרת נקראים פרוצדורות ברק גונן 2 קוד קצר יותר לא צריך לחזור על חלקי קוד שאלה למחשבה: האם
קרא עודתרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש המתרגם משימה: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם 2 שאלות האם כבר יש
קרא עודפייתון
שיעור 12: מילונים ברק גונן 1 או מילון, :hash table או,dictionary זוגות של מפתחות keys וערכים values מילון מוגדר על ידי סוגריים מסולסלים { } לדוגמה: מילון שמכיל ציונים, המפתח הוא מספר ת.ז ערך מפתח הגדרה
קרא עודPowerPoint Presentation
מבוא ל-++ C משתנים מיוחסים הקצאת זיכרון דינאמית קלט/פלט ב-++ C מחלקות namespaces const 2 C היא שפת תכנות שנבנתה מעל ++C ++C מוסיפה מגוון רב של תכונות מתקדמות #include using namespace std; בעיקר
קרא עודMicrosoft Word - c_SimA_MoedA2006.doc
מבוא למדעי המחשב בחינת מועד א', סמסטר א' תשס"ו,..006 מרצה: מתרגלת: גב' יעל כהן-סיגל. גב' ליאת לוונטל. משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. יש לענות על כל השאלות.. קראו
קרא עודמשימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק
משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות 2 הפשטה שאלות כצעד ראשון נפתור בעיה הרבה יותר פשוטה האם כבר
קרא עודפתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (
פתרון 000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : num = 3, sif = r האם ספרת האחדות של sif שווה ל- num num 3 sif (1)-() (3) () אמת ) = ( 3 3 יודפס: 3. ב. פתרון שאלה 11 עבור הערכים: עבור סעיף
קרא עודSlide 1
מבוא לתכנות ב- JAVA תרגול 5 מה בתרגול מחרוזות מערכים דו ממדיים מחרוזות (Strings) מחרוזת היא רצף של תווים. immutable על מנת ליצור ולטפל במחרוזות נשתמש במחלקה String למחלקה String מתודות שונות שמאפשרות פעולות
קרא עודתורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב
תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב, מילה ושפה לטובת מי ששכח חומר זה, או שלא למדו מעולם,
קרא עודמבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי
מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדיקות אחרונות לפני מסירה )עמודים 8-11( מבנה השאלון 5
קרא עודMicrosoft PowerPoint - T-10.ppt [Compatibility Mode]
מבוא למחשב בשפת Matlab לולאות בלוקי try-catch :10 תרגול מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור, סאהר אסמיר וטל כהן עבור הקורס "מבוא למדעי המחשב" נכתב על-ידי רמי כהן,אולג רוכלנקו,
קרא עודTutorial 11
מבוא לשפת C תרגול 8: מערכים רב-ממדיים תרגילים בנושא מערכים ורקורסיה מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקנשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב" נכתב ע"י טל כהן, עודכן ע"י
קרא עודSlide 1
מבוא למחשב בשפת C צעדים הרצאה 2: ראשונים בשפת C מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י
קרא עוד2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ
מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מספיק עמדות לכולם ולכן מומלץ לעבוד ביחידים). במהלך המעבדה יהיה עליכם לבצע משימות. אם תצטרכו עזרה בשלב
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 9 חזרה על תכנות מונחה עצמים Part II ראינו בהרצאה ממשקים Set Iterable Iterator בתרגול היום חזרה על: ממשקים Iterator Iterable )iterator נראה: )set ממשק )מימוש SetAsLinkedList
קרא עודPowerPoint Presentation
תוכנה תרגול 7 :מנשקים, פולימורפיזם ועוד * לא בהכרח בסדר הזה == vs equals Point p = new Point(,2) Point p2 = new Point(,2) p == p2 p.equals(p2) מתי נכון להשתמש בכל אחד מהם? שימו לב, במחלקה שכתבתם בעצמכם
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן # חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527
קרא עודSlide 1
Introduction to Programming in C תרגול 8 1 1 רקורסיה תזכורת הגדרה: המונח רקורסיה (recursion) מתאר מצב שבו פונקציה קוראת לעצמה באופן ישיר או באופן עקיף. שימוש: נוח להשתמש בפונקציות רקורסיביות על מנת לפתור
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527 kadman11@gmail.com
קרא עודMicrosoft Word - Ass1Bgu2019b_java docx
ת ר ג י ל 1 ב ק ו ר ס מ ב ו א לתכנות 202.1.9031 JAVA סמסטר ב, ת נ א י ם ו ל ו ל א ו ת תאריך אחרון להגשה בציון מלא : 02.04.19 עד שעה : 23:55, כ ל יום איחור ל א מ א ו ש ר א ו ח ל ק ממנו מודריד 10 נקודות
קרא עודשעור 6
שעור 6 Open addressing אין רשימות מקושרות. (נניח שהאלמנטים מאוחסנים בטבלה עצמה, לחילופין קיים מצביע בהכנסה המתאימה לאלמנט אם אין שרשור). ב- addressing open הטבלה עלולה להימלא ב- factor α load תמיד. במקום
קרא עודמקביליות
תכונות בטיחות Safety Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 תזכורת: תכונות זמן ליניארי Linear Time Properties תכונות זמן-ליניארי מתארות קבוצת עקבות שהמערכת צריכה לייצר מכוונים ללוגיקה
קרא עוד234114
)234117 )234114 \ סמסטר חורף תשע"ז 2017 מבחן מסכם מועד א', 21 לפברואר 2 3 4 1 1 מספר סטודנט: רשום/ה לקורס: משך המבחן: 3 שעות. חומר עזר: אין להשתמש בכל חומר עזר. הנחיות כלליות: מלאו את הפרטים בראש דף זה
קרא עודמתכונת עיצוב 3013
מדעי המחשב פרק ראשון Java שאלה 1 שאלה 1 נכתב ע"י ראמי ג'באלי C# Java 2 א. שאלה ב. הערה: במבחן כתוב שיש שלשה אחת בלבד של פנסים כאלו. ולמרות זאת נשאיר את המשתנה הבוליאני כך שאם נמצאו הפנסים בתחילת המערך
קרא עודúåëðä 1 - çæøä
Arrays and Strings מערך - אוסף משתנים בעלי שם משותף. הפנייה לכל איבר נעשית ע י אינדקס. ב- C מערך מוגדר בזיכרון רציף. האיבר הראשון נמצא בכתובת הנמוכה. לדוגמא, אם a מוגדר החל מכתובת :1000 char a[7]; Element
קרא עודשיעור 1
שיעור קצב גדילת פונקציות אנחנו בודקים את היעילות האסימפטותית של האלגוריתם, כיצד גדל זמן הריצה כאשר גודל הקלט גדל ללא גבול. בדר"כ אלגוריתמים עם "סיבוכיות" ריצה טובה יותר יהיו יעילים יותר מלבד לקלטים קצרים
קרא עודex1-bash
ביה"ס למדעי המחשב סמסטר חורף תשע"ח 13.12.2017 יסודות מערכות פתוחות פתרון תרגיל מס' 7 המכללה האקדמית נתניה שימו לב: כל ההערות שבתחילת תרגילים 1-6 תקפות גם לתרגיל זה. הערה 1: החל מתרגיל זה והלאה, בכל פעם
קרא עודSlide 1
Introduction to Programming in C תרגול 7 1 1 רקורסיה הגדרה: המונח רקורסיה (recursion) מתאר מצב שבו פונקציה קוראת לעצמה באופן ישיר או באופן עקיף. שימוש: נוח להשתמש בפונקציות רקורסיביות על מנת לפתור בעיות
קרא עודPowerPoint Presentation
== vs equals תוכנה תרגול 7 :מנשקים, פולימורפיזם ועוד Point p = new Point(,) Point p = new Point(,) p == p p.equals(p) מתי נכון להשתמש בכל אחד מהם? שימו לב, במחלקה שכתבתם בעצמכם יש לכתוב מתודת equals על
קרא עודדוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמט
דוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמטרים של מערכים היא by reference וכן דוגמאות שמראות שמשתנים
קרא עודעוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ
עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכמה אופנים. בואו ניקח מחלקת צעצוע. אנחנו מעונינים להגדיר
קרא עודMicrosoft Word - pitaron222Java_2007.doc
1 מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א a mul k k a פלט b זוגי? b :1 Ï 3 1 5 1 5 F קלט: 3, 5, 8, 4 20 2 8 40 40 3 4 4 F :2 Ï m x x 0 פלט 70 x 50 0 א. 10 F 1 64 2 2 51 30 F -4 F ב. ג. 1- (כל
קרא עודמקביליות
PROMELA גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון עדכון אחרון: 21:40 15/06/2013 2 שפת מ פ ר ט עם ס מ נ ט יק ה מוגדרת באופן מתמטי "שפת תכנות" למודלים המטרה: לאפשר גם לכאלה שאינם חוקרים בתחום לבנות
קרא עודתרגיל בית מספר 1#
ב 4 תרגיל בית מספר - 1 להגשה עד 72 באוקטובר בשעה ::725 קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס, תחת התיקייה.assignments חריגה מההנחיות תגרור ירידת ציון / פסילת התרגיל. הנחיות והערות ספציפיות
קרא עוד