הטכניון - מכון טכנולוגי לישראל
|
|
- חמזה כספי
- לפני5 שנים
- צפיות:
תמליל
1 הפקולטה למדעי המחשב הטכניון - מכון טכנולוגי לישראל מבוא לתכנות מערכות חומר עזר למבחן תוכן שפת 2... C פונקציות להקצאת זיכרון דינאמי...2 עבודה עם קבצים...2 עבודה עם מחרוזות... 2 פקודות לשלב העיבור המקדים 3...(Preprocessor) מצביעים לפונקציות...3 מבני הנתונים שנלמדו בקורס...4 מנשק עבור ADT של...4 Set מנשק עבור ADT של...5 List מנשק עבור ADT של...6 Stack קבצי 6... Makefile שימוש ב- Bash...7 רשימת פקודות...7 עבודה עם סקריפטים:...01 חישובים אריתמטיים...01 מבני בקרה...01 סוגי תנאים פונקציות קריאת קלט PATH שפת ++C...03 קבועים...03 מרחבי שמות - namespace העמסת פונקציות...04 קלט/פלט )ועבודה עם קבצים( מחלקות...05 העמסת אופרטורים...06 המרות...06 תבניות 07...(templates) חריגות 07...(exceptions) המרות ומידע על טיפוסים בזמן ריצה...01 אלגוריתמים גנריים Function Objects shared_ptr מחלקה עבור מספר רציונלי - Rational...21 מחלקה עבור קבוצה גנרית - Set...20 דוגמה למחלקה אבסטרקטית (Shape) ולירושה...25 מבני נתונים שימושיים של...25 STL המחלקה std::vector המחלקה std::list 1
2 שפת C פונקציות להקצאת זיכרון דינאמי.NULL בתים, במקרה של כשלון מוחזר bytes משמשת להקצאת גוש זיכרון חדש בגודל malloc הפונקציה void* malloc(size_t bytes); // NULL is returned in case of failure. הפונקציה free משמשת לשחרור גוש זיכרון שהוקצה ע"י malloc או פונקצית הקצאת זיכרון אחרת. ניתן לשלוח NULL ל- free. שליחה של כתובת זיכרון שאינה NULL ואינה תחילת הקצאה הינה שגיאה. void free(void* ptr); דוגמה לשימוש: int* my_array = malloc(sizeof(*my_array) * n); //... using my_array... free(my_array); עבודה עם קבצים.NULL משמשת לפתיחת קובץ. במקרה של כשלון מוחזר fopen הפונקציה מצב הפתיחה של קובץ יכול להיות "w" עבור כתיבה, "r" עבור קריאה או "a" עבור שרשור לסוף קובץ קיים. FILE* fopen (const char* filename, const char* mode); הפונקציה fclose משמשת לסגירת קובץ קיים. אסור לשלוח לה.NULL int fclose (FILE* stream); הפונקציות fprintf ו- fscanf עובדות בדומה ל- printf ו- scanf אך מקבלות בנוסף ערוץ קלט/פלט כארגומנט: תגי בקרה שימושיים: char string (char*) pointer int fprintf (FILE* stream, const char* format,...); int fscanf (FILE* stream, const char* format,...); %d %f %lf int float double %c %s %p הפונקציות fgets ו- fputs משמשות לכתיבת או קריאת מחרוזת. במקרה של הצלחה fgets מחזירה את,buffer ו- NULL אחרת. fgets מחזירה את מספר התווים שניתן לה או עד סוף השורה,מה שבא קודם. char* fgets (char* buffer, int size, FILE* stream); int fputs (const char* str, FILE* stream); הפונקציה feof מחזירה ערך שונה מ- 1 אם התו EOF )סוף קובץ( נקרא מהערוץ שהתקבל. אם עוד לא נקרא סוף הקובץ, מוחזר 1. int feof (FILE* stream); עבודה עם מחרוזות הפונקציה strcpy מעתיקה מחרוזת. על destination להכיל מספיק מקום בזיכרון עבור הכתיבה. הפונקציה מחזירה את.destination char* strcpy (char* destination, const char* source); הפונקציה strcat משמשת לשרשור מחרוזות, על destination להכיל מספיק זיכרון פנוי בסופה כדי להכיל את שרשור המחרוזות. הפונקציה מחזירה את.destination char* strcat (char* destination, const char* source); הפונקציה strcmp משווה בין שתי מחרוזות ומחזירה 1 אם הן שוות, מספר גדול מ- 1 אם str1 גדולה יותר לפי סדר לקסיקוגרפי, ומספר קטן מ- 1 עם str2 גדולה יותר. לדוגמה: הקריאה strcmp("aba","cdc") תחזיר מספר קטן מ- 1. הפונקציה strlen מחזירה את מספר התווים המחרוזת, לא כולל התו '0\'. int strcmp (const char * str1, const char* str2); size_t strlen (const char* str); 2
3 פקודות לשלב העיבור המקדים (Preprocessor) הפקודה define מגדירה מאקרו חדש. לאחר הגדרתו ה- preprocessor יחליף כל הופעה של.<value> אם המאקרו מוגדרם עם משתנים, המשתנים יוחלפו בערכם בכל פעם. <macro> ב- #define <macro> <value> דוגמה להגדרת מאקרו עבור חישוב המקסימום: #define MAX(a,b) ((a) > (b)? (a) : (b)) הפקודה include גורמת ל- preprocessor להכניס את תוכן הקובץ המבוקש ליחידת הקומפילציה. אם שם הקובץ מופיע בתוך < > אז הוא נלקח מספריה הידועה לקומפיילר. אם שם הקובץ מופיע בתוך " " אז הוא נלקח מהספריה הנוכחית. #include <filename> ניתן להגדיר תנאים עבור ה- preprocessor. אם התנאי אינו מתקיים, הקוד שהוא תוחם לא יוכנס ליחידת הקומפילציה: #endif מתקיים רק אם מוגדר מאקרו בעל שם מתאים. הוא נמשך עד לפקודת ifdef התנאי o #ifdef <macro> //... #endif o התנאי ifndef מתקיים רק אם לא מוגדר מאקרו בעל שם מתאים: #ifndef <macro> //... #endif o בכל אחד מהתנאים, ניתן גם להשתמש בפקודת else כדי לציין קוד שיש לצרף במקרה שהתנאי נכשל. #include <stdio.h> #include "set.h" דוגמאות לשימוש ב- preprocessor : #ifdef NDEBUG #define CHUNK_SIZE 1024 #else #define CHUNK_SIZE 256 #endif מצביעים לפונקציות.bool ומחזירה ערך מטיפוס int להלן דוגמה להגדרת מצביע לפונקציה המקבלת שני ארגומנטים מטיפוס בדוגמה זו שם המצביע הינו ptr וערכו מאותחל ל- NULL : bool (*ptr)(int, int) = NULL; מצביע לפונקציה יכול להצביע רק לפונקציות בעלות אותה חתימה כמו שהוגדרה עבור המצביע. ניתן להציב למצביע כתובת של פונקציה על ידי שימוש בשמה ללא אופרטור ההפעלה )(: bool isbigger(int a, int b); bool (*ptr)(int, int) = isbigger; ניתן להפעיל מצביע לפונקציה על ידי שימוש באופרטור ההפעלה )( עם ארגומנטים מתאימים: bool res = ptr(5,4); ניתן להשתמש ב- typedef על מנת להגדיר שם נוח יותר לטיפוס של המצביע לפונקציה, למשל: typedef bool (*BiggerFunction)(int, int); בשם החדש ניתן להשתמש כשם טיפוס רגיל לכל דבר: BiggerFunction function = isbigger; דוגמה לחתימה של פונקציה גנרית למיון מערך של עצמים לא ידועים :)void*( void sort(void** array, int size, int (*compare)(void*, void*)); 3
4 מבני הנתונים שנלמדו בקורס קבוצה - :Set שומרת אוסף של איברים ללא כפילויות וללא חשיבות לסדר ביניהם. רשימה - :List שומרת אוסף איברים וייתכן שאיבר יופיע יותר מפעם אחת. לכל איבר מוגדר האינדקס שלו ברשימה. מחסנית - :Stack מאפשרת פעולת push להוספת איבר, פעולת pop להוצאת האיבר האחרון שהתווסף ופעולת top לקבלת האיבר האחרון שהתווסף. גרף - :Graph מורכב משתי קבוצות. קבוצת צמתים וקבוצת קשתות. כל קשת מוגדרת להיות זוג של צמתים הנמצאים בגרף. מילון - :Map מכיל זוגות של מפתח (Key) וערך.(Value) המפתחות הינם ייחודים וללא חשיבות לסדר )כמו בקבוצה(. לכל מפתח מוצמד ערך. ייתכן וערך יופיע מספר פעמים עבור מספר מפתחות. #ifndef SET_H_ #define SET_H_ #include <stdbool.h> מנשק עבור ADT של Set typedef struct set* Set; typedef enum { SET_SUCCESS, SET_OUT_OF_MEMORY, SET_FAIL SetResult; typedef void* SetElement; typedef SetElement (*SetCopyFunction)(SetElement); typedef void (*SetFreeFunction)(SetElement); /** * Function for comparing elements in the set to determine if they are equal. * The call x=setcomparefunction(a,b) should return x>0 for a>b, x<0 for a<b, * or x==0 for a==b. */ typedef int (*SetCompareFunction)(SetElement a, SetElement b); typedef void* SetFilterKey; /** * Function for checking condition on an element. Should return true if * condition holds, false otherwise. */ typedef bool (*SetConditionFuncion)(SetElement a, SetFilterKey key); /** * Function that converts an element to a string representation and writes it to * buffer up to size characters. The function returns the full size of the * string representation (may be larger than size). */ typedef int (*SetToStringFunction)(SetElement, char buffer[], int size); Set setcreate(setcopyfunction copy, SetFreeFunction destroy, SetCompareFunction compare); Set setcopy(set set); void setdestroy(set set); SetResult setadd(set set, SetElement element); SetResult setremove(set set, SetElement element); bool setcontains(set set, SetElement element); bool setissubsetof(set set1, Set set2); int setgetsize(set set); Set setunion(set set1, Set set2); Set setintersection(set set1, Set set2); Set setfilter(set set, SetConditionFuncion condition, SetFilterKey key); bool setisempty(set set); bool setequals(set set1, Set set2); 4
5 int settostring(set set, SetToStringFunction tostring, char buffer[], int size); SetElement setgetfirst(set set); // returns NULL if the set is empty SetElement setgetnext(set set); // returns NULL if there are no more elements SetElement setgetcurrent(set set); /** Macro to enable simple iteration */ #define SET_FOREACH(Type, element, set) for(type element = setgetfirst(set); \ element!= NULL; \ element = setgetnext(set)) #endif #ifndef LIST_H_ #define LIST_H_ #include <stdbool.h> מנשק עבור ADT של List typedef struct list* List; typedef enum { LIST_SUCCESS, LIST_NULL_ARGUMENT, LIST_OUT_OF_MEMORY, LIST_INVALID_CURRENT, ListResult; typedef void* ListElement; typedef ListElement (*CopyListElement)(ListElement); typedef void (*FreeListElement)(ListElement); /** For an explanation see SetCompareFunction in the previous page */ typedef int (*CompareListElements)(ListElement, ListElement); typedef void* ListFilterKey; /** * Function for checking condition on an element. Should return true if * condition holds, false otherwise. */ typedef bool (*FilterListElement)(ListElement, ListFilterKey); List listcreate(copylistelement copyelement, FreeListElement freeelement); List listcopy(list list); int listgetsize(list list); ListElement listgetfirst(list list); // returns NULL if list is empty ListElement listgetnext(list list); // returns NULL if no more elements ListElement listgetcurrent(list list); ListResult listinsertfirst(list list, ListElement element); ListResult listinsertlast(list list, ListElement element); ListResult listinsertbeforecurrent(list list, ListElement element); ListResult listinsertaftercurrent(list list, ListElement element); ListResult listremovecurrent(list list); ListResult listsort(list list, CompareListElements compareelement); List listfilter(list list, FilterListElement filterelement, ListFilterKey key); ListResult listclear(list list); void listdestroy(list list); /** Macro to enable simple iteration */ #define LIST_FOREACH(Type, elem, list) for(type elem = listgetfirst(list); \ elem!= NULL; \ elem = listgetnext(list)) #endif /* LIST_H_ */ 5
6 #ifndef STACK_H_ #define STACK_H_ typedef struct stack* Stack; typedef enum { STACK_SUCCESS, STACK_IS_EMPTY StackResult; typedef void* StackElement; typedef StackElement (*CopyStackElement)(StackElement); typedef void (*FreeStackElement)(StackElement); מנשק עבור ADT של Stack Stack stackcreate(copystackelement copyelement, FreeStackElement freeelement); Stack stackcopy(stack stack); int stackgetsize(stack stack); StackResult stackpush(stack stack, StackElement element); StackResult stackpop(stack stack); StackResult stacktop(stack stack, StackElement* element); void stackdestroy(stack stack); #endif /* STACK_H_ */ קבצי Makefile קבצי Makefile משמשים להגדרת תהליך הבנייה של תוכנה ומאפשרים )על ידי שימוש בפקודה )make לבנות רק את החלקים שהשתנו לאחר ביצוע שינוי בקוד. דוגמה ל- Makefile : CC = gcc OBJS = a.o b.o c.o EXEC = prog DEBUG_FLAG = # now empty, assign -g for debug COMP_FLAG = -std=c99 -Wall -Werror $(EXEC) : $(OBJS) $(CC) $(DEBUG_FLAG) $(OBJS) -o $@ a.o : a.c a.h b.h $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c b.o : b.c b.h $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c c.o : c.c c.h b.h $(CC) -c $(DEBUG_FLAG) $(COMP_FLAG) $*.c clean: rm -f $(OBJS) $(EXEC) קובץ ה- Makefile מכיל כללים. כלל מתחיל בשורה מהצורה <dependencies>.<file>: כלל מתאר כיצד יש לבנות גרסה חדשה של.<file> ומגדיר את התלויות של <file> על מנת שנדע מתי יש לבנות גרסה חדשה. השורות הבאות אחרי השורה הראשונה מתחילות בטאב, ומגדירות את רשימת הפקודות לביצוע )בדומה ל- script פשוט( קובץ o תלוי בקובץ ה- c ממנו הוא מהודר ובקבצי ה- h אותם קובץ ה- c כולל בעזרת.include בנוסף, ניתן להגדיר מאקרוים ע"י שורה מהצורה <value>.<macro> = כדי לבצע החלפה של מאקרו בערכו יש לקרוא למאקרו בעזרת.$(<macro>) ניתן להשיג את שורות התלויות עבור תכנית C בעזרת הפקודה <files>.gcc -MM למשל, אם הקובץ a.c מבצע include ל- a.h ו- b.h, אז הפקודה gcc -MM a.c תגרום להדפסת: a.o: a.c a.h b.h 6
7 שימוש ב- Bash רשימת פקודות תחביר - Syntax פקודה משמעות ודגלים הדפסת שמות )ופרטי( הקבצים בתיקייה הנוכחית או בתיקייה שהתקבלה בארגומנט - l- ידפיס פרטים נוספים על הקובץ - a- ידפיס את הקבצים בתיקייה המצוינת כולל קבצים המתחילים ב "." הדפסת תוכן קבצים למסך. ls [-l] [-a] [dir] cat <files> more <files> ls cat more הדפסת תוכן קבצים למסך בצורה מאורגנת )המדפיסה מסך שלם ומחכה לקלט ממשתמש לפני הדפסה של מסך נוסף(. הדפסה ועיבוד תוכן קובץ בממשק טקסטואלי. less <file> mv filename1 filename2 mv <files> dirname less mv הזזה או שינוי שם קובץ. ניתן להזיז כמה קבצים לתוך תיקייה. העתקת קובץ. cp filename1 filename2 rm [-r] <files> cp rm מחיקת קבצים או תיקיות. - עם הדגל r ימחקו כל הקבצים והתיקיות רקורסיבית. הדפסת הבדלים בין קבצים diff filename1 filename2 chmod <options> <files> diff chmod שינוי הרשאות קבצים/תיקיות others יתן הרשאות קריאה לקבוצה o+r - others יבטל הרשאות קריאה לקבוצה o-r - יצירת תיקייה חדשה בתיקייה הנוכחית mkdir <dirname> cd <dirname> mkdir cd שינוי התיקייה הנוכחית הדפסת התיקייה הנוכחית pwd make [target] pwd make הרצת התוכנה make המחפשת קובץ makefile ומנסה לבנות בו את ה target הראשון. - ניתן לציין target alias <name>="<command>" unalias <alias> head [-n#] [files] tail [-/+#] [files] head -3 a_file tail -2 sort [options] [files] >sort data Father World for who echo [-n] [words] data: World who for Fathe הגדרת קיצורים ב- Shell ביטול alias להדפסת שורות ראשונות מהקלט. - אם לא מוגדר מספר יודפסו 01 שורות - אם המספר שהוגדר שלילי יודפסו כל השורות מלבד # השורות האחרונות - עבור מספר חיובי ניתן לרשום גם #- להדפסת השורות האחרונות מהקלט - עבור #- מדפיסה את # השורות האחרונות בקלט - עבור #+ מדפיסה החל מהשורה ה-# - ברירת המחדל היא הדפסת 01 השורות האחרונות דוגמא לשימוש ב- pipeline עבור הדפסת את שורות 2-3 מקובץ מסוים מדפיסה את הקלט ממוין )לפי שורות( n-: ממיינת מספרים לפי ערכם - r-: מדפיס בסדר יורד )ברירת המחדל היא סדר עולה( - #k-: מתייחס לכל שורה החל מהמילה ה-# - המילים ממסופרות החל מ- 0 - uppercase/lowercase מתעלם מהבדלי :-f - b-: מתעלם מרווחים בתחילת השורה - s-: מיון יציב - שומר על הסדר המקורי בין שורות שערכן שווה - n-: מדפיס ללא ירידת שורה alias unalias head tail sort echo 7
8 uniq [options] [input [output]] >uniq file one two three one file: grep [options] <expression> [files] >grep -i cow farm1 cow Betsy slim cow Dazy Fat Cow Burger two cows Dartsy & Teo cut <options> [files] > cut -d":" f1 file2 a11 b21 c31 c32 c33 file2: > cut -c1-3,5,8-10 file1 a11a a1 b21b b2 file1: c31c c3 a11 a12 a13 a14 a15 b21 b22 b23 b24 b25 c31 c32 c33 c34 c35 wc [options] [files] >wc mtm_ex1.h example.c mtm_ex2.h example.c total tee [options] [files] one two two three three three one one a11:a12:a13 b21:a15 c31 c32 c33 printf <format> [arguments] >printf "%s %s!\n" Hello world Hello world! מדפיסה עותק יחיד של שורות זהות סמוכות c-: מדפיס כל שורה פעם אחת ואת מספר העותקים שלה - d-: מדפיס רק שורות המופיעות יותר מפעם אחת - u-: מדפיס רק שורות המופיעות פעם אחת בלבד - ניתן להשתמש רק באחת האפשרויות מבין -c/-d/-u בבת אחת - #-: התעלם מ-# המילים הראשונות בקבלת ההחלטה האם שורות - זהות( ניתן לחפש מילים מסוימות או ביטויים מורכבים מדפיסה את כל השורות בקובץ המכילות את הביטוי שהוגדר v-: מדפיסה את השורות בהן לא מופיע הביטוי - uppercase/lowercase מתעלם מהבדלי :-i - w-: מדפיסה את כל השורות בהן <expression> מופיע בדיוק )לא - כתת מחרוזת( n-: הדפס את השורות ואת מספרן בקבצים - l-: הדפס רק את שמות הקבצים בהן נמצאו שורות מתאימות - c-: הדפס רק את כמות השורות שנמצאו בכל קובץ ללא הדפסת - השורות עצמן הביטוי לחיפוש יכול להיות מורכב יותר ממילה פשוטה: - כדי לחפש מחרוזת עם רווחים יש להוסיף גרשיים - התו ^ מייצג תחילת שורה והתו $ את סוף השורה - משמשת להפרדת עמודות מתוך הקלט :-c<list> הדפסת התווים בשורה המתאימים לאינדקסים - הדפסת השדות בשורה המתאימים לאינדקסים :-f<list> - השדות בשורה מופרדים כברירת מחדל ע"י Tab - אם התו המפריד אינו קיים בשורה תודפס כל השורה - f-( השתמש בתו שהוגדר כתו המפריד )עבור שימוש בדגל "?"d-: - רשימת האינדקסים מורכבת ממספר אינדקסים מופרדים בפסיק, - כאשר בנוסף ניתן לבקש טווח אינדקסים ע"י שימוש בתו - )מקף( -c1,2,5-6,10- ידפיס את התווים,,6,5,2,0 ו- 01 ומעלה - אם האינדקסים המבוקשים מחוץ לתחום תודפס שורה ריקה - משמשת לספירת תווים, מילים או שורת בקלט c-: מדפיסה את מספר התווים בלבד l-: מדפיסה את מספר השורות בלבד w-: מדפיסה את מספר המילים בלבד אם לא צוין דגל מסוים wc מדפיסה את כל שלושת המספרים אם הפקודה מופעלת על מספר קבצים מודפסת גם שורת סיכום משמשת לשכפול הפלט. משכפלת את הקלט הסטנדרטי ומדפיסה אותו לפלט הסטנדרטי ולכל אחד מהקבצים ברשימה [files] a-: משרשרת לקבצים במקום לכתוב אותם מחדש מבנה הפקודה אינו סטנדרטי, היא מקבלת קלט רק מהקלט הסטנדרטי מאפשרת הדפסה מעוצבת של טקסט s%: מציין במחרוזת הפורמט שיש להכניס כאן את ערך הארגומנט הבא :%[-]m[.n]s מדפיסה את המחרוזת המתאימה מרשימת המחרוזות כך שהתוצאה תהיה באורך m תווים ותכיל לכל היותר n תווים מהמחרוזת. המחרוזת תהיה מיושרת לימין אלא אם מופיע - )מקף(. אם יש יותר ארגומנטים מהדרוש ברשימה, הפונקציה תדפיס את השורה מחדש ותשתמש בארגומנטים הבאים בכל פעם עד שייגמרו. uniq grep cut wc tee printf 8
9 תבניות: * מתאים למחרוזת כלשהי )כולל ריקה(.? מתאים לתו כלשהו יחיד. [ ] התייחסות למספר תווים אפשריים. התווים יכולים להינתן: כטווח של תווים, למשל a-z או אחד אחרי השני במפורש. { התייחסות למספר מחרוזות שונות. אפשרות זו אינה מתחשבת בקבצים קיימים: משתנים: ל$ קריאת ערך ממשתנה. { לסימון שם המשתנה לאופרטור $ unset <varname> לביטול משתנה. = 9 ${<varname> מערך - שימוש בסוגריים - קריאת האיבר הראשון )אינדקס 1( מהרשימה(. arr=(1 2 3) קריאת שם המשתנה של המערך. )שקולה לקריאת > echo $arr 1 קריאת כל המערך echo ${arr[*]{ ${<varname>[*] - גישה לאיבר והוספת איבר חדש - אופרטור [ ] arr[3] = 4 מספר האיברים במערך >${#arr[*] 4 ${#<varname>[*] - גישה לתחומים של איברים במערך - ${${<varname>[*]:<num1>:<num2> -num1 אינדקס ההתחלה של התחום -Num2 מספר האיברים בתחום )אם הוא אינו מופיע יודפסו כל האיברים החל מהאינדקס המבוקש( > echo A:${arr[*]:0:2 מספר התווים במשתנה שימוש ב-# A:1 2 > echo ${#str סוגי גרשיים: גרשיים כפולים " " תפקיד: משמשים לשמירה על רווחים. משתמשים ב-" " כאשר יש צורך לשמור מחרוזות שלמות במדויק. בתוך גרשיים אלו לא מתבצעות החלפות של תבניות בשמות הקבצים המתאימים. דוגמא: > echo "*.c" : *.c *.c : main.c app.c hello.c גרשיים בודדים ' ' תפקיד: מונעים ההחלפות בתחומם. דוגמא: > echo lets make some '$$' lets make some $$ גרשיים הפוכים תפקיד: מבצעים command substitution ניתן "לשרשר" פקודות. דוגמא: < echo a3b.{c,txt a3b.c a3b.txt > a=hell > echo ${ao Hello > echo The length of $str is `echo -n $str wc -c` The length of Hello is 5
10 עבודה עם סקריפטים: 1. הגישה לפרמטרים המועברים בשורת הפקודה לתסריט משמעות סימן קריאת הפרמטר ה- n לתסריט n$ רשימת כל הארגומנטים לתסריט *$ שמירה על מספר הארגומנטים הנכון, במידה וייתכנו רווחים בתוך שם התסריט $0 מספר הארגומנטים #$ #!/bin/bash 2. הרצת תסריט: בתחילת התסריט יש להוסיף את השורה : 3. סוגי העברת פרמטרים לתסריטי עזר סוג העברה שורת הפקודה Pipeline קובץ זמני דוגמא helper_script $arg1 $arg2 echo $arg1 $arg2 helper_script echo $arg1 $arg2 > temp helper_script < temp 4. סוגי החזרת ערכים סוג החזרה backticks Pipeline קובץ זמני דוגמא result = `helper_script` helper_script another_script helper_script > temp חישובים אריתמטיים $((<expression>)) ניתן להחליף ביטוי אריתמטי בערכו על ידי הערך המספרי של המחרוזות ישמש בחישוב הביטוי o משתנים יוחלפו בערכם )גם ללא $( o אם אחד הארגומנטים אינו מספר, ערכו יהיה 0 בחישוב o משתנה שאינו מוגדר, או ערכו אינו מספר יחושב כ- 0 o פעולות חשבוניות פשוטות:,+,- * ו-/, השמות:,= הגדלות והקטנות:,+=,-= o let ++n לדוגמא:,let ניתן גם להשתמש בפקודה o -- ו-++ while <expression>; do <command1> <command2>... done מבני בקרה לולאת while לולאת for מעבר על איברי מערך <varname> o הוא שם המשתנה שיכיל בכל פעם איבר מהרשימה <array> o היא רשימה של מחרוזות 11
11 for <varname> in <array> ; do <commands> done for ((i = 1; i <= 3; i++)); do <commands> done או לחלופין: if <expression>; then <command1> <command2>... fi if <expression>; then <commands> else <commands> fi תנאי if תנאי if עם else בכל התנאים ניתן להשתמש באופרטורים &&, שמשמעותם דומה ל- C. סוגי תנאים [[ ]] תנאי מהצורה.4 בתוך ]] [[ האופרטורים ==, > ו-> משווים מחרוזות )לפי סדר לקסיקוגרפי( -le,-gt ניתן לבצע השוואת על ערכי מספרים בעזרת דגלים כגון,-eq בודק האם קיים קובץ בשם <filename> התנאי <filename> f- התנאי <dirname> d- בודק האם קיימת תיקייה בשם <dirname> האופרטור = מאפשר התאמת מחרוזת לתבנית הארגומנט השמאלי הוא מחרוזת רגילה הארגומנט הימני הוא תבנית אשר יכולה לכלול את הסימנים *,? ו-] ] האופרטור =! הוא השלילה של אופרטור ההתאמה = המשמעות של = ו-== שונה > end_with_z="some string with z" > if [[ "$end_with_z" = *[zz] ]]; then echo match; fi match > if [[ "this string start with t" = t* ]]; then echo true; fi true > if [[ "this string doesn't start with t" = [^t]* ]]; then echo true; fi > file=test4.in > if [[ $file = test*.in ]]; then echo test file; fi test file > if [[ "string doesn't start with t"!= t* ]]; then echo true; fi true (( )) תנאי מהצורה.2 בתוך (( )) האופרטורים,==,!= > ו- < מתייחסים לערכים מספריים אין צורך לרשום $ לפני שם משתנה ניתן לבצע פעולות חשבוניות תנאים המוגדרים בעזרת )) (( מתנהגים כמו ביצוע פעולות חשבוניות בעזרת )) (($ דוגמא: )דוגמה בעמוד הבא( 11
12 > if (( 11 < 7 )); then echo true; fi > i=5 > if (( i >= 0 && i <= 10 )); then echo true; fi true > if [[ 11 -eq 11 ]]; then echo true; fi true > if (( 0 == Hello )); then echo true; fi true > if (( ++i == 6 )); then echo true; fi true > if (( ++i == 6 )); then echo true; fi function <name> { <commands> > read line Hello world > echo $line Hello world > read -a line Hello world > echo $line Hello > echo ${line[*] Hello world while read line; do echo $line done < "$1" דוגמא: פונקציות השימוש בפונקציה יכול להתבצע רק אחרי הגדרתה. אפשר להעביר לפונקציה ארגומנטים משתמשת בהם בדומה לשימוש בארגומנטים המועברים לתסריט לא יכולה לגשת לארגומנטים של התסריט שקרא לה. משתנה מקומי בפונקציה בעזרת המילה :local "החזרת" ערכים מפונקציה בעזרת )backticks( command substitution קריאת קלט קריאת שורה מהקלט הסטנדרטי: name> read <flags> <variable השורה תיקלט לתוך שם המשתנה שהוגדר. הדגל a- יחלק את השורה לפי מילים לתוך מערך. o הביטוי read יוחלף על ידי bash בשורת קלט שתיקלט מהקלט הסטנדרטי דוגמא: read line < filename קריאת קובץ ע"י הפניית קלט קריאה מקובץ שורה אחר שורה: ושימוש ב- read : בהרצת פקודה, הshell יחפש את הקובץ המתאים לפקודה בתיקיות במשתנה ה.PATH על מנת לאפשר ל- Shell להריץ תכניות מהתיקייה הנוכחית ללא שימוש ב-. יש להוסיף את התיקייה הנוכחית ל- PATH. ע"י הפקודה: PATH=$PATH:. - התיקיות מופרדות ע"י סימן ":". הפקודה which איזו תכנית תופעל עבור שם פקודה מסוים PATH 12
13 שפת ++C קבועים המילה const מגדירה משתנים כקבועים ומאפשרת לקומפיילר לוודא שערכם אינו משתנה. משנה קבוע חייב להיות מאותחל לערך )לא ניתן לבצע לו השמה בהמשך(. const int n = 5; n = 7; // error: assignment of read-only variable `n' const int m; // error: uninitialized const `m' כאשר מוסיפים const להגדרת מצביע ייתכנו מספר אפשרויות: הערך של *ptr נותר קבוע const int* ptr; int* const ptr = NULL; הכתובת ש- ptr מצביע עליה קבועה // Must be initialized שילוב שתי האפשרויות const int* const ptr = NULL; ניתן להכריז על פרמטרים וערכי חזרה של פונקציה כ- const : o הפונקציה מתחייבת שלא לשנות את הערך שהארגומנט מצביע עליו: char* strcpy(char* destination, const char* source); o ניתן להחזיר מצביע למשתנה פרטי ללא חשש לגרימת נזק מצד המשתמש: const char* studentgetname(student s); עבור מתודה )שאינה סטטית(, const בסוף החתימה של הפונקציה מתייחס לעצם עליו מופעלת המתודה להפעיל רק מתודות שהוגדרו כ- const. ניתן ומתחייב שלא לשנותו. על עצם המוגדר כ- const (this) מרחבי שמות - namespace :namespace ניתן לאגד מספר פונקציות וטיפוסים בצורה לוגית תחת namespace math { double power(double base, double exp); double sqrt(double number); double log(double number); לכל שם )טיפוס, משתנה, פונקציה( המוגדר ב- namespace יש שם מלא מהצורה <namespace>::<item> ניתן להשתמש בהוראת using על מנת לאפשר גישה לשם מסויים ב- namespace באמצעות שמו ה"פרטי" בלבד. הוראת ה- using תקפה לכל הבלוק הנוכחי או לכל המשך הקובץ אם היא מופיעה מחוץ לכל בלוק בדומה לשם משתנה לו היה מוגדר באותו המקום. using math::power; ניתן לבצע using לכל תוכן ה- namespace בבת אחת: using namespace math; 13
14 .0 העמסת פונקציות ב-++ C פונקציה מזוהה על פי שמה ועל פי מספר וסוג הפרמטרים שלה. הקומפיילר יבחר את הפונקציה המתאימה על פי טיפוס הארגומנטים בקריאה לה מבין כל הפונקציות המתאימות הקומפיילר מחפש את הפונקציה שהפרמטרים שלה הם המתאימים ביותר, לפי הדירוג הבא: התאמה מדויקת או המרות טריוויאליות )T,const T מערך למצביע(.2.3 התאמה בעזרת פונקצית template התאמה באמצעות קידום טיפוסים char(,double וכו'( float,char bool,int.4 התאמה באמצעות המרות מובנות )*T )...,int double,void*.5 התאמה באמצעות המרות שהוגדרו על ידי המשתמש - למשל printf התאמה לפונקציה עם מספר ארגומנטים משתנה ellipsis(...( 6. עבור פונקציה עם יותר מפרמטר אחד, הקומפיילר מחפש פונקציה שיש לה את ההתאמה הטובה ביותר עבור פרמטר אחד כלשהו, והתאמה שווה או טובה לכל שאר הפרמטרים אם קיימות שתי התאמות בעדיפות הגבוהה ביותר של התאמה אזי הקריאה דו-משמעית והיא לא תתקמפל בחירת הפונקציה אינה תלויה בערך ההחזרה. לא ניתן לכתוב שתי פונקציות השונות רק בערך ההחזרה שלהן ניתן להגדיר ערך ברירת מחדל לפרמטרים עבור פונקציה: void print(int n, int base = 10); ההגדרה הקודמת שקולה לכתיבת שתי פונקציות מועמסות: void print(int n, int base); void print(int n) { print(n, 10); ניתן לתת ערך ברירת מחדל רק לפרמטרים האחרונים של הפונקציה את ערך ברירת המחדל יש לכתוב פעם אחת בלבד בהכרזת הפונקציה קלט/פלט )ועבודה עם קבצים( cout עבור פלט הבאים: ערוצי הקלט ופלט הסטנדרטיים מיוצגים ב-++ C על ידי המשתנים הגלובליים סטנדרטי, cin עבור קלט סטנדרטי ו- cerr עבור פלט שגיאות סטנדרטי. ניתן להדפיס משתנה כלשהו לערוץ על ידי אופרטור <<. ניתן להעמיס על אופרטור זה עבור טיפוסים חדשים. ניתן לקלוט משתנה על ידי אופרטור >>. גם במקרה זה ניתן להעמיס על האופרטור עבור טיפוסים חדשים..endl על ידי הדפסת )flush ניתן להדפיס ירידת שורה )ולבצע ניתן לשרשר מספר הדפסות/קריאות בבת אחת..istream היורשת את ifstream פתיחת קובץ לקריאה נעשית בעזרת המחלקה.ostream היורשת את ofstream פתיחת קובץ לכתיבה נעשית באמצעות המחלקה ifstream file_in("a.txt"); ofstream file_out("b.txt"); int input; while (file_in >> input) { file_out << input << endl; ניתן להדפיס לתוך מחרוזת בעזרת שימוש במחלקה ostringstream היורשת את.ostream ostringstream str_out; int num1 = 7; double num2 = 2.81; str_out << num1 << num2; string str = str_out.str(); const char* c_str = str.c_str(); 14
15 מחלקות ניתן להגביל את הגישה לחלקים מהמחלקה על ידי קביעת הגישה האפשרית לכל חלק. את המילה המציינת את רמת הגישה האפשרית רושמים ולאחריה נקדתיים, והיא משפיעה על כל ההכרזות במחלקה עד למילה המציינת הגישה הבאה. public שמות שנגישים תמיד private שמות שנגישים רק מקוד אשר נכתב כחלק מהמחלקה או מקוד אשר סומן כ- friend שמות שמתנהגים בדומה ל- private, אך מאפשרים בנוסף גישה מקוד אשר נכתב כחלק ממחלקה protected יורשת )ישירות או בעקיפין(.private הינה ברירת המחדל לרמת הגישה ב- class o.public הינה ברירת המחדל לרמת הגישה ב- struct o ניתן להגדיר שדה כסטטי על ידי שימוש במילה.static שדה סטטי הוא שדה אשר יש לו עותק יחיד משותף לכל העצמים במחלקה. השדה קיים ונגיש גם אם לא קיים אף עצם המהמחלקה. התהנהגותו דומה לשל משתנה גלובלי. ניתן להגדיר מתודה כסטטית על ישי שימוש במילה.static מתודה סטטית היא מתודה אשר אינה מופעלת על עצם, אלא מורצת כמו פונקציה רגילה. אין לה גישה ל- this. משתנים ומתודות סטטיים מצייתים לחוקי בקרת הגישה. למשל, לא ניתן לגשת למשתנה סטטי שהוגדר כ- private מחוץ למחלקה. ניתן להכריז על פונקציה כלשהי )שאינה חלק מה- class ( כחברה של ה- class בעזרת המילה.friend פונקציה אשר הוגדרה כ- friend של מחלקה X יכולה לגשת לשדות ומתודות פרטיים של X. דוגמאות: class A { friend int f(const A&); friend void B::f(A&); template <class T> friend int f(); ; template <class T> class B { friend int g(); friend int g(b<t>&); ; // function int f(const A&) is friend // function void B::f(A&) is friend // all functions int f<t>() are friends // int g() is friend of all classes B<T> // int g(b<t>&) is friend of B<T> ניתן להכריז על מחלקה Y כלשהי כחברה של מחלקה X בעזרת המילה.friend במקרה זה כל הפונקציות של Y יוכלו לגשת לחלקים פרטיים )ומוגנים( של X. דוגמאות: class C { friend class A; // class A is friend template <class T> friend class B; // all classes B<T> are friends ; template <class T> class D { friend class A; friend class B<T>; ; // class A is friend of all classes D<T> // class B<T> is friend of D<T> הקומפיילר מייצר בעצמו את הפונקציות הבאות, תחת התנאים הבאים: פעולת הפונקציה תנאי ליצירה פונקציה קורא לבנאים חסרי הפרמטרים של כל השדות במידה ולא נכתב אף בנאי במפורש default c tor ושל מחלקת האב )בנאי חסר פרמטרים( מאתחל את כל השדות ואת מחלקת האב בעזרת copy c tor בנאי ההעתקה שלהם במידה ולא נכתב copy c tor מפורש )בנאי העתקה( ההורס לא מבצע כלום )קריאה להורסים של כל השדות ומחלקת האב מתבצעת תמיד, לכל הורס( d'tor )הורס( במידה ולא נכתב d tor מפורש מבצע השמה של כל שדה ושדה באמצעות operator= אופרטור ההשמה שלו במידה ולא נכתב operator= מפורש )אופרטור השמה( מחזיר את כתובת העצם operator& במידה ולא נכתב operator& מפורש )אופרטור כתובת( 15
16 העמסת אופרטורים ניתן להתייחס לאופרטורים ב-++ C כמו פונקציה רגילה. שקולה ל-( operator+(a,b a+b מהצורה + מבחינת הקומפיילר קריאה לאופרטור בינארי o.a.operator+(b).a.operator-() או שקולה ל-( operator-(a a- בצורה דומה, קריאה לאופרטור אונארי כגון o ניתן להעמיס על אופרטורים ב-++ C בדומה לפונקציות תחת המגבלות הבאות:.enum אחר הפרמטרים חייב להיות מטיפוס מחלקה או o ההעמסה מתבצעת על אופרטור קיים ושומרת על מספר הפרמטרים שלו והקדימות שלו. o או אופרטורים מיוחדים: את האופרטורים הבאים חייבים לממש בתוך המחלקה: operator() operator-> operator[] operator= המרות )כמו )operator double,operator() המשמש להגדרת function object יכול להיות מוגדר עם כל מספר של פרמטרים. operator->() חייב להחזיר ערך עבורו מוגדר האופרטור חץ גם כן. הקריאה a->x למעשה מבצעת קריאה כפולה לאופרטור חץ, ראשית על a ואז על הערך המוחזר מהאופרטור: ). a.operator->() ) <- x לאופרטורים ++ ו--- שתי גרסאות: operator++(), operator--() operator++(int), operator--(int) prefix: ++x, --x postfix: x++, x-- המרות ניתן להגדיר המרות בשפת ++C אשר ישמשו את הקומפיילר בזמן בחירת פונקציה מתאימה בתהליך ההעמסה. את ההמרות ניתן להגדיר בעזרת בנאי או בעזרת אופרטור המרה: class Complex { double re, im; Complex(double re) : re(re), im(0.0) { //... ; class Rational { int num, denom; Rational(int num, int denom); //... operator double() const; ; בנאי המקבל ארגומנט יחיד, או שניתן לקרוא לו עם ארגומנט יחיד בשל קיום ערכי ברירת מחדל, ושאינו מסומן כ- explicit הגדרת מתודה ()T operator )אופרטור המרה( מגדיר המרה מטיפוס הפרמטר לטיפוס המחלקה מגדיר המרה מטיפוס המחלקה לטיפוס T המילה השמורה explicit מציינת שאסור לקומפיילר להשתמש בבנאי או אופרטור המרה ללא קריאה מפורשת בקוד. מטרתה למנוע המרות אוטומטיות. o בנאי אשר מוגדר כ- explicit אינו יכול לשמש לאתחול משתנה באמצעות סינטקס של השמה. למשל, לא ניתן לכתוב 5; = v,vector<int> אלא רק v(5);.vector<int> הקומפיילר לא ממיר בצורה אוטומטית עצמים משמאל לאופרטור הנקודה..מקרה זה נכון גם עבור מקרה בו הנקודה אינה מפורשת - למשל קריאה a + b אשר קוראת ל-( a.operator+(b, ואינה מבצעת המרות על a. אם יש צורך לאפשר לקומפיילר להמיר אוטומטית את הפרמטר הראשון של אופרטור, יש לממש את האופרטור כפונקציה חיצונית. 16
17 תבניות (templates) ניתן ליצור תבנית עבור מחלקה או פונקציה אשר תשמש את הקומפיילר ליצירת מחלקות או פונקציות לפי התבנית שהוגדרה. הכרזה על תבנית מתבצעת באמצעות המילה השמורה,template ולאחריה בתוך >,> את רשימת הפרמטרים לתבנית. לבסוף מופיעה מחלקה או פונקציה אשר יכולה להיות תלויה בפרמטרים של התבנית. )typename או ערכים class או פרמטרים יכולים להיות שמות טיפוסים )על ידי שימוש במילה o מטיפוסים אחרים, ביניהם int, bool ומצביעים לפונקציות. הקומפיילר ישתשמש בתבניות כדי ליצור פונקציות ומחלקות בהתאם לנדרש מהקוד. תבניות מופיעות בקבצי h כך שיהיו נגישות לקומפיילר. o רק כאשר הקומפיילר משתמש בתבנית הוא יקמפל את הקוד עם הארגומנטים המתאימים. אם o הארגומנטים אינם עומדים בדרישות התבנית תתקבל שגיאת קומפילציה. )למשל, עבור פרמטר שהינו שם טיפוס T, בתבנית נעשה שימוש באתחול חסר פרמטרים של T אך לארגומנט המועבר כ- T אין בנאי מתאים( עבור תבנית של מחלקה, הקומפיילר מייצר אך ורק את המתודות שנעשה בהן שימוש בפועל. למשל, o אם לטיפוס T אין בנאי חסר פרמטרים, עדיין ניתן להשתמש במתודות שאינן דורשות בנאי זה. עבור תבנית של פונקציה, הקומפיילר יכול להסיק את הפרמטרים של התבנית אוטומטית אם הם מופיעים כחלק מהפרמטרים לפונקציה. אחרת יש לציינם במפורש. הקומפיילר יכול גם להסיק רק חלק מהפרמטרים, אך הפרמטרים שהוא מסיק חייבים להיות o האחרונים. חריגות (exceptions) מומלץ להגדיר מחלקה עבור כל סוג שגיאה ולהשתמש בה כחריגה לזרוק. מומלץ שמחלקות עבור חריגות יירשו את std exception או מחלקה סטנדרטית אחרת. o ניתן לתפוס חריגה על ידי מחלקת האב שלה. חשוב לתפוס חריגות by-reference בעזרת & כדי להימנע מהתנהגות לא רצויה. o.throw; על ידי הפקודה catch ניתן לזרוק חריגה מחדש מתוך בלוק זו הדרך היחידה לזרוק מתוך בלוק של.catch(...) מומלץ להשתמש בשיטה זו תמיד עבור כל זריקה o מחדש. ניתן לזרוק חריגות מבנאים או אופרטורים. מסוכן לזכור חריגה מהורס: אסור שיהיו שתי חריגות בו-זמנית )במקרה זה התכנית מתרסקת( ובזמן זריקת חריגה מתבצע קוד של הורסים. :std::exception הגדרת המחלקה class exception { exception(); exception(const exception&); exception& operator=(const exception&); virtual ~exception(); virtual const char* what() const; ; חריגות חשובות מהספרייה הסטנדרטית: std::bad_alloc נזרק כאשר הקצאת זיכרון באמצעות new נכשלת נזרק כאשר המרה בין רפרנסים באמצעות dynamic_cast נכשלת. לדוגמה: void f(employee& emp) { Engineer& eng = dynamic_cast<engineer&>(emp); יזרוק std::bad_cast אם emp אינו ניתן להמרה ל-& Engineer. std::bad_cast 17
18 המרות ומידע על טיפוסים בזמן ריצה המרה שנבדקת בזמן קומפילציה. מאפשרת המרות בין מצביעים שיש ביניהם קשר הורשה, או בין טיפוסים שמוגדרת ביניהם המרה. המרה בלתי הגיונית תגרום לשגיאת קומפילציה. נכונות ההמרה אינה נבדקת בזמן הריצה. המרה הנבדקת גם בזמן ריצה. מאפשרת המרה בטוחה בין מצביע או רפרנס של מחלקת אב למחלקה יורשת. במקרה שההמרה אינה נכונה מוחזר NULL במקרה של מצביעים או נזרק std::bad_cast במקרה של רפרנסים. ההמרה דורשת מחלקה פולימורפית )בעלת פונקציה וירטואלית אחת או יותר(. מאפשרת להוריד const משם הטיפוס. מאפשרת המרה בין כל שני טיפוסים על ידי פירוש מחדש של הזכרון. המרה מסוכנת שמשמשת למקרים מיוחדים בלבד. static_cast<t>(x) dynamic_cast<t>(x) const_cast<t>(x) reinterpret_cast<t>(x) האופרטור typeid מחזיר עצם מטיפוס type_info המייצג את הטיפוס בזמן ריצה של עצם. ניתן להפעיל את typeid על שם טיפוס או על עצם o כדי לקבל את הטיפוס בזמן ריצה יש להפעיל את typeid על העצם ולא על מצביע o המתודה type_info::name() מחזירה מחרוזת המתאת את שם הטיפוס o type_info מממש אופרטור השוואה )==( o A* ptra = new A; A* ptrb = new B; // B extends A, so B is an A if (typeid(*ptra) == typeid(*ptrb) { cout << "same type" << endl; if (typeid(*ptrb) == typeid(b)) { cout << "ptrb has a B" << endl; // this is not true // this is true cout << typeid(*ptrb).name() << endl; // prints a string description of type B אלגוריתמים גנריים דוגמה לאלגוריתם למציאת האיבר המקסימלי בתחום של איברים: דוגמאות נוספות לחתימות של פונקציות המממשות אלגוריתמים גנריים: template<typename Iterator> Iterator max(iterator start, Iterator end) { if (start == end) { return end; Iterator maximum = start; for(iterator i = ++start; i!= end; ++i) { if (*i > *maximum) { maximum = i; return maximum; template<typename Iterator, typename T> Iterator find(iterator start, Iterator end, const T& val); template<typename Iterator> void sort(iterator start, Iterator end); template<typename Iterator> void random_shuffle(iterator start, Iterator end); 18
19 class LessThanZero { bool operator()(int m) const { return m < 0; ; Function Objects במקום לשלוח מצביעים לפונקציות ב- STL משתמשים ב- objects function Function object הוא כל עצם המעמיס את אופרטור )( )אופרטור ההפעלה( דוגמא: void f() { LessThanZero isnegative; cout << isnegative(-4) << endl; // true cout << isnegative(6) << endl; // false class SumOf { bool operator()(int a, int b, int s) { return a + b == s; ; void g() { SumOf issum; cout << issum(2,3,5) << endl; // true cout << issum(1,2,5) << endl; // false אופרטור ההפעלה ניתן להגדרה עם מספר כלשהו של פרמטרים בניגוד למצביעים לפונקציות, ניתן לזכור מצב ב- Object Function ולכן ניתן להשתמש באותה מחלקה למס' פונקציות השונות רק בפרמטר כלשהו. class LessThan { int n; LessThan(int n) : n(n) { bool operator()(int m) const { return m < n; ; void h() { LessThan isless(5); LessThan isless2(8); cout << isless(4) << endl; // true cout << isless(6) << endl; // false cout << isless2(6) << endl; // true שימוש בפונקציה שהגדרנו בקריאה לאלגוריתם: template<typename Iterator, typename Predicate> Iterator find_if(iterator first, Iterator last, Predicate pred) { for (; first!= last; first++) if (pred(*first)) break; return first; shared_ptr לכל עצם מוצבע נשמור מונה הצבעות, וכל המצביעים ישתמשו במונה זה על מנת לדעת מתי יש לשחרר את העצם המוצבע. כאשר המצביע האחרון לעצם כלשהו ישתחרר הוא ישחרר את העצם. 19
20 :std::shared_ptr מנשק חלקי של המחלקה template<typename T> class shared_ptr { explicit shared_ptr(t* ptr = NULL); shared_ptr(const shared_ptr<t>& other); template<typename S> shared_ptr(const shared_ptr<s>& other); template<typename S> shared_ptr<t>& operator=(shared_ptr<s>& other); ~shared_ptr(); T& operator*() const; T* operator->() const; void reset(); // releases this pointer and sets it to NULL operator bool() const; ; vector<shared_ptr<shape> > function(const vector<point>& points) { shared_ptr<shape> shape(new Polygon(points)); shared_ptr<circle> circle(new Circle(5.0)); shared_ptr<square> square(new Square(2.0)); vector<shared_ptr<shape> > vec; vec.push_back(shape); vec.push_back(circle); vec.push_back(square); vector<shared_ptr<shape> > copy = vec; copy.pop_back(); Shape* shape = copy.front().get(); דוגמא לשימוש ב shared_ptr circle = square return copy; class Rational { int numerator, denominator; מחלקה עבור מספר רציונלי - Rational void simplify(); Rational(int numerator = 0, int denominator = 1); /** An implicit converion is a bad idea, this operator is here mainly * as an exmaple for overloading a conversion operator */ explicit operator double() const; Rational operator-() const; Rational& operator+=(const Rational& r); Rational& operator-=(const Rational& r); Rational& operator*=(const Rational& r); Rational& operator/=(const Rational& r); friend std::ostream& operator<<(std::ostream& os, const Rational& r); friend bool operator==(const Rational& r1, const Rational& r2); friend bool operator<(const Rational& r1, const Rational& r2); ; 21
21 class DivisionByZero : public std::runtime_error { DivisionByZero(); ; Rational operator+(const Rational& r1, const Rational& r2); Rational operator-(const Rational& r1, const Rational& r2); Rational operator*(const Rational& r1, const Rational& r2); Rational operator/(const Rational& r1, const Rational& r2); std::ostream& operator<<(std::ostream& os, const Rational& r); bool operator==(const Rational& r1, const Rational& r2); bool operator<(const Rational& r1, const Rational& r2); bool operator!=(const Rational& r1, const Rational& r2); bool operator>=(const Rational& r1, const Rational& r2); bool operator>(const Rational& r1, const Rational& r2); bool operator<=(const Rational& r1, const Rational& r2); #ifndef SET_H_ #define SET_H_ #include <iostream> #include <cassert> מחלקה עבור קבוצה גנרית - Set class Set { Set(); Set(const Set& set); ~Set(); Set& operator=(const Set& set); bool add(const T& t); bool remove(const T& t); bool contains(const T& t); int getsize() const; Set unionwith(set set) const; Set intersectwith(set set) const; class Iterator; Iterator begin() const; Iterator end() const; template <typename Function> Set filter(function f) const; private: T* data; int size; int maxsize; int find(const T& t) const; void expand(); static const int EXPAND_RATE = 2; static const int INITIAL_SIZE = 10; static const int NUMBER_NOT_FOUND = -1; ; 21
22 class Set<T>::Iterator { const Set<T>* set; int index; Iterator(const Set<T>* set, int index); friend class Set<T>; const T& operator*() const; Iterator& operator++(); Iterator operator++(int); bool operator==(const Iterator& iterator) const; bool operator!=(const Iterator& iterator) const; ; std::ostream& operator<<(std::ostream& os, const Set<T>& set); Set<T>::Set() : data(new T[INITIAL_SIZE]), size(0), maxsize(initial_size) { Set<T>::Set(const Set<T>& set) : data(new T[set.getSize()]), size(set.getsize()), maxsize(set.getsize()) { for (int i = 0; i < size; i++) { data[i] = set.data[i]; Set<T>::~Set<T>() { delete[] data; bool Set<T>::add(const T& t) { if (contains(t)) { return false; if (size >= maxsize) { expand(); data[size++] = t; return true; bool Set<T>::remove(const T& t) { int index = find(t); if (index == NUMBER_NOT_FOUND) { return false; data[index] = data[--size]; return true; int Set<T>::find(const T& t) const { for (int i = 0; i < size; i++) { if (data[i] == t) { return i; return NUMBER_NOT_FOUND; 22
23 bool Set<T>::contains(const T& t) { return find(t)!= NUMBER_NOT_FOUND; int Set<T>::getSize() const { return size; Set<T> Set<T>::unionWith(Set<T> set) const { Set<T> result = set; for (const T& t : *this) { result.add(t); return result; Set<T> Set<T>::intersectWith(Set<T> set) const { Set<T> result; for (const T& t : *this) { if (set.contains(t)) { result.add(t); return result; std::ostream& operator<<(std::ostream& os, const Set<T>& set) { os << "{"; bool first = true; for (const T& t :set) { if (!first) { os << ","; first = false; os << " " << t; os << " "; return os; // NOTE: This is not an optimal implementation for operator=() as it does // not handle well the case in which an exception is thrown Set<T>& Set<T>::operator=(const Set<T>& set) { if (this == &set) { return *this; delete[] data; data = new T[set.size]; size = set.size; maxsize = set.size; for (int i = 0; i < size; ++i) { data[i] = set.data[i]; return *this; 23
24 template <typename Function> Set<T> Set<T>::filter(Function f) const { Set<T> result; for (const T& t : *this) { if (f(t)) { result.add(t); return result; typename Set<T>::Iterator Set<T>::begin() const { return Iterator(this, 0); typename Set<T>::Iterator Set<T>::end() const { return Iterator(this, size); void Set<T>::expand() { int newsize = maxsize * EXPAND_RATE; T* newdata = new T[newSize]; for (int i = 0; i < size; ++i) { newdata[i] = data[i]; delete[] data; data = newdata; maxsize = newsize; template<typename T> Set<T>::Iterator::Iterator(const Set<T>* set, int index) : set(set), index(index) { template<typename T> const T& Set<T>::Iterator::operator*() const { assert(index >= 0 && index < set->getsize()); return set->data[index]; template<typename T> typename Set<T>::Iterator& Set<T>::Iterator::operator++() { ++index; return *this; template<typename T> typename Set<T>::Iterator Set<T>::Iterator::operator++(int) { Iterator result = *this; ++*this; return result; template<typename T> bool Set<T>::Iterator::operator==(const Iterator& i) const { assert(set == i.set); return index == i.index; template<typename T> bool Set<T>::Iterator::operator!=(const Iterator& i) const { return!(*this == i); #endif /* SET_H_ */ 24
25 class Shape { int center_x, center_y; דוגמה למחלקה אבסטרקטית (Shape) ולירושה Shape(int x, int y) : center_x(x), center_y(y) { virtual ~Shape() { virtual double area() const = 0; ; class Circle : public Shape { int radius; Circle(int x, int y, int radius) : Shape(x, y), radius(radius) { virtual double area() const override { return radius * radius * PI; ; class Square : public Shape { int edge; Square(int x, int y, int edge) : Shape(x, y), edge(edge) { virtual double area() const override { return edge * edge; ; מבני נתונים שימושיים של STL המחלקה std::vector מנשק חלקי של המחלקה: template<typename T> class vector { vector(); vector(const vector& c); vector(size_t num, const T& val = T()); vector(std::initializer_list<t> values); // vector<int> v = { 1, 2, 3 ; vector& operator=(const vector& v); ~vector(); T& operator[](size_t index); const T& operator[](size_t index) const; T& at(size_t loc); const T& at(size_t loc) const; void pop_back(); void push_back(const T& val); typedef T* iterator; // a pointer is used as an iterator typedef const T* const_iterator; iterator begin(); iterator end(); const_iterator begin() const; const_iterator end() const; size_t size() const; 25
26 ; int main() { vector<int> v1; // empty vector vector<int> v2(20, 8); // 20 integers, all of value 8 vector<int> v3 = { 1, 2, 3, 4, 5 ; דוגמה לשימוש בוקטור: // use vector's `begin' and `end' methods for iteration for (int n : v3) { cout << n; for (size_t i = 0; i < v2.size(); ++i) { cout << v2[i]; // Unsafe access by index for (int i = 0; i < 10; ++i) { v1.push_back(i); // Inserts items at the end of the vector while(v1.size() > 0) { v1.pop_back(); const vector<int> copy(v1); //Safely copies a vector return 0; המחלקה std::list מנשק חלקי של המחלקה: template<typename T> class list { list(); list(const list& c); list(size_t num, const T& val = T()); list(std::initializer_list<t> values); // list<int> v = { 1, 2, 3 ; list& operator=(const list& v); ~list(); void pop_back(); void push_back(const T& val); void pop_front(); void push_front(const T& val); iterator begin(); iterator end(); const_iterator begin() const; const_iterator end() const; size_t size() const; ; 26
שאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג מנ' אב תשע"ז 15.08.17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' ב' שנה תשע"ז 3 שעות
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ח תשרי תשע"ז 30.10.16 שמות המורים: ציון סיקסיק א' תכנות ב- C מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' קיץ שנה תשע"ו 3 שעות משך
קרא עודסדנת תכנות ב C/C++
פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבוא למחשבים ושפת C קוד הקורס: 2-7028510 תאריך בחינה: 15.2.2017 משך הבחינה: שעתיים שם המרצה: ד"ר אופיר פלא חומר עזר: פתוח שימוש במחשבון: לא הוראות כלליות:
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג חשון תשע"ח 12/11/17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד קיץ סמ' שנה תשע"ז 3 שעות משך
קרא עודex1-bash
ביה"ס למדעי המחשב סמסטר חורף תשע"ח 13.12.2017 יסודות מערכות פתוחות פתרון תרגיל מס' 7 המכללה האקדמית נתניה שימו לב: כל ההערות שבתחילת תרגילים 1-6 תקפות גם לתרגיל זה. הערה 1: החל מתרגיל זה והלאה, בכל פעם
קרא עודMicrosoft Word - דוגמאות ב
הפקולטה למדעי המחשב פרופ' חיים גוטסמן, מר רן רובינשטיין עומר סטרולוביץ, כרמי גרושקו, אלכסנדר ליבוב, מיכאל בלטקסה, ראידה נעאמנה, שי מרקנטי, גיא שקד הטכניון - מכון טכנולוגי לישראל 3.10.2011 מבוא לתכנות מערכות
קרא עודSlide 1
מבוא למדעי המחשב תירגול 4: משתנים בוליאניים ופונקציות מבוא למדעי המחשב מ' - תירגול 4 1 משתנים בוליאניים מבוא למדעי המחשב מ' - תירגול 4 2 ערכי אמת מבחינים בין שני ערכי אמת: true ו- false לכל מספר שלם ניתן
קרא עודMicrosoft PowerPoint - rec1.ppt
תכנות מונחה עצמים בשפת ++C תר גול מ ספר 1 אוהד ב ר זילי אוניברסיטת תל א ביב חדש חדיש ומחודש תוספות של + +C לשפ ת C 1 #include Hello World using namespace std; int main() cout
קרא עודתכנות מונחה עצמים א' – תש"ע
1 תכנות מונחה עצמים והנדסת תוכנה תשע"ו 2 בנאי העתקה בניית העתק של אובייקט קיים. בניית העתק בעת העברת אובייקט לפונקציה. בניית העתק בעת החזרת אובייקט מפונקציה. ניתן להגדיר בנאי העתקה. אם לא מגדירים, אז הקומפיילר
קרא עודפתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.
פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9. הדפסה ראשונה: מתבצעת לולאה שרצה מאפס עד אורך המחרוזת.
קרא עודSlide 1
1 אובייקטים היום בתרגול: 2.)objects מחלקות )classes( ואובייקטים )מופעים, )fields( שדות המחלקה שיטות הכמסה )methods של מחלקה. ( class מחלקה - עד עכשיו השתמשנו בעיקר בטיפוסים מובנים ופונקציות המבצעות חישובים
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 6: כתובות ומצביעים 1 תוכנייה מצביעים מצביעים ומערכים, אריתמטיקה של מצביעים 2 3 מצביעים תזכורת- כתובות זיכרון הזיכרון כתובת התא #1000 #1004 #1008 ערך השמור בתא תא 10-4 לא מאותחל
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב תכנות מונחה אובייקטים תוכן עניינים טיפוסי נתונים מורכבים המחלקה String תזכורת לשימוש שעשינו במחלקה String str = new String( Hello ); s.o.p(str.tostring()); s.o.p(str.charat(4)); s.o.p(str.equals(
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ
אוניברסיטת בן גוריון בנגב תאריך המבחן: 12.02.17 שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ד 3 שעות משך
קרא עודPowerPoint Presentation
תכנות מתקדם בשפת Java אוניברסיטת תל אביב 1 תוכנה 1 תרגול 3: עבודה עם מחרוזות )Strings( מתודות )Methods( 1 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 2 מחרוזות )STRINGS( 3 מחרוזות String s = Hello ; מחרוזות
קרא עודMicrosoft Word B
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: 1. ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java 1 מנהלות אתר הקורס: http://courses.cs.tau.ac.il/software1/1516b/ מתרגלים: ברית יונגמן )שעת קבלה: שלישי ב- 8:00 בתיאום מראש( לנה דנקין )שעת קבלה: שלישי ב- 17:00,
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java אלכסיי זגלסקי ויעל אמסטרדמר 1 בירוקרטיה אלכסיי זגלסקי שעת קבלה: שני 13:00-14:00, בתיאום מראש משרד: בניין הנדסת תוכנה, חדר 209 יעל אמסטרדמר שעת קבלה: חמישי 15:00-16:00,
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב מחרוזות, חתימה של פונקציה ומעטפות תוכן עניינים טיפוסים מורכבים טיפוסים מורכבים ערך שם טיפוס 12 m int undef. x boolean true y boolean arr int[] כאלה שעשויים להכיל יותר מערך פרימיטיבי אחד
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב המחלקה Object תוכן עניינים Object הורשה והמחלקה ערך שם טיפוס DynamicIntArray da data size incrementsize DynamicArray תזכורת - Object[] data; int size; int incrementsize; DynamicArray זה
קרא עודמהוא לתכנות ב- JAVA מעבדה 3
מבוא לתכנות ב- JAVA מעבדה 3 נושאי התרגול לולאות ניפוי שגיאות לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100
קרא עודPowerPoint Presentation
מבוא ל-++ C משתנים מיוחסים הקצאת זיכרון דינאמית קלט/פלט ב-++ C מחלקות namespaces const 2 C היא שפת תכנות שנבנתה מעל ++C ++C מוסיפה מגוון רב של תכונות מתקדמות #include using namespace std; בעיקר
קרא עודמבוא לתכנות ב- JAVA תרגול 7
מבוא לתכנות ב- JAVA תרגול 8 תזכורת - מבנה של פונקציה רקורסיבית.2 פונקציה רקורסיבית מורכבת משני חלקים עיקריים 1. תנאי עצירה: מקרה/מקרים פשוטים בהם התוצאה לא מצריכה קריאה רקורסיבית לחישוב צעד רקורסיבי: קריאה
קרא עודמספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה
עמוד 1 מתוך 11 תשע"א מועד ב סמסטר א' 14.2.2011 תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי המחשב יש לענות על כל 5 השאלות. בכל השאלות במבחן יש לכתוב פונקציות יעילות
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב את
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב שימוש במחסנית - מחשבון תוכן עניינים prefix כתיבת ביטויים ב-,infix ו- postfix postfix prefix,infix ביטויים ב- כתיבת ו- infix נוסח כתיבה ב- (operator אנו רגילים לכתוב ביטויים חשבוניים כדוגמת
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 5 מחרוזות, חתימות ורקורסיה מחרוזות רצף של תווים רקורסיה קריאה של מתודה לעצמה באופן ישיר או עקיף ראינו בהרצאה מחרוזות: תווים, חתימות: העמסה- String,הצהרה, overloading אתחול רקורסיה:
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527 kadman11@gmail.com
קרא עודMicrosoft PowerPoint - rec3.ppt
תכנו ת מונח ה עצ מים משתני מחלקה, עצמים מוכלים ועצמים מוצבעים א וה ד ברז יל י א ונ יברס י ט ת תל אביב משתנ י מח ל קה Static Members משתני מחלקה members) (static משתנים סטטיים מוגדרי ם בתוך מח לקה ואולם
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד
אוניברסיטת בן גוריון בנגב תאריך המבחן: 29.01.19 שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות 202.1.9031 מס' הקורס : מיועד לתלמידי : הנדסת תעשיה וניהול שנה תשע"ט א' סמ' א' מועד 3 שעות משך
קרא עודמבוא למדעי המחשב - חובלים
החוג למדעי המחשב אוניברסיטת חיפה מבוא למדעי המחשב סמסטר א' תשע"ג בחינת סיום, מועד ב', 20.02.2013 מרצה: ריטה אוסדצ'י מתרגלת: נעמה טוויטו מדריך מעבדה: מחמוד שריף משך המבחן: שעתיים חומר עזר: ספר של Kernighan
קרא עודמבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו
מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן
קרא עודשקופית 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] - יושב
קרא עודSlide 1
מבוא למדעי המחשב תירגול 7: פונקציות 1 מה היה שבוע שעבר? לולאות מערכים מערכים דו-ממדיים 2 תוכנייה )call by value( פונקציות העברת פרמטרים ע"י ערך תחום הגדרה של משתנה מחסנית הקריאות 3 פונקציות 4 הגדרה של
קרא עודמבוא למדעי המחשב - חובלים
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב סמסטר ב' תשע"ב בחינת סיום, מועד ב',.02..9.7 מרצה: אורן וימן מתרגלים: נעמה טוויטו ועדו ניסנבוים מדריכי מעבדה: מחמוד שריף ומיקה עמית משך המבחן: שעתיים חומר
קרא עודSlide 1
מבוא למחשב בשפת C : מערכים חד ודו-ממדיים מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י איתן אביאור.
קרא עודתוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש
תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תיעשה במערכת ה- mdle בלבד.(http://mdle.tau.ac.il/)
קרא עודמבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב
מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180
קרא עודSlide 1
מבוא לשפת C תירגול 8: פונקציות שבוע שעבר... מערכים מיזוג מערכים ממויינים מערכים דו-ממדיים מבוא לשפת סי - תירגול 8 2 תוכנייה פונקציות ברמת התקשורת הבין-אישית חלוקה לתתי בעיות בדומה למפתח של ספר קריאות גבוהה
קרא עודSlide 1
מבוא לשפת C תירגול 3: טיפוסים והמרות 1 מה היה שבוע שעבר? משתנים קלט/פלט scanf( ו- printf ( Redirection The Input Buffer 2 תוכנייה טיפוסי משתנים קלט/פלט מעוצב המרה בין טיפוסים קבועים 3 חישוב ממוצע בין שני
קרא עודMicrosoft Word - c_SimA_MoedB2005.doc
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד ב', סמסטר א' תשס"ה,.2.2005 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. ודאו כי בטופס שבידיכם עמודים. יש לכתוב
קרא עודמשימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק
משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות 2 הפשטה שאלות כצעד ראשון נפתור בעיה הרבה יותר פשוטה האם כבר
קרא עודתרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש המתרגם משימה: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם 2 שאלות האם כבר יש
קרא עודMicrosoft PowerPoint - T-10.ppt [Compatibility Mode]
מבוא למחשב בשפת Matlab לולאות בלוקי try-catch :10 תרגול מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור, סאהר אסמיר וטל כהן עבור הקורס "מבוא למדעי המחשב" נכתב על-ידי רמי כהן,אולג רוכלנקו,
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 2: מבוא לתיכנות ב- C 1 תוכנייה משתנים קלט/פלט משפטי תנאי מבוא למדעי המחשב מ' - תירגול 3 2 משתנים 3 משתנים- תמונת הזיכרון הזיכרון כתובת התא #1000 10-4 לא מאותחל 67 לכל תא בזיכרון
קרא עודמבוא לתכנות ב- JAVA תרגול 11
מבוא לתכנות ב- JAVA תרגול 11 רשימה מקושרת אוסף סדור של איברים מאותו טיפוס. קודקוד ברשימה )Node( מכיל את המידע + הצבעה לקודקוד הבא ברשימה data next first רשימה :)List( מיוצגת ע"י מצביע לאיבר הראשון ברשימה
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן # חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527
קרא עוד1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_match הפונקציה preg_m
1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_ הפונקציה preg all הפונקציה str_replace הפונקציה preg_replace 2 מהי תבנית
קרא עודמספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי
מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בינסקי הנחיות: יש לענות על כל השאלות. יש לענות על כל
קרא עודSlide 1
מבוא לתכנות ב- JAVA תרגול 5 מה בתרגול מחרוזות מערכים דו ממדיים מחרוזות (Strings) מחרוזת היא רצף של תווים. immutable על מנת ליצור ולטפל במחרוזות נשתמש במחלקה String למחלקה String מתודות שונות שמאפשרות פעולות
קרא עודתשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(
תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(http://mdle.tau.ac.il/) בלבד הגשת התרגיל תעשה במערכת ה- mdle aviv
קרא עודSlide 1
מבוא לשפת C תירגול 10: מצביעים, מערכים ומחרוזות שבוע שעבר... מצביעים Call by reference 2 תוכנייה קשר מצביע-מערך )אריתמטיקה של מצביעים( העברת מערכים לפונקציה מחרוזות דוגמה 3 קשר מצביע-מערך 4 תזכורת: תמונת
קרא עודSlide 1
בעיית התוכנית הגדולה C תוכנית גדולה המבצעת פעולות רבות, יכולה להפוך לקשה מאוד לניהול אם נשתמש רק בכלים שלמדנו עד כה: 1. קשה לכתוב ולנפות את התוכנית,. קשה להבין אותה, 3. קשה לתחזק ולתקן אותה, 4. קשה להוסיף
קרא עודSlide 1
Introduction to Programming in C תרגול 8 1 1 רקורסיה תזכורת הגדרה: המונח רקורסיה (recursion) מתאר מצב שבו פונקציה קוראת לעצמה באופן ישיר או באופן עקיף. שימוש: נוח להשתמש בפונקציות רקורסיביות על מנת לפתור
קרא עודPowerPoint Presentation
המחלקה String עבודה עם קבצים תבניות חריגות שימוש בבנאים, הורסים והעמסת אופרטורים 2 השימוש במחלקות, בנאים, הורסים והעמסת אופרטורים מאפשר לנו להגדיר מחלקה עבור String כך שייחסכו מאיתנו החסרונות של השימוש
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג,.6.013 משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם 8 עמודי שאלון )כולל עמוד זה(. עליכם לכתוב את התשובות על
קרא עודPowerPoint Presentation
1 תוכנה 1 תרגול 1: מנהלות, סביבת העבודה ומבוא ל- Java 1 2 מנהלות I מתרגלים: יעל אמסטרדמר )שעת קבלה: חמישי ב- 12, בתיאום מראש( דביר נתנאלי )שעת קבלה: רביעי ב- 17, בתיאום מראש( http://courses.cs.tau.ac.il/software1/1415a
קרא עודPowerPoint Presentation
רשימות מקושרות עבודה קבצים דוגמה מבנים המצביעים לעצמם רשימות מקושרות 2 נסתכל על המבנה הבא: typedef struct node { int data; struct node* next; *Node; איך נראים המבנים בזיכרון לאחר ביצוע הקוד הבא: Node node1
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב הממשקים Iterable,Set ו- Iterator תוכן עניינים מבנה נתונים מבנה נתונים מבנה נתונים הוא container של עצמים שמוגדרות עליו מספר פעולות למשל קבוצה של עצמים (אוסף ללא חזרות) עם הפעולות: הוספת
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עוד2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ
מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מספיק עמדות לכולם ולכן מומלץ לעבוד ביחידים). במהלך המעבדה יהיה עליכם לבצע משימות. אם תצטרכו עזרה בשלב
קרא עודיוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן
יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן מתרגלים: הנחיות: השאלות. כל על לענות עליכם משקל. שוות
קרא עודPowerPoint Presentation
תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש המתרגם משימה: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם 2 שאלות האם כבר יש
קרא עודPowerPoint Presentation
תוכנה 1 3 תרגול מס' מתודות ותיכון לפי חוזים חוזה בין ספק ללקוח חוזה בין ספק ללקוח מגדיר עבור כל שרות: תנאי ללקוח - "תנאי קדם" precondition - - תנאי לספק "תנאי אחר".postcondition לקוח ספק 2 תנאי קדם )preconditions(
קרא עודתורת הקומפילציה
תורת הקומפילציה תרגיל בית 2 הוראות לתרגיל 2 בשפת MINI-PASCAL הפרוייקט המצורף הינו קוד שלד של מהדר לשפת mini-pascal עליכם לממש בסביבת (Eclipse (Java את הפונקציות המתאימות לפי החומר שנלמד בהרצאה ע"מ שהמהדר
קרא עודשאלה 2. תכנות ב - CShell
ביה"ס למדעי המחשב 4.2.2018 האקדמית נתניה מבחן מועד א' יסודות מערכות פתוחות סמסטר חורף, תשע"ח משך המבחן: שלוש וחצי שעות. יש לענות על כל השאלות. מותר השימוש בחומר עזר כלשהו, פרט למחשבים, (מחשבונים מותר).
קרא עודפייתון
שיעור 12: מילונים ברק גונן 1 או מילון, :hash table או,dictionary זוגות של מפתחות keys וערכים values מילון מוגדר על ידי סוגריים מסולסלים { } לדוגמה: מילון שמכיל ציונים, המפתח הוא מספר ת.ז ערך מפתח הגדרה
קרא עודמבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי
מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדיקות אחרונות לפני מסירה )עמודים 8-11( מבנה השאלון 5
קרא עודמתכונת עיצוב 3013
מדעי המחשב פרק ראשון Java שאלה 1 שאלה 1 נכתב ע"י ראמי ג'באלי C# Java 2 א. שאלה ב. הערה: במבחן כתוב שיש שלשה אחת בלבד של פנסים כאלו. ולמרות זאת נשאיר את המשתנה הבוליאני כך שאם נמצאו הפנסים בתחילת המערך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודמבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2
מבוא למדעי המחשב תרגול מס' 2 נושאים משתנים טיפוסים אופרטורים פונקציות מתמטיות מהמחלקה Math המרת טיפוסים תנאים ולולאות 1 2 תזכורת משיעור קודם תזכורת... תכנית מחשב נכתבת כטקסט בקובץ. הטקסט כתוב בשפת תכנות
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד א', סמסטר א' תשס"ה, 6..5 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודPRESENTATION NAME
נכתב ע"י כרמי גרושקו. כל הזכויות שמורות 2010 הטכניון, מכון טכנולוגי לישראל הקצאה דינמית )malloc( מערכים דו-מימדיים סיבוכיות: ניתוח כזכור, כדי לאחסן מידע עלינו לבקש זכרון ממערכת ההפעלה. 2 עד עכשיו: הגדרנו
קרא עודSlide 1
מבוא למחשב בשפת C צעדים הרצאה 2: ראשונים בשפת C מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י
קרא עודאוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו
אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', 31.1.2017 מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבוני, דולב שרון הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה
קרא עודTutorial 11
מבוא לשפת C תרגול 8: מערכים רב-ממדיים תרגילים בנושא מערכים ורקורסיה מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקנשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב" נכתב ע"י טל כהן, עודכן ע"י
קרא עודHomework Dry 3
Homework Dry 3 Due date: Sunday, 9/06/2013 12:30 noon Teaching assistant in charge: Anastasia Braginsky Important: this semester the Q&A for the exercise will take place at a public forum only. To register
קרא עודהמשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return +
המשימה תרגול מס' 5: קלט-פלט במערכות הפעלה שונות יש סימונים שונים עבור ירידת שורה :)newline( ב- UNIX/Linux )Line Feed( \n ב- Windows )Carriage Return + Line Feed( \r\n - יכולות להתעורר בעיות... זרמים, קוראים
קרא עודדוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמט
דוגמאות שהוצגו בהרצאה 10 בקורס יסודות מערכות פתוחות דוגמה 1 דוגמאות של פונקציות ב- awk שמראות שהעברת פרמטרים של משתנים פשוטים היא by value והעברת פרמטרים של מערכים היא by reference וכן דוגמאות שמראות שמשתנים
קרא עודפתרון 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 עבור הערכים: עבור סעיף
קרא עוד234114
)234117 )234114 \ סמסטר חורף תשע"ז 2017 מבחן מסכם מועד א', 21 לפברואר 2 3 4 1 1 מספר סטודנט: רשום/ה לקורס: משך המבחן: 3 שעות. חומר עזר: אין להשתמש בכל חומר עזר. הנחיות כלליות: מלאו את הפרטים בראש דף זה
קרא עודPowerPoint Presentation
מצביעים הקצאת זיכרון דינאמית מבנים - Structures טיפוסי נתונים - types Data העברת פרמטרים ל- main טענות נכונות שימוש בסיסי אריתמטיקת מצביעים void* מצביע למצביע 2 כתובת ערך הבית int התופס 4 בתים 7 0 0 0
קרא עודמצגת של PowerPoint
מבוא כללי לתכנות ולמדעי המחשב תרגול מס' 1 דין שמואל dshmuel110@gmail.com 1 1. מנהלות מרצה: אמיר רובינשטיין, amirr@tau.ac.il שעות קבלה: לשאלות קצרות - מייד לאחר השיעור. ניתן לתאם במייל שעות אחרות. מתרגל:
קרא עודתאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה
תאריך פרסום: 01.01.15 תאריך הגשה: 15.01.15 מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש להגיש בזוגות. -העבודה חייבת להיות מוקלדת. -הקובץ חייב
קרא עודPowerPoint Presentation
תרגול מס' 3: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש שלבי הפיתוח - חזרה קצרה ישנם שני שלבים נפרדים: שלב פיתוח התוכנית בשלב זה אנו משתמשים במהדר )קומפיילר( כדי להמיר קבצי.java )קבצי
קרא עודיום שלישי, 14 ליולי 2015 מבחן סוף סמסטר - תכנות מונחה עצמים )236703( סמסטר אביב 2015, מועד א' מרצה: ערן גלעד מתרגלים: נורית מושקוביץ', הלאל עאסי, אליר
יום שלישי, 14 ליולי 2015 מבחן סוף סמסטר - תכנות מונחה עצמים )236703( סמסטר, מועד א' מרצה: ערן גלעד מתרגלים: נורית מושקוביץ', הלאל עאסי, אלירן וייס הנחיות: 1. במבחן 5 שאלות שוות משקל. עליכם לענות על כל
קרא עודלנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי
לנץ קרן מרצה: תכנותמונחהעצמים) 027622 ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחיות:.1.2.3.4.5.6.7 השאלות. כל על לענות עליכם משקל. שוות
קרא עודMicrosoft PowerPoint - lec10.ppt
תכנו ת מ ונחה ע צמ י ם בשפת ++C אוהד ברזילי אוניברסיטת תל אביב ירו ש ה מרו בה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודMicrosoft PowerPoint - lec2.ppt
מרחב הש מות (namespace) אוהד ברזילי אוניברסיטת תל אביב מה בתו כנית? לקוח וס פק במערכת תוכנה ממשקים הכרת מרחב השמות מניעת תלות פוטנציאלית בין רכיבים במערכת ע"י עיצוב חלופי של מבנה הממשקים 2 א ונ י ב רס
קרא עודתרגיל בית מספר 1#
ב 4 תרגיל בית מספר - 1 להגשה עד 72 באוקטובר בשעה ::725 קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס, תחת התיקייה.assignments חריגה מההנחיות תגרור ירידת ציון / פסילת התרגיל. הנחיות והערות ספציפיות
קרא עודMicrosoft PowerPoint - lec9.ppt
ת כנ ות מונ ח ה עצמי ם בשפת + +C ירוש ה אוהד ברזילי אונ יברסיטת תל אביב ירוש ה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודPowerPoint Presentation
חלוקה למודולים Abstract data types טיפוסי נתונים מופשטים ADT של מבני נתונים בחירת מבני נתונים תכנות מודולארי מודולים ב- C דוגמה: מודול תאריך 2 אורך החיים של קוד יכול להיות עשרות שנים, לאורך תקופה זו יש
קרא עודMicrosoft PowerPoint - rec8.ppt
על טיפ ו סי ם וירו שה תרגול אוהד ברזילי אונ יברסיטת תל אביב תנ אי ק ד ם מופ שט תנאי קדם מופשט ראינו שבקבלנות משנה החוזה של המחלקה היורשת חייב לקיים 3 עקרונות: תנאי קדם יכולים להיות חלשים תנאי בתר יכולים
קרא עודתורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב
תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב, מילה ושפה לטובת מי ששכח חומר זה, או שלא למדו מעולם,
קרא עוד