PowerPoint Presentation
|
|
- דב דהרי
- לפני5 שנים
- צפיות:
תמליל
1 מצביעים הקצאת זיכרון דינאמית מבנים - Structures טיפוסי נתונים - types Data העברת פרמטרים ל- main טענות נכונות
2 שימוש בסיסי אריתמטיקת מצביעים void* מצביע למצביע 2
3 כתובת ערך הבית int התופס 4 בתים x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 0x0208 0x0209 0x020A 0x020B 0x020C 0x020D הזיכרון מורכב מתאים הקרויים בתים: כל לכל בית מכיל ערך מספרי פירוש הערכים כערך לא מספרי הוא ע"י התכנית בית יש שם כתובת הכתובת היא מיקומו בזיכרון בד"כ כתובות בזיכרון נרשמות בבסיס הקסדצימלי )16( משתנים מאוחסנים בבתים: טיפוסים שונים דורשים מספר שונה של בתים, למשל: int צורך 4 או 8 char בתים צורך בית יחיד. מחרוזת hello המורכבת ממספר תווים 3
4 עבור טיפוס T נקרא ל-* T מצביע ל- T למשל int* הוא מצביע ל- int 0x x0204 0x0205 0x0206 0x0207 0x0208 0x020A 0x020B 0x020C מצביע מסוג *T הוא משתנה אשר שומר כתובת של משתנה מטיפוס T. ניתן לקבל את כתובתו של משתנה ע"י שימוש באופרטור & לא ניתן להשתמש ב-& על ביטויים או קבועים )מדוע?( ניתן לקרוא את ערכו של המצביע ע"י אופרטור * פעולה זו קרויה dereferencing int n = 5; int* ptr = &n; // ptr now points to n printf("%d",*ptr); // dereferencing ptr 4
5 הכתובת 0 הינה כתובת לא חוקית: אף עצם אינו יכול להיות בעל כתובת זו ניתן לעשות שימוש בכתובת זו כדי לציין שמצביע מסוים אינו מצביע לאף עצם כרגע השתמשו ב- NULL כאשר אתם מתייחסים לכתובת ולא בקבוע 0 שימוש בקבועים כאלו משפר את קריאות הקוד נסיון לקרוא מצביע המכיל את הכתובת NULL יגרום לקריסת התוכנה. ב- UNIX תתקבל ההודעה: segmentation fault גישה למצביע המכיל "זבל" תגרום לתכנית להתנהג בצורה לא צפויה אסור להשאיר מצביעים לא מאותחלים בקוד! ניתן להכריז על המשתנה מאוחר יותר (C99) במקרה ולא ניתן יש לאתחל אותו ל- NULL 5
6 ניתן בנוסף לבצע פעולות חשבוניות חיבור מספרים שלמים: על מצביעים int n =...; int* ptr2 = ptr + n; התוצאה היא כתובתו של המשתנה מטיפוס מתאים n תאים חיסור שני מצביעים: קדימה/אחורה int diff = ptr2 - ptr; התוצאה היא מספר שלם (int) פעולות אלו מאפשרות להסתכל על המשתנה הבא/הקודם בזיכרון הכרחי לשימוש במערכים ומחרוזות מסוכן טעויות חשבוניות עלולות לגרום לקריאת "זבל" מהזיכרון שאלה: מדוע לא ניתן לחבר שני מצביעים? 6
7 ניתן להשתמש במצביע כדי לגשת למשתנים הנמצאים בהמשך בזיכרון, למשל כך: int* ptr =...; int n = *(ptr + 5); int n = ptr[5]; האופרטור [ ] משמש כקיצור לפעולה זו: כלומר הפעולות הבאות שקולות: *(ptr + n) ptr[n] 7
8 מערכים ומצביעים מתנהגים בצורה דומה ניתן להשתמש בשם המערך כמצביע לאיבר הראשון בו כאשר שולחים מערך לפונקציה ניתן לשלוח אותו כמצביע: void sort(int* array, int size); מצביע יכול לשמש כאיטרטור עבור מערך int array[n]; //... ב- C99 ניתן for(int* ptr = array; ptr < array+n; ptr++) { להכריז על משתנה בתוך printf("%d ",*ptr); לולאת for הבדלים: הכרזה על מערך מקצה זיכרון כגודל המערך, הכרזה על מצביע אינה מקצה זיכרון לאחסון המשתנים! ניתן לשנות את ערכו של מצביע, אך לא ניתן לשנות את "ערכו" של תחילת המערך 8
9 ניתן להגדיר מצביעים מטיפוס.void* מצביעים אלו יכולים לקבל את כתובתו של כל משתנה לא ניתן לקרוא מצביע מטיפוס,void* יש להמירו קודם לכן int n = 5; double d = 3.14; void* ptr = &n; ptr = &d; double d2 = *ptr; // Error: cannot dereference void* double d3 = *(double*)ptr; // O.K. option 1 double* dptr = ptr; // Implicit cast from void* to double* double d4 = *dptr; // O.K. option 2 9
10 T** ניתן ליצור מצביע לכל טיפוס, בפרט עבור טיפוס *T מתקבל מצביע למצביע של T אפשר להמשיך לכל מספר של * ניתן ליצור מצביע מטיפוס דוגמאות: שליחת מערך של מצביעים לפונקציה: void sort_pointers(int** array, int size); כתיבת פונקצית swap עבור מחרוזות: void swap_strings(char** str1, char** str2) { char* temp = *str1; *str1 = *str2; *str2 = temp; מדוע יש כאן צורך במצביע למצביע? 10
11 מצביעים משמשים להתייחסות לתאי זיכרון ניתן לקבל את כתובתו של משתנה ע"י אופרטור & ניתן לקרוא ממצביע ולקבל את הערך המוצבע ע"י * הערך NULL מציין שאין עצם מוצבע ואסור לקרוא אותו ניתן לבצע פעולות חשבוניות על מצביעים מאפשר התייחסות למצביעים בדומה למערכים חשוב לאתחל מצביעים הרצת קוד הניגש למצביעים המכילים ערך לא תקין תגרום להתנהגות לא מוגדרת הכרזה על מצביע אינה מאתחלת זיכרון עבור המשתנה המוצבע! מצביע מטיפוס void* יכול להצביע לעצם מכל סוג ומשמש לכתיבת קוד גנרי 11
12 סוגי משתנים הקצאת זיכרון שחרור זיכרון נזילות זיכרון 12
13 את המשתנים השונים בקוד ניתן לסווג לפי טווח ההכרה ואורך חייהם: משתנים מקומיים: משתנים פנימיים של פונקציות. נגישים רק בבלוק בו הם הוגדרו. משתנים אלו מוקצים בכל פעם שהבלוק מורץ ומשוחררים בסופו. משתנים גלובליים: משתנים אשר מוגדרים לכל אורך התכנית וניתן לגשת אליהם מכל מקום. המשתנים מוקצים כאשר התכנית מתחילה ונשמרים לכל אורך זמן הריצה משתנים סטטיים של פונקציה: משתנים פנימיים של פונקציה. משתנים אלו שומרים על ערכם בין הקריאות השונות לפונקציה. מאותחלים בריצה הראשונה של הפונקציה, משוחררים בסוף ריצת התכנית משתנים דינאמיים: מוקצים ומשוחררים ע"י קריאה מפורשת לפונקציה 13
14 משתנים גלובליים, משתנים סטטיים של קובץ ומשתנים סטטיים של פונקציה נחשבים לתכנות רע הסיבה העיקרית לכך - שימוש במשתנים אלו מקשה על הבנת ודיבוג הקוד: כדי להבין פונקציה המשתמשת במשתנה גלובלי יש להסתכל בקוד נוסף קשה לצפות את תוצאת הפונקציה כי היא אינה תלויה רק בפרמטרים שלה קשה לצפות השלכות של שינויים על ערך המשתנה בשימוש במשתנה סטטי של פונקציה - בשביל לצפות את תוצאת הפונקציה צריך לדעת מה קרה בהרצות קודמות אין להשתמש במשתנים גלובליים במת"מ בקורסים מתקדמים בהמשך התואר תראו מקרים בהם חובה או מומלץ להשתמש במשתנים כאלו 14
15 משתנים דינאמיים הם משתנים שזמן החיים שלהם הוא בשליטת המתכנת קוד מפורש מקצה אותם וקוד מפורש דרוש לשחרורם המשתנים מוקצים באזור זיכרון שקרוי ה- heap בניגוד למשתנים מקומיים המוקצים על מחסנית הקריאות, ה- stack משתמשים בהם כאשר: צריך ליצור מערך שגודלו אינו ידוע מראש יש צורך לשמור נתונים בזיכרון גם לאחר יציאה מהפונקציה הגישה למשתנים אלו נעשית תמיד בעזרת מצביעים 15
16 כדי להקצות זיכרון נשתמש בפונקציה :malloc void* malloc(size_t bytes); malloc מקבלת גודל בבתים של זיכרון אותו עליה להקצות ערך החזרה מכיל מצביע לתחילת גוש הזיכרון שהוקצה התוצאה היא תמיד גוש זיכרון רציף במקרה של כשלון מוחזר NULL לאחר מכן ניתן להתייחס לשטח המוצבע כאל משתנה או מערך: int* my_array = malloc(sizeof(int) * n); for (int i=0; i<n; i++) { my_array[i] = i; 16
17 כיצר נדע כמה בתים עלינו להקצות עבור משתנה מסוג נסיון ראשון: 4 הוא מספר קסם מספרי קסם הם הרגל תכנותי רע:?int int* ptr = malloc(4); פוגעים בקריאות הקוד - מספר לא ברור המופיע בקוד שאינו 0 או 1 מקשים על שינויים עתידיים בקוד למשל מעבר לסביבה בה גודלו של int הוא 8 ככל שצריך יותר שינויים הסיכוי לפספס אחד מהם גדל יש להימנע ממספרי קסם: ע"י הגדרת קבועים בעזרת ע"י שמירת ערכם במשתנה קבוע בעל שם ברור #define שיקלו על שינויים ועל קריאת הקוד 17
18 int נסיון שני - נגדיר את הגודל של כקבוע: #define SIZE_OF_INT 4 int* ptr = malloc(size_of_int); עכשיו הקוד קריא וקל לשנות את הערך אבל אם נעביר את הקוד לסביבה אחרת עדיין נצטרך לעדכן את הערך קוד שדורש שינויים במעבר בין סביבות שונות נקרא non-portable 18
19 sizeof אשר מחזיר את הגודל המתאים: int* ptr = malloc(sizeof(int)); נשתמש באופרטור ניתן להפעיל את sizeof על שמות טיפוסים או על משתנים עבור שם טיפוס יוחזר הגודל בבתים של הטיפוס: int* ptr = malloc(sizeof(int)); עבור הפעלה על משתנה יוחזר הגודל של הטיפוס של המשתנה בבתים: int* ptr = malloc(sizeof(*ptr)); // = sizeof(int) למה השיטה שימו לב להבדל בין גודל של מצביע לגודל העצם המוצבע הזו עדיפה? מה נעשה אם ברצוננו להקצות זיכרון לעותק של מחרוזת? char* str = "This is a string"; char* copy = malloc(sizeof(char)*(strlen(str)+1)); למה צריך 1+? אפשר להוריד את,sizeof(char) מובטח שהוא תמיד 1 19
20 NULL עלולה להיכשל בהקצאת הזיכרון - במקרה זה מוחזר malloc מה קורה במקרה זה אם malloc נכשלת? int* my_array = malloc (sizeof(int) * n); for (int i=0; i<n; i++) { my_array[i] = i; הפתרון: בדיקת ערך ההחזרה של פונקציות העלולות להיכשל וטיפול בו הטיפול צריך להופיע מיד לאחר ההקצאה ולפני השימוש הראשון int* my_array = malloc(sizeof(int) * n); if (my_array == NULL) { // or!my_array handle_memory_error(); בהמשך נראה מקרים נוספים של שגיאות יותר שכיחות ופשוטות להתמודדות 20
21 הפונקציה free משמשת לשחרור גוש זיכרון שהוקצה ע"י malloc void free(void* ptr); המצביע שנשלח ל- free חייב להצביע לתחילת גוש הזיכרון )אותו ערך שהתקבל מ- )malloc לאחר שחרור הזיכרון אסור לגשת יותר לערכים בזיכרון ששוחרר אם שולחים NULL ל- free לא מתבצע כלום כלומר אין צורך לבדוק את הפרמטר הנשלח ולוודא שאינו NULL למה זה טוב? אסור לשחרר את אותו זיכרון פעמיים או לשלוח ל- free מצביע שאינו מצביע לתחילת גוש זיכרון שהוקצה דינאמית )או )NULL int* my_array = malloc(sizeof(int) * n); //... using my_array... free(my_array); 21
22 במקרה ונשלח NULL ל- free לא מתבצע כלום ניתן להחליף את הקוד הקודם בזה: free הוא מקרה קצה עבור NULL if (ptr!= NULL) { free(ptr); free(ptr); מה היה קורה אם free לא היתה מתמודדת עם מקרה הקצה הזה? עדיף לטפל במקרי קצה בתוך הפונקציה מונע מהמשתמש בה ליצור באגים ושכפולי קוד 22
23 גישה לכתובת זיכרון שאינה מוקצה שחרור כפול של כתובת זיכרון אינו מוגדר )או הוקצתה ושוחררה( אינה מוגדרת קוד שתוצאתו אינה מוגדרת הוא קוד שמתקמפל ורץ אך אינו מחשב את הערכים הצפויים. נותן תוצאות שאינן צפויות בחלק מהמקרים התוצאה שתוחזר אכן מתאימה לציפיות קוד שאינו מוגדר הוא באג קשה לטיפול קשה לצפות את התנהגותו והשלכותיו יכול להשפיע על משתנים באזור אחד בקוד חשוב להקפיד על שימוש נכון בשפה כדי להימנע ממקרים אלו 23
24 האם שתי התכניות הבאות מתנהגות בצורה זהה? #include <stdio.h> #define N 7 #include <stdio.h> #define N 7 int main() { int a[n] = {0; int i; for (i=0; i < N; i++) { printf("%d\n", i); a[n-1-(i+1)] = a[i]; return 0; int main() { int i; int a[n] = {0; for (i=0; i < N; i++) { printf("%d\n", i); a[n-1-(i+1)] = a[i]; return 0; 24
25 דליפת זיכרון מתרחשת כאשר שוכחים לשחרר זיכרון שהוקצה: void sort(int* array, int n) { int* copy = malloc(sizeof(int) * n); //... some code without free(copy) return; דליפת זיכרון אינה גורמת ישירות לשגיאות בהתנהגות התוכנה דליפת זיכרון יגרמו לצריכת זיכרון גדלה של התוכנה ככל שזמן ריצתה גדל ולהאטת התוכנה ומערכת ההפעלה כולה תחת UNIX ניתן להשתמש בכלי valgrind לאיתור דליפות זיכרון valgrind מריץ את התכנית שלכם ומחפש גושי זיכרון שהוקצו אך לא שוחררו ניתן למצוא מידע נוסף על השימוש ב- valgrind בתרגול עזר 3 25
26 כדי להימנע מכל הבעיות שתוארו כאשר עובדים עם הקצאות דינאמיות קיים רק פתרון אחד יעיל - עבודה מסודרת בעזרת עבודה מסודרת ניתן לשמור על הקוד פשוט יותר קוד מסובך מקל על הכנסת באגים בטעות הטיפול בבאגים קשה יותר אם הקוד מסובך 26
27 מומלץ לא להשתמש במשתנים גלובליים וסטטיים ניתן להשתמש ב- malloc ו- free כדי להקצות ולשחרר זיכרון בצורה מפורשת עבור יצירת מערכים בגודל לא ידוע עבור שמירת ערכים לאורך התכנית ניהול הזיכרון מתבצע ע"י מצביעים לתחילת גוש הזיכרון שהוקצה יש לבדוק הצלחת הקצאת זיכרון יש לזכור לשחרר את הזיכרון המוקצה כאשר אין בו צורך יותר ניתן להשתמש ב- valgrind כדי למצוא בקלות גישות לא מוגדרות לזיכרון 27
28 הגדרת מבנה פעולות על מבנים typedef 28
29 נניח שברצוננו לכתוב תוכנה לניהול אנשי קשר, לכל איש קשר נשמור: שם פרטי, שם משפחה, מספר טלפון, כתובת וכתובת מגורים. לשם כך נצטרך לשמור 5 מערכים שונים! כל פונקציה שתצטרך לקבל את פרטיו של איש קשר כלשהו תצטרך לקבל 5 פרמטרים שונים לפחות! void somefunction(char* firstname, char* lastname, char* address, char* , int number,... more?); כדי להימנע מריבוי משתנים ניתן להגדיר טיפוסים חדשים המהווים הרכבה של מספר טיפוסים קיימים void somefunction(contact contact,...); 29
30 ניתן להגדיר טיפוסים חדשים המהווים הרכבה של מספר טיפוסים קיימים בעזרת המילה השמורה :struct struct <name> { <typename 1> <field name 1>; <typename 2> <field name 2>;... <typename n> <field name n>; <declarations>; הטיפוס החדש מורכב משדות: לכל שדה יש שם טיפוס השדה נקבע לפי הגדרת המבנה המבנים נשמרים בזיכרון ברצף ניתן להשתמש במערכים בעלי גודל קבוע כשדות - כל המערך נשמר במבנה ניתן להשתמש במצביעים כשדות - במקרה זה הערך המוצבע אינו חלק מהמבנה 30
31 birth struct point { double x; double y; ; struct date { int day; char month[4]; int year; ; struct person { char* name; struct Date birth; ; 31 למה 4? point x=3.0 y=2.5 person name=0x0ffef6 day=31 month="mar" year=1953 date day=31 month="nov" year=1971 "Ehud Banai" כל המערך נשמר בתוך המבנה המחרוזת נשמרת מחוץ למבנה
32 הטיפוס החדש מוגדר בשם <name> struct כדי לגשת לשדות של משתנה מטיפוס המבנה נשתמש באופרטור. )נקודה( struct point p; p.x = 3.0; p.y = 2.5; double distance = sqrt(p.x * p.x + p.y * p.y); עבור מצביע למבנה ניתן להשתמש באופרטור החץ >- struct point* p = malloc(sizeof(*p)); מה חסר? (*p).x = 3.0; // Must use parentheses, annoying p->y = 2.5; // Same thing, only clearer double distance = sqrt(p->x * p->x + p->y * p->y); 32
33 ניתן לאתחל מבנים בעזרת התחביר הבא: struct date d = { 31, "NOV", 1970 ; ניתן לבצע השמה בין מבנים מאותו הטיפוס: struct date d1,d2; //... d1 = d2; במקרה זה מתבצעת השמה בין כל שני שדות תואמים מבנים מועברים ומוחזרים מפונקציות by value כלומר מועתקים גם במקרה זה מתבצעת ההעתקה שדה-שדה הפעולות האלו אינן מתאימות למבנים מסובכים יותר )בד"כ בגלל מצביעים( 33
34 birth birth מבנים המכילים מצביעים אינם מתאימים בדרך כלל לביצוע השמות והעתקות מה יקרה אם נבצע השמה בין שני המבנים בדוגמה זו? person1 person2 name=0x0ffef6 "Ehud Banai" name=0x0ffed0 "Yuval Banai" day=31 day=9 month="mar" month="jun" year=1953 year=1962 מסיבה זו וכדי למנוע העתקות כבדות ומיותרות של מבנים בדרך כלל במבנים ע"י מצביעים נשתמש נשלח לפונקציות )ונקבל כערכי חזרה( מצביעים למבנה יוצא הדופן הוא מבנים קטנים ופשוטים כגון point 34
35 המילה השמורה typedef משמשת להגדרת טיפוסים חדשים ע"י נתינת שם חדש לטיפוס קיים typedef int length; פקודת typedef עובדת על שורת הכרזה של משתנה אך מגדירה טיפוס חדש במקום משתנה. נשתמש בפקודת typedef כדי לתת שמות נוחים לטיפוסים: typedef struct point Point; במקרה זה נוכל להתייחס למבנה מעכשיו כ- Point )ללא המילה השמורה )struct נוח לתת שם גם לטיפוס המצביע למבנה: typedef struct date Date, *pdate; עבור מבנים מסובכים נשתמש תמיד במצביעים ולכן במקרים האלו נשמור את השם ה"נוח" לטיפוס המצביע: typedef struct person *Person; 35
36 ניתן להוסיף typedef ישירות על הגדרת המבנה: typedef struct point { double x; double y; Point; ניתן להשמיט את שם הטיפוס בהגדרה ולהשאיר רק את השם החדש: typedef enum { RED, GREEN, BLUE Color; typedef struct { double x; double y; Point; 36
37 מבנים מאפשרים הרכבה של מספר טיפוסים קיימים כדי להקל על קריאות הקוד מבנה מורכב משדות בעלי שם ניתן לגשת לשדות ע"י האופרטורים.-> ו-. העתקה והשמה של מבנים בטוחה כל עוד אין בהם מצביעים מומלץ להשתמש ב- typedef כדי לתת שם נוח לטיפוס החדש 37
38 38
39 typedef struct date_t { int day; char month[4]; int year; Date; אלו בעיות יש בקוד הזה? int main() { Date d1 = {21, "NOV", 1970; Date d2; scanf("%d %3s %d", &d2.day, d2.month, &d2.year); printf("%d %s %d\n", d1.day, d1.month, d1.year); printf("%d %s %d\n", d2.day, d2.month, d2.year); // deja-vu if (d1.day == d2.day && d1.year == d2.year) { printf("the dates are equal\n"); return 0; strcmp(d1.month,d2.month) == 0 && 39
40 תאריך הוא יותר מהרכבה של שני מספרים שלמים וארבעה תווים לא כל צירוף של ערכים עבור המבנה Date הוא אכן תאריך חוקי - אין חודש מתאים ל- BLA 5 BLA SEP 1978 ב-ספטמבר יש רק 30 ימים - 29 FEB 2010 בפברואר 2010 יש רק 28 ימים מי שמשתמש במבנה התאריך צפוי להשתמש בו בצורות מסוימות הדפסת תאריך מציאת התאריך המוקדם יותר מבין שני תאריכים מציאת מספר הימים בין שני תאריכים 40
41 כדי לוודא את נכונות השימוש בתאריכים ולמנוע את שכפולי הקוד בשימוש בתאריכים עלינו לכתוב פונקציות מתאימות לטיפול בתאריכים לצירוף של טיפוס והפעולות האפשריות עליו קוראים טיפוס נתונים - Data type טיפוסי הנתונים המובנים בשפה נקראים טיפוסי נתונים פרימטיביים למשל float,int ומצביעים )לכל אחד מהם פעולות שונות אפשריות( יצירת טיפוסי נתונים מהווה את הבסיס לכתיבת תוכנה גדולה בצורה מסודרת ופשוטה 41
42 #include <stdio.h> #include <string.h> #include <stdbool.h> typedef struct Date_t { int day; char month[4]; int year; Date; const int MIN_DAY = 1; const int MAX_DAY = 31; const int INVALID_MONTH = 0; const int MIN_MONTH = 1; const int MAX_MONTH = 12; const int DAYS_IN_YEAR = 365; מבצעים include רק לקבצים שהכרחיים לקמפול הקוד: ו- scanf printf עבור - stdio.h strcmp עבור - string.h bool עבור הגדרת הטיפוס - stdbool.h הגדרת קבועים const char* const months[] = { "JAN", "FEB", "MAR", " APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC" ; 42
43 /** writes the date to the standard output */ void dateprint(date date); /** Reads a date from the standard input. * Returns true if valid, false otherwise */ bool dateread(date* date); /** 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); /** Translates a month string to an integer */ int monthtoint(char* month); /** Calculates the number of days since 01/01/0000 */ int datetodays(date date); מומלץ לתעד לפחות בקצרה את משמעות הפונקציות מעל הכרזתן תיעוד צריך להופיע מעל הפונקציה ולא בתוכה הערות באמצע הקוד בד"כ מיותרות או מסבירות קוד שהיה צריך להיכתב ברור יותר /** Checks if the date has valid values */ bool dateisvalid(date date); 43
44 int monthtoint(char* month) { for (int i = MIN_MONTH; i <= MAX_MONTH; i++) { if (strcmp(month, months[i - 1]) == 0) { return i; return INVALID_MONTH; int datetodays(date date) { int month = monthtoint(date.month); return date.day + month*(max_day - MIN_DAY + 1) + DAYS_IN_YEAR * date.year; bool dateisvalid(date date) { return date.day >= MIN_DAY && date.day <= MAX_DAY && monthtoint(date.month)!= INVALID_MONTH; 44
45 void dateprint(date date) { printf("%d %s %d\n", date.day, date.month, date.year); יש לבדוק את תקינות הקלט בכניסה לפונקציה במיוחד מצביעים! bool dateread(date* date) { if (date == NULL) { return false; if (scanf("%d %s %d", &(date->day), date->month, &(date->year))!= 3) { המנעו משכפול קוד, אם קוד כלשהו כבר נכתב הקפידו לקרוא לפונקציה המבצעת אותו ולא לכתוב אותו מחדש! אם אין פונקציה מתאימה וקוד חוזר על עצמו - יש לכתוב פונקצית עזר ולקרוא לה! return false; return dateisvalid(*date); 45
46 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; 46
47 int main() { Date date1 = { 21, "NOV", 1970 ; Date date2; if(!dateread(&date2)) { printf("invalid date\n"); return 0; dateprint(date1); dateprint(date2); if (dateequals(date1,date2)) { printf("the dates are equal\n"); else { int diff = datedifference(date1,date2); printf("the dates are %d days apart\n", abs(diff)); return 0; 47
48 כאשר מגדירים טיפוס חדש יש להגדיר גם פונקציות מתאימות עבורו יש להגדיר פונקציות עבור הפעולות הבסיסיות שיצטרך המשתמש בטיפוס יש להגדיר פונקציות כך שתשמורנה על ערכים חוקיים של הטיפוס ותמנענה באגים יצירת טיפוסי נתונים מאפשרת דרך נוחה לחלוקת תוכנה גדולה לחלקים נפרדים 48
49 הפרמטרים ו- argv argc תכנית לדוגמה 49
50 את הפונקציה main המתחילה את ריצת התכנית ניתן להגדיר גם כך: int main(int argc, char** argv) במקרה זה יילקחו הארגומנטים משורת ההרצה של התכנית ויושמו לתוך המשתנים argc ו- argv ע"י מערכת ההפעלה argc יאותחל למספר הארגומנטים בשורת הפקודה )כולל שם הפקודה( argv הוא מערך של מחרוזות כאשר התא ה- n בו יכיל את הארגומנט ה- n בשורת הפקודה בנוסף, קיים איבר אחרון נוסף במערך המאותחל ל- NULL 50
51 #include <stdio.h> int main(int argc, char** argv) { for(int i = 1; i < argc; i++) { printf("%s ", argv[i]); return 0; >./echo Hello world Hello world >./echo Hello > world > cat world Hello לאן נעלמה המילה?world argc 3 כיצד ניתן לכתוב את הקוד הזה ללא שימוש במשתנה?argc argv argv[0] argv[1] argv[2] argv[3] "./echo" "Hello" "world" 51
52 הערות התוך הקוד שימוש במאקרו assert כיבוי המאקרו מתי משתמשים ב- assert 52
53 int main(int argc, char** argv) { if (argc > 3) {... else if ( argc < 2) {... else { // if we are here argc is 2... מה הבעיה בקוד הזה? 53
54 המאקרו assert משמש לוידוא טענות: assert(<expression>);.#include המאקרו מוגדר בקובץ המנשק assert.h ועל מנת להשתמש בו יש לעשות בזמן ריצת הקוד הביטוי מוערך ונבדק אם הוא נכון - לא קורה כלום והקוד ממשיך אם הוא אינו נכון - התכנית נעצרת ומודפסת הודעה המפרטת מיקום הטענה הלא נכונה בקוד. נשתמש ב- assert כדי להגן על הקוד מפני הכנסת באגים. // if we are here argc is 2 assert(argc == 2); שינויים עתידיים המפרים הנחות קיימות יגרמו להתראות מוקדמות הנחות לא נכונות לגבי הקוד יימצאו כבר בפעם הראשונה שהן אינן מתקיימות >./prog a >./prog a b prog: main.c:12: main: Assertion `n==3' failed. Abort 54
55 ניתן לכבות את המאקרו assert ע"י הגדרת הקבוע NDEBUG #define NDEBUG אם NDEBUG מוגדר המאקרו יוחלף בקוד שאינו עושה כלום כך ניתן לשחרר גרסה סופית של הקוד שאינה מואטת ע"י הבדיקות ללא הסרתן ידנית ניתן להגדיר את NDEBUG הדגל ישירות משורת ההידור ע"י הוספת הדגל -DNDEBUG -D<string> מוסיף בתחילת כל קובץ הגדרה של המאקרו בשם <string> שימו לב: קוד שבתוך המאקרו לא יורץ כלל אם המאקרו כבוי אסור לשים חישוביים הכרחיים לקוד בתוך.assert מה הבעיה כאן? מה הפתרון? assert(dosomethingimportant()!= FAILED); 55
56 ב- assert משתמשים לוידוא נכונות של הנחות הנעשות בקוד אם ההנחות שגויות ייתכן וקיימים באגים נוח לבדוק עם assert את נכונות הארגומנטים, ערכי החזרה ואינווריאנטות של טיפוסי נתונים לא משתמשים ב- assert כדי לבדוק קלט מהמשתמש לא משתמשים ב- assert כאשר אסור לעצור את התכנית בגלל השגיאה int getinput() { int input; printf("enter a positive number:"); scanf("%d",&input); assert(input > 0); return input; מה הבעיה ב- assert כאן? מה צריך לעשות במקום? 56
57 ניתן להשתמש במאקרו מומלץ להשתמש ב- assert assert כדי לוודא קיום תנאים בתכנית כדי להקל על דיבוג התכנית ניתן לכבות בקלות את התנהגות המאקרו בגרסאות סופיות בעזרת הגדרת NDEBUG אסור לשים חישובים הכרחיים בתוך assert השימוש ב- assert מתאים רק עבור מציאת באגים של המתכנת ואינו מתאים עבור שגיאות אחרות 57
PowerPoint Presentation
מבוא למדעי המחשב תירגול 6: כתובות ומצביעים 1 תוכנייה מצביעים מצביעים ומערכים, אריתמטיקה של מצביעים 2 3 מצביעים תזכורת- כתובות זיכרון הזיכרון כתובת התא #1000 #1004 #1008 ערך השמור בתא תא 10-4 לא מאותחל
קרא עודPowerPoint Presentation
חלוקה למודולים Abstract data types טיפוסי נתונים מופשטים ADT של מבני נתונים בחירת מבני נתונים תכנות מודולארי מודולים ב- C דוגמה: מודול תאריך 2 אורך החיים של קוד יכול להיות עשרות שנים, לאורך תקופה זו יש
קרא עודSlide 1
מבוא לשפת C תירגול 3: טיפוסים והמרות 1 מה היה שבוע שעבר? משתנים קלט/פלט scanf( ו- printf ( Redirection The Input Buffer 2 תוכנייה טיפוסי משתנים קלט/פלט מעוצב המרה בין טיפוסים קבועים 3 חישוב ממוצע בין שני
קרא עודתכנות מונחה עצמים א' – תש"ע
1 תכנות מונחה עצמים והנדסת תוכנה תשע"ו 2 בנאי העתקה בניית העתק של אובייקט קיים. בניית העתק בעת העברת אובייקט לפונקציה. בניית העתק בעת החזרת אובייקט מפונקציה. ניתן להגדיר בנאי העתקה. אם לא מגדירים, אז הקומפיילר
קרא עודMicrosoft PowerPoint - rec1.ppt
תכנות מונחה עצמים בשפת ++C תר גול מ ספר 1 אוהד ב ר זילי אוניברסיטת תל א ביב חדש חדיש ומחודש תוספות של + +C לשפ ת C 1 #include Hello World using namespace std; int main() cout
קרא עודSlide 1
מבוא למדעי המחשב תירגול 4: משתנים בוליאניים ופונקציות מבוא למדעי המחשב מ' - תירגול 4 1 משתנים בוליאניים מבוא למדעי המחשב מ' - תירגול 4 2 ערכי אמת מבחינים בין שני ערכי אמת: true ו- false לכל מספר שלם ניתן
קרא עודMicrosoft Word B
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: 1. ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודסדנת תכנות ב C/C++
פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבוא למחשבים ושפת C קוד הקורס: 2-7028510 תאריך בחינה: 15.2.2017 משך הבחינה: שעתיים שם המרצה: ד"ר אופיר פלא חומר עזר: פתוח שימוש במחשבון: לא הוראות כלליות:
קרא עודMicrosoft Word - c_SimA_MoedB2005.doc
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד ב', סמסטר א' תשס"ה,.2.2005 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. ודאו כי בטופס שבידיכם עמודים. יש לכתוב
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: שלמה יונה מבוא למדעי המחשב מועד ב', סמסטר א' תשס"ג, 17/2/03 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב את
קרא עודפתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.
פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9. הדפסה ראשונה: מתבצעת לולאה שרצה מאפס עד אורך המחרוזת.
קרא עודPRESENTATION NAME
נכתב ע"י כרמי גרושקו. כל הזכויות שמורות 2010 הטכניון, מכון טכנולוגי לישראל הקצאה דינמית )malloc( מערכים דו-מימדיים סיבוכיות: ניתוח כזכור, כדי לאחסן מידע עלינו לבקש זכרון ממערכת ההפעלה. 2 עד עכשיו: הגדרנו
קרא עודPowerPoint Presentation
רשימות מקושרות עבודה קבצים דוגמה מבנים המצביעים לעצמם רשימות מקושרות 2 נסתכל על המבנה הבא: typedef struct node { int data; struct node* next; *Node; איך נראים המבנים בזיכרון לאחר ביצוע הקוד הבא: Node node1
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java אלכסיי זגלסקי ויעל אמסטרדמר 1 בירוקרטיה אלכסיי זגלסקי שעת קבלה: שני 13:00-14:00, בתיאום מראש משרד: בניין הנדסת תוכנה, חדר 209 יעל אמסטרדמר שעת קבלה: חמישי 15:00-16:00,
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג חשון תשע"ח 12/11/17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד קיץ סמ' שנה תשע"ז 3 שעות משך
קרא עודSlide 1
מבוא לשפת C תירגול 10: מצביעים, מערכים ומחרוזות שבוע שעבר... מצביעים Call by reference 2 תוכנייה קשר מצביע-מערך )אריתמטיקה של מצביעים( העברת מערכים לפונקציה מחרוזות דוגמה 3 קשר מצביע-מערך 4 תזכורת: תמונת
קרא עודSlide 1
1 אובייקטים היום בתרגול: 2.)objects מחלקות )classes( ואובייקטים )מופעים, )fields( שדות המחלקה שיטות הכמסה )methods של מחלקה. ( class מחלקה - עד עכשיו השתמשנו בעיקר בטיפוסים מובנים ופונקציות המבצעות חישובים
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ג מנ' אב תשע"ז 15.08.17 שמות המורים: ציון סיקסיק א' ב- C תכנות מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' ב' שנה תשע"ז 3 שעות
קרא עודMicrosoft PowerPoint - rec3.ppt
תכנו ת מונח ה עצ מים משתני מחלקה, עצמים מוכלים ועצמים מוצבעים א וה ד ברז יל י א ונ יברס י ט ת תל אביב משתנ י מח ל קה Static Members משתני מחלקה members) (static משתנים סטטיים מוגדרי ם בתוך מח לקה ואולם
קרא עודSlide 1
מבוא למדעי המחשב תירגול 7: פונקציות 1 מה היה שבוע שעבר? לולאות מערכים מערכים דו-ממדיים 2 תוכנייה )call by value( פונקציות העברת פרמטרים ע"י ערך תחום הגדרה של משתנה מחסנית הקריאות 3 פונקציות 4 הגדרה של
קרא עודמספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה
עמוד 1 מתוך 11 תשע"א מועד ב סמסטר א' 14.2.2011 תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי המחשב יש לענות על כל 5 השאלות. בכל השאלות במבחן יש לכתוב פונקציות יעילות
קרא עודSlide 1
מבוא לשפת C תירגול 8: פונקציות שבוע שעבר... מערכים מיזוג מערכים ממויינים מערכים דו-ממדיים מבוא לשפת סי - תירגול 8 2 תוכנייה פונקציות ברמת התקשורת הבין-אישית חלוקה לתתי בעיות בדומה למפתח של ספר קריאות גבוהה
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב מחרוזות, חתימה של פונקציה ומעטפות תוכן עניינים טיפוסים מורכבים טיפוסים מורכבים ערך שם טיפוס 12 m int undef. x boolean true y boolean arr int[] כאלה שעשויים להכיל יותר מערך פרימיטיבי אחד
קרא עודשאלהIgal : מערכים דו מימדיים רקורסיה:
אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ח תשרי תשע"ז 30.10.16 שמות המורים: ציון סיקסיק א' תכנות ב- C מבחן ב: 202-1-9011 מס' הקורס : הנדסה מיועד לתלמידי : ב' מועד סמ' קיץ שנה תשע"ו 3 שעות משך
קרא עודSlide 1
מבוא למחשב בשפת C : מערכים חד ודו-ממדיים מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י איתן אביאור.
קרא עודSlide 1
בעיית התוכנית הגדולה C תוכנית גדולה המבצעת פעולות רבות, יכולה להפוך לקשה מאוד לניהול אם נשתמש רק בכלים שלמדנו עד כה: 1. קשה לכתוב ולנפות את התוכנית,. קשה להבין אותה, 3. קשה לתחזק ולתקן אותה, 4. קשה להוסיף
קרא עודPowerPoint Presentation
תכנות מתקדם בשפת Java אוניברסיטת תל אביב 1 תוכנה 1 תרגול 3: עבודה עם מחרוזות )Strings( מתודות )Methods( 1 תכנות מתקדם בשפת Java אוניברסיטת תל אביב 2 מחרוזות )STRINGS( 3 מחרוזות String s = Hello ; מחרוזות
קרא עודPowerPoint Presentation
מבוא למדעי המחשב תירגול 2: מבוא לתיכנות ב- C 1 תוכנייה משתנים קלט/פלט משפטי תנאי מבוא למדעי המחשב מ' - תירגול 3 2 משתנים 3 משתנים- תמונת הזיכרון הזיכרון כתובת התא #1000 10-4 לא מאותחל 67 לכל תא בזיכרון
קרא עודהגשה תוך שבוע בשעת התרגול
מרצה: שולי וינטנר. מתרגל: עזרא דאיה. מבוא למדעי המחשב בחינת מועד א', סמסטר א' תשס"ה, 6..5 משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות: ודאו כי בטופס שבידיכם 8 עמודים. יש לכתוב
קרא עודPowerPoint Presentation
תוכנה 1 תרגול 1: סביבת העבודה ומבוא ל- Java 1 מנהלות אתר הקורס: http://courses.cs.tau.ac.il/software1/1516b/ מתרגלים: ברית יונגמן )שעת קבלה: שלישי ב- 8:00 בתיאום מראש( לנה דנקין )שעת קבלה: שלישי ב- 17:00,
קרא עודMicrosoft PowerPoint - lec2.ppt
מרחב הש מות (namespace) אוהד ברזילי אוניברסיטת תל אביב מה בתו כנית? לקוח וס פק במערכת תוכנה ממשקים הכרת מרחב השמות מניעת תלות פוטנציאלית בין רכיבים במערכת ע"י עיצוב חלופי של מבנה הממשקים 2 א ונ י ב רס
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי
אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', 6.2.2012 הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה מהכיתה במהלך
קרא עודאוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו
אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', 31.1.2017 מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבוני, דולב שרון הנחיות: 1. משך הבחינה: 120 דקות. 2. היציאה
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב תכנות מונחה אובייקטים תוכן עניינים טיפוסי נתונים מורכבים המחלקה String תזכורת לשימוש שעשינו במחלקה String str = new String( Hello ); s.o.p(str.tostring()); s.o.p(str.charat(4)); s.o.p(str.equals(
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב שימוש במחסנית - מחשבון תוכן עניינים prefix כתיבת ביטויים ב-,infix ו- postfix postfix prefix,infix ביטויים ב- כתיבת ו- infix נוסח כתיבה ב- (operator אנו רגילים לכתוב ביטויים חשבוניים כדוגמת
קרא עודמבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב
מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן שלוש שעות (180
קרא עודתרגול 1
מבוא למדעי המחשב 2019 תרגול 5 מחרוזות, חתימות ורקורסיה מחרוזות רצף של תווים רקורסיה קריאה של מתודה לעצמה באופן ישיר או עקיף ראינו בהרצאה מחרוזות: תווים, חתימות: העמסה- String,הצהרה, overloading אתחול רקורסיה:
קרא עודמבוא לתכנות ב- JAVA תרגול 7
מבוא לתכנות ב- JAVA תרגול 8 תזכורת - מבנה של פונקציה רקורסיבית.2 פונקציה רקורסיבית מורכבת משני חלקים עיקריים 1. תנאי עצירה: מקרה/מקרים פשוטים בהם התוצאה לא מצריכה קריאה רקורסיבית לחישוב צעד רקורסיבי: קריאה
קרא עודמספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי
מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בינסקי הנחיות: יש לענות על כל השאלות. יש לענות על כל
קרא עודמבוא למדעי המחשב - חובלים
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב סמסטר ב' תשע"ב בחינת סיום, מועד ב',.02..9.7 מרצה: אורן וימן מתרגלים: נעמה טוויטו ועדו ניסנבוים מדריכי מעבדה: מחמוד שריף ומיקה עמית משך המבחן: שעתיים חומר
קרא עודמבוא למדעי המחשב - חובלים
החוג למדעי המחשב אוניברסיטת חיפה מבוא למדעי המחשב סמסטר א' תשע"ג בחינת סיום, מועד ב', 20.02.2013 מרצה: ריטה אוסדצ'י מתרגלת: נעמה טוויטו מדריך מעבדה: מחמוד שריף משך המבחן: שעתיים חומר עזר: ספר של Kernighan
קרא עודúåëðä 1 - çæøä
Arrays and Strings מערך - אוסף משתנים בעלי שם משותף. הפנייה לכל איבר נעשית ע י אינדקס. ב- C מערך מוגדר בזיכרון רציף. האיבר הראשון נמצא בכתובת הנמוכה. לדוגמא, אם a מוגדר החל מכתובת :1000 char a[7]; Element
קרא עודשבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע
שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים עליו כרגע )A מצביע עליו(. יש שני סוגי פקודות, פקודת
קרא עודמבוא למדעי המחשב
מבוא למדעי המחשב המחלקה Object תוכן עניינים Object הורשה והמחלקה ערך שם טיפוס DynamicIntArray da data size incrementsize DynamicArray תזכורת - Object[] data; int size; int incrementsize; DynamicArray זה
קרא עודSlide 1
Introduction to Programming in C תרגול 7 1 1 נושאים מצביעים רקע אופרטורים על מצביעים מצביעים כפרמטרים לפונקציה הקצאת זיכרון דינאמית Malloc free תאור הזיכרון של המחשב: מצביעים ניתן לחשוב על זיכרון המחשב
קרא עודאוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם
אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג,.6.013 משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם 8 עמודי שאלון )כולל עמוד זה(. עליכם לכתוב את התשובות על
קרא עודTutorial 11
מבוא לשפת C תרגול 8: מערכים רב-ממדיים תרגילים בנושא מערכים ורקורסיה מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקנשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב" נכתב ע"י טל כהן, עודכן ע"י
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ
אוניברסיטת בן גוריון בנגב תאריך המבחן: 12.02.17 שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: 202.1.9031 מס' הקורס : הנדסת תעשיה וניהול מיועד לתלמידי : א' מועד א' סמ' שנה תשע"ד 3 שעות משך
קרא עודשקופית 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
מבוא למחשב בשפת C צעדים הרצאה 2: ראשונים בשפת C מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור וסאהר אסמיר עבור הקורס "מבוא למדעי המחשב". עודכן ע"י דן רביב נכתב על-ידי טל כהן, נערך ע"י
קרא עודמהוא לתכנות ב- JAVA מעבדה 3
מבוא לתכנות ב- JAVA מעבדה 3 נושאי התרגול לולאות ניפוי שגיאות לולאות - הקדמה כיצד הייתם כותבים תוכנית שתדפיס את המספרים השלמים בין 1 ל- 100 בעזרת הכלים שלמדתם עד עתה? חייבת להיות דרך אחרת מאשר לכתוב 100
קרא עודSlide 1
מבוא לתכנות ב- JAVA תרגול 5 מה בתרגול מחרוזות מערכים דו ממדיים מחרוזות (Strings) מחרוזת היא רצף של תווים. immutable על מנת ליצור ולטפל במחרוזות נשתמש במחלקה String למחלקה String מתודות שונות שמאפשרות פעולות
קרא עודמבוא לתכנות ב- JAVA תרגול 11
מבוא לתכנות ב- JAVA תרגול 11 רשימה מקושרת אוסף סדור של איברים מאותו טיפוס. קודקוד ברשימה )Node( מכיל את המידע + הצבעה לקודקוד הבא ברשימה data next first רשימה :)List( מיוצגת ע"י מצביע לאיבר הראשון ברשימה
קרא עודמבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי
מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדיקות אחרונות לפני מסירה )עמודים 8-11( מבנה השאלון 5
קרא עודPowerPoint Presentation
1 תוכנה 1 תרגול 1: מנהלות, סביבת העבודה ומבוא ל- Java 1 2 מנהלות I מתרגלים: יעל אמסטרדמר )שעת קבלה: חמישי ב- 12, בתיאום מראש( דביר נתנאלי )שעת קבלה: רביעי ב- 17, בתיאום מראש( http://courses.cs.tau.ac.il/software1/1415a
קרא עודמשימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק
משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות 2 הפשטה שאלות כצעד ראשון נפתור בעיה הרבה יותר פשוטה האם כבר
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527 kadman11@gmail.com
קרא עודMicrosoft PowerPoint - T-10.ppt [Compatibility Mode]
מבוא למחשב בשפת Matlab לולאות בלוקי try-catch :10 תרגול מבוסס על השקפים שחוברו ע"י שי ארצי, גיתית רוקשטיין, איתן אביאור, סאהר אסמיר וטל כהן עבור הקורס "מבוא למדעי המחשב" נכתב על-ידי רמי כהן,אולג רוכלנקו,
קרא עודתוכן העניינים
הוצאת חושבים קדימה הילה קדמן # חלק ב יעוץ מקצועי: חיים אברבוך מותאם לתכנית הלימודים החדשה בבתי הספר התיכוניים מהדורה חמישית הוצאת חושבים קדימה ת.ד. 1293 רעות 71908 www.kadman.net הילה קדמן 0522 525527
קרא עודתרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש המתרגם משימה: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם 2 שאלות האם כבר יש
קרא עודמצגת של PowerPoint
מבוא כללי לתכנות ולמדעי המחשב תרגול מס' 1 דין שמואל dshmuel110@gmail.com 1 1. מנהלות מרצה: אמיר רובינשטיין, amirr@tau.ac.il שעות קבלה: לשאלות קצרות - מייד לאחר השיעור. ניתן לתאם במייל שעות אחרות. מתרגל:
קרא עודMicrosoft Word - Ass1Bgu2019b_java docx
ת ר ג י ל 1 ב ק ו ר ס מ ב ו א לתכנות 202.1.9031 JAVA סמסטר ב, ת נ א י ם ו ל ו ל א ו ת תאריך אחרון להגשה בציון מלא : 02.04.19 עד שעה : 23:55, כ ל יום איחור ל א מ א ו ש ר א ו ח ל ק ממנו מודריד 10 נקודות
קרא עודמבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו
מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו 4 דפי נוסחאות. בדקו שכל העמודים ברשותכם. ב. משך המבחן
קרא עודתשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(
תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(http://mdle.tau.ac.il/) בלבד הגשת התרגיל תעשה במערכת ה- mdle aviv
קרא עודMicrosoft Word - דוגמאות ב
הפקולטה למדעי המחשב פרופ' חיים גוטסמן, מר רן רובינשטיין עומר סטרולוביץ, כרמי גרושקו, אלכסנדר ליבוב, מיכאל בלטקסה, ראידה נעאמנה, שי מרקנטי, גיא שקד הטכניון - מכון טכנולוגי לישראל 3.10.2011 מבוא לתכנות מערכות
קרא עודPowerPoint Presentation
מבוא ל-++ C משתנים מיוחסים הקצאת זיכרון דינאמית קלט/פלט ב-++ C מחלקות namespaces const 2 C היא שפת תכנות שנבנתה מעל ++C ++C מוסיפה מגוון רב של תכונות מתקדמות #include using namespace std; בעיקר
קרא עודתרגיל בית מספר 1#
ב 4 תרגיל בית מספר - 1 להגשה עד 72 באוקטובר בשעה ::725 קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס, תחת התיקייה.assignments חריגה מההנחיות תגרור ירידת ציון / פסילת התרגיל. הנחיות והערות ספציפיות
קרא עודמבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2
מבוא למדעי המחשב תרגול מס' 2 נושאים משתנים טיפוסים אופרטורים פונקציות מתמטיות מהמחלקה Math המרת טיפוסים תנאים ולולאות 1 2 תזכורת משיעור קודם תזכורת... תכנית מחשב נכתבת כטקסט בקובץ. הטקסט כתוב בשפת תכנות
קרא עודתאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה
תאריך פרסום: 01.01.15 תאריך הגשה: 15.01.15 מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש להגיש בזוגות. -העבודה חייבת להיות מוקלדת. -הקובץ חייב
קרא עוד2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ
מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מספיק עמדות לכולם ולכן מומלץ לעבוד ביחידים). במהלך המעבדה יהיה עליכם לבצע משימות. אם תצטרכו עזרה בשלב
קרא עודתורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב
תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב, מילה ושפה לטובת מי ששכח חומר זה, או שלא למדו מעולם,
קרא עודבס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנ
בס"ד תרגיל 3 מועד אחרון ל כללי בתרגיל זה עליכם לכתוב תוכנה שמדמה מאגר נתונים של חנות. את מוצרי החנות תייצגו באמצעות עצים ורשימות מקושרות יהיה עליכם לנהל את מאגר הנתונים של החנות, לבצע אליו שינוים ושאילתות
קרא עודמבוא לאסמבלי
1 ברק גונן תוכנית שבנויה מחלקי קוד נפרדים המשולבים זה בזה מאפיינים: נקודת כניסה אחת נקודת יציאה אחת מבצעים פעולה מוגדרת נקראים פרוצדורות ברק גונן 2 קוד קצר יותר לא צריך לחזור על חלקי קוד שאלה למחשבה: האם
קרא עודאוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד
אוניברסיטת בן גוריון בנגב תאריך המבחן: 29.01.19 שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות 202.1.9031 מס' הקורס : מיועד לתלמידי : הנדסת תעשיה וניהול שנה תשע"ט א' סמ' א' מועד 3 שעות משך
קרא עוד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
קרא עודמקביליות
תכונות שמורה Invariant Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 בדיקות מודל Checking( )Model מערכת דרישות מידול פירמול בדיקות מודל )Model Checking( מודל של המערכת תכונות פורמליות סימולציה
קרא עודPowerPoint Presentation
תוכנה 1 3 תרגול מס' מתודות ותיכון לפי חוזים חוזה בין ספק ללקוח חוזה בין ספק ללקוח מגדיר עבור כל שרות: תנאי ללקוח - "תנאי קדם" precondition - - תנאי לספק "תנאי אחר".postcondition לקוח ספק 2 תנאי קדם )preconditions(
קרא עוד1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_match הפונקציה preg_m
1 תבניות טקסט מהי תבנית טקסט? שימוש ב- Characters Meta שימוש ב- Expression Grouping שימוש ב- Quantifiers תת תבניות הפונקציה preg_ הפונקציה preg all הפונקציה str_replace הפונקציה preg_replace 2 מהי תבנית
קרא עודשעור 6
שעור 6 Open addressing אין רשימות מקושרות. (נניח שהאלמנטים מאוחסנים בטבלה עצמה, לחילופין קיים מצביע בהכנסה המתאימה לאלמנט אם אין שרשור). ב- addressing open הטבלה עלולה להימלא ב- factor α load תמיד. במקום
קרא עודמבוא למדעי המחשב
מבוא כללי לתכנות ולמדעי המחשב 1843-0310 מרצה: אמיר רובינשטיין מתרגל: דין שמואל אוניברסיטת תל אביב סמסטר חורף 2017-8 חלק ב - מבוא לקריפטוגרפיה שיעור 5 (offset מונחים בסיסיים צופן קיסר (היסט,.1.2 1 Today
קרא עוד234114
)234117 )234114 \ סמסטר חורף תשע"ז 2017 מבחן מסכם מועד א', 21 לפברואר 2 3 4 1 1 מספר סטודנט: רשום/ה לקורס: משך המבחן: 3 שעות. חומר עזר: אין להשתמש בכל חומר עזר. הנחיות כלליות: מלאו את הפרטים בראש דף זה
קרא עודמקביליות
תכונות בטיחות Safety Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון 2 תזכורת: תכונות זמן ליניארי Linear Time Properties תכונות זמן-ליניארי מתארות קבוצת עקבות שהמערכת צריכה לייצר מכוונים ללוגיקה
קרא עודHTML - Hipper Text Makeup Language
תכנות בסביבת האינטרנט 1 תיבת טקסט טופס הטופס הוא הדרך של בעלי האתר לקבל משוב מהגולשים, מאפשר לגולש להתחבר לאתר כחבר, מאפשר לבצע רכישות באתרי קניות וכד'. כשהגולש ממלא את הטופס, מועבר תוכן הטופס לדף מיוחד
קרא עודמבוא למדעי המחשב
מבוא כללי לתכנות ולמדעי המחשב 1843-0310 מרצה: אמיר רובינשטיין מתרגל: דין שמואל אוניברסיטת תל אביב סמסטר חורף 2017-8 חלק א - השיטה הבינארית שיעור 5 ו- 1? ספירה בבסיס 2 ואיך אומרים "hello" עם 0 1 ממעגלים
קרא עודSlide 1
תוכנייה How a computer works? חומרת המחשב רקע תוכנה רקע צעדים ראשונים בשפת C * חלקים מפרק זה מבוססים על: http://www.eingang.org/lecture 4 חומרה )Hardware( אנו מוקפים מחשבים,,Laptop טלוויזיה,,DVD ועוד.
קרא עודMicrosoft PowerPoint - lec9.ppt
ת כנ ות מונ ח ה עצמי ם בשפת + +C ירוש ה אוהד ברזילי אונ יברסיטת תל אביב ירוש ה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודפייתון
שיעור 12: מילונים ברק גונן 1 או מילון, :hash table או,dictionary זוגות של מפתחות keys וערכים values מילון מוגדר על ידי סוגריים מסולסלים { } לדוגמה: מילון שמכיל ציונים, המפתח הוא מספר ת.ז ערך מפתח הגדרה
קרא עודיצוא לחשבשבת תוכן עיניינים הגדרות - חשבונות בנק...2 הגדרות - הגדרות חשבשבת... 3 הגדרות - כרטיסי אשראי... 4 הגדרות - סוגי הכנסה... 5 יצוא לחשבשבת...6 י
יצוא לחשבשבת תוכן עיניינים הגדרות - חשבונות בנק...2 הגדרות - הגדרות חשבשבת... 3 הגדרות - כרטיסי אשראי... 4 הגדרות - סוגי הכנסה... 5 יצוא לחשבשבת...6 יצוא קופה לחשבשבת חלונות...01 כללי מדריך זה מסביר את
קרא עודMicrosoft Word - c_SimA_MoedA2006.doc
מבוא למדעי המחשב בחינת מועד א', סמסטר א' תשס"ו,..006 מרצה: מתרגלת: גב' יעל כהן-סיגל. גב' ליאת לוונטל. משך המבחן: שעתיים וחצי. חומר עזר: מותר כל חומר עזר, מלבד מחשב. הנחיות:. יש לענות על כל השאלות.. קראו
קרא עודתרגול מס' 1
תרגול 6 הסתעפויות 1 מבוסס על שקפים מאת יאן ציטרין קפיצות לא מותנות Unconditional Branch br label PC לאחר ה- fetch של פקודת ה- branch PC לאחר הביצוע של פקודת ה- branch pc label br label הקפיצה מתבצעת תמיד,
קרא עודMicrosoft PowerPoint - lec10.ppt
תכנו ת מ ונחה ע צמ י ם בשפת ++C אוהד ברזילי אוניברסיטת תל אביב ירו ש ה מרו בה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand
קרא עודמערכות הפעלה
מערכות הפעלה תרגול 2 קריאות מערכת ב- Linux תוכן התרגול קריאה לפונקציות ב- Linux קריאה לשירותי מערכת ב- Linux 2 תזכורת - תכנית Linux ראשונה hello.c #include int main() { char *str= Hello ; printf)
קרא עוד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- (כל
קרא עודProgramming
קורס תכנות שיעור עשירי: מיונים, חיפושים, קצת ניתוח זמני ריצה, קצת תיקון טעויות ועוד על רשימות 1 רשימה מקושרת רשימה היא אוסף סדור של פעולות רשימה לעומת מערך ערכים 3 5 7 9 typedef struct node { int data;
קרא עוד