1 / 22

תרגול סיכום וחזרה

תרגול סיכום וחזרה. שאלות ידע בסיסי. #include < stdio.h > int main() { int i =10, stop=0; while(!stop && ( i -- >= 0)) { stop=!(i%5); printf ("%d n",i ); } printf ("%d n",i ); return 0; }. חורף תשס"ט – מועד א. שאלות ידע בסיסי. #include <stdio.h>

Télécharger la présentation

תרגול סיכום וחזרה

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. תרגול סיכום וחזרה

  2. שאלות ידע בסיסי... #include <stdio.h> int main() { inti=10, stop=0; while(!stop && (i-- >= 0)) { stop=!(i%5); printf("%d\n",i); } printf("%d\n",i); return 0; } חורף תשס"ט – מועד א

  3. שאלות ידע בסיסי... #include <stdio.h> enum BOOL{TRUE,FALSE}; int main() { enum BOOL mybool; mybool=TRUE; if (mybool) printf("hello1\n"); else printf("hello2\n"); return 0; } חורף תשס"ט – מועד ב

  4. שאלות ידע בסיסי... #include <stdio.h> int main() { int z=5; int x=1; int y=(--x)?(z--):(++z); printf("%d\n%d\n%d\n",x,y,z); return 0; }

  5. שאלות ידע בסיסי... #include <stdio.h> int main() { inti='1'-1; for (i++;i<'9';i++) putchar(i); return 0; }

  6. שאלות ידע בסיסי... #include <stdio.h> int main() {  int y='\0'; switch(y) { case (0): printf("hello1\n"); case ('0'): printf("hello2\n"); case (1): } return 0; }

  7. מצביעים • יש לנו שני אופרטורים חשובים : *ו- & • * - גורם לנו לרדת רמה – נותן את התוכן הנמצא בכתובת • & - מעלה אותנו רמה – נותן את כתובת המשתנה • חשוב לשים לב איפה מופיעה ה-*. אם היא מופיעה בהגדרת המשתנה או בחתימה של פונקציה, היא חלק מהטיפוסלדוג: int* x;int f(int *y); • שימו לב – אסור להשתמש במצביע לא מאותחל – לפני שהוא מצביע על משהו.לדוגמה:int *p;*p=3;

  8. שאלות על מצביעים: #include <stdio.h> int g(int * x) { *x-=8; return 7; } int f(int x) { g(&x); printf("%d",x); return 5; } int main() { int x=9; f(x); printf("%d",x); return 0; }

  9. מערכים • חשוב לזכור: שם המערך בעצם מצביע על התא הראשון במערך • אסור בתכלית האיסור לשנות את המקום אליו מצביע שם המערך – זה אפילו לא עובר קומפילציה! • לדוגמה:int A[6], B[6];A=B; • כאשר מבצעים sizeof על מערך מקבלים את מספר הבתים שכל המערך תופס. • אופרטור []:arr[i]*(arr+i) p[i]*(p+i)

  10. שאלות על מערכים #include <stdio.h> int main() { int a[8]={1,2,3,4}; printf("%d", ((int)(sizeof(a)/sizeof(int)))); return 0; }

  11. אביב תשס"ח – מועד א • בהנתן מערך של מספרים שלמים a[], נגדיר את מערך ההפרשים שלו, b[] כמערך שבתא ה-0 מכיל את האיבר הראשון של a (כלומר b[0]=a[0]), ובכל תא אחר i הוא מכיל את ההפרש בין האיבר a[i] לאיבר הקודם לו (כלומר b[i]=a[i]-a[i-1]). • לדוגמה, עבור המערך a[] = {1, -2, 5, 3, 6}מערך ההפרשים יהיה b[] = {1,-3, 7, -2, 3}

  12. א. כתבו פונקציה שמקבלת את מערך ההפרשים b[] ואינדקס k" ומחזירה את תוכן המערך המקורי בתא בעל אינדקס k, כלומר a[k]. על הפונקציה לעמוד בסיבוכיות זמן O(k) ומקום O(1) int get(int b[],int k) {int sum = b[0]; int i; for (i = 1; i<=k; i++) sum+=b[i]; return sum; }

  13. ב. לצורך הסעיף הבא נתונה פונקציית העזר int magicget (int b[], int k)המקבלת מערך הפרשים b[] ואינדקס k, ומחזירה את תוכן המערך המקורי a[k] בזמן O(logk), ומקום O(1). כתבו פונקציה המקבלת מערך הפרשים b[], את אורכו n, אינדקס k וערך x, ומשנה את המערך b[] כך שערך המערך המקורי בתא ה-k יהיה x, כלומר a[k]=xעל הפונקציה לעמוד בסיבוכיות זמן O(logk), וסיבוכיות מקום O(1).

  14. void change(int b[],int n, int k, int x) { int old; if (k>=n) return; old = magicget(b,k); b[k] += x-old; if(k+1<n) b[k+1]-= x-old; } • חשוב לשים לב ל: • עמידה בדרישות הסיבוכיות • מקרי הקצה

  15. ג. באמצעות שימוש בפונקציות change() ו-magicget() מהסעיפים הקודמים, ממשו את הפונקציה הבאה שמקבלת את מערך ההפרשים b, את אורכו n ושני אינדקסים i ו-j של תאים במערך, ומשנה את התוכן של b כך שהאיברים a[i] ו-a[j] במערך המקורי יתחלפו. דרישות סיבוכיות: זמן - O(logn), מקום – O(1).

  16. void swap (int b[], int n, int i, int j) { int a_i, a_j; a _i= magicget(b,i); a_j=magicget(b,j); change(b,j,a_i); change(b.i,a_j); }

  17. נתונים שני מערכים a ו-b המכילים מספרים שלמים הממויינים בסדר עולה. כתבו פונקציה המקבלת שני מערכים a ו-b מהסוג הנ"ל, בגודל n ו-m בהתאמה, ומספר שלם k ומחזירה 1 אם קיימים שני איברים כך שמתקיים . אחרת, על הפונקציה להחזיר 0. לדוגמה – עבור המערכים הפונקציה תחזיר 1 עבור k=5 ו-0 עבור k=4 דרישות סיבוכיות – זמן מקום a b

  18. פתרון intis_diff(int a[], int n, int b[], int m, int k) { inti=0, j=0; while (i<n && j<m) { if (k==a[i]-b[j]) return 1; if (k<(a[i]-b[j])) j++; else i++; } return 0; }

  19. מחרוזות • מחרוזות הן רצף תווים המסתיימים בתו המיוחד ‘\0’. • מחרוזות קבועות המופיעות בקוד נשמרות באיזור מיוחד אליו יש רק גישת קריאה. כל נסיון לכתוב לאיזור זה גורר שגיאת זמן ריצה. • מחרוזות שאינן קבועות יאוחסנו במערכים. שימו לב שאורכו של המערך יכול להיות הרבה יותר ארוך מהמחרוזת עצמה, אולם אותנו לא מעניין מה קורה אחרי ה-‘\0’

  20. include <stdio.h> int main() { char a[] ="google"; *a='c'; printf("%s\n",a); printf("%s\n",a+3); return 0; }

  21. #include <stdio.h> int main() { char * str1="hello"; char * str2="world"; str1[0]=str2[2]; printf("%s\n",str1); return 0; }

  22. דברים חשובים שכדאי לדעת לפני שמתחילים לפתור שאלה ב... סיבוכיות חוקי לוגריתם: סכום סדרה חשבונית: סכום סדרה הנדסית: טורים נוספים:

More Related